diff --git a/make.sh b/make.sh index d17da86..cf3c6d2 100755 --- a/make.sh +++ b/make.sh @@ -1,24 +1,83 @@ #!/bin/bash - -# -# Settings # +# Make the PiPer Safari extension EXTENSION_NAME="PiPer" -# Paths -CCJS_PATH="./build-tools/ccjs" # "ccjs" -XARJS_PATH="./build-tools/xarjs" # "xarjs" -SVGO_PATH="./build-tools/svgo" # "svgo" -PLISTBUDDY_PATH="./build-tools/plistbuddy" # "/usr/libexec/PlistBuddy" +# Build tool paths; fallback to local build tools +CCJS_PATH=$(type "ccjs" >/dev/null 2>&1 && echo "ccjs" || echo "./build-tools/ccjs") +XARJS_PATH=$(type "xarjs" >/dev/null 2>&1 && echo "xarjs" || echo "./build-tools/xarjs") +SVGO_PATH=$(type "svgo" >/dev/null 2>&1 && echo "svgo" || echo "./build-tools/svgo") +PLISTBUDDY_PATH=$(type "/usr/libexec/PlistBuddy" >/dev/null 2>&1 && echo "/usr/libexec/PlistBuddy" || echo "./build-tools/plistbuddy") -# Certifcates +# Certifcate paths LEAF_CERT_PATH="../certs/cert.pem" INTERMEDIATE_CERT_PATH="../certs/apple-intermediate.pem" ROOT_CERT_PATH="../certs/apple-root.pem" PRIVATE_KEY_PATH="../certs/privatekey.pem" +# Display help then exit +show_help() { + cat << EOF +Usage: make.sh [options] + +Options: + -h -? --help Show this screen + -p --profile Set settings according to profile [default: debug] + -j --compress-js Compress JavaScript + -s --compress-svg Compress SVG + -e --package-extension Package Safari extension (requires private key) + -v --no-version-increment Disable automatic version incrementing +EOF + exit 0 +} + +arguments=("$@") + +# First pass processing arguments +while :; do + case $1 in + -h|-\?|--help) show_help ;; + -p|--profile) [[ "$2" ]] && profile=$2 ;; + --profile=?*) profile=${1#*=} ;; + -?*) ;; + *) break + esac + shift +done + +# Set default settings as per profile +case $profile in + release) + compress_svg=1 + compress_js=1 + package_ext=1 + ;; + *) + compress_svg=0 + compress_js=0 + package_ext=0 +esac +update_version=1 + +set -- "${arguments[@]}" + +# Second pass processing arguments +while :; do + case $1 in + -j|--compress-js) compress_js=1 ;; + -s|--compress-svg) compress_svg=1 ;; + -e|--package-extension) package_ext=1 ;; + -v|--no-version-increment) update_version=0 ;; + -p|--profile) shift ;; + -?*) ;; + *) break + esac + shift +done + + # # Build script # @@ -37,41 +96,46 @@ mkdir -p "out/${EXTENSION_NAME}.safariextension" cp -r src/* "out/${EXTENSION_NAME}.safariextension/" # Compress all supported images with SVGO -${SVGO_PATH} -q -f "out/${EXTENSION_NAME}.safariextension/images" +if [[ "$compress_svg" -eq 1 ]]; then + ${SVGO_PATH} -q -f "out/${EXTENSION_NAME}.safariextension/images" +fi # Use closure compiler to compress javascript -for path in "out/${EXTENSION_NAME}.safariextension/scripts"/*.js; do - [ $(basename $path) == "externs.js" ] && continue - path=${path%.*} - ${CCJS_PATH} \ - --compilationLevel ADVANCED \ - --warningLevel VERBOSE \ - --newTypeInf \ - --useTypesForOptimization \ - --externs "out/${EXTENSION_NAME}.safariextension/scripts/externs.js" \ - "${path}.js" > "${path}.min.js" - mv "${path}.min.js" "${path}.js" -done +if [[ "$compress_js" -eq 1 ]]; then + for path in "out/${EXTENSION_NAME}.safariextension/scripts"/*.js; do + [[ $(basename $path) == "externs.js" ]] && continue + path=${path%.*} + ${CCJS_PATH} \ + --compilationLevel ADVANCED \ + --warningLevel VERBOSE \ + --newTypeInf \ + --useTypesForOptimization \ + --externs "out/${EXTENSION_NAME}.safariextension/scripts/externs.js" \ + "${path}.js" > "${path}.min.js" + mv "${path}.min.js" "${path}.js" + done +fi rm "out/${EXTENSION_NAME}.safariextension/scripts/externs.js" # Update version info from git -git=$(sh /etc/profile; which git) -number_of_commits=$(($("$git" rev-list HEAD --count) + 1)) -git_release_version=$("$git" describe --tags --always --abbrev=0) -git_release_version=${git_release_version%%-*}; -git_release_version=${git_release_version#*v}; -info_plist="out/${EXTENSION_NAME}.safariextension/Info.plist" -update_plist="update.plist" -${PLISTBUDDY_PATH} -c "Set :CFBundleVersion $number_of_commits" "$info_plist" -${PLISTBUDDY_PATH} -c "Set :CFBundleShortVersionString ${git_release_version}" "$info_plist" -${PLISTBUDDY_PATH} -c "Set \":Extension Updates:0:CFBundleVersion\" $number_of_commits" "$update_plist" -${PLISTBUDDY_PATH} -c "Set \":Extension Updates:0:CFBundleShortVersionString\" ${git_release_version#*v}" "$update_plist" +if [[ "$update_version" -eq 1 ]]; then + git=$(sh /etc/profile; which git) + number_of_commits=$(($("$git" rev-list HEAD --count) + 1)) + git_release_version=$("$git" describe --tags --always --abbrev=0) + git_release_version=${git_release_version%%-*}; + git_release_version=${git_release_version#*v}; + info_plist="out/${EXTENSION_NAME}.safariextension/Info.plist" + update_plist="update.plist" + ${PLISTBUDDY_PATH} -c "Set :CFBundleVersion $number_of_commits" "$info_plist" + ${PLISTBUDDY_PATH} -c "Set :CFBundleShortVersionString ${git_release_version}" "$info_plist" + ${PLISTBUDDY_PATH} -c "Set \":Extension Updates:0:CFBundleVersion\" $number_of_commits" "$update_plist" + ${PLISTBUDDY_PATH} -c "Set \":Extension Updates:0:CFBundleShortVersionString\" ${git_release_version#*v}" "$update_plist" +fi # Package safari extension -cd out || exit -if [ -f "${PRIVATE_KEY_PATH}" ] -then - [[ ${XARJS_PATH} != /* ]] && ! command -v "${XARJS_PATH}" >/dev/null 2>&1 && XARJS_PATH="../${XARJS_PATH}" +cd out || exit +if [[ "$package_ext" -eq 1 ]] && [[ -f "${PRIVATE_KEY_PATH}" ]]; then + [[ ${XARJS_PATH} != /* ]] && ! type "${XARJS_PATH}" >/dev/null 2>&1 && XARJS_PATH="../${XARJS_PATH}" ${XARJS_PATH} create "${EXTENSION_NAME}.safariextz" --cert "${LEAF_CERT_PATH}" --cert "${INTERMEDIATE_CERT_PATH}" --cert "${ROOT_CERT_PATH}" --private-key "${PRIVATE_KEY_PATH}" "${EXTENSION_NAME}.safariextension" rm -rf "${EXTENSION_NAME}.safariextension" fi diff --git a/out/PiPer.safariextz b/out/PiPer.safariextz index 2400012..484d9e7 100644 Binary files a/out/PiPer.safariextz and b/out/PiPer.safariextz differ diff --git a/update.plist b/update.plist index 0c3cc41..b29a14b 100644 --- a/update.plist +++ b/update.plist @@ -10,7 +10,7 @@ CFBundleShortVersionString 0.2.3 CFBundleVersion - 67 + 78 Developer Identifier BQ6Q24MF9X URL