Browse code

win: support for Visual Studio 2017

This patch enables building openvpn with Visual Studio 2017.

It is advised to use openvpn-build/msvs/build.bat which
also downloads and build required dependencies.

Changes made:

- updated path to Visual Studio toolchain
- updated platform toolset
- added missing libraries
- added x64 configurations
- enabled AEAD ciphers to make NCP work
- enabled unicode support
- updated source files in project settings
- fix includes
- restored variable which was erroneously removed
- added properties file which sets required env variables
(required to build with IDE)
- etc

Signed-off-by: Lev Stipakov <lev@openvpn.net>
Acked-by: Simon Rozman <simon@rozman.si>
Message-Id: <1538141209-32330-1-git-send-email-lstipakov@gmail.com>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg17499.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>

Lev Stipakov authored on 2018/09/28 22:26:49
Showing 14 changed files
... ...
@@ -1,35 +1,64 @@
1 1
 <?xml version="1.0" encoding="utf-8"?>
2
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
2
+<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
3 3
   <ItemGroup Label="ProjectConfigurations">
4 4
     <ProjectConfiguration Include="Debug|Win32">
5 5
       <Configuration>Debug</Configuration>
6 6
       <Platform>Win32</Platform>
7 7
     </ProjectConfiguration>
8
+    <ProjectConfiguration Include="Debug|x64">
9
+      <Configuration>Debug</Configuration>
10
+      <Platform>x64</Platform>
11
+    </ProjectConfiguration>
8 12
     <ProjectConfiguration Include="Release|Win32">
9 13
       <Configuration>Release</Configuration>
10 14
       <Platform>Win32</Platform>
11 15
     </ProjectConfiguration>
16
+    <ProjectConfiguration Include="Release|x64">
17
+      <Configuration>Release</Configuration>
18
+      <Platform>x64</Platform>
19
+    </ProjectConfiguration>
12 20
   </ItemGroup>
13 21
   <PropertyGroup Label="Globals">
14 22
     <ProjectGuid>{8598C2C8-34C4-47A1-99B0-7C295A890615}</ProjectGuid>
15 23
     <RootNamespace>msvc-generate</RootNamespace>
16 24
     <Keyword>MakeFileProj</Keyword>
25
+    <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>
17 26
   </PropertyGroup>
18 27
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
19 28
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
20 29
     <ConfigurationType>Makefile</ConfigurationType>
30
+    <PlatformToolset>v141</PlatformToolset>
31
+  </PropertyGroup>
32
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
33
+    <ConfigurationType>Makefile</ConfigurationType>
34
+    <PlatformToolset>v141</PlatformToolset>
21 35
   </PropertyGroup>
22 36
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
23 37
     <ConfigurationType>Makefile</ConfigurationType>
38
+    <PlatformToolset>v141</PlatformToolset>
39
+  </PropertyGroup>
40
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
41
+    <ConfigurationType>Makefile</ConfigurationType>
42
+    <PlatformToolset>v141</PlatformToolset>
24 43
   </PropertyGroup>
25 44
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
26 45
   <ImportGroup Label="ExtensionSettings">
27 46
   </ImportGroup>
28 47
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
29 48
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
49
+    <Import Project="..\..\..\src\compat\PropertySheet.props" />
50
+  </ImportGroup>
51
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
52
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
53
+    <Import Project="..\..\..\src\compat\PropertySheet.props" />
30 54
   </ImportGroup>
31 55
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
32 56
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
57
+    <Import Project="..\..\..\src\compat\PropertySheet.props" />
58
+  </ImportGroup>
59
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
60
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
61
+    <Import Project="..\..\..\src\compat\PropertySheet.props" />
33 62
   </ImportGroup>
34 63
   <PropertyGroup Label="UserMacros" />
35 64
   <PropertyGroup>
... ...
@@ -37,25 +66,43 @@
37 37
     <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Configuration)\</OutDir>
38 38
     <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Configuration)\</IntDir>
39 39
     <NMakeBuildCommandLine Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">nmake -f Makefile.mak all</NMakeBuildCommandLine>
40
+    <NMakeBuildCommandLine Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">nmake -f Makefile.mak all</NMakeBuildCommandLine>
40 41
     <NMakeReBuildCommandLine Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">nmake -f Makefile.mak clean all</NMakeReBuildCommandLine>
42
+    <NMakeReBuildCommandLine Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">nmake -f Makefile.mak clean all</NMakeReBuildCommandLine>
41 43
     <NMakeCleanCommandLine Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">nmake -f Makefile.mak clean</NMakeCleanCommandLine>
44
+    <NMakeCleanCommandLine Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">nmake -f Makefile.mak clean</NMakeCleanCommandLine>
42 45
     <NMakeOutput Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">config-msvc-version.h</NMakeOutput>
46
+    <NMakeOutput Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">config-msvc-version.h</NMakeOutput>
43 47
     <NMakePreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WIN32;_DEBUG;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
48
+    <NMakePreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">WIN32;_DEBUG;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
44 49
     <NMakeIncludeSearchPath Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(NMakeIncludeSearchPath)</NMakeIncludeSearchPath>
50
+    <NMakeIncludeSearchPath Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(NMakeIncludeSearchPath)</NMakeIncludeSearchPath>
45 51
     <NMakeForcedIncludes Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(NMakeForcedIncludes)</NMakeForcedIncludes>
52
+    <NMakeForcedIncludes Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(NMakeForcedIncludes)</NMakeForcedIncludes>
46 53
     <NMakeAssemblySearchPath Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(NMakeAssemblySearchPath)</NMakeAssemblySearchPath>
54
+    <NMakeAssemblySearchPath Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(NMakeAssemblySearchPath)</NMakeAssemblySearchPath>
47 55
     <NMakeForcedUsingAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(NMakeForcedUsingAssemblies)</NMakeForcedUsingAssemblies>
56
+    <NMakeForcedUsingAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(NMakeForcedUsingAssemblies)</NMakeForcedUsingAssemblies>
48 57
     <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Configuration)\</OutDir>
49 58
     <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Configuration)\</IntDir>
50 59
     <NMakeBuildCommandLine Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">nmake -f Makefile.mak all</NMakeBuildCommandLine>
60
+    <NMakeBuildCommandLine Condition="'$(Configuration)|$(Platform)'=='Release|x64'">nmake -f Makefile.mak all</NMakeBuildCommandLine>
51 61
     <NMakeReBuildCommandLine Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">nmake -f Makefile.mak clean all</NMakeReBuildCommandLine>
