diff options
author | Benoit Foucher <benoit@zeroc.com> | 2008-02-11 14:43:08 +0100 |
---|---|---|
committer | Benoit Foucher <benoit@zeroc.com> | 2008-02-11 14:43:08 +0100 |
commit | 1067b087d32110ef2c057b8f01fd0dc7102712cc (patch) | |
tree | 8136a2bf244d399f9a582ccaa68de4d35b1fe5c6 /distribution/bin/makebindist.py | |
parent | Improved UDP multicast configuration (diff) | |
download | ice-1067b087d32110ef2c057b8f01fd0dc7102712cc.tar.bz2 ice-1067b087d32110ef2c057b8f01fd0dc7102712cc.tar.xz ice-1067b087d32110ef2c057b8f01fd0dc7102712cc.zip |
makedist.py fixes and new makebindist.py
Diffstat (limited to 'distribution/bin/makebindist.py')
-rwxr-xr-x | distribution/bin/makebindist.py | 1417 |
1 files changed, 273 insertions, 1144 deletions
diff --git a/distribution/bin/makebindist.py b/distribution/bin/makebindist.py index 2978174c668..5a4419a3fd2 100755 --- a/distribution/bin/makebindist.py +++ b/distribution/bin/makebindist.py @@ -7,1189 +7,318 @@ # ICE_LICENSE file included in this distribution. # # ********************************************************************** -import os, sys, shutil, re, string, getopt, glob, fileinput -repoDir = os.getcwd() - -def initDirectory(d): - """Check for the existance of the directory. If it isn't there make - it.""" - if os.path.exists(d): - # - # Make sure its a directory and has correct permissions. - # - if not os.path.isdir(d): - print 'Path ' + d + ' exists but is not a directory.' - sys.exit(1) - - if os.access(d, os.X_OK | os.R_OK | os.W_OK): - logging.info('Path ' + d + ' exists and is ok, continuing') - else: - logging.warning('Directory ' + d + ' exists, but has incorrect permissions') - sys.exit(1) - else: - # - # This could fail due to lack of permissions. - # - os.makedirs(d, 0770) - -class ExtProgramError: - def __init__(self, error = None): - self.msg = error - - def __str__(self): - return repr(self.msg) - -def runprog(commandstring, haltOnError = True): - #commandtuple = commandstring.split() - #result = os.spawnvpe(os.P_WAIT, commandtuple[0], commandtuple, os.environ) - result = os.system(commandstring) - if result != 0: - msg = 'Command %s returned error code %d' % (commandstring, result) - if haltOnError: - raise ExtProgramError(msg) - -def copyfiles(srcDir, destDir): - '''Copy the contents of one directory to another (non-recursive)''' - for f in os.listdir(srcDir): - src = os.path.join(srcDir, f) - dest = os.path.join(destDir, f) - if not os.path.isdir(src) and not os.path.islink(src): - shutil.copy(src, dest) - -def getIceVersion(file): - """Extract the ICE version string from a file.""" - config = open(file, 'r') - return re.search('ICE_STRING_VERSION \"([0-9\.b]*)\"', config.read()).group(1) - -def getIceMMVersion(file): - """Extract the ICE major.minor version string from a file.""" - config = open(file, 'r') - return re.search('ICE_STRING_VERSION \"([0-9]+\.[0-9]+)[\.b0-9]*\"', config.read()).group(1) - -def getIceSoVersion(file): - """Extract the ICE version ordinal from a file.""" - config = open(file, 'r') - mm = re.search('ICE_STRING_VERSION \"([0-9]*\.[0-9b]*)[\.0-9]*\"', config.read()).group(1) - verComponents = mm.split(".") - return verComponents[0] + verComponents[1] - -def getPlatform(): - """Determine the platform we are building and targetting for""" - if sys.platform.startswith('win') or sys.platform.startswith('cygwin'): - return 'win32' - elif sys.platform.startswith('linux'): - return 'linux' - elif sys.platform.startswith('sunos'): - return 'solaris' - elif sys.platform.startswith('hp'): - return 'hpux' - elif sys.platform.startswith('darwin'): - return 'macosx' - elif sys.platform.startswith('aix'): - return 'aix' - else: - return None - -def getPlatformString(): - """Determine the platform string used in the .tar.gz names""" - if getPlatform() == 'linux': - redhat = os.system('test -f /etc/redhat-release') - if readcommand('uname -p') == 'x86_64': - if redhat == 0: - return 'rhel-x86_64' - else: - return 'sles-x86_64' - else: - if redhat == 0: - return 'rhel-i386' - else: - return 'sles-i586' - elif getPlatform() == "solaris": - if readcommand("uname -p") == "i386": - return "solaris-x86" - else: - return "solaris-sparc" - else: - return getPlatform() - -def getMakeRulesSuffix(): - '''Ice for C++ contains system specific rules for make. This - function maps the system name to the appropriate file suffix.''' - if sys.platform.startswith('linux'): - return 'Linux' - elif sys.platform.startswith('sunos'): - return 'SunOS' - elif sys.platform.startswith('hp'): - return 'HP-UX' - elif sys.platform.startswith('darwin'): - return 'Darwin' - elif sys.platform.startswith('aix'): - return 'AIX' - else: - return None - -def getVersion(buildDir): - """Extracts a source file from the repository and gets the version number from it""" - cwd = os.getcwd() - if getPlatform() == 'aix': - os.environ['LIBPATH'] = '' - configFile = os.path.join(buildDir, "install", "Config.h") - result = [ getIceVersion(configFile), getIceSoVersion(configFile), getIceMMVersion(configFile) ] - - os.chdir(cwd) - return result - -def fixVersion(filename, version, mmVersion): - f = fileinput.input(filename, True) - for line in f: - l = line.rstrip('\n') - l = l.replace('@ver@', version) - l = l.replace('@mmver@', mmVersion) - print l - f.close() - -def fixInstallFiles(buildDir, version, mmVersion): - """Gets the install sources for this revision""" - cwd = os.getcwd() - try: - os.chdir(buildDir) - fixVersion('install/common/README.DEMOS', version, mmVersion) - snapshot = os.walk('./install/unix') - for dirInfo in snapshot: - for f in dirInfo[2]: - fixVersion(os.path.join(dirInfo[0], f), version, mmVersion) - finally: - os.chdir(cwd) - return os.path.join(buildDir, "install") - -# XXX- I don't think this is needed any longer. -def getInstallFilesFromLocalDirectory(buildDir, version, mmVersion): - '''Gets the install files from an existing repository, has the - advantage of working even if repository is down allowing the install-O to - continue working!''' - cwd = os.getcwd() - try: - os.chdir(buildDir) - target = os.path.join(buildDir, 'cpp', 'install') - if os.path.exists(target): - shutil.rmtree(target) - iceloc = os.path.abspath(os.path.join(os.environ['ICE_HOME'],'install')) - os.makedirs(target) - for f in ['unix', 'common', 'rpm', 'thirdparty']: - shutil.copytree(os.path.join(iceloc, f), os.path.join(target, f)) - fixVersion('cpp/install/common/README.DEMOS', version, mmVersion) - snapshot = os.walk('./cpp/install/unix') - for dirInfo in snapshot: - for f in dirInfo[2]: - fixVersion(os.path.join(dirInfo[0], f), version, mmVersion) - finally: - os.chdir(cwd) - return os.path.join(buildDir, "cpp", "install") - -def readcommand(cmd): - pipe_stdin, pipe_stdout = os.popen2(cmd) - lines = pipe_stdout.readlines() - pipe_stdin.close() - pipe_stdout.close() - return lines[0].strip() - -def editMakeRulesCS(filename, version): - ''' - The make rules in the C# distribution need some simple tweaking to - make them suitable for inclusion in the demo distribution. - ''' - reIceLocation = re.compile('^[a-z]*dir.*=\s*\$\(top_srcdir\)') - makefile = fileinput.input(filename, True) - for line in makefile: - if reIceLocation.search(line) <> None: - print line.rstrip('\n').replace('top_srcdir', 'ICE_DIR', 10) - elif line.startswith('prefix'): - print 'prefix = $(ICE_DIR)' - else: - print line.rstrip('\n') - makefile.close() - -def editMakeRules(filename, version): - ''' - Ice distributions contain files with useful build rules. However, - these rules are source distribution specific. This script edits - these files to make them appropriate to accompany binary - distributions. - ''' - reIceLocation = re.compile('^[a-z]*dir.*=\s*\$\(top_srcdir\)') +import os, sys, shutil, glob, fnmatch, string, re +from stat import * - makefile = fileinput.input(filename, True) - skipLine = 0 - for line in makefile: - if (skipLine > 0): - skipLine = skipLine - 1 - elif line.startswith('slicedir'): - print """ -ifeq ($(ICE_DIR),/usr) - slicedir = $(ICE_DIR)/share/Ice-$(VERSION)/slice -else - slicedir = $(ICE_DIR)/slice -endif -""" - elif line.startswith('embedded_runpath_prefix'): - # - # embedded_runpath_prefix is moved down to after the version - # information is set. - # - pass - elif line.startswith('# Select an installation base directory'): - # - # Delete this comment - # - skipLine = 2 - elif line.startswith('# The "root directory" for runpath'): - # - # Delete this comment - # - skipLine = 2 - elif reIceLocation.search(line) <> None: - output = line.rstrip('\n').replace('top_srcdir', 'ICE_DIR', 10) - if line.startswith('libdir'): - print 'ifeq ($(LP64),yes)' - print ' ' + output + '$(lp64suffix)' - print 'else' - print ' ' + output - print 'endif' - elif line.startswith('bindir'): - print output - # - # NOTE!!! Magic occurs... - # It simplifies building the demos for the user if - # we try to detect whether the executables are 64 - # bit and, if so, set LP64=yes automagically. - # - print '' - print '#' - print '# If LP64 is unset, sample an Ice executable to see if it is 64 bit' - print '# and set automatically. This avoids having to set LP64 if there is' - print '# Ice installation in a well-known location.' - print '#' - print 'ifeq ($(LP64),)' - print ' ifneq ($(shell file $(bindir)/slice2cpp | grep 64-bit),)' - print ' LP64=yes' - print ' endif' - print 'endif' - print '' - else: - print output +version = "3.3.0" +#version = "@ver@" +distDir = os.path.abspath(os.path.join(os.path.dirname(__file__), "..")) +sys.path.append(os.path.join(distDir, "lib")) +from DistUtils import * - elif line.startswith('install_'): - # - # Delete - # - pass - elif line.startswith('SOVERSION'): - print line.rstrip('\n') - print """ +# +# Defines which languges are supported on a given platform +# +languages = { \ + 'SunOS' : ['cpp', 'java'], \ + 'HP-UX' : ['cpp', 'java'], \ + 'Darwin' : ['cpp', 'java', 'py'], \ + 'Linux' : ['cpp', 'java', 'cs', 'py', 'rb', 'php'], \ +} # -# Checks for ICE_HOME environment variable. If it isn't present, -# attempt to find an Ice installation in /usr or the default install +# Defines third party dependencies for each supported platform and their default # location. # -ifeq ($(ICE_HOME),) - ICE_DIR = /usr - ifneq ($(shell test -f $(ICE_DIR)/bin/icestormadmin && echo 0),0) - NEXTDIR = /opt/Ice-$(VERSION) - ifneq ($(shell test -f $(NEXTDIR)/bin/icestormadmin && echo 0),0) - $(error Unable to locate Ice distribution, please set ICE_HOME!) - else - ICE_DIR = $(NEXTDIR) - endif - else - NEXTDIR = /opt/Ice-$(VERSION) - ifeq ($(shell test -f $(NEXTDIR)/bin/icestormadmin && echo 0),0) - $(warning Ice distribution found in /usr and $(NEXTDIR)! Installation in "/usr" will be used by default. Use ICE_HOME to specify alternate Ice installation.) - endif - endif -else - ICE_DIR = $(ICE_HOME) - ifneq ($(shell test -f $(ICE_DIR)/bin/icestormadmin && echo 0),0) - $(error Ice distribution not found in $(ICE_DIR), please verify ICE_HOME location!) - endif -endif - -ifneq ($(ICE_DIR),/usr) - embedded_runpath_prefix ?= /opt/Ice-$(VERSION_MAJOR).$(VERSION_MINOR) -endif - -prefix = $(ICE_DIR) +bzip2 = { 'HP-UX' : '/usr/local' } + +berkeleydb = { \ + 'SunOS' : '/opt/db', \ + 'Darwin' : '/opt/db', \ + 'HP-UX' : '/opt/db', \ +} + +berkeleydbjar = { \ + 'Linux' : '/usr/share/java/db46/db.jar', \ +} + +expat = { \ + 'SunOS' : '/usr/sfw', \ + 'HP-UX' : '/usr/local', \ + 'Darwin' : '/opt/expat', \ +} + +openssl = { \ + 'SunOS' : '/usr/sfw', \ + 'HP-UX' : '/opt/openssl', \ +} + +mcpp = { + 'SunOS' : '/opt/mcpp', \ + 'HP-UX' : '/opt/mcpp', \ + 'Darwin' : '/opt/mcpp' +} + +jgoodies_looks = { \ + 'SunOS' : '/share/opt/looks-2.1.4/looks-2.1.4.jar', \ + 'HP-UX' : '/share/opt/looks-2.1.4/looks-2.1.4.jar', \ + 'Darwin' : '/opt/looks-2.1.4/looks-2.1.4.jar', \ + 'Linux' : '/opt/looks-2.1.4/looks-2.1.4.jar', \ +} + +jgoodies_forms = { \ + 'SunOS' : '/share/opt/forms-1.1.0/forms-1.1.0.jar', \ + 'HP-UX' : '/share/opt/forms-1.1.0/forms-1.1.0.jar', \ + 'Darwin' : '/opt/forms-1.1.0/forms-1.1.0.jar', \ + 'Linux' : '/opt/forms-1.1.0/forms-1.1.0.jar', \ +} + +proguard = { \ + 'SunOS' : '/share/opt/proguard4.1/lib/proguard.jar', \ + 'HP-UX' : '/share/opt/proguard4.1/lib/proguard.jar', \ + 'Darwin' : '/opt/proguard/lib/proguard.jar', \ + 'Linux' : '/opt/proguard/lib/proguard.jar', \ +} + +class BerkeleyDB(ThirdParty): + def __init__(self, platform, locations, jarlocations): + ThirdParty.__init__(self, platform, "BerkeleyDB", locations, ["cpp", "java"], None, "DB_HOME") + if not self.location: + self.languages = ["java"] + self.location = jarlocations.get(str(platform), None) + + def getFiles(self, platform): + files = [ os.path.join("lib", "db.jar"), os.path.join("bin", "db_*") ] + files += platform.getSharedLibraryFiles(self.location, os.path.join("lib", "*")) + files += platform.getSharedLibraryFiles(self.location, os.path.join("lib", "*"), "jnilib") + return files + +class Bzip2(ThirdParty): + def __init__(self, platform, locations): + ThirdParty.__init__(self, platform, "Bzip2", locations, ["cpp"]) + + def getFiles(self, platform): + return platform.getSharedLibraryFiles(self.location, os.path.join("lib", "*")) + +class Expat(ThirdParty): + def __init__(self, platform, locations): + ThirdParty.__init__(self, platform, "Expat", locations, ["cpp"]) + + def getFiles(self, platform): + return platform.getSharedLibraryFiles(self.location, os.path.join("lib", "*")) + +class OpenSSL(ThirdParty): + def __init__(self, platform, locations): + ThirdParty.__init__(self, platform, "OpenSSL", locations, ["cpp"]) + + def getFiles(self, platform): + files = [ os.path.join("bin", "openssl") ] + files += platform.getSharedLibraryFiles(self.location, os.path.join("lib", "*")) + return files -""" - elif line.startswith('prefix'): - # - # Delete prefix line - # - pass - else: - print line.rstrip('\n') - - # - # Dependency files are all going to be bogus since they contain relative - # paths to Ice headers. We need to adjust this. - # - os.chdir("..") - runprog("for f in `find . -name .depend` ; do sed -i -e 's/\.\.\/\.\.\/\.\.\/\.\.\/slice/$(slicedir)/g' $f ; done") - runprog("for f in `find . -name .depend` ; do sed -i -e 's/\.\.\/\.\.\/\.\.\/\.\./$(ICE_DIR)/g' $f ; done") - runprog("for f in `find . -name .depend` ; do sed -i -e 's/\.\.\/\.\.\/\.\.\/slice/$(slicedir)/g' $f ; done") - runprog("for f in `find . -name .depend` ; do sed -i -e 's/\.\.\/\.\.\/\.\./$(ICE_DIR)/g' $f ; done") - makefile.close() - -def editMakeRulesMak(filename, version): - ''' - Ice distributions contain files with useful build rules. However, - these rules are source distribution specific. This script edits - these files to make them appropriate to accompany binary - distributions. - ''' - state = 'header' - reIceLocation = re.compile('^[a-z]*dir.*=\s*\$\(top_srcdir\)') - - makefile = fileinput.input(filename, True) - for line in makefile: - if state == 'done': - if reIceLocation.search(line) <> None: - output = line.rstrip('\n').replace('top_srcdir', 'ICE_DIR', 10) - print output - elif line.startswith('install_'): - # - # Do nothing. - # - pass - elif line.startswith('# If third party'): - state = 'thirdparty' - else: - print line.rstrip('\n') - elif state == 'header': - # - # Reading header. - # - print line.rstrip('\n') - if line.strip() == "": - state = 'untilprefix' - print """ # -# Checks for ICE_HOME environment variable. +# Program usage. # +def usage(): + print "Usage: " + sys.argv[0] + " [options] tag" + print + print "Options:" + print "-c Clean previous build" + print "-n Don't build any language mapping" + print "-h Show this message." + print "-v Be verbose." -!if "$(ICE_HOME)" == "" -!error Ice distribution not found, please set ICE_HOME! -!endif - -ICE_DIR = $(ICE_HOME) -prefix = $(ICE_DIR) -THIRDPARTY_HOME = - -""" - elif state == 'untilprefix': - if line.startswith('prefix'): - state = 'done' - elif state == 'thirdparty': - if line.startswith('# For VC80 and VC80'): - print line.rstrip('\n') - state = 'done' - # - # Dependency files are all going to be bogus since they contain relative - # paths to Ice headers. We need to adjust this - # - os.chdir("..") - runprog("for f in `find . -name .depend` ; do sed -i -e 's/\.\.\/\.\.\/\.\.\/\.\.\/slice/$(slicedir)/g' $f ; done") - runprog("for f in `find . -name .depend` ; do sed -i -e 's/\.\.\/\.\.\/\.\.\/\.\./$(ICE_DIR)/g' $f ; done") - runprog("for f in `find . -name .depend` ; do sed -i -e 's/\.\.\/\.\.\/\.\.\/slice/$(slicedir)/g' $f ; done") - runprog("for f in `find . -name .depend` ; do sed -i -e 's/\.\.\/\.\.\/\.\./$(ICE_DIR)/g' $f ; done") - makefile.close() - -def editMakeRulesMakCS(filename, version): - ''' - Ice distributions contain files with useful build rules. However, - these rules are source distribution specific. This script edits - these files to make them appropriate to accompany binary - distributions. - ''' - state = 'header' - reIceLocation = re.compile('^[a-z]*dir.*=\s*\$\(top_srcdir\)') - - makefile = fileinput.input(filename, True) - for line in makefile: - if state == 'done': - if reIceLocation.search(line) <> None: - output = line.rstrip('\n').replace('top_srcdir', 'ICE_DIR', 10) - print output - elif line.startswith('install_'): - # - # Do nothing. - # - pass - else: - print line.rstrip('\n') - elif state == 'header': - # - # Reading header. - # - print line.rstrip('\n') - if line.strip() == "": - state = 'untilprefix' - print """ # -# Checks for ICE_HOME environment variable. +# Instantiate the gobal platform object # +(sysname, nodename, release, ver, machine) = os.uname(); +if not languages.has_key(sysname): + print sys.argv[0] + ": error: `" + sysname + "' is not a supported system" +platform = eval(sysname.replace("-", ""))(sysname, languages[sysname]) -!if "$(ICE_HOME)" == "" -!error Ice distribution not found, please set ICE_HOME! -!endif - -ICE_DIR = $(ICE_HOME) -prefix = $(ICE_DIR) - -""" - elif state == 'untilprefix': - if line.startswith('prefix'): - state = 'done' - - makefile.close() - -def updateIceVersion(filename, version): - print 'Updating ice version in ' + filename + ' to ' + version - f = fileinput.input(filename, True) - for line in f: - print line.rstrip('\n').replace('ICE_VERSION', version) - f.close() - -def obliterate(files): - for f in files: - if os.path.exists(f): - if os.path.isdir(f): - shutil.rmtree(f) - else: - os.remove(f) - -def extractDemos(sources, buildDir, version, distro, demoDir): - """Pulls the demo directory out of a distribution and massages its - build system so it can be built against an installed version of - Ice""" - cwd = os.getcwd() - os.chdir(os.path.join(buildDir, "demotree")) - - # - # TODO: Some archives don't contain all of these elements. It might - # be nicer to make the toExtract list more tailored for each - # distribution. - # - toExtract = "%s/demo " % distro - if demoDir == '': - toExtract = toExtract + " %s/ICE_LICENSE" % distro - if not demoDir == 'php': - toExtract = toExtract + " %s/certs %s/config" % (distro, distro) - - runprog("gzip -dc " + os.path.join(sources, distro) + ".tar.gz | tar xf - " + toExtract, False) - - shutil.move(os.path.join(distro, "demo"), os.path.join(buildDir, "Ice-" + version + "-demos", "demo" + demoDir)) - if os.path.exists(os.path.join(buildDir, "demotree", distro, "ICE_LICENSE")): - shutil.move(os.path.join(buildDir, "demotree", distro, "ICE_LICENSE"), \ - os.path.join(buildDir, "Ice-%s-demos" % version, "ICE_LICENSE")) - - # - # 'System' copying of files here because its just easier! We don't - # need any configuration out of the Python tree. - # - if not os.path.exists(buildDir + "/Ice-" + version + "-demos/certs"): - os.mkdir(buildDir + "/Ice-" + version + "-demos/certs") - - if not os.path.exists(buildDir + "/Ice-" + version + "-demos/config"): - os.mkdir(buildDir + "/Ice-" + version + "-demos/config") - - if os.path.exists('%s/certs' % distro): - runprog("cp -pR " + distro + "/certs " + buildDir + "/Ice-" + version + "-demos") - - srcConfigDir = '%s/%s/config' % (os.getcwd(), distro) - destConfigDir = '%s/Ice-%s-demos/config' % (buildDir, version) - - if not demoDir in ['py', 'rb', 'vb'] and os.path.exists(srcConfigDir): - for f in os.listdir(srcConfigDir): - src = os.path.join(srcConfigDir, f) - dest = os.path.join(destConfigDir, f) - if not os.path.isdir(src) and not os.path.islink(src): - shutil.copy(src, dest) +# +# Instantiate the third party libraries +# +thirdParties = [ \ + Bzip2(platform, bzip2), \ + BerkeleyDB(platform, berkeleydb, berkeleydbjar), \ + Expat(platform, expat), \ + OpenSSL(platform, openssl), \ + ThirdParty(platform, "Mcpp", mcpp, ["cpp"]), \ + ThirdParty(platform, "JGoodiesLooks", jgoodies_looks, ["java"], "jgoodies.looks"), \ + ThirdParty(platform, "JGoodiesForms", jgoodies_forms, ["java"], "jgoodies.forms"), \ + ThirdParty(platform, "Proguard", proguard, ["java"]), \ +] - if demoDir == 'j': - updateIceVersion(os.path.join(destConfigDir, 'common.xml'), version) +# +# Check arguments +# +verbose = 0 +forceclean = 0 +nobuild = 0 +languages = [ ] +for x in sys.argv[1:]: + if x == "-h": + usage() + sys.exit(0) + elif x == "-v": + verbose = 1 + elif x == "-c": + forceclean = 1 + elif x == "-n": + nobuild = 1 + elif x.startswith("-"): + print sys.argv[0] + ": unknown option `" + x + "'" + print + usage() + sys.exit(1) + else: + if not x in platform.languages: + print sys.argv[0] + ": language `" + x + "' not supported on this platform" + print + usage() + sys.exit(1) + languages.append(x) - # - # Collect files to remove from the demo distribution. - # - remove = [] - basepath = os.path.join(buildDir, 'Ice-' + version + '-demos', 'certs') +if len(languages) == 0: + languages = platform.languages - for f in ['openssl', 'makecerts']: - fullpath = os.path.join(basepath, f) - if os.path.exists(fullpath): - remove.append(fullpath) +if nobuild: + languages = [] - basepath = os.path.join(buildDir, 'Ice-' + version + '-demos', 'config') +if verbose: + quiet = "v" +else: + quiet = "" - if distro.startswith('Ice-'): - editMakeRules(os.path.join(basepath, 'Make.rules'), version) - editMakeRulesMak(os.path.join(basepath, 'Make.rules.mak'), version) - elif distro.startswith('IceNET-'): - editMakeRulesCS(os.path.join(basepath, 'Make.rules.cs'), version) - editMakeRulesMakCS(os.path.join(basepath, 'Make.rules.mak.cs'), version) +# +# Ensure the script is being run from the dist-@ver@ directory. +# +cwd = os.getcwd() - # - # Remove collected files. - # - obliterate(remove) - - shutil.rmtree(os.path.join(buildDir, 'demotree', distro), True) - os.chdir(cwd) +if not os.path.exists(os.path.join(distDir, "src", "windows", "LICENSE.rtf")): + print sys.argv[0] + ": you must run makebindist.py from the dist-" + version + " directory created by makedist.py" + sys.exit(1) -def archiveDemoTree(buildDir, version, installFiles): - cwd = os.getcwd() - os.chdir(os.path.join(buildDir, "Ice-%s-demos" % version)) - filesToRemove = [ - "certs/makecerts.py", - "certs/ImportKey.java", - "certs/ImportKey.class", - "certs/seed.dat", - "config/convertssl.py", - "config/upgradeicegrid.py", - "config/upgradeicestorm.py", - "config/icegrid-slice.3.1.ice.gz", - "config/PropertyNames.def", - "config/makeprops.py", - "config/Makefile", - "config/Makefile.mak", - "config/TestUtil.py", - "config/IceGridAdmin.py", - "config/ice_ca.cnf", - "config/findSliceFiles.py", - "config/IcecsKey.snk", - "config/icegridnode.cfg", - "config/icegridregistry.cfg", - "config/makeconfig.py", - "config/makedepend.py", - "config/makegitignore.py", - "config/icegridgui.pro"] - obliterate(filesToRemove) - os.chdir(buildDir) +print "Building Ice " + version + " binary distribution (" + platform.getPackageName(version) + ".tar.gz)" +print "Using the following third party libraries:" +if not platform.checkAndPrintThirdParties(): + print "error: some required third party dependencies were not found" + sys.exit(1) - # - # Remove compiled Java. - # - runprog("sh -c 'for f in `find Ice-" + version + "-demos/demoj -name classes -type d` ; do rm -rf $f/* ; done'") - - # - # Remove generated source files. - # - runprog("sh -c 'for f in `find Ice-" + version + "-demos/demoj -name generated -type d` ; do rm -rf $f/* ; done'") - - # - # Remove config files. - # - runprog("sh -c 'for f in `find Ice-" + version + "-demos/democs -name \"*\.config\" ` ; do rm -f $f ; done'") - runprog("sh -c 'for f in `find Ice-" + version + "-demos/demovb -name \"*\.config\" ` ; do rm -f $f ; done'") - - # - # Remove Windows project files. - # - runprog("sh -c 'for f in `find Ice-" + version + "-demos -name \"*\.dsp\" ` ; do rm -rf $f ; done'") - runprog("sh -c 'for f in `find Ice-" + version + "-demos -name \"*\.dsw\" ` ; do rm -rf $f ; done'") - runprog("sh -c 'for f in `find Ice-" + version + "-demos -name \"*.sln\" ` ; do rm -rf $f ; done'") - runprog("sh -c 'for f in `find Ice-" + version + "-demos -name \"*.csproj\" ` ; do rm -rf $f ; done'") - runprog("sh -c 'for f in `find Ice-" + version + "-demos -name \"*.vbproj\" ` ; do rm -rf $f ; done'") - runprog("sh -c 'for f in `find Ice-" + version + "-demos -name \"*.vcproj\" ` ; do rm -rf $f ; done'") - - runprog("tar cf Ice-" + version + "-demos.tar Ice-" + version + "-demos") - runprog("gzip -9 Ice-" + version + "-demos.tar") - runprog("zip -9r Ice-" + version + "-demos.zip Ice-" + version + "-demos") - os.chdir(cwd) - -def makeInstall(sources, buildDir, installDir, distro, clean, version, mmVersion): - """Make the distro in buildDir sources and install it to installDir.""" - cwd = os.getcwd() - os.chdir(buildDir) - if clean: - shutil.rmtree(distro, True) - - if not os.path.exists(distro): - filename = os.path.join(sources, distro + '.tar') - runprog('gzip -dc %s.gz | tar xf -' % filename) - - os.chdir(distro) +# +# Ensure that the source archive or directory exists and create the build directory. +# +buildRootDir = os.path.join(cwd, os.path.join("build-" + platform.pkgname + "-" + version)) +srcDir = os.path.join(buildRootDir, "Ice-" + version + "-src") +buildDir = os.path.join(buildRootDir, "Ice-" + version) +if forceclean or not os.path.exists(srcDir) or not os.path.exists(buildDir): + if os.path.exists(buildRootDir): + print "Removing previous build from " + os.path.join("build-" + platform.pkgname + "-" + version) + "...", + sys.stdout.flush() + shutil.rmtree(buildRootDir) + print "ok" + os.mkdir(buildRootDir) # - # Java does not have a 'make install' process, but comes complete - # with the Jar already built. - # - if distro.startswith('IceJ'): - initDirectory(installDir) - initDirectory(os.path.join(installDir, 'lib')) - shutil.copy(os.path.join(buildDir, distro, "lib", "Ice.jar"), os.path.join(installDir, "lib")) - shutil.copy(os.path.join(buildDir, distro, "lib", "IceGridGUI.jar"), os.path.join(installDir, "lib")) - # - # We really just want to copy the files, not move them. - # Shelling out to a copy is easier (and more likely to always - # work) than shutil.copytree(). - # - runprog('cp -pR ' + os.path.join(buildDir, distro, "ant") + " " + installDir) - runprog('find ' + installDir + '/ant -name "*.java" | xargs rm') - initDirectory(os.path.join(installDir, 'help')) - runprog('cp -pR ' + buildDir + '/' + distro + '/resources/IceGridAdmin ' + installDir + '/help') - destDir = os.path.join(installDir, 'config') - if not os.path.exists(destDir): - os.mkdir(destDir) - shutil.copy(os.path.join('config', 'build.properties'), destDir) - os.chdir(cwd) - return - - if distro.startswith('IcePy'): - try: - pyHome = os.environ['PYTHON_HOME'] - except KeyError: - pyHome = None - - if pyHome == None or pyHome == '': - logging.info('PYTHON_HOME is not set, figuring it out and trying that') - pyHome = sys.exec_prefix - os.environ['PYTHON_HOME'] = pyHome - - # - # XXX- Optimizations need to be turned on for the release. + # If we can't find the source archive in the current directory, ask its location # - - try: - - buildCommand = "gmake NOGAC=yes OPTIMIZE=yes prefix=%s embedded_runpath_prefix=/opt/Ice-%s install" % \ - (installDir, mmVersion) - if getPlatform() == "solaris": - os.chdir(buildDir) - srcdir = os.path.join(buildDir, distro + "-64") - - if clean: - shutil.rmtree(srcdir, True) - if not os.path.exists(srcdir): - filename = os.path.join(sources, distro + '.tar') - runprog('gzip -dc %s.gz | tar xf -' % filename) - runprog("mv %s %s" % (distro, srcdir)) - - os.chdir(srcdir) - runprog("LP64=yes && export LP64 && " + buildCommand) - os.chdir(os.path.join(buildDir, distro)) - - runprog("LP64=no && export LP64 && " + buildCommand) - - except ExtProgramError: - print "gmake failed for makeInstall(%s, %s, %s, %s, %s, %s, %s)" % (sources, buildDir, installDir, distro, str(clean), version, mmVersion) - raise - - runprog('rm -rf /opt/Ice-%s' % (mmVersion), False) - - if distro.startswith('IceNET'): - assemblies = ["glacier2cs", "iceboxcs", "icecs", "icegridcs", "icepatch2cs", "icestormcs"] - - # - # We are relying on pkgconfig to deal with some mono library - # configuration, so we need to copy these files into place. - # - if not os.path.exists("%s/lib/pkgconfig" % installDir): - os.makedirs("%s/lib/pkgconfig" % installDir) - - for a in assemblies: - shutil.copy("bin/%s.dll" % a, "%s/bin/%s.dll" % (installDir, a)) - if os.path.exists("bin/policy.%s.%s" % (mmVersion, a)): - shutil.copy("bin/policy.%s.%s" % (mmVersion, a), "%s/bin/policy.%s.%s" % (installDir, mmVersion, a)) - shutil.copy("bin/policy.%s.%s.dll" % (mmVersion, a), - "%s/bin/policy.%s.%s.dll" % (installDir, mmVersion, a)) - shutil.copy("lib/pkgconfig/%s.pc" % a, "%s/lib/pkgconfig" % installDir) - - - os.chdir(cwd) - -def shlibExtensions(versionString, versionInt): - """Returns a tuple containing the extensions for the shared library, and - the 2 symbolic links (respectively)""" - platform = getPlatform() - if platform == 'hpux': - return ['.sl.' + versionString, '.sl.' + versionInt, '.sl'] - elif platform == 'macosx': - return ['.' + versionString + '.dylib', '.' + versionInt + '.dylib', '.dylib'] - else: - return ['.so.' + versionString, '.so.' + versionInt, '.so'] - -def getPlatformLibExtension(): - platform = getPlatform() - if platform == 'hpux': - return '.sl' - elif platform == 'macosx': - return '.dylib' - else: - return '.so' - -def getDBfiles(dbLocation): - cwd = os.getcwd() - os.chdir(dbLocation) - pipe_stdin, pipe_stdout = os.popen2('find bin -name "*" -type f') - lines = pipe_stdout.readlines() - pipe_stdin.close() - pipe_stdout.close() - - fileList = ['lib/db.jar'] - fileList.extend(lines) - - findCmd = '' - if getPlatform() == 'solaris': - # - # Removed the maxdepth limiter to pick up the 64 bit versions of the libraries. - # - findCmd = 'find lib -name "*' + getPlatformLibExtension() + '" -type f' + if not os.path.exists(os.path.join(cwd, "Ice-" + version + ".tar.gz")): + print + src = raw_input("Couldn't find Ice-" + version + ".tar.gz in current directory, please specify\n" + \ + "where to download or copy the source distribution or hit enter to \n" + \ + "download it from sun:/share/srcdists/" + version + ": ") + if src == "": + src = "sun:/share/srcdists/" + version + "/Ice-" + version + ".tar.gz" + elif not src.endswith("Ice-" + version + ".tar.gz"): + src = os.path.join(src, "Ice-" + version + ".tar.gz") + + if os.system("scp " + src + " ."): + print sys.argv[0] + ": couldn't copy " + src + sys.exit(1) - elif getPlatform() == 'macosx': - findCmd = 'find lib \( -name "*' + getPlatformLibExtension() + '" -or -name "*jnilib" \) -type f ' - else: - findCmd = 'find lib* -name "*' + getPlatformLibExtension() + '" -type f' - pipe_stdin, pipe_stdout = os.popen2(findCmd) - lines = pipe_stdout.readlines() - pipe_stdin.close() - pipe_stdout.close() - fileList.extend(lines) - if getPlatform() == 'aix': - fileList.append('lib/libdb_cxx.so') - - os.chdir(cwd) - - return fileList - -def copyExpatFiles(expatLocation, version): - cwd = os.getcwd() - os.chdir(expatLocation) - - fileList = [] - findCmd = '' - if getPlatform() == 'solaris': - findCmd = 'find lib -name "*' + getPlatformLibExtension() + '" -type f -maxdepth 1' - else: - findCmd = 'find lib* -name "*' + getPlatformLibExtension() + '" -type f' - pipe_stdin, pipe_stdout = os.popen2(findCmd) - lines = pipe_stdout.readlines() - pipe_stdin.close() - pipe_stdout.close() - fileList.extend(lines) - - linkList = [] - findCmd = '' - if getPlatform() == 'solaris': - findCmd = 'find lib -name "*' + getPlatformLibExtension() + '" -type l -maxdepth 1' - else: - findCmd = 'find lib* -name "*' + getPlatformLibExtension() + '" -type l' - pipe_stdin, pipe_stdout = os.popen2(findCmd) - lines = pipe_stdout.readlines() - pipe_stdin.close() - pipe_stdout.close() - fileList.extend(lines) - - for i in lines: - if i != 'libexpat.' + getPlatformLibExtension(): - linkList.append(i) - + print "Unpacking ./Ice-" + version + ".tar.gz ...", + sys.stdout.flush() + os.chdir(buildRootDir) + if os.system("gunzip -c " + os.path.join(cwd, "Ice-" + version + ".tar.gz") + " | tar x" + quiet + "f -"): + print sys.argv[0] + ": failed to unpack ./Ice-" + version + ".tar.gz" + sys.exit(1) + os.rename("Ice-" + version, srcDir) os.chdir(cwd) - - if not os.path.exists('Ice-' + version + '/' + fileList[0].strip()): - shutil.copy(expatLocation + '/' + fileList[0].strip(), 'Ice-' + version + '/' + fileList[0].strip()) - os.symlink(os.path.basename(fileList[0].strip()), 'Ice-' + version + '/' + linkList[0].strip()) - -def fixInstallNames(version, mmVersion): - - # - # Fix the install names of the 3rd party libraries. - # - libs = ['libdb-*.dylib', 'libdb_cxx-*.dylib', 'libdb_java-*.jnilib', 'libexpat*.dylib'] - oldInstallNames = [] - for l in libs: - p = os.popen('otool -D ' + 'Ice-' + version + '/lib/' + l + ' | tail -1') - oldInstallNames.append(p.readline().strip()) - p.close() - - allFiles = [] - p = os.popen('find Ice-' + version + '/bin -name "*" -type f') - allFiles.extend(p.readlines()) - p.close() - p = os.popen('find Ice-' + version + '/lib -name "*.dylib" -type f') - allFiles.extend(p.readlines()) - p.close() + print "ok" - binFiles = [] - for f in allFiles: - f = f.strip() - if not os.system('file -b ' + f + ' | grep -q "Mach-O"'): - os.system('chmod u+w ' + f) - binFiles.append(f) + os.mkdir(buildDir) - for oldName in oldInstallNames: - libName = re.sub("\/opt\/.*\/(.*)", "\\1", oldName) - newName = '/opt/Ice-' + mmVersion + '/' + libName - - os.system('install_name_tool -id ' + newName + ' Ice-' + version + '/lib/' + libName) - for f in binFiles: - os.system('install_name_tool -change ' + oldName + ' ' + newName + ' ' + f) - - -def usage(): - """Print usage/help information""" - print 'Usage: ' + sys.argv[0] + ' [options] [tag]' - print - print 'Options:' - print '-h Show this message.' - print '--build-dir=[path] Specify the directory where the distributions' - print ' will be unpacked and built.' - print '--install-dir=[path] Specify the directory where the distribution' - print ' contents will be installed to.' - print '--install-root=[path] Specify the root directory that will appear' - print ' in the tarball.' - print '--sources=[path] Specify the location of the sources directory.' - print ' If this is omitted makebindist will traverse' - print ' ../icej ../icepy ../icecs, etc and make the' - print ' distributions for you.' - print ' (Note: makedist.py seems to only work on Linux.' - print ' To use makebindist.py on other UNIX platforms,' - print ' you must copy pre-made source distributions onto' - print ' the host and use this option to reference their' - print ' location.' - print '-v, --verbose Print verbose processing messages.' - print '--noclean Do not clean up current sources where' - print ' applicable (some bits will still be cleaned.' - print '--nobuild Run through the process but don\'t build' - print ' anything new.' - print - print 'The following options set the locations for third party libraries' - print 'that may be required on your platform. Alternatively, you can' - print 'set these locations using environment variables of the form. If' - print 'you do not set locations through the enviroment or through the ' - print 'command line, default locations will be used (system defaults +' - print 'the default locations indicated).' - print - print 'LIBRARY_HOME=[path to library]' +# +# Build and install each language mappings supported by this platform in the build directory. +# +for l in languages: print - print 'e.g. for bzip2' - print - print 'export BZIP2_HOME=/opt/bzip2-1.0.3' - print - print '--stlporthome=[path] Specify location of the STLPort libraries, ' - print ' if required.' - print '--bzip2home=[path] Specify location of the bzip2 libraries ' - print ' (default=/opt/bzip2).' - print '--dbhome=[path] Specify location of Berkeley DB' - print ' (default=/opt/db).' - print '--sslhome=[path] Specify location of OpenSSL' - print ' (default=/opt/openssl).' - print '--expathome=[path] Specify location of expat libraries ' - print ' (default=/opt/expat).' - print '--readlinehome=[path] Specify readline library and location ' - print ' (defaults to /opt/readline if set).' + print "============= Building " + l + " sources =============" print - print 'If no tag is specified, HEAD is used.' - -def main(): - - buildEnvironment = dict() - buildDir = None - installDir = None - sources = os.getcwd() - installRoot = None - clean = True - build = True - version = None - mmVersion = None - soVersion = 0 - verbose = False - offline = False - - # - # Process args. - # - try: - optionList, args = getopt.getopt(sys.argv[1:], 'hvt:', - [ 'build-dir=', 'install-dir=', 'install-root=', 'sources=', - 'verbose', 'noclean', 'nobuild', - 'stlporthome=', 'bzip2home=', 'dbhome=', 'sslhome=', - 'expathome=', 'readlinehome=', 'offline', 'debug']) - - except getopt.GetoptError: - usage() - sys.exit(2) + os.chdir(os.path.join(srcDir, l)) - for o, a in optionList: - if o == '--build-dir': - buildDir = a - elif o == '--install-dir': - installDir = a - elif o == '--install-root': - installRoot = a - elif o == '--sources': - sources = a - elif o in ('-h', '--help'): - usage() - sys.exit() - elif o in ('-v', '--verbose'): - verbose = True - elif o == '--noclean': - clean = False - elif o == '--nobuild': - build = False - clean = False # Cleaning doesn't make much sense if we aren't building either. - elif o == '--stlporthome': - buildEnvironment['STLPORT_HOME'] = a - elif o == '--bzip2home': - buildEnvironment['BZIP2_HOME'] = a - elif o == '--dbhome': - buildEnvironment['DB_HOME'] = a - elif o == '--sslhome': - buildEnvironment['OPENSSL_HOME'] = a - elif o == '--expathome': - buildEnvironment['EXPAT_HOME'] = a - elif o == '--readlinehome': - buildEnvironment['READLINE_HOME'] = a - elif o == '--offline': - offline = True - - if sources == None or not os.path.exists(sources): - print "You must specify a valid location for the source distributions" - sys.exit(1) - - # - # Determine location of binary distribution-only files. - # - distfiles = None - trypaths = [ sources, os.getcwd() ] - for f in trypaths: - if os.path.exists(os.path.join(f, "distfiles.tar.gz")): - distfiles = os.path.join(f, "distfiles.tar.gz") - break - - if distfiles == None: - print "Unable to find distfiles.tar.gz." - sys.exit(1) - - if verbose: - logging.getLogger().setLevel(logging.DEBUG) - - if offline and sources == None: - logging.error("You must specify a location for the sources if running in offline mode") - sys.exit(1) - - # - # Configure environment. - # - if getPlatform() == 'aix': - dylibEnvironmentVar = 'LIBPATH' - elif getPlatform() == 'hpux': - dylibEnvironmentVar = 'SHLIB_PATH' - elif getPlatform() == 'macosx': - dylibEnvironmentVar = 'DYLD_LIBRARY_PATH' + if l != "java": + if os.system("gmake " + platform.getMakeEnvs(version, l) + " prefix=" + buildDir + " install") != 0: + print sys.argv[0] + ": `" + l + "' build failed" + os.chdir(cwd) + sys.exit(1) else: - dylibEnvironmentVar = 'LD_LIBRARY_PATH' - - for k, v in buildEnvironment.iteritems(): - os.environ[k] = v - if os.environ.has_key(dylibEnvironmentVar): - os.environ[dylibEnvironmentVar] = v + '/lib:' + os.environ[dylibEnvironmentVar] - - if buildDir == None: - print 'No build directory specified, defaulting to $HOME/tmp/icebuild' - buildDir = os.path.join(os.environ.get('HOME'), "tmp", "icebuild") - - if installDir == None: - print 'No install directory specified, default to $HOME/tmp/iceinstall' - installDir = os.path.join(os.environ.get('HOME'), "tmp", "iceinstall") - - # - # We need to clean the directory out to keep obsolete files from - # being installed. This needs to happen whether we are running with - # noclean or not. - # - if build: - if os.path.exists(installDir): - shutil.rmtree(installDir, True) - - directories = [buildDir, os.path.join(buildDir, "sources"), os.path.join(buildDir, "demotree"), - os.path.join(buildDir, "install"), installDir] - - for d in directories: - initDirectory(d) - - # - # Unpack and update distribution files. - # - # TODO: The updates performed here should be performed by the makedist script. - # - installFiles = None - os.system("gzip -dc " + distfiles + " | tar xf - -C " + os.path.join(buildDir, "install")) - configFile = os.path.join(buildDir, "install", "Config.h") - version = getIceVersion(configFile) - soVersion = getIceSoVersion(configFile) - mmVersion = getIceMMVersion(configFile) - version, soVersion, mmVersion = getVersion(buildDir) - installFiles = fixInstallFiles(buildDir, version, mmVersion) - - if verbose: - print 'Building binary distributions for Ice-' + version + ' on ' + getPlatformString() - print 'Using build directory: ' + buildDir - print 'Using install directory: ' + installDir - print - - # - # These last build directories will have to wait until we've got - # the version number for the distribution. - # - shutil.rmtree(buildDir + '/Ice-' + version + '-demos', True) - initDirectory(buildDir + '/Ice-' + version + '-demos/config') + antCmd = platform.getAntEnv() + " ant " + platform.getAntOptions() + " -Dprefix=" + buildDir - if build: - # - # Ice must be first or building the other source distributions will fail. - # - sourceTarBalls = [ ('cpp', 'Ice-%s' % version, ''), - ('java','IceJ-%s-java2' % version, 'j')] + if os.system(antCmd + " -Dbuild.suffix=-java2 -Dice.mapping=java2 install") != 0 or \ + os.system(antCmd + " -Dbuild.suffix=-java5 -Dice.mapping=java5 install") != 0: + print sys.argv[0] + ": `" + l + "' build failed" + os.chdir(cwd) + sys.exit(1) - if not getPlatform() in ['aix', 'solaris', 'hpux', 'macosx']: - sourceTarBalls.append(('php','IcePHP-' + version, 'php')) - - if not getPlatform() in ['aix', 'solaris', 'hpux']: - sourceTarBalls.append(('py','IcePy-' + version, 'py')) - - if getPlatform() == 'linux': - sourceTarBalls.append(('cs','IceNET-' + version, 'cs')) - if os.system('which ruby > /dev/null 2>&1') == 0: - sourceTarBalls.append(('rb', 'IceRuby-%s' % version, 'rb')) - - os.environ['ICE_HOME'] = os.path.join(buildDir, "Ice-" + version) - currentLibraryPath = None - try: - currentLibraryPath = os.environ[dylibEnvironmentVar] - except KeyError: - currentLibraryPath = '' - - os.environ[dylibEnvironmentVar] = os.path.join(buildDir, "Ice-" + version, "lib") + os.pathsep + currentLibraryPath - os.environ['PATH'] = os.path.join(buildDir, "Ice-" + version, "bin") + os.pathsep + os.environ['PATH'] - - # - # Package up demo distribution. - # - if getPlatform() != 'hpux' and getPlatform() != 'solaris' and getPlatform() != 'macosx': - toCollect = list(sourceTarBalls) - toCollect.append(('vb', 'IceVB-' + version, 'vb')) - for cvs, tarball, demoDir in toCollect: - extractDemos(sources, buildDir, version, tarball, demoDir) - shutil.copy("%s/common/README.DEMOS" % installFiles, "%s/Ice-%s-demos/README.DEMOS" % (buildDir, version)) - archiveDemoTree(buildDir, version, installFiles) - shutil.move("%s/Ice-%s-demos.tar.gz" % (buildDir, version), "%s/Ice-%s-demos.tar.gz" % (installDir, version)) - shutil.move("%s/Ice-%s-demos.zip" % (buildDir, version), "%s/Ice-%s-demos.zip" % (installDir, version)) - - # - # Everything should be set for building stuff up now. - # - for cvs, tarball, demoDir in sourceTarBalls: - makeInstall(sources, buildDir, "%s/Ice-%s" % (installDir, version), tarball, clean, version, mmVersion) - - # - # Put the Java2 jar in its directory - # - prevDir = os.getcwd() - os.chdir("%s/Ice-%s/lib" % (installDir, version)) - os.mkdir("java2") - shutil.move("Ice.jar", "java2/Ice.jar") - os.system("gzip -dc %s/IceJ-%s-java5.tar.gz | tar xf - IceJ-%s-java5/lib/Ice.jar" % (sources, version, version)) - shutil.move("IceJ-%s-java5/lib/Ice.jar" % version, "Ice.jar") - shutil.rmtree("IceJ-%s-java5" % version) - os.chdir(prevDir) - - # - # Sources should have already been built and installed. We - # can pick the binaries up from the iceinstall directory. - # - # TODO: What is this used for? - # - binaries = glob.glob(installDir + '/Ice-' + version + '/bin/*') - binaries.extend(glob.glob(installDir + '/Ice-' + version + '/lib/*' + shlibExtensions(version, soVersion)[0])) - - cwd = os.getcwd() - os.chdir(installDir) - - # - # Get third party libraries. - # - dbLocation = os.environ['DB_HOME'] - - dbFiles = getDBfiles(dbLocation) - for f in dbFiles: - if not os.path.exists('Ice-' + version + '/' + f.strip()): - shutil.copy(dbLocation + '/' + f.strip(), 'Ice-' + version + '/' + f.strip()) - - if getPlatform() == 'macosx': - copyExpatFiles(os.environ['EXPAT_HOME'], version) - - if getPlatform() == 'hpux': - ssl = os.environ['OPENSSL_HOME'] - shutil.copy('%s/bin/openssl' % ssl, 'Ice-%s/bin' % version) -# runprog('cp -R ' + ssl + '/include Ice-' + version) - runprog('cp ' + ssl + '/lib/lib*.sl.* Ice-' + version + '/lib') - runprog('rm -rf Ice-' + version + '/lib/libfips*') - runprog('rm -rf Ice-' + version + '/lib/engines') - runprog('rm -rf Ice-' + version + '/lib/pkgconfig') - runprog('rm -f Ice-' + version + '/lib/*.a') - - uname = readcommand('uname') - platformSpecificFiles = [ 'README', 'SOURCES', 'THIRD_PARTY_LICENSE' ] - for psf in platformSpecificFiles: - platform = uname - if psf == 'README': - if platform == 'Linux': - if os.system('test -f /etc/redhat-release') == 0: - platform = 'RHEL' - else: - platform = 'SLES' - elif platform == "SunOS": - cpu = readcommand("uname -p") - if cpu == "i386": - platform = platform + ".x86" - else: - platform = platform + ".SPARC" - cf = os.path.join(installFiles, 'unix', psf + '.' + platform) - if os.path.exists(cf): - shutil.copy(cf, os.path.join('Ice-' + version, psf)) + os.chdir(os.path.join(cwd)) + print + print "============= Finished buiding " + l + " sources =============" + print - # - # Remove build files from binary distribution. - # - runprog("rm -f Ice-%s/config/build.properties" % (version)) - runprog("rm -f Ice-%s/config/Make.rules*" % (version)) +# +# Copy platform third party dependencies. +# +print "Copying third party dependencies..." +sys.stdout.flush() +platform.copyThirdPartyDependencies(buildDir) +platform.completeDistribution(buildDir, version) - # - # Remove doc from binary distribution. - # - runprog("rm -rf Ice-%s/doc" % (version)) +# +# Copy platform specific files (README, SOURCES, etc) +# +print "Copying distribution files (README, SOURCES, etc)...", +sys.stdout.flush() +platform.copyDistributionFiles(distDir, buildDir) - # - # Fix install names on Mac OS X - # - if getPlatform() == 'macosx': - fixInstallNames(version, mmVersion) +if os.path.exists(os.path.join(buildDir, "doc")): + shutil.rmtree(os.path.join(buildDir, "doc")) +print "ok" - shutil.copyfile(os.path.join(buildDir, "install", "RELEASE_NOTES.txt"), - os.path.join(installDir, "Ice-%s" % version, "RELEASE_NOTES.txt")) +if not os.path.exists("RELEASE_NOTES.txt"): + print "warning: couldn't find ./RELEASE_NOTES.txt file" +else: + copy("RELEASE_NOTES.txt", os.path.join(buildDir, "RELEASE_NOTES.txt")) - runprog('tar cf Ice-' + version + '-bin-' + getPlatformString() + '.tar Ice-' + version) - runprog('gzip -9 Ice-' + version + '-bin-' + getPlatformString() + '.tar') - os.chdir(cwd) +# +# Everything should be clean now, we can create the binary distribution archive +# +print "Archiving " + platform.getPackageName(version) + ".tar.gz ...", +sys.stdout.flush() +os.chdir(buildRootDir) +tarfile = os.path.join(cwd, platform.getPackageName(version)) + ".tar.gz" +os.system("tar c" + quiet + "f - Ice-" + version + " | gzip -9 - > " + tarfile) +os.chdir(cwd) +print "ok" - # - # TODO: Cleanups? I've left everything in place so that the process - # can be easily debugged. - # +# +# Done. +# +print "Cleaning up...", +sys.stdout.flush() +shutil.rmtree(buildRootDir) +print "ok" -if __name__ == "__main__": - main() +os.chdir(cwd) |