diff -ru openssl.orig/crypto/x509v3/v3_pci.c openssl/crypto/x509v3/v3_pci.c
--- a/openssl.orig/crypto/x509v3/v3_pci.c	2016-03-01 14:35:05.000000000 +0100
+++ b/openssl/crypto/x509v3/v3_pci.c	2016-03-03 20:27:42.195914432 +0100
@@ -3,7 +3,7 @@
  * Contributed to the OpenSSL Project 2004 by Richard Levitte
  * (richard@levitte.org)
  */
-/* Copyright (c) 2004 Kungliga Tekniska Högskolan
+/* Copyright (c) 2004 Kungliga Tekniska Hoegskolan
  * (Royal Institute of Technology, Stockholm, Sweden).
  * All rights reserved.
  *
diff -ru openssl.orig/crypto/x509v3/v3_pcia.c openssl/crypto/x509v3/v3_pcia.c
--- a/openssl.orig/crypto/x509v3/v3_pcia.c	2016-03-01 14:35:05.000000000 +0100
+++ b/openssl/crypto/x509v3/v3_pcia.c	2016-03-03 20:27:56.495913984 +0100
@@ -3,7 +3,7 @@
  * Contributed to the OpenSSL Project 2004 by Richard Levitte
  * (richard@levitte.org)
  */
-/* Copyright (c) 2004 Kungliga Tekniska Högskolan
+/* Copyright (c) 2004 Kungliga Tekniska Hoegskolan
  * (Royal Institute of Technology, Stockholm, Sweden).
  * All rights reserved.
  *
diff -ru openssl.orig/ms/do_ms.bat openssl/ms/do_ms.bat
--- a/openssl.orig/ms/do_ms.bat	2015-01-15 15:43:14.000000000 +0100
+++ b/openssl/ms/do_ms.bat	2016-03-03 20:31:09.355907935 +0100
@@ -1,11 +1,11 @@
 
-perl util\mkfiles.pl >MINFO
-perl util\mk1mf.pl no-asm VC-WIN32 >ms\nt.mak
-perl util\mk1mf.pl dll no-asm VC-WIN32 >ms\ntdll.mak
-if x%OSVERSION% == x goto skipce
-perl util\mk1mf.pl no-asm VC-CE >ms\ce.mak
-perl util\mk1mf.pl dll no-asm VC-CE >ms\cedll.mak
-:skipce
+%1 util\mkfiles.pl >MINFO
+if %2 == VC-WIN32 goto not64a
+perl ms\uplink.pl win64a > ms\uptable.asm
+ml64 -c -Foms\uptable.obj ms\uptable.asm
+:not64a
+%1 util\mk1mf.pl no-asm %2 >ms\nt.mak
+%1 util\mk1mf.pl dll no-asm %2 >ms\ntdll.mak
 
-perl util\mkdef.pl 32 libeay > ms\libeay32.def
-perl util\mkdef.pl 32 ssleay > ms\ssleay32.def
+%1 util\mkdef.pl 32 libeay > ms\libeay32.def
+%1 util\mkdef.pl 32 ssleay > ms\ssleay32.def
diff -ru openssl.orig/util/mk1mf.pl openssl/util/mk1mf.pl
--- a/openssl.orig/util/mk1mf.pl	2016-03-03 20:22:21.043924505 +0100
+++ b/openssl/util/mk1mf.pl	2016-03-03 20:34:45.015901171 +0100
@@ -163,7 +163,7 @@
 $inc_def="outinc";
 $tmp_def="tmp";
 
-$perl="perl" unless defined $perl;
+$perl="$ENV{PERL}" unless defined $perl;
 $mkdir="-mkdir" unless defined $mkdir;
 
 ($ssl,$crypto)=("ssl","crypto");
@@ -347,6 +347,11 @@
 	s/\s*$//; # was chop, didn't work in mixture of perls for Windows...
 
 	($key,$val)=/^([^=]+)=(.*)/;
+
+	# On some Windows machines, $val has linefeeds at the end, which confuses
+	# subsequent code in this file. So we strip all whitespace at the end.
+	$val =~ s/\s+$//;
+
 	if ($key eq "RELATIVE_DIRECTORY")
 		{
 		if ($lib ne "")
@@ -473,7 +478,7 @@
 # Set your compiler options
 PLATFORM=$platform
 CC=$bin_dir${cc}
-CFLAG=$cflags
+CFLAG=$cflags \$(SOLARINC)
 APP_CFLAG=$app_cflag
 LIB_CFLAG=$lib_cflag
 SHLIB_CFLAG=$shl_cflag
@@ -488,7 +493,7 @@
 
 LINK_CMD=$link
 LFLAGS=$lflags
-RSC=$rsc
+RSC=$rsc \$(SOLARINC)
 
 # The output directory for everything interesting
 OUT_D=$out_dir
@@ -669,7 +674,7 @@
 printf OUT <<EOF;
 #ifdef $platform_cpp_symbol
   /* auto-generated/updated by util/mk1mf.pl for crypto/cversion.c */
