80 lines
2.5 KiB
Python
80 lines
2.5 KiB
Python
#!/usr/bin/env python3
|
|
|
|
import json
|
|
import os, sys
|
|
import uuid
|
|
|
|
if __name__=="__main__":
|
|
if len(sys.argv) != 2:
|
|
print(f"Usage: {sys.argv[0].split("/")[-1]} [Flatpak Manifest file]")
|
|
exit()
|
|
if not os.path.exists(sys.argv[1]):
|
|
print("Error: Manifest file doesnt exists.")
|
|
exit()
|
|
if os.path.isdir(sys.argv[1]):
|
|
print("Error: Wrong file.")
|
|
exit()
|
|
with open(sys.argv[1], "r") as f:
|
|
try:
|
|
manifest = json.load(f)
|
|
except:
|
|
print("Error: Wrong file.")
|
|
exit()
|
|
|
|
print(f"\nManifest Info\n==========================\n"
|
|
f"App | {manifest['app-id']}\n"
|
|
f"Runtime | {manifest['runtime']}//{manifest["runtime-version"]}\n"
|
|
f"SDK | {manifest['sdk']}\n"
|
|
f"CMD | {manifest['command']}\n"
|
|
f"Modules | \n - "
|
|
f"{"\n - ".join([f"{i["name"]}\n - {i["sources"][0]["url"]}" for i in manifest["modules"]])}\n"
|
|
)
|
|
|
|
global_script = []
|
|
WORKDIR = ""
|
|
workdir = f"./build-{str(uuid.uuid1())[:8]}" if not WORKDIR else WORKDIR
|
|
print(f"Set workdir to {workdir}\n")
|
|
|
|
global_script.append(f"if [ $(ls \"{workdir}\" | wc -l) -ne 0 ]; then exit; fi")
|
|
global_script.append(f"mkdir -p {workdir}")
|
|
global_script.append(f"ROOTDIR=$(realpath {workdir})")
|
|
global_script.append("cd ${ROOTDIR}")
|
|
|
|
for module in manifest["modules"]:
|
|
script = []
|
|
name = module["name"]
|
|
build = module["buildsystem"]
|
|
builddir = module.get("builddir", False)
|
|
sources = module["sources"]
|
|
opts = module.get("config-opts", [])
|
|
|
|
for src in sources:
|
|
if src["type"] == "git":
|
|
script.append(f"git clone {src["url"]} ./{name}.src")
|
|
script.append(f"cd ./{name}.src")
|
|
if src.get("tag"):
|
|
# Need to fetch tags?
|
|
script.append(f"git checkout {src["tag"]}")
|
|
elif src.get("commit"):
|
|
script.append(f"git checkout {src["commit"]}")
|
|
elif src.get("branch"):
|
|
# Switch to branch?
|
|
script.append(f"git checkout {src["branch"]}")
|
|
|
|
elif src["type"] == "file":
|
|
script.append(f"cp -r {src["url"]} {workdir}/{name}.src")
|
|
|
|
if build == "meson":
|
|
script.append("meson setup build/")
|
|
script.append("meson configure build/ " + " ".join(opts))
|
|
script.append("cd build/; ninja")
|
|
script.append("ninja install")
|
|
|
|
elif build == "cmake-ninja":
|
|
script.append("cmake .")
|
|
script.append("cd build/; ninja; ninja install")
|
|
|
|
global_script += script
|
|
global_script.append("cd ${ROOTDIR}")
|
|
|
|
print("\n".join(global_script)) |