1
0
mirror of https://github.com/nmap/nmap.git synced 2025-12-06 04:31:29 +00:00
Files
nmap/macosx/make-app.sh
2025-04-29 19:49:09 +00:00

112 lines
2.9 KiB
Bash

#!/bin/sh
set -x
set -e
if [ "x$1" == "x" ]; then
echo "Need a name"
exit 1
fi
package=$1
if [ "x$2" == "x" ]; then
echo "Need a JHBUILD_PREFIX"
exit 1
fi
JHBUILD_PREFIX=$2
bundle=$package.app
bundle_contents="$bundle"/Contents
bundle_res="$bundle_contents"/Resources
bundle_lib="$bundle_res"/lib
bundle_bin="$bundle_res"/bin
bundle_data="$bundle_res"/share
function do_lib() {
libname=$1
grep '^lib/.*\.dylib$' "$JHBUILD_PREFIX/_jhbuild/manifests/$libname" >/tmp/$libname.libs
rsync -avu --files-from /tmp/$libname.libs "$JHBUILD_PREFIX/" "$bundle_res"
}
ESCAPED_PREFIX=$(echo "$JHBUILD_PREFIX" | sed 's/\([\/\\.]\)/\\\1/g')
function run_install_name_tool() {
bin=$1
otool -L "$bin" | awk "/$ESCAPED_PREFIX/{print \$1}" | while read dep; do
install_name_tool -change $dep $(echo $dep | sed "s/$ESCAPED_PREFIX\/lib/@executable_path\/..\/lib/") "$bin"
done
}
function do_jhbuild_app() {
do_lib openssl
cp launcher.sh "$bundle_contents"/MacOS/$package
rsync -avu --files-from "$JHBUILD_PREFIX/_jhbuild/manifests/$package" "$JHBUILD_PREFIX/" "$bundle_res"
}
mkdir -p "$bundle_res"
mkdir -p "$bundle_contents"/MacOS
APP_WEB_SITE=https://nmap.org/
BUNDLE_ID=org.insecure.nmap
case "$package" in
nmap)
do_jhbuild_app
do_lib libpcap
do_lib libpcre2
rm "$bundle_lib"/libpcre2-{16,32,posix}.*
do_lib libssh2
do_lib zlib
run_install_name_tool "$bundle_bin"/nmap
;;
ncat)
do_jhbuild_app
run_install_name_tool "$bundle_bin"/ncat
APP_WEB_SITE="${APP_WEB_SITE}ncat/"
BUNDLE_ID="${BUNDLE_ID}.ncat"
;;
nping)
do_jhbuild_app
do_lib libpcap
run_install_name_tool "$bundle_bin"/nping
APP_WEB_SITE="${APP_WEB_SITE}nping/"
BUNDLE_ID="${BUNDLE_ID}.nping"
;;
ndiff)
APP_WEB_SITE="${APP_WEB_SITE}ndiff/"
BUNDLE_ID="${BUNDLE_ID}.ndiff"
ln -sf '../Resources/ndiff.py' "$bundle_contents"/MacOS/ndiff
cp ../ndiff/ndiff.py "$bundle_res/"
cp ../ndiff/docs/ndiff.1 "$bundle_res/"
;;
*)
echo "Invalid package $package"
exit 2
;;
esac
echo "Filling out Info.plist"
export APP_WEB_SITE
export BUNDLE_ID
export package
python3 - "Info.plist.in" >"$bundle/Info.plist" <<'EOF'
import sys
from os import environ
from string import Template
with open(sys.argv[1],"r",encoding="utf-8") as f:
sys.stdout.write(Template(f.read()).substitute(
BUNDLE_IDENTIFIER=environ["BUNDLE_ID"],
BUNDLE_NAME=environ["package"].title(),
BUNDLE_EXE=environ["package"],
OSX_MIN_VERSION=environ["OSX_MIN_VERSION"],
VERSION=environ["NMAP_VERSION"],
APP_WEB_SITE=environ["APP_WEB_SITE"],
APP_COPYRIGHT="Copyright 1996-2025 Nmap Software LLC",
EXTRA_DICT_CONTENT=""
))
EOF
find "$bundle_lib" -type f -name '*.dylib' | while read so; do
run_install_name_tool "$so"
# This isn't truly necessary, but it allows us to do a simpler check for problems later.
dep=$(basename "$so")
install_name_tool -id "@executable_path/../lib/$dep" "$so"
done