| #!/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 |