Changeset 19030 in josm for trunk/native


Ignore:
Timestamp:
2024-04-04T19:24:39+02:00 (12 months ago)
Author:
taylor.smock
Message:

Fix #21533, see #23600: Native Apple Silicon Support

When building on macOS, the macos-jpackage.sh script now takes two arguments:

  1. The JOSM revision
  2. An additional JDK to build against (this should be of a different architecture)

If an additional JDK is specified, it is assumed that it is a different
architecture, and the two built apps are combined using lipo for a universal binary.

ant.yml does have some changes to make it easier to debug packaging issues in
PRs; the PR does still need to upload the specific package and add its branch to
the triggers.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/native/macosx/macos-jpackage.sh

    r18904 r19030  
    1616if [ -z "${1-}" ]
    1717then
    18     echo "Usage: $0 josm_revision"
     18    echo "Usage: $0 josm_revision [other_arch_jdk]"
    1919    exit 1
    2020fi
     
    5353set -u
    5454
    55 echo "Building and signing app"
    56 # We specifically need the options to not be quoted -- we _want_ the word splitting.
    57 # shellcheck disable=SC2086
    58 jpackage $JPACKAGEOPTIONS -n "JOSM" --input dist --main-jar josm-custom.jar \
    59     --main-class org.openstreetmap.josm.gui.MainApplication \
    60     --icon ./native/macosx/JOSM.icns --type app-image --dest app \
    61     --java-options "--add-modules java.scripting,java.sql,javafx.controls,javafx.media,javafx.swing,javafx.web" \
    62     --java-options "--add-exports=java.base/sun.security.action=ALL-UNNAMED" \
    63     --java-options "--add-exports=java.desktop/com.apple.eawt=ALL-UNNAMED" \
    64     --java-options "--add-exports=java.desktop/com.sun.imageio.plugins.jpeg=ALL-UNNAMED" \
    65     --java-options "--add-exports=java.desktop/com.sun.imageio.spi=ALL-UNNAMED" \
    66     --java-options "--add-opens=java.base/java.lang=ALL-UNNAMED" \
    67     --java-options "--add-opens=java.base/java.nio=ALL-UNNAMED" \
    68     --java-options "--add-opens=java.base/jdk.internal.loader=ALL-UNNAMED" \
    69     --java-options "--add-opens=java.base/jdk.internal.ref=ALL-UNNAMED" \
    70     --java-options "--add-opens=java.desktop/javax.imageio.spi=ALL-UNNAMED" \
    71     --java-options "--add-opens=java.desktop/javax.swing.text.html=ALL-UNNAMED" \
    72     --java-options "--add-opens=java.prefs/java.util.prefs=ALL-UNNAMED" \
    73     --app-version "$1" \
    74     --copyright "JOSM, and all its integral parts, are released under the GNU General Public License v2 or later" \
    75     --vendor "JOSM" \
    76     --mac-package-identifier de.openstreetmap.josm \
    77     --mac-package-signing-prefix de.openstreetmap.josm \
    78     --file-associations native/file-associations/bz2.properties \
    79     --file-associations native/file-associations/geojson.properties \
    80     --file-associations native/file-associations/gpx.properties \
    81     --file-associations native/file-associations/gz.properties \
    82     --file-associations native/file-associations/jos.properties \
    83     --file-associations native/file-associations/joz.properties \
    84     --file-associations native/file-associations/osm.properties \
    85     --file-associations native/file-associations/xz.properties \
    86     --file-associations native/file-associations/zip.properties \
    87     --add-modules java.compiler,java.base,java.datatransfer,java.desktop,java.logging,java.management,java.naming,java.net.http,java.prefs,java.rmi,java.scripting,java.sql,java.transaction.xa,java.xml,jdk.crypto.ec,jdk.jfr,jdk.jsobject,jdk.unsupported,jdk.unsupported.desktop,jdk.xml.dom,javafx.controls,javafx.media,javafx.swing,javafx.web
     55function do_jpackage() {
     56  echo "Building app (${JAVA_HOME})"
     57  # We specifically need the options to not be quoted -- we _want_ the word splitting.
     58  # shellcheck disable=SC2086
     59  "${JAVA_HOME}/bin/jpackage" $JPACKAGEOPTIONS -n "JOSM" --input dist --main-jar josm-custom.jar \
     60      --main-class org.openstreetmap.josm.gui.MainApplication \
     61      --icon ./native/macosx/JOSM.icns --type app-image --dest app \
     62      --java-options "--add-modules java.scripting,java.sql,javafx.controls,javafx.media,javafx.swing,javafx.web" \
     63      --java-options "--add-exports=java.base/sun.security.action=ALL-UNNAMED" \
     64      --java-options "--add-exports=java.desktop/com.apple.eawt=ALL-UNNAMED" \
     65      --java-options "--add-exports=java.desktop/com.sun.imageio.plugins.jpeg=ALL-UNNAMED" \
     66      --java-options "--add-exports=java.desktop/com.sun.imageio.spi=ALL-UNNAMED" \
     67      --java-options "--add-opens=java.base/java.lang=ALL-UNNAMED" \
     68      --java-options "--add-opens=java.base/java.nio=ALL-UNNAMED" \
     69      --java-options "--add-opens=java.base/jdk.internal.loader=ALL-UNNAMED" \
     70      --java-options "--add-opens=java.base/jdk.internal.ref=ALL-UNNAMED" \
     71      --java-options "--add-opens=java.desktop/javax.imageio.spi=ALL-UNNAMED" \
     72      --java-options "--add-opens=java.desktop/javax.swing.text.html=ALL-UNNAMED" \
     73      --java-options "--add-opens=java.prefs/java.util.prefs=ALL-UNNAMED" \
     74      --app-version "$1" \
     75      --copyright "JOSM, and all its integral parts, are released under the GNU General Public License v2 or later" \
     76      --vendor "JOSM" \
     77      --mac-package-identifier de.openstreetmap.josm \
     78      --mac-package-signing-prefix de.openstreetmap.josm \
     79      --file-associations native/file-associations/bz2.properties \
     80      --file-associations native/file-associations/geojson.properties \
     81      --file-associations native/file-associations/gpx.properties \
     82      --file-associations native/file-associations/gz.properties \
     83      --file-associations native/file-associations/jos.properties \
     84      --file-associations native/file-associations/joz.properties \
     85      --file-associations native/file-associations/osm.properties \
     86      --file-associations native/file-associations/xz.properties \
     87      --file-associations native/file-associations/zip.properties \
     88      --add-modules java.compiler,java.base,java.datatransfer,java.desktop,java.logging,java.management,java.naming,java.net.http,java.prefs,java.rmi,java.scripting,java.sql,java.transaction.xa,java.xml,jdk.crypto.ec,jdk.jfr,jdk.jsobject,jdk.unsupported,jdk.unsupported.desktop,jdk.xml.dom,javafx.controls,javafx.media,javafx.swing,javafx.web
     89  echo "Building done (${JAVA_HOME})."
     90}
     91function do_signapp() {
     92  echo "Compressing app (${1})"
     93  ditto -c -k --zlibCompressionLevel 9 --keepParent "app/${1}.app" "app/${1}.zip"
     94  if $SIGNAPP; then
     95      echo "Signing app (${1})"
     96      echo "Preparing for notarization"
     97      echo "Uploading to Apple"
     98      xcrun notarytool submit --apple-id "$APPLE_ID" --password "$APPLE_ID_PW" --team-id "$APPLE_ID_TEAM" --wait "app/${1}.zip"
     99  fi
     100}
    88101
    89 echo "Building done."
     102function merge() {
     103  if [ "$(command -v lipo)" ]; then
     104    lipo -create -output "${1}" "${2}" "${3}"
     105  elif [ "$(command -v llvm-lipo-15)" ]; then
     106    llvm-lipo-15 -create -output "${1}" "${2}" "${3}"
     107  fi
     108}
    90109
    91 if $SIGNAPP; then
    92     echo "Preparing for notarization"
    93     ditto -c -k --zlibCompressionLevel 9 --keepParent app/JOSM.app app/JOSM.zip
     110function copy() {
     111  # Trim the root path
     112  FILE="${1#*/}"
     113  if [ ! -e "${2}/${FILE}" ]; then
     114    # Only make directories if we aren't looking at the root files
     115    if [[ "${FILE}" == *"/"* ]]; then mkdir -p "${2}/${FILE%/*}"; fi
     116    if file "${1}" | grep -q 'Mach-O' ; then
     117      merge "${2}/${FILE}" "${3}/${FILE}" "${4}/${FILE}"
     118      if file "${1}" | grep -q 'executable'; then
     119        chmod 755 "${2}/${FILE}"
     120      fi
     121    else
     122      cp -a "${1}" "${2}/${FILE}"
     123    fi
     124  fi
     125}
    94126
    95     echo "Uploading to Apple"
    96     xcrun notarytool submit --apple-id "$APPLE_ID" --password "$APPLE_ID_PW" --team-id "$APPLE_ID_TEAM" --wait app/JOSM.zip
     127function directory_iterate() {
     128  while IFS= read -r -d '' file
     129  do
     130    copy "${file}" "${2}" "${3}" "${4}" &
     131  done <   <(find "${1}" -type f,l -print0)
     132  wait
     133}
     134
     135do_jpackage "${1}"
     136if [ -n "${2}" ]; then
     137  function get_name() {
     138    echo "$("${JAVA_HOME}/bin/java" --version | head -n1 | awk '{print $2}' | awk -F'.' '{print $1}')_$(file "${JAVA_HOME}/bin/java" | awk -F' executable ' '{print $2}')"
     139  }
     140  first="$(get_name)"
     141  JAVA_HOME="${2}" second="$(get_name)"
     142  mv app/JOSM.app "app/JOSM_${first}.app"
     143  JAVA_HOME="${2}" do_jpackage "${1}"
     144  mv app/JOSM.app "app/JOSM_${second}.app"
     145  mkdir app/JOSM.app
     146  (cd app
     147  directory_iterate "JOSM_${first}.app" "JOSM.app" "JOSM_${first}.app" "JOSM_${second}.app"
     148  directory_iterate "JOSM_${second}.app" "JOSM.app" "JOSM_${first}.app" "JOSM_${second}.app"
     149  )
     150  do_signapp "JOSM_${first}"
     151  do_signapp "JOSM_${second}"
    97152fi
     153do_signapp JOSM
Note: See TracChangeset for help on using the changeset viewer.