#!/usr/bin/python3 import subprocess import os import json import shutil def prepare (target): #clone the flatpak json cmd = ['git', 'submodule', 'update', '--remote', 'contrib/flatpak'] subprocess.run (cmd, check=True) #clone the submodules for that cmd = ['git', 'submodule', 'update', '--init', '--remote', 'shared-modules/'] subprocess.run (cmd, cwd='contrib/flatpak', check=True) #parse json if os.path.isdir ('build'): shutil.rmtree ('build') data = {} with open ('contrib/flatpak/org.freedesktop.fwupd.json', 'r') as rfd: data = json.load (rfd) platform = 'runtime/%s/x86_64/%s' % (data['runtime'], data['runtime-version']) sdk = 'runtime/%s/x86_64/%s' % (data['sdk'], data['runtime-version']) num_modules = len (data['modules']) #update to build from master data["branch"] = "master" for index in range(0, num_modules): module = data['modules'][index] if type (module) != dict or not 'name' in module: continue name = module['name'] if not 'fwupd' in name: continue data['modules'][index]['sources'][0].pop ('url') data['modules'][index]['sources'][0].pop ('sha256') data['modules'][index]['sources'][0]['type'] = 'dir' data['modules'][index]['sources'][0]['skip'] = [".git"] data['modules'][index]['sources'][0]['path'] = ".." #write json os.mkdir('build') with open (target, 'w') as wfd: json.dump(data, wfd, indent=4) os.symlink ('../contrib/flatpak/shared-modules','build/shared-modules') # install the runtimes (parsed from json!) repo = 'flathub' repo_url = 'https://dl.flathub.org/repo/flathub.flatpakrepo' print ("Installing dependencies") cmd = ['flatpak', 'remote-add', '--if-not-exists', repo, repo_url] subprocess.run (cmd, check=True) cmd = ['flatpak', 'install', '--assumeyes', repo, sdk] subprocess.run (cmd, check=True) cmd = ['flatpak', 'install', '--assumeyes', repo, platform] subprocess.run (cmd, check=True) def build (target): cmd = ['flatpak-builder', '--repo=repo', '--force-clean', '--disable-rofiles-fuse', 'build-dir', target] subprocess.run (cmd, check=True) cmd = ['flatpak', 'build-bundle', 'repo', 'fwupd.flatpak', 'org.freedesktop.fwupd'] subprocess.run (cmd, check=True) if __name__ == '__main__': t = os.path.join ('build', 'org.freedesktop.fwupd.json') prepare (t) build (t) # to run from the builddir: # sudo flatpak-builder --run build-dir org.freedesktop.fwupd.json /app/libexec/fwupd/fwupdtool get-devices # install the single file bundle # flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo # flatpak install fwupd.flatpak # to run a shell in the same environment that flatpak sees: # flatpak run --command=sh --devel org.freedesktop.fwupd # to run fwupdtool as root: # sudo flatpak run org.freedesktop.fwupd --verbose get-devices