Explorar o código

Added script automating the build of static binaries

Jakob Truelsen %!s(int64=16) %!d(string=hai) anos
pai
achega
b9053df7cb
Modificáronse 4 ficheiros con 245 adicións e 0 borrados
  1. 139 0
      static-build.sh
  2. 51 0
      static_qt_conf_base
  3. 34 0
      static_qt_conf_linux
  4. 21 0
      static_qt_conf_win

+ 139 - 0
static-build.sh

@@ -0,0 +1,139 @@
+#!/bin/bash
+# This file is part of wkhtmltopdf.
+#
+# wkhtmltopdf is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# wkhtmltopdf is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with wkhtmltopdf.  If not, see <http:#www.gnu.org/licenses/>.
+
+# This script will compile static vertions of wkhtmltopdf for linux and for windows (it must run in linux)
+# It requires build-essential and wine to run. Please note that it will take quite a while
+
+#Configuration for the static build
+QT=qt-all-opensource-src-4.5.0
+MIRROR=kent
+MINGWFILES="binutils-2.19.1-mingw32-bin.tar.gz mingw32-make-3.81-20080326-3.tar.gz \
+gcc-g++-3.4.5-20060117-3.tar.gz gcc-core-3.4.5-20060117-3.tar.gz w32api-3.13-mingw32-dev.tar.gz \
+mingwrt-3.15.2-mingw32-dev.tar.gz mingwrt-3.15.2-mingw32-dll.tar.gz"
+OPENSSL=openssl-0.9.8h-1-lib.zip
+UPX=upx-3.03-i386_linux
+
+#Helper functions
+function get() {
+	[ -f $2.download ] || (rm -rf $2; wget $1 -O $2 && touch $2.download)
+}
+function unpack() {
+	[ -f $1.unpack ] || (echo "unpacking $1"; (tar -xf $1 || unzip $1) && touch $1.unpack)
+}
+function applypatch() {
+	cmp $1 $2 && return 0;
+	[ -f $2 ] && patch -R -p1 < $2;
+	patch -p1 < $1 && cp $1 $2;
+}
+
+#Create static build directory
+mkdir -p build
+cd build
+BUILD=`pwd`
+
+cat ../static_qt_conf_base ../static_qt_conf_win | sed -re 's/#.*//' | sed -re '/^[ \t]*$/d' | sort -u > conf_win
+
+#Fetch most the vertion of qt
+get http://download.qtsoftware.com/qt/source/${QT}.tar.bz2 $QT.tar.bz2 || exit 1
+
+#Fetch an unpack upx
+get http://upx.sourceforge.net/download/${UPX}.tar.bz2 ${UPX}.tar.bz2 || exit 1
+unpack ${UPX}.tar.bz2 || exit 1
+
+if [[ "$1" == "all" ]] || [[ "$1" == "linux" ]]; then
+	cat ../static_qt_conf_base ../static_qt_conf_linux | sed -re 's/#.*//' | sed -re '/^[ \t]*$/d' | sort -u > conf_linux
+	cd ${BUILD}
+	mkdir -p linux
+	cd linux
+	ln -s ${BUILD}/${QT}.tar.bz2 .
+	unpack ${QT}.tar.bz2 || exit 1
+	cd ${QT}
+	if ! cmp ${BUILD}/conf_linux conf_linux; then
+ 		(yes yes | ./configure `cat ${BUILD}/conf_linux` -prefix "${BUILD}/linux/qt" && cp ${BUILD}/conf_linux conf_linux) || exit 1
+	fi
+	applypatch ${BUILD}/../qt_webkit.patch qt_webkit.patch || exit 1
+	if ! make -j5 -q; then
+ 		make -j5 || exit 1
+ 		make install || exit 1
+	fi
+	cd ..
+	rm -rf wkhtmltopdf
+	svn export ${BUILD}/.. wkhtmltopdf --force || exit 1
+	cd wkhtmltopdf
+	../qt/bin/qmake || exit 1
+	make -j5 || exit 1
+	strip wkhtmltopdf || exit 1
+	${BUILD}/${UPX}/upx --best wkhtmltopdf -o ${BUILD}/wkhtmltopdf || exit 1
+fi
+if [[ "$1" == "all" ]] || [[ "$1" == "win" ]]; then 
+	export WINEPREFIX=`pwd`/mingw
+    #Setup configuration for mingw
+	ln -s / "mingw/dosdevices/z:"
+	cat <<EOF > tmp
+REGEDIT4
+
+[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment]
+"PATH"="C:\\\\windows;C:\\\\windows\\\\system32;C:\\\\mingw\\\\bin"
+"INCLUDE"="C:\\\\mingw\\\\include;C:\\\\mingw\\\\include\\\\c++\\\\3.4.5"
+"LIB"="C:\\\\mingw\\\\lib"
+EOF
+	wine regedit tmp || exit 1
+	rm -f tmp
+
+	#Allowing the build to access files in the unix fs, is a bad idee.
+	rm -rf "mingw/dosdevices/z:"
+
+	echo "Building windows vertion of qt"
+	#Install mingw
+	mkdir -p mingw/drive_c/mingw
+	cd mingw/drive_c/mingw
+	for file in ${MINGWFILES}; do
+		get http://${MIRROR}.dl.sourceforge.net/sourceforge/mingw/${file} ${file} || exit 1
+		unpack ${file} || exit 1
+	done
+	get http://downloads.sourceforge.net/gnuwin32/${OPENSSL} ${OPENSSL} || exit 1
+	unpack ${OPENSSL} || exit 1
+
+	#Unpack, configure and build windows qt
+	unset CPLUS_INCLUDE_PATH
+	unset C_INCLUDE_PATH
+	cd ${BUILD}/mingw/drive_c
+	ln -s ${BUILD}/${QT}.tar.bz2 .
+	unpack ${QT}.tar.bz2 || exit 1
+	mkdir -p qt
+	cp -r ${QT}/mkspecs qt
+	cd ${QT}
+	if ! cmp ${BUILD}/conf_win conf_win; then
+		(yes | wine configure.exe `cat ${BUILD}/conf_win` -prefix "C:\qt" && cp ${BUILD}/conf_win conf_win) || exit 1
+	fi
+	applypatch ${BUILD}/../qt_webkit.patch qt_webkit.patch || exit 1
+	if ! wine mingw32-make -j5 -q; then
+		wine mingw32-make -j5 || exit 1
+		wine mingw32-make install || exit 1
+	fi
+	cd ..
+	rm -rf wkhtmltopdf
+	svn export ${BUILD}/.. wkhtmltopdf --force || exit 1
+	cd wkhtmltopdf
+	wine ../qt/bin/qmake.exe wkhtmltopdf.pro -o Makefile -spec win32-g++ || exit 1
+	wine mingw32-make -j5 || exit 1
+	wine strip.exe release/wkhtmltopdf.exe || exit 1
+	${BUILD}/${UPX}/upx --best release/wkhtmltopdf.exe -o ${BUILD}/khtmltopdf.exe || exit 1
+fi
+if [[ "$1" != "all" ]] && [[ "$1" != "linux" ]] && [[ "$1" != "win" ]]; then
+	echo "please specify what static binary you want build (linux, win or all)"
+	exit 1
+fi

