1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
|
#!/usr/bin/python3
# Compute dependencies of our cockpit-<module> packages to to -bridge/-shell,
# by replacing %{required_base} with the requires["cockpit"] version from
# pkg/<module>/manifest.json (this is done by tools/min-base-version).
# The replacement is done in-place in the spec file given as argument.
#
# Copyright (C) 2017 Red Hat, Inc.
#
# Cockpit is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
#
# Cockpit is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with Cockpit; If not, see <http://www.gnu.org/licenses/>.
import sys
import os
import re
import fileinput
import subprocess
import json
tools_dir = os.path.dirname(os.path.realpath(sys.argv[0]))
min_base_version_path = os.path.join(tools_dir, "min-base-version")
package_json = os.path.join(os.path.dirname(tools_dir), "package.json")
if len(sys.argv) != 2:
sys.stderr.write("Usage: %s <specfile>\n" % sys.argv[0])
sys.exit(1)
# for resolving %{npm-version:*}
with open(package_json) as f:
dependencies = json.load(f)["dependencies"]
curpkg = None
pkg_base_dep = None
npm_version_re = re.compile(r"%{npm-version:(.*?)}")
for line in fileinput.input(sys.argv[1], inplace=True):
npm_version_match = npm_version_re.search(line)
if npm_version_match:
# translate %{npm-version:*} to version from package.json
module = dependencies[npm_version_match.group(1)]
sys.stderr.write('NPM version of %s: %s\n' % (npm_version_match.group(1), module))
line = npm_version_re.sub(module, line)
elif line.startswith("%package"):
# translate package name into pkg/<page> name
curpkg = line.split()[-1]
if curpkg.startswith('cockpit-'):
curpkg = curpkg[8:]
pkg_base_dep = None
elif "%{required_base}" in line:
assert curpkg, "spec file uses %{required_base} outside of %package stanza"
# lazily determine this -- some packages don't use %{required_base} and some multiple times
if not pkg_base_dep:
pkg_base_dep = subprocess.check_output([min_base_version_path, curpkg], universal_newlines=True).strip()
sys.stderr.write('base dependency of %s: %s\n' % (curpkg, pkg_base_dep))
line = line.replace("%{required_base}", pkg_base_dep)
sys.stdout.write(line) # fileinput redirects that back into the file
|