#!/usr/bin/python3 import sys import os.path import rpm from optparse import OptionParser def main(): usage = "%prog [rpmbuild-options] specfile pkg-name" parser = OptionParser(usage=usage) parser.add_option( '-t', '--target', action='store', dest='target', default=None, help='specify target arch') parser.add_option( '-w', '--whitelist-rpms', action='store', dest='whitelist', default='', help='comma separated list of rpms to expose in makefile') parser.add_option( '-1', '--with', action='store', dest='with', default='', help='accept but ignore --with option') parser.add_option( '-0', '--without', action='store', dest='without', default='', help='accept but ignore --without option') parser.add_option( '-d', '--define', action='store', dest='define', default='', help='accept but ignore --define option') (options, args) = parser.parse_args() try: specfile, package_name = args except: parser.print_help() sys.exit(1) transaction_set = rpm.TransactionSet() specobj = transaction_set.parseSpec(specfile) for (fullsource, _, _) in specobj.sources: # print '###fullsource=',fullsource print("%s.tarballs += SOURCES/%s" % (package_name, os.path.basename(fullsource))) for suffix in [".tar.gz", ".tgz", ".tar.bz2", ".tar.xz"]: # print "# trying %s"%suffix if fullsource.endswith(suffix): sourcename = fullsource.replace(suffix, "") print("%s.source := SOURCES/%s" % (package_name, os.path.basename(sourcename))) break # Get SRPM name from name of first package package = specobj.packages[0] header0 = package.header name = header0.format('%{name}') version = header0.format('%{version}') release = header0.format('%{release}') print("%s.srpm := SRPMS/%s-%s-%s.src.rpm" % (package_name, name, version, release)) target = options.target whitelist = [x for x in options.whitelist.split(',') if x] # Print non-empty packages counter = 0 for package in specobj.packages: counter += 1 header = package.header name = header.format('%{name}') version = header.format('%{version}') release = header.format('%{release}') arch = target or header.format('%{arch}') # skip dummy entries if not (name and version and release and arch): continue # select relevant packages # could not find the magic recipe to do this properly yet # so ugly temporary hack : # when whitelisted, we expose the first package plus the white-listed ones # otherwise we expose everything relevant = False if not whitelist: relevant = True else: if counter == 1: relevant = True else: relevant = name in whitelist if relevant: # attach (add) rpm path to package print("%s.rpms += RPMS/%s/%s-%s-%s.%s.rpm" % (package_name, arch, name, version, release, arch)) # convenience print("%s.rpmnames += %s" % (package_name, name)) # attach path to rpm name print("%s.rpm-path := RPMS/%s/%s-%s-%s.%s.rpm" % (name, arch, name, version, release, arch)) # attach package to rpm name for backward resolution - should be unique print("%s.package := %s" % (name, package_name)) for macro in ["release", "name", "version", "taglevel", ]: format = "%%{%s}" % macro try: print("%s.rpm-%s := %s" % (package_name, macro, header0.format(format))) except: print("# %s.rpm-%s undefined" % (package_name, macro)) # export arch print("%s.rpm-arch := %s" % (package_name, target)) if __name__ == '__main__': main()