summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--changes/feature_package_osx1
-rw-r--r--pkg/osx/Info.plist34
-rw-r--r--pkg/osx/bitmask.icnsbin0 -> 47303 bytes
-rwxr-xr-xsetup.py29
-rw-r--r--src/leap/bitmask/__init__.py6
-rw-r--r--src/leap/bitmask/gui/__init__.py6
6 files changed, 57 insertions, 19 deletions
diff --git a/changes/feature_package_osx b/changes/feature_package_osx
new file mode 100644
index 00000000..cf5823bd
--- /dev/null
+++ b/changes/feature_package_osx
@@ -0,0 +1 @@
+- Add the ability to create an osx bundle with py2app. Closes #5845. \ No newline at end of file
diff --git a/pkg/osx/Info.plist b/pkg/osx/Info.plist
index e90d920a..dc427c4a 100644
--- a/pkg/osx/Info.plist
+++ b/pkg/osx/Info.plist
@@ -2,21 +2,23 @@
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
- <key>CFBundleDisplayName</key>
- <string>leap-client</string>
- <key>CFBundleExecutable</key>
- <string>MacOS/app</string>
- <key>CFBundleIconFile</key>
- <string>icon-windowed.icns</string>
- <key>CFBundleInfoDictionaryVersion</key>
- <string>6.0</string>
- <key>CFBundleName</key>
- <string>leap-client</string>
- <key>CFBundlePackageType</key>
- <string>APPL</string>
- <key>CFBundleShortVersionString</key>
- <string>1</string>
- <key>LSBackgroundOnly</key>
- <false/>
+ <key>CFBundleDisplayName</key>
+ <string>Bitmask</string>
+ <key>CFBundleExecutable</key>
+ <string>app</string>
+ <key>CFBundleIconFile</key>
+ <string>bitmask.icns</string>
+ <key>CFBundleInfoDictionaryVersion</key>
+ <string>6.0</string>
+ <key>CFBundleName</key>
+ <string>Bitmask</string>
+ <key>CFBundlePackageType</key>
+ <string>APPL</string>
+ <key>CFBundleShortVersionString</key>
+ <string>1</string>
+ <key>LSBackgroundOnly</key>
+ <false/>
+ <key>CFBundleIdentifier</key>
+ <string>se.leap.bitmask</string>
</dict>
</plist>
diff --git a/pkg/osx/bitmask.icns b/pkg/osx/bitmask.icns
new file mode 100644
index 00000000..7cc3e752
--- /dev/null
+++ b/pkg/osx/bitmask.icns
Binary files differ
diff --git a/setup.py b/setup.py
index bb1937cc..7cd48799 100755
--- a/setup.py
+++ b/setup.py
@@ -253,7 +253,8 @@ cmdclass["sdist"] = cmd_sdist
import platform
_system = platform.system()
-IS_LINUX = True if _system == "Linux" else False
+IS_LINUX = _system == "Linux"
+IS_MAC = _system == "Darwin"
data_files = []
@@ -267,6 +268,31 @@ if IS_LINUX:
["pkg/linux/bitmask-root"]),
]
+extra_options = {}
+
+if IS_MAC:
+ extra_options["app"] = ['src/leap/bitmask/app.py']
+ OPTIONS = {
+ 'argv_emulation': True,
+ 'plist': 'pkg/osx/Info.plist',
+ 'iconfile': 'pkg/osx/bitmask.icns',
+ }
+ extra_options["options"] = {'py2app': OPTIONS}
+ extra_options["setup_requires"] = ['py2app']
+
+ class jsonschema_recipe(object):
+ def check(self, dist, mf):
+ m = mf.findNode('jsonschema')
+ if m is None:
+ return None
+
+ # Don't put jsonschema in the site-packages.zip file
+ return dict(
+ packages=['jsonschema']
+ )
+
+ import py2app.recipes
+ py2app.recipes.jsonschema = jsonschema_recipe()
setup(
name="leap.bitmask",
@@ -305,4 +331,5 @@ setup(
entry_points={
'console_scripts': [leap_launcher]
},
+ **extra_options
)
diff --git a/src/leap/bitmask/__init__.py b/src/leap/bitmask/__init__.py
index 0f733f26..03da1e2f 100644
--- a/src/leap/bitmask/__init__.py
+++ b/src/leap/bitmask/__init__.py
@@ -25,6 +25,12 @@ from pkg_resources import parse_version
from leap.bitmask.util import first
+# HACK: This is a hack so that py2app copies _scrypt.so to the right
+# place, it can't be technically imported, but that doesn't matter
+# because the import is never executed
+if False:
+ import _scrypt
+
def _is_release_version(version):
"""
diff --git a/src/leap/bitmask/gui/__init__.py b/src/leap/bitmask/gui/__init__.py
index 4b289442..94bf1fd5 100644
--- a/src/leap/bitmask/gui/__init__.py
+++ b/src/leap/bitmask/gui/__init__.py
@@ -17,5 +17,7 @@
"""
init file for leap.gui
"""
-app = __import__("app", globals(), locals(), [], 2)
-__all__ = [app]
+# This was added for coverage and testing, but when doing the osx
+# bundle with py2app it fails because of this, so commenting for now
+# app = __import__("app", globals(), locals(), [], 2)
+# __all__ = [app]