62
+    <NMakeReBuildCommandLine Condition="'$(Configuration)|$(Platform)'=='Release|x64'">nmake -f Makefile.mak clean all</NMakeReBuildCommandLine>
52 63
     <NMakeCleanCommandLine Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">nmake -f Makefile.mak clean</NMakeCleanCommandLine>
64
+    <NMakeCleanCommandLine Condition="'$(Configuration)|$(Platform)'=='Release|x64'">nmake -f Makefile.mak clean</NMakeCleanCommandLine>
53 65
     <NMakeOutput Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">config-msvc-version.h</NMakeOutput>
66
+    <NMakeOutput Condition="'$(Configuration)|$(Platform)'=='Release|x64'">config-msvc-version.h</NMakeOutput>
54 67
     <NMakePreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WIN32;NDEBUG;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
68
+    <NMakePreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">WIN32;NDEBUG;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
55 69
     <NMakeIncludeSearchPath Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(NMakeIncludeSearchPath)</NMakeIncludeSearchPath>
70
+    <NMakeIncludeSearchPath Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(NMakeIncludeSearchPath)</NMakeIncludeSearchPath>
56 71
     <NMakeForcedIncludes Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(NMakeForcedIncludes)</NMakeForcedIncludes>
72
+    <NMakeForcedIncludes Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(NMakeForcedIncludes)</NMakeForcedIncludes>
57 73
     <NMakeAssemblySearchPath Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(NMakeAssemblySearchPath)</NMakeAssemblySearchPath>
74
+    <NMakeAssemblySearchPath Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(NMakeAssemblySearchPath)</NMakeAssemblySearchPath>
58 75
     <NMakeForcedUsingAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(NMakeForcedUsingAssemblies)</NMakeForcedUsingAssemblies>
76
+    <NMakeForcedUsingAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(NMakeForcedUsingAssemblies)</NMakeForcedUsingAssemblies>
59 77
   </PropertyGroup>
60 78
   <ItemDefinitionGroup>
61 79
   </ItemDefinitionGroup>
... ...
@@ -66,4 +113,4 @@
66 66
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
67 67
   <ImportGroup Label="ExtensionTargets">
68 68
   </ImportGroup>
69
-</Project>
70 69
\ No newline at end of file
70
+</Project>
... ...
@@ -5,6 +5,7 @@
5 5
 #define ENABLE_DEF_AUTH 1
6 6
 #define ENABLE_PF 1
7 7
 #define ENABLE_CRYPTO_OPENSSL 1
8
+#define HAVE_AEAD_CIPHER_MODES 1
8 9
 #define ENABLE_DEBUG 1
9 10
 #define ENABLE_EUREPHIA 1
10 11
 #define ENABLE_FRAGMENT 1
... ...
@@ -7,13 +7,15 @@ setlocal ENABLEDELAYEDEXPANSION
7 7
 cd /d %0\..
8 8
 call msvc-env.bat
9 9
 
10
-set PLATFORMS=Win32
11
-set CONFIGURATIONS=Release
10
+set PLATFORMS=x64
11
+set CONFIGURATIONS=Debug Release
12 12
 
