solus-packages/common/Scripts/yconvert.py
Evan Maddock 6daca3ea17
common: Convert yconvert.py to Python 3
Signed-off-by: Evan Maddock <maddock.evan@vivaldi.net>
2024-04-02 15:29:55 -04:00

124 lines
3.4 KiB
Python
Executable file

#!/usr/bin/env python3
# yconvert.py - convert existing package into YML format
#
# USAGE: yconvert.py pspec.xml
# Copyright 2015 Ikey Doherty <iikey@solus-project.com>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
import xml.etree.ElementTree as ET
import sys
import os
import subprocess
if __name__ == "__main__":
if len(sys.argv) != 2:
print("Provide pspec.xml")
sys.exit(1)
if not sys.argv[1].endswith("pspec.xml"):
print("This doesn't look like a pspec.xml. Aborting")
sys.exit(1)
if not os.path.exists(sys.argv[1]):
print("pspec.xml doesn't exist - aborting")
sys.exit(1)
tree = ET.parse(sys.argv[1])
root = tree.getroot()
archive = root.findall("Source/Archive")[0]
name = root.findall("Source/Name")[0].text
homepage = None
t = root.findall("Source/Homepage")
if t and len(t) > 0:
homepage = t[0].text
lic = root.findall("Source/License")
licenses = [x.text for x in lic]
hist = root.findall("History")
last_update = hist[0].findall("Update")[0]
rel = int(last_update.attrib["release"]) + 1
version = str(last_update.findall("Version")[0].text)
description = root.findall("Source/Description")[0].text
summary = root.findall("Source/Summary")[0].text
depsi = root.findall("Source/BuildDependencies/Dependency")
pcdeps = [
"pkgconfig(%s)" % x.text
for x in depsi
if "type" in x.attrib and x.attrib["type"] == "pkgconfig"
]
pcdep32 = [
"pkgconfig32(%s)" % x.text
for x in depsi
if "type" in x.attrib and x.attrib["type"] == "pkgconfig32"
]
deps = [
x.text
for x in depsi
if "pkgconfig(%s)" % x.text not in pcdeps
and "pkgconfig32(%s)" % x.text not in pcdep32
]
url = archive.text
file = url.split("/")[-1]
r = 0
try:
r = subprocess.call("wget {}".format(url), shell=True)
if r != 0:
print("Failed to download file")
sys.exit(1)
except OSError as e:
print("Failed to download file", e)
sys.exit(1)
sha256 = subprocess.getoutput("sha256sum {}".format(file)).split()[0].strip()
os.unlink(file)
d = """
name : %(name)s
version : %(version)s
release : %(release)s
source :
- %(tarball)s : %(sha256)s
""" % {
"name": name,
"version": version,
"release": rel,
"tarball": url,
"sha256": sha256,
}
if homepage:
d += "homepage : %s\n" % homepage
d += "license :\n"
for lic in licenses:
d += " - %s\n" % lic
d += "summary : %s\n" % summary
if len(pcdeps) > 0 or len(deps) > 0:
d += "builddeps :\n"
for dep in pcdeps:
d += " - %s\n" % dep
for dep in pcdep32:
d += " - %s\n" % dep
for dep in deps:
d += " - %s\n" % dep
d += "description : |\n"
for line in description.split("\n"):
line = line.strip()
d += " %s\n" % line
d += """setup : |
%configure
build : |
%make
install : |
%make_install
"""
with open("package.yml", "w") as output:
output.writelines(d.strip() + "\n")