Robin Gareus
233a82d5f9
This is mainly for the benefit of traxlive, which needs ffmpeg to encode mp3 or import encoded files, without support for video.
884 lines
25 KiB
Bash
Executable File
884 lines
25 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# script for pulling together a Linux app bundle.
|
|
#
|
|
# This will create a bundle for a x86_64 architecture.
|
|
# Execute this script and then use `package; to build
|
|
# the installer.
|
|
|
|
# where the GTK stack is installed
|
|
GTKSTACK_ROOT=$HOME/gtk/inst
|
|
# the waf build tree to use when copying built/generated files
|
|
BUILD_ROOT=../../build
|
|
|
|
. ../define_versions.sh
|
|
|
|
# where harvid and xjadeo binaries are cached
|
|
if test -z "$CACHEDIR" -o ! -d "$CACHEDIR"; then
|
|
CACHEDIR=`pwd`
|
|
fi
|
|
|
|
MIXBUS=
|
|
WITH_HARRISON_LV2=
|
|
WITH_COMMERCIAL_X42_LV2=
|
|
WITH_GRATIS_X42_LV2=
|
|
WITH_GMSYNYTH=
|
|
WITH_HARVID=
|
|
WITH_XJADEO=
|
|
STRIP=all
|
|
PRINT_SYSDEPS=
|
|
WITH_NLS=
|
|
EXTERNAL_JACK=
|
|
VENDOR=Ardour ;
|
|
EXENAME=ardour
|
|
BUILDTYPE=""
|
|
NOSTRIP="libsuil|libserd|libsord|liblilv|libsratom|liblrdf|libardour|libpbd|libevoral"
|
|
|
|
: ${HARRISONCHANNELSTRIP=harrison_channelstrip}
|
|
: ${HARRISONLV2=harrison_lv2s-n}
|
|
: ${HARRISONDSPURL=http://rsrc.harrisonconsoles.com/plugins/releases/public}
|
|
|
|
if [ $# -eq 0 ] ; then
|
|
echo ""
|
|
echo "ERROR - Please specify build type"
|
|
echo " --public"
|
|
echo " --mixbus"
|
|
echo ""
|
|
exit 1
|
|
fi
|
|
|
|
while [ $# -gt 0 ] ; do
|
|
echo "arg = $1"
|
|
case $1 in
|
|
|
|
#
|
|
# top level build targets
|
|
#
|
|
|
|
--mixbus)
|
|
MIXBUS=1;
|
|
WITH_HARRISON_LV2=1 ;
|
|
WITH_COMMERCIAL_X42_LV2=1
|
|
WITH_GRATIS_X42_LV2=1
|
|
WITH_GMSYNYTH=1
|
|
WITH_HARVID=1
|
|
WITH_XJADEO=1
|
|
WITH_NLS=1 ;
|
|
STRIP=all
|
|
APPNAME=Mixbus ;
|
|
VENDOR=Harrison ;
|
|
EXENAME=mixbus ;
|
|
shift ;;
|
|
--livetrax)
|
|
LIVETRAX=1 ;
|
|
STRIP=all ;
|
|
WITH_NLS=1 ;
|
|
APPNAME=LiveTrax ;
|
|
WITHOUT_GMSYNYTH=1 ;
|
|
shift ;;
|
|
--public)
|
|
WITH_HARRISON_LV2=1 ;
|
|
WITH_GMSYNYTH=1
|
|
WITH_HARVID=1
|
|
WITH_XJADEO=1
|
|
WITH_NLS=1 ;
|
|
STRIP=all ;
|
|
APPNAME=Ardour ;
|
|
shift ;;
|
|
--allinone)
|
|
WITH_NLS= ;
|
|
STRIP=all;
|
|
shift ;;
|
|
--test) STRIP= ; shift ;;
|
|
|
|
#
|
|
# specific build flags
|
|
#
|
|
|
|
--nojack) INTERNAL_JACK= ; shift ;;
|
|
--strip) STRIP=$2 ; shift ; shift ;;
|
|
--sysdeps) PRINT_SYSDEPS=1; shift ;;
|
|
--nls) WITH_NLS=1 ; shift ;;
|
|
--harvid) shift ;;
|
|
--gcc5abi) shift ;;
|
|
--chanstrip) HARRISONCHANNELSTRIP=$2 ; shift; shift ;;
|
|
|
|
*)
|
|
#catch all for unknown arguments
|
|
echo ""
|
|
echo "!!! ERROR !!! - Unknown argument $1"
|
|
echo ""
|
|
exit 1
|
|
;;
|
|
esac
|
|
done
|
|
|
|
if test x$STRIP != xall -a x$STRIP != xnone -a x$STRIP != xsome ; then
|
|
echo "Unknown strip option \"$STRIP\""
|
|
echo "Legal values are: all, none, some"
|
|
exit 1
|
|
fi
|
|
|
|
. ../define_versions.sh
|
|
lower_case_appname=`echo $APPNAME | tr '[:upper:]' '[:lower:]'`
|
|
|
|
echo "Version is $release_version"
|
|
if [ "x$commit" != "x" ] ; then
|
|
info_string="$release_version ($commit) built on `hostname` by `whoami` on `date`"
|
|
else
|
|
info_string="$release_version built on `hostname` by `whoami` on `date`"
|
|
fi
|
|
echo "Info string is $info_string"
|
|
|
|
# Figure out our CPU type
|
|
case `uname -m` in
|
|
x86_64|amd64|AMD64)
|
|
echo "Architecture is x86_64"
|
|
ARCH='x86_64'
|
|
WARCH='x86_64'
|
|
HARCH='linux64'
|
|
ARCH_BITS='64-bit'
|
|
MULTIARCH='x86_64-linux-gnu'
|
|
;;
|
|
*)
|
|
echo ""
|
|
echo "ERROR - Unknown architecture `uname -m`"
|
|
echo ""
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
if [ "$DEBUG" = "T" ]; then
|
|
BUILDTYPE="dbg"
|
|
fi
|
|
if [ "$FREEBI" = "T" ]; then
|
|
BUILDTYPE="demo"
|
|
fi
|
|
if [ "$DEBUG$FREEBI" = "TT" ]; then
|
|
BUILDTYPE="demo-dbg"
|
|
fi
|
|
|
|
if [ x$DEBUG = xT ]; then
|
|
if [ x$STRIP = xall ] ; then
|
|
echo "A debug build with --strip all makes no sense - STRIP reset to \"some\""
|
|
STRIP=some
|
|
fi
|
|
fi
|
|
|
|
# setup directory structure
|
|
|
|
if [ -z "${BUILDTYPE}" ]; then
|
|
APPDIR=${APPNAME}_${ARCH}-${release_version}
|
|
APP_VER_NAME=${APPNAME}-${release_version}
|
|
else
|
|
APPDIR=${APPNAME}_${ARCH}-${release_version}-${BUILDTYPE}
|
|
APP_VER_NAME=${APPNAME}-${release_version}-${BUILDTYPE}
|
|
fi
|
|
|
|
APPBIN=$APPDIR/bin
|
|
APPLIB=$APPDIR/lib
|
|
Libraries=$APPLIB
|
|
Etc=$APPDIR/etc
|
|
Shared=$APPDIR/share
|
|
|
|
Plugins=$APPLIB/plugins
|
|
Surfaces=$APPLIB/surfaces
|
|
Panners=$APPLIB/panners
|
|
Backends=$APPLIB/backends
|
|
|
|
Themes=$Shared/themes
|
|
Templates=$Shared/templates
|
|
LRDFPresets=$Shared/rdf
|
|
PluginMetadata=$Shared/plugin_metadata
|
|
MixerSettings=$Shared/mixer_settings
|
|
ExportFormats=$Shared/export
|
|
Locale=$Shared/locale
|
|
MidiMaps=$Shared/midi_maps
|
|
PatchFiles=$Shared/patchfiles
|
|
LuaScripts=$Shared/scripts
|
|
MediaClips=$Shared/media
|
|
WebSurfaces=$Shared/web_surfaces
|
|
MackieControl=$Shared/mcp
|
|
OSC=$Shared/osc
|
|
|
|
if [ x$PRINT_SYSDEPS != x ] ; then
|
|
#
|
|
# print system dependencies
|
|
#
|
|
|
|
for file in $APPBIN/* $Libraries/* $Plugins/*.so ; do
|
|
if ! file $file | grep -qs Mach-O ; then
|
|
continue
|
|
fi
|
|
otool -L $file | awk '{print $1}' | egrep -v "(^@executable_path|^Ardour[0-9][.0-9]*.app)"
|
|
done | sort | uniq
|
|
exit 0
|
|
fi
|
|
|
|
echo "Removing old $APPDIR tree ..."
|
|
rm -rf $APPDIR/
|
|
|
|
echo "Building new app directory structure ..."
|
|
|
|
# only bother to make the longest paths
|
|
|
|
mkdir -p $APPDIR
|
|
mkdir -p $APPBIN
|
|
mkdir -p $APPLIB
|
|
mkdir -p $Etc
|
|
mkdir -p $Shared
|
|
mkdir -p $Themes
|
|
mkdir -p $Locale
|
|
mkdir -p $Surfaces
|
|
mkdir -p $MidiMaps
|
|
mkdir -p $PatchFiles
|
|
mkdir -p $LuaScripts
|
|
mkdir -p $MackieControl
|
|
mkdir -p $OSC
|
|
mkdir -p $ExportFormats
|
|
mkdir -p $Panners
|
|
mkdir -p $Backends
|
|
mkdir -p $Shared/doc
|
|
|
|
# maybe set variables
|
|
ENVIRONMENT=environment
|
|
rm -f $ENVIRONMENT
|
|
touch $ENVIRONMENT
|
|
|
|
if test x$MIXBUS != x ; then
|
|
echo export ARDOUR_MIXBUS=true >> $ENVIRONMENT
|
|
#
|
|
# current default for MIXBUS version is US keyboard layout without a keypad
|
|
#
|
|
echo export ARDOUR_KEYBOARD_LAYOUT=us-nokeypad >> $ENVIRONMENT
|
|
echo export ARDOUR_UI_CONF=ardour3_ui.conf >> $ENVIRONMENT
|
|
fi
|
|
|
|
#
|
|
# if we're not going to bundle JACK, make sure we can find
|
|
# jack in the places where it might be
|
|
#
|
|
|
|
echo export 'PATH="/usr/local/bin:/opt/bin:$PATH"' >> $ENVIRONMENT
|
|
|
|
sed -e "/^%ENV%/r $ENVIRONMENT" -e '/^%ENV%/d' -e 's/%VER%/'"${release_version}"'/;s/%EXENAME%/'"${EXENAME}"'/' < ardour.sh.in > $APPBIN/${EXENAME}${major_version}
|
|
rm $ENVIRONMENT && chmod 775 $APPBIN/${EXENAME}${major_version}
|
|
|
|
echo "Copying ardour executable ...."
|
|
if test -d $BUILD_ROOT/vst; then
|
|
#cp -v $BUILD_ROOT/gtk2_ardour/libgtk2_ardour.so $APPLIB/
|
|
cp -v $BUILD_ROOT/gtk2_ardour/ardour-${release_version}-vst.exe.so $APPBIN/${EXENAME}-${release_version}
|
|
else
|
|
cp -v $BUILD_ROOT/gtk2_ardour/ardour-${release_version}* $APPBIN/${EXENAME}-${release_version}
|
|
fi
|
|
|
|
if test x$STRIP = xall ; then
|
|
strip -s $APPBIN/${EXENAME}-${release_version}
|
|
fi
|
|
|
|
# copy locale files
|
|
# note that at present(feb 2011), the .mo files end up in the source tree which is
|
|
# not really as it should be.
|
|
if test x$WITH_NLS != x ; then
|
|
echo "NLS support ..."
|
|
echo "I hope you remembered to run scons msgupdate!"
|
|
LINGUAS=
|
|
|
|
for pkg in gtk2_ardour libs/ardour libs/gtkmm2ext libs/tk/ytk ; do
|
|
files=`find ../../$pkg -name "*.mo"`
|
|
|
|
#
|
|
# the package name is appended with a number so that
|
|
# it can be parallel installed during a regular install
|
|
# with older (and newer) versions. it is just the major
|
|
# number of the release (i.e. leading digits)
|
|
#
|
|
|
|
vsuffix=`echo $release_version | sed 's/^\([0-9][0-9]*\).*/\1/'`
|
|
|
|
if [ -z "$files" ]; then
|
|
echo ""
|
|
echo "!!!! WARNING !!!! - Did not find any .mo files in ../../$pkg"
|
|
echo ""
|
|
fi
|
|
|
|
for file in $files
|
|
do
|
|
echo $file
|
|
lang=`basename $file | sed 's/\.mo//'`
|
|
mkdir -p $Locale/$lang/LC_MESSAGES
|
|
cp $file $Locale/$lang/LC_MESSAGES/`basename $pkg`$vsuffix.mo
|
|
echo copy $file to $Locale/$lang/LC_MESSAGES/`basename $pkg`$vsuffix.mo
|
|
if echo $LINGUAS | grep $lang >/dev/null 2>&1 ; then
|
|
:
|
|
else
|
|
LINGUAS="$LINGUAS $lang"
|
|
fi
|
|
done
|
|
done
|
|
|
|
GTK_MESSAGES="atk10.mo gdk-pixbuf.mo gtk20-properties.mo gtk20.mo atk10.mo glib20.mo"
|
|
LOCALEROOT=$GTKSTACK_ROOT/share/locale
|
|
|
|
for l in $LINGUAS ; do
|
|
echo "Copying GTK i18n files for $l..."
|
|
for MO in $GTK_MESSAGES ; do
|
|
if [ -f $LOCALEROOT/$l/LC_MESSAGES/$MO ] ; then
|
|
cp $LOCALEROOT/$l/LC_MESSAGES/$MO $Locale/$l/LC_MESSAGES
|
|
else
|
|
# try with just the language spec
|
|
just_lang=`echo $l | sed 's/_[A-Z][A-Z]$//'`
|
|
if [ -f $LOCALEROOT/$just_lang/LC_MESSAGES/$MO ] ; then
|
|
cp $LOCALEROOT/$just_lang/LC_MESSAGES/$MO $Locale/$just_lang/LC_MESSAGES
|
|
fi
|
|
fi
|
|
done
|
|
done
|
|
else
|
|
echo "Skipping NLS support"
|
|
fi
|
|
|
|
# We rely on clearlooks, so include a version from our own build tree
|
|
# this one is special - we will set GTK_PATH to $Libraries/gtkengines
|
|
|
|
GTK_ENGINE_DIR=$Libraries/gtkengines/engines
|
|
mkdir -p $GTK_ENGINE_DIR
|
|
|
|
echo "Copying GTK engines ..."
|
|
cp $BUILD_ROOT/libs/clearlooks-newer/libclearlooks.so $Libraries
|
|
(cd $GTK_ENGINE_DIR && ln -s ../../libclearlooks.so . )
|
|
|
|
# Control Surfaces
|
|
cp $BUILD_ROOT/libs/surfaces/*/libardour_*.so* $Surfaces
|
|
cp $BUILD_ROOT/libs/ctrl-interface/*/libardour_*.so* $Libraries
|
|
|
|
# MidiMaps
|
|
# got to be careful with names here
|
|
for x in $BUILD_ROOT/../share/midi_maps/*.map ; do
|
|
cp "$x" $MidiMaps
|
|
done
|
|
|
|
# MIDNAM Patch Files
|
|
# got to be careful with names here
|
|
for x in $BUILD_ROOT/../share/patchfiles/*.midnam ; do
|
|
cp "$x" $PatchFiles
|
|
done
|
|
|
|
# Lua Scripts Files
|
|
# got to be careful with names here
|
|
for x in $BUILD_ROOT/../share/scripts/*.lua ; do
|
|
BN=$(basename $x)
|
|
if test "${BN:0:1}" = "_"; then
|
|
continue;
|
|
fi
|
|
cp "$x" $LuaScripts
|
|
done
|
|
|
|
# recursively copy web-surface html/js
|
|
cp -a $BUILD_ROOT/../share/web_surfaces $WebSurfaces
|
|
rm $WebSurfaces/wscript
|
|
|
|
# recursively copy clips/media
|
|
cp -a $BUILD_ROOT/../share/media $MediaClips
|
|
rm $MediaClips/wscript
|
|
|
|
# MackieControl data
|
|
# got to be careful with names here
|
|
for x in $BUILD_ROOT/../share/mcp/*.device $BUILD_ROOT/../share/mcp/*.profile ; do
|
|
cp "$x" $MackieControl
|
|
done
|
|
|
|
# OSC data
|
|
# got to be careful with names here
|
|
for x in $BUILD_ROOT/../share/osc/*.preset ; do
|
|
cp "$x" $OSC
|
|
done
|
|
|
|
# Mixbus MixerSettings (if any)
|
|
for x in $BUILD_ROOT/../mixer_settings/*.lua ; do
|
|
mkdir -p $MixerSettings # create on demand
|
|
cp "$x" $MixerSettings
|
|
done
|
|
|
|
#Session templates
|
|
cp -av $BUILD_ROOT/../share/templates $Templates
|
|
|
|
#LADSPA Presets
|
|
cp -av $BUILD_ROOT/../share/rdf $LRDFPresets
|
|
|
|
# PluginMetadata
|
|
cp -av $BUILD_ROOT/../share/plugin_metadata $PluginMetadata
|
|
|
|
# ExportFormats
|
|
# got to be careful with names here
|
|
for x in $BUILD_ROOT/../share/export/*.preset $BUILD_ROOT/../share/export/*.format ; do
|
|
cp "$x" $ExportFormats
|
|
done
|
|
|
|
# Panners
|
|
cp $BUILD_ROOT/libs/panners/*/lib*.so* $Panners
|
|
|
|
# Backends
|
|
for backend in jack alsa dummy wavesaudio pulseaudio; do
|
|
cp $BUILD_ROOT/libs/backends/$backend/lib*.so* $Backends
|
|
done
|
|
|
|
# VAMP plugins that we use
|
|
cp $BUILD_ROOT/libs/vamp-plugins/libardourvampplugins.so $Libraries
|
|
cp $BUILD_ROOT/libs/vamp-pyin/libardourvamppyin.so $Libraries
|
|
|
|
# Suil modules (new dir 'build-stack')
|
|
if test -d $BUILD_ROOT/libs/tk/suil/ ; then
|
|
cp $BUILD_ROOT/libs/tk/suil/libsuil_*_in_gtk2.so $Libraries
|
|
elif test -d $GTKSTACK_ROOT/lib/suil-0/ ; then
|
|
cp $GTKSTACK_ROOT/lib/suil-0/lib* $Libraries
|
|
fi
|
|
|
|
# VST scanner app (both LXVST as well as WIN-VST, 2in1)
|
|
# (if build with wine: ardour-vst-scanner is a wrapper
|
|
# script for ardour-vst-scanner.exe.so, if VST is disabled
|
|
# neither binary nor script exists)
|
|
if test -d $BUILD_ROOT/libs/fst ; then
|
|
cp $BUILD_ROOT/libs/fst/ardour-vst-scanner* $APPLIB || true
|
|
cp $BUILD_ROOT/libs/fst/ardour-vst3-scanner* $APPLIB || true
|
|
if test x$STRIP = xall ; then
|
|
strip -s $APPLIB/ardour-vst-scanner*
|
|
strip -s $APPLIB/ardour-vst3-scanner*
|
|
fi
|
|
fi
|
|
|
|
# vfork wrapper
|
|
if test -f $BUILD_ROOT/libs/vfork/ardour-exec-wrapper ; then
|
|
cp $BUILD_ROOT/libs/vfork/ardour-exec-wrapper $APPLIB
|
|
if test x$STRIP = xall ; then
|
|
strip -s $APPLIB/ardour-exec-wrapper
|
|
fi
|
|
fi
|
|
|
|
# ALSA device reservation tool (if available)
|
|
if test -f $BUILD_ROOT/libs/ardouralsautil/ardour-request-device; then
|
|
cp $BUILD_ROOT/libs/ardouralsautil/ardour-request-device $APPLIB/ || true
|
|
if test x$STRIP = xall ; then
|
|
strip -s $APPLIB/ardour-request-device
|
|
fi
|
|
fi
|
|
|
|
# session-utils
|
|
HAVE_SESSION_UTILS=false
|
|
for file in $BUILD_ROOT/session_utils/${lower_case_appname}${major_version}-*; do
|
|
BN=$(basename $file)
|
|
cp -v $file $APPLIB/
|
|
if test x$STRIP = xall ; then
|
|
strip -s $APPLIB/${BN}
|
|
fi
|
|
ln -s ../lib/ardour-util.sh $APPBIN/${BN}
|
|
HAVE_SESSION_UTILS=true
|
|
done
|
|
|
|
if test -x $BUILD_ROOT/luasession/luasession; then
|
|
BN=${lower_case_appname}${major_version}-lua
|
|
cp -v $BUILD_ROOT/luasession/luasession $APPLIB/$BN
|
|
if test x$STRIP = xall ; then
|
|
strip -s $APPLIB/${BN}
|
|
fi
|
|
ln -s ../lib/ardour-util.sh $APPBIN/${BN}
|
|
HAVE_SESSION_UTILS=true
|
|
fi
|
|
|
|
if test "$HAVE_SESSION_UTILS" = true ; then
|
|
cat >> $APPLIB/ardour-util.sh << EOF
|
|
#!/bin/sh
|
|
|
|
BIN_DIR=\$(dirname \$(readlink -f \$0))
|
|
INSTALL_DIR=\$(dirname \$BIN_DIR)
|
|
|
|
export LD_LIBRARY_PATH=\$INSTALL_DIR/lib\${LD_LIBRARY_PATH:+:\$LD_LIBRARY_PATH}
|
|
|
|
export ARDOUR_DATA_PATH=\$INSTALL_DIR/share
|
|
export ARDOUR_CONFIG_PATH=\$INSTALL_DIR/etc
|
|
export ARDOUR_DLL_PATH=\$INSTALL_DIR/lib
|
|
export VAMP_PATH=\$INSTALL_DIR/lib\${VAMP_PATH:+:\$VAMP_PATH}
|
|
|
|
SELF=\$(basename \$0)
|
|
exec "\$INSTALL_DIR/lib/\$SELF" "\$@"
|
|
EOF
|
|
chmod +x $APPLIB/ardour-util.sh
|
|
fi
|
|
|
|
cp $BUILD_ROOT/libs/ardour-avahi $APPLIB/ardour-avahi
|
|
chmod +x $APPLIB/ardour-avahi
|
|
|
|
OURLIBDIR=$BUILD_ROOT/libs
|
|
OURLIBS=$OURLIBDIR/tk/ydk-pixbuf:$OURLIBDIR/tk/ztk:$OURLIBDIR/tk/ydk:$OURLIBDIR/tk/ytk:$OURLIBDIR/tk/suil:$OURLIBDIR/tk/ztkmm:$OURLIBDIR/tk/ydkmm:$OURLIBDIR/tk/ytkmm:$OURLIBDIR/ctrl-interface/midi_surface:$OURLIBDIR/ctrl-interface/control_protocol:$OURLIBDIR/ardour:$OURLIBDIR/midi++2:$OURLIBDIR/pbd:$OURLIBDIR/gtkmm2ext:$OURLIBDIR/glibmm2:$OURLIBDIR/canvas:$OURLIBDIR/widgets:$OURLIBDIR/waveview:$OURLIBDIR/evoral:$OURLIBDIR/evoral/src/libsmf:$OURLIBDIR/audiographer:$OURLIBDIR/temporal:$OURLIBDIR/libltc:$OURLIBDIR/qm-dsp:$OURLIBDIR/ardouralsautil:$OURLIBDIR/ptformat:$OURLIBDIR/aaf:$BUILD_ROOT/gtk2_ardour
|
|
|
|
echo $OURLIBS${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}
|
|
|
|
checkedIdx=0
|
|
|
|
# these are dynamically loaded by NSS
|
|
deplibs="libfreeblpriv3.so libsoftokn3.so libnsspem.so"
|
|
cp -v $GTKSTACK_ROOT/lib/libsoftokn3.so $Libraries/
|
|
cp -v $GTKSTACK_ROOT/lib/libfreeblpriv3.so $Libraries/
|
|
cp -v $GTKSTACK_ROOT/lib/libnsspem.so $Libraries/
|
|
chrpath -r foo $Libraries/libsoftokn3.so
|
|
chrpath -r foo $Libraries/libfreeblpriv3.so
|
|
chrpath -r foo $Libraries/libnsspem.so
|
|
|
|
while [ true ] ; do
|
|
missing=false
|
|
filelist=`find $APPLIB/ -type f`
|
|
filelist="$APPBIN/${EXENAME}-${release_version} $filelist"
|
|
|
|
for file in $filelist ; do
|
|
if ! file $file | grep -qs ELF ; then
|
|
continue
|
|
fi
|
|
|
|
# speed this up a bit by not checking things multiple times.
|
|
for i in "${depCheckedList[@]}"; do
|
|
if [ $i == $file ]; then
|
|
continue 2
|
|
fi
|
|
done
|
|
depCheckedList[$checkIdx]=$file
|
|
checkIdx=$(($checkIdx + 1))
|
|
|
|
# ignore suil/qt wrappers - the plugin will pull in QT4.
|
|
if echo $file | grep -qs 'libsuil_.*qt[45]' ; then continue; fi
|
|
|
|
# do not include libjack, nor libwine
|
|
deps=`LD_LIBRARY_PATH=$OURLIBS${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH} ldd $file | grep -v libwine.so | awk '{print $3}'`
|
|
|
|
echo -n "."
|
|
for dep in $deps ; do
|
|
if test "not" = ${dep}; then
|
|
echo ""
|
|
echo "!!! ERROR !!! - Missing dependent library for $file."
|
|
echo "Searched: " $OURLIBS${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}
|
|
echo ""
|
|
(LD_LIBRARY_PATH=$OURLIBS${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH} ldd $file)
|
|
echo ""
|
|
echo "!!! ERROR !!! - See Above"
|
|
exit 1
|
|
fi
|
|
|
|
# don't use anything mapped at a specific address
|
|
if echo $dep | grep -qs '0x' ; then continue; fi
|
|
# don't include any distro libraries
|
|
if echo $dep | grep -qs "^/lib/" ; then continue; fi
|
|
if echo $dep | grep -qs "^/usr/lib/" ; then continue; fi
|
|
if echo $dep | grep -qs "^/usr/local/lib/" ; then continue; fi
|
|
## the following are likely redundant ##
|
|
# skip jack, ALSA & pulse
|
|
if echo $dep | grep -qs libjack ; then continue; fi
|
|
if echo $dep | grep -qs libasound ; then continue; fi
|
|
if echo $dep | grep -qs libpulse ; then continue; fi
|
|
# don't include any X Window libraries
|
|
if echo $dep | grep -qs libX\. ; then continue; fi
|
|
if echo $dep | grep -qs libxcb ; then continue; fi
|
|
if echo $dep | grep -qs libICE\. ; then continue; fi
|
|
if echo $dep | grep -qs libSM\. ; then continue; fi
|
|
# don't include libc
|
|
if echo $dep | grep -qs 'libc\.' ; then continue; fi
|
|
# don't include libstdc++
|
|
if echo $dep | grep -qs libstdc++ ; then continue; fi
|
|
# don't include libdbus (alsa request device)
|
|
if echo $dep | grep -qs libdbus ; then continue; fi
|
|
# nor libudev (hidapi)
|
|
if echo $dep | grep -qs libudev ; then continue; fi
|
|
|
|
base=`basename $dep`
|
|
if ! test -f $Libraries/$base; then
|
|
parent=$(basename ${file})
|
|
if echo $dep | grep -sq '^libs' ; then
|
|
echo "Copying dependent lib $BUILD_ROOT/$dep (required by ${parent})"
|
|
cp $BUILD_ROOT/$dep $Libraries
|
|
else
|
|
echo "Copying dependent lib $dep (required by ${parent})"
|
|
cp $dep $Libraries
|
|
fi
|
|
chmod 755 $Libraries/`basename $dep`
|
|
#
|
|
# reset RPATH so that the runtime linker never looks
|
|
# in places we don't want it to
|
|
#
|
|
chrpath -r foo $Libraries/`basename $dep`
|
|
if echo $dep | grep -sq '^/' ; then
|
|
# absolute path, candidate for stripping
|
|
deplibs="$deplibs $base"
|
|
fi
|
|
missing=true
|
|
fi
|
|
done
|
|
done
|
|
if test x$missing = xfalse ; then
|
|
# everything has been found
|
|
break
|
|
fi
|
|
done
|
|
echo
|
|
|
|
# strip libraries
|
|
if test x$STRIP = xall ; then
|
|
echo Stripping all libraries
|
|
# Must be writable so that we can strip
|
|
find $APPLIB/ -name "*.so*" -print0 | xargs -0 chmod u+w
|
|
# and strip ...
|
|
find $APPLIB/ -name "*.so*" -print0 | xargs -0 strip -s
|
|
elif test x$STRIP = xsome ; then
|
|
echo Stripping dependent libraries
|
|
for l in $deplibs ; do
|
|
if echo "$l" | grep -qE "$NOSTRIP"; then
|
|
continue
|
|
fi
|
|
chmod u+w $APPLIB/$l
|
|
strip -s $APPLIB/$l
|
|
done
|
|
fi
|
|
find $APPLIB/ -name "*.so*" -print0 | xargs -0 chmod a+rx
|
|
|
|
# Remove ABI suffix, symlink *.so.
|
|
# This fixes plugins that dynamically open libs.
|
|
# e.g. JUCE option to lazily loading libcurl.so
|
|
(
|
|
cd $APPLIB/
|
|
for lib in *.so.[0-9]*; do
|
|
link=$(echo $lib | sed 's/\.[0-9]*$//')
|
|
ln -s $lib $link;
|
|
done
|
|
)
|
|
|
|
echo "Copying other stuff to $APPDIR ..."
|
|
|
|
# these are all generated by waf
|
|
cp $BUILD_ROOT/gtk2_ardour/ardour.keys $Etc
|
|
cp $BUILD_ROOT/gtk2_ardour/ardour.menus $Etc
|
|
cp $BUILD_ROOT/gtk2_ardour/clearlooks.rc $Etc
|
|
cp $BUILD_ROOT/gtk2_ardour/default_ui_config $Etc
|
|
|
|
# Copied directly from source tree
|
|
|
|
mkdir ${Shared}/icons
|
|
mkdir ${Shared}/resources
|
|
cp ../../system_config $Etc/system_config
|
|
cp ../../gtk2_ardour/icons/*.png ${Shared}/icons
|
|
cp -r ../../gtk2_ardour/icons/cursor_* ${Shared}/icons/
|
|
cp ../../gtk2_ardour/ArdourMono.ttf $Shared
|
|
cp ../../gtk2_ardour/ArdourSans.ttf $Shared
|
|
cp ../../gtk2_ardour/resources/${APPNAME}-* ${Shared}/resources/
|
|
|
|
# Themes: only install those named for this app
|
|
cp ../../gtk2_ardour/themes/*-${lower_case_appname}.colors $Themes
|
|
|
|
#
|
|
# put sooper sekrit ingredients here and they will be copied
|
|
#
|
|
|
|
if [ -d specialSauce ] ; then
|
|
cp -r specialSauce $Etc
|
|
fi
|
|
|
|
# install bundled LV2s to <app>/lib/LV2/
|
|
cp -R $BUILD_ROOT/libs/LV2 $APPLIB/ || true
|
|
|
|
# lv2 core, classifications
|
|
for file in $GTKSTACK_ROOT/lib/lv2/*.lv2; do
|
|
BN=$(basename $file)
|
|
mkdir -p $APPLIB/LV2/$BN
|
|
cp $GTKSTACK_ROOT/lib/lv2/${BN}/*.ttl $APPLIB/LV2/${BN}/
|
|
done
|
|
|
|
# go through and recursively remove any .svn dirs in the bundle
|
|
for svndir in `find $APPDIR -name .svn -type d`; do
|
|
rm -rf $svndir
|
|
done
|
|
|
|
|
|
################################################################################
|
|
### Mixbus plugins, etc
|
|
if test x$WITH_HARRISON_LV2 != x ; then
|
|
echo "Adding Harrison LV2s"
|
|
mkdir -p $APPLIB/LV2
|
|
|
|
curl -s -S --fail -# \
|
|
-z "${CACHEDIR}/${HARRISONLV2}.${HARCH}.zip" \
|
|
-o "${CACHEDIR}/${HARRISONLV2}.${HARCH}.zip" \
|
|
"${HARRISONDSPURL}/${HARRISONLV2}.${HARCH}.zip"
|
|
unzip -q -d "$APPLIB/LV2/" "${CACHEDIR}/${HARRISONLV2}.${HARCH}.zip"
|
|
fi
|
|
|
|
if test -n "$MIXBUS"; then
|
|
echo "Adding Mixbus Channelstrip"
|
|
|
|
mkdir -p $APPLIB/ladspa/strip/
|
|
curl -s -S --fail -# \
|
|
-z "${CACHEDIR}/${HARRISONCHANNELSTRIP}.${HARCH}.so" \
|
|
-o "${CACHEDIR}/${HARRISONCHANNELSTRIP}.${HARCH}.so" \
|
|
"${HARRISONDSPURL}/${HARRISONCHANNELSTRIP}.${HARCH}.so"
|
|
|
|
cp "${CACHEDIR}/${HARRISONCHANNELSTRIP}.${HARCH}.so" \
|
|
$APPLIB/ladspa/strip/${HARRISONCHANNELSTRIP}.so
|
|
chmod +x $APPLIB/ladspa/strip/${HARRISONCHANNELSTRIP}.so
|
|
|
|
echo "Adding Harrison Vamp Plugins"
|
|
|
|
VAMPARCH="${HARCH}gcc5"
|
|
curl -s -S --fail -# \
|
|
-z "${CACHEDIR}/harrison_vamp.${VAMPARCH}.so" \
|
|
-o "${CACHEDIR}/harrison_vamp.${VAMPARCH}.so" \
|
|
"${HARRISONDSPURL}/harrison_vamp.${VAMPARCH}.so"
|
|
|
|
cp "${CACHEDIR}/harrison_vamp.${VAMPARCH}.so" \
|
|
$APPLIB/harrison_vamp.so
|
|
chmod +x $APPLIB/harrison_vamp.so
|
|
|
|
# Mixbus Bundled Media Content
|
|
curl -s -S --fail -# \
|
|
-z "${CACHEDIR}/MixbusBundledMedia.zip" \
|
|
-o "${CACHEDIR}/MixbusBundledMedia.zip" \
|
|
"http://builder.harrisonconsoles.com/pub/share/MixbusBundledMedia.zip"
|
|
|
|
if test -f "${CACHEDIR}/MixbusBundledMedia.zip"; then
|
|
echo "Adding Mixbus Bundled Content"
|
|
rm -f "${MediaClips}/"*.*
|
|
unzip -q -o -d "${MediaClips}" "${CACHEDIR}/MixbusBundledMedia.zip"
|
|
fi
|
|
elif test -z "$LIVETRAX"; then
|
|
echo "Fetching Ardour bundled content"
|
|
|
|
curl -s -S --fail -# \
|
|
-z "${CACHEDIR}/ArdourBundledMedia.zip" \
|
|
-o "${CACHEDIR}/ArdourBundledMedia.zip" \
|
|
"http://stuff.ardour.org/loops/ArdourBundledMedia.zip"
|
|
if test -f "${CACHEDIR}/ArdourBundledMedia.zip"; then
|
|
echo "Adding Ardour Bundled Content"
|
|
rm -f "${MediaClips}/"*.*
|
|
unzip -q -o -d "${MediaClips}" "${CACHEDIR}/ArdourBundledMedia.zip"
|
|
fi
|
|
fi
|
|
|
|
echo "Setting Bundled Media dir/file permissions"
|
|
find "${MediaClips}" -type d -exec chmod 755 "{}" \;
|
|
find "${MediaClips}" -type f -exec chmod 644 "{}" \;
|
|
|
|
if test x$WITH_GMSYNYTH != x ; then
|
|
mkdir -p $APPLIB/LV2
|
|
|
|
echo "Adding General MIDI Synth LV2"
|
|
|
|
for proj in x42-gmsynth ; do
|
|
X42_VERSION=$(curl -s -S http://x42-plugins.com/x42/linux/${proj}.latest.txt)
|
|
rsync -a -q --partial \
|
|
rsync://x42-plugins.com/x42/linux/${proj}-lv2-linux-${WARCH}-${X42_VERSION}.zip \
|
|
"${CACHEDIR}/${proj}-lv2-linux-${WARCH}-${X42_VERSION}.zip"
|
|
unzip -q -d "$APPLIB/LV2/" "${CACHEDIR}/${proj}-lv2-linux-${WARCH}-${X42_VERSION}.zip"
|
|
done
|
|
fi
|
|
|
|
|
|
if test x$WITH_COMMERCIAL_X42_LV2 != x ; then
|
|
mkdir -p $APPLIB/LV2
|
|
|
|
echo "Adding commercial x42 Plugins"
|
|
|
|
for proj in x42-meters x42-eq x42-whirl; do
|
|
X42_VERSION=$(curl -s -S http://x42-plugins.com/x42/linux/${proj}.latest.txt)
|
|
rsync -a -q --partial \
|
|
rsync://x42-plugins.com/x42/linux/${proj}-lv2-linux-${WARCH}-${X42_VERSION}.zip \
|
|
"${CACHEDIR}/${proj}-lv2-linux-${WARCH}-${X42_VERSION}.zip"
|
|
unzip -q -d "$APPLIB/LV2/" "${CACHEDIR}/${proj}-lv2-linux-${WARCH}-${X42_VERSION}.zip"
|
|
done
|
|
fi
|
|
|
|
if test x$WITH_GRATIS_X42_LV2 != x ; then
|
|
mkdir -p $APPLIB/LV2
|
|
|
|
echo "Adding gratis x42 Plugins"
|
|
|
|
for proj in x42-autotune x42-midifilter x42-stereoroute setBfree x42-avldrums x42-limiter x42-tuner; do
|
|
X42_VERSION=$(curl -s -S http://x42-plugins.com/x42/linux/${proj}.latest.txt)
|
|
rsync -a -q --partial \
|
|
rsync://x42-plugins.com/x42/linux/${proj}-lv2-linux-${WARCH}-${X42_VERSION}.zip \
|
|
"${CACHEDIR}/${proj}-lv2-linux-${WARCH}-${X42_VERSION}.zip"
|
|
unzip -q -d "$APPLIB/LV2/" "${CACHEDIR}/${proj}-lv2-linux-${WARCH}-${X42_VERSION}.zip"
|
|
done
|
|
fi
|
|
|
|
################################################################################
|
|
|
|
if test x$WITH_HARVID != x ; then
|
|
cd $APPBIN
|
|
HARVID_VERSION=$(curl -s -S http://ardour.org/files/video-tools/harvid_version.txt)
|
|
|
|
rsync -Pa \
|
|
rsync://ardour.org/video-tools/harvid-${MULTIARCH}-${HARVID_VERSION}.tgz \
|
|
"$CACHEDIR/harvid-${MULTIARCH}-${HARVID_VERSION}.tgz"
|
|
|
|
tar -x -z \
|
|
--exclude=README --exclude=harvid.1 --strip-components=1 \
|
|
-f "$CACHEDIR/harvid-${MULTIARCH}-${HARVID_VERSION}.tgz" || exit 1
|
|
cd -
|
|
fi
|
|
|
|
if test x$WITH_XJADEO != x ; then
|
|
cd $APPBIN
|
|
XJADEO_VERSION=$(curl -s -S http://ardour.org/files/video-tools/xjadeo_version.txt)
|
|
|
|
rsync -Pa \
|
|
rsync://ardour.org/video-tools/xjadeo-${MULTIARCH}-${XJADEO_VERSION}.tgz \
|
|
"$CACHEDIR/xjadeo-${MULTIARCH}-${XJADEO_VERSION}.tgz"
|
|
|
|
tar -x -z \
|
|
--exclude=README --exclude=xjadeo.1 --strip-components=1 \
|
|
-f "$CACHEDIR/xjadeo-${MULTIARCH}-${XJADEO_VERSION}.tgz" || exit 1
|
|
mv xjadeo xjremote
|
|
cd -
|
|
fi
|
|
|
|
################################################################################
|
|
|
|
if test x$DEMO_SESSION_URL != x ; then
|
|
mkdir -p $Shared/sessions
|
|
DEMO_SESSIONS=$(curl -s -S --fail $DEMO_SESSION_URL/index.txt)
|
|
for demo in $DEMO_SESSIONS; do
|
|
curl -s -S --fail -# -o $Shared/sessions/$demo $DEMO_SESSION_URL/$demo
|
|
done
|
|
fi
|
|
|
|
################################################################################
|
|
|
|
#
|
|
# Add the uninstaller
|
|
#
|
|
sed -e "s/%REPLACE_PGM%/${APPNAME}/" -e "s/%REPLACE_VENDOR%/${VENDOR}/" -e "s/%REPLACE_MAJOR_VERSION%/${major_version}/" -e "s/%REPLACE_VERSION%/${release_version}/" -e "s/%REPLACE_TYPE%/${BUILDTYPE}/" < uninstall.sh.in > $APPBIN/${APP_VER_NAME}.uninstall.sh
|
|
chmod a+x $APPBIN/${APP_VER_NAME}.uninstall.sh
|
|
|
|
#
|
|
# Add the stage2.run script
|
|
#
|
|
sed -e "s/%REPLACE_MAJOR_VERSION%/${major_version}/;s/%REPLACE_PGM%/${APPNAME}/;s/%REPLACE_VENDOR%/${VENDOR}/;s/%REPLACE_EXE%/${EXENAME}/" < stage2.run.in > stage2.run
|
|
chmod a+x stage2.run
|
|
|
|
#Sanity Check file
|
|
if [ -e $BUILD_ROOT/tools/sanity_check/sanityCheck ]; then
|
|
cp $BUILD_ROOT/tools/sanity_check/sanityCheck $APPBIN
|
|
else
|
|
echo "!!!ERROR !!! sanityCheck program is missing. packager will exit without being complete"
|
|
exit 1
|
|
fi
|
|
|
|
echo "Building tarball ..."
|
|
|
|
rm -f $APPDIR.tar
|
|
tar -cf $APPDIR.tar $APPDIR
|
|
|
|
echo "Calculating bundle size"
|
|
du -sb $APPDIR/ | awk '{print $1}' > $APPDIR.size
|
|
|
|
( cd $APPDIR ; find . ) > file_list.txt
|
|
|
|
rm -rf $APPDIR/
|
|
|
|
echo "Done."
|
|
|