13 13
 if exist "%VCHOME%\vcvarsall.bat" (
14 14
 	call "%VCHOME%\vcvarsall.bat"
15 15
 ) else if exist "%VCHOME%\bin\vcvars32.bat" (
16 16
 	call "%VCHOME%\bin\vcvars32.bat"
17
+) else if exist "%VCHOME%\Auxiliary\Build\vcvars32.bat" (
18
+	call "%VCHOME%\Auxiliary\Build\vcvars32.bat"
17 19
 ) else (
18 20
 	echo Cannot detect visual studio
19 21
 	goto error
... ...
@@ -8,6 +8,8 @@ if exist "%VSHOME%\Common7\IDE\VCExpress.exe" (
8 8
 	set IDE=%VSHOME%\Common7\IDE\VCExpress.exe
9 9
 ) else if exist "%VSHOME%\Common7\IDE\devenv.exe" (
10 10
 	set IDE=%VSHOME%\Common7\IDE\devenv.exe
11
+) else if exist "%VCHOME%\Auxiliary\Build\vcvars64.bat" (
12
+	call "%VCHOME%\Auxiliary\Build\vcvars64.bat"
11 13
 ) else (
12 14
 	echo "Cannot detect visual studio environment"
13 15
 	goto error
... ...
@@ -4,8 +4,8 @@ rem Put your own settings at msvc-env-local.bat
4 4
 if exist msvc-env-local.bat call msvc-env-local.bat
5 5
 
6 6
 if "%ProgramFiles(x86)%"=="" set ProgramFiles(x86)=%ProgramFiles%
7
-if "%VSCOMNTOOLS%"=="" SET VSCOMNTOOLS=%ProgramFiles(x86)%\Microsoft Visual Studio 10.0\Common7\Tools
8
-if "%VSCOMNTOOLS%"=="" SET VSCOMNTOOLS=%ProgramFiles(x86)%\Microsoft Visual Studio 9.0\Common7\Tools
7
+if "%VSCOMNTOOLS%"=="" set VSCOMNTOOLS=%ProgramFiles(x86)%\Microsoft Visual Studio\2017\Professional\Common7\Tools
8
+if not exist "%VSCOMNTOOLS%" set VSCOMNTOOLS=%ProgramFiles(x86)%\Microsoft Visual Studio\2017\Community\Common7\Tools
9 9
 if "%VSHOME%"=="" SET VSHOME=%VSCOMNTOOLS%\..\..
10 10
 if "%VCHOME%"=="" SET VCHOME=%VSHOME%\VC
11 11
 
... ...
@@ -13,7 +13,7 @@ set SOURCEBASE=%cd%
13 13
 set SOLUTION=openvpn.sln
14 14
 set CPPFLAGS=%CPPFLAGS%;_CRT_SECURE_NO_WARNINGS;WIN32_LEAN_AND_MEAN;_CRT_NONSTDC_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS
15 15
 set CPPFLAGS=%CPPFLAGS%;NTDDI_VERSION=NTDDI_VISTA;_WIN32_WINNT=_WIN32_WINNT_VISTA
16
-set CPPFLAGS=%CPPFLAGS%;_USE_32BIT_TIME_T
16
+set CPPFLAGS=%CPPFLAGS%;
17 17
 set CPPFLAGS=%CPPFLAGS%;%EXTRA_CPPFLAGS%
18 18
 
19 19
 if exist config-msvc-local.h set CPPFLAGS="%CPPFLAGS%;HAVE_CONFIG_MSVC_LOCAL_H"
... ...
@@ -1,6 +1,8 @@
1 1
 
2
-Microsoft Visual Studio Solution File, Format Version 11.00
3
-# Visual C++ Express 2010
2
+Microsoft Visual Studio Solution File, Format Version 12.00
3
+# Visual Studio 15
4
+VisualStudioVersion = 15.0.28010.2026
5
+MinimumVisualStudioVersion = 10.0.40219.1
4 6
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "openvpnserv", "src\openvpnserv\openvpnserv.vcxproj", "{9C91EE0B-817D-420A-A1E6-15A5A9D98BAD}"
5 7
 EndProject
6 8
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "openvpn", "src\openvpn\openvpn.vcxproj", "{29DF226E-4D4E-440F-ADAF-5829CFD4CA94}"
... ...
@@ -12,27 +14,48 @@ EndProject
12 12
 Global
13 13
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
14 14
 		Debug|Win32 = Debug|Win32
15
+		Debug|x64 = Debug|x64
15 16
 		Release|Win32 = Release|Win32
17
+		Release|x64 = Release|x64
16 18
 	EndGlobalSection
17 19
 	GlobalSection(ProjectConfigurationPlatforms) = postSolution
18 20
 		{9C91EE0B-817D-420A-A1E6-15A5A9D98BAD}.Debug|Win32.ActiveCfg = Debug|Win32
19 21
 		{9C91EE0B-817D-420A-A1E6-15A5A9D98BAD}.Debug|Win32.Build.0 = Debug|Win32
22
+		{9C91EE0B-817D-420A-A1E6-15A5A9D98BAD}.Debug|x64.ActiveCfg = Debug|x64
23
+		{9C91EE0B-817D-420A-A1E6-15A5A9D98BAD}.Debug|x64.Build.0 = Debug|x64
20 24
 		{9C91EE0B-817D-420A-A1E6-15A5A9D98BAD}.Release|Win32.ActiveCfg = Release|Win32
21 25
 		{9C91EE0B-817D-420A-A1E6-15A5A9D98BAD}.Release|Win32.Build.0 = Release|Win32
26
+		{9C91EE0B-817D-420A-A1E6-15A5A9D98BAD}.Release|x64.ActiveCfg = Release|x64
27
+		{9C91EE0B-817D-420A-A1E6-15A5A9D98BAD}.Release|x64.Build.0 = Release|x64
22 28
 		{29DF226E-4D4E-440F-ADAF-5829CFD4CA94}.Debug|Win32.ActiveCfg = Debug|Win32
23 29
 		{29DF226E-4D4E-440F-ADAF-5829CFD4CA94}.Debug|Win32.Build.0 = Debug|Win32
30
+		{29DF226E-4D4E-440F-ADAF-5829CFD4CA94}.Debug|x64.ActiveCfg = Debug|x64
31
+		{29DF226E-4D4E-440F-ADAF-5829CFD4CA94}.Debug|x64.Build.0 = Debug|x64
24 32
 		{29DF226E-4D4E-440F-ADAF-5829CFD4CA94}.Release|Win32.ActiveCfg = Release|Win32
25 33
 		{29DF226E-4D4E-440F-ADAF-5829CFD4CA94}.Release|Win32.Build.0 = Release|Win32
34
+		{29DF226E-4D4E-440F-ADAF-5829CFD4CA94}.Release|x64.ActiveCfg = Release|x64
35
+		{29DF226E-4D4E-440F-ADAF-5829CFD4CA94}.Release|x64.Build.0 = Release|x64
26 36
 		{8598C2C8-34C4-47A1-99B0-7C295A890615}.Debug|Win32.ActiveCfg = Debug|Win32
27 37
 		{8598C2C8-34C4-47A1-99B0-7C295A890615}.Debug|Win32.Build.0 = Debug|Win32
38
+		{8598C2C8-34C4-47A1-99B0-7C295A890615}.Debug|x64.ActiveCfg = Debug|x64
39
+		{8598C2C8-34C4-47A1-99B0-7C295A890615}.Debug|x64.Build.0 = Debug|x64
28 40
 		{8598C2C8-34C4-47A1-99B0-7C295A890615}.Release|Win32.ActiveCfg = Release|Win32
29 41
 		{8598C2C8-34C4-47A1-99B0-7C295A890615}.Release|Win32.Build.0 = Release|Win32
42
+		{8598C2C8-34C4-47A1-99B0-7C295A890615}.Release|x64.ActiveCfg = Release|x64
43
+		{8598C2C8-34C4-47A1-99B0-7C295A890615}.Release|x64.Build.0 = Release|x64
30 44
 		{4B2E2719-E661-45D7-9203-F6F456B22F19}.Debug|Win32.ActiveCfg = Debug|Win32
31 45
 		{4B2E2719-E661-45D7-9203-F6F456B22F19}.Debug|Win32.Build.0 = Debug|Win32
46
+		{4B2E2719-E661-45D7-9203-F6F456B22F19}.Debug|x64.ActiveCfg = Debug|x64
47
+		{4B2E2719-E661-45D7-9203-F6F456B22F19}.Debug|x64.Build.0 = Debug|x64
32 48
 		{4B2E2719-E661-45D7-9203-F6F456B22F19}.Release|Win32.ActiveCfg = Release|Win32
33 49
 		{4B2E2719-E661-45D7-9203-F6F456B22F19}.Release|Win32.Build.0 = Release|Win32
50
+		{4B2E2719-E661-45D7-9203-F6F456B22F19}.Release|x64.ActiveCfg = Release|x64
51
+		{4B2E2719-E661-45D7-9203-F6F456B22F19}.Release|x64.Build.0 = Release|x64
34 52
 	EndGlobalSection
35 53
 	GlobalSection(SolutionProperties) = preSolution
36 54
 		HideSolutionNode = FALSE
37 55
 	EndGlobalSection
56
+	GlobalSection(ExtensibilityGlobals) = postSolution
57
+		SolutionGuid = {EB3CE5D3-415C-46F0-96AB-E1CDA287AB6D}
58
+	EndGlobalSection
38 59
 EndGlobal
39 60
new file mode 100644
... ...
@@ -0,0 +1,40 @@
0
+<?xml version="1.0" encoding="utf-8"?>
1
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
2
+  <ImportGroup Label="PropertySheets" />
3
+  <PropertyGroup Label="UserMacros">
4
+    <SOURCEBASE>$(SolutionDir)</SOURCEBASE>
5
+    <OPENVPN_DEPROOT>$(SOURCEBASE)\..\..\image</OPENVPN_DEPROOT>
6
+    <OPENSSL_HOME>$(OPENVPN_DEPROOT)</OPENSSL_HOME>
7
+    <TAP_WINDOWS_HOME>$(OPENVPN_DEPROOT)</TAP_WINDOWS_HOME>
8
+    <LZO_HOME>$(OPENVPN_DEPROOT)</LZO_HOME>
9
+    <PKCS11H_HOME>$(OPENVPN_DEPROOT)</PKCS11H_HOME>
10
+  </PropertyGroup>
11
+  <PropertyGroup />
12
+  <ItemDefinitionGroup />
13
+  <ItemGroup>
14
+    <BuildMacro Include="SOURCEBASE">
15
+      <Value>$(SOURCEBASE)</Value>
16
+      <EnvironmentVariable>true</EnvironmentVariable>
17
+    </BuildMacro>
18
+    <BuildMacro Include="OPENVPN_DEPROOT">
19
+      <Value>$(OPENVPN_DEPROOT)</Value>
20
+      <EnvironmentVariable>true</EnvironmentVariable>
21
+    </BuildMacro>
22
+    <BuildMacro Include="OPENSSL_HOME">
23
+      <Value>$(OPENSSL_HOME)</Value>
24
+      <EnvironmentVariable>true</EnvironmentVariable>
25
+    </BuildMacro>
26
+    <BuildMacro Include="TAP_WINDOWS_HOME">
27
+      <Value>$(TAP_WINDOWS_HOME)</Value>
28
+      <EnvironmentVariable>true</EnvironmentVariable>
29
+    </BuildMacro>
30
+    <BuildMacro Include="LZO_HOME">
31
+      <Value>$(LZO_HOME)</Value>
32
+      <EnvironmentVariable>true</EnvironmentVariable>
33
+    </BuildMacro>
34
+    <BuildMacro Include="PKCS11H_HOME">
35
+      <Value>$(PKCS11H_HOME)</Value>
36
+      <EnvironmentVariable>true</EnvironmentVariable>
37
+    </BuildMacro>
38
+  </ItemGroup>
39
+</Project>
0 40
\ No newline at end of file
... ...
@@ -1,47 +1,79 @@
1 1
 <?xml version="1.0" encoding="utf-8"?>
2
-<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
2
+<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
3 3
   <ItemGroup Label="ProjectConfigurations">
4 4
     <ProjectConfiguration Include="Debug|Win32">
5 5
       <Configuration>Debug</Configuration>
6 6
       <Platform>Win32</Platform>
7 7
     </ProjectConfiguration>
8
+    <ProjectConfiguration Include="Debug|x64">
9
+      <Configuration>Debug</Configuration>
10
+      <Platform>x64</Platform>
11
+    </ProjectConfiguration>
8 12
     <ProjectConfiguration Include="Release|Win32">
9 13
       <Configuration>Release</Configuration>
10 14
       <Platform>Win32</Platform>
11 15
     </ProjectConfiguration>
16
+    <ProjectConfiguration Include="Release|x64">
17
+      <Configuration>Release</Configuration>
18
+      <Platform>x64</Platform>
19
+    </ProjectConfiguration>
12 20
   </ItemGroup>
13 21
   <PropertyGroup Label="Globals">
14 22
     <ProjectGuid>{4B2E2719-E661-45D7-9203-F6F456B22F19}</ProjectGuid>
15 23
     <RootNamespace>compat</RootNamespace>
16 24
     <Keyword>Win32Proj</Keyword>
25
+    <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>
17 26
   </PropertyGroup>
18 27
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
19 28
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
20 29
     <ConfigurationType>StaticLibrary</ConfigurationType>
21 30
     <CharacterSet>MultiByte</CharacterSet>
22 31
     <WholeProgramOptimization>true</WholeProgramOptimization>
23
-    <PlatformToolset>v120</PlatformToolset>
32
+    <PlatformToolset>v141</PlatformToolset>
33
+  </PropertyGroup>
34
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
35
+    <ConfigurationType>StaticLibrary</ConfigurationType>
36
+    <CharacterSet>MultiByte</CharacterSet>
37
+    <WholeProgramOptimization>true</WholeProgramOptimization>
38
+    <PlatformToolset>v141</PlatformToolset>
24 39
   </PropertyGroup>
25 40
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
26 41
     <ConfigurationType>StaticLibrary</ConfigurationType>
27 42
     <CharacterSet>MultiByte</CharacterSet>
28
-    <PlatformToolset>v120</PlatformToolset>
43
+    <PlatformToolset>v141</PlatformToolset>
44
+  </PropertyGroup>
45
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
46
+    <ConfigurationType>StaticLibrary</ConfigurationType>
47
+    <CharacterSet>MultiByte</CharacterSet>
48
+    <PlatformToolset>v141</PlatformToolset>
29 49
   </PropertyGroup>
30 50
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
31 51
   <ImportGroup Label="ExtensionSettings">
32 52
   </ImportGroup>
33 53
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
34 54
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
55
+    <Import Project="PropertySheet.props" />
56
+  </ImportGroup>
57
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
58
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
59
+    <Import Project="PropertySheet.props" />
35 60
   </ImportGroup>
36 61
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
37 62
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
63
+    <Import Project="PropertySheet.props" />
64
+  </ImportGroup>
65
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
66
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
67
+    <Import Project="PropertySheet.props" />
38 68
   </ImportGroup>
39 69
   <PropertyGroup Label="UserMacros" />
40 70
   <PropertyGroup>
41 71
     <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
42 72
     <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)$(Platform)-Output\$(Configuration)\</OutDir>
73
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)$(Platform)-Output\$(Configuration)\</OutDir>
43 74
     <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Configuration)\</IntDir>
