#!/usr/bin/python # -*- coding: utf-8 -*- import platform import getopt import os import sys loc = os.path.dirname( sys.argv[0] ) loc = os.path.abspath( loc ) execfile(os.path.join( loc, 'helpers.py') ) def copy_spec( src_filepath, dest_path, version_str, version_rev, project ): f = open( src_filepath, 'r' ) content = f.read() f.close() jenkins_build_tag = os.getenv( "BUILD_TAG" ) if jenkins_build_tag == None or len(jenkins_build_tag) == 0: jenkins_build_tag = 'Not build with jenkins job' content = content.replace( "@OS_SYSTEM@", getOS_Name() ) content = content.replace( "@PACKAGER@", getpass.getuser() ) content = content.replace( "@VERSION@", version_str ) content = content.replace( "@RELEASE@", version_rev ) content = content.replace( "@PROJECT@", project ) content = content.replace( "@JENKINS_BUILD_TAG@", jenkins_build_tag ) f = open( os.path.join( dest_path, os.path.split( src_filepath )[1] ), 'w' ) f.write( content ) f.close() def usage(): print >> sys.stdout, "Usage: %s [-e ] -s -o rpm_output_directory" % sys.argv[0] def main(): try: opts, args = getopt.getopt(sys.argv[1:], "e:f:o:p:r:s:v:", ["extfw=", "filelist=", "output_dir=", "project_name=", "repository=", "spec=", "version="]) except getopt.GetoptError, err: print >> sys.stderr, err usage() sys.exit(2) project_name = 'ctc' repository = 'TDS' output_dir = None rpm_filelist = None extfw_src_dirs = ('/opt/EXTFW').split() spec_file = None version_maj = 1 version_min = 0 version_rev = 0 for o, a in opts: if o in ("-e", "--extfw"): extfw_src_dirs = a.split() if o in ("-f", "--filelist"): rpm_filelist = a if o in ("-o", "--output_dir"): output_dir = a if o in ("-p", "--project_name"): project_name = a if o in ("-rp", "--repository"): repository = a if o in ("-s", "--spec"): spec_file = a if o in ("-v", "--version"): version = a.split('.') try: version_maj = version[0] version_min = version[1] except: die( "Invalid version format (maj.min): %s" % a ) if not spec_file or not os.path.isfile( spec_file ): usage() die("Spec file location not defined or spec file not found (%s)" % spec_file) for src_path in extfw_src_dirs: if not os.path.exists(src_path): usage() die("Source location %s not accessible" % src_path) if output_dir == None: usage() die("Output directory not given" ) rpmbase_dir = "/usr/src/packages/" try: ver=platform.dist()[1].split('.')[0] if int(ver) >= 12: rpmbase_dir = os.path.join( os.getenv( "HOME" ), 'rpmbuild' ) except: print "Could not determine platform - assuming /usr/src/packages as rpmbuild base dir" sys.exit(1) print "Using rpmbuild base dir %s" % rpmbase_dir spec_file = os.path.abspath( spec_file ) extfw_path = os.path.join( os.path.dirname( os.path.dirname( spec_file ) ), 'EXTFW' ) if not os.path.exists(extfw_path): die("EXTFW svn path %s does not exist" % extfw_path ) extfw_builddir_base = os.path.join( '/tmp', 'TDS-rpmbuild' ) removeDirectory( extfw_builddir_base ) for src_path in extfw_src_dirs: while src_path[-1] == '/': src_path = src_path[:-1] tail = src_path.split('/')[-1] extfw_builddir_extfw = os.path.join( extfw_builddir_base, 'opt', tail ) os.makedirs( extfw_builddir_extfw ) copySrcDirToDestDir( src_path, extfw_builddir_extfw, 0644, True ) try: os.remove( os.path.join(extfw_builddir_extfw, 'lib64') ) except: debug( 'Could not remove lib64 symlink' ) specdir = os.path.join(rpmbase_dir, "SPECS") version_str = "%s.%s" % ( version_maj, version_min ) version_rev = getSvn_Release( extfw_path ) version_date = getSvn_Date( extfw_path ) full_version = "%s.%s-%s" % ( version_maj, version_min, version_rev ) print "Spec-File: %s" % ( spec_file ) print "Version: %s" % ( full_version ) print "Date: %s" % ( version_date ) copy_spec( spec_file, specdir, version_str, version_rev, project_name ) exec_rpmbuild( specdir, os.path.split( spec_file )[1], extfw_builddir_base ) removeDirectory( extfw_builddir_base ) dstdir = os.path.join( output_dir, "%s-%s-%s" % ( project_name, repository, full_version ) ) filter = re.compile( "^.*%s\..*\.rpm$" % full_version ) moved_files = moveFilesToDir( rpmbase_dir, dstdir, filter, True ) if rpm_filelist != None: try: f = open( rpm_filelist, 'w' ) for m in moved_files: f.write( '%s\n' % m ) f.close() except: die( 'Error creating fileslist %s' % rpm_filelist ) if __name__ == "__main__": main()