Commit 07bd29ff authored by Frédéric Pierret's avatar Frédéric Pierret Committed by Holger Levsen
Browse files

Add support for building source RPM

parent 03991226
Loading
Loading
Loading
Loading
+37 −0
Original line number Diff line number Diff line
@@ -72,7 +72,18 @@ PRESET_DEB_DIR = ReprotestPreset(
    diffoscope_args=[],
)

PRESET_RPM_DIR = ReprotestPreset(
    build_command='rpmbuild --rebuild',
    artifact_pattern='*[^src].rpm',
    testbed_pre=None,
    testbed_init=None,
    testbed_build_pre=None,
    source_pattern='*.src.rpm',
    diffoscope_args=[],
)


# DEB
def preset_deb_schroot(fn, preset):
    return preset.set.testbed_init(
        # need to symlink /etc/mtab to work around a fusermount(1) deficiency
@@ -99,6 +110,25 @@ def parse_dsc_aux(path):
    return [x.split()[-1].decode("utf-8") for x in dscfiles.splitlines()]


# RPM
def preset_rpm_rpmbuild(fn):
    # We ensure to have generated RPMs into temporary HOME folder and not in
    # rpmbuild/RPMS/%%{ARCH}/
    extra_build_command = [
        '--define "_build_name_fmt %%{NAME}-%%{VERSION}-%%{RELEASE}.%%{ARCH}.rpm"',
        '--define "_topdir $PWD/rpmbuild"',
        '--define "_rpmdir $PWD"',
        '%s' % fn
        ]

    # rpmbuild needs to be told to use reproducible specific options
    extra_build_command += ['--define "source_date_epoch_from_changelog Y"']
    extra_build_command += ['--define "clamp_mtime_to_source_date_epoch Y"']
    extra_build_command += ['--define "use_source_date_epoch_as_buildtime Y"']
    return PRESET_RPM_DIR.append.build_command(' %s' % ' '.join(extra_build_command))


###
def get_presets(buildfile, virtual_server):
    fn = os.path.basename(buildfile)
    parts = os.path.splitext(fn)
@@ -114,5 +144,12 @@ def get_presets(buildfile, virtual_server):
                return preset_deb_dsc(fn, parse_dsc_aux(buildfile))
            else:
                return preset_deb_schroot(fn, preset_deb_dsc(fn, parse_dsc_aux(buildfile)))
        elif parts[1] == '.rpm':
            if os.path.splitext(parts[0])[1] != '.src':
                raise ValueError('cannot determine .src.rpm')
            if virtual_server == "null":
                return preset_rpm_rpmbuild(fn)
            else:
                raise ValueError("only 'null' virtual_server is currently available for source RPM")
    raise ValueError('unrecognised file type: "%s"; try giving '
                     'an appropriate --build-command' % buildfile)