#!/bin/sh # Build Windows distribution (swigwin-x.y.z.zip) from source tarball (swig-x.y.x.tar.gz) # Requires running in either: # - MinGW environment # - Linux using MinGW cross compiler # - Cygwin using MinGW compiler # path to zip program zip= wine= # options for configure extraconfigureoptions= compileflags="-O2 -Wall -Wextra" if test x$1 != x; then version=$1 if test x$2 != x; then zip=$2; echo zip: $zip; fi else echo "Usage: mkwindows.sh version [zip]" echo " Build SWIG Windows distribution from source tarball. Works on Cygwin, MinGW or Linux." echo " version should be in format x.y.z, for example 4.1.0" echo " zip is full path to zip program - default is /c/cygwin/bin/zip on MinGW, zip on Linux and Cygwin" exit 1 fi uname=`uname -a` mingw=`echo "$uname" | grep -i mingw` linux=`echo "$uname" | grep -i linux` cygwin=`echo "$uname" | grep -i cygwin` if test "$mingw"; then echo "Building native Windows executable on MinGW"; if test x$zip = x; then zip=/c/cygwin/bin/zip fi else if test "$linux"; then echo "Building native Windows executable on Linux" if test x$zip = x; then zip=zip wine=$(which wine) fi if test x$wine = x; then echo "Could not detect wine - please install wine-stable package." exit 1; fi echo "Checking that mingw 32-bit gcc is installed/available" if test -n "`which i686-w64-mingw32-gcc`" ; then i686-w64-mingw32-gcc --version || exit 1 i686-w64-mingw32-g++ --version || exit 1 extraconfigureoptions="--host=i686-w64-mingw32 --build=i686-linux" # Statically link so that libstdc++-6.dll and libgcc_s_sjlj-1.dll don't have to be shipped compileflags="$compileflags -static-libgcc -static-libstdc++" elif test -n "`which i586-mingw32msvc-gcc`" ; then i586-mingw32msvc-gcc --version || exit 1 i586-mingw32msvc-g++ --version || exit 1 extraconfigureoptions="--host=i586-mingw32msvc --build=i686-linux" else echo "Could not detect mingw gcc - please install mingw-w64 package." exit 1; fi else if test "$cygwin"; then echo "Building native Windows executable on Cygwin" if test x$zip = x; then zip=zip fi compileflags="$compileflags -mno-cygwin" else echo "Unknown platform. Requires either Linux or MinGW." exit 1; fi fi fi export CFLAGS="$compileflags" export CXXFLAGS="$compileflags" swigbasename=swig-$version swigwinbasename=swigwin-$version tarball=$swigbasename.tar.gz pcre_tarball=`ls pcre2-*.tar.*` if ! test -f "$pcre_tarball"; then echo "Could not find PCRE2 tarball. Please download a PCRE2 source tarball from http://www.pcre.org" echo "and place in the same directory as the SWIG tarball." exit 1 fi if test -f "$tarball"; then builddir=build-$version if test -e $builddir; then echo "Deleting directory $builddir..." rm -rf $builddir fi echo "Creating directory $builddir..." mkdir $builddir cd $builddir echo "Unzipping tarball..." tar -zxf ../$tarball sleep 2 # fix strange not finding newly created directory if test -d $swigbasename; then mv $swigbasename $swigwinbasename tar -zxf ../$tarball cd $swigbasename (cd ../.. && cp $pcre_tarball $builddir/$swigbasename) echo Running: Tools/pcre-build.sh $extraconfigureoptions ./Tools/pcre-build.sh $extraconfigureoptions echo Running: ./configure $extraconfigureoptions --without-alllang ./configure $extraconfigureoptions --without-alllang echo "Compiling (quietly)..." make > build.log echo "Simple check to see if swig.exe runs and show versions..." env LD_LIBRARY_PATH= PATH= $wine ./swig.exe -version || exit 1 env LD_LIBRARY_PATH= PATH= $wine ./swig.exe -pcreversion || exit 1 echo "Simple check to see if ccache-swig.exe runs..." env LD_LIBRARY_PATH= PATH= $wine ./CCache/ccache-swig.exe -V || exit 1 echo "Creating $swigwinbasename.zip..." cd .. cp $swigbasename/swig.exe $swigwinbasename cp $swigbasename/CCache/ccache-swig.exe $swigwinbasename/CCache cp $swigbasename/Lib/swigwarn.swg $swigwinbasename/Lib sleep 2 # fix strange not finding swig.exe echo "Unzip into a directory of your choice. Please read the README file as well as Doc\Manual\Windows.html for installation instructions." > swig_windows_zip_comments.txt rm -f ../$swigwinbasename.zip $zip -q -r -9 -z < swig_windows_zip_comments.txt ../$swigwinbasename.zip $swigwinbasename rm -f swig_windows_zip_comments.txt echo "Cleaning up..." cd .. rm -rf $builddir echo "Finished building $swigwinbasename.zip" else echo "Expecting tarball to create directory: $swigbasename but it does not exist" exit 1 fi else echo tarball missing: $tarball exit 1 fi exit 0