-  #define CFLAGS "compiler: $cc $cflags"
+  #define CFLAGS "compiler: $cflags"
   #define PLATFORM "$platform"
 EOF
 printf OUT "  #define DATE \"%s\"\n", scalar gmtime();
diff -ru openssl.orig/util/pl/VC-32.pl openssl/util/pl/VC-32.pl
--- a/openssl.orig/util/pl/VC-32.pl	2016-03-01 14:35:53.000000000 +0100
+++ b/openssl/util/pl/VC-32.pl	2016-03-03 21:15:14.083824986 +0100
@@ -30,7 +30,7 @@
 my $ff = "";
 
 # C compiler stuff
-$cc='cl';
+$cc=$ENV{'CC'};
 if ($FLAVOR =~ /WIN64/)
     {
     # Note that we currently don't have /WX on Win64! There is a lot of
@@ -114,7 +114,7 @@
     }
 
     $cc=($ENV{CC} or "cl");
-    $base_cflags=' /W3 /WX /GF /Gy /nologo -DUNICODE -D_UNICODE -DOPENSSL_SYSNAME_WINCE -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -DDSO_WIN32 -DNO_CHMOD -DOPENSSL_SMALL_FOOTPRINT';
+    $base_cflags=' -W3 -GF -Gy -nologo -DUNICODE -D_UNICODE -DOPENSSL_SYSNAME_WINCE -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -DDSO_WIN32 -DNO_CHMOD -DOPENSSL_SMALL_FOOTPRINT';
     $base_cflags.=" $wcecdefs";
     $base_cflags.=' -I$(WCECOMPAT)/include'		if (defined($ENV{'WCECOMPAT'}));
     $base_cflags.=' -I$(PORTSDK_LIBPATH)/../../include'	if (defined($ENV{'PORTSDK_LIBPATH'}));
@@ -123,20 +123,21 @@
     } else {
 	$base_cflags.=' /MC';
     }
-    $opt_cflags=' /O1i';	# optimize for space, but with intrinsics...
-    $dbg_cflags=' /Od -DDEBUG -D_DEBUG';
+    $opt_cflags=' -O1i';   # optimize for space, but with intrinsics...
+    $dbg_cflags=' -Od -DDEBUG -D_DEBUG';
+
     $lflags="/nologo /opt:ref $wcelflag";
     }
 else	# Win32
     {
     $base_cflags= " $mf_cflag";
-    my $f = $shlib || $fips ?' /MD':' /MT';
+    my $f = $shlib || $fips ? (($ENV{MSVC_USE_DEBUG_RUNTIME} eq "TRUE") ? ' -MDd' : ' -MD' ):' -MT';
     $ff = "/fixed";
-    $opt_cflags=$f.' /Ox /O2 /Ob2';
-    $dbg_cflags=$f.'d /Od -DDEBUG -D_DEBUG';
+    $opt_cflags=$f.' -Ox -O2 -Ob2';
+    $dbg_cflags=$f.'d -Od -DDEBUG -D_DEBUG';
     $lflags="/nologo /subsystem:console /opt:ref";
     }
-$lib_cflag='/Zl' if (!$shlib);	# remove /DEFAULTLIBs from static lib
+$lib_cflag='-Zl' if (!$shlib);	# remove /DEFAULTLIBs from static lib
 $mlflags='';
 
 $out_def ="out32";	$out_def.="dll"			if ($shlib);
@@ -161,7 +162,7 @@
 
 $obj='.obj';
 $asm_suffix='.asm';
-$ofile="/Fo";
+$ofile="-Fo.\\";
 
 # EXE linking stuff
 $link="link";
diff -ru openssl.orig/ms/uplink.c openssl/ms/uplink.c
--- a/openssl.orig/ms/uplink.c	2015-03-19 15:02:02.000000000 +0100
+++ b/openssl/ms/uplink.c	2016-03-03 20:39:19.403892565 +0100
@@ -1,5 +1,6 @@
 #if (defined(_WIN64) || defined(_WIN32_WCE)) && !defined(UNICODE)
 # define UNICODE
+# define _CRT_NON_CONFORMING_SWPRINTFS
 #endif
 #if defined(UNICODE) && !defined(_UNICODE)
 # define _UNICODE