44 75
     <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)$(Platform)-Output\$(Configuration)\</OutDir>
76
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)$(Platform)-Output\$(Configuration)\</OutDir>
45 77
     <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Configuration)\</IntDir>
46 78
   </PropertyGroup>
47 79
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
... ...
@@ -58,6 +90,19 @@
58 58
       <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
59 59
     </ClCompile>
60 60
   </ItemDefinitionGroup>
61
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
62
+    <ClCompile>
63
+      <Optimization>Disabled</Optimization>
64
+      <AdditionalIncludeDirectories>$(SOURCEBASE);$(SOURCEBASE)/include;$(OPENSSL_HOME)/include;$(LZO_HOME)/include;$(PKCS11H_HOME)/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
65
+      <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;$(CPPFLAGS);%(PreprocessorDefinitions)</PreprocessorDefinitions>
66
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
67
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
68
+      <PrecompiledHeader>
69
+      </PrecompiledHeader>
70
+      <WarningLevel>Level3</WarningLevel>
71
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
72
+    </ClCompile>
73
+  </ItemDefinitionGroup>
61 74
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
62 75
     <ClCompile>
63 76
       <Optimization>MaxSpeed</Optimization>
... ...
@@ -72,6 +117,20 @@
72 72
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
73 73
     </ClCompile>
