diff options
Diffstat (limited to 'Mac/scripts')
-rw-r--r-- | Mac/scripts/binhextree.py | 240 |
1 files changed, 0 insertions, 240 deletions
diff --git a/Mac/scripts/binhextree.py b/Mac/scripts/binhextree.py deleted file mode 100644 index 1d6996e..0000000 --- a/Mac/scripts/binhextree.py +++ /dev/null @@ -1,240 +0,0 @@ -# -# binhextree - Recursively descend a directory and -# pack all resource files. -# -# Actually it doesn't binhex anymore, it only copies projects. -# -# Jack Jansen, CWI, August 1995. -# - -import os -import binhex -import sys -import macostools -import macfs - -import aetools -from Metrowerks_Shell_Suite import Metrowerks_Shell_Suite -from Required_Suite import Required_Suite - -class MwShell(aetools.TalkTo, Metrowerks_Shell_Suite, Required_Suite): - pass - -# Top-level directory -TOP='' - -# Where to put CW projects, relative to TOP -CWDIR=':Mac:mwerks:projects' -# From which folders to put projects there -CWDIRDIRS=['build.mac', 'build.macstand', 'build.macfreeze', 'PlugIns'] - -# Helper routines -def binhexit(path, name): - dstfile = path + '.hqx' - if os.path.exists(dstfile): - print 'Compare', path,'...', - if binhexcompare(path, dstfile): - print 'Identical, skipped.' - return - else: - print 'Not up-to-date.' - print 'Binhexing', path - binhex.binhex(path, dstfile) - -def binhexcompare(source, hqxfile): - """(source, hqxfile) - Check whether the two files match (forks only)""" - ifp = binhex.HexBin(hqxfile) - - sfp = open(source, 'rb') - while 1: - d = ifp.read(128000) - d2 = sfp.read(128000) - if d <> d2: - return 0 - if not d: break - sfp.close() - ifp.close_data() - - d = ifp.read_rsrc(128000) - if d: - sfp = binhex.openrsrc(source, 'rb') - d2 = sfp.read(128000) - if d <> d2: - return 0 - while 1: - d = ifp.read_rsrc(128000) - d2 = sfp.read(128000) - if d <> d2: - return 0 - if not d: break - return 1 - -# Project files to handle -project_files = {} - -def hexbincwprojects(creator): - """Compact and hexbin all files remembered with a given creator""" - cw_running = 0 - for fss in project_files[creator]: - srcfile = fss.as_pathname() - - old_style = 0 - if srcfile[-1] == 'µ': - dstfile = srcfile[:-1]+'mu.hqx' - old_style = 1 - elif srcfile[-3] == '.mu': - dstfile = srcfile + '.hqx' - elif ord(srcfile[-1]) >= 128: - dstfile = srcfile[:-1]+`ord(srcfile[-1])`+'.hqx' - else: - dstfile = srcfile + '.hqx' - - if os.path.exists(dstfile) and \ - os.stat(dstfile)[8] >= os.stat(srcfile)[8]: - print 'Skip', dstfile,'- Up-to-date' - continue - print 'Compacting', dstfile - if old_style: - if not cw_running: - try: - mgr = MwShell(creator, start=1) - except 'foo': - print 'Not handled:', creator - return - cw_running = 1 - mgr.open(fss) - mgr.Reset_File_Paths() - mgr.Remove_Binaries() - mgr.Close_Project() - - print 'Binhexing', dstfile - binhex.binhex(srcfile, dstfile) - if cw_running: - mgr.quit() - -def copycwproject(path, name): - """Copy CW project (if needed) and remember for hexbinning""" - global project_files - - dstdir = os.path.join(TOP, CWDIR) - if path[:len(dstdir)] == dstdir: - return - srcdir = os.path.split(path)[0] - srcdir = os.path.split(srcdir)[1] - if srcdir in CWDIRDIRS: - if not os.path.exists(dstdir): - print dstdir - print 'No CW-project dir, skip', name - return - dstfile = os.path.join(dstdir, os.path.join(srcdir, name)) - else: - if path[-2:] == '.µ': - dstfile = path[:-2]+ '.mu' - elif path[-4:] == '.prj': - dstfile = None - else: - return - - if dstfile: - # If the destination doesn't exists or is older that the source - # we copy and remember it - - if os.path.exists(dstfile) and \ - os.stat(dstfile)[8] >= os.stat(path)[8]: - print 'Not copying', path,'- Up-to-date' - else: - print 'Copy', path - macostools.copy(path, dstfile) - else: - dstfile = path - - fss = macfs.FSSpec(dstfile) - creator = fss.GetCreatorType()[0] - - if project_files.has_key(creator): - project_files[creator].append(fss) - else: - project_files[creator] = [fss] - -def copycwexpfile(path, name): - """Copy CW export file""" - global project_files - - dstdir = os.path.join(TOP, CWDIR) - if path[:len(dstdir)] == dstdir: - return - srcdir = os.path.split(path)[0] - srcdir = os.path.split(srcdir)[1] - if srcdir in CWDIRDIRS: - if not os.path.exists(dstdir): - print dstdir - print 'No CW-project dir, skip', name - return - dstfile = os.path.join(dstdir, os.path.join(srcdir, name)) - else: - if path[-6:] != '.µ.exp': - return - dstfile = path[:-6] + '.mu.exp' - if dstfile[-6:] == '.µ.exp': - dstfile = dstfile[:-6]+'.mu.exp' - - # If the destination doesn't exists or is older that the source - # we copy and remember it - - if os.path.exists(dstfile) and \ - os.stat(dstfile)[8] >= os.stat(path)[8]: - print 'Not copying', path,'- Up-to-date' - else: - print 'Copy', path - macostools.copy(path, dstfile) - -extensions = [ -## ('.rsrc', binhexit), -## ('.gif', binhexit), - ('.µ', copycwproject), - ('.prj', copycwproject), - ('.prj.exp', copycwexpfile), - ('.µ.exp', copycwexpfile) - ] - -def walker(arg, top, names): - lnames = names[:] - for n in lnames: - if n[0] == '(' and n[-1] == ')': - names.remove(n) - continue - for ext, handler in extensions: - if n[-len(ext):] == ext: - name = os.path.join(top, n) - handler(name, n) - -def dodir(name): - global TOP, project_files - TOP = name - os.path.walk(name, walker, None) - -## for creator in project_files.keys(): -## hexbincwprojects(creator) - project_files = {} - -def main(): - if len(sys.argv) > 1: - for dir in sys.argv[1:]: - dodir(dir) - elif os.name == 'mac': - import macfs - dir, ok = macfs.GetDirectory('Folder to search:') - if not ok: - sys.exit(0) - dodir(dir.as_pathname()) - else: - print 'Usage: hexbintree dir ...' - sys.exit(1) - if os.name == 'mac': - sys.exit(1) # Keep window - else: - sys.exit(0) - -if __name__ == '__main__': - main() - |