2021-03-20 14:54:52 +00:00
|
|
|
#!/bin/bash
|
|
|
|
set -e
|
|
|
|
|
2023-02-01 23:23:14 +00:00
|
|
|
if [ -z "$I2P_VERSION" ]; then
|
2023-02-01 22:30:36 +00:00
|
|
|
I2P_VERSION=2.1.0
|
|
|
|
fi
|
2023-02-01 23:23:14 +00:00
|
|
|
if [ -z "$I2P_BUILD_NUMBER" ]; then
|
2023-02-01 22:30:36 +00:00
|
|
|
I2P_BUILD_NUMBER=1
|
|
|
|
fi
|
|
|
|
|
2022-11-13 16:26:22 -05:00
|
|
|
if [ -f config.sh ]; then
|
2023-02-01 23:23:14 +00:00
|
|
|
. "config.sh"
|
2022-11-13 16:26:22 -05:00
|
|
|
fi
|
|
|
|
|
2021-03-21 10:16:33 -04:00
|
|
|
# old javas output version to stderr and don't support --version
|
2021-03-21 18:19:13 +00:00
|
|
|
JAVA=$(java --version 2>&1 | tr -d 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\n' | cut -d ' ' -f 2 | cut -d '.' -f 1 | tr -d '\n\t ')
|
2021-03-21 10:16:33 -04:00
|
|
|
|
|
|
|
if [ -z "$JAVA" ]; then
|
|
|
|
echo "Failed to parse Java version, java is:"
|
|
|
|
java -version
|
|
|
|
exit 1
|
|
|
|
fi
|
2021-03-20 14:54:52 +00:00
|
|
|
|
|
|
|
if [ "$JAVA" -lt "16" ]; then
|
|
|
|
echo "Java 16+ must be used to compile with jpackage on Mac, java is $JAVA"
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
2023-02-01 23:23:14 +00:00
|
|
|
if [ -z "${JAVA_HOME}" ]; then
|
2023-02-01 23:08:16 +00:00
|
|
|
JAVA_HOME=$(/usr/libexec/java_home)
|
2021-03-20 14:54:52 +00:00
|
|
|
fi
|
|
|
|
|
2023-02-01 23:08:16 +00:00
|
|
|
if [ -z "$I2P_SIGNER" ]; then
|
|
|
|
I2P_SIGNER=$(security find-identity -v -p codesigning | cut -d ' ' -f 3)
|
|
|
|
echo "Warning: using automatically configured signer ID, make sure this is the one you want: $I2P_SIGNER"
|
|
|
|
echo "continuing in 10 seconds"
|
|
|
|
sleep 10s
|
2021-08-01 16:23:47 +01:00
|
|
|
fi
|
2023-02-01 23:08:16 +00:00
|
|
|
if [ -z "$I2P_CODE_SIGNER" ]; then
|
|
|
|
I2P_CODE_SIGNER=$(security find-identity -v -p codesigning | cut -d ' ' -f 3)
|
|
|
|
echo "Warning: using automatically configured signer ID, make sure this is the one you want: $I2P_CODE_SIGNER"
|
|
|
|
echo "continuing in 10 seconds"
|
|
|
|
sleep 10s
|
2021-03-21 18:19:13 +00:00
|
|
|
fi
|
2023-02-01 23:08:16 +00:00
|
|
|
if [ -z "$I2P_SIGNER_USERPHRASE" ]; then
|
|
|
|
I2P_SIGNER_USERPHRASE=$(security find-identity -v -p codesigning | cut -d ' ' -f 3)
|
|
|
|
echo "Warning: using automatically configured signer ID, make sure this is the one you want: $I2P_SIGNER_USERPHRASE"
|
|
|
|
echo "continuing in 10 seconds"
|
|
|
|
sleep 10s
|
2022-11-13 16:53:20 -05:00
|
|
|
fi
|
|
|
|
|
2023-02-01 23:08:16 +00:00
|
|
|
|
|
|
|
|
2021-04-02 07:23:20 +01:00
|
|
|
echo "JAVA_HOME is $JAVA_HOME"
|
|
|
|
|
2021-03-20 14:54:52 +00:00
|
|
|
echo "cleaning"
|
|
|
|
./clean.sh
|
|
|
|
|
2022-06-23 03:34:15 +01:00
|
|
|
ARCH=$(uname -m)
|
2021-03-20 14:54:52 +00:00
|
|
|
HERE=$PWD
|
2023-01-24 03:58:20 +00:00
|
|
|
I2P_SRC=$HERE/../i2p.i2p-jpackage-mac/
|
2023-02-01 21:58:27 +00:00
|
|
|
|
|
|
|
if [ ! -d "$I2P_SRC" ]; then
|
|
|
|
git clone https://i2pgit.org/i2p-hackers/i2p.i2p "$I2P_SRC"
|
|
|
|
fi
|
|
|
|
|
2023-01-24 03:58:20 +00:00
|
|
|
I2P_JARS=$HERE/../i2p.i2p-jpackage-mac/pkg-temp/lib
|
|
|
|
I2P_PKG=$HERE/../i2p.i2p-jpackage-mac/pkg-temp
|
2021-03-20 14:54:52 +00:00
|
|
|
|
2023-02-01 22:50:34 +00:00
|
|
|
|
|
|
|
cd "$I2P_SRC"
|
2023-02-01 22:56:22 +00:00
|
|
|
git switch -
|
2023-02-01 22:50:34 +00:00
|
|
|
git pull --tags
|
|
|
|
git checkout "i2p-$I2P_VERSION"
|
|
|
|
OLDEXTRA=$(find ../i2p.i2p-jpackage-mac -name RouterVersion.java -exec grep 'String EXTRA' {} \;)
|
|
|
|
if [ -z "$EXTRA" ]; then
|
|
|
|
export EXTRACODE="mac"
|
|
|
|
export EXTRA=" public final static String EXTRA = \"-$EXTRACODE\";"
|
|
|
|
fi
|
2023-02-01 22:53:00 +00:00
|
|
|
sed -i.bak "s|$OLDEXTRA|$EXTRA|g" "$I2P_SRC/router/java/src/net/i2p/router/RouterVersion.java"
|
2023-02-01 22:50:34 +00:00
|
|
|
git checkout -b "i2p-$I2P_VERSION-$EXTRACODE" && git commit -am "i2p-$I2P_VERSION-$EXTRACODE"
|
|
|
|
git archive --format=tar.gz --output="$HERE/i2p.i2p.jpackage-mac.tar.gz" "i2p-$I2P_VERSION-$EXTRACODE"
|
2023-02-01 21:58:27 +00:00
|
|
|
if [ ! -d "$I2P_PKG" ]; then
|
|
|
|
ant clean preppkg-osx-only
|
|
|
|
fi
|
|
|
|
cd "$HERE"
|
|
|
|
|
2021-03-20 14:54:52 +00:00
|
|
|
mkdir build
|
|
|
|
|
2021-08-01 19:12:30 +01:00
|
|
|
echo "compiling custom launcher and update processor"
|
2023-02-01 23:23:14 +00:00
|
|
|
cp "$I2P_JARS"/*.jar build
|
2021-03-20 14:54:52 +00:00
|
|
|
cd java
|
2021-08-01 19:12:30 +01:00
|
|
|
javac -d ../build -classpath ../build/i2p.jar:../build/router.jar net/i2p/router/MacLauncher.java net/i2p/update/*.java
|
2023-01-24 03:58:20 +00:00
|
|
|
cd "$HERE"
|
|
|
|
|
2021-08-01 16:23:47 +01:00
|
|
|
echo "copying mac-update.sh"
|
|
|
|
cp bash/mac-update.sh build
|
|
|
|
|
2021-03-20 14:54:52 +00:00
|
|
|
echo "building launcher.jar"
|
|
|
|
cd build
|
2021-08-01 16:23:47 +01:00
|
|
|
jar -cf launcher.jar net mac-update.sh
|
2021-03-20 14:54:52 +00:00
|
|
|
cd ..
|
|
|
|
|
2021-04-02 07:23:20 +01:00
|
|
|
echo "compiling native lib"
|
2021-04-02 08:51:42 +01:00
|
|
|
cc -v -Wl,-lobjc -mmacosx-version-min=10.9 -I"$JAVA_HOME/include" -I"$JAVA_HOME/include/darwin" -Ic -o build/libMacLauncher.jnilib -shared c/net_i2p_router_MacLauncher.c
|
2021-04-02 07:23:20 +01:00
|
|
|
|
2023-02-01 23:23:14 +00:00
|
|
|
if [ -z "$I2P_SIGNER" ]; then
|
2022-12-09 15:58:25 +00:00
|
|
|
echo "I2P_SIGNER is unset, not proceeding to sign jbigi libs"
|
2023-02-01 23:23:14 +00:00
|
|
|
cp "$I2P_JARS"/jbigi.jar build
|
2022-12-09 15:58:25 +00:00
|
|
|
else
|
|
|
|
echo "signing jbigi libs"
|
|
|
|
mkdir jbigi
|
2023-02-01 23:23:14 +00:00
|
|
|
cp "$I2P_JARS"/jbigi.jar jbigi
|
2022-12-09 15:58:25 +00:00
|
|
|
cd jbigi
|
|
|
|
unzip jbigi.jar
|
|
|
|
for lib in *.jnilib; do
|
2023-02-01 23:23:14 +00:00
|
|
|
codesign --force -s "$I2P_SIGNER" -v "$lib"
|
|
|
|
jar uf jbigi.jar "$lib"
|
2022-12-09 15:58:25 +00:00
|
|
|
done
|
2022-12-09 16:08:10 +00:00
|
|
|
cp jbigi.jar ../build
|
|
|
|
cd ..
|
2022-12-09 15:58:25 +00:00
|
|
|
fi
|
|
|
|
|
2021-03-21 18:19:13 +00:00
|
|
|
echo "preparing to invoke jpackage for I2P version $I2P_VERSION build $I2P_BUILD_NUMBER"
|
2021-03-20 14:54:52 +00:00
|
|
|
|
|
|
|
cp "$I2P_PKG/Start I2P Router.app/Contents/Resources/i2p.icns" build/I2P.icns
|
|
|
|
cp "$I2P_PKG/Start I2P Router.app/Contents/Resources/i2p.icns" build/I2P-volume.icns
|
2023-02-01 23:23:14 +00:00
|
|
|
cp "$I2P_PKG/LICENSE.txt" build
|
2022-05-20 13:53:41 +01:00
|
|
|
cat resources/License-JRE-snippet.txt >> build/LICENSE.txt
|
2021-04-02 13:26:50 +01:00
|
|
|
cp resources/I2P-background.tiff build
|
2021-03-20 14:54:52 +00:00
|
|
|
|
2021-03-21 18:19:13 +00:00
|
|
|
cp resources/Info.plist.template build/Info.plist
|
|
|
|
sed -i.bak "s/I2P_VERSION/$I2P_VERSION/g" build/Info.plist
|
|
|
|
sed -i.bak "s/I2P_BUILD_NUMBER/$I2P_BUILD_NUMBER/g" build/Info.plist
|
2021-04-02 11:32:13 +01:00
|
|
|
|
|
|
|
cp resources/I2P-dmg-setup.scpt.template build/I2P-dmg-setup.scpt
|
|
|
|
sed -i.bak "s@__HERE__@${HERE}@g" build/I2P-dmg-setup.scpt
|
|
|
|
|
2021-03-21 18:19:13 +00:00
|
|
|
rm build/*.bak
|
|
|
|
|
|
|
|
jpackage --name I2P \
|
2021-03-30 13:24:47 +01:00
|
|
|
--java-options "-Xmx512m" \
|
2021-10-21 17:06:34 +01:00
|
|
|
--java-options "--add-opens java.base/java.lang=ALL-UNNAMED" \
|
|
|
|
--java-options "--add-opens java.base/sun.nio.fs=ALL-UNNAMED" \
|
|
|
|
--java-options "--add-opens java.base/java.nio=ALL-UNNAMED" \
|
2021-03-20 14:54:52 +00:00
|
|
|
--type app-image \
|
|
|
|
--verbose \
|
|
|
|
--resource-dir build \
|
|
|
|
--input build --main-jar launcher.jar --main-class net.i2p.router.MacLauncher
|
|
|
|
|
2021-03-20 17:29:42 +00:00
|
|
|
echo "adding pkg-temp to resources"
|
2023-02-01 23:23:14 +00:00
|
|
|
cp -R "$I2P_PKG"/* I2P.app/Contents/Resources
|
2021-03-20 17:29:42 +00:00
|
|
|
for i in i2prouter lib locale man wrapper.config eepget runplain.sh postinstall.sh osid; do
|
|
|
|
rm -rf I2P.app/Contents/Resources/$i
|
|
|
|
done
|
2023-02-01 23:23:14 +00:00
|
|
|
cp "$HERE"/resources/GPLv2+CE.txt I2P.app/Contents/Resources/licenses/LICENSE-JRE.txt
|
|
|
|
cp "$I2P_PKG"/licenses/* I2P.app/Contents/Resources/licenses/
|
|
|
|
cp "$HERE"/build/libMacLauncher.jnilib I2P.app/Contents/Resources
|
|
|
|
if [ "$ARCH" == "arm64" ]; then
|
|
|
|
cp "$HERE/resources/router.config.arm64" I2P.app/Contents/Resources/router.config
|
2022-06-23 03:44:22 +01:00
|
|
|
else
|
2023-02-01 23:23:14 +00:00
|
|
|
cp "$HERE/resources/router.config" I2P.app/Contents/Resources
|
2022-06-23 03:44:22 +01:00
|
|
|
fi
|
2023-02-01 23:23:14 +00:00
|
|
|
cp "$HERE"/resources/*.crt I2P.app/Contents/Resources/certificates/router
|
2021-03-20 14:54:52 +00:00
|
|
|
|
2023-02-01 23:23:14 +00:00
|
|
|
if [ -z "$I2P_SIGNER" ]; then
|
2022-11-15 23:12:46 -05:00
|
|
|
echo "I2P_SIGNER is unset, not proceeding to signing phase"
|
|
|
|
exit 0
|
|
|
|
fi
|
|
|
|
|
2023-02-01 23:23:14 +00:00
|
|
|
if [ -z "$I2P_CODE_SIGNER" ]; then
|
2023-01-16 18:59:46 +00:00
|
|
|
echo "I2P_CODE_SIGNER is unset, not proceeding to signing phase"
|
|
|
|
exit 0
|
|
|
|
fi
|
2023-01-12 00:36:58 +00:00
|
|
|
|
|
|
|
echo "signing the runtime libraries"
|
|
|
|
|
2023-02-01 23:23:14 +00:00
|
|
|
find I2P.app -name "*.dylib" -exec codesign --force -s "$I2P_SIGNER" -v '{}' \;
|
|
|
|
find I2P.app -name "*.jnilib" -exec codesign --force -s "$I2P_CODE_SIGNER" -v '{}' \;
|
2022-11-15 23:12:46 -05:00
|
|
|
|
2021-03-21 20:18:26 +00:00
|
|
|
echo "signing the bundle"
|
2021-03-20 14:54:52 +00:00
|
|
|
codesign --force -d --deep -f \
|
2021-03-21 19:51:40 +00:00
|
|
|
--options=runtime \
|
|
|
|
--entitlements resources/entitlements.xml \
|
2023-02-01 23:23:14 +00:00
|
|
|
-s "$I2P_SIGNER" \
|
2021-03-20 14:54:52 +00:00
|
|
|
--verbose=4 \
|
|
|
|
I2P.app
|
|
|
|
|
2023-02-01 23:23:14 +00:00
|
|
|
jpackage --name I2P --app-image I2P.app --app-version "$I2P_VERSION" \
|
2021-04-02 11:32:13 +01:00
|
|
|
--verbose --temp tmp \
|
2021-03-20 14:54:52 +00:00
|
|
|
--license-file build/LICENSE.txt \
|
2023-01-16 18:59:46 +00:00
|
|
|
--mac-sign \
|
|
|
|
--mac-signing-key-user-name "$I2P_SIGNER_USERPHRASE" \
|
2021-03-20 14:54:52 +00:00
|
|
|
--resource-dir build
|