#!/usr/bin/python # -*- coding: utf-8 -*- # # $Id: helpers.py 1370 2022-07-05 11:08:18Z wille_m $ # $HeadURL: svn://192.168.133.21/admin/rpmbuild/helpers.py $ # $Author: wille_m $ # Created by Christian Ehrlicher, SLSE, 20013-02-19 # import getpass import os import re import shutil import stat import subprocess import sys # helper functions def verbose(): verb = os.getenv( "EMERGE_VERBOSE" ) if ( not verb == None and verb.isdigit() and int(verb) > 0 ): return int( verb ) else: return 0 def debug( message ): if verbose() >= 0: print("debug: %s" % message) return True def info( message ): if verbose() >= 0: print("info: %s" % message) return True def warning( message ): print("warning: %s" % message) return True def error( message ): die( message ) def die( message ): print >> sys.stderr, "emerge fatal error: %s" % message sys.exit( 1 ) def system( cmdstring, file = None ): debug( "Executing '%s'" % cmdstring ) out = subprocess.PIPE if file != None: out = file p = subprocess.Popen( cmdstring, shell=True, stdout=out, stderr=sys.stderr ) ret = p.wait() if ( ret != 0 ): die( "Error executing %s (%s)" % (cmdstring, ret) ) ret = "" if file == None: ret = p.stdout.read().strip() return ret def getOS_Name(): if os.path.exists('/etc/SuSE-release'): f = open('/etc/SuSE-release', 'r') rx = re.compile('^VERSION = (.*)$') for line in f.readlines(): m = rx.match(line) if not m: line = re.sub('\s', '', line) line = re.sub('\([xX]86[-_]64\)', '', line) line = line.replace('SUSE', '') line = line.replace('LinuxEnterpriseServer', 'SLE') line = line.replace('LinuxEnterpriseDesktop', 'SLE') return line.strip() return "unknown" else: f = open('/etc/os-release', 'r') rx = re.compile('^PRETTY_NAME="(.*)"$') for line in f.readlines(): m = rx.match(line) if m: return m.group(1).replace(' ','_') return "unknown" def removeDirectory( dest_dir ): info( "--------------------------------" ) info( "Removing %s" % ( dest_dir ) ) info( "--------------------------------" ) if ( os.path.exists( dest_dir ) and os.path.isdir( dest_dir ) ): for root, dirs, files in os.walk( dest_dir, topdown=False): for name in files: try: os.remove( os.path.join(root, name) ) except: die( "couldn't delete file %s\n ( %s )" % ( name, os.path.join( root, name ) ) ) for name in dirs: try: if ( os.path.islink(os.path.join(root, name)) ): os.remove( os.path.join(root, name) ) else: os.rmdir( os.path.join(root, name) ) except: die( "couldn't delete directory %s\n( %s )" % ( name, os.path.join( root, name ) ) ) os.rmdir( dest_dir ) def copySrcDirToDestDir( srcdir, dstdir, perm = None, with_subdirs = True ): info( "--------------------------------" ) info( "Copying %s to %s" % ( srcdir, dstdir ) ) info( "--------------------------------" ) while srcdir[-1] == '/': srcdir = srcdir[:-1] if with_subdirs: for root, dirs, files in os.walk( srcdir ): tmpdir = root.replace( srcdir, dstdir ) debug( "dstdir = '%s'" % tmpdir ) if ( not os.path.exists( tmpdir ) ): debug( "Creating dir '%s'" % tmpdir ) os.makedirs( tmpdir ) if perm: os.chmod( tmpdir, perm | stat.S_IREAD | stat.S_IRGRP | stat.S_IROTH ) for file in files: if os.path.isfile( tmpdir ) and os.path.exists( tmpdir ): os.remove( tmpdir ) shutil.copy( os.path.join( root, file ), tmpdir ) if perm: f = os.path.join( tmpdir, file ) add_perm = 0 if os.path.isdir( f ): add_perm = stat.S_IXUSR | stat.S_IXGRP | stat.S_IXOTH else: mode = os.stat( f ).st_mode if (stat.S_IXUSR & mode) == stat.S_IXUSR: add_perm = stat.S_IXUSR | stat.S_IXGRP | stat.S_IXOTH os.chmod( f, perm | add_perm ) else: for f in os.listdir( srcdir ): if os.path.isdir( f ): continue shutil.copy( os.path.join( srcdir, f ), os.path.join( dstdir, f ) ) def moveFilesToDir( srcdir, dstdir, rx_filter = None, with_subdirs = True ): info( "--------------------------------" ) info( "Moving files from %s to %s" % ( srcdir, dstdir ) ) info( "--------------------------------" ) moved_files = [] if not os.path.exists( dstdir ): os.makedirs( dstdir ) if with_subdirs: for root, dirs, files in os.walk( srcdir ): for file in files: if rx_filter and not rx_filter.match( file ): continue src = os.path.join( root, file ) dst = os.path.join( dstdir, file ) debug( "Move %s to %s" % ( src, dst ) ) if os.path.exists( dst ): os.remove( dst ) moved_files.append( dst ) shutil.move( src, dstdir ) else: for f in os.listdir( srcdir ): if os.path.isdir( f ): continue if rx_filter and not rx_filter.match( f ): continue src = os.path.join( srcdir, file ) dst = os.path.join( dstdir, file ) debug( "Move %s to %s" % ( src, dst ) ) moved_files.append( dst ) shutil.move( src, dstdir ) return moved_files def adjustPermissions( srcdir ): info( "--------------------------------" ) info( "Adjusting permissions in %s" % srcdir ) info( "--------------------------------" ) stat_file = stat.S_IREAD | stat.S_IWRITE | stat.S_IRUSR | stat.S_IROTH stat_executable = stat.S_IXUSR | stat.S_IXGRP | stat.S_IXOTH stat_dir = stat_file | stat_executable while srcdir[-1] == '/': srcdir = srcdir[:-1] for root, dirs, files in os.walk( srcdir ): os.chmod( root, ) for file in files: f = os.path.join( root, file ) perm = 0 if os.path.isdir( f ): perm = stat_dir else: perm = stat_file mode = os.stat( f ).st_mode if (stat.S_IXUSR & mode) == stat.S_IXUSR: perm |= stat_executable os.chmod( f, perm ) def exec_rpmbuild( spec_dir, spec_filename, buildroot = None ): spec = os.path.join( spec_dir, spec_filename ) cmd = "rpmbuild -ba %s" % spec if buildroot: cmd += " --buildroot=%s" % buildroot system( cmd, sys.stdout ) and die( "during rpmbuild. cmd: %s" % command )