summaryrefslogtreecommitdiffstats
path: root/Mac
diff options
context:
space:
mode:
Diffstat (limited to 'Mac')
-rw-r--r--Mac/scripts/binhextree.py107
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: