diff --git a/.documentup.json b/.documentup.json
deleted file mode 100644
index c22c395..0000000
--- a/.documentup.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
-  "name": "CouchDB Glazier",
-  "theme": "v1",
-  "twitter": [
-    "dch__",
-    "couchdb"
-  ]
-}
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
index 119df6a..7bcc59c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,4 +1,5 @@
 *.swp
+*.dll
 release/*
 bits/*.gz
 bits/*.exe
@@ -10,11 +11,15 @@
 bits/*.iso
 bits/*.7z
 bits/a2session.txt
+installer/CustomAction/obj
+installer/CustomAction/Microsoft.Deployment.WindowsInstaller.xml
 /.project
 *~
+*.swp
 *.wixobj
 *.wixpdb
 *.msi
+*.pdb
 installer/couchdb.wxs
 installer/couchdbfiles.wxs
 build_*.txt
diff --git a/README.md b/README.md
index 6af18df..3cac5b8 100644
--- a/README.md
+++ b/README.md
@@ -4,7 +4,7 @@
 ease building CouchDB on Windows. It's as fully automated as
 possible, with most of the effort required only once.
 
-Glazier uses the MS Visual Studio 2013 toolchain as much as possible,
+Glazier uses the MS Visual Studio 2017 toolchain as much as possible,
 to ensure a quality Windows experience and to execute all binary
 dependencies within the same runtime.
 
@@ -14,299 +14,213 @@
 
 # Base Requirements
 
-- 64-bit Windows 7 or 8.1. *As of CouchDB 2.0 we only support a 64-bit build of CouchDB*.
-  - We like 64-bit Windows 7, 8.1 or 10 Enterprise N (missing Media Player, etc.) from MSDN.
-- If prompted, reboot after installing the .NET framework.
-- [Visual Studio 2013 x64 Community Edition](https://www.visualstudio.com/vs/older-downloads/) installed on the *C: drive*. Downloading requires a free Dev Essentials subscription from Microsoft.
-- [Chocolatey](https://chocolatey.org). From an *administrative* __cmd.exe__ command prompt, run:
+Note that the scripts you'll run will modify your system extensively. We recommend a *dedicated build machine or VM image* for this work:
 
-```dos
-@powershell -NoProfile -ExecutionPolicy Bypass -Command "iex ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1'))" && SET PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin
-```
+- 64-bit Windows 7+. *As of CouchDB 2.0 we only support a 64-bit build of CouchDB*.
+  - We like 64-bit Windows 10 Enterprise N (missing Media Player, etc.) from MSDN.
+  - Apply Windows Updates and reboot until no more updates appear.
+  - If using a VM, shutdown and snapshot your VM at this point.
 
-- Apply Windows Updates and reboot until no more updates appear.
-- If using a VM, shutdown and snapshot your VM at this point.
+# Install Dependencies
 
-# Install Pre-requisites
+Start an Administrative PowerShell console. Enter the following:
 
-## Clean Package Installs with Chocolatey, cyg-get and pip
-
-These packages install silently, without intervention. Cut and paste them
-into an **Administrator** command prompt.
-
-```dos
-cinst -y git 7zip.commandline StrawberryPerl nasm cyg-get wixtoolset python3 aria2 nodejs.install make
-cinst -y nssm --version 2.24.101-g897c7ad
-cinst -y -i elixir
-cyg-get p7zip autoconf binutils bison gcc-code gcc-g++ gdb git libtool make patchutils pkg-config readline file renameutils socat time tree util-linux wget
-pip install sphinx docutils pygments nose hypothesis
-```
-
-*Note: Do NOT install curl or help2man inside CygWin!*
-
-## Mozilla build
-Fetch the latest Mozilla Build version from
-https://wiki.mozilla.org/MozillaBuild and install to c:\mozilla-build
-with all defaults.
-
-## Make a new prompt shortcut
-
-Make a new shortcut on the desktop. The location should be:
-
-```dos
-cmd.exe /E:ON /V:ON /T:1F /K ""C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat"" amd64 && color 1f
-```
-
-Name it "CouchDB SDK Prompt".
-
-Right-click on the icon, select Properties, click the `Advanced...`
-button, and tick the `Run as administrator` checkbox. Click OK twice.
-
-I suggest you pin it to the Start menu. We'll use this all the time.
-
-Start a CouchDB SDK Prompt window and run 
-`where cl mc mt link lc rc nmake make`. Make sure the output matches the
-following:
-
-```dos
-C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\amd64\cl.exe
-C:\Program Files (x86)\Windows Kits\8.1\bin\x64\mc.exe
-C:\Program Files (x86)\Windows Kits\8.1\bin\x86\mc.exe
-C:\Program Files (x86)\Windows Kits\8.1\bin\x64\mt.exe
-C:\Program Files (x86)\Windows Kits\8.1\bin\x86\mt.exe
-C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\amd64\link.exe
-C:\tools\cygwin\bin\link.exe
-C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools\x64\lc.exe
-C:\Program Files (x86)\Windows Kits\8.1\bin\x64\rc.exe
-C:\Program Files (x86)\Windows Kits\8.1\bin\x86\rc.exe
-C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\amd64\nmake.exe
-C:\ProgramData\chocolatey\bin\make.exe
-C:\tools\cygwin\bin\make.exe
-```
-
-Stop here if your results are not *identical*. If you are unable to
-reproduce these results, please open an issue on this repository for
-assistance.
-
-## Set up required convenience links & environment variable
-
-In the CouchDB SDK Prompt, run the following commands:
-
-```dos
-mkdir c:\relax    
-cd c:\relax
-rd /s/q SDK VC nasm inno5 nsis strawberry
-mklink /j c:\relax\bin c:\relax\glazier\bin
-mklink /j c:\relax\nasm "c:\Program Files (x86)\NASM"
-mklink /j c:\relax\SDK "c:\Program Files (x86)\Windows Kits\8.1"
-mklink /j c:\relax\VC "C:\Program Files (x86)\Microsoft Visual Studio 12.0"
-mklink /j c:\openssl c:\relax\openssl
-setx RELAX c:\relax
-```
-
-Close all open command prompts. Now we're ready to go!
-
-# Building CouchDB Pre-requisites
-
-## Downloading glazier and dependency sources
-
-Open a new `CouchDB SDK Prompt` and run the following:
-
-```dos
-cd c:\relax
-git config --global core.autocrlf input
+```powershell
+mkdir C:\Relax\
+cd C:\Relax\
+Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
+choco feature enable -n allowGlobalConfirmation
+choco install git
 git clone https://github.com/apache/couchdb-glazier
-c:\relax\bin\aria2c --force-sequential=false --max-connection-per-server=5 --check-certificate=false --auto-file-renaming=false --allow-overwrite=true --input-file=couchdb-glazier/downloads.md --max-concurrent-downloads=5 --dir=bits --save-session=bits/a2session.txt
-color 1f
+&.\couchdb-glazier\bin\install_dependencies.ps1
 ```
 
-As of 2017-07-08, this will download the source for the following versions of our dependencies:
+You should go get lunch. The last step will take over an hour, even on a speedy Internet connection.
 
-* MS Visual C++ x64 Redistributable for VC12 with patches
-* OpenSSL 1.0.2l
-* curl 7.49.1
-* Erlang:
-  * 17.5
-  * 18.3
-  * 19.3
-* ICU4C 57.1 (*Note*: this is the last version to support building in VS2013)
-* SpiderMonkey 1.8.5
+At this point, you should have the following installed:
 
+* Visual Studio 2017 (Build Tools, Visual C++ workload, native desktop workload)
+* Windows 10 SDK (10.1)
+* NodeJS (LTS version)
+* wget.exe
+* NASM
+* Cyg-get (for cygwin)
+* WiX Toolset
+* Python 3
+  * Python packages sphinx, docutils, pygments, nose, hypothesis, and `sphinx_rtd_theme`
+* GNU Make
+* NSSM
+* GPG4Win (for signing releases)
+* checksum
+* archiver
+* Dependency Walker
+* unzip
+* NSIS
+* NuGet
+* VSSetup
+* MozillaBuild setup (3.3)
+* VCPkg (https://github.com/Microsoft/vcpkg), which built and installed:
+  * OpenSSL (at time of writing, 1.1.1)
+  * ICU (at time of writing, 61)
+  * libcurl (at time of writing, 7.68.0)
+* Cygwin (used for building Erlang), plus some packages required for Erlang builds
 
-## Build & Test 64-bit OpenSSL
+# Building Erlang
 
-In the same `CouchDB SDK Prompt`, run the following:
+This section is not presently automated because it requires switching between PowerShell
+and Cygwin. It should be possible to automate (PRs welcome!)
 
-```dos
-cd %RELAX%\bin && build_openssl.cmd
+We generally need to build a version of Erlang that is not distributed directly
+by Ericsson. This may be because we require patches that are released after the
+binaries are built.
+
+For CouchDB 3.0, we build against Erlang 20.3.8.25.
+
+In the same PowerShell session, enter the following:
+
+```powershell
+cd c:\relax
+git clone https://github.com/erlang/otp
+cd otp
+git checkout OTP-20.3.8.25
+cygwin
+export PATH="/cygdrive/c/Program Files (x86)/Microsoft SDKs/Windows/v10.0A/bin/NETFX 4.8 Tools/x64:/cygdrive/c/Program Files (x86)/Microsoft Visual Studio/2017/BuildTools/VC/Tools/MSVC/14.16.27023/bin/HostX64/x64:/cygdrive/c/Program Files (x86)/NSIS:$PATH"
+which cl link mc lc mt nmake rc
 ```
 
-Close your `CouchDB SDK Prompt`.
+This should produce the following output:
 
-## Build 64-bit libcurl
-
-Open a new `CouchDB SDK Prompt` and run the following:
-
-```dos
-cd %RELAX%\bin && build_curl.cmd
+```
+/cygdrive/c/Program Files (x86)/Microsoft Visual Studio/2017/BuildTools/VC/Tools/MSVC/14.16.27023/bin/HostX64/x64/cl
+/cygdrive/c/Program Files (x86)/Microsoft Visual Studio/2017/BuildTools/VC/Tools/MSVC/14.16.27023/bin/HostX64/x64/link
+/cygdrive/c/Program Files (x86)/Windows Kits/10/bin/10.0.18362.0/x64/mc
+/cygdrive/c/Program Files (x86)/Microsoft SDKs/Windows/v10.0A/bin/NETFX 4.8 Tools/x64/lc
+/cygdrive/c/Program Files (x86)/Windows Kits/10/bin/10.0.18362.0/x64/mt
+/cygdrive/c/Program Files (x86)/Microsoft Visual Studio/2017/BuildTools/VC/Tools/MSVC/14.16.27023/bin/HostX64/x64/nmake
+/cygdrive/c/Program Files (x86)/Windows Kits/10/bin/10.0.18362.0/x64/rc
 ```
 
-## Build 64-bit ICU
+Continue by entering the following. This takes a while, maybe 30-60 minutes at the `otp_build` steps, so be sure to have your favourite beverage on hand while you watch.
 
-In the same `CouchDB SDK Prompt` run the following:
-
-```dos
-cd %RELAX%\bin && build_icu.cmd
 ```
-
-Close the window.
-
-## Start a UNIX-friendly shell with MS compilers
-
-1. Start your `CouchDB SDK Prompt` as above
-2. Launch a cygwin erl-ified shell via `c:\relax\bin\shell.cmd`
-3. Select 18.3 (unless you know what you are doing!)
-4. Select `b for bash prompt`.
-
-For more detail on why this is necessary, see
-[UNIX-friendly shell details](#unix-friendly-shell-details) below.
-
-## Unpack, configure and build Erlang/OTP 18.3
-
-At the bash prompt, enter the following commands:
-
-```bash
-ln -s /cygdrive/c/relax /relax
-cd .. && tar xzf /relax/bits/otp_src_18.3.tar.gz
-cd $ERL_TOP
-echo "skipping gs" > lib/gs/SKIP
-echo "skipping wx" > lib/wx/SKIP
-echo "skipping ic" > lib/ic/SKIP
-echo "skipping jinterface" > lib/jinterface/SKIP
-eval `$ERL_TOP/otp_build env_win32 x64`
-```
-
-At this point, check your paths. Run `which cl link mc lc mt nmake rc`.
-The output should match the following:
-
-```bash
-/cygdrive/c/PROGRA~2/MICROS~1.0/VC/BIN/amd64/cl
-/cygdrive/c/PROGRA~2/MICROS~1.0/VC/BIN/amd64/link
-/cygdrive/c/PROGRA~2/WI3CF2~1/8.1/bin/x64/mc
-/cygdrive/c/PROGRA~2/MICROS~1/Windows/v8.1A/bin/NETFX4~1.1TO/x64/lc
-/cygdrive/c/PROGRA~2/WI3CF2~1/8.1/bin/x64/mt
-/cygdrive/c/PROGRA~2/MICROS~1.0/VC/BIN/amd64/nmake
-/cygdrive/c/PROGRA~2/WI3CF2~1/8.1/bin/x64/rc
-```
-
-If it does not, stop and diagnose.
-
-Now you can proceed to build Erlang, closing the window when
-done:
-
-```bash
-erl_config.sh
-# Ensure OpenSSL is found by the configure script.
-# If you see any warnings, stop and diagnose.
-erl_build.sh
-exit
+cd /cygdrive/c/relax/otp
+eval `./otp_build env_win32 x64`
+./otp_build autoconf 2>&1 | tee build_autoconf.txt
+./otp_build configure --with-ssl=/cygdrive/c/relax/vcpkg/installed/x64-windows --without-javac --without-debugger --without-wx --without-ic --without-odbc --without-et --without-cosEvent --without-cosEventDomain --without-cosFileTransfer --without-cosNotification --without-cosProperty --without-cosTime --without-cosTransactions --without-orber --without-observer 2>&1 | tee build_configure.txt
+./otp_build boot -a  2>&1 | tee build_boot.txt
+./otp_build release -a  2>&1 | tee build_release.txt
+./otp_build installer_win32  2>&1 | tee build_installer_win32.txt
+release/win32/otp_win64_*.exe /S
 exit
 ```
 
-## Build Spidermonkey JavaScript 1.8.5
+You now have a full install of Erlang on your system.
 
-Spidermonkey needs to be compiled with the Mozilla Build chain.
-To build it with VS2013 requires a few patches contained in this
-repository.
+# Installing Elixir
 
-Start by launching a fresh `CouchDB SDK prompt`, then setup the
-Mozilla build environment with the command:
+CouchDB uses Elixir for tests. If you intend to run the test suite (you should!), install
+Elixir now by running the following in the same PowerShell prompt:
 
-```dos
-call c:\mozilla-build\start-shell-msvc2013-x64.bat
+```
+wget.exe https://github.com/elixir-lang/elixir/releases/download/v1.9.4/Precompiled.zip
+arc unarchive .\Precompiled.zip
+copy .\Precompiled\* 'C:\Program Files\erl9.3.3.14\' -Recurse  -Force
+del Precompiled -Recurse
+del Precompiled.zip
 ```
 
-Now, ensure the output of `which cl lc link mt rc make` matches
-the following:
+# Building SpiderMonkey
 
-```dos
-/c/Program Files (x86)/Microsoft Visual Studio 12.0/VC/BIN/amd64/cl.exe
-/c/Program Files (x86)/Microsoft SDKs/Windows/v8.1A/bin/NETFX 4.5.1 Tools/x64/lc.exe
-gram Files (x86)/Microsoft Visual Studio 12.0/VC/BIN/amd64/link.exe
-/c/Program Files (x86)/Windows Kits/8.1/bin/x64/mt.exe
-/c/Program Files (x86)/Windows Kits/8.1/bin/x64/rc.exe
-/local/bin/make.exe
+This section is not currently automated, due to the need for Mozilla's separate build
+environment. It should be possible to automate (PRs welcome!)
+
+From the same PowerShell prompt, enter the following:
+
+```
+C:\mozilla-build\start-shell.bat
 ```
 
-If this does not match *exactly*, stop and diagnose.
+At the MozillaBuild prompt, enter the following:
 
-Now, proceed to patch and build SpiderMonkey 1.8.5:
-
-```bash
+```
+C:\mozilla-build\start-shell.bat
 cd /c/relax
-tar xzf bits/js185-1.0.0.tar.gz
-patch -p0 </c/relax/couchdb-glazier/bits/js185-msvc2013.patch
-cd js-1.8.5/js/src
+git clone https://github.com/mozilla/gecko-dev
+cd gecko-dev
+git checkout esr60
+cd js/src
+sed -i -E "s/(VC\.Tools\.x86\.x64')/\1, '-products', '*'/g" ../../build/moz.configure/toolchain.configure
 autoconf-2.13
-./configure --enable-static --enable-shared-js --disable-debug-symbols --disable-debug --disable-debugger-info-modules --target=x86_64-pc-mingw32 --host=x86_64-pc-mingw32
-make
+mkdir build_OPT.OBJ
+cd build_OPT.OBJ
+../configure --disable-ctypes --disable-ion --disable-jemalloc --enable-optimize --enable-hardening --with-intl-api --build-backends=RecursiveMake --with-visual-studio-version=2017 --with-system-icu --disable-debug --enable-gczeal --target=x86_64-pc-mingw32 --host=x86_64-pc-mingw32 --prefix=/c/relax/vcpkg/installed/x64-windows
+mozmake
+exit
 ```
 
-If desired, tests can be run at this point. This is optional,
-takes a while, and the math-jit-tests may fail. For more detail
-as to why, see https://bugzilla.mozilla.org/show_bug.cgi?id=1076670
-Also, one jsapi test has been disabled that crashes; this exercises
-a call CouchDB doesn't use.
+The `sed` command adds support for building with just the VS Build Tools, which are
+sufficient for just SpiderMonkey. (Otherwise, you need to download an additional 9GB of
+Visual Studio. Bleah.) The build should take about 15 minutes.
+
+Back in PowerShell, copy the binaries to where our build process expects them:
+
+```
+copy C:\relax\gecko-dev\js\src\build_OPT.OBJ\js\src\build\*.pdb C:\relax\vcpkg\installed\x64-windows\bin
+copy C:\relax\gecko-dev\js\src\build_OPT.OBJ\dist\bin\*.dll C:\relax\vcpkg\installed\x64-windows\bin
+copy C:\relax\gecko-dev\js\src\build_OPT.OBJ\dist\include\* C:\relax\vcpkg\installed\x64-windows\include -Recurse -ErrorAction SilentlyContinue
+```
+
+# Building CouchDB itself
+
+You're finally ready. You should snapshot your VM at this point!
+
+Open a new PowerShell window. Set up your shell correctly (this step works if you've
+closed your PowerShell window before any of the previous steps, too):
+
+```
+&c:\relax\couchdb-glazier\bin\shell.ps1
+```
+
+Then, start the process:
+
+```
+cd c:\relax
+git clone https://github.com/apache/couchdb
+cd couchdb
+git checkout <tag or branch of interest goes here>
+&.\configure.ps1 -WithCurl -SpiderMonkeyVersion 60
+make -f Makefile.win
+```
+
+You now have built CouchDB!
 
 To run the tests:
 
-```bash
-make check
+```
+make -f Makefile.win check
 ```
 
-Close the prompt window by entering `exit` twice.
+Finally, to build a CouchDB installer:
 
-## Building CouchDB itself
-
-Start a new `SDK prompt`, then run `c:\relax\bin\shell.cmd`.
-Select `Erlang 18.3` and `w for a Windows prompt`.
-Then, run the following commands to download and build CouchDB
-from the master repository:
-
-```dos
-cd \relax && git clone https://github.com/apache/couchdb
-cd couchdb
-# optionally, switch to a different tag or branch for building with:
-# git checkout --track origin/2.0.x
-git clean -fdx && git reset --hard
-powershell -ExecutionPolicy Bypass .\configure.ps1 -WithCurl
-make check
+```
+make -f Makefile.win release
+cd c:\relax
+&couchdb-glazier\bin\build_installer.ps1
 ```
 
-This will build a development version of CouchDB runnable via
-
-```dos
-dev\run <-n1> <--with-admin-party-please>
-```
-
-To build a self-contained CouchDB installation (also known as an Erlang
-_release_), after running the above use:
-
-```dos
-    make release
-```
-
-To build an installer using WiX to create a full Windows .msi, run:
-
-```dos
-    make release
-    cd \relax\glazier
-    bin\build_installer.cmd
-```
+The installer will be placed in your current working directory.
 
 You made it! Time to relax. :D
 
-# Appendix
+If you're a release engineer, you may find the following commands useful too:
+
+```
+checksum -t sha256 apache-couchdb.#.#.#-RC#.tar.gz
+checksum -t sha512 apache-couchdb.#.#.#-RC#.tar.gz
+gpg --verify apache-couchdb.#.#.#-RC#.tar.gz.asc
+```
+
+# Appendices
 
 ## Why Glazier?
 
@@ -330,19 +244,10 @@
 3. cygwin path for other build tools like make, autoconf, libtool
 4. the remaining windows system path
 
-It seems this is a challenge for most environments, so `glazier` just
-assumes you're using [chocolatey] and takes care of the rest.
+It seems this is a challenge for most environments, so `glazier` gets this all right for
+you by running the MSVC environment, then tacking on the things Erlang expects at the end
+of the path.
 
-Alternatively, you can launch your own cmd prompt, and ensure that your system
-path is correct first in the win32 side before starting cygwin. Once in cygwin
-go to the root of where you installed erlang, and run the Erlang/OTP script:
-
-        eval `./otp_build env_win32 x64`
-        echo $PATH | /bin/sed 's/:/\n/g'
-        which cl link mc lc mt nmake rc
-
-Confirm that output of `which` returns only MS versions from VC++ or the SDK.
-This is critical and if not correct will cause confusing errors much later on.
 Overall, the desired order for your $PATH is:
 
 - Erlang build helper scripts
@@ -354,3 +259,33 @@
 - Various settings form the `otp_build` script
 
 More details are at [erlang INSTALL-Win32.md on github](https://github.com/erlang/otp/blob/master/HOWTO/INSTALL-WIN32.md)
+
+## Windows silent installs
+
+Here are some sample commands, supporting the new features of the 3.0 installer.
+
+Install CouchDB without a service, but with an admin user:password of `admin:hunter2`:
+
+```
+msiexec /i apache-couchdb-3.0.0.msi /quiet ADMINUSER=admin ADMINPASSWORD=hunter2 /norestart
+```
+
+The same as above, but also install and launch CouchDB as a service:
+
+```
+msiexec /i apache-couchdb-3.0.0.msi /quiet INSTALLSERVICE=1 ADMINUSER=admin ADMINPASSWORD=hunter2 /norestart
+```
+
+Unattended uninstall of CouchDB:
+
+```
+msiexec /x apache-couchdb-3.0.0.msi /quiet /norestart
+```
+
+Unattended uninstall if the installer file is unavailable:
+
+```
+msiexec /x {4CD776E0-FADF-4831-AF56-E80E39F34CFC} /quiet /norestart
+```
+
+Add `/l* log.txt` to any of the above to generate a useful logfile for debugging.
diff --git a/THANKS b/THANKS
index 3f5708f..1cf752a 100644
--- a/THANKS
+++ b/THANKS
@@ -2,5 +2,8 @@
 
 THANKS
 ------
+Dave Cottlehuber
 Joan Touzet
 Oliver Tonnhofer
+Nick North
+Peng Hui Jiang
diff --git a/bin/build_curl.cmd b/bin/build_curl.cmd
deleted file mode 100755
index 2a4b2e0..0000000
--- a/bin/build_curl.cmd
+++ /dev/null
@@ -1,45 +0,0 @@
-::setlocal
-path=%path%;%relax%\openssl\bin;
-
-for %%i in ("%relax%\bits\curl-*.zip") do set curl_ver=%%~ni
-setx CURL_VER %curl_ver%
-set CURL_VER=%curl_ver%
-setx CURL_SRC %curl_src%
-set CURL_SRC=%RELAX%\%curl_ver%
-setx CURL_PATH %curl_path%
-set CURL_PATH=%relax%\curl
-
-if not defined SSL_PATH echo OpenSSL not built && goto eof
-::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-:: clean up existing installs
-:: extract bundle and name
-:: stash SSL version
-if exist %curl_path% rd /s/q %curl_path%
-if defined curl_ver rd /s/q %curl_src%
-7z x "%RELAX%\bits\curl-*.zip" -o%RELAX% -y
-
-::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-pushd %curl_src%
-:: ensure curl can find OpenSSL libraries
-set USE_SSLEAY=1
-set USE_OPENSSL=1
-set OPENSSL_PATH=%SSL_PATH%
-set INCLUDE=%INCLUDE%;%SSL_PATH%\include;%SSL_PATH%\include\openssl;
-set LIBPATH=%LIBPATH%;%SSL_PATH%\lib;
-set LIB=%LIB%;%SSL_PATH%\lib;
-pushd %curl_src%
-:: this make target works for vc2013
-:: there is no 64-bit DLL target, so we do it here ourselves
-nmake VC=VC12 VC12
-cd lib
-nmake /f Makefile.VC12 MACHINE=x64 cfg=release-dll
-cd ..\src
-nmake /f Makefile.VC12 MACHINE=x64 cfg=release-dll
-popd
-:: make this specific curl version available to CouchDB build script
-mklink /d %curl_path% %curl_src%
-popd
-endlocal
-::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-:eof
diff --git a/bin/build_icu.cmd b/bin/build_icu.cmd
deleted file mode 100755
index 1c2c1bd..0000000
--- a/bin/build_icu.cmd
+++ /dev/null
@@ -1,17 +0,0 @@
-path=%path%;c:\mozilla-build\7zip;
-setlocal
-::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-:: icu doesn't have a version name in the archive path
-set ICU_PATH=%RELAX%\icu
-setx ICU_PATH %icu_path%
-::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-:: ensure we have a fresh source tree to build from
-if exist "%icu_path%" rd /s/q %icu_path%
-7z x "%relax%\bits\icu4c-*src.zip" -o%relax% -y
-pushd %icu_path%
-:: ICU is set up for MSVS 2010, this upgrades it to 2013 support
-devenv.com %icu_path%\source\allinone\allinone.sln /Upgrade
-devenv.com %icu_path%\source\allinone\allinone.sln /Build "Release|x64"
-::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-:eof
-endlocal
diff --git a/bin/build_installer.cmd b/bin/build_installer.cmd
deleted file mode 100644
index ab9c7fd..0000000
--- a/bin/build_installer.cmd
+++ /dev/null
@@ -1,73 +0,0 @@
-@ECHO OFF
-
-:: Licensed under the Apache License, Version 2.0 (the "License"); you may not
-:: use this file except in compliance with the License. You may obtain a copy of
-:: the License at
-::
-::   http://www.apache.org/licenses/LICENSE-2.0
-::
-:: Unless required by applicable law or agreed to in writing, software
-:: distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-:: WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-:: License for the specific language governing permissions and limitations under
-:: the License.
-
-SETLOCAL ENABLEEXTENSIONS
-SETLOCAL DISABLEDELAYEDEXPANSION
-
-IF EXIST %~dp0..\..\couchdb\rel\couchdb (
-  SET COUCHDB=%~dp0..\..\couchdb\rel\couchdb
-) ELSE (
-  ECHO Error, couchdb release directory not found. Have you run make release?
-  GOTO END
-)
-
-SET OLDDIR=%cd%
-
-SET GLAZIER=%~dp0..
-SET /P START_ERL= < %COUCHDB%\releases\start_erl.data
-FOR /F "tokens=2" %%G IN ("%START_ERL%") DO SET APP_VSN=%%G
-
-:: pre-execution cleanup
-cd %GLAZIER%\installer
-rmdir /s /q release >NUL 2>&1
-del /f *.wixobj >NUL 2>&1
-del /f *.wixpdb >NUL 2>&1
-del /f couchdb.wxs couchdbfiles.wxs >NUL 2>&1
-
-:: add necessary DLLs to release directory
-xcopy %ICU_PATH%\bin64\icu*.dll %COUCHDB%\bin /Y >NUL 2>&1
-xcopy %RELAX%\js-1.8.5\js\src\dist\bin\*.dll %COUCHDB%\bin /Y >NUL 2>&1
-copy %RELAX%\curl\lib\libcurl.dll %COUCHDB%\bin /Y >NUL 2>&1
-
-:: add nssm so we can create/delete the Windows service
-copy c:\ProgramData\Chocolatey\lib\nssm\tools\nssm-2.24-101-g897c7ad\win64\nssm.exe %COUCHDB%\bin /Y >NUL 2>&1
-
-:: update version number
-:: commented out because WiX insists on a #.#.#.# number format and there's
-:: no guarantee that's what we'll see
-copy couchdb.wxs.in couchdb.wxs >NUL 2>&1
-:: cscript //NoLogo %GLAZIER%\bin\sed.vbs s/####VERSION####/%APP_VSN% < couchdb.wxs.in >couchdb.wxs
-copy %COUCHDB%\etc\default.ini .
-echo file = ./var/log/couchdb.log >>default.ini
-cscript //NoLogo %GLAZIER%\bin\sed.vbs s/stderr/file < default.ini >%COUCHDB%\etc\default.ini
-
-:: Package CouchDB as a fragment
-:: WiX skips empty directories, so we create a dummy logfile
-echo New Log >%COUCHDB%\var\log\couchdb.log
-:: We don't want to re-run heat unless files have changed. And even then,
-:: we'd want to manually merge. heat will regenerate all GUIDS and that will
-:: cause problems in the field if we ever start upgrading rather than
-:: uninstall/reinstall. It's the -gg flag that results in this behaviour.
-heat dir %COUCHDB% -dr APPLICATIONFOLDER -cg CouchDBFilesGroup -gg -g1 -sfrag -srd -sw5150 -var "var.CouchDir" -out couchdbfiles.wxs
-
-:: Build MSI for installation
-candle -arch x64 -ext WiXUtilExtension couchdb.wxs
-candle -arch x64 -dCouchDir=%COUCHDB% couchdbfiles.wxs
-candle -arch x64 -ext WiXUtilExtension couchdb_wixui.wxs
-candle -arch x64 -ext WiXUtilExtension dirwarning.wxs
-light -sw1076 -ext WixUIExtension -ext WiXUtilExtension -cultures:en-us couchdb.wixobj couchdbfiles.wixobj couchdb_wixui.wixobj dirwarning.wixobj -out couchdb-%APP_VSN%.msi
-copy couchdb-%APP_VSN%.msi %OLDDIR%
-
-cd %OLDDIR%
-:END
diff --git a/bin/build_installer.ps1 b/bin/build_installer.ps1
new file mode 100644
index 0000000..2bde102
--- /dev/null
+++ b/bin/build_installer.ps1
@@ -0,0 +1,80 @@
+# Licensed under the Apache License, Version 2.0 (the "License"); you may not
+# use this file except in compliance with the License. You may obtain a copy of
+# the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations under
+# the License.
+
+if (-Not (Test-Path "${PSScriptRoot}\..\..\couchdb\rel\couchdb"))
+{
+   Write-Error "CouchDB release directory not found. Have you run make release?"
+   exit 1
+}
+if (! $env:VCPKG_BIN)
+{
+   Write-Error "Your VCPKG_BIN environment variable is not set! Exiting..."
+   exit 1
+}
+
+$CouchDB = "${PSScriptRoot}\..\..\couchdb\rel\couchdb"
+$Glazier = "${PSScriptRoot}\.."
+$CouchDBVersion = Get-Content "${CouchDB}\releases\start_erl.data" |
+      ForEach-Object {$_.Split(" ")[1]}
+$RelNotesVersion = $CouchDBVersion -replace "^(\d+\.\d+)\..*", '$1'
+
+# clean up from previous runs
+Push-Location $Glazier\installer
+Remove-Item release -Recurse -ErrorAction Ignore
+Remove-Item *.wixobj, *.wixpdb, couchdb.wxs, couchdbfiles.wxs, *.ini -ErrorAction Ignore
+Remove-Item "${CouchDB}\bin\*.dll", "${CouchDB}\bin\nssm.exe" -ErrorAction Ignore
+
+# add build assets we need in the package
+Copy-Item -Path "${env:VCPKG_BIN}\*.dll" -Destination "${CouchDB}\bin"
+Copy-Item -Path "C:\ProgramData\Chocolatey\lib\nssm\tools\nssm.exe" -Destination "${CouchDB}\bin"
+Copy-Item -Path "${CouchDB}\etc\default.ini" -Destination "."
+Move-Item -Path "${CouchDB}\etc\local.ini" -Destination "${CouchDB}\etc\local.ini.dist"
+Move-Item -Path "${CouchDB}\etc\vm.args" -Destination "${CouchDB}\etc\vm.args.dist"
+
+# customize a few files in the install for Windows
+(Get-Content "couchdb.wxs.in") `
+      -replace "###VERSION###", "${CouchDBVersion}" `
+      -replace "###RELNOTESVERSION###", "${RelNotesVersion}" |
+      Set-Content "couchdb.wxs"
+(Get-Content "default.ini") `
+      -replace "^; file =.*", "file = ./var/log/couchdb.log" `
+      -replace "^writer = stderr", "writer = file" |
+      Out-File "default.ini"
+# WiX skips empty directories, so we create a dummy logfile
+Write-Output "New Log" | Out-File "${CouchDB}\var\log\couchdb.log"
+
+# Build our custom action.
+Push-Location CustomAction
+Remove-Item obj -Recurse -ErrorAction Ignore
+MSBuild /p:Configuration=Release
+Pop-Location
+
+# We don't want to re-run heat unless files have changed. And even then,
+# we'd want to manually merge. heat will regenerate all GUIDS and that will
+# cause problems in the field if we ever start upgrading rather than
+# uninstall/reinstall. It's the -gg flag that results in this behaviour.
+heat dir "${CouchDB}" -dr APPLICATIONFOLDER -cg CouchDBFilesGroup -gg -g1 -sfrag -srd -sw5150 -var "var.CouchDir" -out couchdbfiles.wxs
+
+# Build MSI for installation
+candle -arch x64 -ext WiXUtilExtension couchdb.wxs
+candle -arch x64 "-dCouchDir=${CouchDB}" couchdbfiles.wxs
+candle -arch x64 -ext WiXUtilExtension couchdb_wixui.wxs
+candle -arch x64 -ext WiXUtilExtension adminprompt.wxs
+candle -arch x64 -ext WiXUtilExtension customexit.wxs
+candle -arch x64 -ext WiXUtilExtension CouchInstallDirDlg.wxs
+light -sw1076 -sice:ICE17 -ext WixUIExtension -ext WiXUtilExtension "-cultures:en-us;en;neutral" adminprompt.wixobj couchdb.wixobj couchdbfiles.wixobj couchdb_wixui.wixobj customexit.wixobj CouchInstallDirDlg.wixobj -out apache-couchdb-${CouchDBVersion}.msi
+
+Pop-Location
+
+Move-Item -Path "${CouchDB}\etc\local.ini.dist" -Destination "${CouchDB}\etc\local.ini"
+Move-Item -Path "${CouchDB}\etc\vm.args.dist" -Destination "${CouchDB}\etc\vm.args"
+Move-Item -Path "${Glazier}\installer\apache-couchdb-${CouchDBVersion}.msi" -Destination "." -Force
diff --git a/bin/build_openssl.cmd b/bin/build_openssl.cmd
deleted file mode 100755
index a0e76b6..0000000
--- a/bin/build_openssl.cmd
+++ /dev/null
@@ -1,42 +0,0 @@
-setlocal
-path=%path%;c:\mozilla-build\7zip;%relax%\nasm;c:\strawberry\perl\bin;
-
-::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-:: clean up existing installs
-:: extract bundle and name
-:: stash SSL version
-del /f/q "%TEMP%\openssl*.tar"
-7z x "%relax%\bits\openssl-*.tar.gz" -y -o"%TEMP%"
-
-:: get the version of OpenSSL into the environment
-for %%i in ("%TEMP%\openssl-*.tar") do set openssl_ver=%%~ni
-setx openssl_ver %openssl_ver%
-set SSL_PATH=%relax%\openssl
-setx SSL_PATH %ssl_path%
-
-if exist "%ssl_path%" rd /s/q "%ssl_path%"
-:: set up a softlink for openssl as Erlang seems to dumb to find it
-if not exist c:\openssl mklink /j c:\openssl "%relax%\openssl"
-if not exist c:\OpenSSL-Win64 mklink /j c:\OpenSSL-Win64 "%relax%\openssl"
-if defined openssl_ver rd /s/q %relax%\%openssl_ver%
-7z x "%TEMP%\openssl-*.tar" -o%relax%\ -y
-
-::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-pushd %relax%\%openssl_ver%
-perl Configure VC-WIN64A --prefix=%ssl_path%
-call ms\do_win64a
-nmake -f ms\nt.mak clean
-nmake -f ms\nt.mak all
-nmake -f ms\nt.mak test
-nmake -f ms\nt.mak install
-
-:: You may be surprised: the 64bit artefacts are indeed output in the
-:: out32* sub-directories and bear names ending *32.dll. Fact is the
-:: 64 bit compile target is so far an incremental change over the legacy
-:: 32bit windows target. Numerous compile flags are still labelled "32"
-:: although those do apply to both 32 and 64bit targets. 
-
-popd
-endlocal
-::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
diff --git a/bin/command_process_hkcu.reg b/bin/command_process_hkcu.reg
deleted file mode 100644
index ed9569b..0000000
--- a/bin/command_process_hkcu.reg
+++ /dev/null
Binary files differ
diff --git a/bin/console_hkcu.reg b/bin/console_hkcu.reg
deleted file mode 100644
index 007c4f2..0000000
--- a/bin/console_hkcu.reg
+++ /dev/null
Binary files differ
diff --git a/bin/consolidate_free_space.cmd b/bin/consolidate_free_space.cmd
deleted file mode 100755
index 1258867..0000000
--- a/bin/consolidate_free_space.cmd
+++ /dev/null
@@ -1,4 +0,0 @@
-defrag /c    /h /u /v
-defrag /c /x /h /u /v
-start /d c: /high cmd /k %opt%\sysinternals\sdelete.exe -z
-start /d d: /high cmd /k %opt%\sysinternals\sdelete.exe -z
diff --git a/bin/couchdb_build.sh b/bin/couchdb_build.sh
deleted file mode 100755
index 57ac348..0000000
--- a/bin/couchdb_build.sh
+++ /dev/null
@@ -1,63 +0,0 @@
-#!/bin/sh
-set -e
-COUCH_TOP=`pwd`
-export COUCH_TOP
-
-echo ============= COUCHDB_BUILD  MAKE ===================
-make 2>&1 | tee $COUCH_TOP/build_make.txt
-echo DONE. | tee -a $COUCH_TOP/build_make.txt
-
-echo ============= COUCHDB_BUILD CHECK  ===================
-make check 2>&1  | tee $COUCH_TOP/build_check.txt
-echo DONE. | tee -a $COUCH_TOP/build_check.txt
-
-echo ============= COUCHDB_BUILD  INSTALL ===================
-make install 2>&1  | tee $COUCH_TOP/build_install.txt
-echo DONE. | tee -a $COUCH_TOP/build_install.txt
-
-echo ============= COUCHDB_BUILD DIST  ===================
-make dist 2>&1   | tee $COUCH_TOP/build_dist.txt
-echo DONE. | tee -a $COUCH_TOP/build_dist.txt
-
-echo ============= COUCHDB_BUILD_PDB-LOGS ==================
-tar cvzf $COUCH_TOP/etc/windows/build_pdbs-logs.tar.gz \
-    `find $COUCH_TOP -name \*.pdb` \
-    $COUCH_TOP/bui*.txt \
-    `find $ERL_TOP -name \*.pdb` \
-    $ERL_TOP/bui*.txt \
-    $COUCH_TOP/config.*
-echo DONE.
-
-
-if [ -z "$BUILD_WITH_JENKINS" ] ; then
-    echo to move build files to release area run the following:
-    echo PATCH=_$OTP_ARCH_otp_$OTP_REL.exe
-    echo DEST=/cygdrive/c/jenkins/release/CouchDB/Snapshots/`date +%Y%m%d`
-    echo pushd $COUCH_TOP/etc/windows/
-    echo rename .exe \$PATCH setup-couchdb-*
-    echo WINCOUCH=\`ls -1 setup-*.exe\`
-    echo rm \$WINCOUCH.*
-    echo shasum \$WINCOUCH \> \$WINCOUCH.sha
-    echo md5sum \$WINCOUCH \> \$WINCOUCH.md5
-    echo mkdir -p \$DEST/
-    echo mv setup-couchdb-* \$DEST/
-    echo mv build_pdbs-logs.tar.gz \$DEST/\$WINCOUCH.build_pdbs-logs.tar.gz
-    echo popd
-else
-    echo ============= COUCHDB_BUILD_JENKINS ==================
-    # rename all files to match the build name
-    PATCH=_$OTP_ARCH_otp_$OTP_REL.exe
-    #DATE=/cygdrive/c/jenkins/release/CouchDB/Snapshots/`date +%Y%m%d`
-    pushd $COUCH_TOP/etc/windows/
-    rename .exe $PATCH setup-couchdb-*
-    WINCOUCH=`ls -1 setup-*.exe`
-    rm $WINCOUCH.*
-    shasum $WINCOUCH > $WINCOUCH.sha
-    md5sum $WINCOUCH > $WINCOUCH.md5
-    mv build_pdbs-logs.tar.gz $WINCOUCH.build_pdbs-logs.tar.gz
-    popd
-fi
-
-
-echo ============= COUCHDB_BUILD ===================
-echo DONE.
diff --git a/bin/couchdb_clean.sh b/bin/couchdb_clean.sh
deleted file mode 100755
index e17bb41..0000000
--- a/bin/couchdb_clean.sh
+++ /dev/null
@@ -1 +0,0 @@
-rsync -thrivaz --del /relax/zgit_couch/ /relax/git_couch
diff --git a/bin/couchdb_config.sh b/bin/couchdb_config.sh
deleted file mode 100755
index 7478028..0000000
--- a/bin/couchdb_config.sh
+++ /dev/null
@@ -1,28 +0,0 @@
-#!/bin/sh
-set -e
-COUCH_TOP=`pwd`
-export COUCH_TOP
-export RELAX=`cygpath $RELAX`
-
-if [ ! -e "$COUCH_TOP/configure" ]
-then
-    echo ============= COUCHDB_CONFIG BOOTSTRAP ====================
-    ./bootstrap 2>&1 | tee $COUCH_TOP/build_configure.txt
-fi
-
-echo ============= COUCHDB_CONFIG CONFIGURE ===================
-./configure \
---prefix=$ERL_TOP/release/win32 \
---with-erlang=$ERL_TOP/release/win32/usr/include \
---with-win32-icu-binaries=$RELAX/icu \
---with-openssl-bin-dir=$RELAX/openssl/bin \
---with-msvc-redist-dir=$ERL_TOP/.. \
---with-js-lib=$RELAX/js-1.8.5/js/src/dist/lib \
---with-js-include=$RELAX/js-1.8.5/js/src/dist/include \
---disable-init \
---disable-launchd \
-#--with-win32-curl=$COUCH_TOP/../curl \
-2>&1 | tee -a $COUCH_TOP/build_configure.txt
-
-echo ============= COUCHDB_CONFIG CONFIGURE ===================
-echo DONE. | tee -a $COUCH_TOP/build_configure.txt
diff --git a/bin/install_dependencies.ps1 b/bin/install_dependencies.ps1
new file mode 100644
index 0000000..d27451e
--- /dev/null
+++ b/bin/install_dependencies.ps1
@@ -0,0 +1,44 @@
+# Licensed under the Apache License, Version 2.0 (the "License"); you may not
+# use this file except in compliance with the License. You may obtain a copy of
+# the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations under
+# the License.
+
+choco install visualstudio2017buildtools "--passive --locale en-US"
+choco install visualstudio2017-workload-vctools --package-parameters "--includeRecommended --add Microsoft.VisualStudio.Component.VC.ATLMFC"
+choco install visualstudio2017-workload-nativedesktop
+choco install windows-sdk-10.1 nodejs-lts wget nasm cyg-get wixtoolset python3 make nssm gpg4win checksum archiver dependencywalker unzip
+choco install nsis --version=2.51
+Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force
+Install-Module VSSetup -Scope CurrentUser -Force
+python -m pip install --upgrade pip
+pip install --upgrade sphinx docutils pygments nose hypothesis sphinx_rtd_theme
+cyg-get -upgrade p7zip autoconf binutils bison gcc-code gcc-g++ gdb git libtool make patchutils pkg-config readline file renameutils socat time tree util-linux wget
+
+wget.exe https://ftp.mozilla.org/pub/mozilla/libraries/win32/MozillaBuildSetup-3.3.exe
+.\MozillaBuildSetup-Latest.exe /S
+sleep 120
+del MozillaBuildSetup-Latest.exe
+
+git clone https://github.com/Microsoft/vcpkg.git
+cd vcpkg
+.\bootstrap-vcpkg.bat -disableMetrics -win64
+.\vcpkg integrate install --triplet x64-windows
+.\vcpkg remove openssl icu curl[openssl,tool]
+.\vcpkg install openssl icu curl[openssl,tool] --triplet x64-windows
+cd ..
+
+# below is for Erlang compile to be successful - not required for too long, see:
+#   https://github.com/erlang/otp/pull/2456
+
+New-Item -Path C:\relax\vcpkg\installed\x64-windows\lib\libeay32.lib -ItemType HardLink -Value C:\relax\vcpkg\installed\x64-windows\lib\libcrypto.lib
+New-Item -Path C:\relax\vcpkg\installed\x64-windows\lib\ssleay32.lib -ItemType HardLink -Value C:\relax\vcpkg\installed\x64-windows\lib\libssl.lib
+New-Item -Path relax\vcpkg\installed\x64-windows\lib\VC -ItemType SymbolicLink -Value relax\vcpkg\installed\x64-windows\lib
+
+. ${PSScriptRoot}\shell.ps1
diff --git a/bin/md5sum.exe b/bin/md5sum.exe
deleted file mode 100755
index 0313120..0000000
--- a/bin/md5sum.exe
+++ /dev/null
Binary files differ
diff --git a/bin/rebar b/bin/rebar
deleted file mode 100644
index 74be913..0000000
--- a/bin/rebar
+++ /dev/null
Binary files differ
diff --git a/bin/rebar.cmd b/bin/rebar.cmd
deleted file mode 100644
index 6a2ce43..0000000
--- a/bin/rebar.cmd
+++ /dev/null
@@ -1,2 +0,0 @@
-@escript "%~dp0\rebar" %*
-
diff --git a/bin/sed.vbs b/bin/sed.vbs
deleted file mode 100644
index ed203f6..0000000
--- a/bin/sed.vbs
+++ /dev/null
@@ -1,12 +0,0 @@
-Dim pat, patparts, rxp, inp
-pat = WScript.Arguments(0)
-patparts = Split(pat,"/")
-Set rxp = new RegExp
-rxp.Global = True
-rxp.Multiline = False
-rxp.Pattern = patparts(1)
-Do While Not WScript.StdIn.AtEndOfStream
-  inp = WScript.StdIn.ReadLine()
-  WScript.Echo rxp.Replace(inp, patparts(2))
-Loop
-
diff --git a/bin/shell.cmd b/bin/shell.cmd
deleted file mode 100755
index ba49e1c..0000000
--- a/bin/shell.cmd
+++ /dev/null
@@ -1,118 +0,0 @@
-@echo off
-title Time to Relax.
-::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-set CYGWIN=nontsec nodosfilewarning
-if not exist c:\temp mkdir c:\temp
-set TEMP=c:\temp
-set TMP=c:\temp
-
-::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-:: following settings allow Erlang build to locate openssl correctly
-:: and CouchDB to find ICU, Curl, and SSL if required
-set USE_SSLEAY=1
-set USE_OPENSSL=1
-if not defined SSL_PATH  set SSL_PATH=%RELAX%\openssl
-if not defined ICU_PATH  set ICU_PATH=%RELAX%\icu
-if not defined CURL_PATH set CURL_PATH=%RELAX%\curl
-if not defined ZLIB_PATH set ZLIB_PATH=%RELAX%\zlib
-
-::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-:: LIB and INCLUDE are preset by Windows SDK and/or Visual C++ shells
-:: however VC++ uses LIB & INCLUDE and SDK uses Lib & Include. In Cygwin
-:: these are *NOT* the same but when we shell out to CL.exe and LINK.exe
-:: all is well again
-
-:: relax for couchdb
-:: werldir for building erlang
-
-if not defined RELAX setx RELAX e:\relax > NUL:
-if not defined RELAX set RELAX=e:\relax
-if not defined WERL_DIR setx WERL_DIR c:\werl > NUL:
-if not defined WERL_DIR set WERL_DIR=c:\werl
-
-set INCLUDE=%INCLUDE%;%SSL_PATH%\include\openssl;%SSL_PATH%\include;%CURL_PATH%\include\curl;%ICU_PATH%\include;
-set LIBPATH=%LIBPATH%;%SSL_PATH%\lib;%CURL_PATH%\lib;%ICU_PATH%\lib;
-set LIB=%LIB%;%SSL_PATH%\lib;%CURL_PATH%\lib;%ICU_PATH%\lib;
-
-::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-:: check which version of erlang setup we want
-:: pick up from jenkins if required
-if not defined BUILD_WITH_JENKINS goto select
-if not defined OTP_REL goto select
-goto %OTP_REL%
-:: no default, so let's ask the user instead!
-:: choice.exe exists on all windows platforms since MSDOS but not on XP
-:select
-echo Select an Erlang:
-echo       7 for Erlang 17.5 
-echo       8 for Erlang 18.3 (default)
-echo       9 for Erlang 19.3
-set /p choice="Make your selection ===> "
-if /i "%choice%"=="0" goto win_shell
-if /i "%choice%"=="7" goto 17.5
-if /i "%choice%"=="8" goto 18.3
-if /i "%choice%"=="9" goto 19.3
-:: else
-goto 18.3
-
-::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-:17.5
-set ERTS_VSN=6.4
-set OTP_REL=17.5
-goto shell_select
-
-::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-:18.3
-set ERTS_VSN=7.3
-set OTP_REL=18.3
-goto shell_select
-
-::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-:19.3
-set ERTS_VSN=8.3
-set OTP_REL=19.3
-goto shell_select
-
-::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-:shell_select
-for /f "usebackq" %%i in (`c:\tools\cygwin\bin\cygpath.exe %WERL_DIR%`) do @set WERL_PATH=%%i
-
-echo Select a shell:
-echo       w for Windows prompt (default)
-echo       b for bash prompt
-echo       p for PowerShell prompt
-set /p choice="Make your selection ===> "
-if /i "%choice%"=="w" goto win_shell
-if /i "%choice%"=="b" goto unix_shell
-if /i "%choice%"=="p" goto ps_shell
-:: else
-goto :win_shell
-
-:unix_shell
-set ERL_TOP=%WERL_PATH%/otp_src_%OTP_REL%
-color
-title Building in %ERL_TOP% with OTP %OTP_REL% and Erlang v%ERTS_VSN%
-c:\tools\cygwin\bin\bash %relax%\bin\shell.sh
-goto eof
-
-::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-:win_shell
-set ERL_TOP=%WERL_DIR%\otp_src_%OTP_REL%
-echo Type exit to stop relaxing.
-title On the couch. Type exit to stop relaxing.
-:: Need these things on the path to build/run CouchDB
-set PATH=%ERL_TOP%\release\win32\erts-%ERTS_VSN%\bin;%ERL_TOP%\bootstrap\bin;%ERL_TOP%\erts\etc\win32\cygwin_tools\vc;%ERL_TOP%\erts\etc\win32\cygwin_tools;%RELAX%\bin;%PATH%;%ICU_PATH%\bin64;%RELAX%\js-1.8.5\js\src\dist\bin;%RELAX%\curl\lib;C:\Python36\Scripts;C:\Program Files\nodejs;C:\Program Files (x86)\WiX Toolset v3.11\bin;C:\tools\cygwin\bin
-cmd.exe /k
-goto eof
-
-::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-:ps_shell
-echo Type exit to stop relaxing.
-title On the couch. Type exit to stop relaxing.
-set PATH=%ERL_TOP%\release\win32\erts-%ERTS_VSN%\bin;%ERL_TOP%\bootstrap\bin;%ERL_TOP%\erts\etc\win32\cygwin_tools\vc;%ERL_TOP%\erts\etc\win32\cygwin_tools;c:\relax\bin;%PATH%;%ICU_PATH%\bin64;C:\Relax\js-1.8.5\js\src\dist\bin;C:\relax\curl\lib;c:\ProgramData\chocolatey\lib\python3\tools\Scripts;C:\Program Files\nodejs;C:\Program Files (x86)\WiX Toolset v3.11\bin
-powershell
-goto eof
-
-::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-:eof
-::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
diff --git a/bin/shell.ps1 b/bin/shell.ps1
new file mode 100644
index 0000000..acb1405
--- /dev/null
+++ b/bin/shell.ps1
@@ -0,0 +1,31 @@
+# Licensed under the Apache License, Version 2.0 (the "License"); you may not
+# use this file except in compliance with the License. You may obtain a copy of
+# the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations under
+# the License.
+
+$installationPath = vswhere.exe -prerelease -products Microsoft.VisualStudio.Product.BuildTools -version '[15.0,16.0)' -property InstallationPath
+if ($installationPath -and (test-path "$installationPath\Common7\Tools\vsdevcmd.bat")) {
+  & "${env:COMSPEC}" /s /c "`"$installationPath\Common7\Tools\vsdevcmd.bat`" -arch=amd64 -no_logo && set" | foreach-object {
+    $name, $value = $_ -split '=', 2
+    set-content env:\"$name" $value
+  }
+}
+Import-Module ${PSScriptRoot}\which.psm1
+
+$env:VCPKG_BIN = "C:\relax\vcpkg\installed\x64-windows\bin"
+$env:PATH += ";C:\Program Files\erl9.3.3.14\bin" 
+$env:PATH += ";C:\relax\vcpkg\installed\x64-windows\bin"
+$env:PATH += ";C:\Program Files (x86)\WiX Toolset v3.11\bin"
+
+$env:LIB = "C:\relax\vcpkg\installed\x64-windows\lib;" + $env:LIB
+$env:INCLUDE = "C:\relax\vcpkg\installed\x64-windows\include;" + $env:INCLUDE
+$env:LIBPATH = "C:\relax\vcpkg\installed\x64-windows\lib;" + $env:LIBPATH
+
+Set-ExecutionPolicy Bypass -Scope Process -Force
diff --git a/bin/shell.sh b/bin/shell.sh
deleted file mode 100755
index 6b445d1..0000000
--- a/bin/shell.sh
+++ /dev/null
@@ -1,116 +0,0 @@
-#!/bin/bash
-# inspired by https://github.com/erlang/otp/blob/master/HOWTO/INSTALL-WIN32.md
-# written by joan touzet (@wohali) and dave cottlehuber (@dch)
-
-# first, a base default path for cygwin
-PATH=/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:\
-/cygdrive/c/windows/system32:/cygdrive/c/windows:\
-/cygdrive/c/windows/system32/Wbem
-
-# utility functions from INSTALL-WIN32.md, forced to cygwin mode
-make_winpath()
-{
-  P=$1
-  cygpath -d "$P"
-}
-
-make_upath()
-{
-  P=$1
-  cygpath "$P"
-}
-
-
-# build for the right version of erlang
-echo Using Erlang $ERTS_VSN OTP $OTP_VER in $ERL_TOP
-echo
-
-# convenience variables
-C_DRV=/cygdrive/c
-PRG_FLS64=$C_DRV/Program\ Files
-PRG_FLS32=$C_DRV/Program\ Files\ \(x86\)
-
-# MSVS 2013
-VISUAL_STUDIO_ROOT32=$PRG_FLS32/Microsoft\ Visual\ Studio\ 12.0
-MS_SDK_ROOT64=$PRG_FLS32/Windows\ Kits/8.1
-NETFX_ROOT64=$PRG_FLS32/Microsoft\ SDKs/Windows/v8.1A/bin/NETFX\ 4.5.1\ Tools/x64
-# Okay, now mangle the paths and get rid of spaces by using short names
-WIN_VCROOT32=`make_winpath "$VISUAL_STUDIO_ROOT32"`
-VCROOT32=`make_upath $WIN_VCROOT32`
-WIN_SDKROOT64=`make_winpath "$MS_SDK_ROOT64"`
-SDKROOT64=`make_upath $WIN_SDKROOT64`
-WIN_NETFXROOT64=`make_winpath "$NETFX_ROOT64"`
-NETFXROOT64=`make_upath $WIN_NETFXROOT64`
-WIN_PROGRAMFILES32=`make_winpath "$PRG_FLS32"`
-PROGRAMFILES32=`make_upath $WIN_PROGRAMFILES32`
-
-WIN_PROGRAMFILES64=`make_winpath "$PRG_FLS64"`
-PROGRAMFILES64=`make_upath $WIN_PROGRAMFILES64`
-
-# nsis
-NSIS_BIN=$PRG_FLS32/NSIS
-# openssl
-OPENSSL_BIN=/cygdrive/c/relax/openssl/bin
-# skipping java
-
-# now a path to everything we are about to build
-ERL_PATH=$ERL_TOP/release/win32/erts-$ERTS_VSN/bin:\
-$ERL_TOP/bootstrap/bin:\
-$ERL_TOP/erts/etc/win32/cygwin_tools/vc:\
-$ERL_TOP/erts/etc/win32/cygwin_tools
-
-# path to everything Visual Studio 2013
-VC_PATH=$VCROOT32/Common7/IDE:$VCROOT32/VC/BIN/amd64:$VCROOT32/Common7/Tools:\
-$VCROOT32/VC/VCPackages:$NETFXROOT64:$SDKROOT64/bin/x64:\
-$SDKROOT64/bin
-
-# .Net framework which we need to have clean manifests and SxS for Win7 x64
-DOTNET_PATH=/cygdrive/c/WINDOWS/Microsoft.NET/Framework:/cygdrive/c/WINDOWS/Microsoft.NET/Framework/v4.0.30319:/cygdrive/c/WINDOWS/Microsoft.NET/Framework/v3.5
-
-# glazier tools
-GLAZIER_PATH=$PATH:/relax/bin:/relax/bits
-
-# put it all together
-PATH=$NSIS_BIN:$OPENSSL_BIN:$VC_PATH:$PATH:$DOTNET_PATH:$ERL_PATH:$GLAZIER_PATH
-
-# Microsoft SDK libpaths are set by setup.cmd
-
-CC_SH_DEBUG_LOG=$TMP/cc_r$OTP_VER.log
-LD_SH_DEBUG_LOG=$TMP/ld_r$OTP_VER.log
-RC_SH_DEBUG_LOG=$TMP/rc_r$OTP_VER.log
-MD_SH_DEBUG_LOG=$TMP/md_r$OTP_VER.log
-MC_SH_DEBUG_LOG=$TMP/mc_r$OTP_VER.log
-
-TERM=xterm
-
-export INCLUDE LIB LIBPATH PATH TMP ERL_TOP ERTS_VSN OTP_VER SHELL RELAX TERM CC_SH_DEBUG_LOG LD_SH_DEBUG_LOG RC_SH_DEBUG_LOG MD_SH_DEBUG_LOG MC_SH_DEBUG_LOG
-
-# ensure we have an ERL_TOP to go to
-mkdir -p $ERL_TOP > /dev/null 2>&1
-
-# add in otp_build settings
-eval `$ERL_TOP/otp_build env_win32 x64`
-
-echo doing sanity checks...
-echo current path:
-echo $PATH | /bin/sed 's/:/\n/g'
-echo
-echo please check the toolkit paths point to Microsoft versions:
-which mc lc cl link mt rc cvtres
-echo
-
-echo Ready to build Erlang and CouchDB using Erlang $ERTS_VSN OTP $OTP_VER in $ERL_TOP
-echo Time to Relax.
-
-if [ -z "$BUILD_WITH_JENKINS" ] ; then
-  pushd $ERL_TOP
-  bash -i
-else
-	echo Working directory is: `pwd`
-	git clean -fdx
-	git reset --hard
-	./bootstrap
-	/relax/bin/couchdb_config.sh
-	/relax/bin/couchdb_build.sh
-fi
-
diff --git a/bin/slim_couch.cmd b/bin/slim_couch.cmd
deleted file mode 100644
index ee778bc..0000000
--- a/bin/slim_couch.cmd
+++ /dev/null
@@ -1,74 +0,0 @@
-@echo off
-setlocal
-:: are we *really* in %COUCH% ?
-if not exist bin\couchdb.bat echo FAIL: this script must be run in %%COUCH%% && goto :eof
-
-:: prune any existing COUCH stuff
-rd /s/q var
-mkdir var\log\couchdb var\lib\couchdb var\run\couchdb
-del unins*
-
-:: prune libs
-pushd lib
-mkdir ..\stash ..\trash
-for /d %%i in (couch-* snappy-* ejson-* common-test-* compiler-* crypto-* debugger-* erlang-oauth* erts-* etap* eunit* hipe* ibrowse-* inets-* kernel-* mochiweb-* os_mon-* parse-tools-* pman-* public_key-* reltool-* runtime_tools-* sasl-* ssl-* stdlib-* xmerl-*) do @echo stashing [%%i] && move "%%i" ..\stash\ > NUL: 2>&1
-for /d %%i in (*) do @echo trashing [%%i] && move "%%i" ..\trash\ > NUL: 2>&1
-for /d %%i in (..\stash\*) do @move "%%i" > NUL: 2>&1
-popd && echo rd /s/q stash trash
-
-:: prune erts
-pushd erts* && rd /s/q include lib src & popd
-
-:: lean beams + misc bits
-pushd lib && for /r %%i in (examples src include obj) do @if exist "%%i" echo cleaned [%%i] && rd /s/q "%%i"
-popd
-
-:: misc bits
-del /s/q/f erl.ini
-rd /s/q releases
-rd /s/q share\doc share\man
-pushd bin && del typer.exe run_test.exe ct_run.exe dialyzer.exe & popd
-pushd erts-*\bin && del ct_run.exe dialyzer.exe typer.exe & popd
-
-:: Before
-:: C:\couch\1.1.0_icu442>diruse . -, -m -*
-::
-::    Size (mb)  Files  Directory
-::        19.30     19  SUB-TOTAL: ..\bin
-::         4.39     70  SUB-TOTAL: ..\erts-5.8.2
-::         0.01      2  SUB-TOTAL: ..\etc
-::        104.1   4686  SUB-TOTAL: ..\lib
-::         0.04      9  SUB-TOTAL: ..\releases
-::         1.27    177  SUB-TOTAL: ..\share
-::         0.00      0  SUB-TOTAL: ..\var
-::       129.11   4963  TOTAL
-:: After
-:: C:\couch>diruse -,  -m -* 1.1.0_slim
-::
-::    Size (mb)  Files  Directory
-::        19.23     15  SUB-TOTAL: 1.1.0_SLIM\bin
-::         3.40     11  SUB-TOTAL: 1.1.0_SLIM\erts-5.8.2
-::         0.01      2  SUB-TOTAL: 1.1.0_SLIM\etc
-::        10.07    530  SUB-TOTAL: 1.1.0_SLIM\lib
-::         1.24    163  SUB-TOTAL: 1.1.0_SLIM\share
-::         0.00      0  SUB-TOTAL: 1.1.0_SLIM\var
-::        33.94    721  TOTAL
-echo DONE
-echo remember to use 7zip to compress for 25% better reduction vs zip/gz
-echo e.g. 7zip a -mx9 slimcouch.7z slimcouch
-echo 7zip a -mx9 archive.7z folder gets a 15MiB .7z file vs zip 21MiB file
-echo NOTES - further pruning options to test
-echo remove futon rd /s/q share\couchdb\www
-echo werl.exe, escript.exe, erlc.exe, heart.exe if you're sure
-echo use erlc "+compressed" to squash beam files at build time
-echo use this to strip beams:
-echo erl -noinput -eval 'erlang:display(beam_lib:strip_release("."))' -s init stop
-echo what modules are needed? read http://erlang.org/pipermail/erlang-questions/2011-June/059489.html
-echo vcredist_x86.exe if you are deploying via MSI pre-req or GPOs
-echo share/couchdb/www if you don't need futon locally
-echo script doesn't handle extensions like geocouch yet
-echo erts-*\bin is duplicated, maybe try a junction point and avoid install.exe
-echo bin\* erts-5.8.2\bin\ /y ^& rd bin ^& junction bin erts-5.8.2\bin
-
-:eof
-endlocal
diff --git a/bin/sync_otp.cmd b/bin/sync_otp.cmd
deleted file mode 100755
index 76abf78..0000000
--- a/bin/sync_otp.cmd
+++ /dev/null
@@ -1,3 +0,0 @@
-if not defined WERL_SRC  set WERL_SRC=c:\relax\werl
-if not defined WERL_DIR  set WERL_DIR=c:\jenkins\workspace\werl
-robocopy %WERL_SRC% %WERL_DIR% -mir -log:NUL: -r:0 -w:0
diff --git a/bin/which.psm1 b/bin/which.psm1
new file mode 100644
index 0000000..195c3ab
--- /dev/null
+++ b/bin/which.psm1
@@ -0,0 +1,6 @@
+function which($name)
+{
+    Get-Command $name | Select-Object -ExpandProperty Definition
+}
+
+Export-ModuleMember -Function 'which'
diff --git a/bits/couchdb-500x500.ico b/bits/couchdb-500x500.ico
new file mode 100644
index 0000000..14f04cd
--- /dev/null
+++ b/bits/couchdb-500x500.ico
Binary files differ
diff --git a/bits/js185-msvc2013.patch b/bits/js185-msvc2013.patch
deleted file mode 100644
index 6a60682..0000000
--- a/bits/js185-msvc2013.patch
+++ /dev/null
@@ -1,4434 +0,0 @@
-diff -Naurb js-1.8.5-dist/js/src/configure js-1.8.5/js/src/configure
---- js-1.8.5-dist/js/src/configure	2011-03-31 15:08:36 -0400
-+++ js-1.8.5/js/src/configure	2015-08-26 12:33:27 -0400
-@@ -2944,6 +2944,17 @@
- #define _CRT_NONSTDC_NO_WARNINGS 1
- EOF
- 
-+        elif test "$_CC_MAJOR_VERSION" = "18"; then
-+            _CC_SUITE=12
-+            CXXFLAGS="$CXXFLAGS -Zc:wchar_t-"
-+            cat >> confdefs.h <<\EOF
-+#define _CRT_SECURE_NO_WARNINGS 1
-+EOF
-+
-+            cat >> confdefs.h <<\EOF
-+#define _CRT_NONSTDC_NO_WARNINGS 1
-+EOF
-+
-         else
-             { echo "configure: error: This version ($CC_VERSION) of the MSVC compiler is unsupported. See https://developer.mozilla.org/en/Windows_Build_Prerequisites." 1>&2; exit 1; }
-         fi
-@@ -2986,7 +2997,7 @@
-         # Windows Server 2008 and newer SDKs have WinSDKVer.h, get the version
-         # from there
-         echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
--echo "configure:2990: checking how to run the C preprocessor" >&5
-+echo "configure:3001: checking how to run the C preprocessor" >&5
- # On Suns, sometimes $CPP names a directory.
- if test -n "$CPP" && test -d "$CPP"; then
-   CPP=
-@@ -3001,13 +3012,13 @@
-   # On the NeXT, cc -E runs the code through the compiler's parser,
-   # not just through cpp.
-   cat > conftest.$ac_ext <<EOF
--#line 3005 "configure"
-+#line 3016 "configure"
- #include "confdefs.h"
- #include <assert.h>
- Syntax Error
- EOF
- ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
--{ (eval echo configure:3011: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-+{ (eval echo configure:3022: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
- ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
- if test -z "$ac_err"; then
-   :
-@@ -3018,13 +3029,13 @@
-   rm -rf conftest*
-   CPP="${CC-cc} -E -traditional-cpp"
-   cat > conftest.$ac_ext <<EOF
--#line 3022 "configure"
-+#line 3033 "configure"
- #include "confdefs.h"
- #include <assert.h>
- Syntax Error
- EOF
- ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
--{ (eval echo configure:3028: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-+{ (eval echo configure:3039: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
- ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
- if test -z "$ac_err"; then
-   :
-@@ -3035,13 +3046,13 @@
-   rm -rf conftest*
-   CPP="${CC-cc} -nologo -E"
-   cat > conftest.$ac_ext <<EOF
--#line 3039 "configure"
-+#line 3050 "configure"
- #include "confdefs.h"
- #include <assert.h>
- Syntax Error
- EOF
- ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
--{ (eval echo configure:3045: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-+{ (eval echo configure:3056: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
- ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
- if test -z "$ac_err"; then
-   :
-@@ -3069,17 +3080,17 @@
- do
- ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
- echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
--echo "configure:3073: checking for $ac_hdr" >&5
-+echo "configure:3084: checking for $ac_hdr" >&5
- if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   cat > conftest.$ac_ext <<EOF
--#line 3078 "configure"
-+#line 3089 "configure"
- #include "confdefs.h"
- #include <$ac_hdr>
- EOF
- ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
--{ (eval echo configure:3083: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-+{ (eval echo configure:3094: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
- ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
- if test -z "$ac_err"; then
-   rm -rf conftest*
-@@ -3111,7 +3122,7 @@
-             # This is done because the Windows 7 beta SDK reports its
-             # NTDDI_MAXVER to be 0x06000100 instead of 0x06010000, as it should
-             echo $ac_n "checking for highest Windows version supported by this SDK""... $ac_c" 1>&6
--echo "configure:3115: checking for highest Windows version supported by this SDK" >&5
-+echo "configure:3126: checking for highest Windows version supported by this SDK" >&5
- if eval "test \"`echo '$''{'ac_cv_winsdk_maxver'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-@@ -3141,17 +3152,17 @@
- do
- ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
- echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
--echo "configure:3145: checking for $ac_hdr" >&5
-+echo "configure:3156: checking for $ac_hdr" >&5
- if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   cat > conftest.$ac_ext <<EOF
--#line 3150 "configure"
-+#line 3161 "configure"
- #include "confdefs.h"
- #include <$ac_hdr>
- EOF
- ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
--{ (eval echo configure:3155: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-+{ (eval echo configure:3166: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
- ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
- if test -z "$ac_err"; then
-   rm -rf conftest*
-@@ -3188,7 +3199,7 @@
-         unset _MSVC_VER_FILTER
- 
-         echo $ac_n "checking for std::_Throw""... $ac_c" 1>&6
--echo "configure:3192: checking for std::_Throw" >&5
-+echo "configure:3203: checking for std::_Throw" >&5
- if eval "test \"`echo '$''{'ac_cv_have_std__Throw'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-@@ -3204,14 +3215,14 @@
-                 _SAVE_CXXFLAGS="$CXXFLAGS"
-                 CXXFLAGS="${CXXFLAGS} -D_HAS_EXCEPTIONS=0"
-                 cat > conftest.$ac_ext <<EOF
--#line 3208 "configure"
-+#line 3219 "configure"
- #include "confdefs.h"
- #include <exception>
- int main() {
- std::_Throw(std::exception()); return 0;
- ; return 0; }
- EOF
--if { (eval echo configure:3215: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-+if { (eval echo configure:3226: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-   rm -rf conftest*
-   ac_cv_have_std__Throw="yes"
- else
-@@ -3236,7 +3247,7 @@
- 
-         if test "$ac_cv_have_std__Throw" == "yes"; then
-             echo $ac_n "checking for |class __declspec(dllimport) exception| bug""... $ac_c" 1>&6
--echo "configure:3240: checking for |class __declspec(dllimport) exception| bug" >&5
-+echo "configure:3251: checking for |class __declspec(dllimport) exception| bug" >&5
- if eval "test \"`echo '$''{'ac_cv_have_dllimport_exception_bug'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-@@ -3252,14 +3263,14 @@
-                     _SAVE_CXXFLAGS="$CXXFLAGS"
-                     CXXFLAGS="${CXXFLAGS} -D_HAS_EXCEPTIONS=0"
-                     cat > conftest.$ac_ext <<EOF
--#line 3256 "configure"
-+#line 3267 "configure"
- #include "confdefs.h"
- #include <vector>
- int main() {
- std::vector<int> v; return v.at(1);
- ; return 0; }
- EOF
--if { (eval echo configure:3263: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-+if { (eval echo configure:3274: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-   rm -rf conftest*
-   ac_cv_have_dllimport_exception_bug="no"
- else
-@@ -3291,7 +3302,7 @@
-             fi
-         else
-             echo $ac_n "checking for overridable _RAISE""... $ac_c" 1>&6
--echo "configure:3295: checking for overridable _RAISE" >&5
-+echo "configure:3306: checking for overridable _RAISE" >&5
- if eval "test \"`echo '$''{'ac_cv_have__RAISE'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-@@ -3307,7 +3318,7 @@
-                     _SAVE_CXXFLAGS="$CXXFLAGS"
-                     CXXFLAGS="${CXXFLAGS} -D_HAS_EXCEPTIONS=0"
-                     cat > conftest.$ac_ext <<EOF
--#line 3311 "configure"
-+#line 3322 "configure"
- #include "confdefs.h"
- #include <xstddef>
-                                     #undef _RAISE
-@@ -3318,7 +3329,7 @@
- std::vector<int> v; return v.at(1);
- ; return 0; }
- EOF
--if { (eval echo configure:3322: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-+if { (eval echo configure:3333: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-   rm -rf conftest*
-   ac_cv_have__RAISE="no"
- else
-@@ -3360,9 +3371,9 @@
-         _W32API_MAJOR_VERSION=`echo $W32API_VERSION | $AWK -F\. '{ print $1 }'`
-         _W32API_MINOR_VERSION=`echo $W32API_VERSION | $AWK -F\. '{ print $2 }'`
-         echo $ac_n "checking for w32api version >= $W32API_VERSION""... $ac_c" 1>&6
--echo "configure:3364: checking for w32api version >= $W32API_VERSION" >&5
-+echo "configure:3375: checking for w32api version >= $W32API_VERSION" >&5
-         cat > conftest.$ac_ext <<EOF
--#line 3366 "configure"
-+#line 3377 "configure"
- #include "confdefs.h"
- #include <w32api.h>
- int main() {
-@@ -3374,7 +3385,7 @@
-             
- ; return 0; }
- EOF
--if { (eval echo configure:3378: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-+if { (eval echo configure:3389: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-   rm -rf conftest*
-    res=yes 
- else
-@@ -3390,7 +3401,7 @@
-         fi
-         # Check windres version
-         echo $ac_n "checking for windres version >= $WINDRES_VERSION""... $ac_c" 1>&6
--echo "configure:3394: checking for windres version >= $WINDRES_VERSION" >&5
-+echo "configure:3405: checking for windres version >= $WINDRES_VERSION" >&5
-         _WINDRES_VERSION=`${WINDRES} --version 2>&1 | grep -i windres 2>/dev/null | $AWK '{ print $3 }'`
-         echo "$ac_t""$_WINDRES_VERSION" 1>&6
-         _WINDRES_MAJOR_VERSION=`echo $_WINDRES_VERSION | $AWK -F\. '{ print $1 }'`
-@@ -3430,7 +3441,7 @@
-     # If the maximum version supported by this SDK is lower than the target
-     # version, error out
-     echo $ac_n "checking for Windows SDK being recent enough""... $ac_c" 1>&6
--echo "configure:3434: checking for Windows SDK being recent enough" >&5
-+echo "configure:3445: checking for Windows SDK being recent enough" >&5
-     if $PERL -e "exit(0x$MOZ_WINSDK_TARGETVER > $MOZ_WINSDK_MAXVER)"; then
-         echo "$ac_t"""yes"" 1>&6
-     else
-@@ -3461,10 +3472,10 @@
- if test "$CC" != "icc" -a -z "$_WIN32_MSVC"; then
-     if test "x$CC" != xcc; then
-   echo $ac_n "checking whether $CC and cc understand -c and -o together""... $ac_c" 1>&6
--echo "configure:3465: checking whether $CC and cc understand -c and -o together" >&5
-+echo "configure:3476: checking whether $CC and cc understand -c and -o together" >&5
- else
-   echo $ac_n "checking whether cc understands -c and -o together""... $ac_c" 1>&6
--echo "configure:3468: checking whether cc understands -c and -o together" >&5
-+echo "configure:3479: checking whether cc understands -c and -o together" >&5
- fi
- set dummy $CC; ac_cc="`echo $2 |
- 		       sed -e 's/[^a-zA-Z0-9_]/_/g' -e 's/^[0-9]/_/'`"
-@@ -3476,16 +3487,16 @@
- # We do the test twice because some compilers refuse to overwrite an
- # existing .o file with -o, though they will create one.
- ac_try='${CC-cc} -c conftest.c -o conftest.o 1>&5'
--if { (eval echo configure:3480: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } &&
--   test -f conftest.o && { (eval echo configure:3481: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; };
-+if { (eval echo configure:3491: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } &&
-+   test -f conftest.o && { (eval echo configure:3492: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; };
- then
-   eval ac_cv_prog_cc_${ac_cc}_c_o=yes
-   if test "x$CC" != xcc; then
-     # Test first that cc exists at all.
--    if { ac_try='cc -c conftest.c 1>&5'; { (eval echo configure:3486: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
-+    if { ac_try='cc -c conftest.c 1>&5'; { (eval echo configure:3497: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
-       ac_try='cc -c conftest.c -o conftest.o 1>&5'
--      if { (eval echo configure:3488: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } &&
--	 test -f conftest.o && { (eval echo configure:3489: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; };
-+      if { (eval echo configure:3499: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } &&
-+	 test -f conftest.o && { (eval echo configure:3500: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; };
-       then
-         # cc works too.
-         :
-@@ -3521,7 +3532,7 @@
- fi
- 
- echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
--echo "configure:3525: checking how to run the C preprocessor" >&5
-+echo "configure:3536: checking how to run the C preprocessor" >&5
- # On Suns, sometimes $CPP names a directory.
- if test -n "$CPP" && test -d "$CPP"; then
-   CPP=
-@@ -3536,13 +3547,13 @@
-   # On the NeXT, cc -E runs the code through the compiler's parser,
-   # not just through cpp.
-   cat > conftest.$ac_ext <<EOF
--#line 3540 "configure"
-+#line 3551 "configure"
- #include "confdefs.h"
- #include <assert.h>
- Syntax Error
- EOF
- ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
--{ (eval echo configure:3546: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-+{ (eval echo configure:3557: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
- ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
- if test -z "$ac_err"; then
-   :
-@@ -3553,13 +3564,13 @@
-   rm -rf conftest*
-   CPP="${CC-cc} -E -traditional-cpp"
-   cat > conftest.$ac_ext <<EOF
--#line 3557 "configure"
-+#line 3568 "configure"
- #include "confdefs.h"
- #include <assert.h>
- Syntax Error
- EOF
- ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
--{ (eval echo configure:3563: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-+{ (eval echo configure:3574: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
- ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
- if test -z "$ac_err"; then
-   :
-@@ -3570,13 +3581,13 @@
-   rm -rf conftest*
-   CPP="${CC-cc} -nologo -E"
-   cat > conftest.$ac_ext <<EOF
--#line 3574 "configure"
-+#line 3585 "configure"
- #include "confdefs.h"
- #include <assert.h>
- Syntax Error
- EOF
- ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
--{ (eval echo configure:3580: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-+{ (eval echo configure:3591: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
- ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
- if test -z "$ac_err"; then
-   :
-@@ -3601,7 +3612,7 @@
- echo "$ac_t""$CPP" 1>&6
- 
- echo $ac_n "checking how to run the C++ preprocessor""... $ac_c" 1>&6
--echo "configure:3605: checking how to run the C++ preprocessor" >&5
-+echo "configure:3616: checking how to run the C++ preprocessor" >&5
- if test -z "$CXXCPP"; then
- if eval "test \"`echo '$''{'ac_cv_prog_CXXCPP'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
-@@ -3614,12 +3625,12 @@
- cross_compiling=$ac_cv_prog_cxx_cross
-   CXXCPP="${CXX-g++} -E"
-   cat > conftest.$ac_ext <<EOF
--#line 3618 "configure"
-+#line 3629 "configure"
- #include "confdefs.h"
- #include <stdlib.h>
- EOF
- ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
--{ (eval echo configure:3623: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-+{ (eval echo configure:3634: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
- ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
- if test -z "$ac_err"; then
-   :
-@@ -3709,7 +3720,7 @@
- # Extract the first word of "$ac_prog", so it can be a program name with args.
- set dummy $ac_prog; ac_word=$2
- echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
--echo "configure:3713: checking for $ac_word" >&5
-+echo "configure:3724: checking for $ac_word" >&5
- if eval "test \"`echo '$''{'ac_cv_prog_SBCONF'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-@@ -3776,7 +3787,7 @@
- # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
- # ./install, which can be erroneously created by make from ./install.sh.
- echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
--echo "configure:3780: checking for a BSD compatible install" >&5
-+echo "configure:3791: checking for a BSD compatible install" >&5
- if test -z "$INSTALL"; then
- if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
-@@ -3829,7 +3840,7 @@
- test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
- 
- echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6
--echo "configure:3833: checking whether ln -s works" >&5
-+echo "configure:3844: checking whether ln -s works" >&5
- if eval "test \"`echo '$''{'ac_cv_prog_LN_S'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-@@ -3852,7 +3863,7 @@
- 
- if test -z "$TINDERBOX_SKIP_PERL_VERSION_CHECK"; then
- echo $ac_n "checking for minimum required perl version >= $PERL_VERSION""... $ac_c" 1>&6
--echo "configure:3856: checking for minimum required perl version >= $PERL_VERSION" >&5
-+echo "configure:3867: checking for minimum required perl version >= $PERL_VERSION" >&5
- _perl_version=`PERL_VERSION=$PERL_VERSION $PERL -e 'print "$]"; if ($] >= $ENV{PERL_VERSION}) { exit(0); } else { exit(1); }' 2>&5`
- _perl_res=$?
- echo "$ac_t""$_perl_version" 1>&6
-@@ -3863,7 +3874,7 @@
- fi
- 
- echo $ac_n "checking for full perl installation""... $ac_c" 1>&6
--echo "configure:3867: checking for full perl installation" >&5
-+echo "configure:3878: checking for full perl installation" >&5
- _perl_archlib=`$PERL -e 'use Config; if ( -d $Config{archlib} ) { exit(0); } else { exit(1); }' 2>&5`
- _perl_res=$?
- if test "$_perl_res" != 0; then
-@@ -3878,7 +3889,7 @@
- # Extract the first word of "$ac_prog", so it can be a program name with args.
- set dummy $ac_prog; ac_word=$2
- echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
--echo "configure:3882: checking for $ac_word" >&5
-+echo "configure:3893: checking for $ac_word" >&5
- if eval "test \"`echo '$''{'ac_cv_path_PYTHON'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-@@ -3938,7 +3949,7 @@
-  # Extract the first word of "doxygen", so it can be a program name with args.
- set dummy doxygen; ac_word=$2
- echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
--echo "configure:3942: checking for $ac_word" >&5
-+echo "configure:3953: checking for $ac_word" >&5
- if eval "test \"`echo '$''{'ac_cv_path_DOXYGEN'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-@@ -3987,7 +3998,7 @@
-  # Extract the first word of "autoconf", so it can be a program name with args.
- set dummy autoconf; ac_word=$2
- echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
--echo "configure:3991: checking for $ac_word" >&5
-+echo "configure:4002: checking for $ac_word" >&5
- if eval "test \"`echo '$''{'ac_cv_path_AUTOCONF'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-@@ -4036,7 +4047,7 @@
-  # Extract the first word of "unzip", so it can be a program name with args.
- set dummy unzip; ac_word=$2
- echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
--echo "configure:4040: checking for $ac_word" >&5
-+echo "configure:4051: checking for $ac_word" >&5
- if eval "test \"`echo '$''{'ac_cv_path_UNZIP'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-@@ -4087,7 +4098,7 @@
- # Extract the first word of "$ac_prog", so it can be a program name with args.
- set dummy $ac_prog; ac_word=$2
- echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
--echo "configure:4091: checking for $ac_word" >&5
-+echo "configure:4102: checking for $ac_word" >&5
- if eval "test \"`echo '$''{'ac_cv_path_ZIP'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-@@ -4141,7 +4152,7 @@
-  # Extract the first word of "makedepend", so it can be a program name with args.
- set dummy makedepend; ac_word=$2
- echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
--echo "configure:4145: checking for $ac_word" >&5
-+echo "configure:4156: checking for $ac_word" >&5
- if eval "test \"`echo '$''{'ac_cv_path_SYSTEM_MAKEDEPEND'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-@@ -4189,7 +4200,7 @@
-  # Extract the first word of "xargs", so it can be a program name with args.
- set dummy xargs; ac_word=$2
- echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
--echo "configure:4193: checking for $ac_word" >&5
-+echo "configure:4204: checking for $ac_word" >&5
- if eval "test \"`echo '$''{'ac_cv_path_XARGS'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-@@ -4263,7 +4274,7 @@
- # Extract the first word of "$ac_prog", so it can be a program name with args.
- set dummy $ac_prog; ac_word=$2
- echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
--echo "configure:4267: checking for $ac_word" >&5
-+echo "configure:4278: checking for $ac_word" >&5
- if eval "test \"`echo '$''{'ac_cv_path_PBBUILD'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-@@ -4326,7 +4337,7 @@
-              # Extract the first word of "sdp", so it can be a program name with args.
- set dummy sdp; ac_word=$2
- echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
--echo "configure:4330: checking for $ac_word" >&5
-+echo "configure:4341: checking for $ac_word" >&5
- if eval "test \"`echo '$''{'ac_cv_path_SDP'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-@@ -4452,7 +4463,7 @@
- 
-   
-   echo $ac_n "checking for valid compiler/Mac OS X SDK combination""... $ac_c" 1>&6
--echo "configure:4456: checking for valid compiler/Mac OS X SDK combination" >&5
-+echo "configure:4467: checking for valid compiler/Mac OS X SDK combination" >&5
-   ac_ext=C
- # CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
- ac_cpp='$CXXCPP $CPPFLAGS'
-@@ -4461,7 +4472,7 @@
- cross_compiling=$ac_cv_prog_cxx_cross
- 
-   cat > conftest.$ac_ext <<EOF
--#line 4465 "configure"
-+#line 4476 "configure"
- #include "confdefs.h"
- #include <new>
-                  int main() { return 0; }
-@@ -4469,7 +4480,7 @@
- result=yes
- ; return 0; }
- EOF
--if { (eval echo configure:4473: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-+if { (eval echo configure:4484: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-   rm -rf conftest*
-   result=no
- else
-@@ -4506,7 +4517,7 @@
- # Extract the first word of "$ac_prog", so it can be a program name with args.
- set dummy $ac_prog; ac_word=$2
- echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
--echo "configure:4510: checking for $ac_word" >&5
-+echo "configure:4521: checking for $ac_word" >&5
- if eval "test \"`echo '$''{'ac_cv_path_GMAKE'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-@@ -4562,7 +4573,7 @@
- # Extract the first word of "$ac_prog", so it can be a program name with args.
- set dummy $ac_prog; ac_word=$2
- echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
--echo "configure:4566: checking for $ac_word" >&5
-+echo "configure:4577: checking for $ac_word" >&5
- if eval "test \"`echo '$''{'ac_cv_path_GMAKE'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-@@ -4625,7 +4636,7 @@
- # Uses ac_ vars as temps to allow command line to override cache and checks.
- # --without-x overrides everything else, but does not touch the cache.
- echo $ac_n "checking for X""... $ac_c" 1>&6
--echo "configure:4629: checking for X" >&5
-+echo "configure:4640: checking for X" >&5
- 
- # Check whether --with-x or --without-x was given.
- if test "${with_x+set}" = set; then
-@@ -4687,12 +4698,12 @@
- 
-   # First, try using that file with no special directory specified.
- cat > conftest.$ac_ext <<EOF
--#line 4691 "configure"
-+#line 4702 "configure"
- #include "confdefs.h"
- #include <$x_direct_test_include>
- EOF
- ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
--{ (eval echo configure:4696: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-+{ (eval echo configure:4707: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
- ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
- if test -z "$ac_err"; then
-   rm -rf conftest*
-@@ -4761,14 +4772,14 @@
-   ac_save_LIBS="$LIBS"
-   LIBS="-l$x_direct_test_library $LIBS"
- cat > conftest.$ac_ext <<EOF
--#line 4765 "configure"
-+#line 4776 "configure"
- #include "confdefs.h"
- 
- int main() {
- ${x_direct_test_function}()
- ; return 0; }
- EOF
--if { (eval echo configure:4772: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-+if { (eval echo configure:4783: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-   rm -rf conftest*
-   LIBS="$ac_save_LIBS"
- # We can link X programs with no special library path.
-@@ -4874,17 +4885,17 @@
-     case "`(uname -sr) 2>/dev/null`" in
-     "SunOS 5"*)
-       echo $ac_n "checking whether -R must be followed by a space""... $ac_c" 1>&6
--echo "configure:4878: checking whether -R must be followed by a space" >&5
-+echo "configure:4889: checking whether -R must be followed by a space" >&5
-       ac_xsave_LIBS="$LIBS"; LIBS="$LIBS -R$x_libraries"
-       cat > conftest.$ac_ext <<EOF
--#line 4881 "configure"
-+#line 4892 "configure"
- #include "confdefs.h"
- 
- int main() {
- 
- ; return 0; }
- EOF
--if { (eval echo configure:4888: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-+if { (eval echo configure:4899: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-   rm -rf conftest*
-   ac_R_nospace=yes
- else
-@@ -4900,14 +4911,14 @@
-       else
- 	LIBS="$ac_xsave_LIBS -R $x_libraries"
- 	cat > conftest.$ac_ext <<EOF
--#line 4904 "configure"
-+#line 4915 "configure"
- #include "confdefs.h"
- 
- int main() {
- 
- ; return 0; }
- EOF
--if { (eval echo configure:4911: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-+if { (eval echo configure:4922: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-   rm -rf conftest*
-   ac_R_space=yes
- else
-@@ -4939,7 +4950,7 @@
-     # libraries were built with DECnet support.  And karl@cs.umb.edu says
-     # the Alpha needs dnet_stub (dnet does not exist).
-     echo $ac_n "checking for dnet_ntoa in -ldnet""... $ac_c" 1>&6
--echo "configure:4943: checking for dnet_ntoa in -ldnet" >&5
-+echo "configure:4954: checking for dnet_ntoa in -ldnet" >&5
- ac_lib_var=`echo dnet'_'dnet_ntoa | sed 'y%./+-%__p_%'`
- if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
-@@ -4947,7 +4958,7 @@
-   ac_save_LIBS="$LIBS"
- LIBS="-ldnet  $LIBS"
- cat > conftest.$ac_ext <<EOF
--#line 4951 "configure"
-+#line 4962 "configure"
- #include "confdefs.h"
- /* Override any gcc2 internal prototype to avoid an error.  */
- /* We use char because int might match the return type of a gcc2
-@@ -4958,7 +4969,7 @@
- dnet_ntoa()
- ; return 0; }
- EOF
--if { (eval echo configure:4962: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-+if { (eval echo configure:4973: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-   rm -rf conftest*
-   eval "ac_cv_lib_$ac_lib_var=yes"
- else
-@@ -4980,7 +4991,7 @@
- 
-     if test $ac_cv_lib_dnet_dnet_ntoa = no; then
-       echo $ac_n "checking for dnet_ntoa in -ldnet_stub""... $ac_c" 1>&6
--echo "configure:4984: checking for dnet_ntoa in -ldnet_stub" >&5
-+echo "configure:4995: checking for dnet_ntoa in -ldnet_stub" >&5
- ac_lib_var=`echo dnet_stub'_'dnet_ntoa | sed 'y%./+-%__p_%'`
- if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
-@@ -4988,7 +4999,7 @@
-   ac_save_LIBS="$LIBS"
- LIBS="-ldnet_stub  $LIBS"
- cat > conftest.$ac_ext <<EOF
--#line 4992 "configure"
-+#line 5003 "configure"
- #include "confdefs.h"
- /* Override any gcc2 internal prototype to avoid an error.  */
- /* We use char because int might match the return type of a gcc2
-@@ -4999,7 +5010,7 @@
- dnet_ntoa()
- ; return 0; }
- EOF
--if { (eval echo configure:5003: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-+if { (eval echo configure:5014: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-   rm -rf conftest*
-   eval "ac_cv_lib_$ac_lib_var=yes"
- else
-@@ -5028,12 +5039,12 @@
-     # The nsl library prevents programs from opening the X display
-     # on Irix 5.2, according to dickey@clark.net.
-     echo $ac_n "checking for gethostbyname""... $ac_c" 1>&6
--echo "configure:5032: checking for gethostbyname" >&5
-+echo "configure:5043: checking for gethostbyname" >&5
- if eval "test \"`echo '$''{'ac_cv_func_gethostbyname'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   cat > conftest.$ac_ext <<EOF
--#line 5037 "configure"
-+#line 5048 "configure"
- #include "confdefs.h"
- /* System header to define __stub macros and hopefully few prototypes,
-     which can conflict with char gethostbyname(); below.  */
-@@ -5056,7 +5067,7 @@
- 
- ; return 0; }
- EOF
--if { (eval echo configure:5060: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-+if { (eval echo configure:5071: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-   rm -rf conftest*
-   eval "ac_cv_func_gethostbyname=yes"
- else
-@@ -5077,7 +5088,7 @@
- 
-     if test $ac_cv_func_gethostbyname = no; then
-       echo $ac_n "checking for gethostbyname in -lnsl""... $ac_c" 1>&6
--echo "configure:5081: checking for gethostbyname in -lnsl" >&5
-+echo "configure:5092: checking for gethostbyname in -lnsl" >&5
- ac_lib_var=`echo nsl'_'gethostbyname | sed 'y%./+-%__p_%'`
- if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
-@@ -5085,7 +5096,7 @@
-   ac_save_LIBS="$LIBS"
- LIBS="-lnsl  $LIBS"
- cat > conftest.$ac_ext <<EOF
--#line 5089 "configure"
-+#line 5100 "configure"
- #include "confdefs.h"
- /* Override any gcc2 internal prototype to avoid an error.  */
- /* We use char because int might match the return type of a gcc2
-@@ -5096,7 +5107,7 @@
- gethostbyname()
- ; return 0; }
- EOF
--if { (eval echo configure:5100: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-+if { (eval echo configure:5111: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-   rm -rf conftest*
-   eval "ac_cv_lib_$ac_lib_var=yes"
- else
-@@ -5126,12 +5137,12 @@
-     # -lsocket must be given before -lnsl if both are needed.
-     # We assume that if connect needs -lnsl, so does gethostbyname.
-     echo $ac_n "checking for connect""... $ac_c" 1>&6
--echo "configure:5130: checking for connect" >&5
-+echo "configure:5141: checking for connect" >&5
- if eval "test \"`echo '$''{'ac_cv_func_connect'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   cat > conftest.$ac_ext <<EOF
--#line 5135 "configure"
-+#line 5146 "configure"
- #include "confdefs.h"
- /* System header to define __stub macros and hopefully few prototypes,
-     which can conflict with char connect(); below.  */
-@@ -5154,7 +5165,7 @@
- 
- ; return 0; }
- EOF
--if { (eval echo configure:5158: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-+if { (eval echo configure:5169: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-   rm -rf conftest*
-   eval "ac_cv_func_connect=yes"
- else
-@@ -5175,7 +5186,7 @@
- 
-     if test $ac_cv_func_connect = no; then
-       echo $ac_n "checking for connect in -lsocket""... $ac_c" 1>&6
--echo "configure:5179: checking for connect in -lsocket" >&5
-+echo "configure:5190: checking for connect in -lsocket" >&5
- ac_lib_var=`echo socket'_'connect | sed 'y%./+-%__p_%'`
- if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
-@@ -5183,7 +5194,7 @@
-   ac_save_LIBS="$LIBS"
- LIBS="-lsocket $X_EXTRA_LIBS $LIBS"
- cat > conftest.$ac_ext <<EOF
--#line 5187 "configure"
-+#line 5198 "configure"
- #include "confdefs.h"
- /* Override any gcc2 internal prototype to avoid an error.  */
- /* We use char because int might match the return type of a gcc2
-@@ -5194,7 +5205,7 @@
- connect()
- ; return 0; }
- EOF
--if { (eval echo configure:5198: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-+if { (eval echo configure:5209: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-   rm -rf conftest*
-   eval "ac_cv_lib_$ac_lib_var=yes"
- else
-@@ -5218,12 +5229,12 @@
- 
-     # gomez@mi.uni-erlangen.de says -lposix is necessary on A/UX.
-     echo $ac_n "checking for remove""... $ac_c" 1>&6
--echo "configure:5222: checking for remove" >&5
-+echo "configure:5233: checking for remove" >&5
- if eval "test \"`echo '$''{'ac_cv_func_remove'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   cat > conftest.$ac_ext <<EOF
--#line 5227 "configure"
-+#line 5238 "configure"
- #include "confdefs.h"
- /* System header to define __stub macros and hopefully few prototypes,
-     which can conflict with char remove(); below.  */
-@@ -5246,7 +5257,7 @@
- 
- ; return 0; }
- EOF
--if { (eval echo configure:5250: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-+if { (eval echo configure:5261: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-   rm -rf conftest*
-   eval "ac_cv_func_remove=yes"
- else
-@@ -5267,7 +5278,7 @@
- 
-     if test $ac_cv_func_remove = no; then
-       echo $ac_n "checking for remove in -lposix""... $ac_c" 1>&6
--echo "configure:5271: checking for remove in -lposix" >&5
-+echo "configure:5282: checking for remove in -lposix" >&5
- ac_lib_var=`echo posix'_'remove | sed 'y%./+-%__p_%'`
- if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
-@@ -5275,7 +5286,7 @@
-   ac_save_LIBS="$LIBS"
- LIBS="-lposix  $LIBS"
- cat > conftest.$ac_ext <<EOF
--#line 5279 "configure"
-+#line 5290 "configure"
- #include "confdefs.h"
- /* Override any gcc2 internal prototype to avoid an error.  */
- /* We use char because int might match the return type of a gcc2
-@@ -5286,7 +5297,7 @@
- remove()
- ; return 0; }
- EOF
--if { (eval echo configure:5290: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-+if { (eval echo configure:5301: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-   rm -rf conftest*
-   eval "ac_cv_lib_$ac_lib_var=yes"
- else
-@@ -5310,12 +5321,12 @@
- 
-     # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay.
-     echo $ac_n "checking for shmat""... $ac_c" 1>&6
--echo "configure:5314: checking for shmat" >&5
-+echo "configure:5325: checking for shmat" >&5
- if eval "test \"`echo '$''{'ac_cv_func_shmat'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   cat > conftest.$ac_ext <<EOF
--#line 5319 "configure"
-+#line 5330 "configure"
- #include "confdefs.h"
- /* System header to define __stub macros and hopefully few prototypes,
-     which can conflict with char shmat(); below.  */
-@@ -5338,7 +5349,7 @@
- 
- ; return 0; }
- EOF
--if { (eval echo configure:5342: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-+if { (eval echo configure:5353: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-   rm -rf conftest*
-   eval "ac_cv_func_shmat=yes"
- else
-@@ -5359,7 +5370,7 @@
- 
-     if test $ac_cv_func_shmat = no; then
-       echo $ac_n "checking for shmat in -lipc""... $ac_c" 1>&6
--echo "configure:5363: checking for shmat in -lipc" >&5
-+echo "configure:5374: checking for shmat in -lipc" >&5
- ac_lib_var=`echo ipc'_'shmat | sed 'y%./+-%__p_%'`
- if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
-@@ -5367,7 +5378,7 @@
-   ac_save_LIBS="$LIBS"
- LIBS="-lipc  $LIBS"
- cat > conftest.$ac_ext <<EOF
--#line 5371 "configure"
-+#line 5382 "configure"
- #include "confdefs.h"
- /* Override any gcc2 internal prototype to avoid an error.  */
- /* We use char because int might match the return type of a gcc2
-@@ -5378,7 +5389,7 @@
- shmat()
- ; return 0; }
- EOF
--if { (eval echo configure:5382: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-+if { (eval echo configure:5393: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-   rm -rf conftest*
-   eval "ac_cv_lib_$ac_lib_var=yes"
- else
-@@ -5411,7 +5422,7 @@
-   # libraries we check for below, so use a different variable.
-   #  --interran@uluru.Stanford.EDU, kb@cs.umb.edu.
-   echo $ac_n "checking for IceConnectionNumber in -lICE""... $ac_c" 1>&6
--echo "configure:5415: checking for IceConnectionNumber in -lICE" >&5
-+echo "configure:5426: checking for IceConnectionNumber in -lICE" >&5
- ac_lib_var=`echo ICE'_'IceConnectionNumber | sed 'y%./+-%__p_%'`
- if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
-@@ -5419,7 +5430,7 @@
-   ac_save_LIBS="$LIBS"
- LIBS="-lICE $X_EXTRA_LIBS $LIBS"
- cat > conftest.$ac_ext <<EOF
--#line 5423 "configure"
-+#line 5434 "configure"
- #include "confdefs.h"
- /* Override any gcc2 internal prototype to avoid an error.  */
- /* We use char because int might match the return type of a gcc2
-@@ -5430,7 +5441,7 @@
- IceConnectionNumber()
- ; return 0; }
- EOF
--if { (eval echo configure:5434: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-+if { (eval echo configure:5445: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-   rm -rf conftest*
-   eval "ac_cv_lib_$ac_lib_var=yes"
- else
-@@ -5913,7 +5924,7 @@
-     _USE_CPP_INCLUDE_FLAG=1
- 
-     echo $ac_n "checking whether the compiler supports -Wno-invalid-offsetof""... $ac_c" 1>&6
--echo "configure:5917: checking whether the compiler supports -Wno-invalid-offsetof" >&5
-+echo "configure:5928: checking whether the compiler supports -Wno-invalid-offsetof" >&5
- if eval "test \"`echo '$''{'ac_has_wno_invalid_offsetof'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-@@ -5929,14 +5940,14 @@
-             _SAVE_CXXFLAGS="$CXXFLAGS"
-             CXXFLAGS="$CXXFLAGS ${_COMPILER_PREFIX}-Wno-invalid-offsetof"
-             cat > conftest.$ac_ext <<EOF
--#line 5933 "configure"
-+#line 5944 "configure"
- #include "confdefs.h"
- 
- int main() {
- return(0);
- ; return 0; }
- EOF
--if { (eval echo configure:5940: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-+if { (eval echo configure:5951: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-   rm -rf conftest*
-   ac_has_wno_invalid_offsetof="yes"
- else
-@@ -5963,7 +5974,7 @@
-     fi
- 
-     echo $ac_n "checking whether the compiler supports -Wno-variadic-macros""... $ac_c" 1>&6
--echo "configure:5967: checking whether the compiler supports -Wno-variadic-macros" >&5
-+echo "configure:5978: checking whether the compiler supports -Wno-variadic-macros" >&5
- if eval "test \"`echo '$''{'ac_has_wno_variadic_macros'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-@@ -5979,14 +5990,14 @@
-             _SAVE_CXXFLAGS="$CXXFLAGS"
-             CXXFLAGS="$CXXFLAGS ${_COMPILER_PREFIX}-Wno-variadic-macros"
-             cat > conftest.$ac_ext <<EOF
--#line 5983 "configure"
-+#line 5994 "configure"
- #include "confdefs.h"
- 
- int main() {
- return(0);
- ; return 0; }
- EOF
--if { (eval echo configure:5990: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-+if { (eval echo configure:6001: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-   rm -rf conftest*
-   ac_has_wno_variadic_macros="yes"
- else
-@@ -6013,7 +6024,7 @@
-     fi
- 
-     echo $ac_n "checking whether the compiler supports -Werror=return-type""... $ac_c" 1>&6
--echo "configure:6017: checking whether the compiler supports -Werror=return-type" >&5
-+echo "configure:6028: checking whether the compiler supports -Werror=return-type" >&5
- if eval "test \"`echo '$''{'ac_has_werror_return_type'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-@@ -6029,14 +6040,14 @@
-             _SAVE_CXXFLAGS="$CXXFLAGS"
-             CXXFLAGS="$CXXFLAGS -Werror=return-type"
-             cat > conftest.$ac_ext <<EOF
--#line 6033 "configure"
-+#line 6044 "configure"
- #include "confdefs.h"
- 
- int main() {
- return(0);
- ; return 0; }
- EOF
--if { (eval echo configure:6040: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-+if { (eval echo configure:6051: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-   rm -rf conftest*
-   ac_has_werror_return_type="yes"
- else
-@@ -6072,7 +6083,7 @@
- if test "$COMPILE_ENVIRONMENT"; then
- if test "$GNU_CC"; then
-   echo $ac_n "checking whether ld has archive extraction flags""... $ac_c" 1>&6
--echo "configure:6076: checking whether ld has archive extraction flags" >&5
-+echo "configure:6087: checking whether ld has archive extraction flags" >&5
-   if eval "test \"`echo '$''{'ac_cv_mkshlib_force_and_unforce'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-@@ -6089,14 +6100,14 @@
-       LDFLAGS=$force
-       LIBS=$unforce
-       cat > conftest.$ac_ext <<EOF
--#line 6093 "configure"
-+#line 6104 "configure"
- #include "confdefs.h"
- 
- int main() {
- 
- ; return 0; }
- EOF
--if { (eval echo configure:6100: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-+if { (eval echo configure:6111: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-   rm -rf conftest*
-   ac_cv_mkshlib_force_and_unforce=$line; break
- else
-@@ -6129,7 +6140,7 @@
- '
- 
- echo $ac_n "checking that static assertion macros used in autoconf tests work""... $ac_c" 1>&6
--echo "configure:6133: checking that static assertion macros used in autoconf tests work" >&5
-+echo "configure:6144: checking that static assertion macros used in autoconf tests work" >&5
- if eval "test \"`echo '$''{'ac_cv_static_assertion_macros_work'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-@@ -6143,14 +6154,14 @@
- 
-   ac_cv_static_assertion_macros_work="yes"
-   cat > conftest.$ac_ext <<EOF
--#line 6147 "configure"
-+#line 6158 "configure"
- #include "confdefs.h"
- $configure_static_assert_macros
- int main() {
- CONFIGURE_STATIC_ASSERT(1)
- ; return 0; }
- EOF
--if { (eval echo configure:6154: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-+if { (eval echo configure:6165: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-   :
- else
-   echo "configure: failed program was:" >&5
-@@ -6160,14 +6171,14 @@
- fi
- rm -f conftest*
-   cat > conftest.$ac_ext <<EOF
--#line 6164 "configure"
-+#line 6175 "configure"
- #include "confdefs.h"
- $configure_static_assert_macros
- int main() {
- CONFIGURE_STATIC_ASSERT(0)
- ; return 0; }
- EOF
--if { (eval echo configure:6171: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-+if { (eval echo configure:6182: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-   rm -rf conftest*
-   ac_cv_static_assertion_macros_work="no"
- else
-@@ -6183,14 +6194,14 @@
- cross_compiling=$ac_cv_prog_cxx_cross
- 
-   cat > conftest.$ac_ext <<EOF
--#line 6187 "configure"
-+#line 6198 "configure"
- #include "confdefs.h"
- $configure_static_assert_macros
- int main() {
- CONFIGURE_STATIC_ASSERT(1)
- ; return 0; }
- EOF
--if { (eval echo configure:6194: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-+if { (eval echo configure:6205: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-   :
- else
-   echo "configure: failed program was:" >&5
-@@ -6200,14 +6211,14 @@
- fi
- rm -f conftest*
-   cat > conftest.$ac_ext <<EOF
--#line 6204 "configure"
-+#line 6215 "configure"
- #include "confdefs.h"
- $configure_static_assert_macros
- int main() {
- CONFIGURE_STATIC_ASSERT(0)
- ; return 0; }
- EOF
--if { (eval echo configure:6211: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-+if { (eval echo configure:6222: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-   rm -rf conftest*
-   ac_cv_static_assertion_macros_work="no"
- else
-@@ -6241,16 +6252,16 @@
- cross_compiling=$ac_cv_prog_cc_cross
- 
- echo $ac_n "checking for 64-bit OS""... $ac_c" 1>&6
--echo "configure:6245: checking for 64-bit OS" >&5
-+echo "configure:6256: checking for 64-bit OS" >&5
- cat > conftest.$ac_ext <<EOF
--#line 6247 "configure"
-+#line 6258 "configure"
- #include "confdefs.h"
- $configure_static_assert_macros
- int main() {
- CONFIGURE_STATIC_ASSERT(sizeof(void*) == 8)
- ; return 0; }
- EOF
--if { (eval echo configure:6254: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-+if { (eval echo configure:6265: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-   rm -rf conftest*
-   result="yes"
- else
-@@ -6389,7 +6400,7 @@
- esac
- 
- echo $ac_n "checking for Python version >= $PYTHON_VERSION but not 3.x""... $ac_c" 1>&6
--echo "configure:6393: checking for Python version >= $PYTHON_VERSION but not 3.x" >&5
-+echo "configure:6404: checking for Python version >= $PYTHON_VERSION but not 3.x" >&5
- 
- $PYTHON -c "import sys; sys.exit(sys.version[:3] < sys.argv[1] or sys.version[:2] != '2.')" $PYTHON_VERSION
- _python_res=$?
-@@ -6437,9 +6448,9 @@
- cross_compiling=$ac_cv_prog_cxx_cross
- 
-             echo $ac_n "checking for IBM XLC/C++ compiler version >= 9.0.0.7""... $ac_c" 1>&6
--echo "configure:6441: checking for IBM XLC/C++ compiler version >= 9.0.0.7" >&5
-+echo "configure:6452: checking for IBM XLC/C++ compiler version >= 9.0.0.7" >&5
-             cat > conftest.$ac_ext <<EOF
--#line 6443 "configure"
-+#line 6454 "configure"
- #include "confdefs.h"
- 
- int main() {
-@@ -6448,7 +6459,7 @@
-                  #endif
- ; return 0; }
- EOF
--if { (eval echo configure:6452: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-+if { (eval echo configure:6463: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-   rm -rf conftest*
-   _BAD_COMPILER=
- else
-@@ -6486,17 +6497,17 @@
- do
- ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
- echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
--echo "configure:6490: checking for $ac_hdr" >&5
-+echo "configure:6501: checking for $ac_hdr" >&5
- if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   cat > conftest.$ac_ext <<EOF
--#line 6495 "configure"
-+#line 6506 "configure"
- #include "confdefs.h"
- #include <$ac_hdr>
- EOF
- ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
--{ (eval echo configure:6500: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-+{ (eval echo configure:6511: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
- ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
- if test -z "$ac_err"; then
-   rm -rf conftest*
-@@ -6542,7 +6553,7 @@
-     LIBS="$LIBS -lbe"
-     if test "$COMPILE_ENVIRONMENT"; then
-         echo $ac_n "checking for main in -lbind""... $ac_c" 1>&6
--echo "configure:6546: checking for main in -lbind" >&5
-+echo "configure:6557: checking for main in -lbind" >&5
- ac_lib_var=`echo bind'_'main | sed 'y%./+-%__p_%'`
- if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
-@@ -6550,14 +6561,14 @@
-   ac_save_LIBS="$LIBS"
- LIBS="-lbind  $LIBS"
- cat > conftest.$ac_ext <<EOF
--#line 6554 "configure"
-+#line 6565 "configure"
- #include "confdefs.h"
- 
- int main() {
- main()
- ; return 0; }
- EOF
--if { (eval echo configure:6561: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-+if { (eval echo configure:6572: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-   rm -rf conftest*
-   eval "ac_cv_lib_$ac_lib_var=yes"
- else
-@@ -6578,7 +6589,7 @@
- fi
- 
-         echo $ac_n "checking for main in -lzeta""... $ac_c" 1>&6
--echo "configure:6582: checking for main in -lzeta" >&5
-+echo "configure:6593: checking for main in -lzeta" >&5
- ac_lib_var=`echo zeta'_'main | sed 'y%./+-%__p_%'`
- if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
-@@ -6586,14 +6597,14 @@
-   ac_save_LIBS="$LIBS"
- LIBS="-lzeta  $LIBS"
- cat > conftest.$ac_ext <<EOF
--#line 6590 "configure"
-+#line 6601 "configure"
- #include "confdefs.h"
- 
- int main() {
- main()
- ; return 0; }
- EOF
--if { (eval echo configure:6597: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-+if { (eval echo configure:6608: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-   rm -rf conftest*
-   eval "ac_cv_lib_$ac_lib_var=yes"
- else
-@@ -6667,18 +6678,18 @@
-         echo "Skipping -dead_strip because DTrace is enabled. See bug 403132."
-     else
-                 echo $ac_n "checking for -dead_strip option to ld""... $ac_c" 1>&6
--echo "configure:6671: checking for -dead_strip option to ld" >&5
-+echo "configure:6682: checking for -dead_strip option to ld" >&5
-         _SAVE_LDFLAGS=$LDFLAGS
-         LDFLAGS="$LDFLAGS -Wl,-dead_strip"
-         cat > conftest.$ac_ext <<EOF
--#line 6675 "configure"
-+#line 6686 "configure"
- #include "confdefs.h"
- 
- int main() {
- return 0;
- ; return 0; }
- EOF
--if { (eval echo configure:6682: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-+if { (eval echo configure:6693: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-   rm -rf conftest*
-   _HAVE_DEAD_STRIP=1
- else
-@@ -7250,17 +7261,17 @@
- do
- ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
- echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
--echo "configure:7254: checking for $ac_hdr" >&5
-+echo "configure:7265: checking for $ac_hdr" >&5
- if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   cat > conftest.$ac_ext <<EOF
--#line 7259 "configure"
-+#line 7270 "configure"
- #include "confdefs.h"
- #include <$ac_hdr>
- EOF
- ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
--{ (eval echo configure:7264: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-+{ (eval echo configure:7275: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
- ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
- if test -z "$ac_err"; then
-   rm -rf conftest*
-@@ -7492,19 +7503,19 @@
-     _DEFINES_CXXFLAGS="$_DEFINES_CXXFLAGS -Uunix -U__unix -U__unix__"
- 
-     echo $ac_n "checking for __declspec(dllexport)""... $ac_c" 1>&6
--echo "configure:7496: checking for __declspec(dllexport)" >&5
-+echo "configure:7507: checking for __declspec(dllexport)" >&5
- if eval "test \"`echo '$''{'ac_os2_declspec'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   cat > conftest.$ac_ext <<EOF
--#line 7501 "configure"
-+#line 7512 "configure"
- #include "confdefs.h"
- __declspec(dllexport) void ac_os2_declspec(void) {}
- int main() {
- return 0;
- ; return 0; }
- EOF
--if { (eval echo configure:7508: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-+if { (eval echo configure:7519: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-   rm -rf conftest*
-   ac_os2_declspec="yes"
- else
-@@ -7625,14 +7636,14 @@
-            _SAVE_LDFLAGS=$LDFLAGS
-            LDFLAGS="-M /usr/lib/ld/map.noexstk $LDFLAGS" 
-            cat > conftest.$ac_ext <<EOF
--#line 7629 "configure"
-+#line 7640 "configure"
- #include "confdefs.h"
- #include <stdio.h>
- int main() {
- printf("Hello World\n");
- ; return 0; }
- EOF
--if { (eval echo configure:7636: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-+if { (eval echo configure:7647: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-   :
- else
-   echo "configure: failed program was:" >&5
-@@ -7661,7 +7672,7 @@
-        CC_VERSION=`$CC -V 2>&1 | grep '^cc:' 2>/dev/null | $AWK -F\: '{ print $2 }'`
-        CXX_VERSION=`$CXX -V 2>&1 | grep '^CC:' 2>/dev/null | $AWK -F\: '{ print $2 }'`
-        echo $ac_n "checking for Sun C++ compiler version >= 5.9""... $ac_c" 1>&6
--echo "configure:7665: checking for Sun C++ compiler version >= 5.9" >&5
-+echo "configure:7676: checking for Sun C++ compiler version >= 5.9" >&5
-        
-        ac_ext=C
- # CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
-@@ -7671,7 +7682,7 @@
- cross_compiling=$ac_cv_prog_cxx_cross
- 
-        cat > conftest.$ac_ext <<EOF
--#line 7675 "configure"
-+#line 7686 "configure"
- #include "confdefs.h"
- 
- int main() {
-@@ -7680,7 +7691,7 @@
-            #endif
- ; return 0; }
- EOF
--if { (eval echo configure:7684: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-+if { (eval echo configure:7695: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-   rm -rf conftest*
-   _BAD_COMPILER=
- else
-@@ -7697,7 +7708,7 @@
-            _res="yes"
-        fi
-        cat > conftest.$ac_ext <<EOF
--#line 7701 "configure"
-+#line 7712 "configure"
- #include "confdefs.h"
- 
- int main() {
-@@ -7706,7 +7717,7 @@
-            #endif
- ; return 0; }
- EOF
--if { (eval echo configure:7710: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-+if { (eval echo configure:7721: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-   rm -rf conftest*
-   _ABOVE_SS12U1=
- else
-@@ -8122,12 +8133,12 @@
- 
- if test -z "$SKIP_COMPILER_CHECKS"; then
- echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
--echo "configure:8126: checking for ANSI C header files" >&5
-+echo "configure:8137: checking for ANSI C header files" >&5
- if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   cat > conftest.$ac_ext <<EOF
--#line 8131 "configure"
-+#line 8142 "configure"
- #include "confdefs.h"
- #include <stdlib.h>
- #include <stdarg.h>
-@@ -8135,7 +8146,7 @@
- #include <float.h>
- EOF
- ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
--{ (eval echo configure:8139: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-+{ (eval echo configure:8150: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
- ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
- if test -z "$ac_err"; then
-   rm -rf conftest*
-@@ -8152,7 +8163,7 @@
- if test $ac_cv_header_stdc = yes; then
-   # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
- cat > conftest.$ac_ext <<EOF
--#line 8156 "configure"
-+#line 8167 "configure"
- #include "confdefs.h"
- #include <string.h>
- EOF
-@@ -8170,7 +8181,7 @@
- if test $ac_cv_header_stdc = yes; then
-   # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
- cat > conftest.$ac_ext <<EOF
--#line 8174 "configure"
-+#line 8185 "configure"
- #include "confdefs.h"
- #include <stdlib.h>
- EOF
-@@ -8191,7 +8202,7 @@
-   :
- else
-   cat > conftest.$ac_ext <<EOF
--#line 8195 "configure"
-+#line 8206 "configure"
- #include "confdefs.h"
- #include <ctype.h>
- #define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
-@@ -8202,7 +8213,7 @@
- exit (0); }
- 
- EOF
--if { (eval echo configure:8206: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
-+if { (eval echo configure:8217: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
- then
-   :
- else
-@@ -8226,12 +8237,12 @@
- fi
- 
- echo $ac_n "checking for working const""... $ac_c" 1>&6
--echo "configure:8230: checking for working const" >&5
-+echo "configure:8241: checking for working const" >&5
- if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   cat > conftest.$ac_ext <<EOF
--#line 8235 "configure"
-+#line 8246 "configure"
- #include "confdefs.h"
- 
- int main() {
-@@ -8280,7 +8291,7 @@
- 
- ; return 0; }
- EOF
--if { (eval echo configure:8284: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-+if { (eval echo configure:8295: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-   rm -rf conftest*
-   ac_cv_c_const=yes
- else
-@@ -8301,12 +8312,12 @@
- fi
- 
- echo $ac_n "checking for mode_t""... $ac_c" 1>&6
--echo "configure:8305: checking for mode_t" >&5
-+echo "configure:8316: checking for mode_t" >&5
- if eval "test \"`echo '$''{'ac_cv_type_mode_t'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   cat > conftest.$ac_ext <<EOF
--#line 8310 "configure"
-+#line 8321 "configure"
- #include "confdefs.h"
- #include <sys/types.h>
- #if STDC_HEADERS
-@@ -8334,12 +8345,12 @@
- fi
- 
- echo $ac_n "checking for off_t""... $ac_c" 1>&6
--echo "configure:8338: checking for off_t" >&5
-+echo "configure:8349: checking for off_t" >&5
- if eval "test \"`echo '$''{'ac_cv_type_off_t'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   cat > conftest.$ac_ext <<EOF
--#line 8343 "configure"
-+#line 8354 "configure"
- #include "confdefs.h"
- #include <sys/types.h>
- #if STDC_HEADERS
-@@ -8367,12 +8378,12 @@
- fi
- 
- echo $ac_n "checking for pid_t""... $ac_c" 1>&6
--echo "configure:8371: checking for pid_t" >&5
-+echo "configure:8382: checking for pid_t" >&5
- if eval "test \"`echo '$''{'ac_cv_type_pid_t'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   cat > conftest.$ac_ext <<EOF
--#line 8376 "configure"
-+#line 8387 "configure"
- #include "confdefs.h"
- #include <sys/types.h>
- #if STDC_HEADERS
-@@ -8400,12 +8411,12 @@
- fi
- 
- echo $ac_n "checking for size_t""... $ac_c" 1>&6
--echo "configure:8404: checking for size_t" >&5
-+echo "configure:8415: checking for size_t" >&5
- if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   cat > conftest.$ac_ext <<EOF
--#line 8409 "configure"
-+#line 8420 "configure"
- #include "confdefs.h"
- #include <sys/types.h>
- #if STDC_HEADERS
-@@ -8440,12 +8451,12 @@
- cross_compiling=$ac_cv_prog_cxx_cross
- 
- echo $ac_n "checking for __stdcall""... $ac_c" 1>&6
--echo "configure:8444: checking for __stdcall" >&5
-+echo "configure:8455: checking for __stdcall" >&5
- if eval "test \"`echo '$''{'ac_cv___stdcall'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   cat > conftest.$ac_ext <<EOF
--#line 8449 "configure"
-+#line 8460 "configure"
- #include "confdefs.h"
- template <typename Method> struct foo;
-                   template <> struct foo<void (*)()> {};
-@@ -8454,7 +8465,7 @@
- 
- ; return 0; }
- EOF
--if { (eval echo configure:8458: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-+if { (eval echo configure:8469: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-   rm -rf conftest*
-   ac_cv___stdcall=true
- else
-@@ -8483,12 +8494,12 @@
- cross_compiling=$ac_cv_prog_cc_cross
- 
- echo $ac_n "checking for ssize_t""... $ac_c" 1>&6
--echo "configure:8487: checking for ssize_t" >&5
-+echo "configure:8498: checking for ssize_t" >&5
- if eval "test \"`echo '$''{'ac_cv_type_ssize_t'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   cat > conftest.$ac_ext <<EOF
--#line 8492 "configure"
-+#line 8503 "configure"
- #include "confdefs.h"
- #include <stdio.h>
-                   #include <sys/types.h>
-@@ -8496,7 +8507,7 @@
- ssize_t foo = 0;
- ; return 0; }
- EOF
--if { (eval echo configure:8500: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-+if { (eval echo configure:8511: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-   rm -rf conftest*
-   ac_cv_type_ssize_t=true
- else
-@@ -8518,12 +8529,12 @@
-   echo "$ac_t""no" 1>&6
- fi
- echo $ac_n "checking for st_blksize in struct stat""... $ac_c" 1>&6
--echo "configure:8522: checking for st_blksize in struct stat" >&5
-+echo "configure:8533: checking for st_blksize in struct stat" >&5
- if eval "test \"`echo '$''{'ac_cv_struct_st_blksize'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   cat > conftest.$ac_ext <<EOF
--#line 8527 "configure"
-+#line 8538 "configure"
- #include "confdefs.h"
- #include <sys/types.h>
- #include <sys/stat.h>
-@@ -8531,7 +8542,7 @@
- struct stat s; s.st_blksize;
- ; return 0; }
- EOF
--if { (eval echo configure:8535: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-+if { (eval echo configure:8546: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-   rm -rf conftest*
-   ac_cv_struct_st_blksize=yes
- else
-@@ -8552,12 +8563,12 @@
- fi
- 
- echo $ac_n "checking for siginfo_t""... $ac_c" 1>&6
--echo "configure:8556: checking for siginfo_t" >&5
-+echo "configure:8567: checking for siginfo_t" >&5
- if eval "test \"`echo '$''{'ac_cv_siginfo_t'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   cat > conftest.$ac_ext <<EOF
--#line 8561 "configure"
-+#line 8572 "configure"
- #include "confdefs.h"
- #define _POSIX_C_SOURCE 199506L
-                   #include <signal.h>
-@@ -8565,7 +8576,7 @@
- siginfo_t* info;
- ; return 0; }
- EOF
--if { (eval echo configure:8569: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-+if { (eval echo configure:8580: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-   rm -rf conftest*
-   ac_cv_siginfo_t=true
- else
-@@ -8590,17 +8601,17 @@
- 
- ac_safe=`echo "stdint.h" | sed 'y%./+-%__p_%'`
- echo $ac_n "checking for stdint.h""... $ac_c" 1>&6
--echo "configure:8594: checking for stdint.h" >&5
-+echo "configure:8605: checking for stdint.h" >&5
- if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   cat > conftest.$ac_ext <<EOF
--#line 8599 "configure"
-+#line 8610 "configure"
- #include "confdefs.h"
- #include <stdint.h>
- EOF
- ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
--{ (eval echo configure:8604: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-+{ (eval echo configure:8615: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
- ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
- if test -z "$ac_err"; then
-   rm -rf conftest*
-@@ -8629,7 +8640,7 @@
- else
-                     
- echo $ac_n "checking for a 1-byte type""... $ac_c" 1>&6
--echo "configure:8633: checking for a 1-byte type" >&5
-+echo "configure:8644: checking for a 1-byte type" >&5
- if eval "test \"`echo '$''{'moz_cv_n_byte_type_JS_INT8_TYPE'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-@@ -8637,7 +8648,7 @@
-   moz_cv_n_byte_type_JS_INT8_TYPE=
-   for type in char; do
-     cat > conftest.$ac_ext <<EOF
--#line 8641 "configure"
-+#line 8652 "configure"
- #include "confdefs.h"
- 
- int main() {
-@@ -8647,7 +8658,7 @@
-                    
- ; return 0; }
- EOF
--if { (eval echo configure:8651: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-+if { (eval echo configure:8662: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-   rm -rf conftest*
-   moz_cv_n_byte_type_JS_INT8_TYPE=$type; break
- else
-@@ -8670,7 +8681,7 @@
- 
-     
- echo $ac_n "checking for a 2-byte type""... $ac_c" 1>&6
--echo "configure:8674: checking for a 2-byte type" >&5
-+echo "configure:8685: checking for a 2-byte type" >&5
- if eval "test \"`echo '$''{'moz_cv_n_byte_type_JS_INT16_TYPE'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-@@ -8678,7 +8689,7 @@
-   moz_cv_n_byte_type_JS_INT16_TYPE=
-   for type in short int long; do
-     cat > conftest.$ac_ext <<EOF
--#line 8682 "configure"
-+#line 8693 "configure"
- #include "confdefs.h"
- 
- int main() {
-@@ -8688,7 +8699,7 @@
-                    
- ; return 0; }
- EOF
--if { (eval echo configure:8692: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-+if { (eval echo configure:8703: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-   rm -rf conftest*
-   moz_cv_n_byte_type_JS_INT16_TYPE=$type; break
- else
-@@ -8711,7 +8722,7 @@
- 
-     
- echo $ac_n "checking for a 4-byte type""... $ac_c" 1>&6
--echo "configure:8715: checking for a 4-byte type" >&5
-+echo "configure:8726: checking for a 4-byte type" >&5
- if eval "test \"`echo '$''{'moz_cv_n_byte_type_JS_INT32_TYPE'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-@@ -8719,7 +8730,7 @@
-   moz_cv_n_byte_type_JS_INT32_TYPE=
-   for type in int long 'long long' short; do
-     cat > conftest.$ac_ext <<EOF
--#line 8723 "configure"
-+#line 8734 "configure"
- #include "confdefs.h"
- 
- int main() {
-@@ -8729,7 +8740,7 @@
-                    
- ; return 0; }
- EOF
--if { (eval echo configure:8733: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-+if { (eval echo configure:8744: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-   rm -rf conftest*
-   moz_cv_n_byte_type_JS_INT32_TYPE=$type; break
- else
-@@ -8752,7 +8763,7 @@
- 
-     
- echo $ac_n "checking for a 8-byte type""... $ac_c" 1>&6
--echo "configure:8756: checking for a 8-byte type" >&5
-+echo "configure:8767: checking for a 8-byte type" >&5
- if eval "test \"`echo '$''{'moz_cv_n_byte_type_JS_INT64_TYPE'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-@@ -8760,7 +8771,7 @@
-   moz_cv_n_byte_type_JS_INT64_TYPE=
-   for type in int long 'long long'; do
-     cat > conftest.$ac_ext <<EOF
--#line 8764 "configure"
-+#line 8775 "configure"
- #include "confdefs.h"
- 
- int main() {
-@@ -8770,7 +8781,7 @@
-                    
- ; return 0; }
- EOF
--if { (eval echo configure:8774: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-+if { (eval echo configure:8785: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-   rm -rf conftest*
-   moz_cv_n_byte_type_JS_INT64_TYPE=$type; break
- else
-@@ -8793,7 +8804,7 @@
- 
-     
- echo $ac_n "checking for a sizeof (void *)-byte type""... $ac_c" 1>&6
--echo "configure:8797: checking for a sizeof (void *)-byte type" >&5
-+echo "configure:8808: checking for a sizeof (void *)-byte type" >&5
- if eval "test \"`echo '$''{'moz_cv_n_byte_type_JS_INTPTR_TYPE'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-@@ -8801,7 +8812,7 @@
-   moz_cv_n_byte_type_JS_INTPTR_TYPE=
-   for type in int long 'long long' short; do
-     cat > conftest.$ac_ext <<EOF
--#line 8805 "configure"
-+#line 8816 "configure"
- #include "confdefs.h"
- 
- int main() {
-@@ -8811,7 +8822,7 @@
-                    
- ; return 0; }
- EOF
--if { (eval echo configure:8815: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-+if { (eval echo configure:8826: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-   rm -rf conftest*
-   moz_cv_n_byte_type_JS_INTPTR_TYPE=$type; break
- else
-@@ -8836,7 +8847,7 @@
- 
- 
- echo $ac_n "checking for the size of void*""... $ac_c" 1>&6
--echo "configure:8840: checking for the size of void*" >&5
-+echo "configure:8851: checking for the size of void*" >&5
- if eval "test \"`echo '$''{'moz_cv_size_of_JS_BYTES_PER_WORD'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-@@ -8844,7 +8855,7 @@
-   moz_cv_size_of_JS_BYTES_PER_WORD=
-   for size in 4 8; do
-     cat > conftest.$ac_ext <<EOF
--#line 8848 "configure"
-+#line 8859 "configure"
- #include "confdefs.h"
- 
- int main() {
-@@ -8854,7 +8865,7 @@
-                    
- ; return 0; }
- EOF
--if { (eval echo configure:8858: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-+if { (eval echo configure:8869: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-   rm -rf conftest*
-   moz_cv_size_of_JS_BYTES_PER_WORD=$size; break
- else
-@@ -8891,7 +8902,7 @@
- 
- 
- echo $ac_n "checking for the alignment of void*""... $ac_c" 1>&6
--echo "configure:8895: checking for the alignment of void*" >&5
-+echo "configure:8906: checking for the alignment of void*" >&5
- if eval "test \"`echo '$''{'moz_cv_align_of_JS_ALIGN_OF_POINTER'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-@@ -8899,7 +8910,7 @@
-   moz_cv_align_of_JS_ALIGN_OF_POINTER=
-   for align in 2 4 8 16; do
-     cat > conftest.$ac_ext <<EOF
--#line 8903 "configure"
-+#line 8914 "configure"
- #include "confdefs.h"
- 
-                      #include <stddef.h>
-@@ -8912,7 +8923,7 @@
-                    
- ; return 0; }
- EOF
--if { (eval echo configure:8916: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-+if { (eval echo configure:8927: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-   rm -rf conftest*
-   moz_cv_align_of_JS_ALIGN_OF_POINTER=$align; break
- else
-@@ -8935,7 +8946,7 @@
- 
- 
- echo $ac_n "checking for the size of double""... $ac_c" 1>&6
--echo "configure:8939: checking for the size of double" >&5
-+echo "configure:8950: checking for the size of double" >&5
- if eval "test \"`echo '$''{'moz_cv_size_of_JS_BYTES_PER_DOUBLE'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-@@ -8943,7 +8954,7 @@
-   moz_cv_size_of_JS_BYTES_PER_DOUBLE=
-   for size in 6 8 10 12 14; do
-     cat > conftest.$ac_ext <<EOF
--#line 8947 "configure"
-+#line 8958 "configure"
- #include "confdefs.h"
- 
- int main() {
-@@ -8953,7 +8964,7 @@
-                    
- ; return 0; }
- EOF
--if { (eval echo configure:8957: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-+if { (eval echo configure:8968: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-   rm -rf conftest*
-   moz_cv_size_of_JS_BYTES_PER_DOUBLE=$size; break
- else
-@@ -8976,12 +8987,12 @@
- 
- 
- echo $ac_n "checking for int16_t""... $ac_c" 1>&6
--echo "configure:8980: checking for int16_t" >&5
-+echo "configure:8991: checking for int16_t" >&5
- if eval "test \"`echo '$''{'ac_cv_int16_t'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   cat > conftest.$ac_ext <<EOF
--#line 8985 "configure"
-+#line 8996 "configure"
- #include "confdefs.h"
- #include <stdio.h>
-                   #include <sys/types.h>
-@@ -8989,7 +9000,7 @@
- int16_t foo = 0;
- ; return 0; }
- EOF
--if { (eval echo configure:8993: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-+if { (eval echo configure:9004: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-   rm -rf conftest*
-   ac_cv_int16_t=true
- else
-@@ -9011,12 +9022,12 @@
-   echo "$ac_t""no" 1>&6
- fi
- echo $ac_n "checking for int32_t""... $ac_c" 1>&6
--echo "configure:9015: checking for int32_t" >&5
-+echo "configure:9026: checking for int32_t" >&5
- if eval "test \"`echo '$''{'ac_cv_int32_t'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   cat > conftest.$ac_ext <<EOF
--#line 9020 "configure"
-+#line 9031 "configure"
- #include "confdefs.h"
- #include <stdio.h>
-                   #include <sys/types.h>
-@@ -9024,7 +9035,7 @@
- int32_t foo = 0;
- ; return 0; }
- EOF
--if { (eval echo configure:9028: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-+if { (eval echo configure:9039: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-   rm -rf conftest*
-   ac_cv_int32_t=true
- else
-@@ -9046,12 +9057,12 @@
-   echo "$ac_t""no" 1>&6
- fi
- echo $ac_n "checking for int64_t""... $ac_c" 1>&6
--echo "configure:9050: checking for int64_t" >&5
-+echo "configure:9061: checking for int64_t" >&5
- if eval "test \"`echo '$''{'ac_cv_int64_t'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   cat > conftest.$ac_ext <<EOF
--#line 9055 "configure"
-+#line 9066 "configure"
- #include "confdefs.h"
- #include <stdio.h>
-                   #include <sys/types.h>
-@@ -9059,7 +9070,7 @@
- int64_t foo = 0;
- ; return 0; }
- EOF
--if { (eval echo configure:9063: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-+if { (eval echo configure:9074: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-   rm -rf conftest*
-   ac_cv_int64_t=true
- else
-@@ -9081,12 +9092,12 @@
-   echo "$ac_t""no" 1>&6
- fi
- echo $ac_n "checking for int64""... $ac_c" 1>&6
--echo "configure:9085: checking for int64" >&5
-+echo "configure:9096: checking for int64" >&5
- if eval "test \"`echo '$''{'ac_cv_int64'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   cat > conftest.$ac_ext <<EOF
--#line 9090 "configure"
-+#line 9101 "configure"
- #include "confdefs.h"
- #include <stdio.h>
-                   #include <sys/types.h>
-@@ -9094,7 +9105,7 @@
- int64 foo = 0;
- ; return 0; }
- EOF
--if { (eval echo configure:9098: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-+if { (eval echo configure:9109: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-   rm -rf conftest*
-   ac_cv_int64=true
- else
-@@ -9116,12 +9127,12 @@
-   echo "$ac_t""no" 1>&6
- fi
- echo $ac_n "checking for uint""... $ac_c" 1>&6
--echo "configure:9120: checking for uint" >&5
-+echo "configure:9131: checking for uint" >&5
- if eval "test \"`echo '$''{'ac_cv_uint'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   cat > conftest.$ac_ext <<EOF
--#line 9125 "configure"
-+#line 9136 "configure"
- #include "confdefs.h"
- #include <stdio.h>
-                   #include <sys/types.h>
-@@ -9129,7 +9140,7 @@
- uint foo = 0;
- ; return 0; }
- EOF
--if { (eval echo configure:9133: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-+if { (eval echo configure:9144: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-   rm -rf conftest*
-   ac_cv_uint=true
- else
-@@ -9151,12 +9162,12 @@
-   echo "$ac_t""no" 1>&6
- fi
- echo $ac_n "checking for uint_t""... $ac_c" 1>&6
--echo "configure:9155: checking for uint_t" >&5
-+echo "configure:9166: checking for uint_t" >&5
- if eval "test \"`echo '$''{'ac_cv_uint_t'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   cat > conftest.$ac_ext <<EOF
--#line 9160 "configure"
-+#line 9171 "configure"
- #include "confdefs.h"
- #include <stdio.h>
-                   #include <sys/types.h>
-@@ -9164,7 +9175,7 @@
- uint_t foo = 0;
- ; return 0; }
- EOF
--if { (eval echo configure:9168: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-+if { (eval echo configure:9179: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-   rm -rf conftest*
-   ac_cv_uint_t=true
- else
-@@ -9186,12 +9197,12 @@
-   echo "$ac_t""no" 1>&6
- fi
- echo $ac_n "checking for uint16_t""... $ac_c" 1>&6
--echo "configure:9190: checking for uint16_t" >&5
-+echo "configure:9201: checking for uint16_t" >&5
- if eval "test \"`echo '$''{'ac_cv_uint16_t'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   cat > conftest.$ac_ext <<EOF
--#line 9195 "configure"
-+#line 9206 "configure"
- #include "confdefs.h"
- #include <stdio.h>
-                   #include <sys/types.h>
-@@ -9199,7 +9210,7 @@
- uint16_t foo = 0;
- ; return 0; }
- EOF
--if { (eval echo configure:9203: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-+if { (eval echo configure:9214: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-   rm -rf conftest*
-   ac_cv_uint16_t=true
- else
-@@ -9230,12 +9241,12 @@
- 
- 
- echo $ac_n "checking for uname.domainname""... $ac_c" 1>&6
--echo "configure:9234: checking for uname.domainname" >&5
-+echo "configure:9245: checking for uname.domainname" >&5
- if eval "test \"`echo '$''{'ac_cv_have_uname_domainname_field'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   cat > conftest.$ac_ext <<EOF
--#line 9239 "configure"
-+#line 9250 "configure"
- #include "confdefs.h"
- #include <sys/utsname.h>
- int main() {
-@@ -9243,7 +9254,7 @@
-             (void)uname(res);  if (res != 0) { domain = res->domainname; } 
- ; return 0; }
- EOF
--if { (eval echo configure:9247: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-+if { (eval echo configure:9258: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-   rm -rf conftest*
-   ac_cv_have_uname_domainname_field=true
- else
-@@ -9267,12 +9278,12 @@
- fi
- 
- echo $ac_n "checking for uname.__domainname""... $ac_c" 1>&6
--echo "configure:9271: checking for uname.__domainname" >&5
-+echo "configure:9282: checking for uname.__domainname" >&5
- if eval "test \"`echo '$''{'ac_cv_have_uname_us_domainname_field'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   cat > conftest.$ac_ext <<EOF
--#line 9276 "configure"
-+#line 9287 "configure"
- #include "confdefs.h"
- #include <sys/utsname.h>
- int main() {
-@@ -9280,7 +9291,7 @@
-             (void)uname(res);  if (res != 0) { domain = res->__domainname; } 
- ; return 0; }
- EOF
--if { (eval echo configure:9284: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-+if { (eval echo configure:9295: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-   rm -rf conftest*
-   ac_cv_have_uname_us_domainname_field=true
- else
-@@ -9313,7 +9324,7 @@
- 
- if test "$GNU_CC"; then
-   echo $ac_n "checking for visibility(hidden) attribute""... $ac_c" 1>&6
--echo "configure:9317: checking for visibility(hidden) attribute" >&5
-+echo "configure:9328: checking for visibility(hidden) attribute" >&5
- if eval "test \"`echo '$''{'ac_cv_visibility_hidden'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-@@ -9338,7 +9349,7 @@
- 
- 
-     echo $ac_n "checking for visibility(default) attribute""... $ac_c" 1>&6
--echo "configure:9342: checking for visibility(default) attribute" >&5
-+echo "configure:9353: checking for visibility(default) attribute" >&5
- if eval "test \"`echo '$''{'ac_cv_visibility_default'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-@@ -9363,7 +9374,7 @@
- 
- 
-       echo $ac_n "checking for visibility pragma support""... $ac_c" 1>&6
--echo "configure:9367: checking for visibility pragma support" >&5
-+echo "configure:9378: checking for visibility pragma support" >&5
- if eval "test \"`echo '$''{'ac_cv_visibility_pragma'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-@@ -9388,7 +9399,7 @@
- echo "$ac_t""$ac_cv_visibility_pragma" 1>&6
-       if test "$ac_cv_visibility_pragma" = "yes"; then
-         echo $ac_n "checking For gcc visibility bug with class-level attributes (GCC bug 26905)""... $ac_c" 1>&6
--echo "configure:9392: checking For gcc visibility bug with class-level attributes (GCC bug 26905)" >&5
-+echo "configure:9403: checking For gcc visibility bug with class-level attributes (GCC bug 26905)" >&5
- if eval "test \"`echo '$''{'ac_cv_have_visibility_class_bug'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-@@ -9416,7 +9427,7 @@
- echo "$ac_t""$ac_cv_have_visibility_class_bug" 1>&6
- 
-         echo $ac_n "checking For x86_64 gcc visibility bug with builtins (GCC bug 20297)""... $ac_c" 1>&6
--echo "configure:9420: checking For x86_64 gcc visibility bug with builtins (GCC bug 20297)" >&5
-+echo "configure:9431: checking For x86_64 gcc visibility bug with builtins (GCC bug 20297)" >&5
- if eval "test \"`echo '$''{'ac_cv_have_visibility_builtin_bug'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-@@ -9470,19 +9481,19 @@
-   CFLAGS_save="${CFLAGS}"
-   CFLAGS="${CFLAGS} -Werror"
-   echo $ac_n "checking for __force_align_arg_pointer__ attribute""... $ac_c" 1>&6
--echo "configure:9474: checking for __force_align_arg_pointer__ attribute" >&5
-+echo "configure:9485: checking for __force_align_arg_pointer__ attribute" >&5
- if eval "test \"`echo '$''{'ac_cv_force_align_arg_pointer'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   cat > conftest.$ac_ext <<EOF
--#line 9479 "configure"
-+#line 9490 "configure"
- #include "confdefs.h"
- __attribute__ ((__force_align_arg_pointer__)) void test() {}
- int main() {
- 
- ; return 0; }
- EOF
--if { (eval echo configure:9486: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-+if { (eval echo configure:9497: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-   rm -rf conftest*
-   ac_cv_force_align_arg_pointer="yes"
- else
-@@ -9509,12 +9520,12 @@
- do
- ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
- echo $ac_n "checking for $ac_hdr that defines DIR""... $ac_c" 1>&6
--echo "configure:9513: checking for $ac_hdr that defines DIR" >&5
-+echo "configure:9524: checking for $ac_hdr that defines DIR" >&5
- if eval "test \"`echo '$''{'ac_cv_header_dirent_$ac_safe'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   cat > conftest.$ac_ext <<EOF
--#line 9518 "configure"
-+#line 9529 "configure"
- #include "confdefs.h"
- #include <sys/types.h>
- #include <$ac_hdr>
-@@ -9522,7 +9533,7 @@
- DIR *dirp = 0;
- ; return 0; }
- EOF
--if { (eval echo configure:9526: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-+if { (eval echo configure:9537: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-   rm -rf conftest*
-   eval "ac_cv_header_dirent_$ac_safe=yes"
- else
-@@ -9547,7 +9558,7 @@
- # Two versions of opendir et al. are in -ldir and -lx on SCO Xenix.
- if test $ac_header_dirent = dirent.h; then
- echo $ac_n "checking for opendir in -ldir""... $ac_c" 1>&6
--echo "configure:9551: checking for opendir in -ldir" >&5
-+echo "configure:9562: checking for opendir in -ldir" >&5
- ac_lib_var=`echo dir'_'opendir | sed 'y%./+-%__p_%'`
- if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
-@@ -9555,7 +9566,7 @@
-   ac_save_LIBS="$LIBS"
- LIBS="-ldir  $LIBS"
- cat > conftest.$ac_ext <<EOF
--#line 9559 "configure"
-+#line 9570 "configure"
- #include "confdefs.h"
- /* Override any gcc2 internal prototype to avoid an error.  */
- /* We use char because int might match the return type of a gcc2
-@@ -9566,7 +9577,7 @@
- opendir()
- ; return 0; }
- EOF
--if { (eval echo configure:9570: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-+if { (eval echo configure:9581: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-   rm -rf conftest*
-   eval "ac_cv_lib_$ac_lib_var=yes"
- else
-@@ -9588,7 +9599,7 @@
- 
- else
- echo $ac_n "checking for opendir in -lx""... $ac_c" 1>&6
--echo "configure:9592: checking for opendir in -lx" >&5
-+echo "configure:9603: checking for opendir in -lx" >&5
- ac_lib_var=`echo x'_'opendir | sed 'y%./+-%__p_%'`
- if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
-@@ -9596,7 +9607,7 @@
-   ac_save_LIBS="$LIBS"
- LIBS="-lx  $LIBS"
- cat > conftest.$ac_ext <<EOF
--#line 9600 "configure"
-+#line 9611 "configure"
- #include "confdefs.h"
- /* Override any gcc2 internal prototype to avoid an error.  */
- /* We use char because int might match the return type of a gcc2
-@@ -9607,7 +9618,7 @@
- opendir()
- ; return 0; }
- EOF
--if { (eval echo configure:9611: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-+if { (eval echo configure:9622: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-   rm -rf conftest*
-   eval "ac_cv_lib_$ac_lib_var=yes"
- else
-@@ -9639,17 +9650,17 @@
- do
- ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
- echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
--echo "configure:9643: checking for $ac_hdr" >&5
-+echo "configure:9654: checking for $ac_hdr" >&5
- if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   cat > conftest.$ac_ext <<EOF
--#line 9648 "configure"
-+#line 9659 "configure"
- #include "confdefs.h"
- #include <$ac_hdr>
- EOF
- ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
--{ (eval echo configure:9653: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-+{ (eval echo configure:9664: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
- ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
- if test -z "$ac_err"; then
-   rm -rf conftest*
-@@ -9679,17 +9690,17 @@
- do
- ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
- echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
--echo "configure:9683: checking for $ac_hdr" >&5
-+echo "configure:9694: checking for $ac_hdr" >&5
- if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   cat > conftest.$ac_ext <<EOF
--#line 9688 "configure"
-+#line 9699 "configure"
- #include "confdefs.h"
- #include <$ac_hdr>
- EOF
- ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
--{ (eval echo configure:9693: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-+{ (eval echo configure:9704: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
- ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
- if test -z "$ac_err"; then
-   rm -rf conftest*
-@@ -9719,17 +9730,17 @@
- do
- ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
- echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
--echo "configure:9723: checking for $ac_hdr" >&5
-+echo "configure:9734: checking for $ac_hdr" >&5
- if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   cat > conftest.$ac_ext <<EOF
--#line 9728 "configure"
-+#line 9739 "configure"
- #include "confdefs.h"
- #include <$ac_hdr>
- EOF
- ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
--{ (eval echo configure:9733: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-+{ (eval echo configure:9744: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
- ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
- if test -z "$ac_err"; then
-   rm -rf conftest*
-@@ -9759,17 +9770,17 @@
- do
- ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
- echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
--echo "configure:9763: checking for $ac_hdr" >&5
-+echo "configure:9774: checking for $ac_hdr" >&5
- if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   cat > conftest.$ac_ext <<EOF
--#line 9768 "configure"
-+#line 9779 "configure"
- #include "confdefs.h"
- #include <$ac_hdr>
- EOF
- ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
--{ (eval echo configure:9773: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-+{ (eval echo configure:9784: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
- ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
- if test -z "$ac_err"; then
-   rm -rf conftest*
-@@ -9799,17 +9810,17 @@
- do
- ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
- echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
--echo "configure:9803: checking for $ac_hdr" >&5
-+echo "configure:9814: checking for $ac_hdr" >&5
- if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   cat > conftest.$ac_ext <<EOF
--#line 9808 "configure"
-+#line 9819 "configure"
- #include "confdefs.h"
- #include <$ac_hdr>
- EOF
- ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
--{ (eval echo configure:9813: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-+{ (eval echo configure:9824: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
- ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
- if test -z "$ac_err"; then
-   rm -rf conftest*
-@@ -9839,17 +9850,17 @@
- do
- ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
- echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
--echo "configure:9843: checking for $ac_hdr" >&5
-+echo "configure:9854: checking for $ac_hdr" >&5
- if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   cat > conftest.$ac_ext <<EOF
--#line 9848 "configure"
-+#line 9859 "configure"
- #include "confdefs.h"
- #include <$ac_hdr>
- EOF
- ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
--{ (eval echo configure:9853: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-+{ (eval echo configure:9864: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
- ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
- if test -z "$ac_err"; then
-   rm -rf conftest*
-@@ -9880,17 +9891,17 @@
- do
- ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
- echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
--echo "configure:9884: checking for $ac_hdr" >&5
-+echo "configure:9895: checking for $ac_hdr" >&5
- if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   cat > conftest.$ac_ext <<EOF
--#line 9889 "configure"
-+#line 9900 "configure"
- #include "confdefs.h"
- #include <$ac_hdr>
- EOF
- ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
--{ (eval echo configure:9894: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-+{ (eval echo configure:9905: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
- ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
- if test -z "$ac_err"; then
-   rm -rf conftest*
-@@ -9921,17 +9932,17 @@
- do
- ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
- echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
--echo "configure:9925: checking for $ac_hdr" >&5
-+echo "configure:9936: checking for $ac_hdr" >&5
- if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   cat > conftest.$ac_ext <<EOF
--#line 9930 "configure"
-+#line 9941 "configure"
- #include "confdefs.h"
- #include <$ac_hdr>
- EOF
- ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
--{ (eval echo configure:9935: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-+{ (eval echo configure:9946: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
- ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
- if test -z "$ac_err"; then
-   rm -rf conftest*
-@@ -9961,17 +9972,17 @@
- do
- ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
- echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
--echo "configure:9965: checking for $ac_hdr" >&5
-+echo "configure:9976: checking for $ac_hdr" >&5
- if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   cat > conftest.$ac_ext <<EOF
--#line 9970 "configure"
-+#line 9981 "configure"
- #include "confdefs.h"
- #include <$ac_hdr>
- EOF
- ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
--{ (eval echo configure:9975: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-+{ (eval echo configure:9986: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
- ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
- if test -z "$ac_err"; then
-   rm -rf conftest*
-@@ -10002,17 +10013,17 @@
- do
- ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
- echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
--echo "configure:10006: checking for $ac_hdr" >&5
-+echo "configure:10017: checking for $ac_hdr" >&5
- if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   cat > conftest.$ac_ext <<EOF
--#line 10011 "configure"
-+#line 10022 "configure"
- #include "confdefs.h"
- #include <$ac_hdr>
- EOF
- ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
--{ (eval echo configure:10016: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-+{ (eval echo configure:10027: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
- ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
- if test -z "$ac_err"; then
-   rm -rf conftest*
-@@ -10049,17 +10060,17 @@
- NEW_H=new.h
- ac_safe=`echo "new" | sed 'y%./+-%__p_%'`
- echo $ac_n "checking for new""... $ac_c" 1>&6
--echo "configure:10053: checking for new" >&5
-+echo "configure:10064: checking for new" >&5
- if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   cat > conftest.$ac_ext <<EOF
--#line 10058 "configure"
-+#line 10069 "configure"
- #include "confdefs.h"
- #include <new>
- EOF
- ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
--{ (eval echo configure:10063: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-+{ (eval echo configure:10074: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
- ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
- if test -z "$ac_err"; then
-   rm -rf conftest*
-@@ -10101,17 +10112,17 @@
- if test "x$enable_dtrace" = "xyes"; then
-   ac_safe=`echo "sys/sdt.h" | sed 'y%./+-%__p_%'`
- echo $ac_n "checking for sys/sdt.h""... $ac_c" 1>&6
--echo "configure:10105: checking for sys/sdt.h" >&5
-+echo "configure:10116: checking for sys/sdt.h" >&5
- if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   cat > conftest.$ac_ext <<EOF
--#line 10110 "configure"
-+#line 10121 "configure"
- #include "confdefs.h"
- #include <sys/sdt.h>
- EOF
- ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
--{ (eval echo configure:10115: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-+{ (eval echo configure:10126: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
- ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
- if test -z "$ac_err"; then
-   rm -rf conftest*
-@@ -10151,17 +10162,17 @@
- do
- ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
- echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
--echo "configure:10155: checking for $ac_hdr" >&5
-+echo "configure:10166: checking for $ac_hdr" >&5
- if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   cat > conftest.$ac_ext <<EOF
--#line 10160 "configure"
-+#line 10171 "configure"
- #include "confdefs.h"
- #include <$ac_hdr>
- EOF
- ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
--{ (eval echo configure:10165: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-+{ (eval echo configure:10176: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
- ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
- if test -z "$ac_err"; then
-   rm -rf conftest*
-@@ -10192,17 +10203,17 @@
- 
- ac_safe=`echo "linux/perf_event.h" | sed 'y%./+-%__p_%'`
- echo $ac_n "checking for linux/perf_event.h""... $ac_c" 1>&6
--echo "configure:10196: checking for linux/perf_event.h" >&5
-+echo "configure:10207: checking for linux/perf_event.h" >&5
- if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   cat > conftest.$ac_ext <<EOF
--#line 10201 "configure"
-+#line 10212 "configure"
- #include "confdefs.h"
- #include <linux/perf_event.h>
- EOF
- ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
--{ (eval echo configure:10206: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-+{ (eval echo configure:10217: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
- ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
- if test -z "$ac_err"; then
-   rm -rf conftest*
-@@ -10230,7 +10241,7 @@
- 	;;
- *)
- 	echo $ac_n "checking for gethostbyname_r in -lc_r""... $ac_c" 1>&6
--echo "configure:10234: checking for gethostbyname_r in -lc_r" >&5
-+echo "configure:10245: checking for gethostbyname_r in -lc_r" >&5
- ac_lib_var=`echo c_r'_'gethostbyname_r | sed 'y%./+-%__p_%'`
- if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
-@@ -10238,7 +10249,7 @@
-   ac_save_LIBS="$LIBS"
- LIBS="-lc_r  $LIBS"
- cat > conftest.$ac_ext <<EOF
--#line 10242 "configure"
-+#line 10253 "configure"
- #include "confdefs.h"
- /* Override any gcc2 internal prototype to avoid an error.  */
- /* We use char because int might match the return type of a gcc2
-@@ -10249,7 +10260,7 @@
- gethostbyname_r()
- ; return 0; }
- EOF
--if { (eval echo configure:10253: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-+if { (eval echo configure:10264: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-   rm -rf conftest*
-   eval "ac_cv_lib_$ac_lib_var=yes"
- else
-@@ -10289,14 +10300,14 @@
- *)
-     
- echo $ac_n "checking for library containing dlopen""... $ac_c" 1>&6
--echo "configure:10293: checking for library containing dlopen" >&5
-+echo "configure:10304: checking for library containing dlopen" >&5
- if eval "test \"`echo '$''{'ac_cv_search_dlopen'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   ac_func_search_save_LIBS="$LIBS"
- ac_cv_search_dlopen="no"
- cat > conftest.$ac_ext <<EOF
--#line 10300 "configure"
-+#line 10311 "configure"
- #include "confdefs.h"
- /* Override any gcc2 internal prototype to avoid an error.  */
- /* We use char because int might match the return type of a gcc2
-@@ -10307,7 +10318,7 @@
- dlopen()
- ; return 0; }
- EOF
--if { (eval echo configure:10311: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-+if { (eval echo configure:10322: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-   rm -rf conftest*
-   ac_cv_search_dlopen="none required"
- else
-@@ -10318,7 +10329,7 @@
- test "$ac_cv_search_dlopen" = "no" && for i in dl; do
- LIBS="-l$i  $ac_func_search_save_LIBS"
- cat > conftest.$ac_ext <<EOF
--#line 10322 "configure"
-+#line 10333 "configure"
- #include "confdefs.h"
- /* Override any gcc2 internal prototype to avoid an error.  */
- /* We use char because int might match the return type of a gcc2
-@@ -10329,7 +10340,7 @@
- dlopen()
- ; return 0; }
- EOF
--if { (eval echo configure:10333: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-+if { (eval echo configure:10344: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-   rm -rf conftest*
-   ac_cv_search_dlopen="-l$i"
- break
-@@ -10347,17 +10358,17 @@
-   test "$ac_cv_search_dlopen" = "none required" || LIBS="$ac_cv_search_dlopen $LIBS"
-   ac_safe=`echo "dlfcn.h" | sed 'y%./+-%__p_%'`
- echo $ac_n "checking for dlfcn.h""... $ac_c" 1>&6
--echo "configure:10351: checking for dlfcn.h" >&5
-+echo "configure:10362: checking for dlfcn.h" >&5
- if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   cat > conftest.$ac_ext <<EOF
--#line 10356 "configure"
-+#line 10367 "configure"
- #include "confdefs.h"
- #include <dlfcn.h>
- EOF
- ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
--{ (eval echo configure:10361: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-+{ (eval echo configure:10372: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
- ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
- if test -z "$ac_err"; then
-   rm -rf conftest*
-@@ -10392,12 +10403,12 @@
- for ac_func in dladdr
- do
- echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
--echo "configure:10396: checking for $ac_func" >&5
-+echo "configure:10407: checking for $ac_func" >&5
- if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   cat > conftest.$ac_ext <<EOF
--#line 10401 "configure"
-+#line 10412 "configure"
- #include "confdefs.h"
- /* System header to define __stub macros and hopefully few prototypes,
-     which can conflict with char $ac_func(); below.  */
-@@ -10420,7 +10431,7 @@
- 
- ; return 0; }
- EOF
--if { (eval echo configure:10424: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-+if { (eval echo configure:10435: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-   rm -rf conftest*
-   eval "ac_cv_func_$ac_func=yes"
- else
-@@ -10451,7 +10462,7 @@
-     case $target in
-     *-aix*)
- 	echo $ac_n "checking for demangle in -lC_r""... $ac_c" 1>&6
--echo "configure:10455: checking for demangle in -lC_r" >&5
-+echo "configure:10466: checking for demangle in -lC_r" >&5
- ac_lib_var=`echo C_r'_'demangle | sed 'y%./+-%__p_%'`
- if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
-@@ -10459,7 +10470,7 @@
-   ac_save_LIBS="$LIBS"
- LIBS="-lC_r  $LIBS"
- cat > conftest.$ac_ext <<EOF
--#line 10463 "configure"
-+#line 10474 "configure"
- #include "confdefs.h"
- /* Override any gcc2 internal prototype to avoid an error.  */
- /* We use char because int might match the return type of a gcc2
-@@ -10470,7 +10481,7 @@
- demangle()
- ; return 0; }
- EOF
--if { (eval echo configure:10474: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-+if { (eval echo configure:10485: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-   rm -rf conftest*
-   eval "ac_cv_lib_$ac_lib_var=yes"
- else
-@@ -10500,7 +10511,7 @@
- 	;;
-      *)
- 	echo $ac_n "checking for demangle in -lC""... $ac_c" 1>&6
--echo "configure:10504: checking for demangle in -lC" >&5
-+echo "configure:10515: checking for demangle in -lC" >&5
- ac_lib_var=`echo C'_'demangle | sed 'y%./+-%__p_%'`
- if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
-@@ -10508,7 +10519,7 @@
-   ac_save_LIBS="$LIBS"
- LIBS="-lC  $LIBS"
- cat > conftest.$ac_ext <<EOF
--#line 10512 "configure"
-+#line 10523 "configure"
- #include "confdefs.h"
- /* Override any gcc2 internal prototype to avoid an error.  */
- /* We use char because int might match the return type of a gcc2
-@@ -10519,7 +10530,7 @@
- demangle()
- ; return 0; }
- EOF
--if { (eval echo configure:10523: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-+if { (eval echo configure:10534: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-   rm -rf conftest*
-   eval "ac_cv_lib_$ac_lib_var=yes"
- else
-@@ -10555,7 +10566,7 @@
-     ;;
- *)
-     echo $ac_n "checking for socket in -lsocket""... $ac_c" 1>&6
--echo "configure:10559: checking for socket in -lsocket" >&5
-+echo "configure:10570: checking for socket in -lsocket" >&5
- ac_lib_var=`echo socket'_'socket | sed 'y%./+-%__p_%'`
- if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
-@@ -10563,7 +10574,7 @@
-   ac_save_LIBS="$LIBS"
- LIBS="-lsocket  $LIBS"
- cat > conftest.$ac_ext <<EOF
--#line 10567 "configure"
-+#line 10578 "configure"
- #include "confdefs.h"
- /* Override any gcc2 internal prototype to avoid an error.  */
- /* We use char because int might match the return type of a gcc2
-@@ -10574,7 +10585,7 @@
- socket()
- ; return 0; }
- EOF
--if { (eval echo configure:10578: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-+if { (eval echo configure:10589: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-   rm -rf conftest*
-   eval "ac_cv_lib_$ac_lib_var=yes"
- else
-@@ -10604,16 +10615,16 @@
- esac
- 
- echo $ac_n "checking for ARM SIMD support in compiler""... $ac_c" 1>&6
--echo "configure:10608: checking for ARM SIMD support in compiler" >&5
-+echo "configure:10619: checking for ARM SIMD support in compiler" >&5
- cat > conftest.$ac_ext <<EOF
--#line 10610 "configure"
-+#line 10621 "configure"
- #include "confdefs.h"
- 
- int main() {
- asm("uqadd8 r1, r1, r2");
- ; return 0; }
- EOF
--if { (eval echo configure:10617: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-+if { (eval echo configure:10628: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-   rm -rf conftest*
-   result="yes"
- else
-@@ -10634,21 +10645,21 @@
- 
- 
- echo $ac_n "checking for ARM NEON support in compiler""... $ac_c" 1>&6
--echo "configure:10638: checking for ARM NEON support in compiler" >&5
-+echo "configure:10649: checking for ARM NEON support in compiler" >&5
- _SAVE_CFLAGS="$CFLAGS"
- if test "$GNU_CC"; then
-   # gcc needs -mfpu=neon to recognize NEON instructions
-   CFLAGS="$CFLAGS -mfpu=neon -mfloat-abi=softfp"
- fi
- cat > conftest.$ac_ext <<EOF
--#line 10645 "configure"
-+#line 10656 "configure"
- #include "confdefs.h"
- 
- int main() {
- asm("vadd.i8 d0, d0, d0");
- ; return 0; }
- EOF
--if { (eval echo configure:10652: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-+if { (eval echo configure:10663: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-   rm -rf conftest*
-   result="yes"
- else
-@@ -10676,7 +10687,7 @@
- *)
-     
- echo $ac_n "checking for pthread_create in -lpthreads""... $ac_c" 1>&6
--echo "configure:10680: checking for pthread_create in -lpthreads" >&5
-+echo "configure:10691: checking for pthread_create in -lpthreads" >&5
- echo "
-     #include <pthread.h>
-     #include <stdlib.h>
-@@ -10699,7 +10710,7 @@
-         echo "$ac_t""no" 1>&6
-         
- echo $ac_n "checking for pthread_create in -lpthread""... $ac_c" 1>&6
--echo "configure:10703: checking for pthread_create in -lpthread" >&5
-+echo "configure:10714: checking for pthread_create in -lpthread" >&5
- echo "
-     #include <pthread.h>
-     #include <stdlib.h>
-@@ -10722,7 +10733,7 @@
-         echo "$ac_t""no" 1>&6
-         
- echo $ac_n "checking for pthread_create in -lc_r""... $ac_c" 1>&6
--echo "configure:10726: checking for pthread_create in -lc_r" >&5
-+echo "configure:10737: checking for pthread_create in -lc_r" >&5
- echo "
-     #include <pthread.h>
-     #include <stdlib.h>
-@@ -10745,7 +10756,7 @@
-         echo "$ac_t""no" 1>&6
-         
- echo $ac_n "checking for pthread_create in -lc""... $ac_c" 1>&6
--echo "configure:10749: checking for pthread_create in -lc" >&5
-+echo "configure:10760: checking for pthread_create in -lc" >&5
- echo "
-     #include <pthread.h>
-     #include <stdlib.h>
-@@ -10804,7 +10815,7 @@
- 				rm -f conftest*
- 	ac_cv_have_dash_pthread=no
- 	echo $ac_n "checking whether ${CC-cc} accepts -pthread""... $ac_c" 1>&6
--echo "configure:10808: checking whether ${CC-cc} accepts -pthread" >&5
-+echo "configure:10819: checking whether ${CC-cc} accepts -pthread" >&5
- 	echo 'int main() { return 0; }' | cat > conftest.c
- 	${CC-cc} -pthread -o conftest conftest.c > conftest.out 2>&1
- 	if test $? -eq 0; then
-@@ -10827,7 +10838,7 @@
- 			    ac_cv_have_dash_pthreads=no
-     if test "$ac_cv_have_dash_pthread" = "no"; then
- 	    echo $ac_n "checking whether ${CC-cc} accepts -pthreads""... $ac_c" 1>&6
--echo "configure:10831: checking whether ${CC-cc} accepts -pthreads" >&5
-+echo "configure:10842: checking whether ${CC-cc} accepts -pthreads" >&5
-     	echo 'int main() { return 0; }' | cat > conftest.c
- 	    ${CC-cc} -pthreads -o conftest conftest.c > conftest.out 2>&1
-     	if test $? -eq 0; then
-@@ -10922,7 +10933,7 @@
- fi
- 
- echo $ac_n "checking whether mmap() sees write()s""... $ac_c" 1>&6
--echo "configure:10926: checking whether mmap() sees write()s" >&5
-+echo "configure:10937: checking whether mmap() sees write()s" >&5
- 
- 
- mmap_test_prog='
-@@ -10961,11 +10972,11 @@
-   result="yes"
- else
-   cat > conftest.$ac_ext <<EOF
--#line 10965 "configure"
-+#line 10976 "configure"
- #include "confdefs.h"
- $mmap_test_prog 
- EOF
--if { (eval echo configure:10969: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
-+if { (eval echo configure:10980: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
- then
-   result="yes"
- else
-@@ -10990,13 +11001,13 @@
- 
- if test $ac_cv_prog_gcc = yes; then
-     echo $ac_n "checking whether ${CC-cc} needs -traditional""... $ac_c" 1>&6
--echo "configure:10994: checking whether ${CC-cc} needs -traditional" >&5
-+echo "configure:11005: checking whether ${CC-cc} needs -traditional" >&5
- if eval "test \"`echo '$''{'ac_cv_prog_gcc_traditional'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-     ac_pattern="Autoconf.*'x'"
-   cat > conftest.$ac_ext <<EOF
--#line 11000 "configure"
-+#line 11011 "configure"
- #include "confdefs.h"
- #include <sgtty.h>
- Autoconf TIOCGETP
-@@ -11014,7 +11025,7 @@
- 
-   if test $ac_cv_prog_gcc_traditional = no; then
-     cat > conftest.$ac_ext <<EOF
--#line 11018 "configure"
-+#line 11029 "configure"
- #include "confdefs.h"
- #include <termio.h>
- Autoconf TCGETA
-@@ -11036,7 +11047,7 @@
- fi
- 
- echo $ac_n "checking for 8-bit clean memcmp""... $ac_c" 1>&6
--echo "configure:11040: checking for 8-bit clean memcmp" >&5
-+echo "configure:11051: checking for 8-bit clean memcmp" >&5
- if eval "test \"`echo '$''{'ac_cv_func_memcmp_clean'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-@@ -11044,7 +11055,7 @@
-   ac_cv_func_memcmp_clean=no
- else
-   cat > conftest.$ac_ext <<EOF
--#line 11048 "configure"
-+#line 11059 "configure"
- #include "confdefs.h"
- 
- main()
-@@ -11054,7 +11065,7 @@
- }
- 
- EOF
--if { (eval echo configure:11058: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
-+if { (eval echo configure:11069: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
- then
-   ac_cv_func_memcmp_clean=yes
- else
-@@ -11076,12 +11087,12 @@
-                 stat64 statvfs statvfs64 strerror strtok_r truncate64
- do
- echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
--echo "configure:11080: checking for $ac_func" >&5
-+echo "configure:11091: checking for $ac_func" >&5
- if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   cat > conftest.$ac_ext <<EOF
--#line 11085 "configure"
-+#line 11096 "configure"
- #include "confdefs.h"
- /* System header to define __stub macros and hopefully few prototypes,
-     which can conflict with char $ac_func(); below.  */
-@@ -11104,7 +11115,7 @@
- 
- ; return 0; }
- EOF
--if { (eval echo configure:11108: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-+if { (eval echo configure:11119: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-   rm -rf conftest*
-   eval "ac_cv_func_$ac_func=yes"
- else
-@@ -11132,12 +11143,12 @@
- _SAVE_LDFLAGS=$LDFLAGS
- LDFLAGS="$LDFLAGS -lrt"
- echo $ac_n "checking for clock_gettime(CLOCK_MONOTONIC) and -lrt""... $ac_c" 1>&6
--echo "configure:11136: checking for clock_gettime(CLOCK_MONOTONIC) and -lrt" >&5
-+echo "configure:11147: checking for clock_gettime(CLOCK_MONOTONIC) and -lrt" >&5
- if eval "test \"`echo '$''{'ac_cv_have_clock_monotonic'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   cat > conftest.$ac_ext <<EOF
--#line 11141 "configure"
-+#line 11152 "configure"
- #include "confdefs.h"
- #include <time.h>
- int main() {
-@@ -11145,7 +11156,7 @@
-                               clock_gettime(CLOCK_MONOTONIC, &ts); 
- ; return 0; }
- EOF
--if { (eval echo configure:11149: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-+if { (eval echo configure:11160: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-   rm -rf conftest*
-   ac_cv_have_clock_monotonic=yes
- else
-@@ -11171,14 +11182,14 @@
- fi
- 
- cat > conftest.$ac_ext <<EOF
--#line 11175 "configure"
-+#line 11186 "configure"
- #include "confdefs.h"
- #include <windows.h>
- int main() {
- SYSTEMTIME st;FILETIME ft;SystemTimeToFileTime(&st,&ft);
- ; return 0; }
- EOF
--if { (eval echo configure:11182: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-+if { (eval echo configure:11193: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-   rm -rf conftest*
-   ac_cv_have_systemtimetofiletime="yes"
- else
-@@ -11195,14 +11206,14 @@
- 
- fi
- cat > conftest.$ac_ext <<EOF
--#line 11199 "configure"
-+#line 11210 "configure"
- #include "confdefs.h"
- #include <windows.h>
- int main() {
- FILETIME ft;GetSystemTimeAsFileTime(&ft);
- ; return 0; }
- EOF
--if { (eval echo configure:11206: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-+if { (eval echo configure:11217: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-   rm -rf conftest*
-   ac_cv_have_getsystemtimeasfiletime="yes"
- else
-@@ -11229,19 +11240,19 @@
- cross_compiling=$ac_cv_prog_cxx_cross
- 
- echo $ac_n "checking for wcrtomb""... $ac_c" 1>&6
--echo "configure:11233: checking for wcrtomb" >&5
-+echo "configure:11244: checking for wcrtomb" >&5
- if eval "test \"`echo '$''{'ac_cv_have_wcrtomb'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   cat > conftest.$ac_ext <<EOF
--#line 11238 "configure"
-+#line 11249 "configure"
- #include "confdefs.h"
- #include <wchar.h>
- int main() {
- mbstate_t ps={0};wcrtomb(0,'f',&ps);
- ; return 0; }
- EOF
--if { (eval echo configure:11245: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-+if { (eval echo configure:11256: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-   rm -rf conftest*
-   ac_cv_have_wcrtomb="yes"
- else
-@@ -11261,19 +11272,19 @@
- 
- fi
- echo $ac_n "checking for mbrtowc""... $ac_c" 1>&6
--echo "configure:11265: checking for mbrtowc" >&5
-+echo "configure:11276: checking for mbrtowc" >&5
- if eval "test \"`echo '$''{'ac_cv_have_mbrtowc'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   cat > conftest.$ac_ext <<EOF
--#line 11270 "configure"
-+#line 11281 "configure"
- #include "confdefs.h"
- #include <wchar.h>
- int main() {
- mbstate_t ps={0};mbrtowc(0,0,0,&ps);
- ; return 0; }
- EOF
--if { (eval echo configure:11277: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-+if { (eval echo configure:11288: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-   rm -rf conftest*
-   ac_cv_have_mbrtowc="yes"
- else
-@@ -11302,12 +11313,12 @@
- fi
- 
- echo $ac_n "checking for res_ninit()""... $ac_c" 1>&6
--echo "configure:11306: checking for res_ninit()" >&5
-+echo "configure:11317: checking for res_ninit()" >&5
- if eval "test \"`echo '$''{'ac_cv_func_res_ninit'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   cat > conftest.$ac_ext <<EOF
--#line 11311 "configure"
-+#line 11322 "configure"
- #include "confdefs.h"
- 
-         #ifdef linux
-@@ -11319,7 +11330,7 @@
- int foo = res_ninit(&_res);
- ; return 0; }
- EOF
--if { (eval echo configure:11323: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-+if { (eval echo configure:11334: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-   rm -rf conftest*
-   ac_cv_func_res_ninit=yes
- else
-@@ -11349,12 +11360,12 @@
- cross_compiling=$ac_cv_prog_cxx_cross
- 
- echo $ac_n "checking for gnu_get_libc_version()""... $ac_c" 1>&6
--echo "configure:11353: checking for gnu_get_libc_version()" >&5
-+echo "configure:11364: checking for gnu_get_libc_version()" >&5
- if eval "test \"`echo '$''{'ac_cv_func_gnu_get_libc_version'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   cat > conftest.$ac_ext <<EOF
--#line 11358 "configure"
-+#line 11369 "configure"
- #include "confdefs.h"
- 
-         #ifdef HAVE_GNU_LIBC_VERSION_H
-@@ -11365,7 +11376,7 @@
- const char *glibc_version = gnu_get_libc_version();
- ; return 0; }
- EOF
--if { (eval echo configure:11369: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-+if { (eval echo configure:11380: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-   rm -rf conftest*
-   ac_cv_func_gnu_get_libc_version=yes
- else
-@@ -11394,7 +11405,7 @@
-     *)
-     
- echo $ac_n "checking for iconv in -lc""... $ac_c" 1>&6
--echo "configure:11398: checking for iconv in -lc" >&5
-+echo "configure:11409: checking for iconv in -lc" >&5
- ac_lib_var=`echo c'_'iconv | sed 'y%./+-%__p_%'`
- if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
-@@ -11402,7 +11413,7 @@
-   ac_save_LIBS="$LIBS"
- LIBS="-lc  $LIBS"
- cat > conftest.$ac_ext <<EOF
--#line 11406 "configure"
-+#line 11417 "configure"
- #include "confdefs.h"
- /* Override any gcc2 internal prototype to avoid an error.  */
- #ifdef __cplusplus
-@@ -11416,7 +11427,7 @@
- iconv()
- ; return 0; }
- EOF
--if { (eval echo configure:11420: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-+if { (eval echo configure:11431: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-   rm -rf conftest*
-   eval "ac_cv_lib_$ac_lib_var=yes"
- else
-@@ -11435,7 +11446,7 @@
- else
-   echo "$ac_t""no" 1>&6
- echo $ac_n "checking for iconv in -liconv""... $ac_c" 1>&6
--echo "configure:11439: checking for iconv in -liconv" >&5
-+echo "configure:11450: checking for iconv in -liconv" >&5
- ac_lib_var=`echo iconv'_'iconv | sed 'y%./+-%__p_%'`
- if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
-@@ -11443,7 +11454,7 @@
-   ac_save_LIBS="$LIBS"
- LIBS="-liconv  $LIBS"
- cat > conftest.$ac_ext <<EOF
--#line 11447 "configure"
-+#line 11458 "configure"
- #include "confdefs.h"
- /* Override any gcc2 internal prototype to avoid an error.  */
- #ifdef __cplusplus
-@@ -11457,7 +11468,7 @@
- iconv()
- ; return 0; }
- EOF
--if { (eval echo configure:11461: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-+if { (eval echo configure:11472: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-   rm -rf conftest*
-   eval "ac_cv_lib_$ac_lib_var=yes"
- else
-@@ -11476,7 +11487,7 @@
- else
-   echo "$ac_t""no" 1>&6
- echo $ac_n "checking for libiconv in -liconv""... $ac_c" 1>&6
--echo "configure:11480: checking for libiconv in -liconv" >&5
-+echo "configure:11491: checking for libiconv in -liconv" >&5
- ac_lib_var=`echo iconv'_'libiconv | sed 'y%./+-%__p_%'`
- if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
-@@ -11484,7 +11495,7 @@
-   ac_save_LIBS="$LIBS"
- LIBS="-liconv  $LIBS"
- cat > conftest.$ac_ext <<EOF
--#line 11488 "configure"
-+#line 11499 "configure"
- #include "confdefs.h"
- /* Override any gcc2 internal prototype to avoid an error.  */
- #ifdef __cplusplus
-@@ -11498,7 +11509,7 @@
- libiconv()
- ; return 0; }
- EOF
--if { (eval echo configure:11502: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-+if { (eval echo configure:11513: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-   rm -rf conftest*
-   eval "ac_cv_lib_$ac_lib_var=yes"
- else
-@@ -11525,12 +11536,12 @@
- _SAVE_LIBS=$LIBS
- LIBS="$LIBS $_ICONV_LIBS"
- echo $ac_n "checking for iconv()""... $ac_c" 1>&6
--echo "configure:11529: checking for iconv()" >&5
-+echo "configure:11540: checking for iconv()" >&5
- if eval "test \"`echo '$''{'ac_cv_func_iconv'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   cat > conftest.$ac_ext <<EOF
--#line 11534 "configure"
-+#line 11545 "configure"
- #include "confdefs.h"
- 
-         #include <stdlib.h>
-@@ -11544,7 +11555,7 @@
-         
- ; return 0; }
- EOF
--if { (eval echo configure:11548: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-+if { (eval echo configure:11559: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-   rm -rf conftest*
-   ac_cv_func_iconv=yes
- else
-@@ -11568,12 +11579,12 @@
-     LIBXUL_LIBS="$LIBXUL_LIBS $_ICONV_LIBS"
-     LIBICONV="$_ICONV_LIBS"
-     echo $ac_n "checking for iconv() with const input""... $ac_c" 1>&6
--echo "configure:11572: checking for iconv() with const input" >&5
-+echo "configure:11583: checking for iconv() with const input" >&5
- if eval "test \"`echo '$''{'ac_cv_func_const_iconv'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   cat > conftest.$ac_ext <<EOF
--#line 11577 "configure"
-+#line 11588 "configure"
- #include "confdefs.h"
- 
-             #include <stdlib.h>
-@@ -11588,7 +11599,7 @@
-             
- ; return 0; }
- EOF
--if { (eval echo configure:11592: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-+if { (eval echo configure:11603: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-   rm -rf conftest*
-   ac_cv_func_const_iconv=yes
- else
-@@ -11624,7 +11635,7 @@
- 
- 
- echo $ac_n "checking for an implementation of va_copy()""... $ac_c" 1>&6
--echo "configure:11628: checking for an implementation of va_copy()" >&5
-+echo "configure:11639: checking for an implementation of va_copy()" >&5
- if eval "test \"`echo '$''{'ac_cv_va_copy'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-@@ -11634,7 +11645,7 @@
-     
- else
-   cat > conftest.$ac_ext <<EOF
--#line 11638 "configure"
-+#line 11649 "configure"
- #include "confdefs.h"
- 
-         #include <stdarg.h>
-@@ -11648,7 +11659,7 @@
-         }
-         int main() { f (0, 42); return 0; }
- EOF
--if { (eval echo configure:11652: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
-+if { (eval echo configure:11663: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
- then
-   ac_cv_va_copy=yes
- else
-@@ -11665,7 +11676,7 @@
- 
- echo "$ac_t""$ac_cv_va_copy" 1>&6
- echo $ac_n "checking for an implementation of __va_copy()""... $ac_c" 1>&6
--echo "configure:11669: checking for an implementation of __va_copy()" >&5
-+echo "configure:11680: checking for an implementation of __va_copy()" >&5
- if eval "test \"`echo '$''{'ac_cv___va_copy'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-@@ -11675,7 +11686,7 @@
-     
- else
-   cat > conftest.$ac_ext <<EOF
--#line 11679 "configure"
-+#line 11690 "configure"
- #include "confdefs.h"
- 
-         #include <stdarg.h>
-@@ -11689,7 +11700,7 @@
-         }
-         int main() { f (0, 42); return 0; }
- EOF
--if { (eval echo configure:11693: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
-+if { (eval echo configure:11704: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
- then
-   ac_cv___va_copy=yes
- else
-@@ -11706,7 +11717,7 @@
- 
- echo "$ac_t""$ac_cv___va_copy" 1>&6
- echo $ac_n "checking whether va_lists can be copied by value""... $ac_c" 1>&6
--echo "configure:11710: checking whether va_lists can be copied by value" >&5
-+echo "configure:11721: checking whether va_lists can be copied by value" >&5
- if eval "test \"`echo '$''{'ac_cv_va_val_copy'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-@@ -11716,7 +11727,7 @@
-     
- else
-   cat > conftest.$ac_ext <<EOF
--#line 11720 "configure"
-+#line 11731 "configure"
- #include "confdefs.h"
- 
-         #include <stdarg.h>
-@@ -11730,7 +11741,7 @@
-         }
-         int main() { f (0, 42); return 0; }
- EOF
--if { (eval echo configure:11734: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
-+if { (eval echo configure:11745: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
- then
-   ac_cv_va_val_copy=yes
- else
-@@ -11839,12 +11850,12 @@
- if test "$GNU_CC"; then
-   if test "$CPU_ARCH" = "arm" ; then
-     echo $ac_n "checking for ARM EABI""... $ac_c" 1>&6
--echo "configure:11843: checking for ARM EABI" >&5
-+echo "configure:11854: checking for ARM EABI" >&5
- if eval "test \"`echo '$''{'ac_cv_gcc_arm_eabi'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   cat > conftest.$ac_ext <<EOF
--#line 11848 "configure"
-+#line 11859 "configure"
- #include "confdefs.h"
- 
- int main() {
-@@ -11857,7 +11868,7 @@
-                         
- ; return 0; }
- EOF
--if { (eval echo configure:11861: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-+if { (eval echo configure:11872: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-   rm -rf conftest*
-   ac_cv_gcc_arm_eabi="yes"
- else
-@@ -11879,12 +11890,12 @@
-   fi
- 
-   echo $ac_n "checking for gcc 3.0 ABI""... $ac_c" 1>&6
--echo "configure:11883: checking for gcc 3.0 ABI" >&5
-+echo "configure:11894: checking for gcc 3.0 ABI" >&5
- if eval "test \"`echo '$''{'ac_cv_gcc_three_abi'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   cat > conftest.$ac_ext <<EOF
--#line 11888 "configure"
-+#line 11899 "configure"
- #include "confdefs.h"
- 
- int main() {
-@@ -11897,7 +11908,7 @@
-                       
- ; return 0; }
- EOF
--if { (eval echo configure:11901: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-+if { (eval echo configure:11912: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-   rm -rf conftest*
-   ac_cv_gcc_three_abi="yes"
- else
-@@ -11921,12 +11932,12 @@
- 
- 
- echo $ac_n "checking for C++ \"explicit\" keyword""... $ac_c" 1>&6
--echo "configure:11925: checking for C++ \"explicit\" keyword" >&5
-+echo "configure:11936: checking for C++ \"explicit\" keyword" >&5
- if eval "test \"`echo '$''{'ac_cv_cpp_explicit'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   cat > conftest.$ac_ext <<EOF
--#line 11930 "configure"
-+#line 11941 "configure"
- #include "confdefs.h"
- class X {
-                                public: explicit X(int i) : i_(i) {}
-@@ -11936,7 +11947,7 @@
- X x(3);
- ; return 0; }
- EOF
--if { (eval echo configure:11940: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-+if { (eval echo configure:11951: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-   rm -rf conftest*
-   ac_cv_cpp_explicit=yes
- else
-@@ -11957,12 +11968,12 @@
- fi
- 
- echo $ac_n "checking for C++ \"typename\" keyword""... $ac_c" 1>&6
--echo "configure:11961: checking for C++ \"typename\" keyword" >&5
-+echo "configure:11972: checking for C++ \"typename\" keyword" >&5
- if eval "test \"`echo '$''{'ac_cv_cpp_typename'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   cat > conftest.$ac_ext <<EOF
--#line 11966 "configure"
-+#line 11977 "configure"
- #include "confdefs.h"
- class param {
-                                public:
-@@ -11981,7 +11992,7 @@
-                                A.foo(0);
- ; return 0; }
- EOF
--if { (eval echo configure:11985: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-+if { (eval echo configure:11996: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-   rm -rf conftest*
-   ac_cv_cpp_typename=yes
- else
-@@ -12002,12 +12013,12 @@
- fi
- 
- echo $ac_n "checking for modern C++ template specialization syntax support""... $ac_c" 1>&6
--echo "configure:12006: checking for modern C++ template specialization syntax support" >&5
-+echo "configure:12017: checking for modern C++ template specialization syntax support" >&5
- if eval "test \"`echo '$''{'ac_cv_cpp_modern_specialize_template_syntax'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   cat > conftest.$ac_ext <<EOF
--#line 12011 "configure"
-+#line 12022 "configure"
- #include "confdefs.h"
- template <class T> struct X { int a; };
-                                class Y {};
-@@ -12017,7 +12028,7 @@
-                                X<Y> y_x;
- ; return 0; }
- EOF
--if { (eval echo configure:12021: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-+if { (eval echo configure:12032: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-   rm -rf conftest*
-   ac_cv_cpp_modern_specialize_template_syntax=yes
- else
-@@ -12039,12 +12050,12 @@
- 
- 
- echo $ac_n "checking whether partial template specialization works""... $ac_c" 1>&6
--echo "configure:12043: checking whether partial template specialization works" >&5
-+echo "configure:12054: checking whether partial template specialization works" >&5
- if eval "test \"`echo '$''{'ac_cv_cpp_partial_specialization'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   cat > conftest.$ac_ext <<EOF
--#line 12048 "configure"
-+#line 12059 "configure"
- #include "confdefs.h"
- template <class T> class Foo {};
-                                template <class T> class Foo<T*> {};
-@@ -12052,7 +12063,7 @@
- return 0;
- ; return 0; }
- EOF
--if { (eval echo configure:12056: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-+if { (eval echo configure:12067: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-   rm -rf conftest*
-   ac_cv_cpp_partial_specialization=yes
- else
-@@ -12073,12 +12084,12 @@
- fi
- 
- echo $ac_n "checking whether operators must be re-defined for templates derived from templates""... $ac_c" 1>&6
--echo "configure:12077: checking whether operators must be re-defined for templates derived from templates" >&5
-+echo "configure:12088: checking whether operators must be re-defined for templates derived from templates" >&5
- if eval "test \"`echo '$''{'ac_cv_need_derived_template_operators'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   cat > conftest.$ac_ext <<EOF
--#line 12082 "configure"
-+#line 12093 "configure"
- #include "confdefs.h"
- template <class T> class Base { };
-                                 template <class T>
-@@ -12090,7 +12101,7 @@
-                                 return 0;
- ; return 0; }
- EOF
--if { (eval echo configure:12094: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-+if { (eval echo configure:12105: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-   rm -rf conftest*
-   ac_cv_need_derived_template_operators=no
- else
-@@ -12112,12 +12123,12 @@
- 
- 
- echo $ac_n "checking whether we need to cast a derived template to pass as its base class""... $ac_c" 1>&6
--echo "configure:12116: checking whether we need to cast a derived template to pass as its base class" >&5
-+echo "configure:12127: checking whether we need to cast a derived template to pass as its base class" >&5
- if eval "test \"`echo '$''{'ac_cv_need_cpp_template_cast_to_base'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   cat > conftest.$ac_ext <<EOF
--#line 12121 "configure"
-+#line 12132 "configure"
- #include "confdefs.h"
- template <class T> class Base { };
-                                 template <class T> class Derived : public Base<T> { };
-@@ -12126,7 +12137,7 @@
- Derived<char> bar; return foo(bar);
- ; return 0; }
- EOF
--if { (eval echo configure:12130: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-+if { (eval echo configure:12141: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-   rm -rf conftest*
-   ac_cv_need_cpp_template_cast_to_base=no
- else
-@@ -12147,12 +12158,12 @@
- fi
- 
- echo $ac_n "checking whether the compiler can resolve const ambiguities for templates""... $ac_c" 1>&6
--echo "configure:12151: checking whether the compiler can resolve const ambiguities for templates" >&5
-+echo "configure:12162: checking whether the compiler can resolve const ambiguities for templates" >&5
- if eval "test \"`echo '$''{'ac_cv_can_resolve_const_ambiguity'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   cat > conftest.$ac_ext <<EOF
--#line 12156 "configure"
-+#line 12167 "configure"
- #include "confdefs.h"
- 
-                                 template <class T> class ptrClass {
-@@ -12173,7 +12184,7 @@
-                                  a(&i); 
- ; return 0; }
- EOF
--if { (eval echo configure:12177: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-+if { (eval echo configure:12188: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-   rm -rf conftest*
-   ac_cv_can_resolve_const_ambiguity=yes
- else
-@@ -12195,12 +12206,12 @@
- 
- 
- echo $ac_n "checking whether the C++ \"using\" keyword can change access""... $ac_c" 1>&6
--echo "configure:12199: checking whether the C++ \"using\" keyword can change access" >&5
-+echo "configure:12210: checking whether the C++ \"using\" keyword can change access" >&5
- if eval "test \"`echo '$''{'ac_cv_cpp_access_changing_using2'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   cat > conftest.$ac_ext <<EOF
--#line 12204 "configure"
-+#line 12215 "configure"
- #include "confdefs.h"
- class A { protected: int foo() { return 0; } };
-                    class B : public A { public: using A::foo; };
-@@ -12208,10 +12219,10 @@
- B b; return b.foo();
- ; return 0; }
- EOF
--if { (eval echo configure:12212: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-+if { (eval echo configure:12223: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-   rm -rf conftest*
-   cat > conftest.$ac_ext <<EOF
--#line 12215 "configure"
-+#line 12226 "configure"
- #include "confdefs.h"
- class A { public: int foo() { return 1; } };
-                        class B : public A { private: using A::foo; };
-@@ -12219,7 +12230,7 @@
- B b; return b.foo();
- ; return 0; }
- EOF
--if { (eval echo configure:12223: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-+if { (eval echo configure:12234: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-   rm -rf conftest*
-   ac_cv_cpp_access_changing_using2=no
- else
-@@ -12247,12 +12258,12 @@
- fi
- 
- echo $ac_n "checking whether the C++ \"using\" keyword resolves ambiguity""... $ac_c" 1>&6
--echo "configure:12251: checking whether the C++ \"using\" keyword resolves ambiguity" >&5
-+echo "configure:12262: checking whether the C++ \"using\" keyword resolves ambiguity" >&5
- if eval "test \"`echo '$''{'ac_cv_cpp_ambiguity_resolving_using'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   cat > conftest.$ac_ext <<EOF
--#line 12256 "configure"
-+#line 12267 "configure"
- #include "confdefs.h"
- class X { 
-                                  public: int go(const X&) {return 3;}
-@@ -12268,7 +12279,7 @@
- X x; Y y; y.jo(x);
- ; return 0; }
- EOF
--if { (eval echo configure:12272: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-+if { (eval echo configure:12283: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-   rm -rf conftest*
-   ac_cv_cpp_ambiguity_resolving_using=yes
- else
-@@ -12289,19 +12300,19 @@
- fi
- 
- echo $ac_n "checking for \"std::\" namespace""... $ac_c" 1>&6
--echo "configure:12293: checking for \"std::\" namespace" >&5
-+echo "configure:12304: checking for \"std::\" namespace" >&5
- if eval "test \"`echo '$''{'ac_cv_cpp_namespace_std'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   cat > conftest.$ac_ext <<EOF
--#line 12298 "configure"
-+#line 12309 "configure"
- #include "confdefs.h"
- #include <algorithm>
- int main() {
- return std::min(0, 1);
- ; return 0; }
- EOF
--if { (eval echo configure:12305: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-+if { (eval echo configure:12316: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-   rm -rf conftest*
-   ac_cv_cpp_namespace_std=yes
- else
-@@ -12322,12 +12333,12 @@
- fi
- 
- echo $ac_n "checking whether standard template operator!=() is ambiguous""... $ac_c" 1>&6
--echo "configure:12326: checking whether standard template operator!=() is ambiguous" >&5
-+echo "configure:12337: checking whether standard template operator!=() is ambiguous" >&5
- if eval "test \"`echo '$''{'ac_cv_cpp_unambiguous_std_notequal'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   cat > conftest.$ac_ext <<EOF
--#line 12331 "configure"
-+#line 12342 "configure"
- #include "confdefs.h"
- #include <algorithm>
-                                 struct T1 {};
-@@ -12337,7 +12348,7 @@
- T1 a,b; return a != b;
- ; return 0; }
- EOF
--if { (eval echo configure:12341: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-+if { (eval echo configure:12352: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-   rm -rf conftest*
-   ac_cv_cpp_unambiguous_std_notequal=unambiguous
- else
-@@ -12359,12 +12370,12 @@
- 
- 
- echo $ac_n "checking for C++ reinterpret_cast""... $ac_c" 1>&6
--echo "configure:12363: checking for C++ reinterpret_cast" >&5
-+echo "configure:12374: checking for C++ reinterpret_cast" >&5
- if eval "test \"`echo '$''{'ac_cv_cpp_reinterpret_cast'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   cat > conftest.$ac_ext <<EOF
--#line 12368 "configure"
-+#line 12379 "configure"
- #include "confdefs.h"
- struct X { int i; };
-                                struct Y { int i; };
-@@ -12372,7 +12383,7 @@
- X x; X*const z = &x;Y*y = reinterpret_cast<Y*>(z);
- ; return 0; }
- EOF
--if { (eval echo configure:12376: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-+if { (eval echo configure:12387: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-   rm -rf conftest*
-   ac_cv_cpp_reinterpret_cast=yes
- else
-@@ -12393,7 +12404,7 @@
- fi
- 
- echo $ac_n "checking for C++ dynamic_cast to void*""... $ac_c" 1>&6
--echo "configure:12397: checking for C++ dynamic_cast to void*" >&5
-+echo "configure:12408: checking for C++ dynamic_cast to void*" >&5
- if eval "test \"`echo '$''{'ac_cv_cpp_dynamic_cast_void_ptr'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-@@ -12401,7 +12412,7 @@
-   ac_cv_cpp_dynamic_cast_void_ptr=no
- else
-   cat > conftest.$ac_ext <<EOF
--#line 12405 "configure"
-+#line 12416 "configure"
- #include "confdefs.h"
- #ifdef __cplusplus
- extern "C" void exit(int);
-@@ -12420,7 +12431,7 @@
-                                            ((void*)&mdo == dynamic_cast<void*>(suby))));
-                             }
- EOF
--if { (eval echo configure:12424: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
-+if { (eval echo configure:12435: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
- then
-   ac_cv_cpp_dynamic_cast_void_ptr=yes
- else
-@@ -12444,19 +12455,19 @@
- 
- 
- echo $ac_n "checking whether C++ requires implementation of unused virtual methods""... $ac_c" 1>&6
--echo "configure:12448: checking whether C++ requires implementation of unused virtual methods" >&5
-+echo "configure:12459: checking whether C++ requires implementation of unused virtual methods" >&5
- if eval "test \"`echo '$''{'ac_cv_cpp_unused_required'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   cat > conftest.$ac_ext <<EOF
--#line 12453 "configure"
-+#line 12464 "configure"
- #include "confdefs.h"
- class X {private: virtual void never_called();};
- int main() {
- X x;
- ; return 0; }
- EOF
--if { (eval echo configure:12460: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-+if { (eval echo configure:12471: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-   rm -rf conftest*
-   ac_cv_cpp_unused_required=no
- else
-@@ -12479,12 +12490,12 @@
- 
- 
- echo $ac_n "checking for trouble comparing to zero near std::operator!=()""... $ac_c" 1>&6
--echo "configure:12483: checking for trouble comparing to zero near std::operator!=()" >&5
-+echo "configure:12494: checking for trouble comparing to zero near std::operator!=()" >&5
- if eval "test \"`echo '$''{'ac_cv_trouble_comparing_to_zero'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   cat > conftest.$ac_ext <<EOF
--#line 12488 "configure"
-+#line 12499 "configure"
- #include "confdefs.h"
- #include <algorithm>
-                                 template <class T> class Foo {};
-@@ -12495,7 +12506,7 @@
- Foo<int> f; return (0 != f);
- ; return 0; }
- EOF
--if { (eval echo configure:12499: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-+if { (eval echo configure:12510: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-   rm -rf conftest*
-   ac_cv_trouble_comparing_to_zero=no
- else
-@@ -12519,19 +12530,19 @@
- _SAVE_LDFLAGS=$LDFLAGS
- LDFLAGS="$LDFLAGS $DSO_PIC_CFLAGS $DSO_LDOPTS"
- echo $ac_n "checking for __thread keyword for TLS variables""... $ac_c" 1>&6
--echo "configure:12523: checking for __thread keyword for TLS variables" >&5
-+echo "configure:12534: checking for __thread keyword for TLS variables" >&5
- if eval "test \"`echo '$''{'ac_cv_thread_keyword'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   cat > conftest.$ac_ext <<EOF
--#line 12528 "configure"
-+#line 12539 "configure"
- #include "confdefs.h"
- __thread bool tlsIsMainThread = false;
- int main() {
- return tlsIsMainThread;
- ; return 0; }
- EOF
--if { (eval echo configure:12535: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-+if { (eval echo configure:12546: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-   rm -rf conftest*
-   ac_cv_thread_keyword=yes
- else
-@@ -12568,17 +12579,17 @@
- MALLOC_H=
- ac_safe=`echo "malloc.h" | sed 'y%./+-%__p_%'`
- echo $ac_n "checking for malloc.h""... $ac_c" 1>&6
--echo "configure:12572: checking for malloc.h" >&5
-+echo "configure:12583: checking for malloc.h" >&5
- if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   cat > conftest.$ac_ext <<EOF
--#line 12577 "configure"
-+#line 12588 "configure"
- #include "confdefs.h"
- #include <malloc.h>
- EOF
- ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
--{ (eval echo configure:12582: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-+{ (eval echo configure:12593: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
- ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
- if test -z "$ac_err"; then
-   rm -rf conftest*
-@@ -12602,17 +12613,17 @@
- if test "$MALLOC_H" = ""; then
-   ac_safe=`echo "malloc/malloc.h" | sed 'y%./+-%__p_%'`
- echo $ac_n "checking for malloc/malloc.h""... $ac_c" 1>&6
--echo "configure:12606: checking for malloc/malloc.h" >&5
-+echo "configure:12617: checking for malloc/malloc.h" >&5
- if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   cat > conftest.$ac_ext <<EOF
--#line 12611 "configure"
-+#line 12622 "configure"
- #include "confdefs.h"
- #include <malloc/malloc.h>
- EOF
- ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
--{ (eval echo configure:12616: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-+{ (eval echo configure:12627: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
- ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
- if test -z "$ac_err"; then
-   rm -rf conftest*
-@@ -12636,17 +12647,17 @@
-   if test "$MALLOC_H" = ""; then
-     ac_safe=`echo "sys/malloc.h" | sed 'y%./+-%__p_%'`
- echo $ac_n "checking for sys/malloc.h""... $ac_c" 1>&6
--echo "configure:12640: checking for sys/malloc.h" >&5
-+echo "configure:12651: checking for sys/malloc.h" >&5
- if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   cat > conftest.$ac_ext <<EOF
--#line 12645 "configure"
-+#line 12656 "configure"
- #include "confdefs.h"
- #include <sys/malloc.h>
- EOF
- ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
--{ (eval echo configure:12650: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-+{ (eval echo configure:12661: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
- ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
- if test -z "$ac_err"; then
-   rm -rf conftest*
-@@ -12680,12 +12691,12 @@
- for ac_func in strndup posix_memalign memalign valloc
- do
- echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
--echo "configure:12684: checking for $ac_func" >&5
-+echo "configure:12695: checking for $ac_func" >&5
- if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   cat > conftest.$ac_ext <<EOF
--#line 12689 "configure"
-+#line 12700 "configure"
- #include "confdefs.h"
- /* System header to define __stub macros and hopefully few prototypes,
-     which can conflict with char $ac_func(); below.  */
-@@ -12711,7 +12722,7 @@
- 
- ; return 0; }
- EOF
--if { (eval echo configure:12715: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-+if { (eval echo configure:12726: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-   rm -rf conftest*
-   eval "ac_cv_func_$ac_func=yes"
- else
-@@ -12738,19 +12749,19 @@
- 
- 
- echo $ac_n "checking for __attribute__((always_inline))""... $ac_c" 1>&6
--echo "configure:12742: checking for __attribute__((always_inline))" >&5
-+echo "configure:12753: checking for __attribute__((always_inline))" >&5
- if eval "test \"`echo '$''{'ac_cv_attribute_always_inline'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   cat > conftest.$ac_ext <<EOF
--#line 12747 "configure"
-+#line 12758 "configure"
- #include "confdefs.h"
- 
- int main() {
- inline void f(void) __attribute__((always_inline));
- ; return 0; }
- EOF
--if { (eval echo configure:12754: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-+if { (eval echo configure:12765: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-   rm -rf conftest*
-   ac_cv_attribute_always_inline=yes
- else
-@@ -12765,19 +12776,19 @@
- echo "$ac_t""$ac_cv_attribute_always_inline" 1>&6
- 
- echo $ac_n "checking for __attribute__((malloc))""... $ac_c" 1>&6
--echo "configure:12769: checking for __attribute__((malloc))" >&5
-+echo "configure:12780: checking for __attribute__((malloc))" >&5
- if eval "test \"`echo '$''{'ac_cv_attribute_malloc'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   cat > conftest.$ac_ext <<EOF
--#line 12774 "configure"
-+#line 12785 "configure"
- #include "confdefs.h"
- 
- int main() {
- void* f(int) __attribute__((malloc));
- ; return 0; }
- EOF
--if { (eval echo configure:12781: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-+if { (eval echo configure:12792: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-   rm -rf conftest*
-   ac_cv_attribute_malloc=yes
- else
-@@ -12792,19 +12803,19 @@
- echo "$ac_t""$ac_cv_attribute_malloc" 1>&6
- 
- echo $ac_n "checking for __attribute__((warn_unused_result))""... $ac_c" 1>&6
--echo "configure:12796: checking for __attribute__((warn_unused_result))" >&5
-+echo "configure:12807: checking for __attribute__((warn_unused_result))" >&5
- if eval "test \"`echo '$''{'ac_cv_attribute_warn_unused'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   cat > conftest.$ac_ext <<EOF
--#line 12801 "configure"
-+#line 12812 "configure"
- #include "confdefs.h"
- 
- int main() {
- int f(void) __attribute__((warn_unused_result));
- ; return 0; }
- EOF
--if { (eval echo configure:12808: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-+if { (eval echo configure:12819: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-   rm -rf conftest*
-   ac_cv_attribute_warn_unused=yes
- else
-@@ -12819,19 +12830,19 @@
- echo "$ac_t""$ac_cv_attribute_warn_unused" 1>&6
- 
- echo $ac_n "checking for __attribute__((noreturn))""... $ac_c" 1>&6
--echo "configure:12823: checking for __attribute__((noreturn))" >&5
-+echo "configure:12834: checking for __attribute__((noreturn))" >&5
- if eval "test \"`echo '$''{'ac_cv_attribute_noreturn'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   cat > conftest.$ac_ext <<EOF
--#line 12828 "configure"
-+#line 12839 "configure"
- #include "confdefs.h"
- 
- int main() {
- void f(void) __attribute__((noreturn));
- ; return 0; }
- EOF
--if { (eval echo configure:12835: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-+if { (eval echo configure:12846: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-   rm -rf conftest*
-   ac_cv_attribute_noreturn=yes
- else
-@@ -12855,19 +12866,19 @@
- 
- 
- echo $ac_n "checking for LC_MESSAGES""... $ac_c" 1>&6
--echo "configure:12859: checking for LC_MESSAGES" >&5
-+echo "configure:12870: checking for LC_MESSAGES" >&5
- if eval "test \"`echo '$''{'ac_cv_i18n_lc_messages'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   cat > conftest.$ac_ext <<EOF
--#line 12864 "configure"
-+#line 12875 "configure"
- #include "confdefs.h"
- #include <locale.h>
- int main() {
- int category = LC_MESSAGES;
- ; return 0; }
- EOF
--if { (eval echo configure:12871: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-+if { (eval echo configure:12882: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-   rm -rf conftest*
-   ac_cv_i18n_lc_messages=yes
- else
-@@ -12890,12 +12901,12 @@
- for ac_func in localeconv
- do
- echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
--echo "configure:12894: checking for $ac_func" >&5
-+echo "configure:12905: checking for $ac_func" >&5
- if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   cat > conftest.$ac_ext <<EOF
--#line 12899 "configure"
-+#line 12910 "configure"
- #include "confdefs.h"
- /* System header to define __stub macros and hopefully few prototypes,
-     which can conflict with char $ac_func(); below.  */
-@@ -12918,7 +12929,7 @@
- 
- ; return 0; }
- EOF
--if { (eval echo configure:12922: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-+if { (eval echo configure:12933: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-   rm -rf conftest*
-   eval "ac_cv_func_$ac_func=yes"
- else
-@@ -13088,7 +13099,7 @@
- 	# Extract the first word of "nspr-config", so it can be a program name with args.
- set dummy nspr-config; ac_word=$2
- echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
--echo "configure:13092: checking for $ac_word" >&5
-+echo "configure:13103: checking for $ac_word" >&5
- if eval "test \"`echo '$''{'ac_cv_path_NSPR_CONFIG'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-@@ -13123,7 +13134,7 @@
- 
- 	min_nspr_version=4.7.0
- 	echo $ac_n "checking for NSPR - version >= $min_nspr_version""... $ac_c" 1>&6
--echo "configure:13127: checking for NSPR - version >= $min_nspr_version" >&5
-+echo "configure:13138: checking for NSPR - version >= $min_nspr_version" >&5
- 
- 	no_nspr=""
- 	if test "$NSPR_CONFIG" != "no"; then
-@@ -13182,7 +13193,7 @@
-     _SAVE_CFLAGS=$CFLAGS
-     CFLAGS="$CFLAGS $NSPR_CFLAGS"
-     cat > conftest.$ac_ext <<EOF
--#line 13186 "configure"
-+#line 13197 "configure"
- #include "confdefs.h"
- #include "prlog.h"
- int main() {
-@@ -13191,7 +13202,7 @@
-                  #endif
- ; return 0; }
- EOF
--if { (eval echo configure:13195: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-+if { (eval echo configure:13206: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-   rm -rf conftest*
-   MOZ_NATIVE_NSPR=1
- else
-@@ -13389,18 +13400,18 @@
- 
- if test -n "$MOZ_DEBUG"; then
-     echo $ac_n "checking for valid debug flags""... $ac_c" 1>&6
--echo "configure:13393: checking for valid debug flags" >&5
-+echo "configure:13404: checking for valid debug flags" >&5
-     _SAVE_CFLAGS=$CFLAGS
-     CFLAGS="$CFLAGS $MOZ_DEBUG_FLAGS"
-     cat > conftest.$ac_ext <<EOF
--#line 13397 "configure"
-+#line 13408 "configure"
- #include "confdefs.h"
- #include <stdio.h>
- int main() {
- printf("Hello World\n");
- ; return 0; }
- EOF
--if { (eval echo configure:13404: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-+if { (eval echo configure:13415: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-   rm -rf conftest*
-   _results=yes
- else
-@@ -13441,18 +13452,18 @@
- if test "$COMPILE_ENVIRONMENT"; then
- if test -n "$MOZ_OPTIMIZE"; then
-     echo $ac_n "checking for valid optimization flags""... $ac_c" 1>&6
--echo "configure:13445: checking for valid optimization flags" >&5
-+echo "configure:13456: checking for valid optimization flags" >&5
-     _SAVE_CFLAGS=$CFLAGS
-     CFLAGS="$CFLAGS $MOZ_OPTIMIZE_FLAGS"
-     cat > conftest.$ac_ext <<EOF
--#line 13449 "configure"
-+#line 13460 "configure"
- #include "confdefs.h"
- #include <stdio.h>
- int main() {
- printf("Hello World\n");
- ; return 0; }
- EOF
--if { (eval echo configure:13456: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-+if { (eval echo configure:13467: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-   rm -rf conftest*
-   _results=yes
- else
-@@ -13581,7 +13592,7 @@
-     fi
-   else
-     echo $ac_n "checking size of int *""... $ac_c" 1>&6
--echo "configure:13585: checking size of int *" >&5
-+echo "configure:13596: checking size of int *" >&5
- if eval "test \"`echo '$''{'ac_cv_sizeof_int_p'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-@@ -13589,7 +13600,7 @@
-   ac_cv_sizeof_int_p=4
- else
-   cat > conftest.$ac_ext <<EOF
--#line 13593 "configure"
-+#line 13604 "configure"
- #include "confdefs.h"
- #include <stdio.h>
- main()
-@@ -13600,7 +13611,7 @@
-   exit(0);
- }
- EOF
--if { (eval echo configure:13604: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
-+if { (eval echo configure:13615: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
- then
-   ac_cv_sizeof_int_p=`cat conftestval`
- else
-@@ -13847,17 +13858,17 @@
- if test -n "$MOZ_VALGRIND"; then
-     ac_safe=`echo "valgrind/valgrind.h" | sed 'y%./+-%__p_%'`
- echo $ac_n "checking for valgrind/valgrind.h""... $ac_c" 1>&6
--echo "configure:13851: checking for valgrind/valgrind.h" >&5
-+echo "configure:13862: checking for valgrind/valgrind.h" >&5
- if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   cat > conftest.$ac_ext <<EOF
--#line 13856 "configure"
-+#line 13867 "configure"
- #include "confdefs.h"
- #include <valgrind/valgrind.h>
- EOF
- ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
--{ (eval echo configure:13861: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-+{ (eval echo configure:13872: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
- ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
- if test -z "$ac_err"; then
-   rm -rf conftest*
-@@ -14012,7 +14023,7 @@
- # Extract the first word of "$ac_prog", so it can be a program name with args.
- set dummy $ac_prog; ac_word=$2
- echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
--echo "configure:14016: checking for $ac_word" >&5
-+echo "configure:14027: checking for $ac_word" >&5
- if eval "test \"`echo '$''{'ac_cv_path_CCACHE'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-@@ -14163,12 +14174,12 @@
-     for ac_func in __cxa_demangle
- do
- echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
--echo "configure:14167: checking for $ac_func" >&5
-+echo "configure:14178: checking for $ac_func" >&5
- if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   cat > conftest.$ac_ext <<EOF
--#line 14172 "configure"
-+#line 14183 "configure"
- #include "confdefs.h"
- /* System header to define __stub macros and hopefully few prototypes,
-     which can conflict with char $ac_func(); below.  */
-@@ -14194,7 +14205,7 @@
- 
- ; return 0; }
- EOF
--if { (eval echo configure:14198: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-+if { (eval echo configure:14209: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-   rm -rf conftest*
-   eval "ac_cv_func_$ac_func=yes"
- else
-@@ -14242,17 +14253,17 @@
- if test "$HAVE_GCC3_ABI" -a -z "$SKIP_LIBRARY_CHECKS"; then
-     ac_safe=`echo "unwind.h" | sed 'y%./+-%__p_%'`
- echo $ac_n "checking for unwind.h""... $ac_c" 1>&6
--echo "configure:14246: checking for unwind.h" >&5
-+echo "configure:14257: checking for unwind.h" >&5
- if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   cat > conftest.$ac_ext <<EOF
--#line 14251 "configure"
-+#line 14262 "configure"
- #include "confdefs.h"
- #include <unwind.h>
- EOF
- ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
--{ (eval echo configure:14256: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-+{ (eval echo configure:14267: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
- ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
- if test -z "$ac_err"; then
-   rm -rf conftest*
-@@ -14271,12 +14282,12 @@
-   for ac_func in _Unwind_Backtrace
- do
- echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
--echo "configure:14275: checking for $ac_func" >&5
-+echo "configure:14286: checking for $ac_func" >&5
- if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   cat > conftest.$ac_ext <<EOF
--#line 14280 "configure"
-+#line 14291 "configure"
- #include "confdefs.h"
- /* System header to define __stub macros and hopefully few prototypes,
-     which can conflict with char $ac_func(); below.  */
-@@ -14299,7 +14310,7 @@
- 
- ; return 0; }
- EOF
--if { (eval echo configure:14303: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-+if { (eval echo configure:14314: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-   rm -rf conftest*
-   eval "ac_cv_func_$ac_func=yes"
- else
-@@ -14348,7 +14359,7 @@
- # Compiler Options
- 
- echo $ac_n "checking for gcc -pipe support""... $ac_c" 1>&6
--echo "configure:14352: checking for gcc -pipe support" >&5
-+echo "configure:14363: checking for gcc -pipe support" >&5
- if test -n "$GNU_CC" -a -n "$GNU_CXX" -a -n "$GNU_AS"; then
-     echo '#include <stdio.h>' > dummy-hello.c
-     echo 'int main() { printf("Hello World\n"); exit(0); }' >> dummy-hello.c
-@@ -14363,14 +14374,14 @@
-         _SAVE_CFLAGS=$CFLAGS
-         CFLAGS="$CFLAGS -pipe"
-         cat > conftest.$ac_ext <<EOF
--#line 14367 "configure"
-+#line 14378 "configure"
- #include "confdefs.h"
-  #include <stdio.h> 
- int main() {
- printf("Hello World\n");
- ; return 0; }
- EOF
--if { (eval echo configure:14374: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-+if { (eval echo configure:14385: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-   rm -rf conftest*
-   _res_gcc_pipe="yes"
- else
-@@ -14415,16 +14426,16 @@
- CFLAGS="$CFLAGS -fprofile-generate -fprofile-correction"
- 
- echo $ac_n "checking whether C compiler supports -fprofile-generate""... $ac_c" 1>&6
--echo "configure:14419: checking whether C compiler supports -fprofile-generate" >&5
-+echo "configure:14430: checking whether C compiler supports -fprofile-generate" >&5
- cat > conftest.$ac_ext <<EOF
--#line 14421 "configure"
-+#line 14432 "configure"
- #include "confdefs.h"
- 
- int main() {
- return 0;
- ; return 0; }
- EOF
--if { (eval echo configure:14428: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-+if { (eval echo configure:14439: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-   rm -rf conftest*
-    PROFILE_GEN_CFLAGS="-fprofile-generate"
-                  result="yes" 
-@@ -14488,16 +14499,16 @@
-     _SAVE_CXXFLAGS=$CXXFLAGS
-     CXXFLAGS="$CXXFLAGS ${_WARNINGS_CXXFLAGS} ${_COMPILER_PREFIX}-pedantic ${_COMPILER_PREFIX}-Wno-long-long"
-     echo $ac_n "checking whether C++ compiler has -pedantic long long bug""... $ac_c" 1>&6
--echo "configure:14492: checking whether C++ compiler has -pedantic long long bug" >&5
-+echo "configure:14503: checking whether C++ compiler has -pedantic long long bug" >&5
-     cat > conftest.$ac_ext <<EOF
--#line 14494 "configure"
-+#line 14505 "configure"
- #include "confdefs.h"
- $configure_static_assert_macros
- int main() {
- CONFIGURE_STATIC_ASSERT(sizeof(long long) == 8)
- ; return 0; }
- EOF
--if { (eval echo configure:14501: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-+if { (eval echo configure:14512: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-   rm -rf conftest*
-   result="no"
- else
-@@ -14522,12 +14533,12 @@
- fi
- 
- echo $ac_n "checking for correct temporary object destruction order""... $ac_c" 1>&6
--echo "configure:14526: checking for correct temporary object destruction order" >&5
-+echo "configure:14537: checking for correct temporary object destruction order" >&5
- if test "$cross_compiling" = yes; then
-   result="maybe"
- else
-   cat > conftest.$ac_ext <<EOF
--#line 14531 "configure"
-+#line 14542 "configure"
- #include "confdefs.h"
- #ifdef __cplusplus
- extern "C" void exit(int);
-@@ -14550,7 +14561,7 @@
-              }
-              
- EOF
--if { (eval echo configure:14554: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
-+if { (eval echo configure:14565: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
- then
-   result="yes"
- else
-@@ -14571,12 +14582,12 @@
- _SAVE_CXXFLAGS=$CXXFLAGS
- CXXFLAGS="$CXXFLAGS ${_WARNINGS_CXXFLAGS}"
- echo $ac_n "checking for correct overload resolution with const and templates""... $ac_c" 1>&6
--echo "configure:14575: checking for correct overload resolution with const and templates" >&5
-+echo "configure:14586: checking for correct overload resolution with const and templates" >&5
- if eval "test \"`echo '$''{'ac_nscap_nonconst_opeq_bug'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   cat > conftest.$ac_ext <<EOF
--#line 14580 "configure"
-+#line 14591 "configure"
- #include "confdefs.h"
- 
-                       template <class T>
-@@ -14606,7 +14617,7 @@
-                     
- ; return 0; }
- EOF
--if { (eval echo configure:14610: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-+if { (eval echo configure:14621: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-   rm -rf conftest*
-   ac_nscap_nonconst_opeq_bug="no"
- else
-@@ -14629,19 +14640,19 @@
- fi
- 
- echo $ac_n "checking for tm_zone tm_gmtoff in struct tm""... $ac_c" 1>&6
--echo "configure:14633: checking for tm_zone tm_gmtoff in struct tm" >&5
-+echo "configure:14644: checking for tm_zone tm_gmtoff in struct tm" >&5
- if eval "test \"`echo '$''{'ac_cv_struct_tm_zone_tm_gmtoff'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   cat > conftest.$ac_ext <<EOF
--#line 14638 "configure"
-+#line 14649 "configure"
- #include "confdefs.h"
- #include <time.h>
- int main() {
- struct tm tm; tm.tm_zone = 0; tm.tm_gmtoff = 1;
- ; return 0; }
- EOF
--if { (eval echo configure:14645: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-+if { (eval echo configure:14656: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-   rm -rf conftest*
-   ac_cv_struct_tm_zone_tm_gmtoff="yes"
- else
-@@ -14855,7 +14866,7 @@
- if test -z "$SKIP_LIBRARY_CHECKS" -a -z "$NO_EDITLINE"; then
-   if test -n "$JS_WANT_READLINE"; then
-     echo $ac_n "checking for readline in -lreadline""... $ac_c" 1>&6
--echo "configure:14859: checking for readline in -lreadline" >&5
-+echo "configure:14870: checking for readline in -lreadline" >&5
- ac_lib_var=`echo readline'_'readline | sed 'y%./+-%__p_%'`
- if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
-@@ -14863,7 +14874,7 @@
-   ac_save_LIBS="$LIBS"
- LIBS="-lreadline  $LIBS"
- cat > conftest.$ac_ext <<EOF
--#line 14867 "configure"
-+#line 14878 "configure"
- #include "confdefs.h"
- /* Override any gcc2 internal prototype to avoid an error.  */
- /* We use char because int might match the return type of a gcc2
-@@ -14874,7 +14885,7 @@
- readline()
- ; return 0; }
- EOF
--if { (eval echo configure:14878: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-+if { (eval echo configure:14889: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-   rm -rf conftest*
-   eval "ac_cv_lib_$ac_lib_var=yes"
- else
-@@ -15123,9 +15134,9 @@
- fi
- 
- echo $ac_n "checking for posix_fallocate""... $ac_c" 1>&6
--echo "configure:15127: checking for posix_fallocate" >&5
-+echo "configure:15138: checking for posix_fallocate" >&5
- cat > conftest.$ac_ext <<EOF
--#line 15129 "configure"
-+#line 15140 "configure"
- #include "confdefs.h"
- #define _XOPEN_SOURCE 600
-   #include <fcntl.h>
-@@ -15133,7 +15144,7 @@
- posix_fallocate(0, 0, 0);
- ; return 0; }
- EOF
--if { (eval echo configure:15137: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-+if { (eval echo configure:15148: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-   rm -rf conftest*
-   ac_cv___posix_fallocate=true
- else
-@@ -15159,7 +15170,7 @@
-                 _SAVE_CFLAGS=$CFLAGS
-     CFLAGS="$CFLAGS $XCFLAGS"
-     cat > conftest.$ac_ext <<EOF
--#line 15163 "configure"
-+#line 15174 "configure"
- #include "confdefs.h"
- 
-         #include <stdio.h>
-@@ -15177,7 +15188,7 @@
-     
- ; return 0; }
- EOF
--if { (eval echo configure:15181: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-+if { (eval echo configure:15192: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-   :
- else
-   echo "configure: failed program was:" >&5
-@@ -15278,12 +15289,12 @@
- for ac_func in setlocale
- do
- echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
--echo "configure:15282: checking for $ac_func" >&5
-+echo "configure:15293: checking for $ac_func" >&5
- if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   cat > conftest.$ac_ext <<EOF
--#line 15287 "configure"
-+#line 15298 "configure"
- #include "confdefs.h"
- /* System header to define __stub macros and hopefully few prototypes,
-     which can conflict with char $ac_func(); below.  */
-@@ -15306,7 +15317,7 @@
- 
- ; return 0; }
- EOF
--if { (eval echo configure:15310: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-+if { (eval echo configure:15321: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-   rm -rf conftest*
-   eval "ac_cv_func_$ac_func=yes"
- else
-@@ -15333,12 +15344,12 @@
- for ac_func in localeconv
- do
- echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
--echo "configure:15337: checking for $ac_func" >&5
-+echo "configure:15348: checking for $ac_func" >&5
- if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
-   echo $ac_n "(cached) $ac_c" 1>&6
- else
-   cat > conftest.$ac_ext <<EOF
--#line 15342 "configure"
-+#line 15353 "configure"
- #include "confdefs.h"
- /* System header to define __stub macros and hopefully few prototypes,
-     which can conflict with char $ac_func(); below.  */
-@@ -15361,7 +15372,7 @@
- 
- ; return 0; }
- EOF
--if { (eval echo configure:15365: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-+if { (eval echo configure:15376: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-   rm -rf conftest*
-   eval "ac_cv_func_$ac_func=yes"
- else
-diff -Naurb js-1.8.5-dist/js/src/configure.in js-1.8.5/js/src/configure.in
---- js-1.8.5-dist/js/src/configure.in	2011-03-31 15:08:36 -0400
-+++ js-1.8.5/js/src/configure.in	2015-08-26 01:07:04 -0400
-@@ -665,6 +665,11 @@
-             CXXFLAGS="$CXXFLAGS -Zc:wchar_t-"
-             AC_DEFINE(_CRT_SECURE_NO_WARNINGS)
-             AC_DEFINE(_CRT_NONSTDC_NO_WARNINGS)
-+        elif test "$_CC_MAJOR_VERSION" = "18"; then
-+            _CC_SUITE=12
-+            CXXFLAGS="$CXXFLAGS -Zc:wchar_t-"
-+            AC_DEFINE(_CRT_SECURE_NO_WARNINGS)
-+            AC_DEFINE(_CRT_NONSTDC_NO_WARNINGS)
-         else
-             AC_MSG_ERROR([This version ($CC_VERSION) of the MSVC compiler is unsupported. See https://developer.mozilla.org/en/Windows_Build_Prerequisites.])
-         fi
-diff -Naurb js-1.8.5-dist/js/src/jsapi-tests/Makefile.in js-1.8.5/js/src/jsapi-tests/Makefile.in
---- js-1.8.5-dist/js/src/jsapi-tests/Makefile.in	2011-03-31 15:08:36 -0400
-+++ js-1.8.5/js/src/jsapi-tests/Makefile.in	2015-08-26 12:06:29 -0400
-@@ -46,6 +46,7 @@
- 
- PROGRAM         = jsapi-tests$(BIN_SUFFIX)
- 
-+#  testDeepFreeze.cpp 
- CPPSRCS = \
-   tests.cpp \
-   selfTest.cpp \
-@@ -55,7 +56,6 @@
-   testConservativeGC.cpp \
-   testContexts.cpp \
-   testDebugger.cpp \
--  testDeepFreeze.cpp \
-   testDefineGetterSetterNonEnumerable.cpp \
-   testDefineProperty.cpp \
-   testExtendedEq.cpp \
-diff -Naurb js-1.8.5-dist/js/src/nanojit/RegAlloc.h js-1.8.5/js/src/nanojit/RegAlloc.h
---- js-1.8.5-dist/js/src/nanojit/RegAlloc.h	2011-03-31 15:08:36 -0400
-+++ js-1.8.5/js/src/nanojit/RegAlloc.h	2015-08-26 11:50:43 -0400
-@@ -186,7 +186,7 @@
-     inline Register lsReg(RegisterMask mask) {
-         // This is faster than it looks; we rely on the C++ optimizer
-         // to strip the dead branch and inline just one alternative.
--        Register r = { (sizeof(RegisterMask) == 4) ? lsbSet32(mask) : lsbSet64(mask) };
-+        Register r = { (uint32_t) ((sizeof(RegisterMask) == 4) ? lsbSet32(mask) : lsbSet64(mask)) };
-         return r;
-     }
- 
-@@ -194,7 +194,7 @@
-     inline Register msReg(RegisterMask mask) {
-         // This is faster than it looks; we rely on the C++ optimizer
-         // to strip the dead branch and inline just one alternative.
--        Register r = { (sizeof(RegisterMask) == 4) ? msbSet32(mask) : msbSet64(mask) };
-+        Register r = { (uint32_t) ((sizeof(RegisterMask) == 4) ? msbSet32(mask) : msbSet64(mask)) };
-         return r;
-     }
- 
-diff -Naurb js-1.8.5-dist/js/src/v8-dtoa/platform.cc js-1.8.5/js/src/v8-dtoa/platform.cc
---- js-1.8.5-dist/js/src/v8-dtoa/platform.cc	2011-03-31 15:08:36 -0400
-+++ js-1.8.5/js/src/v8-dtoa/platform.cc	2015-08-26 12:00:22 -0400
-@@ -90,6 +90,7 @@
- 
- #include <float.h>
- 
-+#if _MSC_VER < 1800
- // Classify floating point number - usually defined in math.h
- int fpclassify(double x) {
-   // Use the MS-specific _fpclass() for classification.
-@@ -107,6 +108,7 @@
-   return FP_NAN;
- }
- 
-+#endif  // _MSC_VER < 1800
- 
- #endif  // _MSC_VER
- 
-diff -Naurb js-1.8.5-dist/js/src/v8-dtoa/platform.h js-1.8.5/js/src/v8-dtoa/platform.h
---- js-1.8.5-dist/js/src/v8-dtoa/platform.h	2011-03-31 15:08:36 -0400
-+++ js-1.8.5/js/src/v8-dtoa/platform.h	2015-08-26 11:57:49 -0400
-@@ -48,7 +48,7 @@
- #ifdef WIN32
- 
- // Microsoft Visual C++ specific stuff.
--#ifdef _MSC_VER
-+#if _MSC_VER < 1800
- 
- enum {
-   FP_NAN,
diff --git a/bits/wxWidgets_setup.h b/bits/wxWidgets_setup.h
deleted file mode 100755
index 18e4b54..0000000
--- a/bits/wxWidgets_setup.h
+++ /dev/null
@@ -1,8 +0,0 @@
-#undef  wxUSE_GRAPHICS_CONTEXT
-#define wxUSE_GRAPHICS_CONTEXT 1
-#undef  wxUSE_GLCANVAS
-#define wxUSE_GLCANVAS 1
-#undef  wxUSE_POSTSCRIPT
-#define wxUSE_POSTSCRIPT 1
-#undef  wxUSE_OPENGL
-#define wxUSE_OPENGL 1
diff --git a/build-spidermonkey60.md b/build-spidermonkey60.md
index cf5ca0d..1879ab0 100644
--- a/build-spidermonkey60.md
+++ b/build-spidermonkey60.md
@@ -1,3 +1,7 @@
+# Note
+
+The following research was instrumental in building SpiderMonkey 60 on Windows. Big thanks to Peng Hui Jiang for this research.
+
 ##Build Environment
 
 Below is environment we are using and we can check whether it is working on Windows 7/8 and Visual Studio 2013/2015 etc.
@@ -195,6 +199,8 @@
 
 Note: we might have to create some patches for `mozjs-60.1.1pre3` windows version. Now just commented out these.
 
+[Update: bugzilla says that Windows builds using NSPR Posix emulation are unsupported, so for CouchDB 3.0 we're just building with NSPR enabled. It builds just fine. None of the problems in the point below occur.]
+
 ### Failed to build nspr
 
 ```
@@ -236,6 +242,8 @@
 
 Note: we might get above error when running configure. Need to use proper window SDK.
 
+[Update: Seems resolved with MozillaBuild 3.3.]
+
 ### Windows Universal CRT SDK
 
 ```
diff --git a/downloads.md b/downloads.md
deleted file mode 100644
index 4273caf..0000000
--- a/downloads.md
+++ /dev/null
@@ -1,23 +0,0 @@
-### list of all files needed for build chain ###################################
-################################################################################
-### MSVC vcredist is very carefully chosen to match SDK and VC++ latest patches
-# http://www.microsoft.com/en-us/download/details.aspx?id=40784 for vc12
-http://download.microsoft.com/download/2/E/6/2E61CFA4-993B-4DD4-91DA-3737CD5CD6E3/vcredist_x64.exe
-################################################################################
-### OpenSSL
-https://www.openssl.org/source/openssl-1.0.2l.tar.gz
-################################################################################
-### libcurl
-https://curl.haxx.se/download/curl-7.49.1.zip 
-################################################################################
-### Erlang
-http://www.erlang.org/download/otp_src_17.5.tar.gz
-http://www.erlang.org/download/otp_src_18.3.tar.gz
-http://www.erlang.org/download/otp_src_19.3.tar.gz
-################################################################################
-### ICU4C
-http://download.icu-project.org/files/icu4c/57.1/icu4c-57_1-src.zip
-################################################################################
-### spidermonkey    js185-1.0.0.tar.gz
-http://ftp.mozilla.org/pub/mozilla.org/js/js185-1.0.0.tar.gz
-################################################################################
diff --git a/downloads.md5 b/downloads.md5
deleted file mode 100755
index e1a40aa..0000000
--- a/downloads.md5
+++ /dev/null
@@ -1,9 +0,0 @@
-89f15a9ef6b54bcba8d5bd9b9049d873 *curl-7.49.1.zip
-f797503ecaebf1d38920013dc7893066 *icu4c-57_1-src.zip
-a4574365938222adca0a6bd33329cb32 *js185-1.0.0.tar.gz
-7fbb850e4dd92b9905f5ab312bc39101 *js185-msvc2013.patch
-f85123cd390e864dfbe517e7616e6566 *openssl-1.0.2l.tar.gz
-346dd0136bf1cc28cebc140e505206bb *otp_src_17.5.tar.gz
-7e4ff32f97c36fb3dab736f8d481830b *otp_src_18.3.tar.gz
-a8c259ec47bf84e77510673e1b76b6db *otp_src_19.3.tar.gz
-96b61b8e069832e6b809f24ea74567ba *vcredist_x64.exe
diff --git a/erlang.md b/erlang.md
deleted file mode 100644
index 06526b7..0000000
--- a/erlang.md
+++ /dev/null
@@ -1,57 +0,0 @@
-
-# Building Erlang #############################################################
-
-* start an SDK shell via `setenv.cmd /Release /x86`
-* start a new cygwin shell via `c:\relax\bin\shell.cmd`
-* in a cygwin shell:
-
-        cd /relax && tar xzf /relax/bits/otp_src_R14B04.tar.gz &
-
-* include optional components - used for debugger and java interfaces
-
-        cd $ERL_TOP && tar xvzf /relax/bits/tcltk85_win32_bin.tar.gz
-
-* skip other non-essential components as follows:
-
-        echo "skipping gs" > lib/gs/SKIP
-        echo "skipping jinterface" > lib/jinterface/SKIP
-
-Alternatively, you can launch your own cmd prompt, and ensure that your system
-path is correct first in the win32 side before starting cygwin. Once in cygwin
-go to the root of where you installed erlang, and run the Erlang/OTP script:
-
-        eval `./otp_build env_win32`
-        echo $PATH | /bin/sed 's/:/\n/g'
-        which cl link mc lc mt
-
-Confirm that output of `which` returns only MS versions from VC++ or the SDK.
-This is critical and if not correct will cause confusing errors much later on.
-Overall, the desired order for your $PATH is:
-
-* Erlang build helper scripts
-* Windows SDK tools, .Net framework
-* Visual C++ if installed
-* Ancillary Erlang and CouchDB packaging tools
-* Usual cygwin unix tools such as make, gcc
-* Ancillary glazier/relax tools for building dependent libraries
-* Usual Windows folders `%windir%;%windir%\system32` etc
-* Various settings form the `otp_build` script
-
-* Build Erlang using `/relax/bin/erl_config.sh`
-  and `/relax/bin/erl_build.sh`, or manually as follows
-
-        eval `./otp_build env_win32`
-        ./otp_build autoconf
-        ./otp_build configure
-        ./otp_build boot -a
-        ./otp_build release -a
-        ./otp_build installer_win32
-        # we need to set up erlang to run from this new source build to build CouchDB
-        ./release/win32/Install.exe -s
-
-* More details are at [erlang INSTALL-Win32.md on github](http://github.com/erlang/otp/blob/dev/INSTALL-WIN32.md)
-
-* or using the relax tools, starting an SDK shell via `setenv.cmd /Release /x86`:
-        start `c:\relax\bin\shell.cmd`
-        :: [select an erlang build]
-        erl_config.sh && erl_build.sh
diff --git a/glazier.komodoproject b/glazier.komodoproject
deleted file mode 100644
index bed8ce1..0000000
--- a/glazier.komodoproject
+++ /dev/null
@@ -1,346 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Komodo Project File - DO NOT EDIT -->
-<project id="78012889-b61e-bf43-87e3-55d4f36ae599" kpf_version="5" name="glazier.komodoproject">
-<preference-set idref="78012889-b61e-bf43-87e3-55d4f36ae599">
-<preference-set id="Invocations">
-<preference-set id="Project">
-  <string id="cookieparams"></string>
-  <string relative="path" id="cwd"></string>
-  <string id="documentRoot"></string>
-  <string id="executable-params"></string>
-  <string id="filename"></string>
-  <string id="getparams"></string>
-  <string id="language">PHP</string>
-  <string id="mpostparams"></string>
-  <string id="params"></string>
-  <string id="postparams"></string>
-  <string id="posttype">application/x-www-form-urlencoded</string>
-  <string id="request-method">GET</string>
-  <boolean id="show-dialog">1</boolean>
-  <boolean id="sim-cgi">0</boolean>
-  <boolean id="use-console">0</boolean>
-  <string id="userCGIEnvironment"></string>
-  <string id="userEnvironment"></string>
-</preference-set>
-</preference-set>
-  <long id="caretStyle">2</long>
-  <long id="caretWidth">2</long>
-  <boolean id="checkDiskFile">1</boolean>
-  <boolean id="checkNetworkDiskFile">1</boolean>
-  <string id="currentInvocationLanguage">PHP</string>
-  <boolean id="dedentOnColon">0</boolean>
-  <string id="defaultDateFormat">%25a %25b %25d %25H:%25M:%25S %25Y</string>
-  <string id="donotask_action_close_deleted_files">None</string>
-  <string id="donotask_action_dragdrop_uri"></string>
-  <string id="donotask_action_reload_changed_files"></string>
-  <boolean id="donotask_buffer_conflicts_with_file_on_disk">0</boolean>
-  <boolean id="donotask_close_deleted_files">1</boolean>
-  <boolean id="donotask_dragdrop_uri">0</boolean>
-  <boolean id="donotask_reload_changed_files">0</boolean>
-  <boolean id="donotask_revert_buffer">1</boolean>
-  <boolean id="donotask_treat_large_documents_as_text">0</boolean>
-  <string id="editAutoIndentStyle">smart</string>
-  <long id="editAutoWrapColumn">140</long>
-  <boolean id="editBackspaceDedents">1</boolean>
-  <boolean id="editElectricBrace">1</boolean>
-  <boolean id="editFoldLines">1</boolean>
-  <string id="editFoldStyle">curvytree</string>
-  <boolean id="editRestoreFoldPoints">0</boolean>
-  <boolean id="editSmartCutCopyWithoutSelection">1</boolean>
-  <boolean id="editSmartSoftCharacters">1</boolean>
-  <boolean id="editTabCompletes">1</boolean>
-  <boolean id="editUseEdge">1</boolean>
-  <boolean id="editUseLinting">1</boolean>
-  <long id="editWordWrapIndentation">2</long>
-  <long id="editWordWrapMarker">3</long>
-  <long id="editWrapType">1</long>
-  <boolean id="enableSmartSoftCharactersInsideLine">0</boolean>
-  <boolean id="encodingAutoDetect">1</boolean>
-  <string id="encodingDefault">mac-roman</string>
-  <boolean id="encodingEnvironment">1</boolean>
-  <boolean id="encodingHTML">0</boolean>
-  <boolean id="encodingModeline">1</boolean>
-  <boolean id="encodingXMLDec">1</boolean>
-  <boolean id="hyperlinksEnableGotoDefinition">1</boolean>
-  <boolean id="hyperlinksEnabled">1</boolean>
-  <string relative="path" id="import_dirname"></string>
-  <string id="import_exclude_matches">*.*~;*.bak;*.tmp;CVS;.#*;*.pyo;*.pyc;.svn;.git;.hg;.bzr;*%25*;tmp*.html;.DS_Store;*.swp;*.kpf;*.komodoproject;.komodotools</string>
-  <string id="import_include_matches"></string>
-  <boolean id="indentStringsAfterParens">0</boolean>
-  <long id="indentWidth">4</long>
-  <string id="jshintOptions"></string>
-  <string id="jslintOptions"></string>
-  <string id="language">PHP</string>
-<preference-set id="languages">
-<preference-set id="languages/ActionScript">
-  <boolean id="primary">0</boolean>
-</preference-set>
-<preference-set id="languages/Ada">
-  <boolean id="Ada/newBOM">0</boolean>
-  <string id="Ada/newEncoding">Default Encoding</string>
-</preference-set>
-<preference-set id="languages/Apache">
-  <boolean id="Apache/newBOM">0</boolean>
-  <string id="Apache/newEncoding">Default Encoding</string>
-  <boolean id="primary">1</boolean>
-</preference-set>
-<preference-set id="languages/Baan">
-  <boolean id="Baan/newBOM">0</boolean>
-  <string id="Baan/newEncoding">Default Encoding</string>
-</preference-set>
-<preference-set id="languages/Bash">
-  <boolean id="primary">1</boolean>
-</preference-set>
-<preference-set id="languages/Batch">
-  <boolean id="Batch/newBOM">0</boolean>
-  <string id="Batch/newEncoding">Default Encoding</string>
-  <boolean id="primary">1</boolean>
-</preference-set>
-<preference-set id="languages/Bullant">
-  <boolean id="Bullant/newBOM">0</boolean>
-  <string id="Bullant/newEncoding">Default Encoding</string>
-</preference-set>
-<preference-set id="languages/C#">
-  <boolean id="C#/newBOM">0</boolean>
-  <string id="C#/newEncoding">Default Encoding</string>
-</preference-set>
-<preference-set id="languages/C++">
-  <boolean id="C++/newBOM">0</boolean>
-  <string id="C++/newEncoding">Default Encoding</string>
-</preference-set>
-<preference-set id="languages/CSS">
-  <boolean id="CSS/newBOM">0</boolean>
-  <string id="CSS/newEncoding">Default Encoding</string>
-</preference-set>
-<preference-set id="languages/Diff">
-  <boolean id="Diff/newBOM">0</boolean>
-  <string id="Diff/newEncoding">Default Encoding</string>
-</preference-set>
-<preference-set id="languages/Django">
-  <boolean id="primary">0</boolean>
-</preference-set>
-<preference-set id="languages/Eiffel">
-  <boolean id="Eiffel/newBOM">0</boolean>
-  <string id="Eiffel/newEncoding">Default Encoding</string>
-</preference-set>
-<preference-set id="languages/Erlang">
-  <boolean id="primary">1</boolean>
-</preference-set>
-<preference-set id="languages/Errors">
-  <boolean id="C++/newBOM">0</boolean>
-  <string id="C++/newEncoding">Default Encoding</string>
-</preference-set>
-<preference-set id="languages/Fortran">
-  <boolean id="Fortran/newBOM">0</boolean>
-  <string id="Fortran/newEncoding">Default Encoding</string>
-</preference-set>
-<preference-set id="languages/Fortran 77">
-  <boolean id="Fortran 77/newBOM">0</boolean>
-  <string id="Fortran 77/newEncoding">Default Encoding</string>
-</preference-set>
-<preference-set id="languages/HTML">
-  <boolean id="HTML/newBOM">0</boolean>
-  <string id="HTML/newEncoding">Default Encoding</string>
-  <long id="indentWidth">2</long>
-  <long id="tabWidth">4</long>
-</preference-set>
-<preference-set id="languages/HTML5">
-  <long id="indentWidth">2</long>
-  <long id="tabWidth">4</long>
-</preference-set>
-<preference-set id="languages/IDL">
-  <boolean id="IDL/newBOM">0</boolean>
-  <string id="IDL/newEncoding">Default Encoding</string>
-</preference-set>
-<preference-set id="languages/JSON">
-  <long id="indentWidth">2</long>
-  <long id="tabWidth">4</long>
-</preference-set>
-<preference-set id="languages/Java">
-  <boolean id="Java/newBOM">0</boolean>
-  <string id="Java/newEncoding">Default Encoding</string>
-</preference-set>
-<preference-set id="languages/JavaScript">
-  <boolean id="JavaScript/newBOM">0</boolean>
-  <string id="JavaScript/newEncoding">Default Encoding</string>
-  <long id="indentWidth">2</long>
-  <long id="tabWidth">4</long>
-</preference-set>
-<preference-set id="languages/LaTeX">
-  <boolean id="LaTeX/newBOM">0</boolean>
-  <string id="LaTeX/newEncoding">Default Encoding</string>
-</preference-set>
-<preference-set id="languages/Lisp">
-  <boolean id="Lisp/newBOM">0</boolean>
-  <string id="Lisp/newEncoding">Default Encoding</string>
-</preference-set>
-<preference-set id="languages/Lua">
-  <boolean id="Lua/newBOM">0</boolean>
-  <string id="Lua/newEncoding">Default Encoding</string>
-</preference-set>
-<preference-set id="languages/Luddite">
-  <boolean id="primary">0</boolean>
-</preference-set>
-<preference-set id="languages/MXML">
-  <boolean id="primary">0</boolean>
-</preference-set>
-<preference-set id="languages/Makefile">
-  <boolean id="Makefile/newBOM">0</boolean>
-  <string id="Makefile/newEncoding">Default Encoding</string>
-  <boolean id="primary">1</boolean>
-  <boolean id="useTabs">1</boolean>
-</preference-set>
-<preference-set id="languages/Mason">
-  <boolean id="primary">0</boolean>
-</preference-set>
-<preference-set id="languages/Matlab">
-  <boolean id="Matlab/newBOM">0</boolean>
-  <string id="Matlab/newEncoding">Default Encoding</string>
-</preference-set>
-<preference-set id="languages/Nsis">
-  <boolean id="primary">1</boolean>
-</preference-set>
-<preference-set id="languages/PHP">
-  <boolean id="PHP/newBOM">0</boolean>
-  <string id="PHP/newEncoding">Default Encoding</string>
-  <boolean id="primary">0</boolean>
-</preference-set>
-<preference-set id="languages/Pascal">
-  <boolean id="Pascal/newBOM">0</boolean>
-  <string id="Pascal/newEncoding">Default Encoding</string>
-</preference-set>
-<preference-set id="languages/Perl">
-  <boolean id="Perl/newBOM">0</boolean>
-  <string id="Perl/newEncoding">Default Encoding</string>
-</preference-set>
-<preference-set id="languages/Python">
-  <boolean id="Python/newBOM">0</boolean>
-  <string id="Python/newEncoding">ascii</string>
-</preference-set>
-<preference-set id="languages/Python3">
-  <boolean id="Python3/newBOM">0</boolean>
-  <string id="Python3/newEncoding">ascii</string>
-</preference-set>
-<preference-set id="languages/RHTML">
-  <boolean id="RHTML/newBOM">0</boolean>
-  <string id="RHTML/newEncoding">Default Encoding</string>
-  <long id="indentWidth">2</long>
-</preference-set>
-<preference-set id="languages/Regex">
-  <boolean id="primary">1</boolean>
-</preference-set>
-<preference-set id="languages/Ruby">
-  <boolean id="Ruby/newBOM">0</boolean>
-  <string id="Ruby/newEncoding">Default Encoding</string>
-  <long id="indentWidth">2</long>
-</preference-set>
-<preference-set id="languages/SQL">
-  <boolean id="SQL/newBOM">0</boolean>
-  <string id="SQL/newEncoding">Default Encoding</string>
-</preference-set>
-<preference-set id="languages/Scheme">
-  <boolean id="primary">1</boolean>
-</preference-set>
-<preference-set id="languages/Smarty">
-  <boolean id="primary">0</boolean>
-</preference-set>
-<preference-set id="languages/Tcl">
-  <boolean id="Tcl/newBOM">0</boolean>
-  <string id="Tcl/newEncoding">Default Encoding</string>
-</preference-set>
-<preference-set id="languages/Text">
-  <boolean id="Text/newBOM">0</boolean>
-  <string id="Text/newEncoding">Default Encoding</string>
-</preference-set>
-<preference-set id="languages/VisualBasic">
-  <boolean id="VisualBasic/newBOM">0</boolean>
-  <string id="VisualBasic/newEncoding">utf-8</string>
-</preference-set>
-<preference-set id="languages/XML">
-  <boolean id="XML/newBOM">0</boolean>
-  <string id="XML/newEncoding">utf-8</string>
-</preference-set>
-<preference-set id="languages/XSLT">
-  <boolean id="XSLT/newBOM">0</boolean>
-  <string id="XSLT/newEncoding">utf-8</string>
-</preference-set>
-<preference-set id="languages/YAML">
-  <boolean id="primary">1</boolean>
-</preference-set>
-<preference-set id="languages/nnCrontab">
-  <boolean id="nnCrontab/newBOM">0</boolean>
-  <string id="nnCrontab/newEncoding">Default Encoding</string>
-</preference-set>
-</preference-set>
-  <string id="lastInvocation">Project</string>
-  <string id="lastTestPlanName_pref">New test plan #1</string>
-  <long id="lintDelay">1000</long>
-  <boolean id="lintEOLs">1</boolean>
-  <boolean id="lintHTML5Lib">0</boolean>
-  <boolean id="lintHTMLTidy">1</boolean>
-  <boolean id="lintHTML_CheckWith_Perl_HTML_Lint">0</boolean>
-  <boolean id="lintHTML_CheckWith_Perl_HTML_Tidy">0</boolean>
-  <boolean id="lintJavaScriptEnableStrict">1</boolean>
-  <boolean id="lintJavaScriptEnableWarnings">1</boolean>
-  <boolean id="lintJavaScript_SpiderMonkey">1</boolean>
-  <boolean id="lintWithJSHint">0</boolean>
-  <boolean id="lintWithJSLint">0</boolean>
-  <boolean id="lint_coffee_script">1</boolean>
-  <boolean id="lint_python3_with_standard_python">1</boolean>
-  <boolean id="lint_python_with_pychecker">0</boolean>
-  <boolean id="lint_python_with_pyflakes">0</boolean>
-  <boolean id="lint_python_with_pylint">0</boolean>
-  <boolean id="lint_python_with_standard_python">1</boolean>
-  <string id="mappedPaths"></string>
-  <string id="nodejsDefaultInterpreter"></string>
-  <string id="nodejsExtraPaths"></string>
-  <string id="perlDefaultInterpreter"></string>
-  <string id="perlExtraPaths"></string>
-  <boolean id="perl_debuggerlogenabled">0</boolean>
-  <string id="perl_debuggerlogpath"></string>
-  <string id="perl_lintOption">cw</string>
-  <boolean id="perl_lintOption_includeCurrentDirForLinter">1</boolean>
-  <string id="perl_lintOption_perlCriticLevel">off</string>
-  <string id="phpCommentStyle">//,#</string>
-  <string id="phpConfigFile"></string>
-  <string id="phpDefaultInterpreter"></string>
-  <string id="phpExtraPaths"></string>
-  <string id="pychecker_checking_rcfile"></string>
-  <string id="pychecker_wrapper_location"></string>
-  <string id="pylint_checking_rcfile"></string>
-  <string id="python3DefaultInterpreter"></string>
-  <string id="python3ExtraPaths"></string>
-  <string id="pythonDefaultInterpreter"></string>
-  <string id="pythonExtraPaths"></string>
-  <string id="rubyDefaultInterpreter"></string>
-  <string id="rubyExtraPaths"></string>
-  <boolean id="ruby_debuggerlogenabled">0</boolean>
-  <string id="ruby_debuggerlogpath"></string>
-  <string id="ruby_lintOption">cwT</string>
-  <boolean id="scrollEndAtLastLine">0</boolean>
-  <long id="scrollWidth">2000</long>
-  <boolean id="scrollWidthTracking">0</boolean>
-  <boolean id="select_most_recent_buffer_on_buffer_close">0</boolean>
-  <boolean id="showEOL">0</boolean>
-  <boolean id="showIndentationGuides">1</boolean>
-  <boolean id="showLineNumbers">1</boolean>
-  <boolean id="showWhitespace">0</boolean>
-  <long id="tabWidth">8</long>
-  <string id="tclExtraPaths"></string>
-  <string id="tclshDefaultInterpreter"></string>
-<preference-set id="testPlans">
-<preference-set id="New test plan #1">
-  <string id="command_line"></string>
-  <string relative="url" id="directory"></string>
-  <string id="language">Perl - TAP (*.t)</string>
-</preference-set>
-</preference-set>
-  <string id="tidy_accessibility">0</string>
-  <string id="tidy_configpath"></string>
-  <string id="tidy_errorlevel">errors</string>
-  <boolean id="useSmartTabs">1</boolean>
-  <boolean id="useTabs">0</boolean>
-  <string id="wishDefaultInterpreter"></string>
-  <long id="ySlop">5</long>
-</preference-set>
-</project>
diff --git a/installer/CouchInstallDirDlg.wxs b/installer/CouchInstallDirDlg.wxs
new file mode 100644
index 0000000..ea42c0d
--- /dev/null
+++ b/installer/CouchInstallDirDlg.wxs
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
+   <Fragment>
+      <Property Id="INSTALLSERVICE" Hidden="yes"/>
+      <UI>
+         <Dialog Id="CouchInstallDirDlg" Width="370" Height="270" Title="!(loc.InstallDirDlg_Title)">
+            <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="!(loc.WixUINext)">
+               <Publish Property="INSTALLSERVICE" Value="[INSTALLSERVICE]">1</Publish>
+            </Control>
+            <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Text="!(loc.WixUIBack)" />
+            <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="!(loc.WixUICancel)">
+               <Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
+            </Control>
+
+            <Control Id="Description" Type="Text" X="25" Y="23" Width="280" Height="15" Transparent="yes" NoPrefix="yes" Text="!(loc.InstallDirDlgDescription)" />
+            <Control Id="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Transparent="yes" NoPrefix="yes" Text="!(loc.InstallDirDlgTitle)" />
+            <Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" TabSkip="no" Text="!(loc.InstallDirDlgBannerBitmap)" />
+            <Control Id="BannerLine" Type="Line" X="0" Y="44" Width="370" Height="0" />
+            <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
+
+            <Control Id="FolderLabel" Type="Text" X="20" Y="60" Width="290" Height="30" NoPrefix="yes" Text="!(loc.InstallDirDlgFolderLabel)" />
+            <Control Id="Folder" Type="PathEdit" X="20" Y="100" Width="320" Height="18" Property="WIXUI_INSTALLDIR" Indirect="yes" />
+            <Control Id="ChangeFolder" Type="PushButton" X="20" Y="120" Width="56" Height="17" Text="!(loc.InstallDirDlgChange)" />
+
+            <Control Id="InstallServiceCheckBox" Type="CheckBox" X="20" Y="160" Width="330" Height="18" CheckBoxValue="1" Text="Install Apache CouchDB Windows Service" Property="INSTALLSERVICE" />
+         </Dialog>
+      </UI>
+   </Fragment>
+</Wix>
diff --git a/installer/CustomAction/AssemblyInfo.cs b/installer/CustomAction/AssemblyInfo.cs
new file mode 100644
index 0000000..b625714
--- /dev/null
+++ b/installer/CustomAction/AssemblyInfo.cs
@@ -0,0 +1,28 @@
+// Licensed under the Apache License, Version 2.0 (the "License"); you may not
+// use this file except in compliance with the License. You may obtain a copy of
+// the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+// License for the specific language governing permissions and limitations under
+// the License.
+
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+[assembly: AssemblyTitle("CouchIniAction")]
+[assembly: AssemblyDescription("Custom actions for the CouchDB WiX installer")]
+[assembly: AssemblyCompany("The Apache Software Foundation")]
+[assembly: AssemblyProduct("CouchIniAction")]
+[assembly: AssemblyCopyright("Copyright © 2020 The Apache Software Foundation")]
+[assembly: AssemblyTrademark("Apache CouchDB, CouchDB, and the project logo are trademarks of The Apache Software Foundation.")]
+[assembly: AssemblyCulture("")]
+
+[assembly: ComVisible(false)]
+[assembly: Guid("f1cd388c-5d27-49fa-927c-6ed854a9f0ef")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/installer/CustomAction/CouchIniAction.cs b/installer/CustomAction/CouchIniAction.cs
new file mode 100644
index 0000000..0b7e0ff
--- /dev/null
+++ b/installer/CustomAction/CouchIniAction.cs
@@ -0,0 +1,103 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Security.Cryptography;
+using System.Text;
+using Microsoft.Deployment.WindowsInstaller;
+
+namespace CustomAction
+{
+   public class CustomActions
+   {
+      [CustomAction] public static ActionResult WriteAdminIniFile(Session session)
+      {
+         try
+         {
+            if (!File.Exists(session.CustomActionData["ADMINCONFIGFILE"])) {
+               using (StreamWriter writer = new StreamWriter(session.CustomActionData["ADMINCONFIGFILE"]))
+               {
+                  writer.WriteLine("; CouchDB Windows installer-generated admin user");
+                  writer.WriteLine("[admins]");
+                  writer.WriteLine($"{session.CustomActionData["ADMINUSER"]} = {session.CustomActionData["ADMINPASSWORD"]}");
+               }
+            }
+         }
+         catch (Exception ex)
+         {
+            session.Log("ERROR in custom action WriteAdminIniFile {0}",
+                  ex.ToString());
+            return ActionResult.Failure;
+         }
+
+         return ActionResult.Success;
+      }
+
+      [CustomAction] public static ActionResult MaybeCopyIniFiles(Session session)
+      {
+         try
+         {
+            string[] files = new string[2];
+            files[0] = "vm.args";
+            files[1] = "local.ini";
+
+            foreach (string file in files)
+            {
+               if (!File.Exists(Path.Combine(session.CustomActionData["ETCDIR"], file)))
+               {
+                  File.Copy(
+                        Path.Combine(session.CustomActionData["ETCDIR"], file + ".dist"),
+                        Path.Combine(session.CustomActionData["ETCDIR"], file)
+                        );
+               }
+            }
+         }
+         catch (Exception ex)
+         {
+            session.Log("ERROR in custom action MaybeCopyIniFiles {0}",
+                  ex.ToString());
+            return ActionResult.Failure;
+         }
+         return ActionResult.Success;
+      }
+
+      [CustomAction] public static ActionResult MaybeRemoveUserConfig(Session session)
+      {
+         try
+         {
+            string[] files = new string[2];
+            files[0] = "vm.args";
+            files[1] = "local.ini";
+
+            foreach (string file in files)
+            {
+               if (File.Exists(Path.Combine(session.CustomActionData["ETCDIR"], file)) &&
+                     File.Exists(Path.Combine(session.CustomActionData["ETCDIR"], file + ".dist")))
+               {
+                  if (GetChecksum(Path.Combine(session.CustomActionData["ETCDIR"], file)) ==
+                        GetChecksum(Path.Combine(session.CustomActionData["ETCDIR"], file + ".dist")))
+                  {
+                     File.Delete(Path.Combine(session.CustomActionData["ETCDIR"], file));
+                  }
+               }
+            }
+         }
+         catch (Exception ex)
+         {
+            session.Log("ERROR in custom action MaybeRemoveUserConfig {0}",
+                  ex.ToString());
+            return ActionResult.Failure;
+         }
+         return ActionResult.Success;
+      }
+
+      private static string GetChecksum(string file)
+      {
+         using (FileStream stream = File.OpenRead(file))
+         {
+            SHA256Managed sha = new SHA256Managed();
+            byte[] checksum = sha.ComputeHash(stream);
+            return BitConverter.ToString(checksum).Replace("-", String.Empty);
+         }
+      }
+   }
+}
diff --git a/installer/CustomAction/CustomAction.config b/installer/CustomAction/CustomAction.config
new file mode 100644
index 0000000..16a542b
--- /dev/null
+++ b/installer/CustomAction/CustomAction.config
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8" ?>
+ <!-- for more info see 
+      http://msdn.microsoft.com/en-us/library/bbx34a2h.aspx
+      http://msdn.microsoft.com/en-us/library/kza1yk3a.aspx
+      https://stackoverflow.com/questions/3468964/error-2896-using-a-wix-c-net-4-custom-action
+      https://stackoverflow.com/questions/3298304/wix-custom-actions-built-for-net-framework-4-0-does-not-work-ways-to-resolve#14230260 
+ -->
+  <configuration>
+     <startup useLegacyV2RuntimeActivationPolicy="true">
+        <supportedRuntime version="v2.0.50727" />
+     </startup>
+  </configuration>
diff --git a/installer/CustomAction/CustomAction.csproj b/installer/CustomAction/CustomAction.csproj
new file mode 100644
index 0000000..7b6bd51
--- /dev/null
+++ b/installer/CustomAction/CustomAction.csproj
@@ -0,0 +1,51 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">x64</Platform>
+    <ProductVersion>8.0.30703</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{00EB6FCF-D3B0-47EE-8010-9172D05D9DFF}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>CustomAction</RootNamespace>
+    <AssemblyName>CouchIniAction</AssemblyName>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <WixCATargetsPath Condition=" '$(WixCATargetsPath)' == '' ">C:\Program Files (x86)\MSBuild\Microsoft\WiX\v3.x\wix.ca.targets</WixCATargetsPath>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>.</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>.</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Xml.Linq" />
+    <!-- <Reference Include="Microsoft.CSharp" /> -->
+    <Reference Include="System.Xml" />
+    <Reference Include="Microsoft.Deployment.WindowsInstaller">
+      <Private>True</Private>
+    </Reference>
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="CouchIniAction.cs" />
+    <Compile Include="AssemblyInfo.cs" />
+    <Content Include="CustomAction.config" />
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <Import Project="$(WixCATargetsPath)" />
+</Project>
diff --git a/installer/adminprompt.wxs b/installer/adminprompt.wxs
new file mode 100644
index 0000000..15c233e
--- /dev/null
+++ b/installer/adminprompt.wxs
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
+   <Fragment>
+      <Property Id="ADMINUSER" Hidden="yes" />
+      <Property Id="ADMINPASSWORD" Hidden="yes" />
+      <UI>
+         <Dialog Id="AdminPromptDlg" Width="370" Height="270" Title="Create Administrator Account">
+            <Control Id="Title" Type="Text" X="20" Y="20" Width="220" Height="30" Transparent="yes" NoPrefix="yes" Text="{\WixUI_Font_Emphasized}Create CouchDB Admin User" />
+            <Control Id="Description" Type="Text" X="20" Y="50" Width="220" Height="40" Transparent="yes" NoPrefix="yes" Text="{\WixUI_Font_Emphasized}CouchDB 3.x+ requires an admin user to start. Existing credentials will not be overwritten." />
+            <Control Id="UserLabel" Type="Text" Width="322" Height="10" X="20" Y="110" Text="Account name (Example: admin):" />
+            <Control Id="UserTextbox" Type="Edit" Width="200" Height="15" X="20" Y="123" Property="ADMINUSER" />
+            <Control Id="PassLabel" Type="Text" Width="322" Height="10" X="20" Y="147" Text="Password:" />
+            <Control Id="PassTextbox" Type="Edit" Width="200" Height="15" X="20" Y="160" Password="yes" Property="ADMINPASSWORD" />
+            <Control Id="Validate" Type="PushButton" Width="100" Height="15" X="20" Y="180" Text="Validate Credentials" />
+            <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
+            <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Text="!(loc.WixUIBack)" />
+            <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="!(loc.WixUINext)">
+               <Condition Action="disable"><![CDATA[(ADMINUSER = "") OR (ADMINPASSWORD = "")]]></Condition>
+               <Condition Action="enable"><![CDATA[(ADMINUSER <> "") AND (ADMINPASSWORD <> "")]]></Condition>
+
+               <Publish Property="ADMINUSER" Value="[ADMINUSER]">1</Publish>
+               <Publish Property="ADMINPASSWORD" Value="[ADMINPASSWORD]">1</Publish>
+            </Control>
+            <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="!(loc.WixUICancel)">
+               <Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
+            </Control>
+         </Dialog>
+      </UI>
+   </Fragment>
+</Wix>
+
diff --git a/installer/couchdb.wxs.in b/installer/couchdb.wxs.in
index 5e76b0d..390ac23 100644
--- a/installer/couchdb.wxs.in
+++ b/installer/couchdb.wxs.in
@@ -1,41 +1,38 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- Compile with:
-	>candle couchdb.wxs
-	>light -ext WixUIExtension -cultures:en-us couchdb.wixobj couchdbfiles.wixobj -out couchdb.msi
+    >candle couchdb.wxs
+    >light -ext WixUIExtension -cultures:en-us couchdb.wixobj couchdbfiles.wixobj -out couchdb.msi
 -->
 <?define bitness = "(64 bit)" ?>
 <?define Win64 = "yes" ?>
 
 <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
    xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
-<!-- Substitute Version="####VERSION####" below and uncomment the
-     sed line in build_installer.cmd if we ever can guarantee numeric
-     version numbers. Until then, this must be manually updated per
-     release.
--->
-	<Product Id="4CD776E0-FADF-4831-AF56-E80E39F34CFC"
-		Name="Apache CouchDB"
-		Language="1033"
-		Version="2.3.1.1"
-		Manufacturer="The Apache Software Foundation"
-		UpgradeCode="9449123B-61C4-40DE-AA6C-1BB9AA02EB67">
 
-		<Package InstallerVersion="405"
-			Compressed="yes" />
-		<Media Id="1"
-			Cabinet="media1.cab"
-			EmbedCab="yes" />
+   <Product Id="4CD776E0-FADF-4831-AF56-E80E39F34CFC"
+      Name="Apache CouchDB"
+      Language="1033"
+      Version="###VERSION###"
+      Manufacturer="The Apache Software Foundation"
+      UpgradeCode="9449123B-61C4-40DE-AA6C-1BB9AA02EB67">
 
-        <!--Permissions-->
-        <PropertyRef Id="WIX_ACCOUNT_LOCALSYSTEM" />
-        <PropertyRef Id="WIX_ACCOUNT_USERS" />
-        <PropertyRef Id="WIX_ACCOUNT_ADMINISTRATORS" />
+      <Package InstallerVersion="500"
+         Compressed="yes" />
+      <Media Id="1"
+         Cabinet="media1.cab"
+         EmbedCab="yes" />
 
-		<!--Directory structure-->
-        <Property Id="ApplicationFolderName" Value="C:\CouchDB" />
-		<Directory Id="TARGETDIR"
-			Name="SourceDir">
-			<Directory Id="APPLICATIONFOLDER" Name="CouchDB">
+      <Binary Id="CouchIniActionDll" SourceFile="CustomAction\CouchIniAction.CA.dll" />
+
+      <!--Permissions-->
+      <PropertyRef Id="WIX_ACCOUNT_LOCALSYSTEM" />
+      <PropertyRef Id="WIX_ACCOUNT_USERS" />
+      <PropertyRef Id="WIX_ACCOUNT_ADMINISTRATORS" />
+
+      <!--Directory structure-->
+      <Directory Id="TARGETDIR" Name="SourceDir">
+         <Directory Id="PROGRAMFILESFORSURE" Name="Program Files">
+            <Directory Id="APPLICATIONFOLDER" Name="Apache CouchDB">
                <Component Id="AppFolder_comp" DiskId="1" Guid="C2C4462F-D9AE-4178-9E49-E2A85C256635">
                   <CreateFolder>
                      <Permission User="[WIX_ACCOUNT_LOCALSYSTEM]" GenericAll="yes" />
@@ -44,156 +41,238 @@
                   </CreateFolder>
                </Component>
             </Directory>
-			<Directory Id="ProgramMenuFolder">
-				<Directory Id="OurShortcutsDir" Name="Apache CouchDB" />
-			</Directory>
-		</Directory>
+         </Directory>
+         <Directory Id="ProgramMenuFolder">
+            <Directory Id="OurShortcutsDir" Name="Apache CouchDB" />
+         </Directory>
+      </Directory>
 
-		<DirectoryRef Id="TARGETDIR">
-    		<Merge Id="VCRedist120" SourceFile="C:\Program Files (x86)\Common Files\Merge Modules\Microsoft_VC120_CRT_x64.msm" DiskId="1" Language="0"/>
-		</DirectoryRef>
-		
-        <!--Icons-->
-        <Icon Id="couchdb.ico" SourceFile="..\bits\couchdb-64x64.ico" />
-        <Property Id="ARPPRODUCTICON" Value="couchdb.ico" />
+      <DirectoryRef Id="TARGETDIR">
+         <Merge Id="VCRedist141" SourceFile="C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Redist\MSVC\14.16.27012\MergeModules\Microsoft_VC141_CRT_x64.msm" DiskId="1" Language="0"/>
+      </DirectoryRef>
 
-		<!--Start Menu Shortcuts-->
-		<DirectoryRef Id="OurShortcutsDir">
-			<Component Id="CMP_Shortcuts"
-				Guid="A2754FBF-3E43-4AEF-A70A-14D78CAC2784">
+      <SetProperty Id="ARPINSTALLLOCATION" Value="[APPLICATIONFOLDER]"
+         After="CostFinalize" />
 
-				<Shortcut Id="DocumentationStartMenuShortcut"
-					Name="Apache CouchDB Documentation"
-					Description="Read the CouchDB Documentation"
-					Target="[APPLICATIONFOLDER]\share\www\docs\index.html" />
+      <!--Icons-->
+      <Icon Id="couchdb.ico" SourceFile="..\bits\couchdb-500x500.ico" />
+      <Property Id="ARPPRODUCTICON" Value="couchdb.ico" />
 
-				<util:InternetShortcut Id="FauxtonStartMenuShortcut"
-					Name="Apache CouchDB Fauxton" 
-                    Target="http://localhost:5984/_utils/index.html" />
-					
-				<Shortcut Id="ApplicationServiceMenuShortcut"
-                    Name="Start or Stop Apache CouchDB Service"
-					Description="Start or stop the Apache CouchDB service"
-                    Icon="couchdb.ico"
-                    Target="[System64Folder]\services.msc" />
-					
-				<Shortcut Id="UninstallShortcut"
-					Name="Uninstall Apache CouchDB"
-					Description="Uninstalls Apache CouchDB"
-					Target="[System64Folder]msiexec.exe"
-					Arguments="/x [ProductCode]" />
-					
-				<RemoveFolder Id="RemoveOurShortcutsDir"
-					On="uninstall" />
-				
-				<RegistryValue Root="HKCU"
-					Key="Software\Apache\CouchDB"
-					Name="installed"
-					Type="integer"
-					Value="1"
-					KeyPath="yes" />
-			</Component>
-		</DirectoryRef>
-		
-		<!--Features-->
-		<Feature Id="ProductFeature"
-			Title="Droplet"
-			Level="1">
-			<ComponentRef Id="CMP_Shortcuts" />
-            <ComponentRef Id="AppFolder_comp" />
-			<ComponentGroupRef Id="CouchDBFilesGroup" />
-		</Feature>
-		
-		<Feature Id="VCRedist120" Title="Visual C++ 12.0 Runtime" AllowAdvertise="no" Display="hidden" Level="1">
-    		<MergeRef Id="VCRedist120"/>
-		</Feature>
-		
-		<!--Custom actions and execute sequences-->
-	    <!-- Prevent downgrading -->
-	    <!-- <CustomAction Id="PreventDowngrading" After="FindRelatedProducts" Error="Newer version already installed." />  -->
-        <SetProperty 
-            Id="InstallCouchDBService"
-            Value="&quot;[APPLICATIONFOLDER]bin\nssm.exe&quot; install &quot;Apache CouchDB&quot; [APPLICATIONFOLDER]bin\couchdb.cmd"
-            Before="InstallCouchDBService"
-            Sequence="execute"
-        />
-        <CustomAction
-            Id="InstallCouchDBService"
-            BinaryKey="WixCA"
-            DllEntry="WixQuietExec64"
-            Execute="deferred"
-            Return="ignore"
-            Impersonate="no"
-        />
+      <!--Start Menu Shortcuts-->
+      <DirectoryRef Id="OurShortcutsDir">
+         <Component Id="CMP_Shortcuts"
+            Guid="A2754FBF-3E43-4AEF-A70A-14D78CAC2784">
 
-        <SetProperty
-            Id="StartCouchDBService"
-            Value="&quot;[APPLICATIONFOLDER]bin\nssm.exe&quot; start &quot;Apache CouchDB&quot;"
-            Before="StartCouchDBService"
-            Sequence="execute"
-        />
-        <CustomAction
-            Id="StartCouchDBService"
-            BinaryKey="WixCA"
-            DllEntry="WixQuietExec64"
-            Execute="deferred"
-            Return="ignore"
-            Impersonate="no"
-        />
+            <Shortcut Id="DocumentationStartMenuShortcut"
+               Name="Apache CouchDB Documentation"
+               Description="Read the CouchDB Documentation"
+               Target="[APPLICATIONFOLDER]\share\www\docs\index.html" />
 
-        <SetProperty
-            Id="StopCouchDBService"
-            Value="&quot;[APPLICATIONFOLDER]bin\nssm.exe&quot; stop &quot;Apache CouchDB&quot;"
-            Before="StopCouchDBService"
-            Sequence="execute"
-        />
-        <CustomAction
-            Id="StopCouchDBService"
-            BinaryKey="WixCA"
-            DllEntry="WixQuietExec64"
-            Execute="deferred"
-            Return="ignore"
-            Impersonate="no"
-        />
+            <util:InternetShortcut Id="FauxtonStartMenuShortcut"
+               Name="Apache CouchDB Fauxton" 
+               Target="http://localhost:5984/_utils/index.html" />
 
-        <SetProperty
-            Id="RemoveCouchDBService"
-            Value="&quot;[APPLICATIONFOLDER]bin\nssm.exe&quot; remove &quot;Apache CouchDB&quot; confirm"
-            Before="RemoveCouchDBService"
-            Sequence="execute"
-        />
-        <CustomAction
-            Id="RemoveCouchDBService"
-            BinaryKey="WixCA"
-            DllEntry="WixQuietExec64"
-            Execute="deferred"
-            Return="ignore"
-            Impersonate="no"
-        />
-     
-        <!--Custom warning: no spaces in install path!-->
-        <Property Id="DirWarningText"
-           Value="Warning! Apache CouchDB must be installed into a path with no spaces. This installer will not prevent you from doing so, but the resulting installation will not work correctly." />
-        <UIRef Id="CouchDBWixUI" />
-		    
-		<!--Installer prefs-->
-        <WixVariable Id="WixUILicenseRtf" Value="LICENSE.rtf" />
-        <WixVariable Id="WixUIBannerBmp" Value="..\bits\couchdb-banner.bmp" />
-        <WixVariable Id="WixUIDialogBmp" Value="..\bits\couchdb-dialog.bmp" />
-		<Property Id="WIXUI_INSTALLDIR"
-			Value="APPLICATIONFOLDER" />
-		<Property Id="CA_EXCEPTION" Value="None" />
-		<Property Id="SCHEDULEREBOOT" Value="0" />
-        <InstallExecuteSequence>
-           <Custom Action="InstallCouchDBService" After="InstallFiles" />
-           <Custom Action="StartCouchDBService" After="InstallCouchDBService" />
-           <Custom Action="StopCouchDBService" After="MsiUnpublishAssemblies" >
-              Installed AND (REMOVE = "ALL")
-           </Custom>
-           <Custom Action="RemoveCouchDBService" After="StopCouchDBService" >
-              Installed AND (REMOVE = "ALL")
-           </Custom>
-        </InstallExecuteSequence>
-	</Product>
+            <Shortcut Id="ApplicationServiceMenuShortcut"
+               Name="Start or Stop Apache CouchDB Service"
+               Description="Start or stop the Apache CouchDB service"
+               Icon="couchdb.ico"
+               Target="[System64Folder]\services.msc" />
+
+            <Shortcut Id="UninstallShortcut"
+               Name="Uninstall Apache CouchDB"
+               Description="Uninstalls Apache CouchDB"
+               Target="[System64Folder]msiexec.exe"
+               Arguments="/x [ProductCode]" />
+
+            <RemoveFolder Id="RemoveOurShortcutsDir"
+               On="uninstall" />
+
+            <RegistryValue Root="HKCU"
+               Key="Software\Apache\CouchDB"
+               Name="installed"
+               Type="integer"
+               Value="1"
+               KeyPath="yes" />
+         </Component>
+      </DirectoryRef>
+
+      <!--Features-->
+      <Feature Id="ProductFeature"
+         Title="Droplet"
+         Level="1">
+         <ComponentRef Id="CMP_Shortcuts" />
+         <ComponentRef Id="AppFolder_comp" />
+         <ComponentGroupRef Id="CouchDBFilesGroup" />
+      </Feature>
+
+      <Feature Id="VCRedist141" Title="Visual C++ 14.1 Runtime" AllowAdvertise="no" Display="hidden" Level="1">
+         <MergeRef Id="VCRedist141"/>
+      </Feature>
+
+      <!--Custom actions and execute sequences-->
+      <!-- Prevent downgrading -->
+      <!-- <CustomAction Id="PreventDowngrading" After="FindRelatedProducts" Error="Newer version already installed." />  -->
+      <!-- These properties must be set here, because we can't actually pass session data to a deferred action. -->
+      <CustomAction
+         Id="SetAdminIniCustomActionPropertyValues"
+         Property="WriteAdminIniFile"
+         Value="ADMINCONFIGFILE=[APPLICATIONFOLDER]etc\local.d\10-admins.ini;ADMINUSER=[ADMINUSER];ADMINPASSWORD=[ADMINPASSWORD]"
+         />
+      <CustomAction
+         Id="WriteAdminIniFile"
+         Return="check"
+         Execute="deferred"
+         DllEntry="WriteAdminIniFile"
+         HideTarget="yes"
+         BinaryKey="CouchIniActionDll" 
+         Impersonate="no"
+         />
+
+      <CustomAction
+         Id="SetMaybeCopyIniFilesValues"
+         Property="MaybeCopyIniFiles"
+         Value="ETCDIR=[APPLICATIONFOLDER]etc"
+         />
+      <CustomAction
+         Id="MaybeCopyIniFiles"
+         Return="check"
+         Execute="deferred"
+         DllEntry="MaybeCopyIniFiles"
+         HideTarget="yes"
+         BinaryKey="CouchIniActionDll" 
+         Impersonate="no"
+         />
+
+      <CustomAction
+         Id="SetMaybeRemoveUserConfigValues"
+         Property="MaybeRemoveUserConfig"
+         Value="ETCDIR=[APPLICATIONFOLDER]etc"
+         />
+      <CustomAction
+         Id="MaybeRemoveUserConfig"
+         Return="check"
+         Execute="deferred"
+         DllEntry="MaybeRemoveUserConfig"
+         HideTarget="yes"
+         BinaryKey="CouchIniActionDll" 
+         Impersonate="no"
+         />
+
+      <SetProperty 
+         Id="InstallCouchDBService"
+         Value="&quot;[APPLICATIONFOLDER]bin\nssm.exe&quot; install &quot;Apache CouchDB&quot; &quot;[APPLICATIONFOLDER]bin\couchdb.cmd&quot;"
+         Before="InstallCouchDBService"
+         Sequence="execute"
+         />
+      <CustomAction
+         Id="InstallCouchDBService"
+         BinaryKey="WixCA"
+         DllEntry="WixQuietExec64"
+         Execute="deferred"
+         Return="ignore"
+         Impersonate="no"
+         />
+
+      <SetProperty
+         Id="StartCouchDBService"
+         Value="&quot;[APPLICATIONFOLDER]bin\nssm.exe&quot; start &quot;Apache CouchDB&quot;"
+         Before="StartCouchDBService"
+         Sequence="execute"
+         />
+      <CustomAction
+         Id="StartCouchDBService"
+         BinaryKey="WixCA"
+         DllEntry="WixQuietExec64"
+         Execute="deferred"
+         Return="ignore"
+         Impersonate="no"
+         />
+
+      <SetProperty
+         Id="StopEPMD"
+         Value="&quot;[System64Folder]\taskkill.exe&quot; /F /IM epmd.exe"
+         Before="StopEPMD"
+         Sequence="execute"
+         />
+      <CustomAction
+         Id="StopEPMD"
+         BinaryKey="WixCA"
+         DllEntry="WixQuietExec64"
+         Execute="deferred"
+         Return="ignore"
+         Impersonate="no"
+         />
+
+      <SetProperty
+         Id="StopCouchDBService"
+         Value="&quot;[APPLICATIONFOLDER]bin\nssm.exe&quot; stop &quot;Apache CouchDB&quot;"
+         Before="StopCouchDBService"
+         Sequence="execute"
+         />
+      <CustomAction
+         Id="StopCouchDBService"
+         BinaryKey="WixCA"
+         DllEntry="WixQuietExec64"
+         Execute="deferred"
+         Return="ignore"
+         Impersonate="no"
+         />
+
+      <SetProperty
+         Id="RemoveCouchDBService"
+         Value="&quot;[APPLICATIONFOLDER]bin\nssm.exe&quot; remove &quot;Apache CouchDB&quot; confirm"
+         Before="RemoveCouchDBService"
+         Sequence="execute"
+         />
+      <CustomAction
+         Id="RemoveCouchDBService"
+         BinaryKey="WixCA"
+         DllEntry="WixQuietExec64"
+         Execute="deferred"
+         Return="ignore"
+         Impersonate="no"
+         />
+
+      <!--Custom warning: 3.x+ doesn't start without an admin! -->
+      <Property Id="ApplicationFolderName" Value="Apache CouchDB" />
+      <Property Id="IniWarningText"
+         Value="{\WixUI_Font_Emphasized}Thank you for installing Apache CouchDB!" />
+      <Property Id="ReleaseNotesLink"
+         Value="&lt;a href=&quot;https://docs.couchdb.org/en/stable/whatsnew/###RELNOTESVERSION###.html&quot;&gt;View Release Notes&lt;/a&gt;" />
+
+      <UIRef Id="CouchDBWixUI" />
+
+      <!--Installer prefs-->
+      <WixVariable Id="WixUILicenseRtf" Value="LICENSE.rtf" />
+      <WixVariable Id="WixUIBannerBmp" Value="..\bits\couchdb-banner.bmp" />
+      <WixVariable Id="WixUIDialogBmp" Value="..\bits\couchdb-dialog.bmp" />
+      <Property Id="WIXUI_INSTALLDIR"
+         Value="APPLICATIONFOLDER" />
+      <Property Id="CA_EXCEPTION" Value="None" />
+      <Property Id="SCHEDULEREBOOT" Value="0" />
+      <InstallExecuteSequence>
+         <Custom Action="SetAdminIniCustomActionPropertyValues" After="InstallFiles">NOT Installed AND NOT REMOVE</Custom>
+         <Custom Action="WriteAdminIniFile" After="SetAdminIniCustomActionPropertyValues">NOT Installed AND NOT REMOVE</Custom>
+         <Custom Action="SetMaybeCopyIniFilesValues" After="WriteAdminIniFile">NOT Installed AND NOT REMOVE</Custom>
+         <Custom Action="MaybeCopyIniFiles" After="SetMaybeCopyIniFilesValues">NOT Installed AND NOT REMOVE</Custom>
+         <Custom Action="InstallCouchDBService" After="MaybeCopyIniFiles">INSTALLSERVICE AND NOT Installed AND NOT REMOVE</Custom>
+         <Custom Action="StartCouchDBService" After="InstallCouchDBService">INSTALLSERVICE AND NOT Installed AND NOT REMOVE</Custom>
+         <Custom Action="StopCouchDBService" After="MsiUnpublishAssemblies" >
+            Installed AND (REMOVE = "ALL")
+         </Custom>
+         <Custom Action="StopEPMD" After="StopCouchDBService" >
+            Installed AND (REMOVE = "ALL")
+         </Custom>
+         <Custom Action="RemoveCouchDBService" After="StopCouchDBService" >
+            Installed AND (REMOVE = "ALL")
+         </Custom>
+         <Custom Action="SetMaybeRemoveUserConfigValues" After="RemoveCouchDBService" >
+            Installed AND (REMOVE = "ALL")
+         </Custom>
+         <Custom Action="MaybeRemoveUserConfig" After="SetMaybeRemoveUserConfigValues" >
+            Installed AND (REMOVE = "ALL")
+         </Custom>
+      </InstallExecuteSequence>
+   </Product>
 </Wix>
 
diff --git a/installer/couchdb_wixui.wxs b/installer/couchdb_wixui.wxs
index 605dda6..453777f 100644
--- a/installer/couchdb_wixui.wxs
+++ b/installer/couchdb_wixui.wxs
@@ -3,9 +3,11 @@
 <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
     <Fragment>
         <UI Id="CouchDBWixUI">
-            <TextStyle Id="WixUI_Font_Normal" FaceName="Tahoma" Size="8" />
-            <TextStyle Id="WixUI_Font_Bigger" FaceName="Tahoma" Size="12" />
-            <TextStyle Id="WixUI_Font_Title" FaceName="Tahoma" Size="9" Bold="yes" />
+            <TextStyle Id="WixUI_Font_Normal" FaceName="!(loc.Advanced_Font_FaceName)" Size="!(loc.Advanced_Font_Normal_Size)" />
+            <TextStyle Id="WixUI_Font_Bigger" FaceName="!(loc.Advanced_Font_FaceName)" Size="!(loc.Advanced_Font_Bigger_Size)" />
+            <TextStyle Id="WixUI_Font_Title" FaceName="!(loc.Advanced_Font_FaceName)" Size="!(loc.Advanced_Font_Title_Size)" Bold="yes" />
+            <TextStyle Id="WixUI_Font_Emphasized" FaceName="!(loc.Advanced_Font_FaceName)" Size="!(loc.Advanced_Font_Emphasized_Size)" Bold="yes" />
+            <TextStyle Id="WinUI_Font_Mono" FaceName="Courier New" Size="!(loc.Advanced_Font_Normal_Size)" />
 
             <Property Id="DefaultUIFont" Value="WixUI_Font_Normal" />
             <Property Id="WixUI_Mode" Value="InstallDir" />
@@ -24,26 +26,27 @@
             <Publish Dialog="BrowseDlg" Control="OK" Event="DoAction" Value="WixUIValidatePath" Order="3">1</Publish>
             <Publish Dialog="BrowseDlg" Control="OK" Event="SpawnDialog" Value="InvalidDirDlg" Order="4"><![CDATA[WIXUI_INSTALLDIR_VALID<>"1"]]></Publish>
 
-            <Publish Dialog="ExitDialog" Control="Finish" Event="EndDialog" Value="Return" Order="999">1</Publish>
+            <Publish Dialog="CustomExitDlg" Control="Finish" Event="EndDialog" Value="Return" Order="999">1</Publish>
 
             <Publish Dialog="WelcomeDlg" Control="Next" Event="NewDialog" Value="LicenseAgreementDlg">NOT Installed</Publish>
             <Publish Dialog="WelcomeDlg" Control="Next" Event="NewDialog" Value="VerifyReadyDlg">Installed AND PATCH</Publish>
 
             <Publish Dialog="LicenseAgreementDlg" Control="Back" Event="NewDialog" Value="WelcomeDlg">1</Publish>
-            <Publish Dialog="LicenseAgreementDlg" Control="Next" Event="NewDialog" Value="DirWarningDlg">LicenseAccepted = "1"</Publish>
+            <Publish Dialog="LicenseAgreementDlg" Control="Next" Event="NewDialog" Value="CouchInstallDirDlg">LicenseAccepted = "1"</Publish>
+            <Publish Dialog="LicenseAgreementDlg" Control="Next" Property="INSTALLSERVICE" Value="1">INSTALLSERVICE &lt;&gt; "0"</Publish>
 
-            <Publish Dialog="DirWarningDlg" Control="Back" Event="NewDialog" Value="LicenseAgreementDlg">1</Publish>
-            <Publish Dialog="DirWarningDlg" Control="Next" Event="NewDialog" Value="InstallDirDlg">1</Publish>
+            <Publish Dialog="CouchInstallDirDlg" Control="Back" Event="NewDialog" Value="LicenseAgreementDlg">1</Publish>
+            <Publish Dialog="CouchInstallDirDlg" Control="Next" Event="SetTargetPath" Value="[WIXUI_INSTALLDIR]" Order="1">1</Publish>
+            <Publish Dialog="CouchInstallDirDlg" Control="Next" Event="DoAction" Value="WixUIValidatePath" Order="2">NOT WIXUI_DONTVALIDATEPATH</Publish>
+            <Publish Dialog="CouchInstallDirDlg" Control="Next" Event="SpawnDialog" Value="InvalidDirDlg" Order="3"><![CDATA[NOT WIXUI_DONTVALIDATEPATH AND WIXUI_INSTALLDIR_VALID<>"1"]]></Publish>
+            <Publish Dialog="CouchInstallDirDlg" Control="Next" Event="NewDialog" Value="AdminPromptDlg" Order="4">WIXUI_DONTVALIDATEPATH OR WIXUI_INSTALLDIR_VALID="1"</Publish>
+            <Publish Dialog="CouchInstallDirDlg" Control="ChangeFolder" Property="_BrowseProperty" Value="[WIXUI_INSTALLDIR]" Order="1">1</Publish>
+            <Publish Dialog="CouchInstallDirDlg" Control="ChangeFolder" Event="SpawnDialog" Value="BrowseDlg" Order="2">1</Publish>
 
-            <Publish Dialog="InstallDirDlg" Control="Back" Event="NewDialog" Value="DirWarningDlg">1</Publish>
-            <Publish Dialog="InstallDirDlg" Control="Next" Event="SetTargetPath" Value="[WIXUI_INSTALLDIR]" Order="1">1</Publish>
-            <Publish Dialog="InstallDirDlg" Control="Next" Event="DoAction" Value="WixUIValidatePath" Order="2">NOT WIXUI_DONTVALIDATEPATH</Publish>
-            <Publish Dialog="InstallDirDlg" Control="Next" Event="SpawnDialog" Value="InvalidDirDlg" Order="3"><![CDATA[NOT WIXUI_DONTVALIDATEPATH AND WIXUI_INSTALLDIR_VALID<>"1"]]></Publish>
-            <Publish Dialog="InstallDirDlg" Control="Next" Event="NewDialog" Value="VerifyReadyDlg" Order="4">WIXUI_DONTVALIDATEPATH OR WIXUI_INSTALLDIR_VALID="1"</Publish>
-            <Publish Dialog="InstallDirDlg" Control="ChangeFolder" Property="_BrowseProperty" Value="[WIXUI_INSTALLDIR]" Order="1">1</Publish>
-            <Publish Dialog="InstallDirDlg" Control="ChangeFolder" Event="SpawnDialog" Value="BrowseDlg" Order="2">1</Publish>
+            <Publish Dialog="AdminPromptDlg" Control="Back" Event="NewDialog" Value="CouchInstallDirDlg">1</Publish>
+            <Publish Dialog="AdminPromptDlg" Control="Next" Event="NewDialog" Value="VerifyReadyDlg">1</Publish>
             
-            <Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog" Value="InstallDirDlg" Order="1">NOT Installed</Publish>
+            <Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog" Value="AdminPromptDlg" Order="1">NOT Installed</Publish>
             <Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog" Value="MaintenanceTypeDlg" Order="2">Installed AND NOT PATCH</Publish>
             <Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog" Value="WelcomeDlg" Order="2">Installed AND PATCH</Publish>
 
diff --git a/installer/customexit.wxs b/installer/customexit.wxs
new file mode 100644
index 0000000..90283a6
--- /dev/null
+++ b/installer/customexit.wxs
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
+    <Fragment>
+        <UI>
+            <Dialog Id="CustomExitDlg" Width="370" Height="270" Title="!(loc.ExitDialog_Title)">
+                <Control Id="Finish" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Cancel="yes" Text="!(loc.WixUIFinish)" />
+                <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Disabled="yes" Text="!(loc.WixUICancel)" />
+                <Control Id="Bitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="234" TabSkip="no" Text="!(loc.ExitDialogBitmap)" />
+                <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Disabled="yes" Text="!(loc.WixUIBack)" />
+                <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
+                <Control Id="Description" Type="Text" X="135" Y="70" Width="220" Height="40" Transparent="yes" NoPrefix="yes" Text="!(loc.ExitDialogDescription)" />
+                <Control Id="Title" Type="Text" X="135" Y="20" Width="220" Height="60" Transparent="yes" NoPrefix="yes" Text="!(loc.ExitDialogTitle)" />
+                <Control Id="WarningText" Type="Text" X="135" Y="110" Width="220" Height="80" Transparent="yes" NoPrefix="yes" Text="[IniWarningText]" />
+                <Control Id="ReleaseNotes" Type="Hyperlink" X="135" Y="190" Width="220" Height="40" Text="[ReleaseNotesLink]" />
+            </Dialog>
+
+            <InstallUISequence>
+                <Show Dialog="CustomExitDlg" OnExit="success" Overridable="yes" />
+            </InstallUISequence>
+
+            <AdminUISequence>
+                <Show Dialog="CustomExitDlg" OnExit="success" Overridable="yes" />
+            </AdminUISequence>
+        </UI>
+    </Fragment>
+</Wix>
+