74 74
   </ItemDefinitionGroup>
75
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
76
+    <ClCompile>
77
+      <Optimization>MaxSpeed</Optimization>
78
+      <IntrinsicFunctions>true</IntrinsicFunctions>
79
+      <AdditionalIncludeDirectories>$(SOURCEBASE);$(SOURCEBASE)/include;$(OPENSSL_HOME)/include;$(LZO_HOME)/include;$(PKCS11H_HOME)/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
80
+      <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;$(CPPFLAGS);%(PreprocessorDefinitions)</PreprocessorDefinitions>
81
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
82
+      <FunctionLevelLinking>true</FunctionLevelLinking>
83
+      <PrecompiledHeader>
84
+      </PrecompiledHeader>
85
+      <WarningLevel>Level3</WarningLevel>
86
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
87
+    </ClCompile>
88
+  </ItemDefinitionGroup>
75 89
   <ItemGroup>
76 90
     <ClCompile Include="compat-basename.c" />
77 91
     <ClCompile Include="compat-dirname.c" />
... ...
@@ -1,50 +1,84 @@
1 1
 <?xml version="1.0" encoding="utf-8"?>
2
-<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
2
+<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
3 3
   <ItemGroup Label="ProjectConfigurations">
4 4
     <ProjectConfiguration Include="Debug|Win32">
5 5
       <Configuration>Debug</Configuration>
6 6
       <Platform>Win32</Platform>
7 7
     </ProjectConfiguration>
8
+    <ProjectConfiguration Include="Debug|x64">
9
+      <Configuration>Debug</Configuration>
10
+      <Platform>x64</Platform>
11
+    </ProjectConfiguration>
8 12
     <ProjectConfiguration Include="Release|Win32">
9 13
       <Configuration>Release</Configuration>
10 14
       <Platform>Win32</Platform>
11 15
     </ProjectConfiguration>
16
+    <ProjectConfiguration Include="Release|x64">
17
+      <Configuration>Release</Configuration>
18
+      <Platform>x64</Platform>
19
+    </ProjectConfiguration>
12 20
   </ItemGroup>
13 21
   <PropertyGroup Label="Globals">
14 22
     <ProjectGuid>{29DF226E-4D4E-440F-ADAF-5829CFD4CA94}</ProjectGuid>
15 23
     <RootNamespace>openvpn</RootNamespace>
16 24
     <Keyword>Win32Proj</Keyword>
25
+    <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>
17 26
   </PropertyGroup>
18 27
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
19 28
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
20 29
     <ConfigurationType>Application</ConfigurationType>
21 30
     <WholeProgramOptimization>true</WholeProgramOptimization>
22 31
     <CharacterSet>Unicode</CharacterSet>
23
-    <PlatformToolset>v120</PlatformToolset>
32
+    <PlatformToolset>v141</PlatformToolset>
33
+  </PropertyGroup>
34
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
35
+    <ConfigurationType>Application</ConfigurationType>
36
+    <WholeProgramOptimization>true</WholeProgramOptimization>
37
+    <CharacterSet>Unicode</CharacterSet>
38
+    <PlatformToolset>v141</PlatformToolset>
24 39
   </PropertyGroup>
25 40
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
26 41
     <ConfigurationType>Application</ConfigurationType>
27 42
     <CharacterSet>Unicode</CharacterSet>
28
-    <PlatformToolset>v120</PlatformToolset>
43
+    <PlatformToolset>v141</PlatformToolset>
44
+  </PropertyGroup>
45
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
46
+    <ConfigurationType>Application</ConfigurationType>
47
+    <CharacterSet>Unicode</CharacterSet>
48
+    <PlatformToolset>v141</PlatformToolset>
29 49
   </PropertyGroup>
30 50
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
31 51
   <ImportGroup Label="ExtensionSettings">
32 52
   </ImportGroup>
33 53
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
34 54
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
55
+    <Import Project="..\compat\PropertySheet.props" />
56
+  </ImportGroup>
57
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
58
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
59
+    <Import Project="..\compat\PropertySheet.props" />
35 60
   </ImportGroup>
36 61
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
37 62
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
63
+    <Import Project="..\compat\PropertySheet.props" />
64
+  </ImportGroup>
65
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
66
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
67
+    <Import Project="..\compat\PropertySheet.props" />
38 68
   </ImportGroup>
39 69
   <PropertyGroup Label="UserMacros" />
40 70
   <PropertyGroup>
41 71
     <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
42 72
     <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)$(Platform)-Output\$(Configuration)\</OutDir>
73
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)$(Platform)-Output\$(Configuration)\</OutDir>
43 74
     <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Configuration)\</IntDir>
44 75
     <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
76
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
45 77
     <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)$(Platform)-Output\$(Configuration)\</OutDir>
78
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)$(Platform)-Output\$(Configuration)\</OutDir>
46 79
     <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Configuration)\</IntDir>
47 80
     <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
81
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
48 82
   </PropertyGroup>
49 83
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
50 84
     <ClCompile>
... ...
@@ -64,13 +98,36 @@
64 64
       <AdditionalIncludeDirectories>$(SOURCEBASE);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
65 65
     </ResourceCompile>
66 66
     <Link>
