diff options
Diffstat (limited to 'Mac/scripts/binhextree.py')
-rw-r--r-- | Mac/scripts/binhextree.py | 107 |
1 files changed, 103 insertions, 4 deletions
diff --git a/Mac/scripts/binhextree.py b/Mac/scripts/binhextree.py index 9ffefbe..fa95af7 100644 --- a/Mac/scripts/binhextree.py +++ b/Mac/scripts/binhextree.py @@ -13,19 +13,118 @@ import os import binhex import sys +import macostools +import macfs -extensions = ['.rsrc'] +import addpack +addpack.addpack('Tools') +addpack.addpack('bgen') +addpack.addpack('AE') +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' + +# Helper routines +def binhexit(path, name): + dstfile = path + '.hqx' + if os.path.exists(dstfile) and \ + os.stat(dstfile)[8] > os.stat(path)[8]: + print 'Skip', path,'- Up-to-date' + return + print 'Binhexing', path + binhex.binhex(path, dstfile) + +# Project files to handle +project_files = {} + +def hexbincwprojects(creator): + """Compact and hexbin all files remembered with a given creator""" + print 'Please start project mgr with signature', creator,'-' + sys.stdin.readline() + try: + mgr = MwShell(creator) + except 'foo': + print 'Not handled:', creator + return + for fss in project_files[creator]: + srcfile = fss.as_pathname() + dstfile = srcfile + '.hqx' + if os.path.exists(dstfile) and \ + os.stat(dstfile)[8] > os.stat(srcfile)[8]: + print 'Skip', path,'- Up-to-date' + continue + print 'Compacting', dstfile + mgr.open(fss) + mgr.Reset_File_Paths() + mgr.Remove_Binaries() + mgr.Close_Project() + + print 'Binhexing', dstfile + binhex.binhex(srcfile, dstfile) + 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 not os.path.exists(dstdir): + print dstdir + print 'No CW-project dir, skip', name + return + dstfile = os.path.join(dstdir, name) + # Check that we're not in the dest directory + if dstfile == path: + return + + # 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) + + fss = macfs.FSSpec(dstfile) + creator = fss.GetCreatorType()[0] + + if project_files.has_key(creator): + project_files[creator].append(fss) + else: + project_files[creator] = [fss] + + +extensions = [ + ('.rsrc', binhexit), + ('.µ', copycwproject) + ] def walker(arg, top, names): for n in names: - for ext in extensions: + for ext, handler in extensions: if n[-len(ext):] == ext: name = os.path.join(top, n) - print 'Binhexing', name - binhex.binhex(name, name + '.hqx') + 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: |