Unverified Commit 951b1a7e authored by Sukhbir Singh's avatar Sukhbir Singh Committed by boklm
Browse files

Bug 23561: Fix NSIS builds for Windows 64

This commit adds support for building the 64-bit version of NSIS, and
also bumps the version to 3.03. Doing this enables us to build MAR files
in a 64-bit container for the 64-bit version of Tor Browser; see bug
26363 and bug 24477.

The pe_checksum_fix.py doesn't work in a 64-bit container with the
bundled python-pefile version so we build its latest version to fix this
issue. This change is borrowed from commit bb32ec91 and updates
python-pefile to 2017.11.5.

The Debian package and the patches are no longer required as all changes
were merged upstream in 3.01-1. (See the nsis changelog in Debian.)
parent befc4910
......@@ -3,23 +3,31 @@
[% pc(c('var/compiler'), 'var/setup', { compiler_tarfile => c('input_files_by_name/' _ c('var/compiler')) }) %]
mkdir -p /var/tmp/build
tar -C /var/tmp/build -xf nsis-[% c('version') %].tar.bz2
# NSIS requires zlib and we later set the path using ZLIB_W32.
tar -C /var/tmp/build -xf [% c('input_files_by_name/zlib') %]
cd /var/tmp/build/nsis-[% c('version') %]-src
tar -xf $rootdir/[% c('input_files_by_name/debian') %]
rm -f debian/patches/nsis_system_zlib.patch
rm -f debian/patches/parallel_build.patch
patch -p1 < $rootdir/nsis-missing-unistd-include.patch
for patch in $(grep '\.patch$' debian/patches/series)
do
[ -f debian/patches/$patch ] && patch -p1 < debian/patches/$patch
done
# Adding --no-insert-timestamp to APPEND_LINKFLAGS is not working as it
# is used for both the host and cross-compiled parts, but this option is
# only valid for the Windows linker. Therefore we add it using a patch
# to the cross-compilation part only.
patch -p1 < $rootdir/no-insert-timestamp.patch
[% IF c("var/windows-x86_64") %]
# Seems like setting TARGET_ARCH is not enough so we need to patch build.cpp
# manually; this is confirmed by a comment in the same file.
sed -i 's/m_target_type=TARGET_X86ANSI/m_target_type=TARGET_AMD64/' Source/build.cpp
[% SET target = "amd64" %]
[% ELSE %]
[% SET target = "x86" %]
[% END %]
[% SET scons_args = 'VERSION=' _ c("version")
_ ' APPEND_CCFLAGS="-fgnu89-inline"'
_ " SKIPUTILS='NSIS Menu' XGCC_W32_PREFIX=i686-w64-mingw32-"
_ " SKIPUTILS='NSIS Menu' XGCC_W32_PREFIX=" _ c("arch") _ "-w64-mingw32-"
_ " TARGET_ARCH=" _ target
_ " ZLIB_W32=/var/tmp/build/zlib/"
_ ' PREFIX=/var/tmp/dist/nsis' -%]
scons [% scons_args %]
scons [% scons_args %] install
......
# vim: filetype=yaml sw=2
version: 2.51
version: 3.03
filename: 'nsis-[% c("version") %]-[% c("var/osname") %]-[% c("var/build_id") %].tar.gz'
var:
container:
......@@ -16,11 +16,9 @@ input_files:
- project: container-image
- filename: 'nsis-[% c("version") %].tar.bz2'
URL: 'https://downloads.sourceforge.net/nsis/nsis-[% c("version") %]-src.tar.bz2'
sha256sum: 43d4c9209847e35eb6e2c7cd5a7586e1445374c056c2c7899e40a080e17a1be7
- name: debian
URL: 'http://http.debian.net/debian/pool/main/n/nsis/nsis_2.51-1.debian.tar.xz'
sha256sum: 1dee6957b4a4b8dfe69bcf28bc7f301a13b96b3fa5a394e36c8926ae781e774a
- filename: nsis-missing-unistd-include.patch
sha256sum: abae7f4488bc6de7a4dd760d5f0e7cd3aad7747d4d7cd85786697c8991695eaa
- filename: no-insert-timestamp.patch
- name: '[% c("var/compiler") %]'
project: '[% c("var/compiler") %]'
- name: zlib
project: zlib
diff -ur nsis-2.51-src/SCons/Config/gnu nsis-2.51-src.n/SCons/Config/gnu
--- nsis-2.51-src/SCons/Config/gnu 2018-05-24 20:40:06.508000000 +0200
+++ nsis-2.51-src.n/SCons/Config/gnu 2018-05-24 21:04:16.501000000 +0200
@@ -89,6 +89,7 @@
diff -ur nsis-3.03-src/SCons/Config/gnu nsis-3.03-src.n/SCons/Config/gnu
--- nsis-3.03-src/SCons/Config/gnu 2017-10-06 15:30:20.000000000 -0400
+++ nsis-3.03-src.n/SCons/Config/gnu 2018-06-17 13:26:05.945495151 -0400
@@ -102,6 +102,7 @@
stub_env.Append(LINKFLAGS = ['$NODEFLIBS_FLAG']) # no standard libraries
stub_env.Append(LINKFLAGS = ['$ALIGN_FLAG']) # 512 bytes align
stub_env.Append(LINKFLAGS = ['-Wl,-e,_WinMain@16']) # entry point
stub_env.Append(LINKFLAGS = ['$MAP_FLAG']) # generate map file
+stub_env.Append(LINKFLAGS = ['-Wl,--no-insert-timestamp']) # remove timestamps for reproducible builds
### makensis environment
@@ -125,6 +126,7 @@
stub_uenv = stub_env.Clone()
stub_uenv.Append(CPPDEFINES = ['_UNICODE', 'UNICODE'])
@@ -142,6 +143,7 @@
plugin_env.Append(LINKFLAGS = ['$MAP_FLAG']) # generate map file
plugin_env.Append(LINKFLAGS = ['-static-libgcc']) # Make sure libgcc is statically linked in, for the plugins to work.
plugin_env.Append(LINKFLAGS = ['-static-libstdc++']) # Make sure libstdc++ is statically linked in, for the plugins to work.
plugin_env.Append(LINKFLAGS = ['-static-libgcc']) # remove libgcc*.dll dependency
plugin_env.Append(LINKFLAGS = ['-static-libstdc++']) # remove libstdc++*.dll dependency
+plugin_env.Append(LINKFLAGS = ['-Wl,--no-insert-timestamp']) # remove timestamps for reproducible builds
### cross-platform util environment
@@ -148,6 +150,7 @@
plugin_uenv = plugin_env.Clone()
plugin_uenv.Append(CPPDEFINES = ['_UNICODE', 'UNICODE'])
@@ -181,6 +183,7 @@
util_env.Append(LINKFLAGS = ['-mwindows']) # build windows executables
util_env.Append(LINKFLAGS = ['$ALIGN_FLAG']) # 512 bytes align
+util_env.Append(LINKFLAGS = ['-Wl,--no-insert-timestamp']) # remove timestamps for reproducible builds
conf = FlagsConfigure(util_env)
if not defenv['DEBUG'] and defenv['STRIP'] and defenv['STRIP_W32']:
--- nsis-2.46-src.old/Source/util.h 2009-03-28 09:47:26.000000000 +0000
+++ nsis-2.46-src/Source/util.h 2012-01-16 12:22:14.967416817 +0000
@@ -17,6 +17,8 @@
#ifndef _UTIL_H_
#define _UTIL_H_
+#include <unistd.h>
+
#include <string> // for std::string
#include "boost/scoped_ptr.hpp" // for boost::scoped_ptr
......@@ -43,11 +43,6 @@ mkdir -p "$TBDIR/$MEEKPROFILEPATH/extensions"
# Extract the MAR tools.
unzip -d $rootdir $rootdir/[% c('input_files_by_name/firefox') %]/mar-tools-*.zip
MARTOOLS=$rootdir/mar-tools
[% IF c("var/windows-x86_64") -%]
# Workaround for bug 24477
rm -Rf $MARTOOLS
unzip -d $rootdir $rootdir/mar-tools-linux32.zip
[% END -%]
mv [% c('input_files_by_name/tor-launcher') %] "$TBDIR/$EXTSPATH/tor-launcher@torproject.org.xpi"
mv [% c('input_files_by_name/torbutton') %] "$TBDIR/$EXTSPATH/torbutton@torproject.org.xpi"
......@@ -241,6 +236,14 @@ popd
[% IF c("var/windows") %]
# We need to install a recent version of python-pefile so that it works
# in a x86_64 container:
# https://github.com/TheTorProject/tor-messenger-build/pull/10
tar xf $rootdir/[% c('input_files_by_name/python-pefile') %]
cd $(echo [% c('input_files_by_name/python-pefile') %] | sed s/\.tar\.gz$//)
python setup.py install --user
cd ..
tar -C /var/tmp/dist -xf $rootdir/[% c('input_files_by_name/nsis') %]
export PATH="/var/tmp/dist/nsis/bin:$PATH"
......
......@@ -28,17 +28,16 @@ targets:
windows:
var:
arch_deps:
- python-pefile
- python-future
pre_pkginst: |
# enable jessie-backports for python-future
echo 'deb http://ftp.debian.org/debian jessie-backports main' >> /etc/apt/sources.list
windows-i686:
var:
mar_osname: win32
windows-x86_64:
var:
mar_osname: win64
# We use a 32bit container to be able to use a 32bit nsis and
# pe_checksum_fix.py
container:
arch: i386
input_files:
- project: container-image
......@@ -79,18 +78,13 @@ input_files:
enable: '[% c("var/osx") %]'
- project: nsis
name: nsis
target:
- '[% c("var/channel") %]'
- torbrowser-windows-i686
enable: '[% c("var/windows") %]'
- name: tbb-windows-installer
project: tbb-windows-installer
enable: '[% c("var/windows") %]'
- filename: pe_checksum_fix.py
enable: '[% c("var/windows") %]'
# Workaround for bug 24477
- URL: https://archive.torproject.org/tor-package-archive/torbrowser/7.5a7/mar-tools-linux32.zip
sig_ext: asc
file_gpg_id: 1
gpg_keyring: torbrowser.gpg
enable: '[% c("var/windows-x86_64") %]'
- name: python-pefile
URL: https://files.pythonhosted.org/packages/7e/9b/f99171190f04cd23768547dd34533b4016bd582842f53cd9fe9585a74c74/pefile-2017.11.5.tar.gz
sha256sum: 675c35ee0e1677db9e80d2f48d8a7ff2cf38e6207e8cd5e2a2c6d126db025854
enable: '[% c("var/windows") %]'
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment