summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStefano Pigozzi <stefano.pigozzi@gmail.com>2013-04-08 21:44:46 +0200
committerStefano Pigozzi <stefano.pigozzi@gmail.com>2013-04-08 21:44:46 +0200
commitae9e7b5a4a28ef549cc047f94f41aae8c24de2b6 (patch)
tree2dcf6d230463e67d721e72a763b581e9d7893524
parenta95a5bcf2f9ee4cba8e33bcc9e6ce668260026d3 (diff)
downloadmpv-ae9e7b5a4a28ef549cc047f94f41aae8c24de2b6.tar.bz2
mpv-ae9e7b5a4a28ef549cc047f94f41aae8c24de2b6.tar.xz
make: add osxbundle-skip-deps
This adds a way to generate a Mac OS X application bundle without the bundled dependencies. fixes #57
-rw-r--r--Makefile3
-rwxr-xr-xTOOLS/osxbundle.py71
2 files changed, 53 insertions, 21 deletions
diff --git a/Makefile b/Makefile
index 9bf761aa1f..6cd62d1bf3 100644
--- a/Makefile
+++ b/Makefile
@@ -461,6 +461,9 @@ tags:
osxbundle:
@TOOLS/osxbundle.py mpv
+osxbundle-skip-deps:
+ @TOOLS/osxbundle.py --skip-deps mpv
+
-include $(DEP_FILES)
.PHONY: all *install* *clean .version
diff --git a/TOOLS/osxbundle.py b/TOOLS/osxbundle.py
index 8005f8c8c4..e0f240797f 100755
--- a/TOOLS/osxbundle.py
+++ b/TOOLS/osxbundle.py
@@ -4,6 +4,7 @@ import os
import re
import shutil
import sys
+from optparse import OptionParser
def sh(command):
return os.popen(command).read()
@@ -28,27 +29,27 @@ def user_dylib_lst(input_file):
return [lib for lib in dylib_lst(input_file).split("\n") if
is_user_lib(lib, input_file)]
-def bundle_name():
+def bundle_name(binary_name):
return "%s.app" % binary_name
-def target_plist():
- return os.path.join(bundle_name(), 'Contents', 'Info.plist')
+def target_plist(binary_name):
+ return os.path.join(bundle_name(binary_name), 'Contents', 'Info.plist')
-def target_directory():
- return os.path.join(bundle_name(), 'Contents', 'MacOS')
+def target_directory(binary_name):
+ return os.path.join(bundle_name(binary_name), 'Contents', 'MacOS')
-def target_binary():
- return os.path.join(target_directory(), binary_name)
+def target_binary(binary_name):
+ return os.path.join(target_directory(binary_name), binary_name)
-def copy_bundle():
- if os.path.isdir(bundle_name()):
- shutil.rmtree(bundle_name())
+def copy_bundle(binary_name):
+ if os.path.isdir(bundle_name(binary_name)):
+ shutil.rmtree(bundle_name(binary_name))
shutil.copytree(
- os.path.join('TOOLS', 'osxbundle', bundle_name()),
- bundle_name())
+ os.path.join('TOOLS', 'osxbundle', bundle_name(binary_name)),
+ bundle_name(binary_name))
-def copy_binary():
- shutil.copy(binary_name, target_binary())
+def copy_binary(binary_name):
+ shutil.copy(binary_name, target_binary(binary_name))
def run_install_name_tool(target_file, dylib_path, dest_dir, root=True):
new_dylib_path = os.path.join("@executable_path", "lib",
@@ -83,12 +84,40 @@ def fix_dylibs_paths(target_file, dest_dir, root=True):
def apply_plist_template(plist_file, version):
sh("sed -i -e 's/{{VERSION}}/%s/g' %s" % (version, plist_file))
-version = sh("TOOLS/osxbundle/version.sh").strip()
+def bundle_dependencies(binary_name):
+ lib_bundle_directory = os.path.join(target_directory(binary_name), "lib")
+ cp_dylibs(binary_name, lib_bundle_directory)
+ fix_dylibs_paths(target_binary(binary_name), lib_bundle_directory)
-print("Creating Mac OS X application bundle (version: %s)..." % version)
+def main():
+ version = sh("TOOLS/osxbundle/version.sh").strip()
-copy_bundle()
-copy_binary()
-apply_plist_template(target_plist(), version)
-cp_dylibs(sys.argv[1], os.path.join(target_directory(), "lib"))
-fix_dylibs_paths(target_binary(), os.path.join(target_directory(), "lib"))
+ usage = "usage: %prog [options] arg"
+ parser = OptionParser(usage)
+ parser.add_option("-s", "--skip-deps", action="store_false", dest="deps",
+ default=True,
+ help="don't bundle the dependencies")
+
+ (options, args) = parser.parse_args()
+
+ if len(args) != 1:
+ parser.error("incorrect number of arguments")
+ else:
+ binary_name = args[0]
+
+ print("Creating Mac OS X application bundle (version: %s)..." % version)
+ print("> copying bundle skeleton")
+ copy_bundle(binary_name)
+ print("> copying binary")
+ copy_binary(binary_name)
+ print("> generating Info.plist")
+ apply_plist_template(target_plist(binary_name), version)
+
+ if options.deps:
+ print("> bundling dependencies")
+ bundle_dependencies(binary_name)
+
+ print("done.")
+
+if __name__ == "__main__":
+ main()