Browse Source

switch CI builds to use scripts from packaging repository

At the same time, remove the old build scripts as they will not
be used going forward.
Ashish Kulkarni 7 years ago
parent
commit
f2ffd79266
7 changed files with 8 additions and 1471 deletions
  1. 3 5
      .travis.yml
  2. 0 126
      INSTALL.md
  3. 4 5
      appveyor.yml
  4. 1 1
      qt
  5. 0 1125
      scripts/build.py
  6. 0 74
      scripts/release.py
  7. 0 135
      wkhtmltox.nsi

+ 3 - 5
.travis.yml

@@ -47,9 +47,7 @@ script:
     elif [[ $TARGET == "custom-qt4-linux"   ]]; then ../packaging/build compile-docker stretch-amd64   $PWD ../build;
     elif [[ $TARGET == "custom-qt4-windows" ]]; then ../packaging/build compile-docker mxe-cross-win64 $PWD ../build;
     elif [[ $TARGET == "custom-qt4-osx"     ]]; then
-        WKHTMLTOX_QT_CONFIG="remove:-openssl -no-openssl" \
-        CFLAGS="-w -mmacosx-version-min=10.6" \
-        CXXFLAGS="-w -mmacosx-version-min=10.6" \
-        OBJCFLAGS="-w -mmacosx-version-min=10.6" \
-        scripts/build.py osx-cocoa-x86-64 -debug;
+        sudo -H pip install -q conan pyyaml --ignore-installed six && sudo gem install fpm --no-ri --no-rdoc && \
+        sudo xcode-select --switch /Library/Developer/CommandLineTools && \
+        MACOSX_DEPLOYMENT_TARGET=10.7 ../packaging/build vagrant macos-cocoa --clean --version - - $PWD;
     fi

+ 0 - 126
INSTALL.md

