summaryrefslogtreecommitdiffstats
path: root/zenmap/install_scripts/macosx/make-bundle.sh
diff options
context:
space:
mode:
Diffstat (limited to 'zenmap/install_scripts/macosx/make-bundle.sh')
-rwxr-xr-xzenmap/install_scripts/macosx/make-bundle.sh106
1 files changed, 106 insertions, 0 deletions
diff --git a/zenmap/install_scripts/macosx/make-bundle.sh b/zenmap/install_scripts/macosx/make-bundle.sh
new file mode 100755
index 0000000..7f37d05
--- /dev/null
+++ b/zenmap/install_scripts/macosx/make-bundle.sh
@@ -0,0 +1,106 @@
+#!/bin/bash -e
+set -x
+
+test "x$UNDER_JHBUILD" = "x" && exit 1
+
+# make-bundle.sh
+APP_NAME=Zenmap
+ZENMAP_DIST_DIR=$PWD/dist
+ZENMAP_BUILD_DIR=$PWD/build
+
+export ZENMAP_DIST_DIR
+export ZENMAP_BUILD_DIR
+
+BASE=$ZENMAP_DIST_DIR/$APP_NAME.app/Contents
+SCRIPT_DIR=`dirname "$0"`
+
+echo "Running $0."
+
+echo "Removing old build."
+rm -rf "$ZENMAP_DIST_DIR" "$ZENMAP_BUILD_DIR"
+
+echo "Building python-launcher"
+$CC $CPPFLAGS $CFLAGS $LDFLAGS -L$PREFIX/lib `python3-config --cflags --ldflags --embed` \
+ -o $PREFIX/bin/zenmap-launcher \
+ ~/gtk-mac-bundler/examples/python-launcher.c
+
+echo "Installing Zenmap to local system"
+python3 setup.py install vanilla --prefix "$PREFIX"
+
+echo "Generating dependencies"
+# Have to run this with ~/gtk/inst/python3 or deps have wrong paths
+export XDG_DATA_DIRS=$PREFIX/share
+export DYLD_LIBRARY_PATH=$PREFIX/lib
+export LD_LIBRARY_PATH=$PREFIX/lib
+export GTK_DATA_PREFIX=$PREFIX
+export GTK_EXE_PREFIX=$PREFIX
+export GTK_PATH=$PREFIX
+export PANGO_RC_FILE=$PREFIX/etc/pango/pangorc
+export PANGO_SYSCONFDIR=$PREFIX/etc
+export PANGO_LIBDIR=$PREFIX/lib
+export GDK_PIXBUF_MODULE_FILE=$PREFIX/lib/gdk-pixbuf-2.0/2.10.0/loaders.cache
+export GTK_IM_MODULE_FILE=$PREFIX/etc/gtk-3.0/gtk.immodules
+export GI_TYPELIB_PATH=$PREFIX/lib/girepository-1.0
+
+python3 "$SCRIPT_DIR/../utils/get_deps.py" "$SCRIPT_DIR/pyreqs.xml"
+# gtk-mac-bundler (xml.dom.minidom) doesn't expand external entities
+xmllint --format --noent "$SCRIPT_DIR/zenmap.bundle" > "$SCRIPT_DIR/tmp.bundle"
+
+echo "Building bundle"
+gtk-mac-bundler "$SCRIPT_DIR/tmp.bundle"
+
+echo "Removing unneeded items"
+# GIR files not needed, only typelib
+rm -rf $BASE/Resources/share/gir-1.0/
+
+echo "Creating caches"
+pushd "$BASE/Resources"
+export GDK_PIXBUF_MODULEDIR=$(ls - lib/gdk-pixbuf-2.0/2.*/loaders)
+gdk-pixbuf-query-loaders > "$GDK_PIXBUF_MODULEDIR".cache
+gtk-update-icon-cache share/icons/hicolor
+popd
+
+# echo "Compiling Python to bytecode"
+PYTHONLIB=$(ls -d $BASE/Resources/lib/python3.*)
+# Remove compiled bytecode, recompile in legacy locations, allowing for removal of source.
+# See PEP-3147
+find "$PYTHONLIB" -depth \( -name 'zenmap*' -o -name 'radialnet' \) -prune -o -name __pycache__ -exec rm -rf '{}' \;
+python -m compileall -b -x 'zenmapGUI|zenmapCore|radialnet' "$PYTHONLIB"
+
+# Remove source if compiled is available, except for Zenmap itself:
+find "$PYTHONLIB" \( -name 'zenmap*' -o -name 'radialnet' \) -prune -o \( -name '*.pyc' -print \) | while read pyc; do
+rm -f "${pyc%.pyc}.py"
+done
+
+# Now compile Zenmap using default (not legacy) location.
+# If we had used legacy location, python.exe tries to write out the PEP-3147
+# location anyway when source is available.
+python -m compileall "$PYTHONLIB"/site-packages #|| true
+echo "Stripping unoptimized Python libraries"
+
+echo "Building using distutils"
+python3 setup.py build --executable "/usr/bin/env python3"
+python3 setup.py install vanilla --prefix "$BASE/Resources"
+
+echo "Renaming main Zenmap executable."
+mv $BASE/MacOS/$APP_NAME $BASE/MacOS/zenmap.bin
+# This is a dummy script, so we'll clean it up:
+#rm $BASE/MacOS/$APP_NAME-bin
+
+echo "Compiling and installing authorization wrapper."
+echo $CC $CPPFLAGS $OBJCFLAGS $LDFLAGS -v "$SCRIPT_DIR/zenmap_auth.m" -lobjc -framework Foundation -o "$BASE/MacOS/$APP_NAME"
+$CC $CPPFLAGS $OBJCFLAGS $LDFLAGS -v "$SCRIPT_DIR/zenmap_auth.m" -lobjc -framework Foundation -o "$BASE/MacOS/$APP_NAME"
+
+echo "Filling out Info.plist"
+python3 - "$SCRIPT_DIR/Info.plist" >"$BASE/Info.plist" <<'EOF'
+import sys
+from string import Template
+from zenmapCore.Version import *
+from zenmapCore.Name import *
+with open(sys.argv[1],"r") as f:
+ sys.stdout.write(Template(f.read()).substitute(
+ VERSION=VERSION,
+ APP_WEB_SITE=APP_WEB_SITE,
+ APP_COPYRIGHT=APP_COPYRIGHT
+ ))
+EOF