+ 51 - 0
static_qt_conf_base

@@ -0,0 +1,51 @@
+# This file is part of wkhtmltopdf.
+#
+# wkhtmltopdf is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# wkhtmltopdf is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with wkhtmltopdf.  If not, see <http:#www.gnu.org/licenses/>.
+-release
+-static
+-fast
+-no-exceptions
+-no-accessibility
+-no-stl
+-no-sql-ibase
+-no-sql-mysql
+-no-sql-odbc
+-no-sql-psql
+-no-sql-sqlite
+-no-sql-sqlite2
+-no-qt3support
+-no-xmlpatterns
+-no-phonon
+-no-phonon-backend
+-webkit
+-no-scripttools
+-no-mmx
+-no-3dnow
+-no-sse
+-no-sse2 
+-qt-zlib
+-qt-gif
+-qt-libtiff
+-qt-libpng
+-qt-libmng
+-qt-libjpeg
+-openssl
+#-openssl-linked
+-nomake tools
+-nomake examples
+-nomake demos
+-nomake docs
+-nomake translations
+-no-opengl
+-no-dbus

+ 34 - 0
static_qt_conf_linux

@@ -0,0 +1,34 @@
+# This file is part of wkhtmltopdf.
+#
+# wkhtmltopdf is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# wkhtmltopdf is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with wkhtmltopdf.  If not, see <http:#www.gnu.org/licenses/>.
+-largefile
+-rpath
+-svg
+-no-nis
+-no-cups
+-no-iconv
+-no-pch
+-no-gtkstyle
+-no-nas-sound
+-no-sm
+-no-xshape
+-no-xinerama
+-no-xcursor
+-no-xfixes
+-no-xrandr
+-no-xrender
+-no-mitshm
+-no-xinput
+-no-xkb
+-no-glib

+ 21 - 0
static_qt_conf_win

@@ -0,0 +1,21 @@
+# This file is part of wkhtmltopdf.
+#
+# wkhtmltopdf is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# wkhtmltopdf is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with wkhtmltopdf.  If not, see <http:#www.gnu.org/licenses/>.
+-no-style-windows
+-no-style-windowsxp
+-no-style-windowsvista
+-no-style-plastique
+-no-style-cleanlooks
+-no-style-motif
+-no-style-cde