@@ -1,126 +0,0 @@
-Clone this repository by running the following command:
-
-    git clone --recursive https://github.com/wkhtmltopdf/wkhtmltopdf.git
-
-If you are on Windows, make sure that you are cloning in a location without
-spaces/special characters in the name. In case you already have a cloned
-repository, update to the latest version by running the following commands:
-
-    git pull
-    git submodule update
-
-Please ensure that you have enough disk space in the location you have cloned
-the source code, as it will require approximately 1.2GiB for both the `qt` and
-`wkhtmltopdf` repositories. Each target that is built will require an
-additional 2.5GiB for compiling the source code and producing the final
-installer (for Windows) or packages (for other OSes), which will be generated
-in the `static-build/` folder.
-
-You can create a debug build by passing the `-debug` flag to the build script.
-It is recommended to always pass the `-clean` flag, which removes the
-existing build folder and performs a clean build. Note that passing `-debug`
-may increase the disk space required for the build and final binaries for
-storing the additional debug information.
-
-Linux
------
-
-Please ensure that the cloned repository is in the user's home directory
-e.g. `~/wkhtmltopdf`. If you clone it in a different directory, it may
-fail with `E: Failed to change to directory /your/dir: No such file or directory`.
-Please note that [encrypted home directories](https://bugs.launchpad.net/ubuntu/+source/schroot/+bug/791908)
-and [non standard home directories](https://github.com/wkhtmltopdf/wkhtmltopdf/issues/1804)
-(i.e. not located in `/home`) are not supported -- you are advised to
-use a VM instead to build wkhtmltopdf.
-
-Building is supported only on latest stable Debian/Ubuntu 64-bit, and
-the binaries are produced in a self-contained chroot environment for the
-target distribution -- you will need to first setup the build environment
-and then only you can perform the build for a 32-bit or 64-bit binary.
-The following targets are currently supported:
-
-Target         | Setup of Build Environment                    | Building 32-bit binaries                 |  Building 64-bit binaries
-------         | --------------------------                    | ------------------------                 |  ------------------------
-Generic        | `sudo scripts/build.py setup-schroot-generic` | `scripts/build.py linux-generic-i386`    | `scripts/build.py linux-generic-amd64`
-MinGW-w64      | `sudo scripts/build.py setup-mingw-w64`       | `scripts/build.py mingw-w64-cross-win32` | `scripts/build.py mingw-w64-cross-win64`
-
-The MinGW-w64 toolchain can cross-compile 32/64-bit Windows binaries from
-Linux -- it is useful for targeting Windows XP/Windows 2003, which are not
-supported by default when compiling with MSVC 2013. You may require a
-working internet connection during the build to download and compile
-the dependent libraries (e.g. OpenSSL).
-
-Each target will require approximately 1.5GiB of disk space to hold both
-the `i386` and `amd64` chroot environments for that target. By default,
-the chroot environments are created under `/var/chroot` -- in case you
-want to create them under another location (e.g. due to insufficient disk
-space), please run the command `export WKHTMLTOX_CHROOT=/some/other/dir`
-**before** the command for setup of the build environment.
-
-While setting up the build environments, please ensure that you are logged
-in as a regular user who has `sudo` access. It is possible to run the script
-without `sudo` but you will need to have root privileges (e.g. via `su`). In
-that scenario, you may get the error `Unable to determine the login for which schroot access is to be given`
--- you will have to set `export SUDO_USER=<username>` and try to run it again.
-Other than the setup of build environment, **do not run any other command
-with `root` privileges!** The compilation process can be run as a normal
-user and running it as `root` may lead to errors or complete loss of data.
-
-After the build environment is setup, you can run the command mentioned above
-to build either the 32-bit or 64-bit binaries, which should generate a
-native package (either DEB or RPM, depending on the distribution) in the
-`static-build/` folder.
-
-Windows
--------
-
-* Install Visual Studio [2013 (update 5)](https://go.microsoft.com/fwlink/?LinkId=532496)
-  or Visual Studio [2015 (update 3)](https://go.microsoft.com/fwlink/?LinkId=615448).
-* Install the latest [ActivePerl](http://www.activestate.com/activeperl/downloads) release
-* Install the latest [Python 2.7](http://www.python.org/downloads/windows/) release
-* Install [NSIS 2.46](http://nsis.sourceforge.net/Download)
-* Make sure that you can run "git". If not, add it to the PATH or reinstall
-  with option "Run Git from the Windows Command Prompt".
-
-Target          | Building 32-bit binaries               |  Building 64-bit binaries
-------          | ------------------------               |  ------------------------
-MSVC 2013       | `scripts\build.py msvc2013-win32`      | `scripts/build.py msvc2013-win64`
-MSVC 2015       | `scripts\build.py msvc2015-win32`      | `scripts/build.py msvc2015-win64`
-
-During the build, a working internet connection is required to download and
-compile the dependent libraries (e.g. OpenSSL). The output installers should
-be generated in the `static-build` folder.
-
-Please note that if you want to target Windows XP/Windows 2003 (i.e. NT 5.x)
-you should use the MinGW-w64 builds cross-compiled from Linux as the MSVC builds
-target Windows Vista or later (i.e. NT 6.x) by default.
-
-OS X
-----
-
-Building is supported only on OS X 10.7 or newer. You will need to have the
-latest Xcode for your OS X version. Additionally, you will need to run the command
-`sudo gem install fpm --no-ri --no-rdoc` in the terminal to install
-[fpm](https://github.com/jordansissel/fpm), which is used for building the package.
-
-Target          | Build Command
-------          | -------------
-32-bit Carbon   | `scripts/build.py osx-carbon-i386`
-64-bit Cocoa    | `scripts/build.py osx-cocoa-x86-64`
-
-During the build, a working internet connection is required to download and
-compile the dependent libraries (e.g. libpng and libjpeg). The output package
-should be generated in the `static-build` folder.
-
-Others
-------
-
-In case you are running on a non-Debian/Ubuntu Linux distribution or want to
-target a Linux distribution not listed above or another Unix-like OS, you
-will need to use the `posix-local` target. It assumes that you already have
-all the build dependencies installed beforehand and will generate a tarball
-with the specification of `local-MACHINENAME` in the `static-build/` folder.
-
-If you are able to get such a build running, contacting the developers via
-the mailing list or submitting a patch with the build instructions would be
-appreciated.

+ 4 - 5
appveyor.yml

@@ -1,5 +1,5 @@
 version:      "{build}"
-clone_folder: c:\wkhtmltopdf
+clone_folder: c:\wkhtmltopdf\wkhtmltopdf
 test:         off
 
 environment:
@@ -8,10 +8,9 @@ environment:
 
 install:
   - git submodule update --init --recursive --force --depth 50
+  - git clone https://github.com/wkhtmltopdf/packaging.git ..\packaging
+  - pip install -q conan pyyaml
   - perl -p -i.bak -e "s/quiet = 0/quiet = 1/g" qt/bin/syncqt
 
 build_script:
-  - scripts\build.py %TARGET%
-
-artifacts:
-  - path: static-build\wkhtmltox*.exe
+  - python ..\packaging\build vagrant --version - - %TARGET% c:\wkhtmltopdf\wkhtmltopdf

+ 1 - 1
qt

@@ -1 +1 @@
-Subproject commit c4c1d4aa94a34059f561aee4764afd10dfcff921
+Subproject commit 5db36ec76b29712eb2c5bd0625c2c77d7468b3fc

+ 0 - 1125
scripts/build.py

@@ -1,1125 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2014 wkhtmltopdf authors
-#
-# This file is part of wkhtmltopdf.
-#
-# wkhtmltopdf is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Lesser 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 Lesser General Public License
-# along with wkhtmltopdf.  If not, see <http:#www.gnu.org/licenses/>.
-
-# --------------------------------------------------------------- CONFIGURATION
-
-PROJECT_SETUP = {
-    'name':         'wkhtmltox',
-    'description':  'convert HTML to PDF and various image formats using QtWebkit',
-    'license':      'LGPLv3',
-    'maintainer':   'Ashish Kulkarni <kulkarni.ashish@gmail.com>',
-    'url':          'http://wkhtmltopdf.org/'
-}
-
-BUILDERS = {
-    'source-tarball':        'source_tarball',
-    'msvc2013-win32':        'msvc',
-    'msvc2013-win64':        'msvc',
-    'msvc2015-win32':        'msvc',
-    'msvc2015-win64':        'msvc',
-    'setup-mingw-w64':       'setup_mingw_w64',
-    'setup-schroot-generic': 'setup_schroot',
-    'update-all-schroots':   'update_schroot',
-    'linux-generic-i386':    'linux_generic',
-    'linux-generic-amd64':   'linux_generic',
-    'mingw-w64-cross-win32': 'mingw64_cross',
-    'mingw-w64-cross-win64': 'mingw64_cross',
-    'posix-local':           'posix_local',
-    'osx-cocoa-x86-64':      'osx',
-    'osx-carbon-i386':       'osx'
-}
-
-QT_CONFIG = {
-    'common' : [
-        '-opensource',
-        '-confirm-license',
-        '-fast',
-        '-release',
-        '-static',
-        '-graphicssystem raster',
-        '-webkit',
-        '-exceptions',              # required by XmlPatterns
-        '-xmlpatterns',             # required for TOC support
-        '-system-zlib',
-        '-system-libpng',
-        '-system-libjpeg',
-        '-no-libmng',
-        '-no-libtiff',
-        '-no-accessibility',
-        '-no-stl',
-        '-no-qt3support',
-        '-no-phonon',
-        '-no-phonon-backend',
-        '-no-opengl',
-        '-no-declarative',
-        '-no-script',
-        '-no-scripttools',
-        '-no-sql-ibase',
-        '-no-sql-mysql',
-        '-no-sql-odbc',
-        '-no-sql-psql',
-        '-no-sql-sqlite',
-        '-no-sql-sqlite2',
-        '-no-mmx',
-        '-no-3dnow',
-        '-no-sse',
-        '-no-sse2',
-        '-no-multimedia',
-        '-nomake demos',
-        '-nomake docs',
-        '-nomake examples',
-        '-nomake tools',
-        '-nomake tests',
-        '-nomake translations'
-    ],
-
-    'msvc': [
-        '-mp',
-        '-qt-style-windows',
-        '-qt-style-cleanlooks',
-        '-no-style-windowsxp',
-        '-no-style-windowsvista',
-        '-no-style-plastique',
-        '-no-style-motif',
-        '-no-style-cde',
-        '-openssl-linked'           # static linkage for OpenSSL
-    ],
-
-    'posix': [
-        '-silent',                  # perform a silent build
-        '-xrender',                 # xrender support is required
-        '-largefile',
-        '-iconv',                   # iconv support is required for text codecs
-        '-openssl-linked',          # directly link to OpenSSL during compilation
-        '-no-javascript-jit',       # can cause crashes/excess memory usage
-        '-no-rpath',
-        '-no-dbus',
-        '-no-nis',
-        '-no-cups',
-        '-no-pch',
-        '-no-gtkstyle',
-        '-no-nas-sound',
-        '-no-sm',
-        '-no-xshape',
-        '-no-xinerama',
-        '-no-xcursor',
-        '-no-xfixes',
-        '-no-xrandr',
-        '-no-mitshm',
-        '-no-xinput',
-        '-no-xkb',
-        '-no-glib',
-        '-no-gstreamer',
-        '-no-icu',
-        '-no-openvg',
-        '-no-xsync',
-        '-no-audio-backend',
-        '-no-sse3',
-        '-no-ssse3',
-        '-no-sse4.1',
-        '-no-sse4.2',
-        '-no-avx',
-        '-no-neon'
-    ],
-
-    'mingw-w64-cross' : [
-        '-silent',                  # perform a silent build
-        '-openssl-linked',          # static linkage for OpenSSL
-        '-no-reduce-exports',
-        '-no-rpath',
-        '-xplatform win32-g++-4.6'
-    ],
-
-    'osx': [
-        '-silent',                  # perform a silent build
-        '-no-framework',
-        '-no-dwarf2',
-        '-xrender',                 # xrender support is required
-        '-openssl',                 # load OpenSSL binaries at runtime
-        '-largefile',
-        '-no-rpath'
-    ]
-}
-
-LINUX_SCHROOT_SETUP = {
-    'generic': {
-        'title'             : 'Generic (based on CentOS 6)',
-        'packaging_tool'    : 'yum',
-        'build_arch'        : ['amd64', 'i386'],
-        'compression'       : 'bzip2',
-        'wrapper_command'   : 'scl enable devtoolset-3 python27 git19 -- ',
-        'runtime_packages'  : 'glibc libstdc++ zlib openssl freetype fontconfig '\
-                              'libX11 libXext libXrender xorg-x11-fonts-Type1 xorg-x11-fonts-75dpi',
-        'build_packages'    : 'scl-utils devtoolset-3-gcc-c++ python27 git19 ruby perl git make gzip diffutils gperf bison flex '\
-                              'zlib-devel openssl-devel freetype-devel fontconfig-devel '\
-                              'libX11-devel libXrender-devel libXext-devel',
-        'rinse'             : ('centos-6', """
-[slc6-scl]
-name=Scientific Linux CERN (SLC6) - SCL addons
-baseurl=http://linuxsoft.cern.ch/cern/scl/slc6X/$basearch/yum/scl/
-gpgcheck=0
-enabled=1
-""")}
-}
-
-DEPENDENT_LIBS = {
-    'openssl': {
-        'order' : 1,
-        'url'   : 'https://openssl.org/source/openssl-1.0.2k.tar.gz',
-        'sha1'  : '5f26a624479c51847ebd2f22bb9f84b3b44dcb44',
-        'build' : {
-            'msvc*-win32*': {
-                'result': ['include/openssl/ssl.h', 'lib/ssleay32.lib', 'lib/libeay32.lib'],
-                'replace': [('util/pl/VC-32.pl', ' /MT', ' %(cflags)s')],
-                'commands': [
-                    'perl Configure --openssldir=%(destdir)s VC-WIN32 no-asm',
-                    'ms\\do_ms.bat',
-                    'nmake /f ms\\nt.mak install'],
-            },
-            'msvc*-win64*': {
-                'result': ['include/openssl/ssl.h', 'lib/ssleay32.lib', 'lib/libeay32.lib'],
-                'replace': [('util/pl/VC-32.pl', ' /MT', ' %(cflags)s')],
-                'commands': [
-                    'perl Configure --openssldir=%(destdir)s VC-WIN64A',
-                    'ms\\do_win64a.bat',
-                    'nmake /f ms\\nt.mak install']
-            },
-            'mingw-w64-cross-win*': {
-                'result': ['include/openssl/ssl.h', 'lib/libssl.a', 'lib/libcrypto.a'],
-                'commands': [
-                    'perl Configure --openssldir=%(destdir)s --cross-compile-prefix=%(mingw_w64)s- no-shared no-asm mingw64',
-                    'make',
-                    'make install_sw']
-            }
-        }
-    },
-
-    'zlib': {
-        'order' : 2,
-        'url'   : 'http://downloads.sourceforge.net/libpng/zlib-1.2.11.tar.gz',
-        'sha1'  : 'e6d119755acdf9104d7ba236b1242696940ed6dd',
-        'build' : {
-            'msvc*': {
-                'result': {
-                    'include/zlib.h' : 'zlib.h',
-                    'include/zconf.h': 'zconf.h',
-                    'lib/zlib.lib'   : 'zlib.lib'
-                },
-                'replace':  [('win32/Makefile.msc', '-MD', '%(cflags)s')],
-                'commands': ['nmake /f win32/Makefile.msc zlib.lib']
-            },
-            'mingw-w64-cross-win*': {
-                'result': {
-                    'include/zlib.h' : 'zlib.h',
-                    'include/zconf.h': 'zconf.h',
-                    'lib/libz.a'     : 'libz.a'
-                },
-                'replace':  [('win32/Makefile.gcc', 'PREFIX =', 'PREFIX = %(mingw_w64)s-')],
-                'commands': ['make -f win32/Makefile.gcc']
-            }
-        }
-    },
-
-    'libpng': {
-        'order' : 3,
-        'url' : 'http://downloads.sourceforge.net/libpng/libpng-1.6.28.tar.gz',
-        'sha1': '004556d65f21baed83755f8e094112711e39ebae',
-        'build' : {
-            'msvc*': {
-                'result': {
-                    'include/png.h'       : 'png.h',
-                    'include/pngconf.h'   : 'pngconf.h',
-                    'include/pnglibconf.h': 'pnglibconf.h',
-                    'lib/libpng.lib'      : 'libpng.lib'
-                },
-                'replace': [
-                    ('scripts/makefile.vcwin32', '-I..\\zlib', '-I..\\deplibs\\include'),
-                    ('scripts/makefile.vcwin32', '..\\zlib\\zlib.lib', '..\\deplibs\\lib\\zlib.lib'),
-                    ('scripts/makefile.vcwin32', '-MD', '%(cflags)s')],
-                'commands': ['nmake /f scripts/makefile.vcwin32 libpng.lib']
-            },
-            'mingw-w64-cross-win*': {
-                'result': {
-                    'include/png.h'       : 'png.h',
-                    'include/pngconf.h'   : 'pngconf.h',
-                    'include/pnglibconf.h': 'pnglibconf.h',
-                    'lib/libpng.a'        : 'libpng.a'
-                },
-                'replace': [
-                    ('scripts/makefile.gcc', 'ZLIBINC = ../zlib', 'ZLIBINC = %(destdir)s/include'),
-                    ('scripts/makefile.gcc', 'ZLIBLIB = ../zlib', 'ZLIBLIB = %(destdir)s/lib'),
-                    ('scripts/makefile.gcc', 'CC = gcc', 'CC = %(mingw_w64)s-gcc'),
-                    ('scripts/makefile.gcc', 'AR_RC = ar', 'AR_RC = %(mingw_w64)s-ar'),
-                    ('scripts/makefile.gcc', 'RANLIB = ranlib', 'RANLIB = %(mingw_w64)s-ranlib')],
-                'commands': ['make -f scripts/makefile.gcc libpng.a']
-            },
-            'osx-carbon-i386': {
-                'result': ['include/png.h', 'include/pngconf.h', 'lib/libpng.a'],
-                'commands': [
-                    'CFLAGS="-arch i386" ./configure --disable-shared --prefix=%(destdir)s',
-                    'make install']
-            },
-            'osx-cocoa-x86-64': {
-                'result': ['include/png.h', 'include/pngconf.h', 'lib/libpng.a'],
-                'commands': [
-                    'CFLAGS="-arch x86_64" ./configure --disable-shared --prefix=%(destdir)s',
-                    'make install']
-            },
-            'linux-generic-*': {
-                'result': ['include/png.h', 'include/pngconf.h', 'lib/libpng.a'],
-                'commands': [
-                    'CFLAGS="-fPIC" ./configure --disable-shared --enable-static --prefix=%(destdir)s',
-                    'make install']
-            }
-        }
-    },
-
-    'libjpeg': {
-        'order' : 4,
-        'url' : 'http://ijg.org/files/jpegsrc.v9b.tar.gz',
-        'sha1': '15dd867617a88abd07573e06a86ace9bdb998ac2',
-        'build' : {
-            'msvc*': {
-                'result': {
-                    'include/jpeglib.h' : 'jpeglib.h',
-                    'include/jmorecfg.h': 'jmorecfg.h',
-                    'include/jerror.h'  : 'jerror.h',
-                    'include/jconfig.h' : 'jconfig.h',
-                    'lib/libjpeg.lib'   : 'libjpeg.lib'
-                },
-                'replace':  [('makefile.vc', '!include <win32.mak>', ''),
-                             ('makefile.vc', '$(cc)', 'cl'),
-                             ('makefile.vc', '$(cflags) $(cdebug) $(cvars)', '-c -nologo -D_CRT_SECURE_NO_DEPRECATE %(cflags)s -O2 -W3')],
-                'commands': [
-                    'copy /y jconfig.vc jconfig.h',
-                    'nmake /f makefile.vc libjpeg.lib']
-            },
-            'mingw-w64-cross-win*': {
-                'result': ['include/jpeglib.h', 'include/jmorecfg.h', 'include/jerror.h', 'include/jconfig.h', 'lib/libjpeg.a'],
-                'commands': [
-                    './configure --host=%(mingw_w64)s --disable-shared --prefix=%(destdir)s',
-                    'make install']
-            },
-            'osx-carbon-i386': {
-                'result': ['include/jpeglib.h', 'include/jmorecfg.h', 'include/jerror.h', 'include/jconfig.h', 'lib/libjpeg.a'],
-                'commands': [
-                    'CFLAGS="-arch i386" ./configure --disable-shared --prefix=%(destdir)s',
-                    'make install']
-            },
-            'osx-cocoa-x86-64': {
-                'result': ['include/jpeglib.h', 'include/jmorecfg.h', 'include/jerror.h', 'include/jconfig.h', 'lib/libjpeg.a'],
-                'commands': [
-                    'CFLAGS="-arch x86_64" ./configure --disable-shared --prefix=%(destdir)s',
-                    'make install']
-            },
-            'linux-generic-*': {
-                'result': ['include/jpeglib.h', 'include/jmorecfg.h', 'include/jerror.h', 'include/jconfig.h', 'lib/libjpeg.a'],
-                'commands': [
-                    'CFLAGS="-fPIC" ./configure --disable-shared --enable-static --prefix=%(destdir)s',
-                    'make install']
-            }
-        }
-    },
-
-    'xz': {
-        'order' : 5,
-        'url' : 'http://downloads.sourceforge.net/lzmautils/xz-5.2.3.tar.gz',
-        'sha1': '529638eec3597e429cc54c74551ac0a89169e841',
-        'build' : {
-            'osx*': {
-                'result': ['bin/xz'],
-                'commands': [
-                    'CFLAGS="-arch i386 -mmacosx-version-min=10.6" ./configure --disable-nls --enable-small --disable-shared --disable-threads --prefix=%(destdir)s',
-                    'make -C src/liblzma', 'make -C src/xz', 'make install-strip']
-            }
-        }
-    }
-}
-
-EXCLUDE_SRC_TARBALL = [
-    'qt/config.profiles*',
-    'qt/demos*',
-    'qt/dist*',
-    'qt/doc*',
-    'qt/examples*',
-    'qt/imports*',
-    'qt/templates*',
-    'qt/tests*',
-    'qt/translations*',
-    'qt/util*',
-    'qt/lib/fonts*',
-    'qt/src/3rdparty/*ChangeLog*',
-    'qt/src/3rdparty/ce-compat*',
-    'qt/src/3rdparty/clucene*',
-    'qt/src/3rdparty/fonts*',
-    'qt/src/3rdparty/freetype*',
-    'qt/src/3rdparty/javascriptcore*',
-    'qt/src/3rdparty/libgq*',
-    'qt/src/3rdparty/libmng*',
-    'qt/src/3rdparty/libtiff*',
-    'qt/src/3rdparty/patches*',
-    'qt/src/3rdparty/phonon*',
-    'qt/src/3rdparty/pixman*',
-    'qt/src/3rdparty/powervr*',
-    'qt/src/3rdparty/ptmalloc*',
-    'qt/src/3rdparty/s60*',
-    'qt/src/3rdparty/wayland*'
-]
-
-# --------------------------------------------------------------- HELPERS
-
-import os, sys, platform, subprocess, shutil, re, fnmatch, multiprocessing, urllib, hashlib, tarfile
-
-from os.path import exists
-
-if platform.system() == 'Windows':
-    try:
-        import winreg
-    except ImportError:
-        import _winreg as winreg
-    CPU_COUNT = max(2, multiprocessing.cpu_count()-1)   # leave one CPU free
-else:
-    CPU_COUNT = max(2, multiprocessing.cpu_count())
-
-def rchop(s, e):
-    if s.endswith(e):
-        return s[:-len(e)]
-    return s
-
-def message(msg):
-    sys.stdout.write(msg)
-    sys.stdout.flush()
-
-def error(msg):
-    message(msg+'\n')
-    sys.exit(1)
-
-def shell(cmd):
-    ret = os.system(cmd)
-    if ret != 0:
-        error("%s\ncommand failed: exit code %d" % (cmd, ret))
-
-def silent_shell(cmd):
-    message('    %s\n' % cmd)
-    try:
-        subprocess.check_output(cmd, stderr=subprocess.STDOUT, shell=True)
-    except subprocess.CalledProcessError as e:
-        error("\n%s\ncommand failed: exit code %d" % (e.output.decode('utf-8'), e.returncode))
-
-def chroot_shell(name, cmd):
-    distro  = get_chroot_list().get(name)
-    wrapper = LINUX_SCHROOT_SETUP.get(distro, {}).get('wrapper_command', '')
-    ret = os.system('schroot -c wkhtmltox-%s -- %s%s ' % (name, wrapper, cmd))
-    if ret != 0:
-        error("command inside chroot failed: exit code %d" % ret)
-
-def get_output(*cmd):
-    try:
-        return subprocess.check_output(cmd, stderr=subprocess.STDOUT).strip()
-    except:
-        return None
-
-def rmdir(path):
-    if exists(path):
-        if platform.system() == 'Windows':
-            shell('attrib -R %s\* /S' % path)
-        shutil.rmtree(path)
-
-def mkdir_p(path):
-    if not exists(path):
-        os.makedirs(path)
-
-def get_registry_value(key, value=None):
-    for mask in [0, winreg.KEY_WOW64_64KEY, winreg.KEY_WOW64_32KEY]:
-        try:
-            reg_key = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, key, 0, winreg.KEY_READ | mask)
-            return winreg.QueryValueEx(reg_key, value)[0]
-        except WindowsError:
-            pass
-    return None
-
-def get_version(basedir):
-    mkdir_p(basedir)
-    text = open(os.path.join(basedir, '..', 'VERSION'), 'r').read().strip()
-    if '-' not in text:
-        return (text, text)
-    version = text[:text.index('-')]
-    os.chdir(os.path.join(basedir, '..'))
-    hash = get_output('git', 'rev-parse', '--short', 'HEAD')
-    if not hash:
-        return (text, version)
-    return ('%s-%s' % (text, hash), version)
-
-def nsis_version(ver):
-    while ver.count('.') < 3:
-        ver += '.0'
-    return ver
-
-def qt_config(key, *opts):
-    input, output = [], []
-    input.extend(QT_CONFIG['common'])
-    input.extend(QT_CONFIG[key])
-    input.extend(opts)
-    cfg = os.environ.get('WKHTMLTOX_QT_CONFIG')
-    if cfg:
-        input.extend(cfg.split())
-    for arg in input:
-        if not arg.startswith('remove:-'):
-            output.append(arg)
-        elif arg[1+arg.index(':'):] in output:
-            output.remove(arg[1+arg.index(':'):])
-    return ' '.join(output)
-
-def download_file(url, sha1, dir):
-    name = url.split('/')[-1]
-    loc  = os.path.join(dir, name)
-    if os.path.exists(loc):
-        hash = hashlib.sha1(open(loc, 'rb').read()).hexdigest()
-        if hash == sha1:
-            return loc
-        os.remove(loc)
-        message('Checksum mismatch for %s, re-downloading.\n' % name)
-    def hook(cnt, bs, total):
-        pct = int(cnt*bs*100/total)
-        message("\rDownloading: %s [%d%%]" % (name, pct))
-    urllib.urlretrieve(url, loc, reporthook=hook)
-    message("\r")
-    hash = hashlib.sha1(open(loc, 'rb').read()).hexdigest()
-    if hash != sha1:
-        os.remove(loc)
-        error('Checksum mismatch for %s, aborting.' % name)
-    message("\rDownloaded: %s [checksum OK]\n" % name)
-    return loc
-
-def download_tarball(url, sha1, dir, name):
-    loc = download_file(url, sha1, dir)
-    tar = tarfile.open(loc)
-    sub = tar.getnames()[0]
-    if '/' in sub:
-        sub = sub[:sub.index('/')]
-    src = os.path.join(dir, sub)
-    tgt = os.path.join(dir, name)
-    rmdir(src)
-    tar.extractall(dir)
-    rmdir(tgt)
-    os.rename(src, tgt)
-    return tgt
-
-def _is_compiled(dst, loc):
-    present = True
-    for name in loc['result']:
-        if isinstance(name, tuple):
-            present = present and bool([n for n in name if exists(os.path.join(dst, n))])
-        else:
-            present = present and exists(os.path.join(dst, name))
-    return present
-
-def build_deplibs(config, basedir, **kwargs):
-    mkdir_p(os.path.join(basedir, config))
-
-    dstdir = os.path.join(basedir, config, 'deplibs')
-    vars   = {'destdir': dstdir }
-    vars.update(kwargs)
-    for lib in sorted(DEPENDENT_LIBS, key=lambda x: DEPENDENT_LIBS[x]['order']):
-        cfg = None
-        for key in DEPENDENT_LIBS[lib]['build']:
-            if fnmatch.fnmatch(config, key):
-                cfg = key
-
-        if not cfg or _is_compiled(dstdir, DEPENDENT_LIBS[lib]['build'][cfg]):
-            continue
-
-        build_cfg = DEPENDENT_LIBS[lib]['build'][cfg]
-        message('========== building: %s\n' % lib)
-        srcdir = download_tarball(DEPENDENT_LIBS[lib]['url'], DEPENDENT_LIBS[lib]['sha1'],
-                                  basedir, os.path.join(config, lib))
-
-        for location, source, target in build_cfg.get('replace', []):
-            data = open(os.path.join(srcdir, location), 'r').read()
-            open(os.path.join(srcdir, location), 'w').write(data.replace(source, target % vars))
-
-        os.chdir(srcdir)
-        for command in build_cfg['commands']:
-            silent_shell(command % vars)
-        if not type(build_cfg['result']) is list:
-            for target in build_cfg['result']:
-                mkdir_p(os.path.dirname(os.path.join(dstdir, target)))
-                shutil.copy(build_cfg['result'][target], os.path.join(dstdir, target))
-        os.chdir(dstdir)
-        if not _is_compiled(dstdir, build_cfg):
-            error("Unable to compile %s for your system, aborting." % lib)
-
-        rmdir(srcdir)
-
-def build_qt(qtdir, make_cmd, configure_cmd):
-    configured = ''
-    if exists(os.path.join(qtdir, 'configured')):
-        configured = open(os.path.join(qtdir, 'configured'), 'r').read()
-    if not 'qt' in configured or not exists(qtdir):
-        mkdir_p(qtdir)
-        os.chdir(qtdir)
-        shell(configure_cmd)
-        open(os.path.join(qtdir, 'configured'), 'a').write('qt\n')
-    os.chdir(qtdir)
-    shell(make_cmd)
-
-def check_running_on_debian():
-    if not sys.platform.startswith('linux') or not exists('/etc/apt/sources.list') or platform.architecture()[0] != '64bit':
-        error('This can only be run on a 64-bit Debian/Ubuntu distribution, aborting.')
-
-    if os.geteuid() != 0:
-        error('This script must be run as root.')
-
-def install_packages(*names):
-    inst = get_output('dpkg-query', '--show', '--showformat', '${Package}\n').split('\n')
-    miss = [name for name in names if name not in inst]
-
-    if miss:
-        shell('apt-get update')
-        shell('apt-get install --assume-yes %s' % (' '.join(miss)))
-
-def get_chroot_list():
-    prefix = 'chroot:wkhtmltox-'
-    result = {}
-    for line in get_output('schroot', '--list').split('\n'):
-        if not line.startswith(prefix):
-            continue
-        name = line[len(prefix):]
-        for distro in LINUX_SCHROOT_SETUP:
-            if 'chroot_alias' in LINUX_SCHROOT_SETUP[distro]:
-                if name == LINUX_SCHROOT_SETUP[distro]['chroot_alias']:
-                    result[name] = distro
-                continue
-            for arch in LINUX_SCHROOT_SETUP[distro]['build_arch']:
-                if name == '%s-%s' % (distro, arch):
-                    result[name] = distro
-    return result
-
-# --------------------------------------------------------------- Linux chroot
-
-def check_setup_schroot(config):
-    check_running_on_debian()
-    login = os.environ.get('SUDO_USER') or get_output('logname')
-    if not login or login == 'root':
-        error('Unable to determine the login for which schroot access is to be given.')
-
-def build_setup_schroot(config, basedir):
-    install_packages('git', 'debootstrap', 'schroot', 'rinse', 'debian-archive-keyring',
-                     'build-essential', 'tar', 'xz-utils')
-
-    login  = os.environ.get('SUDO_USER') or get_output('logname')
-    target = config.split('-', 2)[2]
-    distro = LINUX_SCHROOT_SETUP.get(target)
-    allenv = get_chroot_list()
-
-    for arch in distro['build_arch']:
-        alias    = distro.get('chroot_alias', '%s-%s' % (target, arch))
-        base_dir = os.environ.get('WKHTMLTOX_CHROOT') or '/var/chroot'
-        root_dir = os.path.join(base_dir, 'wkhtmltox-%s' % alias)
-        pkg_list = '%s %s' % (distro['build_packages'], distro.get('runtime_packages', ''))
-        chroot   = (arch == 'i386' and 'linux32 chroot' or 'chroot')
-
-        if alias in allenv:
-            message('******************* %s (skipped)\n' % alias)
-            continue
-
-        message('******************* %s\n' % alias)
-        os.system('umount %s/proc 2>/dev/null' % root_dir)
-        os.system('umount %s/sys  2>/dev/null' % root_dir)
-        rmdir(root_dir)
-        mkdir_p(root_dir)
-
-        def do_setup(*cmds):
-            shell('mount -t proc  proc  %s/proc' % root_dir)
-            shell('mount -t sysfs sysfs %s/sys'  % root_dir)
-            for cmd in cmds:
-                shell('%s %s %s' % (chroot, root_dir, cmd))
-            shell('umount %s/proc' % root_dir)
-            shell('umount %s/sys'  % root_dir)
-
-        if distro['packaging_tool'] == 'yum':
-            rinse = (arch == 'i386' and 'linux32 rinse' or 'rinse')
-            rinse_distro, extra_repos = distro['rinse']
-            shell('%s --arch %s --distribution %s --directory %s' % (rinse, arch, rinse_distro, root_dir))
-
-            if arch == 'amd64':
-                open(os.path.join(root_dir, 'etc/yum.conf'), 'a').write('exclude = *.i?86\n')
-
-            if extra_repos:
-                open(os.path.join(root_dir, 'etc/yum.repos.d/wkhtmltopdf.repo'), 'w').write(extra_repos)
-
-            do_setup('yum clean all', 'yum update -y', 'yum install -y %s' % pkg_list)
-
-        open('/etc/schroot/chroot.d/wkhtmltox', 'a').write("""
-[wkhtmltox-%(alias)s]
-type=directory
-directory=%(dir)s
-description=%(title)s for wkhtmltox
-users=%(login)s
-root-users=root
-%(personality)s""" % { 'alias': alias, 'dir': root_dir, 'title': distro['title'], 'login': login,
-                       'personality': (arch == 'i386' and 'personality=linux32\n' or '\n') })
-
-def check_update_schroot(config):
-    check_running_on_debian()
-    if not get_chroot_list():
-        error('Unable to determine the list of available schroots.')
-
-def build_update_schroot(config, basedir):
-    for name, distro in get_chroot_list().iteritems():
-        message('******************* %s\n' % name)
-        tool = LINUX_SCHROOT_SETUP[distro]['packaging_tool']
-        if tool == 'apt':
-            chroot_shell(name, 'apt-get update')
-            chroot_shell(name, 'apt-get dist-upgrade --assume-yes')
-        elif tool == 'yum':
-            chroot_shell(name, 'yum update -y')
-
-def check_setup_mingw_w64(config):
-    check_running_on_debian()
-
-def build_setup_mingw_w64(config, basedir):
-    install_packages('build-essential', 'mingw-w64', 'nsis', 'perl', 'git', 'ruby', 'gperf', 'bison', 'flex')
-
-def check_source_tarball(config):
-    if not get_output('git', 'rev-parse', '--short', 'HEAD'):
-        error("This can only be run inside a git checkout.")
-
-    if not exists(os.path.join(os.getcwd(), 'qt', '.git')):
-        error("Please initialize and download the Qt submodule before running this.")
-
-def _filter_tar(info):
-    name = info.name[1+info.name.index('/'):]
-    if name.endswith('.git') or [p for p in EXCLUDE_SRC_TARBALL if fnmatch.fnmatch(name, p)]:
-        return None
-
-    info.uid   = info.gid   = 1000
-    info.uname = info.gname = 'wkhtmltopdf'
-    return info
-
-def build_source_tarball(config, basedir):
-    version, simple_version = get_version(basedir)
-    root_dir = os.path.realpath(os.path.join(basedir, '..'))
-    os.chdir(os.path.join(root_dir, 'qt'))
-    shell('git clean -fdx')
-    shell('git reset --hard HEAD')
-    os.chdir(root_dir)
-    shell('git clean -fdx')
-    shell('git reset --hard HEAD')
-    shell('git submodule update')
-    open('VERSION', 'w').write(version)
-    with tarfile.open('wkhtmltox-%s.tar.bz2' % version, 'w:bz2') as tar:
-        tar.add('.', 'wkhtmltox-%s/' % version, filter=_filter_tar)
-    shell('git reset --hard HEAD')
-
-# --------------------------------------------------------------- MSVC (2013 only)
-
-MSVC_LOCATION = {
-    'msvc2013': ('VS120COMNTOOLS', '12.0'),
-    'msvc2015': ('VS140COMNTOOLS', '14.0')
-}
-MSVC_RUNTIME = {
-    'msvc2013-win32': ('df7f0a73bfa077e483e51bfb97f5e2eceedfb6a3', 'http://download.microsoft.com/download/2/E/6/2E61CFA4-993B-4DD4-91DA-3737CD5CD6E3/vcredist_x86.exe'),
-    'msvc2013-win64': ('8bf41ba9eef02d30635a10433817dbb6886da5a2', 'http://download.microsoft.com/download/2/E/6/2E61CFA4-993B-4DD4-91DA-3737CD5CD6E3/vcredist_x64.exe'),
-    'msvc2015-win32': ('bfb74e498c44d3a103ca3aa2831763fb417134d1', 'https://download.microsoft.com/download/9/3/F/93FCF1E7-E6A4-478B-96E7-D4B285925B00/vc_redist.x86.exe'),
-    'msvc2015-win64': ('3155cb0f146b927fcc30647c1a904cd162548c8c', 'https://download.microsoft.com/download/9/3/F/93FCF1E7-E6A4-478B-96E7-D4B285925B00/vc_redist.x64.exe')
-}
-
-def check_msvc(config):
-    version, arch = rchop(config, '-dbg').split('-')
-    env_var, _ = MSVC_LOCATION[version]
-    if not env_var in os.environ:
-        error("%s does not seem to be installed." % version)
-
-    vcdir = os.path.join(os.environ[env_var], '..', '..', 'VC')
-    if not exists(os.path.join(vcdir, 'vcvarsall.bat')):
-        error("%s: unable to find vcvarsall.bat" % version)
-
-    if arch == 'win32' and not exists(os.path.join(vcdir, 'bin', 'cl.exe')):
-        error("%s: unable to find the x86 compiler" % version)
-
-    if arch == 'win64' and not exists(os.path.join(vcdir, 'bin', 'amd64', 'cl.exe')) \
-                       and not exists(os.path.join(vcdir, 'bin', 'x86_amd64', 'cl.exe')):
-        error("%s: unable to find the amd64 compiler" % version)
-
-    perl = get_output('perl', '-V')
-    if not perl or 'perl5' not in perl:
-        error("perl does not seem to be installed.")
-
-    nsis = get_registry_value(r'SOFTWARE\NSIS')
-    if not nsis or not exists(os.path.join(nsis, 'makensis.exe')):
-        error("NSIS does not seem to be installed.")
-
-def build_msvc(config, basedir):
-    msvc, arch = rchop(config, '-dbg').split('-')
-    env_var, reg_ver = MSVC_LOCATION[msvc]
-    vcdir = os.path.join(os.environ[env_var], '..', '..', 'VC')
-    vcarg = 'x86'
-    if arch == 'win64':
-        if exists(os.path.join(vcdir, 'bin', 'amd64', 'cl.exe')):
-            vcarg = 'amd64'
-        else:
-            vcarg = 'x86_amd64'
-
-    python = sys.executable
-    process = subprocess.Popen('("%s" %s>nul)&&"%s" -c "import os, sys; sys.stdout.write(repr(dict(os.environ)))"' % (
-        os.path.join(vcdir, 'vcvarsall.bat'), vcarg, python), stdout=subprocess.PIPE, shell=True)
-    stdout, _ = process.communicate()
-    exitcode = process.wait()
-    if exitcode != 0:
-        error("%s: unable to initialize the environment" % msvc)
-
-    os.environ.update(eval(stdout.strip()))
-
-    version, simple_version = get_version(basedir)
-    cflags  = config.endswith('-dbg') and '/MDd /Zi' or '/MD'
-    build_deplibs(config, basedir, cflags=cflags)
-
-    sha1, url = MSVC_RUNTIME[rchop(config, '-dbg')]
-    shutil.copy(download_file(url, sha1, basedir), os.path.join(basedir, config, 'vcredist.exe'))
-
-    libdir = os.path.join(basedir, config, 'deplibs')
-    qtdir  = os.path.join(basedir, config, 'qt')
-    mkdir_p(qtdir)
-
-    configure_args = qt_config('msvc',
-        '-I %s\\include' % libdir,
-        '-L %s\\lib' % libdir,
-        'OPENSSL_LIBS="-L%s\\\\lib -lssleay32 -llibeay32 -lUser32 -lAdvapi32 -lGdi32 -lCrypt32"' % libdir.replace('\\', '\\\\'))
-
-    build_qt(qtdir, 'nmake', '%s\\..\\qt\\configure.exe %s' % (basedir, configure_args))
-
-    appdir = os.path.join(basedir, config, 'app')
-    mkdir_p(appdir)
-    os.chdir(appdir)
-    rmdir('bin')
-    mkdir_p('bin')
-
-    os.environ['WKHTMLTOX_VERSION'] = version
-
-    shell('%s\\bin\\qmake %s\\..\\wkhtmltopdf.pro' % (qtdir, basedir))
-    shell('nmake')
-
-    if config.endswith('-dbg'):
-        return
-
-    makensis = os.path.join(get_registry_value(r'SOFTWARE\NSIS'), 'makensis.exe')
-    os.chdir(os.path.join(basedir, '..'))
-    shell('"%s" /DVERSION=%s /DSIMPLE_VERSION=%s /DTARGET=%s /DMSVC=%s /DARCH=%s wkhtmltox.nsi' % \
-            (makensis, version, nsis_version(simple_version), config, reg_ver, arch))
-
-# ------------------------------------------------ MinGW-W64 Cross Environment
-
-MINGW_W64_PREFIX = {
-    'mingw-w64-cross-win32' : 'i686-w64-mingw32',
-    'mingw-w64-cross-win64' : 'x86_64-w64-mingw32',
-}
-
-def check_mingw64_cross(config):
-    shell('%s-gcc --version' % MINGW_W64_PREFIX[rchop(config, '-dbg')])
-
-def build_mingw64_cross(config, basedir):
-    version, simple_version = get_version(basedir)
-    build_deplibs(config, basedir, mingw_w64=MINGW_W64_PREFIX.get(rchop(config, '-dbg')))
-
-    libdir = os.path.join(basedir, config, 'deplibs')
-    qtdir  = os.path.join(basedir, config, 'qt')
-
-    configure_args = qt_config('mingw-w64-cross',
-        '--prefix=%s'   % qtdir,
-        '-I%s/include'  % libdir,
-        '-L%s/lib'      % libdir,
-        '-device-option CROSS_COMPILE=%s-' % MINGW_W64_PREFIX[rchop(config, '-dbg')])
-
-    os.environ['OPENSSL_LIBS'] = '-lssl -lcrypto -L%s/lib -lws2_32 -lgdi32 -lcrypt32' % libdir
-
-    mkdir_p(qtdir)
-    os.chdir(qtdir)
-
-    build_qt(qtdir, 'make -j%d' % CPU_COUNT,
-        '%s/../qt/configure %s' % (basedir, configure_args))
-
-    appdir = os.path.join(basedir, config, 'app')
-    mkdir_p(appdir)
-    os.chdir(appdir)
-    shell('rm -f bin/*')
-
-    # set up cross compiling prefix correctly
-    os.environ['WKHTMLTOX_VERSION'] = version
-    shell('%s/bin/qmake -set CROSS_COMPILE %s-' % (qtdir, MINGW_W64_PREFIX[rchop(config, '-dbg')]))
-    shell('%s/bin/qmake -spec win32-g++-4.6 %s/../wkhtmltopdf.pro' % (qtdir, basedir))
-    shell('make')
-    shutil.copy('bin/libwkhtmltox0.a', 'bin/wkhtmltox.lib')
-
-    if config.endswith('-dbg'):
-        return
-
-    os.chdir(os.path.join(basedir, '..'))
-    shell('makensis -DVERSION=%s -DSIMPLE_VERSION=%s -DTARGET=%s -DMINGW -DARCH=%s wkhtmltox.nsi' % \
-            (version, nsis_version(simple_version), config, rchop(config, '-dbg').split('-')[-1]))
-
-# -------------------------------------------------- Linux schroot environment
-
-def check_linux_generic(config):
-    chroot_env = ('amd64' in config) and 'generic-amd64' or 'generic-i386'
-    chroot_shell(chroot_env, 'gcc --version')
-
-def build_linux_generic(config, basedir):
-    chroot_env = ('amd64' in config) and 'generic-amd64' or 'generic-i386'
-    os.chdir(os.path.realpath(os.path.join(basedir, '..')))
-    chroot_shell(chroot_env, 'python scripts/build.py %s -chroot-build' % ' '.join(sys.argv[1:]))
-
-    if config.endswith('-dbg'):
-        return
-
-    version, simple_version = get_version(basedir)
-    os.chdir(os.path.join(basedir, config))
-    shell('XZ_OPT=-9 tar Jcf ../%s-%s_%s.tar.xz wkhtmltox/' % (PROJECT_SETUP['name'], version, config))
-
-def chroot_build_linux_generic(config, basedir):
-    version, simple_version = get_version(basedir)
-    build_deplibs(config, basedir)
-
-    libdir = os.path.join(basedir, config, 'deplibs')
-    qtdir  = os.path.join(basedir, config, 'qt')
-    mkdir_p(qtdir)
-
-    configure_args = qt_config('posix',
-        '--prefix=%s'   % qtdir,
-        '-I%s/include'  % libdir,
-        '-L%s/lib'      % libdir,
-        '-DOPENSSL_NO_SSL2')
-    build_qt(qtdir, 'make -j%d' % CPU_COUNT, '%s/../qt/configure %s' % (basedir, configure_args))
-
-    app    = os.path.join(basedir, config, 'app')
-    dist   = os.path.join(basedir, config, 'wkhtmltox')
-
-    mkdir_p(app)
-    rmdir(dist)
-    mkdir_p(dist)
-
-    os.chdir(app)
-    shell('rm -f bin/*')
-
-    os.environ['WKHTMLTOX_VERSION'] = version
-    shell('%s/bin/qmake %s/../wkhtmltopdf.pro' % (qtdir, basedir))
-    shell('make install INSTALL_ROOT=%s' % dist)
-
-# -------------------------------------------------- POSIX local environment
-
-def check_posix_local(config):
-    pass
-
-def build_posix_local(config, basedir):
-    version, simple_version = get_version(basedir)
-
-    app    = os.path.join(basedir, config, 'app')
-    qt     = os.path.join(basedir, config, 'qt')
-    dist   = os.path.join(basedir, config, 'wkhtmltox-%s' % version)
-    make   = get_output('which', 'gmake') and 'gmake' or 'make'
-
-    mkdir_p(qt)
-    mkdir_p(app)
-
-    rmdir(dist)
-    mkdir_p(os.path.join(dist, 'bin'))
-    mkdir_p(os.path.join(dist, 'include', 'wkhtmltox'))
-    mkdir_p(os.path.join(dist, 'lib'))
-
-    build_qt(qt, '%s -j%d' % (make, CPU_COUNT),
-        '%s/../qt/configure %s' % (basedir, qt_config('posix', '--prefix=%s' % qt)))
-
-    os.chdir(app)
-    shell('rm -f bin/*')
-    os.environ['WKHTMLTOX_VERSION'] = version
-    shell('../qt/bin/qmake ../../../wkhtmltopdf.pro')
-    shell('%s -j%d' % (make, CPU_COUNT))
-    shell('%s install INSTALL_ROOT=../wkhtmltox-%s' % (make, version))
-
-    if config.endswith('-dbg'):
-        return
-
-    os.chdir(os.path.join(basedir, config))
-    shell('tar -c -v -f ../wkhtmltox-%s_local-%s.tar wkhtmltox-%s/' % (version, platform.node(), version))
-    shell('xz --compress --force --verbose -9 ../wkhtmltox-%s_local-%s.tar' % (version, platform.node()))
-
-# --------------------------------------------------------------- OS X
-
-OSXPKG_IDENTIFIER = 'org.wkhtmltopdf'
-OSXPKG_PREFIX     = '/usr/local/share/wkhtmltox-installer'
-
-def check_osx(config):
-    if not platform.system() == 'Darwin' or not platform.mac_ver()[0]:
-        error('This can only be run on a OS X system!')
-
-    if not get_output('xcode-select', '--print-path'):
-        error('Xcode is not installed, aborting.')
-
-    if not config.endswith('-dbg') and not get_output('which', 'fpm'):
-        error('Please install fpm by running "sudo gem install fpm --no-ri --no-rdoc"')
-
-def build_osx(config, basedir):
-    version, simple_version = get_version(basedir)
-    build_deplibs(config, basedir)
-
-    osxver    = platform.mac_ver()[0][:platform.mac_ver()[0].rindex('.')]
-    framework = config.split('-')[1]
-    if osxver == '10.6':
-        osxcfg = '-%s -platform macx-g++42' % framework
-    else:
-        osxcfg = '-%s -platform unsupported/macx-clang' % framework
-
-    flags = ''
-    if framework == 'carbon' and osxver != '10.6':
-        for item in ['CFLAGS', 'CXXFLAGS']:
-            flags += '"QMAKE_%s += %s" ' % (item, '-fvisibility=hidden -fvisibility-inlines-hidden')
-
-    def get_dir(name):
-        return os.path.join(basedir, config, name)
-
-    configure_args = qt_config('osx', osxcfg,
-        '--prefix=%s'   % get_dir('qt'),
-        '-I %s/include' % get_dir('deplibs'),
-        '-L %s/lib'     % get_dir('deplibs'))
-
-    rmdir(get_dir('dist'))
-    rmdir(get_dir('pkg'))
-    mkdir_p(get_dir('qt'))
-    mkdir_p(get_dir('app'))
-    mkdir_p(get_dir('pkg'))
-
-    build_qt(get_dir('qt'), 'make -j%d' % CPU_COUNT, '../../../qt/configure %s' % configure_args)
-
-    os.chdir(get_dir('app'))
-    shell('rm -f bin/*')
-    os.environ['WKHTMLTOX_VERSION'] = version
-    shell('../qt/bin/qmake %s ../../../wkhtmltopdf.pro' % flags)
-    shell('make -j%d' % CPU_COUNT)
-
-    if osxver not in ['10.6', '10.7']:
-        for item in ['wkhtmltoimage', 'wkhtmltopdf', 'libwkhtmltox.%s.dylib' % simple_version]:
-            shell(' '.join([
-                'install_name_tool', '-change',
-                '/System/Library/Frameworks/CoreText.framework/Versions/A/CoreText',
-                '/System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/CoreText.framework/CoreText',
-                'bin/'+item]))
-
-    shell('make install INSTALL_ROOT=%s' % get_dir('dist'))
-
-    if config.endswith('-dbg'):
-        return
-
-    def _osx_tar(info):
-        info.uid   = info.gid   = 0
-        info.uname = 'root'
-        info.gname = 'wheel'
-        return info
-
-    # create tarball for application and copy xz
-    os.chdir(get_dir('dist'))
-    with tarfile.open('../pkg/app.tar', 'w') as tar:
-        tar.add('.', './', filter=_osx_tar)
-    xz = os.path.join(get_dir('deplibs'), 'bin', 'xz')
-    shell('%s --compress --force --verbose -9 ../pkg/app.tar' % xz)
-    shutil.copy(xz, '../pkg/')
-
-    with open('../pkg/uninstall-wkhtmltox', 'w') as f:
-        os.chmod('../pkg/uninstall-wkhtmltox', 0o755)
-        f.write("""#!/bin/bash
-if [ "$(id -u)" != "0" ]; then
-   echo "This script must be run as sudo uninstall-wkhtmltox" 1>&2
-   exit 1
-fi
-cd /usr/local
-if which pkgutil >/dev/null; then
-    pkgutil --forget %s.%s
-fi
-""" % (OSXPKG_IDENTIFIER, PROJECT_SETUP['name']))
-        for root, dirs, files in os.walk(get_dir('dist')):
-            for file in files:
-                f.write('echo REMOVE /usr/local/%(name)s && rm -f %(name)s\n' % { 'name': os.path.relpath(os.path.join(root, file)) })
-        f.write('echo REMOVE /usr/local/include/wkhtmltox && rm -df /usr/local/include/wkhtmltox\n')
-        f.write('echo REMOVE /usr/local/bin/uninstall-wkhtmltox && rm -f /usr/local/bin/uninstall-wkhtmltox')
-
-    open('../extract.sh', 'w').write("""#!/bin/bash
-TGTDIR=/usr/local
-BASEDIR=%s
-cd $BASEDIR
-./xz --decompress app.tar.xz
-cd $TGTDIR
-tar oxf $BASEDIR/app.tar
-mv $BASEDIR/uninstall-wkhtmltox $TGTDIR/bin
-rm -fr $BASEDIR
-""" % OSXPKG_PREFIX)
-
-    os.chdir(os.path.join(basedir, config))
-    fpm_args = '--force --prefix %s --category utils -s dir -C pkg' % OSXPKG_PREFIX
-    for key in PROJECT_SETUP:
-        fpm_args += ' --%s "%s"' % (key, PROJECT_SETUP[key])
-    fpm_args += ' --osxpkg-identifier-prefix "%s" --version "%s"' % (OSXPKG_IDENTIFIER, version)
-    fpm_args += ' -t osxpkg --package ../%s-%s_%s.pkg' % (PROJECT_SETUP['name'], version, config)
-    fpm_args += ' --after-install extract.sh .'
-    shell('fpm %s' % fpm_args)
-
-# --------------------------------------------------------------- command line
-
-def usage(exit_code=2):
-    message("Usage: scripts/build.py <target> [-clean] [-debug]\n\nThe supported targets are:\n")
-    opts = list(BUILDERS.keys())
-    opts.sort()
-    for opt in opts:
-        message('* %s\n' % opt)
-    sys.exit(exit_code)
-
-def main():
-    rootdir = os.path.realpath(os.path.join(os.path.dirname(os.path.realpath(__file__)), '..'))
-    basedir = os.path.join(rootdir, 'static-build')
-
-    if not exists(os.path.join(rootdir, 'qt', 'configure')):
-        error('error: source code for Qt not available, cannot proceed.')
-
-    if len(sys.argv) == 1:
-        usage(0)
-
-    config = sys.argv[1]
-    if config not in BUILDERS:
-        usage()
-
-    for arg in sys.argv[2:]:
-        if not arg in ['-clean', '-debug', '-chroot-build']:
-            usage()
-
-    final_config = config
-    if '-debug' in sys.argv[2:]:
-        final_config += '-dbg'
-        QT_CONFIG['common'].extend(['remove:-release', 'remove:-webkit', '-debug', '-webkit-debug'])
-
-    if '-clean' in sys.argv[2:]:
-        rmdir(os.path.join(basedir, final_config))
-
-    os.chdir(rootdir)
-    if '-chroot-build' in sys.argv[2:]:
-        globals()['chroot_build_%s' % BUILDERS[config]](final_config, basedir)
-        return
-
-    globals()['check_%s' % BUILDERS[config]](final_config)
-    globals()['build_%s' % BUILDERS[config]](final_config, basedir)
-
-if __name__ == '__main__':
-    main()

+ 0 - 74
scripts/release.py

@@ -1,74 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2014 wkhtmltopdf authors
-#
-# This file is part of wkhtmltopdf.
-#
-# wkhtmltopdf is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Lesser 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 Lesser General Public License
-# along with wkhtmltopdf.  If not, see <http:#www.gnu.org/licenses/>.
-
-import os, sys, platform, subprocess, build
-
-PLATFORM_TARGETS = {
-    'Windows': ['msvc2015-win64', 'msvc2015-win32'],
-    'Darwin':  ['osx-cocoa-x86-64', 'osx-carbon-i386'],
-    'Linux':   ['source-tarball', 'linux-generic-amd64', 'linux-generic-i386',
-                'mingw-w64-cross-win64', 'mingw-w64-cross-win32']
-}
-
-def build_target(basedir, target):
-    build.message('*************** building: %s\n\n' % target)
-    build.mkdir_p(basedir)
-    log  = open(os.path.join(basedir, '%s.log' % target), 'w')
-    proc = subprocess.Popen([sys.executable, 'scripts/build.py', target],
-        stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.STDOUT,
-        bufsize=1, cwd=os.path.join(basedir, '..'))
-
-    proc.stdin.close()
-    for line in iter(proc.stdout.readline, ''):
-        line = line.rstrip()+'\n'
-        if '\r' in line:
-            line = line[1+line.rindex('\r'):]
-        build.message(line)
-        log.write(line)
-        log.flush()
-    proc.stdout.close()
-    return proc.wait() == 0
-
-def main():
-    rootdir = os.path.realpath(os.path.join(os.path.dirname(os.path.realpath(__file__)), '..'))
-    basedir = os.path.join(rootdir, 'static-build')
-
-    os.chdir(os.path.join(rootdir, 'qt'))
-    build.shell('git clean -fdx')
-    build.shell('git reset --hard HEAD')
-    os.chdir(rootdir)
-    build.shell('git clean -fdx')
-    build.shell('git reset --hard HEAD')
-    build.shell('git submodule update')
-
-    status = {}
-    for target in PLATFORM_TARGETS.get(platform.system(), []):
-        if not build_target(basedir, target):
-            status[target] = 'failed'
-            continue
-        status[target] = 'success'
-        build.rmdir(os.path.join(basedir, target))
-
-    build.message('\n\n\nSTATUS\n======\n')
-    width = max([len(target) for target in status])
-    for target in sorted(status.keys()):
-        build.message('%s: %s\n' % (target.ljust(width), status[target]))
-
-if __name__ == '__main__':
-    main()

+ 0 - 135
wkhtmltox.nsi

@@ -1,135 +0,0 @@
-!include "MUI2.nsh"
-!include "x64.nsh"
-
-Name             "wkhtmltox ${VERSION}"
-OutFile          "static-build\wkhtmltox-${VERSION}_${TARGET}.exe"
-!if "${ARCH}" == "win64"
-InstallDir       "$PROGRAMFILES64\wkhtmltopdf"
-!else
-InstallDir       "$PROGRAMFILES\wkhtmltopdf"
-!endif
-VIProductVersion "${SIMPLE_VERSION}"
-VIAddVersionKey  "ProductName"     "wkhtmltox"
-VIAddVersionKey  "FileDescription" "wkhtmltox ${VERSION}"
-VIAddVersionKey  "LegalCopyright"  "wkhtmltopdf authors"
-VIAddVersionKey  "FileVersion"     "${VERSION}"
-
-CRCCheck             force
-SetCompressor /SOLID lzma
-SetCompressorDictSize 64
-RequestExecutionLevel admin
-
-!insertmacro MUI_PAGE_LICENSE "LICENSE"
-!insertmacro MUI_PAGE_DIRECTORY
-!insertmacro MUI_PAGE_INSTFILES
-!insertmacro MUI_UNPAGE_CONFIRM
-!insertmacro MUI_UNPAGE_INSTFILES
-
-!insertmacro MUI_LANGUAGE "English"
-
-!macro DeleteFiles un
-Function ${un}DeleteFiles
-; remove as per old installer layout
-  Delete "$INSTDIR\libgcc_s_dw2-1.dll"
-  Delete "$INSTDIR\mingwm10.dll"
-  Delete "$INSTDIR\ssleay32.dll"
-  Delete "$INSTDIR\libeay32.dll"
-  Delete "$INSTDIR\wkhtmltopdf.exe"
-  Delete "$INSTDIR\wkhtmltoimage.exe"
-  Delete "$INSTDIR\bin\libgcc_s_sjlj-1.dll"
-  Delete "$INSTDIR\bin\libgcc_s_seh-1.dll"
-  Delete "$INSTDIR\bin\libstdc++-6.dll"
-  Delete "$INSTDIR\bin\libwinpthread-1.dll"
-; remove as per current installer layout
-  Delete "$INSTDIR\bin\wkhtmltoimage.exe"
-  Delete "$INSTDIR\bin\wkhtmltopdf.exe"
-  Delete "$INSTDIR\bin\wkhtmltox.dll"
-  Delete "$INSTDIR\lib\wkhtmltox.lib"
-  Delete "$INSTDIR\include\wkhtmltox\dllbegin.inc"
-  Delete "$INSTDIR\include\wkhtmltox\dllend.inc"
-  Delete "$INSTDIR\include\wkhtmltox\pdf.h"
-  Delete "$INSTDIR\include\wkhtmltox\image.h"
-  Delete "$INSTDIR\uninstall.exe"
-  RMDir  "$INSTDIR\bin"
-  RMDir  "$INSTDIR\include\wkhtmltox"
-  RMDir  "$INSTDIR\include"
-  RMDir  "$INSTDIR\lib"
-  RMDir  "$INSTDIR"
-FunctionEnd
-!macroend
-
-!macro CheckVCRedist
-!ifdef MSVC
-  InitPluginsDir
-  ClearErrors
-  ReadRegDWORD $R0 HKLM "SOFTWARE\Microsoft\DevDiv\vc\Servicing\${MSVC}\RuntimeMinimum" "Install"
-  IfErrors need_vcruntime
-  IntCmp $R0 1 skip_vcruntime need_vcruntime need_vcruntime
-need_vcruntime:
-    File /oname=$PLUGINSDIR\vcredist.exe static-build\${TARGET}\vcredist.exe
-skip_vcruntime:
-!endif
-!macroend
-
-!insertmacro DeleteFiles ""
-!insertmacro DeleteFiles "un."
-
-Section "Install"
-!ifdef MSVC
-  IfFileExists "$PLUGINSDIR\vcredist.exe" 0 skip_vcruntime
-  ExecWait '"$PLUGINSDIR\vcredist.exe" /install /quiet /norestart' $R9
-skip_vcruntime:
-!endif
-  Call DeleteFiles
-
-  SetOutPath "$INSTDIR"
-  SetOutPath "$INSTDIR\bin"
-  File static-build\${TARGET}\app\bin\wkhtmltoimage.exe
-  File static-build\${TARGET}\app\bin\wkhtmltopdf.exe
-  File static-build\${TARGET}\app\bin\wkhtmltox.dll
-
-  SetOutPath "$INSTDIR\lib"
-  File static-build\${TARGET}\app\bin\wkhtmltox.lib
-
-  SetOutPath "$INSTDIR\include\wkhtmltox"
-  File src\lib\*.inc
-  File src\lib\*.h
-
-  WriteRegStr HKLM "Software\wkhtmltopdf" "InstallPath" "$INSTDIR"
-  WriteRegStr HKLM "Software\wkhtmltopdf" "Version"     "${VERSION}"
-  WriteRegStr HKLM "Software\wkhtmltopdf" "DllPath"     "$INSTDIR\bin\wkhtmltox.dll"
-  WriteRegStr HKLM "Software\wkhtmltopdf" "PdfPath"     "$INSTDIR\bin\wkhtmltopdf.exe"
-  WriteRegStr HKLM "Software\wkhtmltopdf" "ImagePath"   "$INSTDIR\bin\wkhtmltoimage.exe"
-  WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\wkhtmltopdf" \
-                   "DisplayName" "wkhtmltox ${VERSION}"
-  WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\wkhtmltopdf" \
-                   "UninstallString" "$\"$INSTDIR\uninstall.exe$\""
-
-  WriteUninstaller "$INSTDIR\uninstall.exe"
-SectionEnd
-
-Section "Uninstall"
-  ${If} ${RunningX64}
-    SetRegView 64
-  ${EndIf}
-  Call un.DeleteFiles
-  DeleteRegKey HKLM "Software\wkhtmltopdf"
-  DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\wkhtmltopdf"
-SectionEnd
-
-Function .onInit
-!if "${ARCH}" == "win32"
-    !insertmacro CheckVCRedist
-  ${If} ${RunningX64}
-    SetRegView 64
-  ${EndIf}
-!endif
-!if "${ARCH}" == "win64"
-  ${If} ${RunningX64}
-    SetRegView 64
-    !insertmacro CheckVCRedist
-  ${Else}
-    Abort "Cannot install 64-bit binaries on a 32-bit OS"
-  ${EndIf}
-!endif
-FunctionEnd