#!/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, strict=False) 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 main data["branch"] = "main" 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 -i flatpak run org.freedesktop.fwupd --verbose get-devices