Zrythm installer
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

221 lines
6.7 KiB

#!@BASH@
#
# Copyright (C) 2020-2021 Alexandros Theodotou <alex at zrythm dot org>
#
# This file is part of Zrythm
#
# Zrythm is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Zrythm is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with Zrythm. If not, see <https://www.gnu.org/licenses/>.
set -ex
out_file="$1"
zrythm_formula_file=$2
carla_bottle_file=$3
installer_sh_file=$4
readme_file=$5
private_dir=$6
installer_builder_dir="$7"
welcome_html="$8"
postinstall_script="$9"
conclusion_html="${10}"
uninstall_sh="${11}"
info_plist="${12}"
dash_trial="@DASH_TRIAL@"
manuals_zip="@MANUALS_ZIP_FILE@"
breeze_dark="@BREEZE_DARK@"
zrythm_pkg_ver="@ZRYTHM_PKG_VERSION@"
zrythm_product_ver="@ZRYTHM_PRODUCT_VERSION@"
zrythm_bottle_name="zrythm$dash_trial"
carla_bottle_ver="@CARLA_BOTTLE_VER@"
built_zplugins_dir="@BUILT_ZPLUGINS_DIR@"
meson_src_root="@MESON_SOURCE_ROOT@"
inner_dir_name="${out_file%.*}"
inner_dir_name="`basename $inner_dir_name`"
inner_dir=$private_dir/$inner_dir_name
application_dir=$inner_dir/macOS-x64/application
bin_dir=$application_dir/bin
share_dir=$application_dir/share
lib_dir=$application_dir/lib
etc_dir=$application_dir/etc
darwin_dir=$inner_dir/macOS-x64/darwin
darwin_resources_dir=$darwin_dir/Resources
darwin_scripts_dir=$darwin_dir/scripts
installed_prefix=/Library/Zrythm/$zrythm_product_ver
rm -rf $private_dir
mkdir -p $etc_dir
# copy the template
cp -rfv $installer_builder_dir/* $inner_dir/
# copy the content of each formula (already installed)
cp -rfv /usr/local/Cellar/carla-git/$carla_bottle_ver/* \
$application_dir/
cp -rfv /usr/local/Cellar/$zrythm_bottle_name/$zrythm_pkg_ver/* \
$application_dir/
# remove some unnecessary binaries
rm -rf $bin_dir/*-e
replace_path() {
local exe=$1
chmod +w $exe
echo "replacing path for $exe"
if [[ "$exe" == *".dylib" ]]; then
local new_id="@executable_path/../lib/`basename $exe`"
if [[ "$exe" == *".lv2"* ]]; then
new_id="/Library/Audio/Plug-Ins/LV2/Zrythm-$zrythm_product_ver-`basename $(dirname $exe)`/`basename $exe`"
fi
install_name_tool -id "$new_id" "$exe"
fi
local changes=""
for lib in `otool -L $exe | egrep "(/opt/|/local/)" | grep -v "/usr/lib" | awk '{print $1}'` ; do
if [ ! -f "$lib_dir/`basename $lib`" ]; then
cp -rfv $lib $lib_dir/
fi
replaced=""
if [[ "$exe" == *".lv2"* ]]; then
replaced="/Library/Zrythm/$zrythm_product_ver/lib"
else
replaced="@executable_path/../lib"
fi
replaced="$replaced/`basename $lib`"
changes="$changes -change $lib $replaced"
replace_path "$lib_dir/`basename $lib`"
done
if test "x$changes" != "x" ; then
install_name_tool $changes $exe
fi
chmod -w $exe
}
# copy librsvg
cp -rfv /usr/local/lib/librsvg-2.2.dylib $lib_dir/
# replace paths
for exe in `ls $bin_dir`; do
replace_path $bin_dir/$exe
done
plugin_libs=`find "$lib_dir/lv2" -name "Z*.dylib" -exec printf '{} ' \;`
for plugin_lib in $plugin_libs; do
replace_path $plugin_lib
done
replace_path $lib_dir/librsvg-2.2.dylib
# copy the pixbuf loaders
cp -rfv /usr/local/lib/gdk-pixbuf-2.0 $lib_dir/
sed -i '' -E "s|/usr/local/lib|$installed_prefix/lib|g" $lib_dir/gdk-pixbuf-2.0/2.10.0/loaders.cache
# copy resources
cp -rvf $welcome_html $darwin_resources_dir/
cp -rvf $conclusion_html $darwin_resources_dir/
cp -rvf $postinstall_script $darwin_scripts_dir/
cp -rvf $uninstall_sh $darwin_resources_dir/
cp -rvf $application_dir/COPYING $darwin_resources_dir/LICENSE.txt
cp -rvf $share_dir/zrythm/themes/icons/zrythm-dark/scalable/apps/zrythm-splash-png.png $darwin_resources_dir/banner.png
cp $readme_file $application_dir/README
cat << EOF > $bin_dir/zrythm_launch
#!/bin/bash
export GSETTINGS_SCHEMA_DIR=$installed_prefix/share/glib-2.0/schemas
export GDK_PIXBUF_MODULEDIR=$installed_prefix/lib/gdk-pixbuf-2.0/2.10.0/loaders
export GDK_PIXBUF_MODULE_FILE=$installed_prefix/lib/gdk-pixbuf-2.0/2.10.0/loaders.cache
export DYLD_LIBRARY_PATH="$installed_prefix/lib"
export GTK_DATA_PREFIX="$installed_prefix"
export GTK_EXE_PREFIX="$installed_prefix"
export GTK_PATH="$installed_prefix"
export I18NDIR="$installed_prefix/share/locale"
# set language
lang_schema=/org/zrythm/Zrythm/preferences/ui/general/language
defaults read zrythm \$lang_schema
if [[ \$? == 0 ]]; then
preferences_lang=\`defaults read zrythm \$lang_schema\`
export LANG="\$preferences_lang"
export LC_MESSAGES="\$preferences_lang"
fi
$installed_prefix/bin/zrythm "\$@"
EOF
sed -i '' -E "s|/usr/local/lib|$installed_prefix/lib|g" $lib_dir/gdk-pixbuf-2.0/2.10.0/loaders.cache
chmod +x $bin_dir/zrythm_launch
# copy fonts
cp -rvf /usr/local/etc/fonts $etc_dir/
# copy gtksourceview files
cp -rvf /usr/local/share/gtksourceview-4 $share_dir/
# copy locales
cp -rvf /usr/local/share/locale $share_dir/
# copy thumbnailers
cp -rvf /usr/local/share/thumbnailers $share_dir/
# copy mime database if it exists
cp -rvf /usr/local/share/mime $share_dir/ || true
# copy gtk schemas
for schema in `ls /usr/local/share/glib-2.0/schemas`; do
if [[ "$schema" == *"org.gtk."* ]]; then
cp -rvf /usr/local/share/glib-2.0/schemas/$schema \
$share_dir/glib-2.0/schemas/
fi
done
# recompile schemas
echo "Recompiling schemas..."
/usr/local/bin/glib-compile-schemas $share_dir/glib-2.0/schemas
# Create .app
zrythm_app="$(pwd)/Zrythm.app"
rm -rf $zrythm_app
$meson_src_root/tools/osx/appify.sh $bin_dir/zrythm_launch Zrythm
app_contents=$zrythm_app/Contents
app_resources=$app_contents/Resources
mkdir -p $app_resources
cp -rfv $info_plist $app_contents/Info.plist
cp -rfv $meson_src_root/tools/osx/zrythm.icns \
$app_resources/zrythm.icns
mv $zrythm_app $application_dir/
# run command to build installer
pushd $inner_dir/macOS-x64
# skip signing
sed -i.bak -E 's|read -p.*|answer="n"|g' "build-macos-x64.sh"
./build-macos-x64.sh Zrythm $zrythm_product_ver
popd
# --- prepare zip ---
work_dir=`mktemp -d`
mkdir $work_dir/$inner_dir_name
cp $inner_dir/macOS-x64/target/pkg/Zrythm-macos-installer-x64-$zrythm_product_ver.pkg $work_dir/$inner_dir_name
if [ "$dash_trial" != "-trial" ]; then
echo "adding user manuals" ;
if [ -f "$manuals_zip" ]; then
unzip -o $manuals_zip -d $work_dir/$inner_dir_name/ ;
else
echo "no user manuals found, skipping..."
fi
fi
pushd $work_dir
zip -r $inner_dir_name.zip $inner_dir_name
popd
cp $work_dir/$inner_dir_name.zip $out_file