2014-10-21 14:16:10 -04:00
#!/bin/bash
2015-01-04 20:15:19 -05:00
# we assume this script is <ardour-src>/tools/x-win/package.sh
2014-10-21 14:16:10 -04:00
pushd " `/usr/bin/dirname \" $0 \"` " > /dev/null; this_script_dir = "`pwd`" ; popd > /dev/null
cd $this_script_dir /../..
test -f gtk2_ardour/wscript || exit 1
2015-01-04 20:15:19 -05:00
# Defaults (overridden by environment)
2014-10-21 14:16:10 -04:00
: ${ XARCH =i686 } # or x86_64
: ${ ROOT =/home/ardour }
: ${ MAKEFLAGS =-j4 }
: ${ TMPDIR =/var/tmp }
: ${ SRCDIR =/var/tmp/winsrc } # source-code tgz cache
2015-01-04 20:15:19 -05:00
# TODO: add variant switches here or grep from build/config.log
# see also wscript, video_tool_paths.cc, bundle_env_mingw.cc
PROGRAM_NAME = Ardour
PRODUCT_NAME = ardour
PROGRAM_VERSION = 3
# derived variables
PRODUCT_ID = ${ PRODUCT_NAME } ${ PROGRAM_VERSION }
PRODUCT_EXE = ${ PRODUCT_NAME } .exe
PRODUCT_ICON = ${ PRODUCT_NAME } .ico
###############################################################################
2014-10-21 14:16:10 -04:00
if test " $XARCH " = "x86_64" -o " $XARCH " = "amd64" ; then
echo "Target: 64bit Windows (x86_64)"
XPREFIX = x86_64-w64-mingw32
WARCH = w64
else
echo "Target: 32 Windows (i686)"
XPREFIX = i686-w64-mingw32
WARCH = w32
fi
: ${ PREFIX = ${ ROOT } /win-stack- $WARCH }
export SRCDIR
if [ " $( id -u) " = "0" ] ; then
apt-get -y install nsis curl
fi
function download {
echo " --- Downloading.. $2 "
test -f ${ SRCDIR } /$1 || curl -k -L -o ${ SRCDIR } /$1 $2
}
################################################################################
set -e
ARDOURVERSION = $( git describe | sed 's/-g.*$//' )
ARDOURDATE = $( date -R)
BINVERSION = $( git describe | sed 's/-g.*$//' | sed 's/-/./' )
if ! test -f build/gtk2_ardour/ardour-${ BINVERSION } .exe; then
echo " *** Please compile ardour ${ ARDOURVERSION } first. "
exit 1
fi
./waf install
################################################################################
if test -z " $DESTDIR " ; then
DESTDIR = ` mktemp -d`
trap 'rm -rf $DESTDIR' exit SIGINT SIGTERM
fi
echo " === bundle to $DESTDIR "
ALIBDIR = $DESTDIR /lib/ardour3
rm -rf $DESTDIR
mkdir -p $DESTDIR /bin
mkdir -p $DESTDIR /share/
mkdir -p $ALIBDIR /surfaces
mkdir -p $ALIBDIR /backends
mkdir -p $ALIBDIR /panners
mkdir -p $ALIBDIR /vamp
cp build/libs/gtkmm2ext/gtkmm2ext-*.dll $DESTDIR /bin/
cp build/libs/midi++2/midipp-*.dll $DESTDIR /bin/
cp build/libs/evoral/evoral-*.dll $DESTDIR /bin/
cp build/libs/ardour/ardour-*.dll $DESTDIR /bin/
cp build/libs/timecode/timecode.dll $DESTDIR /bin/
cp build/libs/qm-dsp/qmdsp-*.dll $DESTDIR /bin/
cp build/libs/canvas/canvas-*.dll $DESTDIR /bin/
cp build/libs/pbd/pbd-*.dll $DESTDIR /bin/
cp build/libs/audiographer/audiographer-*.dll $DESTDIR /bin/
cp build/libs/fst/ardour-vst-scanner.exe $DESTDIR /bin/ || true
2015-01-04 20:15:19 -05:00
cp ` ls -t build/gtk2_ardour/ardour-*.exe | head -n1` $DESTDIR /bin/${ PRODUCT_EXE }
2014-10-21 14:16:10 -04:00
mkdir -p $DESTDIR /lib/gtk-2.0/engines
cp build/libs/clearlooks-newer/clearlooks.dll $DESTDIR /lib/gtk-2.0/engines/libclearlooks.la
cp $PREFIX /bin/*dll $DESTDIR /bin/
cp $PREFIX /lib/*dll $DESTDIR /bin/
rm -rf $DESTDIR /bin/libjack*.dll
cp ` find build/libs/surfaces/ -iname "*.dll" ` $ALIBDIR /surfaces/
cp ` find build/libs/backends/ -iname "*.dll" ` $ALIBDIR /backends/
cp ` find build/libs/panners/ -iname "*.dll" ` $ALIBDIR /panners/
cp -r build/libs/LV2 $ALIBDIR /
cp -r build/libs/vamp-plugins/*ardourvampplugins*.dll $ALIBDIR /vamp/libardourvampplugins.dll
mv $ALIBDIR /surfaces/ardourcp-*.dll $DESTDIR /bin/
# TODO use -static-libgcc -static-libstdc++ -- but for .exe files only
if update-alternatives --query ${ XPREFIX } -gcc | grep Value: | grep -q win32; then
cp /usr/lib/gcc/${ XPREFIX } /*-win32/libgcc_s_*.dll $DESTDIR /bin/
cp /usr/lib/gcc/${ XPREFIX } /*-win32/libstdc++-6.dll $DESTDIR /bin/
elif update-alternatives --query ${ XPREFIX } -gcc | grep Value: | grep -q posix; then
cp /usr/lib/gcc/${ XPREFIX } /*-posix/libgcc_s_*.dll $DESTDIR /bin/
cp /usr/lib/gcc/${ XPREFIX } /*-posix/libstdc++-6.dll $DESTDIR /bin/
else
cp /usr/lib/gcc/${ XPREFIX } /*/libgcc_s_sjlj-1.dll $DESTDIR /bin/
cp /usr/lib/gcc/${ XPREFIX } /*/libstdc++-6.dll $DESTDIR /bin/
fi
#Ubuntu's 14.04's mingw needs this one for the std libs above
if test -f /usr/${ XPREFIX } /lib/libwinpthread-1.dll; then
cp /usr/${ XPREFIX } /lib/libwinpthread-1.dll $DESTDIR /bin/
fi
cp -r $PREFIX /share/ardour3 $DESTDIR /share/
cp -r $PREFIX /etc/ardour3/* $DESTDIR /share/ardour3/
cp COPYING $DESTDIR /share/
2015-01-04 20:15:19 -05:00
cp gtk2_ardour/icons/${ PRODUCT_ICON } $DESTDIR /share/
2014-12-24 08:33:48 -05:00
cp gtk2_ardour/icons/ardour_bug.ico $DESTDIR /share/
2014-10-21 14:16:10 -04:00
2014-11-18 16:08:51 -05:00
# replace default cursor with square version (sans hotspot file)
2014-11-18 17:39:35 -05:00
cp gtk2_ardour/icons/cursor_square/* $DESTDIR /share/ardour3/icons/
2014-11-18 16:08:51 -05:00
2014-10-21 14:16:10 -04:00
# clean build-dir after depoyment
./waf uninstall
echo " === complete"
du -sh $DESTDIR
2014-12-23 21:56:54 -05:00
################################################################################
### get video tools
if test -z " $NOVIDEOTOOLS " ; then
echo " === Including video-tools"
HARVID_VERSION = $( curl -s -S http://ardour.org/files/video-tools/harvid_version.txt)
XJADEO_VERSION = $( curl -s -S http://ardour.org/files/video-tools/xjadeo_version.txt)
2014-12-24 08:33:48 -05:00
rsync -a -q --partial \
2014-12-23 21:56:54 -05:00
rsync://ardour.org/video-tools/harvid_win-${ HARVID_VERSION } .tar.xz \
" ${ SRCDIR } /harvid_win- ${ HARVID_VERSION } .tar.xz "
2014-12-24 08:33:48 -05:00
rsync -a -q --partial \
2014-12-23 21:56:54 -05:00
rsync://ardour.org/video-tools/xjadeo_win-${ XJADEO_VERSION } .tar.xz \
" ${ SRCDIR } /xjadeo_win- ${ XJADEO_VERSION } .tar.xz "
mkdir $DESTDIR /video
tar -xf " ${ SRCDIR } /harvid_win- ${ HARVID_VERSION } .tar.xz " -C " $DESTDIR /video/ "
tar -xf " ${ SRCDIR } /xjadeo_win- ${ XJADEO_VERSION } .tar.xz " -C " $DESTDIR /video/ "
2014-12-24 08:33:48 -05:00
echo " === unzipped"
du -sh $DESTDIR /video
du -sh $DESTDIR
2014-12-23 21:56:54 -05:00
fi
2014-10-21 14:16:10 -04:00
################################################################################
### include static gdb - re-zipped binaries from
### http://sourceforge.net/projects/mingw/files/MinGW/Extension/gdb/gdb-7.6.1-1/gdb-7.6.1-1-mingw32-bin.tar.lzma
### http://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win64/Personal%20Builds/mingw-builds/4.9.1/threads-win32/sjlj/x86_64-4.9.1-release-win32-sjlj-rt_v3-rev1.7z
if ! grep " using ./waf configure" build/config.log | grep -q -- "--optimize" ; then
download gdb-static-win3264.tar.xz http://robin.linuxaudio.org/gdb-static-win3264.tar.xz
cd ${ SRCDIR }
tar xf gdb-static-win3264.tar.xz
cd - > /dev/null
2015-01-04 20:15:19 -05:00
echo " === Creating debug.bat"
2014-10-21 14:16:10 -04:00
cp -r ${ SRCDIR } /gdb_$WARCH $DESTDIR /gdb
2015-01-04 20:15:19 -05:00
cat > $DESTDIR /debug.bat << EOF
2014-10-21 14:16:10 -04:00
cd bin
2015-01-04 20:15:19 -05:00
START ..\\ gdb\\ bin\\ gdb.exe -iex "set logging overwrite on" -iex "set height 0" -iex " set logging on %UserProfile%\\ ${ PRODUCT_NAME } -debug.log " ${ PRODUCT_EXE }
2014-10-21 14:16:10 -04:00
EOF
2015-01-04 20:15:19 -05:00
OUTFILE = " ${ TMPDIR } / ${ PRODUCT_NAME } - ${ ARDOURVERSION } -dbg- ${ WARCH } -Setup.exe "
2014-12-23 21:56:54 -05:00
VERSIONINFO = "Debug Version."
2014-10-21 14:16:10 -04:00
else
2015-01-04 20:15:19 -05:00
OUTFILE = " ${ TMPDIR } / ${ PRODUCT_NAME } - ${ ARDOURVERSION } - ${ WARCH } -Setup.exe "
2014-12-23 21:56:54 -05:00
VERSIONINFO = "Optimized Version."
2014-10-21 14:16:10 -04:00
fi
################################################################################
echo " === Preparing Windows Installer"
NSISFILE = $DESTDIR /a3.nsis
if test " $WARCH " = "w64" ; then
PGF = PROGRAMFILES64
else
PGF = PROGRAMFILES
fi
2014-10-22 17:58:57 -04:00
if test -n " $QUICKZIP " ; then
cat > $NSISFILE << EOF
SetCompressor zlib
EOF
else
cat > $NSISFILE << EOF
2014-10-21 14:16:10 -04:00
SetCompressor /SOLID lzma
SetCompressorDictSize 32
2014-10-22 17:58:57 -04:00
EOF
fi
2014-10-21 14:16:10 -04:00
2014-10-22 17:58:57 -04:00
cat >> $NSISFILE << EOF
2014-10-21 14:16:10 -04:00
!include MUI2.nsh
2015-01-04 20:15:19 -05:00
Name " ${ PROGRAM_NAME } ${ PROGRAM_VERSION } "
2014-10-21 14:16:10 -04:00
OutFile " ${ OUTFILE } "
RequestExecutionLevel admin
2015-01-04 20:15:19 -05:00
InstallDir " \$ ${ PGF } \\ ${ PRODUCT_ID } "
InstallDirRegKey HKLM " Software\\ ${ PROGRAM_NAME } \\ ${ PRODUCT_ID } \\ $WARCH " "Install_Dir"
!define MUI_ICON " share\\ ${ PRODUCT_ICON } "
EOF
2014-10-21 14:16:10 -04:00
2015-01-04 20:15:19 -05:00
# TODO: add project speficic finish/welcome page
cat >> $NSISFILE << EOF
2014-10-21 14:16:10 -04:00
!define MUI_FINISHPAGE_TITLE "Welcome to Ardour"
!define MUI_FINISHPAGE_TEXT "This windows versions or Ardour is provided as-is.\$\\r\$\\nThe ardour community currently has no expertise in supporting windows users, and there are no developers focusing on windows specific issues either.\$\\r\$\\nIf you like Ardour, please consider helping out."
!define MUI_FINISHPAGE_LINK "Ardour Manual"
!define MUI_FINISHPAGE_LINK_LOCATION "http://manual.ardour.org"
#this would run as admin - see http://forums.winamp.com/showthread.php?t=353366
2015-01-04 20:15:19 -05:00
#!define MUI_FINISHPAGE_RUN "\$INSTDIR\\bin\\${PRODUCT_EXE}"
2014-10-21 14:16:10 -04:00
!define MUI_FINISHPAGE_NOREBOOTSUPPORT
2015-01-04 20:15:19 -05:00
EOF
2014-10-21 14:16:10 -04:00
2015-01-04 20:15:19 -05:00
cat >> $NSISFILE << EOF
2014-10-21 14:16:10 -04:00
!define MUI_ABORTWARNING
!insertmacro MUI_PAGE_LICENSE "share\\COPYING"
!insertmacro MUI_PAGE_COMPONENTS
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_PAGE_FINISH
!insertmacro MUI_UNPAGE_CONFIRM
!insertmacro MUI_UNPAGE_INSTFILES
!insertmacro MUI_LANGUAGE "English"
2015-01-04 20:15:19 -05:00
Section " ${ PROGRAM_NAME } ${ PROGRAM_VERSION } (required) " SecMainProg
2014-10-21 14:16:10 -04:00
SectionIn RO
SetOutPath \$ INSTDIR
File /r bin
File /r lib
File /r share
2015-01-04 20:15:19 -05:00
File /nonfatal debug.bat
2014-10-21 14:16:10 -04:00
File /nonfatal /r gdb
2015-01-04 20:15:19 -05:00
WriteRegStr HKLM " Software\\ ${ PROGRAM_NAME } \\v ${ PROGRAM_VERSION } \\ $WARCH " "Install_Dir" "\$INSTDIR"
WriteRegStr HKLM " Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\ ${ PRODUCT_ID } " "DisplayName" " ${ PROGRAM_NAME } ${ PROGRAM_VERSION } "
WriteRegStr HKLM " Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\ ${ PRODUCT_ID } " "UninstallString" '"\$INSTDIR\\uninstall.exe"'
WriteRegDWORD HKLM " Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\ ${ PRODUCT_ID } " "NoModify" 1
WriteRegDWORD HKLM " Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\ ${ PRODUCT_ID } " "NoRepair" 1
2014-10-21 14:16:10 -04:00
WriteUninstaller "\$INSTDIR\uninstall.exe"
2015-01-04 20:15:19 -05:00
CreateShortCut " \$INSTDIR\\ ${ PROGRAM_NAME } ${ PROGRAM_VERSION } .lnk " " \$INSTDIR\\bin\\ ${ PRODUCT_EXE } " "" " \$INSTDIR\\bin\\ ${ PRODUCT_EXE } " 0
2014-10-21 14:16:10 -04:00
SectionEnd
2014-12-23 21:56:54 -05:00
EOF
if test -z " $NOVIDEOTOOLS " ; then
cat >> $NSISFILE << EOF
Section "Videotimeline Tools" SecVideo
2015-01-04 20:15:19 -05:00
WriteRegStr " HKLM Software\\ ${ PROGRAM_NAME } \\v ${ PROGRAM_VERSION } \\video " "Install_Dir" "\$INSTDIR\\video"
2014-12-23 21:56:54 -05:00
SetOutPath \$ INSTDIR
File /r video
SectionEnd
EOF
fi
cat >> $NSISFILE << EOF
2014-10-21 14:16:10 -04:00
Section "Start Menu Shortcuts" SecMenu
SetShellVarContext all
2015-01-04 20:15:19 -05:00
CreateDirectory " \$SMPROGRAMS\\ ${ PRODUCT_ID } "
CreateShortCut " \$SMPROGRAMS\\ ${ PRODUCT_ID } \\ ${ PROGRAM_NAME } ${ PROGRAM_VERSION } .lnk " " \$INSTDIR\\bin\\ ${ PRODUCT_EXE } " "" " \$INSTDIR\\bin\\ ${ PRODUCT_EXE } " 0
2014-10-21 14:16:10 -04:00
EOF
2015-01-04 20:15:19 -05:00
if test -f " $DESTDIR /debug.bat " ; then
2014-10-21 14:16:10 -04:00
cat >> $NSISFILE << EOF
2015-01-04 20:15:19 -05:00
CreateShortCut " \$SMPROGRAMS\\ ${ PRODUCT_ID } \\ ${ PROGRAM_NAME } ${ PROGRAM_VERSION } GDB.lnk " "\$INSTDIR\\debug.bat" "" "\$INSTDIR\\share\\ardour_bug.ico" 0
2014-12-24 08:33:48 -05:00
EOF
fi
if test -z " $NOVIDEOTOOLS " ; then
cat >> $NSISFILE << EOF
2015-01-04 20:15:19 -05:00
IfFileExists "\$INSTDIR\\video\\xjadeo\\xjadeo.exe" 0 +2
CreateShortCut " \$SMPROGRAMS\\ ${ PRODUCT_ID } \\Video Monitor.lnk " "\$INSTDIR\\video\\xjadeo\\xjadeo.exe" "" "\$INSTDIR\\video\\xjadeo\\xjadeo.exe" 0
2014-10-21 14:16:10 -04:00
EOF
fi
cat >> $NSISFILE << EOF
2015-01-04 20:15:19 -05:00
CreateShortCut " \$SMPROGRAMS\\ ${ PRODUCT_ID } \\Uninstall.lnk " "\$INSTDIR\\uninstall.exe" "" "\$INSTDIR\\uninstall.exe" 0
2014-10-21 14:16:10 -04:00
SectionEnd
2015-01-04 20:15:19 -05:00
LangString DESC_SecMainProg \$ { LANG_ENGLISH} " ${ PROGRAM_NAME } ${ ARDOURVERSION } \$\\r\$\\n ${ VERSIONINFO } \$\\r\$\\n ${ ARDOURDATE } "
2014-12-23 21:56:54 -05:00
EOF
if test -z " $NOVIDEOTOOLS " ; then
cat >> $NSISFILE << EOF
LangString DESC_SecVideo \$ { LANG_ENGLISH} " Video Tools\$\\r\$\\nxjadeo- ${ XJADEO_VERSION } \$\\r\$\\nharvid- ${ HARVID_VERSION } "
EOF
fi
cat >> $NSISFILE << EOF
2014-10-21 14:16:10 -04:00
LangString DESC_SecMenu \$ { LANG_ENGLISH} "Create Start-Menu Shortcuts (recommended)."
!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
2015-01-04 20:15:19 -05:00
!insertmacro MUI_DESCRIPTION_TEXT \$ { SecMainProg} \$ ( DESC_SecMainProg)
2014-12-23 21:56:54 -05:00
EOF
if test -z " $NOVIDEOTOOLS " ; then
cat >> $NSISFILE << EOF
!insertmacro MUI_DESCRIPTION_TEXT \$ { SecVideo} \$ ( DESC_SecVideo)
EOF
fi
cat >> $NSISFILE << EOF
2014-10-21 14:16:10 -04:00
!insertmacro MUI_DESCRIPTION_TEXT \$ { SecMenu} \$ ( DESC_SecMenu)
!insertmacro MUI_FUNCTION_DESCRIPTION_END
Section "Uninstall"
SetShellVarContext all
2015-01-04 20:15:19 -05:00
DeleteRegKey HKLM " Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\ ${ PRODUCT_ID } "
DeleteRegKey HKLM " Software\\ ${ PROGRAM_NAME } \\v ${ PROGRAM_VERSION } "
# XXX XXX XXX
# TODO: remove the following line before release. But for now, clean up old version agnnstic registry
DeleteRegKey HKLM " Software\\ ${ PROGRAM_NAME } "
# XXX XXX XXX
2014-10-21 14:16:10 -04:00
RMDir /r "\$INSTDIR\\bin"
RMDir /r "\$INSTDIR\\lib"
RMDir /r "\$INSTDIR\\share"
RMDir /r "\$INSTDIR\\gdb"
2014-12-23 21:56:54 -05:00
RMDir /r "\$INSTDIR\\video"
2015-01-04 20:15:19 -05:00
Delete "\$INSTDIR\\debug.bat"
2014-10-21 14:16:10 -04:00
Delete "\$INSTDIR\\uninstall.exe"
2015-01-04 20:15:19 -05:00
Delete " \$INSTDIR\\ ${ PROGRAM_NAME } ${ PROGRAM_VERSION } .lnk "
2014-10-21 14:16:10 -04:00
RMDir "\$INSTDIR"
2015-01-04 20:15:19 -05:00
Delete " \$SMPROGRAMS\\ ${ PRODUCT_ID } \\*.* "
RMDir " \$SMPROGRAMS\\ ${ PRODUCT_ID } "
2014-10-21 14:16:10 -04:00
SectionEnd
EOF
rm -f ${ OUTFILE }
echo " === OutFile: $OUTFILE "
2014-10-22 17:58:57 -04:00
if test -n " $QUICKZIP " ; then
echo " === Building Windows Installer (fast zip)"
else
2014-10-21 14:16:10 -04:00
echo " === Building Windows Installer (lzma compression takes ages)"
2014-10-22 17:58:57 -04:00
fi
time makensis -V2 $NSISFILE
2014-10-21 14:16:10 -04:00
rm -rf $DESTDIR
ls -lh " $OUTFILE "