146 lines
4.8 KiB
Bash
Executable file
146 lines
4.8 KiB
Bash
Executable file
#!/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
|