aboutsummaryrefslogtreecommitdiff
path: root/msvc
diff options
context:
space:
mode:
authorJames Yonan <james@openvpn.net>2010-03-31 06:38:21 +0000
committerJames Yonan <james@openvpn.net>2010-03-31 06:38:21 +0000
commit74fce85ee80ee5f484b62a3a81e9981e5698f1e1 (patch)
treeb4723fb33b503ebd0cee953cd0263d0fb9740a89 /msvc
parentSet socket buffers (SO_SNDBUF and SO_RCVBUF) immediately after (diff)
downloadopenvpn-74fce85ee80ee5f484b62a3a81e9981e5698f1e1.tar.xz
Updated MSVC build scripts to Visual Studio 2008:
python msvc\config.py nmake /f msvc\msvc.mak Version 2.1.1e git-svn-id: http://svn.openvpn.net/projects/openvpn/branches/BETA21/openvpn@5516 e7ae566f-a301-0410-adde-c780ea21d3b5
Diffstat (limited to 'msvc')
-rw-r--r--msvc/autodefs.h.in20
-rw-r--r--msvc/config.py93
-rw-r--r--msvc/msvc.mak52
3 files changed, 165 insertions, 0 deletions
diff --git a/msvc/autodefs.h.in b/msvc/autodefs.h.in
new file mode 100644
index 0000000..9814022
--- /dev/null
+++ b/msvc/autodefs.h.in
@@ -0,0 +1,20 @@
+/*
+ * Minimum TAP-Win32 version number expected by userspace
+ *
+ * The TAP-Win32 version number is defined in tap-win32/SOURCES
+ */
+#define TAP_ID "@PRODUCT_TAP_ID@"
+#define TAP_WIN32_MIN_MAJOR @PRODUCT_TAP_WIN32_MIN_MAJOR@
+#define TAP_WIN32_MIN_MINOR @PRODUCT_TAP_WIN32_MIN_MINOR@
+
+/* Name of package */
+#define PACKAGE "@PRODUCT_UNIX_NAME@"
+
+/* Define to the full name of this package. */
+#define PACKAGE_NAME "@PRODUCT_NAME@"
+
+/* Define to the one symbol short name of this package. */
+#define PACKAGE_TARNAME "@PRODUCT_UNIX_NAME@"
+
+/* Define to the version of this package. */
+#define PACKAGE_VERSION "@PRODUCT_VERSION@"
diff --git a/msvc/config.py b/msvc/config.py
new file mode 100644
index 0000000..04ea4c5
--- /dev/null
+++ b/msvc/config.py
@@ -0,0 +1,93 @@
+# build autodefs.h and
+
+import re
+
+autogen = "Automatically generated by config.py"
+
+def parse_version_m4(kv, version_m4):
+ r = re.compile(r'^define\((\w+),\[(.*)\]\)$')
+ f = open(version_m4)
+ for line in f:
+ line = line.rstrip()
+ m = re.match(r, line)
+ if m:
+ g = m.groups()
+ kv[g[0]] = g[1]
+ f.close()
+
+def parse_settings_in(kv, settings_in):
+ r = re.compile(r'^!define\s+(\w+)(?:\s+"?(.*?)"?)$')
+ f = open(settings_in)
+ for line in f:
+ line = line.rstrip()
+ m = re.match(r, line)
+ if m:
+ g = m.groups()
+ kv[g[0]] = g[1] or ''
+ f.close()
+
+def build_autodefs(kv, autodefs_in, autodefs_out):
+ def repfn(m):
+ var, = m.groups()
+ return kv.get(var, '')
+
+ r = re.compile(r'@(\w+)@')
+ fin = open(autodefs_in)
+ fout = open(autodefs_out, 'w')
+ fout.write("/* %s */\n\n" % autogen)
+ for line in fin:
+ newline = re.sub(r, repfn, line)
+ fout.write(newline)
+ fin.close()
+ fout.close()
+
+def print_key_values(kv):
+ for k, v in sorted(kv.items()):
+ print "%s%s%s" % (k, ' '*(32-len(k)), repr(v))
+
+def get_sources(makefile_am):
+ c = set()
+ h = set()
+ f = open(makefile_am)
+ state = False
+ for line in f:
+ line = line.rstrip()
+ if line == 'openvpn_SOURCES = \\':
+ state = True
+ elif not line:
+ state = False
+ elif state:
+ for sf in line.split():
+ if sf.endswith('.c'):
+ c.add(sf[:-2])
+ elif sf.endswith('.h'):
+ h.add(sf[:-2])
+ elif sf == '\\':
+ pass
+ else:
+ print >>sys.stderr, "Unrecognized filename:", sf
+ f.close()
+ return [ sorted(list(s)) for s in (c, h) ]
+
+def output_mak_list(out, title, srclist, ext):
+ out.write("%s =" % (title,))
+ for x in srclist:
+ out.write(" \\\n\t%s.%s" % (x, ext))
+ out.write('\n\n')
+
+def output_mak(makefile_am, outfile):
+ c, h = get_sources(makefile_am)
+ out = open(outfile, 'w')
+ out.write("# %s\n\n" % autogen)
+ output_mak_list(out, 'HEADERS', h, 'h')
+ output_mak_list(out, 'OBJS', c, 'obj')
+ out.close()
+
+def main():
+ kv = {}
+ parse_version_m4(kv, 'version.m4')
+ parse_settings_in(kv, 'install-win32/settings.in')
+ build_autodefs(kv, 'msvc/autodefs.h.in', 'autodefs.h')
+ output_mak('Makefile.am', 'head_obj.mak')
+
+main()
diff --git a/msvc/msvc.mak b/msvc/msvc.mak
new file mode 100644
index 0000000..bca779f
--- /dev/null
+++ b/msvc/msvc.mak
@@ -0,0 +1,52 @@
+# This makefile builds the user-mode component
+# of OpenVPN for Windows in the Visual Studio 2008 environment.
+
+# To build:
+# python msvc\config.py
+# nmake /f msvc\msvc.mak
+
+# Each of the OPENSSL and LZO dirs should have 'lib' and 'include'
+# directories under them.
+
+OPENSSL = \src\openssl
+OPENSSL_DYNAMIC = libeay32.lib ssleay32.lib
+
+LZO = \src\lzo
+LZO_DYNAMIC = lzo2.lib
+
+INCLUDE_DIRS = -I$(OPENSSL)/include -I$(LZO)/include
+
+LIBS = $(OPENSSL_DYNAMIC) $(LZO_DYNAMIC) ws2_32.lib crypt32.lib iphlpapi.lib winmm.lib user32.lib gdi32.lib advapi32.lib wininet.lib
+
+LIB_DIRS = -LIBPATH:$(OPENSSL)\lib -LIBPATH:$(LZO)\lib
+
+EXE = openvpn.exe
+
+CPP=cl.exe
+CPP_ARG_COMMON=/nologo /W3 /O2 -DWIN32 -DWIN32_LEAN_AND_MEAN -D_CONSOLE -D_MBCS -D_CRT_SECURE_NO_DEPRECATE $(INCLUDE_DIRS) /FD /c
+# release:
+CPP_PROJ=$(CPP_ARG_COMMON) /MD -DNDEBUG
+# debug:
+#CPP_PROJ=$(CPP_ARG_COMMON) /MDd /Zi /Od -D_DEBUG
+
+LINK32=link.exe
+# release:
+LINK32_FLAGS=/nologo /subsystem:console /incremental:no /out:"$(EXE)"
+# debug:
+#LINK32_FLAGS=/nologo /subsystem:console /incremental:no /debug /out:"$(EXE)"
+
+# HEADERS and OBJS definitions, automatically generated
+!INCLUDE head_obj.mak
+
+openvpn : $(OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LIB_DIRS) $(LIBS) $(OBJS)
+<<
+
+clean :
+ del /Q $(OBJS) $(EXE) *.idb *.pdb
+
+.c.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<