2012-02-05 01:14:35 +04:00
|
|
|
#!/bin/bash
|
2010-01-16 04:00:00 +03:00
|
|
|
#
|
2012-12-03 11:47:54 +04:00
|
|
|
# This script creates a binary release of OpenSCAD. This should work
|
2012-12-30 03:41:13 +04:00
|
|
|
# under Mac OS X, Linux 32, Linux 64, and Linux->Win32 MXE cross-build.
|
|
|
|
# Windows under msys has not been tested recently.
|
2012-08-04 21:22:40 +04:00
|
|
|
#
|
2012-12-03 11:47:54 +04:00
|
|
|
# The script will create a file called openscad-<versionstring>.<extension> in
|
|
|
|
# the current directory (or under ./mingw32)
|
|
|
|
#
|
|
|
|
# Usage: release-common.sh [-v <versionstring>] [-c] [-x32]
|
|
|
|
# -v Version string (e.g. -v 2010.01)
|
|
|
|
# -c Build with commit info
|
|
|
|
# -mingw32 Cross-compile for win32 using MXE
|
2010-01-16 04:00:00 +03:00
|
|
|
#
|
|
|
|
# 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
|
|
|
|
#
|
2012-01-14 20:37:34 +04:00
|
|
|
# The commit info will extracted from git and be passed to qmake as OPENSCAD_COMMIT
|
|
|
|
# to identify a build in the about box.
|
2012-12-03 12:08:11 +04:00
|
|
|
#
|
2012-12-30 03:41:13 +04:00
|
|
|
# The mingw32 cross compile depends on the MXE cross-build tools. Please
|
|
|
|
# see the README.md file on how to install these dependencies.
|
2010-01-16 04:00:00 +03:00
|
|
|
|
|
|
|
printUsage()
|
|
|
|
{
|
2012-12-03 12:08:11 +04:00
|
|
|
echo "Usage: $0 -v <versionstring> -c -mingw32
|
2010-01-16 04:00:00 +03:00
|
|
|
echo
|
|
|
|
echo " Example: $0 -v 2010.01
|
|
|
|
}
|
|
|
|
|
2012-08-03 06:52:47 +04:00
|
|
|
OPENSCADDIR=$PWD
|
|
|
|
if [ ! -f $OPENSCADDIR/openscad.pro ]; then
|
|
|
|
echo "Must be run from the OpenSCAD source root directory"
|
2012-08-05 02:18:36 +04:00
|
|
|
exit 1
|
2012-08-03 06:52:47 +04:00
|
|
|
fi
|
|
|
|
|
2012-02-05 01:14:35 +04:00
|
|
|
if [[ "$OSTYPE" =~ "darwin" ]]; then
|
2010-01-16 04:00:00 +03:00
|
|
|
OS=MACOSX
|
2010-01-16 04:03:42 +03:00
|
|
|
elif [[ $OSTYPE == "msys" ]]; then
|
2010-01-16 04:00:00 +03:00
|
|
|
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"
|
2012-12-03 11:47:54 +04:00
|
|
|
fi
|
|
|
|
|
|
|
|
if [ "`echo $* | grep mingw32`" ]; then
|
2012-02-05 01:14:35 +04:00
|
|
|
OS=LINXWIN
|
2010-01-16 04:00:00 +03:00
|
|
|
fi
|
|
|
|
|
2012-12-03 11:47:54 +04:00
|
|
|
if [ $OS ]; then
|
|
|
|
echo "Detected OS: $OS"
|
|
|
|
else
|
|
|
|
echo "Error: Couldn't detect OSTYPE"
|
|
|
|
exit
|
|
|
|
fi
|
2010-01-16 04:00:00 +03:00
|
|
|
|
2012-01-14 20:37:34 +04:00
|
|
|
while getopts 'v:c' c
|
2010-01-16 04:00:00 +03:00
|
|
|
do
|
|
|
|
case $c in
|
|
|
|
v) VERSION=$OPTARG;;
|
2012-01-14 20:37:34 +04:00
|
|
|
c) OPENSCAD_COMMIT=`git log -1 --pretty=format:"%h"`
|
2010-01-16 04:00:00 +03:00
|
|
|
esac
|
|
|
|
done
|
|
|
|
|
|
|
|
if test -z "$VERSION"; then
|
|
|
|
VERSION=`date "+%Y.%m.%d"`
|
|
|
|
fi
|
|
|
|
|
2012-08-05 04:47:36 +04:00
|
|
|
|
2012-08-05 05:22:28 +04:00
|
|
|
echo "Checking pre-requisites..."
|
2012-08-05 04:47:36 +04:00
|
|
|
|
|
|
|
case $OS in
|
|
|
|
LINXWIN)
|
|
|
|
MAKENSIS=
|
|
|
|
|
2012-08-05 05:04:40 +04:00
|
|
|
if [ "`command -v makensis`" ]; then
|
2012-08-05 04:47:36 +04:00
|
|
|
MAKENSIS=makensis
|
2012-08-05 05:04:40 +04:00
|
|
|
elif [ "`command -v i686-pc-mingw32-makensis`" ]; then
|
2012-08-05 04:47:36 +04:00
|
|
|
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
|
2012-08-05 04:47:36 +04:00
|
|
|
;;
|
|
|
|
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
|
2012-08-05 04:47:36 +04:00
|
|
|
fi
|
|
|
|
|
2012-08-05 07:01:52 +04:00
|
|
|
if [ -d .git ]; then
|
|
|
|
git submodule update
|
|
|
|
fi
|
2012-08-05 04:47:36 +04:00
|
|
|
|
2010-01-16 04:00:00 +03:00
|
|
|
echo "Building openscad-$VERSION $CONFIGURATION..."
|
|
|
|
|
|
|
|
case $OS in
|
2012-02-05 01:14:35 +04:00
|
|
|
LINUX|MACOSX)
|
2010-05-07 20:24:26 +04:00
|
|
|
CONFIG=deploy
|
2010-01-16 04:00:00 +03:00
|
|
|
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
|
2012-08-03 06:52:47 +04:00
|
|
|
. ./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
|
|
|
|
|
2012-08-03 06:52:47 +04:00
|
|
|
|
2011-10-16 11:39:17 +04:00
|
|
|
case $OS in
|
|
|
|
LINXWIN)
|
2012-08-03 06:52:47 +04:00
|
|
|
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
|
|
|
;;
|
|
|
|
*)
|
2012-01-14 20:37:34 +04:00
|
|
|
qmake VERSION=$VERSION OPENSCAD_COMMIT=$OPENSCAD_COMMIT CONFIG+=$CONFIG CONFIG-=debug openscad.pro
|
2011-10-16 11:39:17 +04:00
|
|
|
;;
|
2010-01-16 04:00:00 +03:00
|
|
|
esac
|
|
|
|
|
2012-08-03 06:52:47 +04:00
|
|
|
case $OS in
|
|
|
|
LINXWIN)
|
2012-08-04 21:57:19 +04:00
|
|
|
cd $DEPLOYDIR && make -s clean
|
2012-08-03 06:52:47 +04:00
|
|
|
cd $OPENSCADDIR
|
|
|
|
;;
|
|
|
|
*)
|
2012-08-04 21:54:12 +04:00
|
|
|
make -s clean
|
2012-08-03 06:52:47 +04:00
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
2010-01-16 04:54:16 +03:00
|
|
|
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
|
2010-01-16 04:54:16 +03:00
|
|
|
touch -t 200012121010 parser_yacc.h parser_yacc.cpp lexer_lex.cpp
|
|
|
|
;;
|
|
|
|
esac
|
2010-01-16 04:00:00 +03:00
|
|
|
|
2012-12-03 11:47:54 +04:00
|
|
|
if [ ! $NUMCPU ]; then
|
|
|
|
echo "note: you can 'export NUMCPU=x' for multi-core compiles (x=number)";
|
|
|
|
NUMCPU=2
|
|
|
|
fi
|
|
|
|
|
2012-08-03 06:52:47 +04:00
|
|
|
case $OS in
|
|
|
|
LINXWIN)
|
2012-12-03 11:47:54 +04:00
|
|
|
# dont use paralell builds, it can error-out on parser_yacc.
|
2012-08-03 06:52:47 +04:00
|
|
|
cd $DEPLOYDIR && make $TARGET
|
|
|
|
cd $OPENSCADDIR
|
|
|
|
;;
|
|
|
|
*)
|
2012-12-03 11:47:54 +04:00
|
|
|
make -j$NUMCPU $TARGET
|
2012-08-03 06:52:47 +04:00
|
|
|
;;
|
|
|
|
esac
|
2010-01-16 04:00:00 +03:00
|
|
|
|
2010-01-30 20:43:14 +03:00
|
|
|
if [[ $? != 0 ]]; then
|
|
|
|
echo "Error building OpenSCAD. Aborting."
|
2010-02-10 03:50:02 +03:00
|
|
|
exit 1
|
2010-01-30 20:43:14 +03:00
|
|
|
fi
|
|
|
|
|
2010-01-16 04:00:00 +03:00
|
|
|
echo "Creating directory structure..."
|
|
|
|
|
|
|
|
case $OS in
|
|
|
|
MACOSX)
|
2010-02-15 21:39:28 +03:00
|
|
|
EXAMPLESDIR=OpenSCAD.app/Contents/Resources/examples
|
2011-09-08 05:27:18 +04:00
|
|
|
LIBRARYDIR=OpenSCAD.app/Contents/Resources/libraries
|
2010-02-15 21:39:28 +03:00
|
|
|
;;
|
2012-08-03 06:52:47 +04:00
|
|
|
LINXWIN)
|
|
|
|
EXAMPLESDIR=$DEPLOYDIR/openscad-$VERSION/examples/
|
|
|
|
LIBRARYDIR=$DEPLOYDIR/openscad-$VERSION/libraries/
|
|
|
|
rm -rf $DEPLOYDIR/openscad-$VERSION
|
|
|
|
mkdir $DEPLOYDIR/openscad-$VERSION
|
|
|
|
;;
|
2010-02-15 21:39:28 +03:00
|
|
|
*)
|
|
|
|
EXAMPLESDIR=openscad-$VERSION/examples/
|
2011-09-08 05:27:18 +04:00
|
|
|
LIBRARYDIR=openscad-$VERSION/libraries/
|
2010-02-15 21:39:28 +03:00
|
|
|
rm -rf openscad-$VERSION
|
|
|
|
mkdir openscad-$VERSION
|
2010-01-16 04:00:00 +03:00
|
|
|
;;
|
|
|
|
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
|
2012-08-05 04:47:36 +04:00
|
|
|
# exclude the .git stuff from MCAD which is a git submodule.
|
2012-08-05 07:03:52 +04:00
|
|
|
# tar is a relatively portable way to do exclusion, without the
|
|
|
|
# risks of rm
|
2012-08-05 05:04:40 +04:00
|
|
|
rm -f libraries.tar
|
2012-08-05 04:47:36 +04:00
|
|
|
tar cf libraries.tar --exclude=.git* libraries
|
|
|
|
cd $LIBRARYDIR/.. && tar xf $OPENSCADDIR/libraries.tar && cd $OPENSCADDIR
|
2012-08-05 05:04:40 +04:00
|
|
|
rm -f libraries.tar
|
2011-09-08 05:27:18 +04:00
|
|
|
chmod -R u=rwx,go=r,+X $LIBRARYDIR/*
|
|
|
|
fi
|
2010-01-22 19:09:00 +03:00
|
|
|
|
2010-01-16 04:54:16 +03:00
|
|
|
echo "Creating archive.."
|
2010-02-15 21:39:28 +03:00
|
|
|
|
2010-01-22 19:09:00 +03:00
|
|
|
case $OS in
|
|
|
|
MACOSX)
|
2010-02-15 21:39:28 +03:00
|
|
|
macdeployqt OpenSCAD.app -dmg -no-strip
|
|
|
|
mv OpenSCAD.dmg OpenSCAD-$VERSION.dmg
|
2010-01-22 19:09:00 +03:00
|
|
|
hdiutil internet-enable -yes -quiet OpenSCAD-$VERSION.dmg
|
2010-01-25 02:20:45 +03:00
|
|
|
echo "Binary created: OpenSCAD-$VERSION.dmg"
|
2010-02-15 21:39:28 +03:00
|
|
|
;;
|
|
|
|
WIN)
|
|
|
|
#package
|
|
|
|
cp win32deps/* openscad-$VERSION
|
|
|
|
cp $TARGET/openscad.exe openscad-$VERSION
|
2010-01-22 19:09:00 +03:00
|
|
|
rm -f openscad-$VERSION.zip
|
|
|
|
"$ZIP" $ZIPARGS openscad-$VERSION.zip openscad-$VERSION
|
2010-02-15 21:39:28 +03:00
|
|
|
rm -rf openscad-$VERSION
|
2010-01-22 19:09:00 +03:00
|
|
|
echo "Binary created: openscad-$VERSION.zip"
|
|
|
|
;;
|
2011-10-16 11:39:17 +04:00
|
|
|
LINXWIN)
|
|
|
|
#package
|
2012-08-03 06:52:47 +04:00
|
|
|
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
|
2012-08-03 06:52:47 +04:00
|
|
|
cd $OPENSCADDIR
|
2012-08-03 15:30:28 +04:00
|
|
|
echo "Binary package created"
|
2012-08-03 06:52:47 +04:00
|
|
|
|
|
|
|
echo "Creating installer"
|
2012-08-05 05:59:22 +04:00
|
|
|
echo "Copying NSIS files to $DEPLOYDIR/openscad-$VERSION"
|
2012-08-05 04:47:36 +04:00
|
|
|
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
|
2012-08-05 04:47:36 +04:00
|
|
|
$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 04:47:36 +04:00
|
|
|
|
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/
|
2012-08-04 21:54:12 +04:00
|
|
|
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
|
|
|
;;
|
2010-01-22 19:09:00 +03:00
|
|
|
esac
|