(self)
return spec_file
Generate the text of an RPM spec file and return it as a
        list of strings (one per line).
Generate the text of an RPM spec file and return it as a
        list of strings (one per line).
Generate the text of an RPM spec file and return it as a list of strings ( one per line ) .
def _make_spec_file(self):
        """Generate the text of an RPM spec file and return it as a
        list of strings (one per line).
        """
        # definitions and headers
        spec_file = [
            '%define name ' + self.distribution.get_name(),
            '%define version ' + self.distribution.get_version().replace('-','_'),
            '%define unmangled_version ' + self.distribution.get_version(),
            '%define release ' + self.release.replace('-','_'),
            '',
            'Summary: ' + self.distribution.get_description(),
            ]

        # Workaround for #14443 which affects some RPM based systems such as
        # RHEL6 (and probably derivatives)
        vendor_hook = subprocess.getoutput('rpm --eval %{__os_install_post}')
        # Generate a potential replacement value for __os_install_post (whilst
        # normalizing the whitespace to simplify the test for whether the
        # invocation of brp-python-bytecompile passes in __python):
        vendor_hook = '\n'.join(['  %s \\' % line.strip()
                                 for line in vendor_hook.splitlines()])
        problem = "brp-python-bytecompile \\\n"
        fixed = "brp-python-bytecompile %{__python} \\\n"
        fixed_hook = vendor_hook.replace(problem, fixed)
        if fixed_hook != vendor_hook:
            spec_file.append('# Workaround for http://bugs.python.org/issue14443')
            spec_file.append('%define __os_install_post ' + fixed_hook + '\n')

        # put locale summaries into spec file
        # XXX not supported for now (hard to put a dictionary
        # in a config file -- arg!)
        #for locale in self.summaries.keys():
        #    spec_file.append('Summary(%s): %s' % (locale,
        #                                          self.summaries[locale]))

        spec_file.extend([
            'Name: %{name}',
            'Version: %{version}',
            'Release: %{release}',])

        # XXX yuck! this filename is available from the "sdist" command,
        # but only after it has run: and we create the spec file before
        # running "sdist", in case of --spec-only.
        if self.use_bzip2:
            spec_file.append('Source0: %{name}-%{unmangled_version}.tar.bz2')
        else:
            spec_file.append('Source0: %{name}-%{unmangled_version}.tar.gz')

        spec_file.extend([
            'License: ' + self.distribution.get_license(),
            'Group: ' + self.group,
            'BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-buildroot',
            'Prefix: %{_prefix}', ])

        if not self.force_arch:
            # noarch if no extension modules
            if not self.distribution.has_ext_modules():
                spec_file.append('BuildArch: noarch')
        else:
            spec_file.append( 'BuildArch: %s' % self.force_arch )

        for field in ('Vendor',
                      'Packager',
                      'Provides',
                      'Requires',
                      'Conflicts',
                      'Obsoletes',
                      ):
            val = getattr(self, field.lower())
            if isinstance(val, list):
                spec_file.append('%s: %s' % (field, ' '.join(val)))
            elif val is not None:
                spec_file.append('%s: %s' % (field, val))


        if self.distribution.get_url() != 'UNKNOWN':
            spec_file.append('Url: ' + self.distribution.get_url())

        if self.distribution_name:
            spec_file.append('Distribution: ' + self.distribution_name)

        if self.build_requires:
            spec_file.append('BuildRequires: ' +
                             ' '.join(self.build_requires))

        if self.icon:
            spec_file.append('Icon: ' + os.path.basename(self.icon))

        if self.no_autoreq:
            spec_file.append('AutoReq: 0')

        spec_file.extend([
            '',
            '%description',
            self.distribution.get_long_description()
            ])

        # put locale descriptions into spec file
        # XXX again, suppressed because config file syntax doesn't
        # easily support this ;-(
        #for locale in self.descriptions.keys():
        #    spec_file.extend([
        #        '',
        #        '%description -l ' + locale,
        #        self.descriptions[locale],
        #        ])

        # rpm scripts
        # figure out default build script
        def_setup_call = "%s %s" % (self.python,os.path.basename(sys.argv[0]))
        def_build = "%s build" % def_setup_call
        if self.use_rpm_opt_flags:
            def_build = 'env CFLAGS="$RPM_OPT_FLAGS" ' + def_build

        # insert contents of files

        # XXX this is kind of misleading: user-supplied options are files
        # that we open and interpolate into the spec file, but the defaults
        # are just text that we drop in as-is.  Hmmm.

        install_cmd = ('%s install -O1 --root=$RPM_BUILD_ROOT '
                       '--record=INSTALLED_FILES') % def_setup_call

        script_options = [
            ('prep', 'prep_script', "%setup -n %{name}-%{unmangled_version}"),
            ('build', 'build_script', def_build),
            ('install', 'install_script', install_cmd),
            ('clean', 'clean_script', "rm -rf $RPM_BUILD_ROOT"),
            ('verifyscript', 'verify_script', None),
            ('pre', 'pre_install', None),
            ('post', 'post_install', None),
            ('preun', 'pre_uninstall', None),
            ('postun', 'post_uninstall', None),
        ]

        for (rpm_opt, attr, default) in script_options:
            # Insert contents of file referred to, if no file is referred to
            # use 'default' as contents of script
            val = getattr(self, attr)
            if val or default:
                spec_file.extend([
                    '',
                    '%' + rpm_opt,])
                if val:
                    with open(val) as f:
                        spec_file.extend(f.read().split('\n'))
                else:
                    spec_file.append(default)


        # files section
        spec_file.extend([
            '',
            '%files -f INSTALLED_FILES',
            '%defattr(-,root,root)',
            ])

        if self.doc_files:
            spec_file.append('%doc ' + ' '.join(self.doc_files))

        if self.changelog:
            spec_file.extend([
                '',
                '%changelog',])
            spec_file.extend(self.changelog)

        return spec_file
