160 lines
5.2 KiB
Python
Executable File
160 lines
5.2 KiB
Python
Executable File
#!/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 <extfw_src_dir(s)> ] -s <spec_file_loc> -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()
|
|
|