207 lines
6.6 KiB
Python
Executable File
207 lines
6.6 KiB
Python
Executable File
#!/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 )
|
|
|