openscad/scripts/uni-build-dependencies.sh

355 lines
8.8 KiB
Bash
Raw Normal View History

2012-05-29 03:25:43 +04:00
#!/bin/sh -e
# uni-build-dependencies by don bright 2012. copyright assigned to
# Marius Kintel and Clifford Wolf, 2012. released under the GPL 2, or
# later, as described in the file named 'COPYING' in OpenSCAD's project root.
2012-05-29 03:25:43 +04:00
#
# This script builds all library dependencies of OpenSCAD for Linux/BSD
2012-05-29 03:25:43 +04:00
#
# Usage: uni-build-dependencies.sh
2012-05-29 03:25:43 +04:00
#
# Prerequisites:
# - wget or curl
2012-05-29 03:25:43 +04:00
# - Qt4
# - other
2012-05-29 03:25:43 +04:00
#
printUsage()
{
echo "Usage: $0"
echo
}
2012-07-13 06:31:28 +04:00
build_git()
{
version=$1
echo "Building git" $version "..."
cd $BASEDIR/src
rm -rf git-$version
if [ ! -f git-$version.tar.gz ]; then
2012-12-21 03:35:16 +04:00
curl --insecure -O http://git-core.googlecode.com/files/git-$version.tar.gz
2012-07-13 06:31:28 +04:00
fi
tar zxf git-$version.tar.gz
cd git-$version
./configure --prefix=$DEPLOYDIR
make -j$NUMCPU
make install
}
build_cmake()
{
version=$1
echo "Building cmake" $version "..."
cd $BASEDIR/src
rm -rf cmake-$version
if [ ! -f cmake-$version.tar.gz ]; then
2012-12-21 03:35:16 +04:00
curl --insecure -O http://www.cmake.org/files/v2.8/cmake-$version.tar.gz
fi
tar zxf cmake-$version.tar.gz
cd cmake-$version
mkdir build
cd build
../configure --prefix=$DEPLOYDIR
make -j$NUMCPU
make install
}
2012-05-29 03:25:43 +04:00
build_curl()
{
version=$1
echo "Building curl" $version "..."
cd $BASEDIR/src
rm -rf curl-$version
if [ ! -f curl-$version.tar.bz2 ]; then
wget http://curl.haxx.se/download/curl-$version.tar.bz2
fi
tar xjf curl-$version.tar.bz2
cd curl-$version
mkdir build
cd build
../configure --prefix=$DEPLOYDIR
make -j$NUMCPU
make install
2012-05-29 03:25:43 +04:00
}
build_gmp()
{
version=$1
echo "Building gmp" $version "..."
cd $BASEDIR/src
rm -rf gmp-$version
if [ ! -f gmp-$version.tar.bz2 ]; then
2012-12-21 03:35:16 +04:00
curl --insecure -O ftp://ftp.gmplib.org/pub/gmp-$version/gmp-$version.tar.bz2
2012-05-29 03:25:43 +04:00
fi
tar xjf gmp-$version.tar.bz2
cd gmp-$version
mkdir build
cd build
../configure --prefix=$DEPLOYDIR --enable-cxx
make install
}
build_mpfr()
{
version=$1
echo "Building mpfr" $version "..."
cd $BASEDIR/src
rm -rf mpfr-$version
if [ ! -f mpfr-$version.tar.bz2 ]; then
2012-12-21 03:35:16 +04:00
curl --insecure -O http://www.mpfr.org/mpfr-$version/mpfr-$version.tar.bz2
2012-05-29 03:25:43 +04:00
fi
tar xjf mpfr-$version.tar.bz2
cd mpfr-$version
mkdir build
cd build
../configure --prefix=$DEPLOYDIR --with-gmp=$DEPLOYDIR
make install
cd ..
}
build_boost()
{
version=$1
bversion=`echo $version | tr "." "_"`
echo "Building boost" $version "..."
cd $BASEDIR/src
rm -rf boost_$bversion
if [ ! -f boost_$bversion.tar.bz2 ]; then
2012-12-21 03:35:16 +04:00
curl --insecure -LO http://downloads.sourceforge.net/project/boost/boost/$version/boost_$bversion.tar.bz2
2012-05-29 03:25:43 +04:00
fi
tar xjf boost_$bversion.tar.bz2
cd boost_$bversion
if [ "`gcc --version|grep 4.7`" ]; then
if [ "`echo $version | grep 1.47`" ]; then
echo gcc 4.7 incompatible with boost 1.47. edit boost version in $0
exit
fi
fi
2012-05-29 03:25:43 +04:00
# We only need certain portions of boost
./bootstrap.sh --prefix=$DEPLOYDIR --with-libraries=thread,program_options,filesystem,system,regex
if [ $CXX ]; then
if [ $CXX = "clang++" ]; then
./b2 -j$NUMCPU toolset=clang install
# ./b2 -j$NUMCPU toolset=clang cxxflags="-stdlib=libc++" linkflags="-stdlib=libc++" install
fi
else
./b2 -j$NUMCPU
./b2 install
fi
2012-05-29 03:25:43 +04:00
}
build_cgal()
{
version=$1
echo "Building CGAL" $version "..."
cd $BASEDIR/src
rm -rf CGAL-$version
if [ ! -f CGAL-$version.tar.* ]; then
#4.0.2
2012-12-21 03:35:16 +04:00
curl --insecure -O https://gforge.inria.fr/frs/download.php/31174/CGAL-$version.tar.bz2
# 4.0 curl --insecure -O https://gforge.inria.fr/frs/download.php/30387/CGAL-$version.tar.gz
# 3.9 curl --insecure -O https://gforge.inria.fr/frs/download.php/29125/CGAL-$version.tar.gz
# 3.8 curl --insecure -O https://gforge.inria.fr/frs/download.php/28500/CGAL-$version.tar.gz
# 3.7 curl --insecure -O https://gforge.inria.fr/frs/download.php/27641/CGAL-$version.tar.gz
2012-05-29 03:25:43 +04:00
fi
tar jxf CGAL-$version.tar.bz2
2012-05-29 03:25:43 +04:00
cd CGAL-$version
if [ $2 = use-sys-libs ]; then
cmake -DCMAKE_INSTALL_PREFIX=$DEPLOYDIR -DWITH_CGAL_Qt3=OFF -DWITH_CGAL_Qt4=OFF -DWITH_CGAL_ImageIO=OFF -DCMAKE_BUILD_TYPE=Debug
else
cmake -DCMAKE_INSTALL_PREFIX=$DEPLOYDIR -DGMP_INCLUDE_DIR=$DEPLOYDIR/include -DGMP_LIBRARIES=$DEPLOYDIR/lib/libgmp.so -DGMPXX_LIBRARIES=$DEPLOYDIR/lib/libgmpxx.so -DGMPXX_INCLUDE_DIR=$DEPLOYDIR/include -DMPFR_INCLUDE_DIR=$DEPLOYDIR/include -DMPFR_LIBRARIES=$DEPLOYDIR/lib/libmpfr.so -DWITH_CGAL_Qt3=OFF -DWITH_CGAL_Qt4=OFF -DWITH_CGAL_ImageIO=OFF -DBOOST_ROOT=$DEPLOYDIR -DCMAKE_BUILD_TYPE=Debug
fi
2012-05-29 03:25:43 +04:00
make -j$NUMCPU
make install
}
build_glew()
{
version=$1
echo "Building GLEW" $version "..."
cd $BASEDIR/src
rm -rf glew-$version
if [ ! -f glew-$version.tgz ]; then
2012-12-21 03:35:16 +04:00
curl --insecure -LO http://downloads.sourceforge.net/project/glew/glew/$version/glew-$version.tgz
2012-05-29 03:25:43 +04:00
fi
tar xzf glew-$version.tgz
cd glew-$version
mkdir -p $DEPLOYDIR/lib/pkgconfig
2012-07-16 02:46:38 +04:00
# Fedora 64-bit
if [ -e /usr/lib64 ]; then
if [ "`ls /usr/lib64 | grep Xmu`" ]; then
echo "modifying glew makefile for 64 bit machine"
sed -ibak s/"\-lXmu"/"\-L\/usr\/lib64\/libXmu.so.6"/ config/Makefile.linux
fi
fi
if [ $CC ]; then
if [ $CC = "clang" ]; then
echo "modifying glew makefile for clang"
sed -i s/\$\(CC\)/clang/ Makefile
fi
fi
MAKER=make
if [ "`uname | grep BSD`" ]; then
if [ "`command -v gmake`" ]; then
MAKER=gmake
else
echo "building glew on BSD requires gmake (gnu make)"
exit
fi
fi
GLEW_DEST=$DEPLOYDIR $MAKER -j$NUMCPU
GLEW_DEST=$DEPLOYDIR $MAKER install
2012-05-29 03:25:43 +04:00
}
build_opencsg()
{
version=$1
echo "Building OpenCSG" $version "..."
cd $BASEDIR/src
rm -rf OpenCSG-$version
if [ ! -f OpenCSG-$version.tar.gz ]; then
2012-12-21 03:35:16 +04:00
curl --insecure -O http://www.opencsg.org/OpenCSG-$version.tar.gz
2012-05-29 03:25:43 +04:00
fi
tar xzf OpenCSG-$version.tar.gz
cd OpenCSG-$version
# modify the .pro file for qmake, then use qmake to
# manually rebuild the src/Makefile (some systems don't auto-rebuild it)
cp opencsg.pro opencsg.pro.bak
cat opencsg.pro.bak | sed s/example// > opencsg.pro
if [ "`command -v qmake-qt4`" ]; then
OPENCSG_QMAKE=qmake-qt4
elif [ "`command -v qmake4`" ]; then
OPENCSG_QMAKE=qmake4
else
OPENCSG_QMAKE=qmake
fi
cd $BASEDIR/src/OpenCSG-$version/src
$OPENCSG_QMAKE
cd $BASEDIR/src/OpenCSG-$version
$OPENCSG_QMAKE
2012-05-29 04:15:49 +04:00
make
ls lib/* include/*
echo "installing to -->" $DEPLOYDIR
mkdir -p $DEPLOYDIR/lib
mkdir -p $DEPLOYDIR/include
install lib/* $DEPLOYDIR/lib
install include/* $DEPLOYDIR/include
cd $BASEDIR
2012-05-29 03:25:43 +04:00
}
build_eigen()
{
version=$1
echo "Building eigen" $version "..."
cd $BASEDIR/src
rm -rf eigen-$version
EIGENDIR="none"
if [ $version = "2.0.17" ]; then EIGENDIR=eigen-eigen-b23437e61a07; fi
if [ $version = "3.1.1" ]; then EIGENDIR=eigen-eigen-43d9075b23ef; fi
if [ $EIGENDIR = "none" ]; then
echo Unknown eigen version. Please edit script.
exit 1
fi
rm -rf ./$EIGENDIR
2012-05-29 03:25:43 +04:00
if [ ! -f eigen-$version.tar.bz2 ]; then
2012-12-21 03:35:16 +04:00
curl --insecure -LO http://bitbucket.org/eigen/eigen/get/$version.tar.bz2
2012-05-29 03:25:43 +04:00
mv $version.tar.bz2 eigen-$version.tar.bz2
fi
tar xjf eigen-$version.tar.bz2
ln -s ./$EIGENDIR eigen-$version
2012-05-29 03:25:43 +04:00
cd eigen-$version
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX=$DEPLOYDIR -DEIGEN_TEST_NO_OPENGL=1 ..
2012-05-29 03:25:43 +04:00
make -j$NUMCPU
make install
}
if [ "`command -v dirname`" ]; then
OPENSCAD_SCRIPTDIR=`dirname $0`
else
if [ ! -f openscad.pro ]; then
echo "Must be run from the OpenSCAD source root directory (dont have 'dirname')"
exit 1
else
OPENSCAD_SCRIPTDIR=$PWD
fi
2012-05-29 03:25:43 +04:00
fi
. $OPENSCAD_SCRIPTDIR/setenv-unibuild.sh # '.' is equivalent to 'source'
SRCDIR=$BASEDIR/src
2012-07-15 23:29:14 +04:00
if [ ! $NUMCPU ]; then
echo "Note: The NUMCPU environment variable can be set for paralell builds"
NUMCPU=1
fi
2012-05-29 03:25:43 +04:00
if [ ! -d $BASEDIR/bin ]; then
mkdir -p $BASEDIR/bin
2012-05-29 03:25:43 +04:00
fi
echo "Using basedir:" $BASEDIR
echo "Using deploydir:" $DEPLOYDIR
echo "Using srcdir:" $SRCDIR
2012-07-15 23:29:14 +04:00
echo "Number of CPUs for parallel builds:" $NUMCPU
2012-05-29 03:25:43 +04:00
mkdir -p $SRCDIR $DEPLOYDIR
if [ ! "`command -v curl`" ]; then
build_curl 7.26.0
fi
# NB! For cmake, also update the actual download URL in the function
if [ ! "`command -v cmake`" ]; then
build_cmake 2.8.8
fi
2012-07-13 06:31:28 +04:00
if [ "`cmake --version | grep 'version 2.[1-6][^0-9]'`" ]; then
build_cmake 2.8.8
2012-07-13 06:31:28 +04:00
fi
# build_git 1.7.10.3
# Singly build CGAL or OpenCSG
# (Most systems have all libraries available as packages except CGAL/OpenCSG)
# (They can be built singly here by passing a command line arg to the script)
if [ $1 ]; then
if [ $1 = "cgal" ]; then
build_cgal 4.0.2 use-sys-libs
exit
fi
if [ $1 = "opencsg" ]; then
build_opencsg 1.3.2
exit
fi
fi
#
# Main build of libraries
# edit version numbers here as needed.
#
2012-08-19 16:17:06 +04:00
build_eigen 3.1.1
build_gmp 5.0.5
build_mpfr 3.1.1
build_boost 1.49.0
2012-05-29 03:25:43 +04:00
# NB! For CGAL, also update the actual download URL in the function
2012-08-19 02:30:47 +04:00
build_cgal 4.0.2
build_glew 1.7.0
build_opencsg 1.3.2
echo "OpenSCAD dependencies built and installed to " $BASEDIR