123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697 |
- #!/bin/bash
- #
- # SynfigStudio mac package build script
- # Copyright (c) 2008-2009 Simone Karin Lehmann (GimpOSX parts)
- # Copyright (c) 2012-2013 Konstantin Dmitriev
- #
- # This package is free software; you can redistribute it and/or
- # modify it under the terms of the GNU General Public License as
- # published by the Free Software Foundation; either version 2 of
- # the License, or (at your option) any later version.
- #
- # This package 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
- # General Public License for more details.
- #
- #
- # = Usage notes =
- #
- # * You need to have XCode and git installed
- # * Builds from current repository, current revision. So you should manually checkout the desired revision to build
- # * If no repository found - then sources fetched into ~/src/synfig and the latest master branch is built
- # * Executing script without arguments makes a full clean build and produces dmg package
- # * You can pass arguments to the script to invoke particular stage.
- # Available stages: mkmacports, mkdeps, mketl, mksynfig, mksynfigstudio, mkapp, mkdmg
- # Example:
- # synfigstudio-osx-build.sh mkdeps
- # * You can pass a custom command to be invoked in the build environment.
- # Example (uninstalls glibmm package from the buildroot):
- # synfigstudio-osx-build.sh port uninstall glibmm
- # * If you suspect something is wrong with your macports installation you can always start from scratch by removing ~/src/macports dir
- # TODO: Don't build into /tmp/skl
- # TODO: Disable 32bit?
- #======= HEADER ===========
- set -e
- export RELEASE=1
- export BUILDROOT_VERSION=1
- if [ `whoami` != "root" ]; then
- echo "Please use sudo to run this script. Aborting."
- exit 1
- fi
- export SCRIPTPATH=$(cd `dirname "$0"`; pwd)
- SYNFIG_REPO_DIR=$(dirname "$SCRIPTPATH")
- SCRIPTDIR_IS_REPO=0
- if [ -e "$SYNFIG_REPO_DIR/build.conf" ]; then
- source "$SYNFIG_REPO_DIR/build.conf"
- fi
- if [ ! -z $UNIVERSAL ] && [[ ! $UNIVERSAL == 0 ]]; then
- export BUILDDIR=~/synfig-buildroot/build.u
- else
- export BUILDDIR=~/synfig-buildroot/build
- export UNIVERSAL=0
- fi
- if [ ! -z $X11 ] && [[ ! $X11 == 0 ]]; then
- export X11=1
- export BUILDDIR=${BUILDDIR}.x11
- fi
- if [ ! -z $DEBUG ] && [[ ! $DEBUG == 0 ]]; then
- echo
- echo "Debug mode: enabled"
- echo
- DEBUG='--enable-debug --enable-optimization=0'
- export BUILDDIR=${BUILDDIR}.debug
- else
- DEBUG=''
- fi
- LNKDIR=/tmp/skl/SynfigStudio
- MACPORTS=$LNKDIR/Contents/Resources
- MPSRC=MacPorts-2.3.3
- export SYNFIG_PREFIX=${MACPORTS}/synfig/
- export PATH="$MACPORTS/bin:${SYNFIG_PREFIX}/bin:$MACPORTS/sbin:$PATH"
- export SYNFIG_MODULE_LIST=${SYNFIG_PREFIX}/etc/synfig_modules.cfg
- export PKG_CONFIG_PATH=${MACPORTS}/lib/pkgconfig:${SYNFIG_PREFIX}/lib/pkgconfig$PKG_CONFIG_PATH
- export LD_LIBRARY_PATH=${MACPORTS}/lib:${SYNFIG_PREFIX}/lib:${SYNFIG_PREFIX}/lib64:$LD_LIBRARY_PATH
- #export ACLOCAL_FLAGS="-I ${SYNFIG_PREFIX}/share/aclocal -I ${MACPORTS}/share/aclocal"
- #export CPPFLAGS="-fpermissive -I${MACPORTS}/include -I${SYNFIG_PREFIX}/include"
- export CPPFLAGS="-I${MACPORTS}/include -I${SYNFIG_PREFIX}/include"
- export LDFLAGS="-L${MACPORTS}/lib -L${SYNFIG_PREFIX}/lib"
- if [[ ! $UNIVERSAL == 0 ]]; then
- export CFLAGS="-arch i386 -arch x86_64"
- export CXXFLAGS="-arch i386 -arch x86_64"
- export LDFLAGS="$LDFLAGS -arch i386 -arch x86_64"
- fi
- #======= HEADER END ===========
- prepare()
- {
- # == workarounds ==
-
- #We should do that, otherwise python won't build:
- if [ -e $MACPORTS/tmp/app ]; then
- [ ! -e $MACPORTS/tmp/app.bak ] || rm -rf $MACPORTS/tmp/app.bak
- echo "Backing up custom /Applications/MacPorts dir..."
- mv $MACPORTS/tmp/app $MACPORTS/tmp/app.bak || true
- fi
-
- # Cleanup some stuff, remaining from older installations
- rm /Library/LaunchDaemons/org.macports.rsyncd.plist || true
-
- # == symlinks ==
-
- if [ ! -e "$BUILDDIR" ]; then
- mkdir -p "$BUILDDIR"
- fi
- echo -n setting symlink to build directory...
- test -d /tmp/skl || mkdir -p /tmp/skl
- chmod a+w /tmp/skl
- test -L $LNKDIR && rm $LNKDIR
- test -L $MACPORTS && rm $MACPORTS
- mkdir -p `dirname $MACPORTS`
- ln -s "$BUILDDIR" $MACPORTS
- chmod a+w $MACPORTS
- echo
- }
- mkmacports()
- {
- # cleanup previous installation
- if [ -e "$BUILDDIR/" ]; then
- rm -rf "$BUILDDIR/"
- fi
- mkdir -p "$BUILDDIR/"
- mkdir -p ~/src
- cd ~/src
- # compile MacPorts and do a selfupdate
- if [ ! -d "$MPSRC" ]; then
- #curl -LO http://svn.macports.org/repository/macports/downloads/$MPSRC/$MPSRC.tar.bz2
- curl -LO http://distfiles.macports.org/MacPorts/$MPSRC.tar.bz2
- echo -n extracting MacPorts sources ...
- bunzip2 $MPSRC.tar.bz2
- tar -xf $MPSRC.tar
- rm $MPSRC.tar
- echo done.
- fi
- # this is the main part on which this building and packaging process relies on
- echo Compiling and updating MacPorts...
- cd $MPSRC
- ./configure --prefix $MACPORTS --with-tclpackage=$MACPORTS/share/macports/Tcl \
- --with-install-user=`id -un` \
- --with-install-group=`id -gn`
- make clean
- make -j$JOBS
- #sudo make install
- make install
- cd - > /dev/null
- export PATH="$MACPORTS/bin:$MACPORTS/sbin:$PATH"
- # give our build directory user perms so we don't need sudo in further steps. Avoid sudo whenever it's possible!
- #sudo chown -R $UID "$BUILDDIR"
- # do a selfupdate
- echo Now selfupdating MacPorts. Please wait ...
- port -d selfupdate
- # now give some hints
- echo
- echo "Yor MacPorts installation is now ready to build SynfigStudio for Mac OS X."
- }
- mkdeps()
- {
- # test if we have MacPorts installed
- if [ ! -e "$MACPORTS/bin/port" ]; then
- mkmacports
- fi
- if [ -e "$MACPORTS/bin/synfig" ]; then
- echo "=========================== !!! =========================="
- echo " Macports installation is outdated. Force rebuild..."
- echo "=========================== !!! =========================="
- sleep 10
- rm -rf "$MACPORTS"
- mkmacports
- fi
- echo $BUILDROOT_VERSION > "$MACPORTS/etc/buildroot-id"
- if [[ `cat "$MACPORTS/etc/buildroot-id"` != "${BUILDROOT_VERSION}" ]]; then
- echo "======================= !!! ======================"
- echo " Buildroot version changed. Force rebuild..."
- echo "======================= !!! ======================"
- sleep 10
- rm -rf "$MACPORTS"
- mkmacports
- fi
-
- # Don't write into /Applications/MacPorts
- [ -d $MACPORTS/tmp/app ] || mkdir -p $MACPORTS/tmp/app
- sed -i "" -e "s|/Applications/MacPorts|$MACPORTS/tmp/app|g" "$MACPORTS/etc/macports/macports.conf" || true
-
- if [[ ! $UNIVERSAL == 0 ]]; then
- if [[ $X11 == 1 ]]; then
- echo "+universal +x11 +nonfree" > $MACPORTS/etc/macports/variants.conf
- else
- echo "+universal +no_x11 +quartz -x11 +nonfree" > $MACPORTS/etc/macports/variants.conf
- fi
- else
- if [[ $X11 == 1 ]]; then
- echo "+x11 +nonfree" > $MACPORTS/etc/macports/variants.conf
- else
- echo "+no_x11 +quartz -x11 +nonfree" > $MACPORTS/etc/macports/variants.conf
- fi
- fi
-
- pushd ${SCRIPTPATH}/macports
- portindex
- popd
- echo "file://${SCRIPTPATH}/macports [nosync]" > $MACPORTS/etc/macports/sources.conf
- echo "rsync://rsync.macports.org/release/tarballs/ports.tar [default]" >> $MACPORTS/etc/macports/sources.conf
-
- # workaround the bug introduced in MacPorts 2.2.0 - https://trac.macports.org/ticket/39850
- cp -rf $MACPORTS/etc/macports/macports.conf $MACPORTS/etc/macports/macports.conf.bak
- sed '/sandbox_enable/d' $MACPORTS/etc/macports/macports.conf.bak > $MACPORTS/etc/macports/macports.conf
- echo "sandbox_enable no" >> $MACPORTS/etc/macports/macports.conf
- port selfupdate
-
- # We have to make sure python 2 is default, because some packages won't build with python 3
- port select --set python python27 || true
-
- port upgrade outdated || true
- CORE_DEPS=" \
- fontconfig \
- freetype \
- gettext \
- ImageMagick \
- libmng \
- libpng \
- libsigcxx2 \
- libtool \
- libxmlxx2 \
- mlt \
- openexr \
- pkgconfig \
- ffmpeg \
- boost \
- cairo \
- libtool"
- STUDIO_DEPS=" \
- gtkmm3 \
- python33 \
- gnome-themes-standard \
- intltool"
- port install -f $CORE_DEPS $STUDIO_DEPS
-
- # We have to make sure python 2 is default, because some packages won't build with python 3
- port select --set python python27
- # ...but we still need python3 binary available
- pushd $MACPORTS/bin/ > /dev/null
- ln -sf python3.3 python3
- popd > /dev/null
-
- cp ${SCRIPTPATH}/gtk-3.0/settings.ini ${MACPORTS}/etc/gtk-3.0/
- }
- mketl()
- {
- # building ETL
- pushd ${SYNFIG_REPO_DIR}/ETL
- rm -f aclocal.m4
- autoreconf --install --force
- make clean || true
- ./configure --prefix=${SYNFIG_PREFIX} --includedir=${SYNFIG_PREFIX}/include
- make -j$JOBS install
- popd
- }
- mksynfig()
- {
- # building synfig-core
- pushd ${SYNFIG_REPO_DIR}/synfig-core
- export CXXFLAGS="$CXXFLAGS -I${SYNFIG_PREFIX}/include/ImageMagick"
- make clean || true
- /bin/sh ./bootstrap.sh
- if [[ ! $UNIVERSAL == 0 ]]; then
- export DEPTRACK="--disable-dependency-tracking"
- fi
- /bin/sh ./configure ${DEPTRACK} --prefix=${SYNFIG_PREFIX} --includedir=${SYNFIG_PREFIX}/include --disable-static --enable-shared --with-magickpp --without-libavcodec --with-boost=${MACPORTS} ${DEBUG}
- make -j$JOBS install
- popd
- }
- mksynfigstudio()
- {
- # Copy launch script, so we can test synfigstudio without building an app package
- [ ! -e "${MACPORTS}/../MacOS" ] || rm -rf "${MACPORTS}/../MacOS"
- cp -rf $SCRIPTPATH/app-template/Contents/MacOS ${MACPORTS}/../MacOS
-
- # building synfig-studio
- pushd ${SYNFIG_REPO_DIR}/synfig-studio
- make clean || true
- CONFIGURE_PACKAGE_OPTIONS='--disable-update-mimedb'
- /bin/sh ./bootstrap.sh
- if [[ ! $UNIVERSAL == 0 ]]; then
- export DEPTRACK="--disable-dependency-tracking"
- fi
- /bin/sh ./configure ${DEPTRACK} --prefix=${SYNFIG_PREFIX} --includedir=${SYNFIG_PREFIX}/include --disable-static --enable-shared $DEBUG $CONFIGURE_PACKAGE_OPTIONS
- make -j$JOBS install
- for n in AUTHORS COPYING NEWS README
- do
- cp -f $n ${MACPORTS}
- done
-
- popd
- }
- mkapp()
- {
- VERSION=`get_version_release_string`
- echo Now trying to build your new SynfigStudio app ...
-
- DIR=`dirname "$BUILDDIR"`
- APPDIR="$DIR/SynfigStudio-new-app"
- APPCONTENTS="$APPDIR/Contents/Resources"
-
- # initial cleanup
- [ ! -e $DIR/SynfigStudio-new-app ] || rm -rf $DIR/SynfigStudio-new-app
- [ ! -e $DIR/SynfigStudio.app ] || rm -rf $DIR/SynfigStudio.app
- cp -R "$SCRIPTPATH/app-template" "$APPDIR"
- mv $APPDIR/Contents/MacOS/synfigstudio $APPDIR/Contents/MacOS/SynfigStudio || true
- #mkdir -p "$APPCONTENTS/bin"
- #cp -R "$MACPORTS/bin/ffmpeg" "$APPCONTENTS/bin"
- #"$SCRIPTPATH/macos-gather-deps.sh" "$APPCONTENTS/bin/ffmpeg"
- #exit 0
-
- #cp -R "$MACPORTS/synfig/bin/synfig" "$APPCONTENTS/bin"
- mkdir -p "$APPCONTENTS/etc"
- mkdir -p "$APPCONTENTS/share"
-
- # Synfig
- "$SCRIPTPATH/osx-relocate-binary.sh" "$MACPORTS/synfig/bin/synfig" "$MACPORTS" "$APPCONTENTS"
- "$SCRIPTPATH/osx-relocate-binary.sh" "$MACPORTS/synfig/bin/synfigstudio" "$MACPORTS" "$APPCONTENTS"
- pushd "$MACPORTS/synfig/lib/synfig/modules/"
- for FILE in `ls -1 *.so`; do
- "$SCRIPTPATH/osx-relocate-binary.sh" "$MACPORTS/synfig/lib/synfig/modules/$FILE" "$MACPORTS" "$APPCONTENTS"
- done
- cp -R $MACPORTS/synfig/lib/synfig/modules/*.la "$APPCONTENTS/synfig/lib/synfig/modules/"
- popd
- cp -R "$MACPORTS/synfig/etc" "$APPCONTENTS/synfig/"
- cp -R "$MACPORTS/synfig/share" "$APPCONTENTS/synfig/"
-
- "$SCRIPTPATH/osx-relocate-binary.sh" "$MACPORTS/bin/ffmpeg" "$MACPORTS" "$APPCONTENTS"
- "$SCRIPTPATH/osx-relocate-binary.sh" "$MACPORTS/bin/ffprobe" "$MACPORTS" "$APPCONTENTS"
-
- "$SCRIPTPATH/osx-relocate-binary.sh" "$MACPORTS/bin/encodedv" "$MACPORTS" "$APPCONTENTS"
- "$SCRIPTPATH/osx-relocate-binary.sh" "$MACPORTS/bin/sox" "$MACPORTS" "$APPCONTENTS"
-
- # Gtk3
- "$SCRIPTPATH/osx-relocate-binary.sh" "$MACPORTS/bin/gdk-pixbuf-query-loaders" "$MACPORTS" "$APPCONTENTS"
- "$SCRIPTPATH/osx-relocate-binary.sh" "$MACPORTS/bin/gdk-pixbuf-pixdata" "$MACPORTS" "$APPCONTENTS"
- "$SCRIPTPATH/osx-relocate-binary.sh" "$MACPORTS/bin/gtk3-demo" "$MACPORTS" "$APPCONTENTS"
- pushd "$MACPORTS/lib/gdk-pixbuf-2.0/2.10.0/loaders/"
- for FILE in `ls -1 *.so`; do
- "$SCRIPTPATH/osx-relocate-binary.sh" "$MACPORTS/lib/gdk-pixbuf-2.0/2.10.0/loaders/$FILE" "$MACPORTS" "$APPCONTENTS"
- done
- popd
- pushd "$MACPORTS/lib/gtk-3.0/3.0.0/immodules/"
- for FILE in `ls -1 *.so`; do
- "$SCRIPTPATH/osx-relocate-binary.sh" "$MACPORTS/lib/gtk-3.0/3.0.0/immodules/$FILE" "$MACPORTS" "$APPCONTENTS"
- done
- popd
- pushd "$MACPORTS/lib/gtk-3.0/3.0.0/printbackends/"
- for FILE in `ls -1 *.so`; do
- "$SCRIPTPATH/osx-relocate-binary.sh" "$MACPORTS/lib/gtk-3.0/3.0.0/printbackends/$FILE" "$MACPORTS" "$APPCONTENTS"
- done
- popd
- pushd "$MACPORTS/lib/cairo/"
- for FILE in `ls -1 *.so`; do
- "$SCRIPTPATH/osx-relocate-binary.sh" "$MACPORTS/lib/cairo/$FILE" "$MACPORTS" "$APPCONTENTS"
- done
- cp -R $MACPORTS/lib/cairo/*.la "$APPCONTENTS/lib/cairo/"
- popd
- #pushd "$MACPORTS/lib/engines/"
- #for FILE in `ls -1 *.so`; do
- # "$SCRIPTPATH/osx-relocate-binary.sh" "$MACPORTS/lib/engines/$FILE" "$MACPORTS" "$APPCONTENTS"
- #done
- #popd
- cp -R "$MACPORTS/etc/gtk-3.0" "$APPCONTENTS/etc/"
- cp -R "$MACPORTS/lib/girepository-1.0" "$APPCONTENTS/lib/"
- mkdir -p "$APPCONTENTS/share/glib-2.0/"
- cp -R "$MACPORTS/share/glib-2.0/schemas" "$APPCONTENTS/share/glib-2.0"
-
- # Python 3
- "$SCRIPTPATH/osx-relocate-binary.sh" "$MACPORTS/bin/python3" "$MACPORTS" "$APPCONTENTS"
- "$SCRIPTPATH/osx-relocate-binary.sh" "$MACPORTS/Library/Frameworks/Python.framework/Versions/3.3/Resources/Python.app/Contents/MacOS/Python" "$MACPORTS" "$APPCONTENTS"
- mkdir -p "$APPCONTENTS/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/"
- rsync -av --exclude "__pycache__" "$MACPORTS/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/" "$APPCONTENTS/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/"
- #cp -R "$MACPORTS/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3" "$APPCONTENTS/Library/Frameworks/Python.framework/Versions/3.3/lib/"
- #find $APPCONTENTS/Library/Frameworks/Python.framework/Versions/3.3/lib -name "__pycache__" -exec rm -rf {} \;
-
- # MLT
- "$SCRIPTPATH/osx-relocate-binary.sh" "$MACPORTS/bin/melt" "$MACPORTS" "$APPCONTENTS"
- pushd "$MACPORTS/lib/mlt/"
- for FILE in `ls -1 *.dylib`; do
- "$SCRIPTPATH/osx-relocate-binary.sh" "$MACPORTS/lib/mlt/$FILE" "$MACPORTS" "$APPCONTENTS"
- done
- popd
- cp -R "$MACPORTS/share/mlt" "$APPCONTENTS/share/"
-
- # ImageMagick
- "$SCRIPTPATH/osx-relocate-binary.sh" "$MACPORTS/bin/animate" "$MACPORTS" "$APPCONTENTS"
- "$SCRIPTPATH/osx-relocate-binary.sh" "$MACPORTS/bin/composite" "$MACPORTS" "$APPCONTENTS"
- "$SCRIPTPATH/osx-relocate-binary.sh" "$MACPORTS/bin/convert" "$MACPORTS" "$APPCONTENTS"
- pushd "$MACPORTS/lib/ImageMagick-6.9.2/modules-Q16/coders/"
- for FILE in `ls -1 *.so`; do
- "$SCRIPTPATH/osx-relocate-binary.sh" "$MACPORTS/lib/ImageMagick-6.9.2/modules-Q16/coders/$FILE" "$MACPORTS" "$APPCONTENTS"
- done
- cp -R $MACPORTS/lib/ImageMagick-6.9.2/modules-Q16/coders/*.la "$APPCONTENTS/lib/ImageMagick-6.9.2/modules-Q16/coders/"
- popd
- pushd "$MACPORTS/lib/ImageMagick-6.9.2/modules-Q16/filters/"
- for FILE in `ls -1 *.so`; do
- "$SCRIPTPATH/osx-relocate-binary.sh" "$MACPORTS/lib/ImageMagick-6.9.2/modules-Q16/filters/$FILE" "$MACPORTS" "$APPCONTENTS"
- done
- cp -R $MACPORTS/lib/ImageMagick-6.9.2/modules-Q16/filters/*.la "$APPCONTENTS/lib/ImageMagick-6.9.2/modules-Q16/filters/"
- popd
- cp -R "$MACPORTS/lib/ImageMagick-6.9.2/config-Q16" "$APPCONTENTS/lib/ImageMagick-6.9.2/"
- cp -R "$MACPORTS/etc/ImageMagick-6" "$APPCONTENTS/etc/"
-
- cp -R "$MACPORTS/share/icons" "$APPCONTENTS/share/"
- cp -R "$MACPORTS/share/themes" "$APPCONTENTS/share/"
- cp -R "$MACPORTS/share/mime" "$APPCONTENTS/share/"
-
- # app bundle files
- echo "*** Please do _NOT_ delete this file. The file script depends on it. ***" > "$APPCONTENTS/v$VERSION"
- sed -i "" -e "s/_VERSION_/$VERSION/g" "$APPDIR/Contents/MacOS/SynfigStudio"
- sed -i "" -e "s/_VERSION_/$VERSION/g" "$APPDIR/Contents/Info.plist"
- # save information about the ports which make up this build
- echo "Synfig Studio $VERSION for Mac OS X $OSNAME" > "$APPCONTENTS/build-info.txt"
- date >> "$APPCONTENTS/build-info.txt"
- port installed >> "$APPCONTENTS/build-info.txt"
- sed -i "" -e "s/are currently installed:/were used to build this package:/g" "$APPCONTENTS/build-info.txt"
- mv "$APPDIR" "$DIR/SynfigStudio.app"
- echo
- echo "Your new Synfig Studio app bundle should now be ready to run."
- echo
- }
- mkdmg()
- {
- cd ~
-
- # get OS major version
- OSXVER=`uname -r | cut -f 1 -d '.'`
- #VERSION=`synfig --version 2>&1 | cut -d " " -f 2`
- VERSION=`get_version_release_string`
- #echo Synfig version is: $VERSION
- ARCH=`uname -m`
- if [[ ! $UNIVERSAL == 0 ]]; then
- export FINAL_FILENAME=synfigstudio-"$VERSION"
- else
- export FINAL_FILENAME=synfigstudio-"$VERSION"."$ARCH"
- fi
-
- VOLNAME="SynfigStudio"
- TRANSITORY_FILENAME="synfig-wla.sparseimage"
-
- APPDIR=`dirname "$BUILDDIR"`/SynfigStudio.app
-
- /usr/bin/hdiutil detach /Volumes/"$VOLNAME" || true
- echo "Creating and attaching disk image..."
- [ ! -e "$TRANSITORY_FILENAME" ] || rm -rf "$TRANSITORY_FILENAME"
- /usr/bin/hdiutil create -type SPARSE -size 700m -fs "HFS+" -volname "$VOLNAME" -attach "$TRANSITORY_FILENAME"
- echo "Copying files to disk image..."
- cp -R $APPDIR /Volumes/"$VOLNAME"/SynfigStudio.app
- cp -R ${SYNFIG_REPO_DIR}/synfig-studio/COPYING /Volumes/"$VOLNAME"/LICENSE.txt
- mv /Volumes/"$VOLNAME"/SynfigStudio.app/Contents/MacOS/synfigstudio /Volumes/"$VOLNAME"/SynfigStudio.app/Contents/MacOS/SynfigStudio || true
- # open the window so that the icon database is generated
- open /Volumes/"$VOLNAME" || true
- sleep 3
- echo "Detaching disk image..."
- /usr/bin/hdiutil detach /Volumes/"$VOLNAME"
- echo "Compressing disk image..."
- [ ! -e "$FINAL_FILENAME" ] || rm -rf "$FINAL_FILENAME"
- /usr/bin/hdiutil convert -imagekey zlib-level=9 -format UDBZ "$TRANSITORY_FILENAME" -o ./"$FINAL_FILENAME"
- echo "Removing uncompressed transitory dmg..."
- /bin/rm -f "$TRANSITORY_FILENAME"
- echo "Done!"
- }
- get_version_release_string()
- {
- pushd "$SYNFIG_REPO_DIR" > /dev/null
- VERSION=`cat synfig-core/configure.ac |egrep "AC_INIT\(\[Synfig Core\],"| sed "s|.*Core\],\[||" | sed "s|\],\[.*||"`
- #if [ -z $BREED ]; then
- # BREED="`git branch -a --no-color --contains HEAD | sed -e s/\*\ // | sed -e s/\(no\ branch\)// | tr '\n' ' ' | tr -s ' ' | sed s/^' '//`"
- # if ( echo $BREED | egrep origin/master > /dev/null ); then
- # #give a priority to master branch
- # BREED='master'
- # else
- # BREED=`echo $BREED | cut -d ' ' -f 1`
- # BREED=${BREED##*/}
- # fi
- # BREED=${BREED%_master}
- #fi
- if [[ ${VERSION##*-RC} != ${VERSION} ]]; then
- #if [[ $BREED == 'master' ]]; then
- BREED=rc${VERSION##*-RC}
- #else
- # BREED=rc${VERSION##*-RC}.$BREED
- #fi
- VERSION=${VERSION%%-*}
- fi
- if [ ! -z $BREED ]; then
- BREED=`echo $BREED | tr _ . | tr - .` # No "-" or "_" characters, becuse RPM and DEB complain
- BREED=.$BREED
- fi
- REVISION=`git show --pretty=format:%ci HEAD | head -c 10 | tr -d '-'`
- echo "$VERSION-$REVISION$BREED"
- #echo "$VERSION-$REVISION$BREED.$RELEASE"
- popd >/dev/null
- }
- mkall()
- {
- mkdeps
- # cleanup previous synfig installation if any
- [ ! -d "$SYNFIG_PREFIX" ] || rm -rf "$SYNFIG_PREFIX"
- mketl
- mksynfig
- mksynfigstudio
- #port install synfigstudio || true
- #synfig -q installer_logo.sif -o installer_logo.png --time 0
- #synfig(294) [23:51:01] info: Loading modules from /tmp/skl/#SynfigStudio.app/Contents/Resources/etc/synfig_modules.cfg
- #synfig: warning: Unable to find module "mod_magickpp" (file not found)
- #synfig: warning: Unable to find module "mod_libavcodec" (file not found)
- #synfig(294) [23:51:01] error: Standard Exception: basic_string::_S_construct NULL not valid
- #Unable to load 'installer_logo.sif'.
- #Throwing out job...
- #Nothing to do!
- #Workaround:
- #[ ! -e ~/src/macports/synfig-build ] || rm -rf ~/src/macports/synfig-build
- #cd $MACPORTS/var/macports/build/
- #DIRPATH=`ls`
- #cd -
- #VERSION=`synfig --version 2>&1 | cut -d " " -f 2`
- #cp -R "$MACPORTS/var/macports/build/$DIRPATH/synfigstudio/work/synfigstudio-$VERSION" ~/src/macports/synfig-build
- #cd ~/src/macports/synfig-build/images
- #make
- #cd -
- #cp -R ~/src/macports/synfig-build/images/* #"$MACPORTS/var/macports/build/$DIRPATH/synfigstudio/work/synfigstudio-$VERSION/images"
- #Workaround end
- #port install synfigstudio
- mkapp
- mkdmg
- }
- do_cleanup()
- {
- #restore Applications/MacPorts dir
- if [ -e $MACPORTS/tmp/app.bak ]; then
- echo "Restoring custom /Applications/MacPorts dir."
- rm -rf $MACPORTS/tmp/app || true
- mv $MACPORTS/tmp/app.bak $MACPORTS/tmp/app
- fi
- rm -rf $LNKDIR || true
- }
- ###=================================== MAIN ======================================
- main() # dummy for navigation
- {
- true
- }
- #Init traps
- trap do_cleanup INT
- # number of jobs
- export JOBS=`sysctl hw.ncpu | cut -f 2 -d " "`
- echo "Detected processors count: $JOBS"
- # get OS X version. 8=Tiger, 9=Leopard, 10=Snowleopard
- export OS=`uname -r | cut -d "." -f1`
- if [ $OS -eq 9 -o $OS -eq 10 ]; then
- GTKFONT=9.8
- THEME=Leopard
- else
- GTKFONT=12.5
- THEME=Tiger
- fi
- # set OS code name
- OSNAME=$THEME
- if [ $OS -eq 10 ]; then
- OSNAME=Snowleopard
- fi
- if [ ! $OS -eq 13 ]; then # if not Mountain Lion then set compatibility mode
- export MACOSX_DEPLOYMENT_TARGET=10.5
- echo "Enabling binary compatibility mode: MACOSX_DEPLOYMENT_TARGET=10.5"
- fi
- prepare
- # Fetch sources
- #port install python33
- #port select --set python python33
- #port install git-core
- if ! ( which git ); then
- echo "ERROR: No git found. Please install git from http://code.google.com/p/git-osx-installer/"
- exit 1
- fi
- #detecting repo
- pushd $SCRIPTPATH >/dev/null
- if git rev-parse --git-dir >/dev/null; then
- SYNFIG_REPO_DIR=$(dirname `git rev-parse --git-dir`)
- SCRIPTDIR_IS_REPO=1
- fi
- popd >/dev/null
- if [ ! -e ${SYNFIG_REPO_DIR} ]; then
- pushd `dirname "${SYNFIG_REPO_DIR}"`
- git clone git://github.com/synfig/synfig.git
- popd
- fi
- VERSION=`get_version_release_string`
- pushd ${SYNFIG_REPO_DIR} >/dev/null
- if [[ $WORKDIR_IS_REPO == 0 ]]; then
- git fetch
- git reset --hard HEAD
- SELECTEDREVISION=origin/master
- git checkout $SELECTEDREVISION
- fi
- echo
- echo
- echo "BUILDING synfigstudio-$VERSION"
- echo
- echo
- #sleep 5
- popd > /dev/null
- if [ -z $1 ]; then
- mkall
- else
- echo "Executing custom user command..."
- $@
- fi
- do_cleanup
|