Added --link-exec option: make a symlink for the executable only, copy all other files.
diff --git a/Mac/Lib/bundlebuilder.py b/Mac/Lib/bundlebuilder.py
index 7854770..1503f2b 100755
--- a/Mac/Lib/bundlebuilder.py
+++ b/Mac/Lib/bundlebuilder.py
@@ -212,16 +212,18 @@
 			it will simply be used as the main executable.
 		nibname: The name of the main nib, for Cocoa apps. Defaults
 			to None, but must be specified when building a Cocoa app.
+		symlink_exec: Symlink the executable instead of copying it.
 
 	For the other keyword arguments see the BundleBuilder doc string.
 	"""
 
 	def __init__(self, name=None, mainprogram=None, executable=None,
-			nibname=None, **kwargs):
+			nibname=None, symlink_exec=0, **kwargs):
 		"""See the class doc string for a description of the arguments."""
 		self.mainprogram = mainprogram
 		self.executable = executable
 		self.nibname = nibname
+		self.symlink_exec = symlink_exec
 		BundleBuilder.__init__(self, name=name, **kwargs)
 
 	def setup(self):
@@ -254,7 +256,10 @@
 				execpath = pathjoin(self.execdir, self.name)
 			else:
 				execpath = pathjoin(resdir, os.path.basename(self.executable))
-			self.files.append((self.executable, execpath))
+			if not self.symlink_exec:
+				self.files.append((self.executable, execpath))
+			else:
+				self.execpath = execpath
 			# For execve wrapper
 			setexecutable = setExecutableTemplate % os.path.basename(self.executable)
 		else:
@@ -272,6 +277,14 @@
 			open(mainwrapperpath, "w").write(mainWrapperTemplate % locals())
 			os.chmod(mainwrapperpath, 0777)
 
+	def postProcess(self):
+		if self.symlink_exec and self.executable:
+			self.message("Symlinking executable %s to %s" % (self.executable,
+					self.execpath), 2)
+			dst = pathjoin(self.bundlepath, self.execpath)
+			makedirs(os.path.dirname(dst))
+			os.symlink(os.path.abspath(self.executable), dst)
+
 
 def copy(src, dst, mkdirs=0):
 	"""Copy a file or a directory."""
@@ -329,6 +342,7 @@
       --nib=NAME         main nib name
   -c, --creator=CCCC     4-char creator code (default: '????')
   -l, --link             symlink files/folder instead of copying them
+      --link-exec        symlink the executable instead of copying it
   -v, --verbose          increase verbosity level
   -q, --quiet            decrease verbosity level
   -h, --help             print this message
@@ -346,8 +360,8 @@
 
 	shortopts = "b:n:r:e:m:c:plhvq"
 	longopts = ("builddir=", "name=", "resource=", "executable=",
-		"mainprogram=", "creator=", "nib=", "plist=", "link", "help",
-		"verbose", "quiet")
+		"mainprogram=", "creator=", "nib=", "plist=", "link",
+		"link-exec", "help", "verbose", "quiet")
 
 	try:
 		options, args = getopt.getopt(sys.argv[1:], shortopts, longopts)
@@ -373,6 +387,8 @@
 			builder.plist = Plist.fromFile(arg)
 		elif opt in ('-l', '--link'):
 			builder.symlink = 1
+		elif opt == '--link-exec':
+			builder.symlink_exec = 1
 		elif opt in ('-h', '--help'):
 			usage()
 		elif opt in ('-v', '--verbose'):