67
-      <AdditionalDependencies>libeay32.lib;ssleay32.lib;lzo2.lib;pkcs11-helper.dll.lib;gdi32.lib;ws2_32.lib;wininet.lib;crypt32.lib;iphlpapi.lib;winmm.lib;Fwpuclnt.lib;Rpcrt4.lib;%(AdditionalDependencies)</AdditionalDependencies>
67
+      <AdditionalDependencies>legacy_stdio_definitions.lib;Ncrypt.lib;libeay32.lib;ssleay32.lib;lzo2.lib;pkcs11-helper.dll.lib;gdi32.lib;ws2_32.lib;wininet.lib;crypt32.lib;iphlpapi.lib;winmm.lib;Fwpuclnt.lib;Rpcrt4.lib;%(AdditionalDependencies)</AdditionalDependencies>
68 68
       <AdditionalLibraryDirectories>$(OPENSSL_HOME)/lib;$(LZO_HOME)/lib;$(PKCS11H_HOME)/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
69 69
       <GenerateDebugInformation>true</GenerateDebugInformation>
70 70
       <SubSystem>Console</SubSystem>
71 71
       <TargetMachine>MachineX86</TargetMachine>
72 72
     </Link>
73 73
   </ItemDefinitionGroup>
74
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
75
+    <ClCompile>
76
+      <Optimization>Disabled</Optimization>
77
+      <AdditionalIncludeDirectories>$(SOURCEBASE);$(SOURCEBASE)/src/compat;$(SOURCEBASE)/include;$(TAP_WINDOWS_HOME)/include;$(OPENSSL_HOME)/include;$(LZO_HOME)/include;$(PKCS11H_HOME)/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
78
+      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;$(CPPFLAGS);%(PreprocessorDefinitions)</PreprocessorDefinitions>
79
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
80
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
81
+      <PrecompiledHeader>
82
+      </PrecompiledHeader>
83
+      <WarningLevel>Level3</WarningLevel>
84
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
85
+      <UndefinePreprocessorDefinitions>UNICODE</UndefinePreprocessorDefinitions>
86
+    </ClCompile>
87
+    <ResourceCompile>
88
+      <AdditionalIncludeDirectories>$(SOURCEBASE);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
89
+    </ResourceCompile>
90
+    <Link>
91
+      <AdditionalDependencies>legacy_stdio_definitions.lib;Ncrypt.lib;libeay32.lib;ssleay32.lib;lzo2.lib;pkcs11-helper.dll.lib;gdi32.lib;ws2_32.lib;wininet.lib;crypt32.lib;iphlpapi.lib;winmm.lib;Fwpuclnt.lib;Rpcrt4.lib;%(AdditionalDependencies)</AdditionalDependencies>
92
+      <AdditionalLibraryDirectories>$(OPENSSL_HOME)/lib;$(LZO_HOME)/lib;$(PKCS11H_HOME)/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
93
+      <GenerateDebugInformation>true</GenerateDebugInformation>
94
+      <SubSystem>Console</SubSystem>
95
+    </Link>
96
+  </ItemDefinitionGroup>
74 97
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
75 98
     <ClCompile>
76 99
       <Optimization>MaxSpeed</Optimization>
... ...
@@ -89,7 +146,7 @@
89 89
       <AdditionalIncludeDirectories>$(SOURCEBASE);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
90 90
     </ResourceCompile>
91 91
     <Link>
92
-      <AdditionalDependencies>libeay32.lib;ssleay32.lib;lzo2.lib;pkcs11-helper.dll.lib;gdi32.lib;ws2_32.lib;wininet.lib;crypt32.lib;iphlpapi.lib;winmm.lib;Fwpuclnt.lib;Rpcrt4.lib;%(AdditionalDependencies)</AdditionalDependencies>
92
+      <AdditionalDependencies>legacy_stdio_definitions.lib;Ncrypt.lib;libeay32.lib;ssleay32.lib;lzo2.lib;pkcs11-helper.dll.lib;gdi32.lib;ws2_32.lib;wininet.lib;crypt32.lib;iphlpapi.lib;winmm.lib;Fwpuclnt.lib;Rpcrt4.lib;%(AdditionalDependencies)</AdditionalDependencies>
93 93
       <AdditionalLibraryDirectories>$(OPENSSL_HOME)/lib;$(LZO_HOME)/lib;$(PKCS11H_HOME)/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
94 94
       <GenerateDebugInformation>true</GenerateDebugInformation>
95 95
       <SubSystem>Console</SubSystem>
... ...
@@ -98,6 +155,32 @@
98 98
       <TargetMachine>MachineX86</TargetMachine>
99 99
     </Link>
100 100
   </ItemDefinitionGroup>
101
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
102
+    <ClCompile>
103
+      <Optimization>MaxSpeed</Optimization>
104
+      <IntrinsicFunctions>true</IntrinsicFunctions>
105
+      <AdditionalIncludeDirectories>$(SOURCEBASE);$(SOURCEBASE)/src/compat;$(SOURCEBASE)/include;$(TAP_WINDOWS_HOME)/include;$(OPENSSL_HOME)/include;$(LZO_HOME)/include;$(PKCS11H_HOME)/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
106
+      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;$(CPPFLAGS);%(PreprocessorDefinitions)</PreprocessorDefinitions>
107
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
108
+      <FunctionLevelLinking>true</FunctionLevelLinking>
109
+      <PrecompiledHeader>
110
+      </PrecompiledHeader>
111
+      <WarningLevel>Level3</WarningLevel>
112
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
113
+      <UndefinePreprocessorDefinitions>UNICODE</UndefinePreprocessorDefinitions>
114
+    </ClCompile>
115
+    <ResourceCompile>
116
+      <AdditionalIncludeDirectories>$(SOURCEBASE);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
117
+    </ResourceCompile>
118
+    <Link>
119
+      <AdditionalDependencies>legacy_stdio_definitions.lib;Ncrypt.lib;libeay32.lib;ssleay32.lib;lzo2.lib;pkcs11-helper.dll.lib;gdi32.lib;ws2_32.lib;wininet.lib;crypt32.lib;iphlpapi.lib;winmm.lib;Fwpuclnt.lib;Rpcrt4.lib;%(AdditionalDependencies)</AdditionalDependencies>
120
+      <AdditionalLibraryDirectories>$(OPENSSL_HOME)/lib;$(LZO_HOME)/lib;$(PKCS11H_HOME)/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
121
+      <GenerateDebugInformation>true</GenerateDebugInformation>
122
+      <SubSystem>Console</SubSystem>
123
+      <OptimizeReferences>true</OptimizeReferences>
124
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
125
+    </Link>
126
+  </ItemDefinitionGroup>
101 127
   <ItemGroup>
