mirror of
https://git.proxmox.com/git/fwupd
synced 2025-05-26 00:47:32 +00:00
169 lines
5.7 KiB
Python
Executable File
169 lines
5.7 KiB
Python
Executable File
#!/usr/bin/python3
|
|
#
|
|
# Copyright (C) 2017 Dell, Inc.
|
|
#
|
|
# SPDX-License-Identifier: LGPL-2.1+
|
|
#
|
|
import os
|
|
import sys
|
|
import xml.etree.ElementTree as etree
|
|
|
|
|
|
def parse_control_dependencies(requested_type):
|
|
TARGET = os.getenv("OS")
|
|
QUBES = os.getenv("QUBES")
|
|
deps = []
|
|
dep = ""
|
|
|
|
if TARGET == "":
|
|
print("Missing OS environment variable")
|
|
sys.exit(1)
|
|
OS = TARGET
|
|
SUBOS = ""
|
|
if TARGET:
|
|
split = TARGET.split("-")
|
|
if len(split) >= 2:
|
|
OS = split[0]
|
|
SUBOS = split[1]
|
|
else:
|
|
import lsb_release
|
|
|
|
OS = lsb_release.get_distro_information()["ID"].lower()
|
|
import platform
|
|
|
|
SUBOS = platform.machine()
|
|
|
|
tree = etree.parse(os.path.join(os.path.dirname(sys.argv[0]), "dependencies.xml"))
|
|
root = tree.getroot()
|
|
for child in root:
|
|
if not "type" in child.attrib or not "id" in child.attrib:
|
|
continue
|
|
for distro in child:
|
|
if not "id" in distro.attrib:
|
|
continue
|
|
if distro.attrib["id"] != OS:
|
|
continue
|
|
control = distro.find("control")
|
|
if control is None:
|
|
continue
|
|
packages = distro.findall("package")
|
|
for package in packages:
|
|
if SUBOS:
|
|
if not "variant" in package.attrib:
|
|
continue
|
|
if package.attrib["variant"] != SUBOS:
|
|
continue
|
|
if package.text:
|
|
dep = package.text
|
|
else:
|
|
dep = child.attrib["id"]
|
|
if child.attrib["type"] == requested_type and dep:
|
|
version = control.find("version")
|
|
if version is not None:
|
|
dep = "%s %s" % (dep, version.text)
|
|
inclusions = control.findall("inclusive")
|
|
if inclusions:
|
|
for i in range(0, len(inclusions)):
|
|
prefix = ""
|
|
suffix = " "
|
|
if i == 0:
|
|
prefix = " ["
|
|
if i == len(inclusions) - 1:
|
|
suffix = "]"
|
|
dep = "%s%s%s%s" % (dep, prefix, inclusions[i].text, suffix)
|
|
exclusions = control.findall("exclusive")
|
|
if exclusions:
|
|
for i in range(0, len(exclusions)):
|
|
prefix = "!"
|
|
suffix = " "
|
|
if i == 0:
|
|
prefix = " [!"
|
|
if i == len(exclusions) - 1:
|
|
suffix = "]"
|
|
dep = "%s%s%s%s" % (dep, prefix, exclusions[i].text, suffix)
|
|
deps.append(dep)
|
|
return deps, QUBES
|
|
|
|
|
|
def update_debian_control(target):
|
|
control_in = os.path.join(target, "control.in")
|
|
control_out = os.path.join(target, "control")
|
|
|
|
if not os.path.exists(control_in):
|
|
print("Missing file %s" % control_in)
|
|
sys.exit(1)
|
|
|
|
with open(control_in, "r") as rfd:
|
|
lines = rfd.readlines()
|
|
|
|
deps, QUBES = parse_control_dependencies("build")
|
|
deps.sort()
|
|
|
|
if QUBES:
|
|
lines += "\n"
|
|
control_qubes_in = os.path.join(target, "control.qubes.in")
|
|
with open(control_qubes_in, "r") as rfd:
|
|
lines += rfd.readlines()
|
|
|
|
with open(control_out, "w") as wfd:
|
|
for line in lines:
|
|
if line.startswith("Build-Depends: %%%DYNAMIC%%%"):
|
|
wfd.write("Build-Depends:\n")
|
|
for i in range(0, len(deps)):
|
|
wfd.write("\t%s,\n" % deps[i])
|
|
elif "fwupd-qubes-vm-whonix" in line and not QUBES:
|
|
break
|
|
else:
|
|
wfd.write(line)
|
|
|
|
|
|
def update_debian_copyright(directory):
|
|
copyright_in = os.path.join(directory, "copyright.in")
|
|
copyright_out = os.path.join(directory, "copyright")
|
|
|
|
if not os.path.exists(copyright_in):
|
|
print("Missing file %s" % copyright_in)
|
|
sys.exit(1)
|
|
|
|
# Assume all files are remaining LGPL-2.1+
|
|
copyrights = []
|
|
for root, dirs, files in os.walk("."):
|
|
for file in files:
|
|
target = os.path.join(root, file)
|
|
# skip translations and license file
|
|
if target.startswith("./po/") or file == "COPYING":
|
|
continue
|
|
try:
|
|
with open(target, "r") as rfd:
|
|
# read about the first few lines of the file only
|
|
lines = rfd.readlines(220)
|
|
except UnicodeDecodeError:
|
|
continue
|
|
except FileNotFoundError:
|
|
continue
|
|
for line in lines:
|
|
if "Copyright (C) " in line:
|
|
parts = line.split("Copyright (C)")[
|
|
1
|
|
].strip() # split out the copyright header
|
|
partition = parts.partition(" ")[2] # remove the year string
|
|
copyrights += ["%s" % partition]
|
|
copyrights = "\n\t ".join(sorted(set(copyrights)))
|
|
with open(copyright_in, "r") as rfd:
|
|
lines = rfd.readlines()
|
|
|
|
with open(copyright_out, "w") as wfd:
|
|
for line in lines:
|
|
if line.startswith("%%%DYNAMIC%%%"):
|
|
wfd.write("Files: *\n")
|
|
wfd.write("Copyright: %s\n" % copyrights)
|
|
wfd.write("License: LGPL-2.1+\n")
|
|
wfd.write("\n")
|
|
else:
|
|
wfd.write(line)
|
|
|
|
|
|
directory = os.path.join(os.getcwd(), "debian")
|
|
update_debian_control(directory)
|
|
update_debian_copyright(directory)
|