This is an automated email from the ASF dual-hosted git repository.

jimjag pushed a commit to branch AOO50X
in repository https://gitbox.apache.org/repos/asf/openoffice.git


The following commit(s) were added to refs/heads/AOO50X by this push:
     new 49917e8e4c macOS: add --notarize PROFILE to macosx-codesign.sh
49917e8e4c is described below

commit 49917e8e4c798b31319732f2b17e4f1bc793f534
Author: Jim Jagielski <[email protected]>
AuthorDate: Thu Sep 10 14:31:01 2026 -0400

    macOS: add --notarize PROFILE to macosx-codesign.sh
    
    (cherry picked from commit 53e1e4439a5cd2473571a7e2d874af1eb23c2e94)
---
 main/solenv/bin/macosx-codesign.sh | 43 +++++++++++++++++++++++++++++++++++++-
 1 file changed, 42 insertions(+), 1 deletion(-)

diff --git a/main/solenv/bin/macosx-codesign.sh 
b/main/solenv/bin/macosx-codesign.sh
index f331c72476..d64f5a0918 100755
--- a/main/solenv/bin/macosx-codesign.sh
+++ b/main/solenv/bin/macosx-codesign.sh
@@ -11,6 +11,11 @@
 #   -k, --keychain PATH keychain holding the identity (default: the search 
list)
 #       --hardened      force hardened runtime even for an ad-hoc signature
 #                       (implied by a real identity)
+#       --notarize PROFILE
+#                       after signing, submit to the Apple notary service with
+#                       the "xcrun notarytool store-credentials" keychain
+#                       profile PROFILE and staple the ticket (.dmg, or a .app
+#                       zipped for submission); needs a real identity
 #       --verify        only report the current signing state, change nothing
 #
 # The linker already ad-hoc-signs each Mach-O it produces, which is why the
@@ -29,6 +34,7 @@ SRCDIR=$(cd "$(dirname "$0")" && pwd)
 IDENTITY="${MACOSX_CODESIGNING_IDENTITY:--}"
 ENTITLEMENTS="$SRCDIR/macosx-codesign-entitlements.plist"
 KEYCHAIN="${MACOSX_CODESIGNING_KEYCHAIN:-}"
+NOTARY_PROFILE=""
 HARDENED=no
 VERIFY_ONLY=no
 TARGETS=()
@@ -45,8 +51,11 @@ while [ $# -gt 0 ]; do
                        [ $# -ge 2 ] || { echo "$1 requires an argument" >&2; 
exit 2; }
                        KEYCHAIN="$2"; shift 2 ;;
                --hardened)        HARDENED=yes; shift ;;
+               --notarize)
+                       [ $# -ge 2 ] || { echo "$1 requires an argument" >&2; 
exit 2; }
+                       NOTARY_PROFILE="$2"; shift 2 ;;
                --verify)          VERIFY_ONLY=yes; shift ;;
-               -h|--help)         sed -n '2,25p' "$0"; exit 0 ;;
+               -h|--help)         sed -n '2,29p' "$0"; exit 0 ;;
                -*)                echo "unknown option: $1" >&2; exit 2 ;;
                *)                 TARGETS+=("$1"); shift ;;
        esac
@@ -54,6 +63,10 @@ done
 
 [ ${#TARGETS[@]} -gt 0 ] || { echo "usage: $(basename "$0") [options] 
<app-or-dmg> ..." >&2; exit 2; }
 [ "$IDENTITY" = "-" ] || HARDENED=yes
+if [ -n "$NOTARY_PROFILE" ] && [ "$IDENTITY" = "-" ]; then
+       echo "--notarize needs a Developer ID identity, not an ad-hoc 
signature" >&2
+       exit 2
+fi
 
 sign_one() {
        local path="$1"; shift
@@ -85,6 +98,32 @@ sign_disk_image() {
        codesign "${args[@]}" "$path"
 }
 
+# notarytool exits 0 even when the notary service rejects the submission, so
+# a successful staple is the only proof the ticket exists. A .app cannot be
+# submitted as-is; it goes up zipped and the ticket is stapled to the bundle.
+notarize() {
+       local target="$1" upload="$1" zip=""
+       case "$target" in
+               *.dmg) ;;
+               *)
+                       zip=$(mktemp -d)/$(basename "$target").zip
+                       ditto -c -k --keepParent "$target" "$zip"
+                       upload="$zip" ;;
+       esac
+       echo "==> notarizing $target  (profile: $NOTARY_PROFILE)"
+       if ! xcrun notarytool submit --wait --keychain-profile 
"$NOTARY_PROFILE" "$upload"; then
+               echo "notarization submission failed" >&2
+               [ -z "$zip" ] || rm -rf "$(dirname "$zip")"
+               return 1
+       fi
+       [ -z "$zip" ] || rm -rf "$(dirname "$zip")"
+       if ! xcrun stapler staple "$target"; then
+               echo "stapling failed: the submission was probably rejected; 
run 'xcrun notarytool log' for details" >&2
+               return 1
+       fi
+       echo "    stapled notarization ticket to $target"
+}
+
 report() {
        local target="$1"
        echo "--- $target"
@@ -198,11 +237,13 @@ for target in "${TARGETS[@]}"; do
                                exit 1
                        fi
                        sign_disk_image "$target"
+                       [ -z "$NOTARY_PROFILE" ] || notarize "$target"
                        report "$target"
                        ;;
                *)
                        if [ "$VERIFY_ONLY" = yes ]; then report "$target"; 
continue; fi
                        sign_app "$target"
+                       [ -z "$NOTARY_PROFILE" ] || notarize "$target"
                        ;;
        esac
 done

Reply via email to