mirror of
https://github.com/zotero/zotero.git
synced 2026-08-28 05:25:31 +00:00
After a full build, dir_build saves a manifest of build/ files to staging/.build-manifest. On subsequent runs, if all changed files are ones that build.sh copies into omni.ja unmodified (chrome/, components/, resource/, and test/ when tests are staged), zip just those files into the staged omni.ja instead of rebuilding, taking rebuilds from ~15 seconds to ~0.3 seconds on an M1 Mac. Files are prescreened by size and mtime so that only changed files need to be hashed. Zotero .ftl files are also updated at their localization/<locale>/ paths, and test files are also copied to the staged tests/ directory. Any other change triggers an automatic full rebuild: files transformed by build.sh (defaults/, chrome.manifest, version, translators/, styles/, mozilla .ftl files, CSL locales), removed files, changes to build inputs in app/ (detected via a size/mtime fingerprint, with xulrunner runtimes covered by the hash-* files written by fetch_xulrunner), or requesting tests or devtools that the staged build doesn't include. Other changes: - dir_build no longer takes -q and always skips omni.ja compression and optimization, which only matter for distribution builds made via build.sh. Use -f (dir_build or build_and_run) to force a full rebuild. - build_and_run now always rebuilds. -r is deprecated, and -n skips the rebuild and just launches the app. - build_and_run no longer passes -purgecaches. Startup caches are invalidated automatically when the BuildID changes, which now happens whenever omni.ja is modified (including via add_omni_file), so relaunching an unchanged build can use the startup cache. - build_and_run and runtests.sh invoke js-build directly instead of via 'npm run', which saves ~270ms of npm overhead per build. - The Word integration dylib is now ad-hoc-signed by dir_build, and only on full rebuilds, since incremental updates don't invalidate the existing signature. This also covers test builds, which were never signed before. - dir_build removes broken symlinks left in build/ when source files are deleted, which previously broke rsync in prepare_build.
98 lines
1.9 KiB
Bash
Executable file
98 lines
1.9 KiB
Bash
Executable file
#!/bin/bash -e
|
|
|
|
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
|
APP_ROOT_DIR="$(dirname "$SCRIPT_DIR")"
|
|
ROOT_DIR="$(dirname $APP_ROOT_DIR)"
|
|
|
|
# Set ZOTERO_PROFILE environment variable to choose profile
|
|
profile_args=()
|
|
if [ -n "${ZOTERO_PROFILE:-}" ]; then
|
|
profile_args=(-p "$ZOTERO_PROFILE")
|
|
fi
|
|
|
|
FORCE_FULL=0
|
|
NO_REBUILD=0
|
|
SKIP_BUNDLED_FILES=0
|
|
DEBUGGER=0
|
|
while getopts "rfnbd" opt; do
|
|
case $opt in
|
|
r)
|
|
# Deprecated -- rebuilding is now the default
|
|
echo "-r is deprecated -- rebuilding is now the default (use -n to skip)" >&2
|
|
;;
|
|
|
|
f)
|
|
FORCE_FULL=1
|
|
;;
|
|
|
|
n)
|
|
NO_REBUILD=1
|
|
;;
|
|
|
|
b)
|
|
SKIP_BUNDLED_FILES=1
|
|
;;
|
|
|
|
d)
|
|
DEBUGGER=1
|
|
;;
|
|
|
|
\?)
|
|
exit 1
|
|
;;
|
|
esac
|
|
done
|
|
|
|
# Remove options from $@
|
|
shift $((OPTIND-1))
|
|
|
|
if [ $NO_REBUILD -eq 0 ]; then
|
|
PARAMS=""
|
|
if [ $DEBUGGER -eq 1 ]; then
|
|
PARAMS="-t"
|
|
fi
|
|
if [ $FORCE_FULL -eq 1 ]; then
|
|
PARAMS="$PARAMS -f"
|
|
fi
|
|
|
|
# Check if build watch is running
|
|
# If not, run now
|
|
if ! ps u | grep js-build/build.js | grep -v grep > /dev/null; then
|
|
echo "Running JS build process"
|
|
echo
|
|
cd $ROOT_DIR
|
|
# TEMP: --openssl-legacy-provider avoids a build error in pdf.js
|
|
NODE_OPTIONS=--openssl-legacy-provider node js-build/build.js
|
|
echo
|
|
fi
|
|
|
|
"$SCRIPT_DIR/dir_build" $PARAMS
|
|
fi
|
|
|
|
PARAMS=""
|
|
if [ $SKIP_BUNDLED_FILES -eq 1 ]; then
|
|
PARAMS="$PARAMS -ZoteroSkipBundledFiles"
|
|
fi
|
|
if [ $DEBUGGER -eq 1 ]; then
|
|
PARAMS="$PARAMS -jsdebugger"
|
|
else
|
|
PARAMS="$PARAMS -jsconsole"
|
|
fi
|
|
|
|
if [ "`uname`" = "Darwin" ]; then
|
|
command="Zotero.app/Contents/MacOS/zotero"
|
|
elif [ "`uname`" = "Linux" ]; then
|
|
if [[ "`uname -m`" = "aarch64" ]]; then
|
|
command="Zotero_linux-arm64/zotero"
|
|
else
|
|
command="Zotero_linux-x86_64/zotero"
|
|
fi
|
|
elif [ "`uname -o 2> /dev/null`" = "Cygwin" ]; then
|
|
command="Zotero_win-x64/zotero.exe"
|
|
else
|
|
echo "Unknown platform" >&2
|
|
exit 1
|
|
fi
|
|
|
|
echo
|
|
"$APP_ROOT_DIR/staging/$command" "${profile_args[@]}" -ZoteroDebugText $PARAMS "$@"
|