diff options
Diffstat (limited to 'zenmap/install_scripts/macosx/make-bundle.sh')
-rwxr-xr-x | zenmap/install_scripts/macosx/make-bundle.sh | 106 |
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 |