openscad/scripts/release-common.sh

284 lines
7.9 KiB
Bash
Raw Normal View History

2012-02-05 01:14:35 +04:00
#!/bin/bash
#
# This script creates a binary release of OpenSCAD.
2011-10-16 11:39:17 +04:00
# This should work under Mac OS X, Windows (msys), and Linux cross-compiling
2012-08-04 21:22:40 +04:00
# for windows using mingw-cross-env (use like: OSTYPE=mingw-cross-env release-common.sh).
2011-10-16 11:39:17 +04:00
# Linux support pending.
# The script will create a file called openscad-<versionstring>.zip
# in the current directory (or in the $DEPLOYDIR of a mingw cross build)
2012-08-04 21:22:40 +04:00
#
# Usage: release-common.sh [-v <versionstring>] [-c]
# -v Version string (e.g. -v 2010.01)
# -c Build with commit info
#
# If no version string is given, todays date will be used (YYYY-MM-DD)
# If no make target is given, release will be used on Windows, none one Mac OS X
#
# The commit info will extracted from git and be passed to qmake as OPENSCAD_COMMIT
# to identify a build in the about box.
printUsage()
{
echo "Usage: $0 -v <versionstring> -c
echo
echo " Example: $0 -v 2010.01
}
OPENSCADDIR=$PWD
if [ ! -f $OPENSCADDIR/openscad.pro ]; then
echo "Must be run from the OpenSCAD source root directory"
exit 1
fi
2012-02-05 01:14:35 +04:00
if [[ "$OSTYPE" =~ "darwin" ]]; then
OS=MACOSX
elif [[ $OSTYPE == "msys" ]]; then
OS=WIN
2012-02-05 01:14:35 +04:00
elif [[ $OSTYPE == "linux-gnu" ]]; then
OS=LINUX
if [[ `uname -m` == "x86_64" ]]; then
ARCH=64
else
ARCH=32
fi
echo "Detected ARCH: $ARCH"
elif [[ $OSTYPE == "mingw-cross-env" ]]; then
OS=LINXWIN
fi
echo "Detected OS: $OS"
while getopts 'v:c' c
do
case $c in
v) VERSION=$OPTARG;;
c) OPENSCAD_COMMIT=`git log -1 --pretty=format:"%h"`
esac
done
if test -z "$VERSION"; then
VERSION=`date "+%Y.%m.%d"`
fi
2012-08-05 05:22:28 +04:00
echo "Checking pre-requisites..."
case $OS in
LINXWIN)
MAKENSIS=
if [ "`command -v makensis`" ]; then
MAKENSIS=makensis
elif [ "`command -v i686-pc-mingw32-makensis`" ]; then
MAKENSIS=i686-pc-mingw32-makensis
else
echo "makensis not found. please install nsis"
exit 1
fi
2012-08-05 05:22:28 +04:00
echo NSIS makensis found: $MAKENSIS
;;
esac
if [ ! -e $OPENSCADDIR/libraries/MCAD/__init__.py ]; then
echo "Downloading MCAD"
git submodule init
git submodule update
2012-08-05 05:22:28 +04:00
else
echo "MCAD found:" $OPENSCADDIR/libraries/MCAD
fi
echo "Building openscad-$VERSION $CONFIGURATION..."
case $OS in
2012-02-05 01:14:35 +04:00
LINUX|MACOSX)
CONFIG=deploy
TARGET=
;;
WIN)
unset CONFIG
export QTDIR=/c/devmingw/qt2009.03
export QTMAKESPEC=win32-g++
export PATH=$PATH:/c/devmingw/qt2009.03/bin:/c/devmingw/qt2009.03/qt/bin
ZIP="/c/Program Files/7-Zip/7z.exe"
ZIPARGS="a -tzip"
TARGET=release
;;
2011-10-16 11:39:17 +04:00
LINXWIN)
unset CONFIG
. ./scripts/setenv-mingw-xbuild.sh
2011-10-16 11:39:17 +04:00
TARGET=release
2011-11-07 05:06:50 +04:00
ZIP="zip"
ZIPARGS="-r"
2011-10-16 11:39:17 +04:00
;;
esac
2011-10-16 11:39:17 +04:00
case $OS in
LINXWIN)
cd $DEPLOYDIR && i686-pc-mingw32-qmake VERSION=$VERSION OPENSCAD_COMMIT=$OPENSCAD_COMMIT CONFIG+=$CONFIG CONFIG+=mingw-cross-env CONFIG-=debug ../openscad.pro
cd $OPENSCADDIR
2011-10-16 11:39:17 +04:00
;;
*)
qmake VERSION=$VERSION OPENSCAD_COMMIT=$OPENSCAD_COMMIT CONFIG+=$CONFIG CONFIG-=debug openscad.pro
2011-10-16 11:39:17 +04:00
;;
esac
case $OS in
LINXWIN)
2012-08-04 21:57:19 +04:00
cd $DEPLOYDIR && make -s clean
cd $OPENSCADDIR
;;
*)
make -s clean
;;
esac
case $OS in
MACOSX)
rm -rf OpenSCAD.app
;;
WIN)
2012-02-05 01:14:35 +04:00
#if the following files are missing their tried removal stops the build process on msys
touch -t 200012121010 parser_yacc.h parser_yacc.cpp lexer_lex.cpp
;;
esac
case $OS in
LINXWIN)
2012-08-05 05:59:22 +04:00
# make -jx sometimes has problems with parser_yacc
cd $DEPLOYDIR && make $TARGET
cd $OPENSCADDIR
;;
*)
make -j2 $TARGET
;;
esac
if [[ $? != 0 ]]; then
echo "Error building OpenSCAD. Aborting."
exit 1
fi
echo "Creating directory structure..."
case $OS in
MACOSX)
EXAMPLESDIR=OpenSCAD.app/Contents/Resources/examples
2011-09-08 05:27:18 +04:00
LIBRARYDIR=OpenSCAD.app/Contents/Resources/libraries
;;
LINXWIN)
EXAMPLESDIR=$DEPLOYDIR/openscad-$VERSION/examples/
LIBRARYDIR=$DEPLOYDIR/openscad-$VERSION/libraries/
rm -rf $DEPLOYDIR/openscad-$VERSION
mkdir $DEPLOYDIR/openscad-$VERSION
;;
*)
EXAMPLESDIR=openscad-$VERSION/examples/
2011-09-08 05:27:18 +04:00
LIBRARYDIR=openscad-$VERSION/libraries/
rm -rf openscad-$VERSION
mkdir openscad-$VERSION
;;
esac
2011-09-08 05:27:18 +04:00
if [ -n $EXAMPLESDIR ]; then
echo $EXAMPLESDIR
mkdir -p $EXAMPLESDIR
cp examples/* $EXAMPLESDIR
chmod -R 644 $EXAMPLESDIR/*
fi
if [ -n $LIBRARYDIR ]; then
echo $LIBRARYDIR
mkdir -p $LIBRARYDIR
# exclude the .git stuff from MCAD which is a git submodule.
# tar is a relatively portable way to do exclusion
rm -f libraries.tar
tar cf libraries.tar --exclude=.git* libraries
cd $LIBRARYDIR/.. && tar xf $OPENSCADDIR/libraries.tar && cd $OPENSCADDIR
rm -f libraries.tar
2011-09-08 05:27:18 +04:00
chmod -R u=rwx,go=r,+X $LIBRARYDIR/*
fi
echo "Creating archive.."
case $OS in
MACOSX)
macdeployqt OpenSCAD.app -dmg -no-strip
mv OpenSCAD.dmg OpenSCAD-$VERSION.dmg
hdiutil internet-enable -yes -quiet OpenSCAD-$VERSION.dmg
echo "Binary created: OpenSCAD-$VERSION.dmg"
;;
WIN)
#package
cp win32deps/* openscad-$VERSION
cp $TARGET/openscad.exe openscad-$VERSION
rm -f openscad-$VERSION.zip
"$ZIP" $ZIPARGS openscad-$VERSION.zip openscad-$VERSION
rm -rf openscad-$VERSION
echo "Binary created: openscad-$VERSION.zip"
;;
2011-10-16 11:39:17 +04:00
LINXWIN)
#package
echo "Creating binary package"
cd $DEPLOYDIR
2011-10-16 11:39:17 +04:00
cp $TARGET/openscad.exe openscad-$VERSION
rm -f OpenSCAD-$VERSION.zip
"$ZIP" $ZIPARGS OpenSCAD-$VERSION.zip openscad-$VERSION
cd $OPENSCADDIR
echo "Binary package created"
echo "Creating installer"
2012-08-05 05:59:22 +04:00
echo "Copying NSIS files to $DEPLOYDIR/openscad-$VERSION"
cp ./scripts/installer.nsi $DEPLOYDIR/openscad-$VERSION
cp ./scripts/mingw-file-association.nsh $DEPLOYDIR/openscad-$VERSION
cd $DEPLOYDIR/openscad-$VERSION
NSISDEBUG=-V2
# NSISDEBUG= # leave blank for full log
2012-08-05 05:59:22 +04:00
echo $MAKENSIS $NSISDEBUG installer.nsi
$MAKENSIS $NSISDEBUG installer.nsi
cp $DEPLOYDIR/openscad-$VERSION/openscad_setup.exe $DEPLOYDIR/OpenSCAD-$VERSION-Installer.exe
2012-08-05 05:59:22 +04:00
cd $OPENSCADDIR
2012-08-05 05:59:22 +04:00
BINFILE=$DEPLOYDIR/OpenSCAD-$VERSION.zip
INSTFILE=$DEPLOYDIR/OpenSCAD-$VERSION-Installer.exe
if [ -e $BINFILE ]; then
if [ -e $INSTFILE ]; then
echo
echo "Binary created:" $BINFILE
echo "Installer created:" $INSTFILE
echo
else
echo "Build failed. Cannot find" $INSTFILE
exit 1
fi
else
echo "Build failed. Cannot find" $BINFILE
exit 1
fi
2011-10-16 11:39:17 +04:00
;;
2012-02-05 01:14:35 +04:00
LINUX)
# Do stuff from release-linux.sh
mkdir openscad-$VERSION/bin
mkdir -p openscad-$VERSION/lib/openscad
cp scripts/openscad-linux openscad-$VERSION/bin/openscad
cp openscad openscad-$VERSION/lib/openscad/
if [[ $ARCH == 64 ]]; then
gcc -o chrpath_linux -DSIZEOF_VOID_P=8 scripts/chrpath_linux.c
else
gcc -o chrpath_linux -DSIZEOF_VOID_P=4 scripts/chrpath_linux.c
fi
./chrpath_linux -d openscad-$VERSION/lib/openscad/openscad
ldd openscad | sed -re 's,.* => ,,; s,[\t ].*,,;' -e '/Qt|boost/ { p; d; };' \
-e '/lib(icu.*|stdc.*|audio|CGAL|GLEW|opencsg|png|gmp|gmpxx|mpfr)\.so/ { p; d; };' \
-e 'd;' | xargs cp -vt openscad-$VERSION/lib/openscad/
strip openscad-$VERSION/lib/openscad/*
cp scripts/installer-linux.sh openscad-$VERSION/install.sh
chmod 755 -R openscad-$VERSION/
PACKAGEFILE=openscad-$VERSION.x86-$ARCH.tar.gz
tar cz openscad-$VERSION > $PACKAGEFILE
echo
echo "Binary created:" $PACKAGEFILE
echo
2012-02-05 01:14:35 +04:00
;;
esac