102 128
     <ClCompile Include="argv.c" />
103 129
     <ClCompile Include="base64.c" />
... ...
@@ -112,6 +195,7 @@
112 112
     <ClCompile Include="crypto.c" />
113 113
     <ClCompile Include="crypto_openssl.c" />
114 114
     <ClCompile Include="cryptoapi.c" />
115
+    <ClCompile Include="env_set.c" />
115 116
     <ClCompile Include="dhcp.c" />
116 117
     <ClCompile Include="error.c" />
117 118
     <ClCompile Include="event.c" />
... ...
@@ -156,6 +240,7 @@
156 156
     <ClCompile Include="push.c" />
157 157
     <ClCompile Include="reliable.c" />
158 158
     <ClCompile Include="route.c" />
159
+    <ClCompile Include="run_command.c" />
159 160
     <ClCompile Include="schedule.c" />
160 161
     <ClCompile Include="session_id.c" />
161 162
     <ClCompile Include="shaper.c" />
... ...
@@ -189,6 +274,7 @@
189 189
     <ClInclude Include="crypto_openssl.h" />
190 190
     <ClInclude Include="cryptoapi.h" />
191 191
     <ClInclude Include="dhcp.h" />
192
+    <ClInclude Include="env_set.h" />
192 193
     <ClInclude Include="errlevel.h" />
193 194
     <ClInclude Include="error.h" />
194 195
     <ClInclude Include="event.h" />
... ...
@@ -240,6 +326,7 @@
240 240
     <ClInclude Include="pushlist.h" />
241 241
     <ClInclude Include="reliable.h" />
242 242
     <ClInclude Include="route.h" />
243
+    <ClInclude Include="run_command.h" />
243 244
     <ClInclude Include="schedule.h" />
244 245
     <ClInclude Include="session_id.h" />
245 246
     <ClInclude Include="shaper.h" />
... ...
@@ -47,6 +47,7 @@
47 47
 #ifdef _MSC_VER /* Visual Studio */
48 48
 #define __func__ __FUNCTION__
49 49
 #define __attribute__(x)
50
+#include <inttypes.h>
50 51
 #endif
51 52
 
52 53
 #if defined(__APPLE__)
... ...
@@ -24,7 +24,6 @@
24 24
 
25 25
 #include "service.h"
26 26
 
27
-#include <winsock2.h>
28 27
 #include <ws2tcpip.h>
29 28
 #include <iphlpapi.h>
30 29
 #include <userenv.h>
... ...
@@ -1,55 +1,89 @@
1 1
 <?xml version="1.0" encoding="utf-8"?>
2
-<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
2
+<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
3 3
   <ItemGroup Label="ProjectConfigurations">
4 4
     <ProjectConfiguration Include="Debug|Win32">
5 5
       <Configuration>Debug</Configuration>
6 6
       <Platform>Win32</Platform>
7 7
     </ProjectConfiguration>
8
+    <ProjectConfiguration Include="Debug|x64">
9
+      <Configuration>Debug</Configuration>
10
+      <Platform>x64</Platform>
11
+    </ProjectConfiguration>
8 12
     <ProjectConfiguration Include="Release|Win32">
9 13
       <Configuration>Release</Configuration>
10 14
       <Platform>Win32</Platform>
11 15
     </ProjectConfiguration>
16
+    <ProjectConfiguration Include="Release|x64">
17
+      <Configuration>Release</Configuration>
18
+      <Platform>x64</Platform>
19
+    </ProjectConfiguration>
12 20
   </ItemGroup>
13 21
   <PropertyGroup Label="Globals">
14 22
     <ProjectGuid>{9C91EE0B-817D-420A-A1E6-15A5A9D98BAD}</ProjectGuid>
15 23
     <RootNamespace>openvpnserv</RootNamespace>
16 24
     <Keyword>Win32Proj</Keyword>
25
+    <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>
17 26
   </PropertyGroup>
18 27
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
19 28
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
20 29
     <ConfigurationType>Application</ConfigurationType>
21 30
     <CharacterSet>MultiByte</CharacterSet>
22 31
     <WholeProgramOptimization>true</WholeProgramOptimization>
23
-    <PlatformToolset>v120</PlatformToolset>
32
+    <PlatformToolset>v141</PlatformToolset>
33
+  </PropertyGroup>
34
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
35
+    <ConfigurationType>Application</ConfigurationType>
36
+    <CharacterSet>MultiByte</CharacterSet>
37
+    <WholeProgramOptimization>true</WholeProgramOptimization>
38
+    <PlatformToolset>v141</PlatformToolset>
24 39
   </PropertyGroup>
25 40
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
26 41
     <ConfigurationType>Application</ConfigurationType>
27 42
     <CharacterSet>MultiByte</CharacterSet>
28
-    <PlatformToolset>v120</PlatformToolset>
43
+    <PlatformToolset>v141</PlatformToolset>
44
+  </PropertyGroup>
45
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
46
+    <ConfigurationType>Application</ConfigurationType>
47
+    <CharacterSet>Unicode</CharacterSet>
48
+    <PlatformToolset>v141</PlatformToolset>
29 49
   </PropertyGroup>
30 50
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
31 51
   <ImportGroup Label="ExtensionSettings">
32 52
   </ImportGroup>
33 53
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
34 54
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
55
+    <Import Project="..\compat\PropertySheet.props" />
56
+  </ImportGroup>
57
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
58
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
59
+    <Import Project="..\compat\PropertySheet.props" />
35 60
   </ImportGroup>
36 61
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
37 62
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
63
+    <Import Project="..\compat\PropertySheet.props" />
64
+  </ImportGroup>
65
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
66
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
67
+    <Import Project="..\compat\PropertySheet.props" />
38 68
   </ImportGroup>
39 69
   <PropertyGroup Label="UserMacros" />
40 70
   <PropertyGroup>
41 71
     <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
42 72
     <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)$(Platform)-Output\$(Configuration)\</OutDir>
73
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)$(Platform)-Output\$(Configuration)\</OutDir>
43 74
     <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Configuration)\</IntDir>
44 75
     <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
76
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
45 77
     <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)$(Platform)-Output\$(Configuration)\</OutDir>
78
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)$(Platform)-Output\$(Configuration)\</OutDir>
46 79
     <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Configuration)\</IntDir>
47 80
     <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
81
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
48 82
   </PropertyGroup>
49 83
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
50 84
     <ClCompile>
