diff options
author | Mark Spruiell <mes@zeroc.com> | 2005-07-26 19:32:28 +0000 |
---|---|---|
committer | Mark Spruiell <mes@zeroc.com> | 2005-07-26 19:32:28 +0000 |
commit | 2ca16d6aa96db0e2c7eb3f76d30e53190464a0a9 (patch) | |
tree | 98c5d467ac993f7ce630342bdf63be760b090c7e /cpp/iceemakedist.py | |
parent | reorganizing for Ice-E translator build (diff) | |
download | ice-2ca16d6aa96db0e2c7eb3f76d30e53190464a0a9.tar.bz2 ice-2ca16d6aa96db0e2c7eb3f76d30e53190464a0a9.tar.xz ice-2ca16d6aa96db0e2c7eb3f76d30e53190464a0a9.zip |
initial commit
Diffstat (limited to 'cpp/iceemakedist.py')
-rwxr-xr-x | cpp/iceemakedist.py | 412 |
1 files changed, 412 insertions, 0 deletions
diff --git a/cpp/iceemakedist.py b/cpp/iceemakedist.py new file mode 100755 index 00000000000..2f4a09bb11b --- /dev/null +++ b/cpp/iceemakedist.py @@ -0,0 +1,412 @@ +#!/usr/bin/env python +# ********************************************************************** +# +# Copyright (c) 2003-2005 ZeroC, Inc. All rights reserved. +# +# This copy of Ice is licensed to you under the terms described in the +# ICE_LICENSE file included in this distribution. +# +# ********************************************************************** + +import os, sys, shutil, fnmatch, re, glob, RPMTools + +# +# Program usage. +# +def usage(): + print "Usage: " + sys.argv[0] + " [options] [tag]" + print + print "Options:" + print "-h Show this message." + print "-v Be verbose." + print + print "If no tag is specified, HEAD is used." + +# +# Find files matching a pattern. +# +def find(path, patt): + result = [ ] + files = os.listdir(path) + for x in files: + fullpath = os.path.join(path, x); + if os.path.isdir(fullpath) and not os.path.islink(fullpath): + result.extend(find(fullpath, patt)) + elif fnmatch.fnmatch(x, patt): + result.append(fullpath) + return result + +# +# Comment out rules in a Makefile. +# +def fixMakefile(file, target): + origfile = file + ".orig" + os.rename(file, origfile) + oldMakefile = open(origfile, "r") + newMakefile = open(file, "w") + origLines = oldMakefile.readlines() + + doComment = 0 + doCheck = 0 + newLines = [] + for x in origLines: + # + # If the rule contains the target string, then + # comment out this rule. + # + if not x.startswith("\t") and x.find(target) != -1 and x.find(target + ".o") == -1: + doComment = 1 + # + # If the line starts with "clean::", then check + # the following lines and comment out any that + # contain the target string. + # + elif x.startswith("clean::"): + doCheck = 1 + # + # Stop when we encounter an empty line. + # + elif len(x.strip()) == 0: + doComment = 0 + doCheck = 0 + + if doComment or (doCheck and x.find(target) != -1): + x = "#" + x + newLines.append(x) + + newMakefile.writelines(newLines) + newMakefile.close() + oldMakefile.close() + os.remove(origfile) + +# +# Remove lines containing a keyword from a file. +# +def editFile(file, target): + origfile = file + ".orig" + os.rename(file, origfile) + oldFile = open(origfile, "r") + newFile = open(file, "w") + origLines = oldFile.readlines() + + newLines = [] + for x in origLines: + if x.find(target) == -1: + newLines.append(x) + + newFile.writelines(newLines) + newFile.close() + oldFile.close() + os.remove(origfile) + +# +# Comment out rules in VC project. +# +def fixProject(file, target): + origfile = file + ".orig" + os.rename(file, origfile) + oldProject = open(origfile, "r") + newProject = open(file, "w") + origLines = oldProject.readlines() + + # + # Find a Source File declaration containing SOURCE=<target> + # and comment out the entire declaration. + # + expr = re.compile("SOURCE=.*" + target.replace(".", "\\.") + ".*") + inSource = 0 + doComment = 0 + newLines = [] + source = [] + for x in origLines: + if x.startswith("# Begin Source File"): + inSource = 1 + + if inSource: + if not doComment and expr.match(x) != None: + doComment = 1 + source.append(x) + else: + newLines.append(x) + + if x.startswith("# End Source File"): + inSource = 0 + for s in source: + if doComment: + newLines.append('#xxx#' + s) + else: + newLines.append(s) + doComment = 0 + source = [] + + newProject.writelines(newLines) + newProject.close() + oldProject.close() + os.remove(origfile) + +# +# Comment out implicit parser/scanner rules in config/Make.rules. +# +def fixMakeRules(file): + origfile = file + ".orig" + os.rename(file, origfile) + oldFile = open(origfile, "r") + newFile = open(file, "w") + origLines = oldFile.readlines() + + doComment = 0 + newLines = [] + for x in origLines: + if x.find("%.y") != -1 or x.find("%.l") != -1: + doComment = 1 + # + # Stop when we encounter an empty line. + # + elif len(x.strip()) == 0: + doComment = 0 + + if doComment: + x = "#" + x + newLines.append(x) + + newFile.writelines(newLines) + newFile.close() + oldFile.close() + os.remove(origfile) + +# +# Fix version in README, INSTALL files +# +def fixVersion(files, version): + + for file in files: + origfile = file + ".orig" + os.rename(file, origfile) + oldFile = open(origfile, "r") + newFile = open(file, "w") + newFile.write(re.sub("@ver@", version, oldFile.read())) + newFile.close() + oldFile.close() + os.remove(origfile) + +# +# Check arguments +# +tag = "-rHEAD" +verbose = 0 +for x in sys.argv[1:]: + if x == "-h": + usage() + sys.exit(0) + elif x == "-v": + verbose = 1 + elif x.startswith("-"): + print sys.argv[0] + ": unknown option `" + x + "'" + print + usage() + sys.exit(1) + else: + tag = "-r" + x + +# +# Remove any existing "dist" directory and create a new one. +# +distdir = "dist" +if os.path.exists(distdir): + shutil.rmtree(distdir) +os.mkdir(distdir) +os.chdir(distdir) + +# +# Export sources from CVS. +# +print "Checking out CVS tag " + tag + "..." +if verbose: + quiet = "" +else: + quiet = "-Q" +os.system("cvs " + quiet + " -d cvs.zeroc.com:/home/cvsroot export -l " + tag + " " + + "ice " + + "ice/bin " + + "ice/config " + + "ice/include " + + "ice/include/IceUtil " + + "ice/include/Slice " + + "ice/lib " + + "ice/src " + + "ice/src/icecpp " + + "ice/src/IceUtil " + + "ice/src/Slice " + + "ice/src/slice2cppe " + + "ice/src/slice2javae " + + "icee/include/IceE/Config.h " + ) + +# +# Remove files. +# +print "Removing unnecessary files..." +filesToRemove = [ \ + os.path.join("ice", "iceemakedist.py"), \ + os.path.join("ice", "makedist.py"), \ + os.path.join("ice", "makebindist.py"), \ + os.path.join("ice", "newmakebindist.py"), \ + os.path.join("ice", "RPMTools.py"), \ + os.path.join("ice", "fixCopyright.py"), \ + os.path.join("ice", "fixVersion.py"), \ + os.path.join("ice", "minimal.dsp"), \ + os.path.join("ice", "all.dsw"), \ + os.path.join("ice", "all.dsp"), \ + os.path.join("ice", "allTests.py"), \ + ] +filesToRemove.extend(find("ice", ".dummy")) +for x in filesToRemove: + os.remove(x) + +# +# Generate bison files. +# +print "Generating bison files..." +cwd = os.getcwd() +grammars = find("ice", "*.y") +for x in grammars: + # + # Change to the directory containing the file. + # + (dir,file) = os.path.split(x) + os.chdir(dir) + (base,ext) = os.path.splitext(file) + # + # Run gmake to create the output files. + # + if verbose: + quiet = "" + else: + quiet = "-s" + if file == "cexp.y": + os.system("gmake " + quiet + " cexp.c") + else: + os.system("gmake " + quiet + " " + base + ".cpp") + # + # Edit the Makefile to comment out the grammar rules. + # + fixMakefile("Makefile", base) + # + # Edit the project file(s) to comment out the grammar rules. + # + for p in glob.glob("*.dsp"): + fixProject(p, file) + os.chdir(cwd) + +# +# Generate flex files. +# +print "Generating flex files..." +scanners = find("ice", "*.l") +for x in scanners: + # + # Change to the directory containing the file. + # + (dir,file) = os.path.split(x) + os.chdir(dir) + (base,ext) = os.path.splitext(file) + # + # Run gmake to create the output files. + # + if verbose: + quiet = "" + else: + quiet = "-s" + os.system("gmake " + quiet + " " + base + ".cpp") + # + # Edit the Makefile to comment out the flex rules. + # + fixMakefile("Makefile", base) + # + # Edit the project file(s) to comment out the flex rules. + # + for p in glob.glob("*.dsp"): + fixProject(p, file) + os.chdir(cwd) + +# +# Comment out the implicit parser and scanner rules in +# config/Make.rules. +# +print "Fixing makefiles..." +makeRulesName = os.path.join("ice", "config", "Make.rules") +fixMakeRules(makeRulesName) + +# +# Enable STATICLIBS and OPTIMIZE in config/Make.rules. +# +makeRules = open(makeRulesName, "r") +lines = makeRules.readlines() +makeRules.close() +for i in range(len(lines)): + if lines[i].find("#STATICLIBS") == 0: + lines[i] = lines[i].replace("#STATICLIBS", "STATICLIBS") + if lines[i].find("#OPTIMIZE") == 0: + lines[i] = lines[i].replace("#OPTIMIZE", "OPTIMIZE") +makeRules = open(makeRulesName, "w") +makeRules.writelines(lines) +makeRules.close() + +# +# Change SUBDIRS and INSTALL_SUBDIRS in top-level Makefile. +# +makeFileName = os.path.join("ice", "Makefile") +makeFile = open(makeFileName, "r") +lines = makeFile.readlines() +makeFile.close() +for i in range(len(lines)): + if lines[i].find("SUBDIRS") == 0: + lines[i] = "SUBDIRS = src\n" + if lines[i].find("INSTALL_SUBDIRS") == 0: + lines[i] = "INSTALL_SUBDIRS = $(install_bindir) $(install_libdir)\n" +makeFile = open(makeFileName, "w") +makeFile.writelines(lines) +makeFile.close() + +# +# Get Ice-E version. +# +config = open(os.path.join("icee", "include", "IceE", "Config.h"), "r") +version = re.search("ICEE_STRING_VERSION \"([0-9\.]*)\"", config.read()).group(1) + +#print "Fixing version in README and INSTALL files..." +#fixVersion(find("ice", "README*"), version) +#fixVersion(find("ice", "INSTALL*"), version) + +# +# Create archives. +# +print "Creating distribution..." +icever = "IceE-trans-" + version +os.rename("ice", icever) +if verbose: + quiet = "v" +else: + quiet = "" +os.system("chmod -R u+rw,go+r . " + icever) +os.system("find " + icever + " -type d -exec chmod a+x {} \\;") +os.system("tar c" + quiet + "f " + icever + ".tar " + icever) +os.system("gzip -9 " + icever + ".tar") +if verbose: + quiet = "" +else: + quiet = "q" +os.system("zip -9r" + quiet + " " + icever + ".zip " + icever) + +# +# Copy files (README, etc.). +# +#shutil.copyfile(os.path.join(icever, "CHANGES"), "Ice-" + version + "-CHANGES") + +# +# Done. +# +print "Cleaning up..." +#shutil.rmtree(icever) +shutil.rmtree("icee") +print "Done." |