def _make_spec_file ( self ) : # definitions and headers spec_file = [ '%define name ' + self . distribution . get_name ( ) , '%define version ' + self . distribution . get_version ( ) . replace ( '-' , '_' ) , '%define unmangled_version ' + self . distribution . get_version ( ) , '%define release ' + self . release . replace ( '-' , '_' ) , '' , 'Summary: ' + self . distribution . get_description ( ) , ] # Workaround for #14443 which affects some RPM based systems such as # RHEL6 (and probably derivatives) vendor_hook = subprocess . getoutput ( 'rpm --eval %{__os_install_post}' ) # Generate a potential replacement value for __os_install_post (whilst # normalizing the whitespace to simplify the test for whether the # invocation of brp-python-bytecompile passes in __python): vendor_hook = '\n' . join ( [ '  %s \\' % line . strip ( ) for line in vendor_hook . splitlines ( ) ] ) problem = "brp-python-bytecompile \\\n" fixed = "brp-python-bytecompile %{__python} \\\n" fixed_hook = vendor_hook . replace ( problem , fixed ) if fixed_hook != vendor_hook : spec_file . append ( '# Workaround for http://bugs.python.org/issue14443' ) spec_file . append ( '%define __os_install_post ' + fixed_hook + '\n' ) # put locale summaries into spec file # XXX not supported for now (hard to put a dictionary # in a config file -- arg!) #for locale in self.summaries.keys(): #    spec_file.append('Summary(%s): %s' % (locale, #                                          self.summaries[locale])) spec_file . extend ( [ 'Name: %{name}' , 'Version: %{version}' , 'Release: %{release}' , ] ) # XXX yuck! this filename is available from the "sdist" command, # but only after it has run: and we create the spec file before # running "sdist", in case of --spec-only. if self . use_bzip2 : spec_file . append ( 'Source0: %{name}-%{unmangled_version}.tar.bz2' ) else : spec_file . append ( 'Source0: %{name}-%{unmangled_version}.tar.gz' ) spec_file . extend ( [ 'License: ' + self . distribution . get_license ( ) , 'Group: ' + self . group , 'BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-buildroot' , 'Prefix: %{_prefix}' , ] ) if not self . force_arch : # noarch if no extension modules if not self . distribution . has_ext_modules ( ) : spec_file . append ( 'BuildArch: noarch' ) else : spec_file . append ( 'BuildArch: %s' % self . force_arch ) for field in ( 'Vendor' , 'Packager' , 'Provides' , 'Requires' , 'Conflicts' , 'Obsoletes' , ) : val = getattr ( self , field . lower ( ) ) if isinstance ( val , list ) : spec_file . append ( '%s: %s' % ( field , ' ' . join ( val ) ) ) elif val is not None : spec_file . append ( '%s: %s' % ( field , val ) ) if self . distribution . get_url ( ) != 'UNKNOWN' : spec_file . append ( 'Url: ' + self . distribution . get_url ( ) ) if self . distribution_name : spec_file . append ( 'Distribution: ' + self . distribution_name ) if self . build_requires : spec_file . append ( 'BuildRequires: ' + ' ' . join ( self . build_requires ) ) if self . icon : spec_file . append ( 'Icon: ' + os . path . basename ( self . icon ) ) if self . no_autoreq : spec_file . append ( 'AutoReq: 0' ) spec_file . extend ( [ '' , '%description' , self . distribution . get_long_description ( ) ] ) # put locale descriptions into spec file # XXX again, suppressed because config file syntax doesn't # easily support this ;-( #for locale in self.descriptions.keys(): #    spec_file.extend([ #        '', #        '%description -l ' + locale, #        self.descriptions[locale], #        ]) # rpm scripts # figure out default build script def_setup_call = "%s %s" % ( self . python , os . path . basename ( sys . argv [ 0 ] ) ) def_build = "%s build" % def_setup_call if self . use_rpm_opt_flags : def_build = 'env CFLAGS="$RPM_OPT_FLAGS" ' + def_build # insert contents of files # XXX this is kind of misleading: user-supplied options are files # that we open and interpolate into the spec file, but the defaults # are just text that we drop in as-is.  Hmmm. install_cmd = ( '%s install -O1 --root=$RPM_BUILD_ROOT ' '--record=INSTALLED_FILES' ) % def_setup_call script_options = [ ( 'prep' , 'prep_script' , "%setup -n %{name}-%{unmangled_version}" ) , ( 'build' , 'build_script' , def_build ) , ( 'install' , 'install_script' , install_cmd ) , ( 'clean' , 'clean_script' , "rm -rf $RPM_BUILD_ROOT" ) , ( 'verifyscript' , 'verify_script' , None ) , ( 'pre' , 'pre_install' , None ) , ( 'post' , 'post_install' , None ) , ( 'preun' , 'pre_uninstall' , None ) , ( 'postun' , 'post_uninstall' , None ) , ] for ( rpm_opt , attr , default ) in script_options : # Insert contents of file referred to, if no file is referred to # use 'default' as contents of script val = getattr ( self , attr ) if val or default : spec_file . extend ( [ '' , '%' + rpm_opt , ] ) if val : with open ( val ) as f : spec_file . extend ( f . read ( ) . split ( '\n' ) ) else : spec_file . append ( default ) # files section spec_file . extend ( [ '' , '%files -f INSTALLED_FILES' , '%defattr(-,root,root)' , ] ) if self . doc_files : spec_file . append ( '%doc ' + ' ' . join ( self . doc_files ) ) if self . changelog : spec_file . extend ( [ '' , '%changelog' , ] ) spec_file . extend ( self . changelog ) return spec_file