51 85
       <Optimization>Disabled</Optimization>
52
-      <AdditionalIncludeDirectories>$(SOURCEBASE);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
86
+      <AdditionalIncludeDirectories>$(SOURCEBASE);..\..\include;..\openvpn;..\compat;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
53 87
       <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;$(CPPFLAGS);%(PreprocessorDefinitions)</PreprocessorDefinitions>
54 88
       <MinimalRebuild>true</MinimalRebuild>
55 89
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
... ...
@@ -63,16 +97,38 @@
63 63
       <AdditionalIncludeDirectories>$(SOURCEBASE);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
64 64
     </ResourceCompile>
65 65
     <Link>
66
+      <AdditionalDependencies>Userenv.lib;Iphlpapi.lib;ntdll.lib;Fwpuclnt.lib;Netapi32.lib;Shlwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
66 67
       <GenerateDebugInformation>true</GenerateDebugInformation>
67 68
       <SubSystem>Console</SubSystem>
68 69
       <TargetMachine>MachineX86</TargetMachine>
69 70
     </Link>
70 71
   </ItemDefinitionGroup>
72
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
73
+    <ClCompile>
74
+      <Optimization>Disabled</Optimization>
75
+      <AdditionalIncludeDirectories>$(SOURCEBASE);..\..\include;..\openvpn;..\compat;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
76
+      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;$(CPPFLAGS);%(PreprocessorDefinitions)</PreprocessorDefinitions>
77
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
78
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
79
+      <PrecompiledHeader>
80
+      </PrecompiledHeader>
81
+      <WarningLevel>Level3</WarningLevel>
82
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
83
+    </ClCompile>
84
+    <ResourceCompile>
85
+      <AdditionalIncludeDirectories>$(SOURCEBASE);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
86
+    </ResourceCompile>
87
+    <Link>
88
+      <AdditionalDependencies>legacy_stdio_definitions.lib;Userenv.lib;Iphlpapi.lib;ntdll.lib;Fwpuclnt.lib;Netapi32.lib;Shlwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
89
+      <GenerateDebugInformation>true</GenerateDebugInformation>
90
+      <SubSystem>Console</SubSystem>
91
+    </Link>
92
+  </ItemDefinitionGroup>
71 93
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
72 94
     <ClCompile>
73 95
       <Optimization>MaxSpeed</Optimization>
74 96
       <IntrinsicFunctions>true</IntrinsicFunctions>
75
-      <AdditionalIncludeDirectories>$(SOURCEBASE);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
97
+      <AdditionalIncludeDirectories>$(SOURCEBASE);..\..\include;..\openvpn;..\compat;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
76 98
       <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;$(CPPFLAGS);%(PreprocessorDefinitions)</PreprocessorDefinitions>
77 99
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
78 100
       <FunctionLevelLinking>true</FunctionLevelLinking>
... ...
@@ -85,6 +141,7 @@
85 85
       <AdditionalIncludeDirectories>$(SOURCEBASE);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
86 86
     </ResourceCompile>
87 87
     <Link>
88
+      <AdditionalDependencies>Userenv.lib;Iphlpapi.lib;ntdll.lib;Fwpuclnt.lib;Netapi32.lib;Shlwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
88 89
       <GenerateDebugInformation>true</GenerateDebugInformation>
89 90
       <SubSystem>Console</SubSystem>
90 91
       <OptimizeReferences>true</OptimizeReferences>
... ...
@@ -92,12 +149,41 @@
92 92
       <TargetMachine>MachineX86</TargetMachine>
93 93
     </Link>
94 94
   </ItemDefinitionGroup>
95
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
96
+    <ClCompile>
97
+      <Optimization>MaxSpeed</Optimization>
98
+      <IntrinsicFunctions>true</IntrinsicFunctions>
99
+      <AdditionalIncludeDirectories>$(SOURCEBASE);..\..\include;..\openvpn;..\compat;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
100
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
101
+      <FunctionLevelLinking>true</FunctionLevelLinking>
102
+      <PrecompiledHeader>
103
+      </PrecompiledHeader>
104
+      <WarningLevel>Level3</WarningLevel>
105
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
106
+    </ClCompile>
107
+    <ResourceCompile>
108
+      <AdditionalIncludeDirectories>$(SOURCEBASE);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
109
+    </ResourceCompile>
110
+    <Link>
111
+      <AdditionalDependencies>legacy_stdio_definitions.lib;Userenv.lib;Iphlpapi.lib;ntdll.lib;Fwpuclnt.lib;Netapi32.lib;Shlwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
112
+      <GenerateDebugInformation>true</GenerateDebugInformation>
113
+      <SubSystem>Console</SubSystem>
114
+      <OptimizeReferences>true</OptimizeReferences>
115
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
116
+    </Link>
117
+  </ItemDefinitionGroup>
95 118
   <ItemGroup>
96
-    <ClCompile Include="openvpnserv.c" />
119
+    <ClCompile Include="automatic.c" />
120
+    <ClCompile Include="common.c" />
121
+    <ClCompile Include="interactive.c" />
97 122
     <ClCompile Include="service.c" />
123
+    <ClCompile Include="validate.c" />
124
+    <ClCompile Include="..\openvpn\block_dns.c" />
98 125
   </ItemGroup>
99 126
   <ItemGroup>
100 127
     <ClInclude Include="service.h" />
128
+    <ClInclude Include="validate.h" />
129
+    <ClInclude Include="..\openvpn\block_dns.h" />
101 130
   </ItemGroup>
102 131
   <ItemGroup>
103 132
     <ResourceCompile Include="openvpnserv_resources.rc" />
... ...
@@ -30,6 +30,7 @@
30 30
 #include "config-msvc.h"
31 31
 #endif
32 32
 
33
+#include <winsock2.h>
33 34
 #include <windows.h>
34 35
 #include <stdlib.h>
35 36
 #include <tchar.h>
... ...
@@ -61,6 +61,9 @@ CheckConfigPath(const WCHAR *workdir, const WCHAR *fname, const settings_t *s)
61 61
     WCHAR tmp[MAX_PATH];
62 62
     const WCHAR *config_file = NULL;
63 63
     const WCHAR *config_dir = NULL;
64
+#ifndef UNICODE
65
+    WCHAR widepath[MAX_PATH];
66
+#endif
64 67
 
65 68
     /* convert fname to full path */
66 69
     if (PathIsRelativeW(fname) )