]> git.ipfire.org Git - thirdparty/openvpn.git/commitdiff
Attempt to fix issue where domake-win build system was not properly v2.1.3
authorJames Yonan <james@openvpn.net>
Fri, 20 Aug 2010 20:24:42 +0000 (20:24 +0000)
committerJames Yonan <james@openvpn.net>
Fri, 20 Aug 2010 20:24:42 +0000 (20:24 +0000)
signing drivers and .exe files.

Added win/tap_span.py for building multiple versions of the TAP driver
and tapinstall binaries using different DDK versions to span from Win2K
to Win7 and beyond.

Version 2.1.3

git-svn-id: http://svn.openvpn.net/projects/openvpn/branches/BETA21/openvpn@6404 e7ae566f-a301-0410-adde-c780ea21d3b5

install-win32/buildinstaller
install-win32/getgui
install-win32/getxgui
install-win32/maketap
install-win32/maketapinstall
install-win32/settings.in
version.m4
win/build_ddk.py
win/settings.in
win/tap_span.py [new file with mode: 0644]
win/wb.py

index 83057bba65a9a22eccd43c9591682b41bd08843c..a17a0272feb8d241d51d7bb1f3d2e7c47cfae2ac 100644 (file)
@@ -10,5 +10,5 @@ tail -20 makensis.log
 
 # sign the installer
 if [ -d "$SIGNTOOL" ]; then
-    TARGET_EXE="$(echo $(pwd)/$GENOUT/*.exe)" $SIGNTOOL/signexe
+    python $SIGNTOOL/signapp.py "$(echo $(pwd)/$GENOUT/*.exe)"
 fi
index b53a8f7d74b72f9435b89c2fbf65493a5c69bf8e..aa83e8535c603d62032c8b191db21f33d162db41 100644 (file)
@@ -10,9 +10,6 @@ GUI="$OPENVPN_GUI_DIR/$OPENVPN_GUI"
 if [ -f "$GUI" ]; then
     mkdir -p $GENOUT/bin &>/dev/null    
     cp $GUI $GENOUT/bin
-    if [ -d "$SIGNTOOL" ]; then
-       TARGET_EXE="$GENOUT/bin/$OPENVPN_GUI" $SIGNTOOL/signexe
-    fi
 fi
 
 if [ -f "$GENOUT/bin/$OPENVPN_GUI" ]; then
index d3a21b80879634ed6fb969a691f9bf8686438db3..3a1e626f60fcc643056b40dcab61967124dedce7 100644 (file)
@@ -19,12 +19,6 @@ if [ -d "$OPENVPN_XGUI_DIR" ]; then
        done
     fi
 
-    for f in $SIGNED_EXES; do
-       if [ -d "$SIGNTOOL" ]; then
-           TARGET_EXE="$GENOUT/bin/`basename $f`" $SIGNTOOL/signexe
-       fi
-    done
-
     rm -rf $GENOUT/htdocs
     cp -a $OPENVPN_XGUI_DIR/ajax/htdocs $GENOUT/htdocs
 
index 0d3332979086e1ea1155cf996b0c081c4ebec7fe..b9c40703344a844c21d1c593250d6623fab41984 100644 (file)
 #!/bin/sh
 
-# Build the x86 and x64 versions of the TAP driver
-# Requires the Windows DDK
+# Get the x86 and x64 versions of the TAP driver
 
 # get version.nsi definitions
 . autodefs/defs.sh
 
-if [ -n "$DDKVER" ] && [ -d "/c/WINDDK/$DDKVER" ] ; then
-
-# common declarations for all DDK build targets
-. install-win32/ddk-common
-
-# configure tap driver sources
-MACRO="perl install-win32/macro.pl autodefs/defs.in"
-IFDEF="perl install-win32/ifdef.pl"
-rm -rf tap-win32/amd64
-mkdir tap-win32/amd64
-$MACRO <tap-win32/SOURCES.in >tap-win32/SOURCES
-$MACRO <tap-win32/i386/OemWin2k.inf.in | $IFDEF >tap-win32/i386/OemWin2k.inf
-$MACRO <tap-win32/i386/OemWin2k.inf.in | $IFDEF -DAMD64 >tap-win32/amd64/OemWin2k.inf
-
-if [ -n "$PRODUCT_TAP_DEBUG" ] ; then
-    w2ktarget="w2k c"
-    amdtarget="chk $x64_tag WNET"
-else
-    w2ktarget="w2k f"
-    amdtarget="fre $x64_tag WNET"
-fi
-
-if [ -z "$DRVBINSRC" ] ; then
-    if [ -n "$TAP_BIN_AMD64" ]; then
-       amdtarget=""
-    fi
-
-    cd tap-win32
-    t=`pwd`
-    cd ..
-
-    for mode in "$w2ktarget" "$amdtarget"; do
-       echo '**********' build TAP $mode
-       cmd //c "C:\\WINDDK\\$DDKVER\\bin\\setenv.bat C:\\WINDDK\\$DDKVER $mode && cd `perl install-win32/dosname.pl $t` && build -cef"
-       mv tap-win32/tapdrvr.cod "tap-win32/tapdrvr-$(echo $mode | tr ' ' '-').cod"
+if [ -d "$TAPBINSRC" ]; then
+    mkdir -p $GENOUT/driver/i386 &>/dev/null
+    mkdir -p $GENOUT/driver/amd64 &>/dev/null
+    for arch in i386 amd64; do
+       s=$TAPBINSRC/$arch
+       cp $s/*.sys $s/*.cat $s/*.inf $GENOUT/driver/$arch
     done
-
-    title openvpn-build &>/dev/null
-
-    if [ -n "$TAP_BIN_AMD64" ]; then
-       mkdir -p $t/amd64
-       cp "$TAP_BIN_AMD64" $t/amd64
-    fi
-
-    # copy driver files into tap-win32/dist
-    cd tap-win32
-    rm -rf dist
-    mkdir dist
-    cd dist
-    mkdir i386
-    mkdir amd64
-    cd i386
-    x86=`pwd`
-    cd ../amd64
-    x64=`pwd`
-    cd ../..
-    cp i386/OemWin2k.inf $x86
-    cp i386/*.sys $x86
-    cp amd64/OemWin2k.inf $x64
-    cp amd64/*.sys $x64
-    out="TAP driver catalog file is undefined";
-    echo "$out" >$x86/$PRODUCT_TAP_ID.cat
-    echo "$out" >$x64/$PRODUCT_TAP_ID.cat
-    cd ..
-fi
-
-# $DRVBINSRC, if defined, points to prebuilt TAP driver and
-# tapinstall.exe.
-mkdir $GENOUT &>/dev/null
-rm -rf $GENOUT/driver
-if [ -z "$DRVBINSRC" ] ; then
-    # Get TAP drivers
-    cp -a tap-win32/dist $GENOUT/driver
-
-    # Sign TAP drivers
-    if [ -d "$SIGNTOOL" ]; then
-       $SIGNTOOL/signtap
-    fi
-else
-    cp -a $DRVBINSRC/driver $GENOUT/driver
-fi
-
-# $DRVBINDEST, if defined, points to a destination directory
-# where TAP driver and tapinstall.exe will be saved, to be used
-# as a $DRVBINSRC in future builds.
-if [ -n "$DRVBINDEST" ] ; then
-    mkdir $DRVBINDEST &>/dev/null
-    cp -a $GENOUT/driver $DRVBINDEST
-fi
-
 else
-    echo Not building TAP driver -- DDK version $DDKVER NOT FOUND
+    echo Cannot find pre-built tap drivers
 fi
index eae44712d2a0f2b0383fdba82e660179da6d82da..9fe0470a793c842ff59d4d1ba7d61f93ffcee4e9 100644 (file)
@@ -1,77 +1,15 @@
 #!/bin/sh
 
-# Build the x86 and x64 versions of the tapinstall tool
-# Requires the Windows DDK.
-# TISRC should be set to directory containing
-# tapinstall source code.
+# Get the x86 and x64 versions of the tapinstall tool
 
 # get version.nsi definitions
 . autodefs/defs.sh
 
-if [ -n "$DDKVER" ] && [ -d "/c/WINDDK/$DDKVER" ] ; then
-
-if ! [ -d "$TISRC" ] ; then
-    echo "$TISRC" NOT INSTALLED
-    exit 1
-fi
-
-# common declarations for all DDK build targets
-. install-win32/ddk-common
-
-amdtarget=""
-if [ -z "$TI_BIN_AMD64" ]; then
-    amdtarget="fre $x64_tag WNET"
-fi
-
-if [ -z "$DRVBINSRC" ] ; then
-    rm -rf tapinstall
-    cp -a "$TISRC" tapinstall
-
-    if [ -e tapinstall/sources.in ]; then
-       perl install-win32/ifdef.pl autodefs/defs.in <tapinstall/sources.in >tapinstall/sources
-    fi
-
-    cd tapinstall
-    t=`pwd`
-    cd ..
-
-    for mode in "w2k f" "$amdtarget"; do
-       if [ -n "$mode" ]; then
-           echo '**********' build TAPINSTALL $mode
-           cmd //c "C:\\WINDDK\\$DDKVER\\bin\\setenv.bat C:\\WINDDK\\$DDKVER $mode && cd `perl install-win32/dosname.pl $t` && build -cef"
-       fi
-    done
-fi
-
-if [ -n "$TI_BIN_AMD64" ]; then
-    mkdir -p $t/objfre_wnet_amd64/amd64
-    cp "$TI_BIN_AMD64" $t/objfre_wnet_amd64/amd64
-fi
-
-# $DRVBINSRC, if defined, points to prebuilt TAP driver and
-# tapinstall.exe.
-if [ -z "$DRVBINSRC" ] ; then
-    # Get tapinstall
+if [ -d "$TAPBINSRC" ]; then
     mkdir -p $GENOUT/tapinstall/i386 &>/dev/null
     mkdir -p $GENOUT/tapinstall/amd64 &>/dev/null
-    cp tapinstall/objfre_w2k_x86/i386/tapinstall.exe $GENOUT/tapinstall/i386
-    cp tapinstall/objfre_wnet_amd64/amd64/tapinstall.exe $GENOUT/tapinstall/amd64
-else
-    mkdir $GENOUT &>/dev/null
-    cp -a $DRVBINSRC/tapinstall $GENOUT/tapinstall
-fi
-
-# $DRVBINDEST, if defined, points to a destination directory
-# where TAP driver and tapinstall.exe will be saved, to be used
-# as a $DRVBINSRC in future builds.
-if [ -n "$DRVBINDEST" ] ; then
-    mkdir $DRVBINDEST &>/dev/null
-    cp -a $GENOUT/driver $DRVBINDEST
-    cp -a $GENOUT/tapinstall $DRVBINDEST
-fi
-
-title openvpn-build &>/dev/null
-
+    cp $TAPBINSRC/i386/tapinstall.exe $GENOUT/tapinstall/i386
+    cp $TAPBINSRC/amd64/tapinstall.exe $GENOUT/tapinstall/amd64
 else
-    echo Not building tapinstall -- DDK version $DDKVER NOT BUILT
+    echo Cannot find pre-built tapinstall
 fi
index 21ea0a7e8d66b80c849d99edfff1760621c9ca63..4a0a564e7cec0c37d0856e670ea04339d34c78e4 100644 (file)
 !define PKCS11_HELPER_DIR "../pkcs11-helper"
 ;!define DMALLOC_DIR     "../dmalloc-5.4.2"
 
+# Prebuilt TAP drivers and tapinstall
+!define TAPBINSRC "../tap_dist"
+
+# Directory containing python script for signing .exe files
+!define SIGNTOOL        "../signtool"
+
 # Optional directory of prebuilt OpenVPN binary components,
 # to be used as a source when build-from-scratch prerequisites
 # are not met.
 ;!define GENOUT_PREBUILT  "../gen-prebuilt"
 
-# tapinstall.exe source code.
-# Not needed if DRVBINSRC is defined
-# (or if using pre-built mode).
-!define TISRC  "../tapinstall/5600"
-
-# TAP Adapter parameters.  Note that PRODUCT_TAP_ID is
-# defined in version.m4.
-!define PRODUCT_TAP_DEVICE_DESCRIPTION  "TAP-Win32 Adapter V9"
-!define PRODUCT_TAP_PROVIDER            "TAP-Win32 Provider V9"
-!define PRODUCT_TAP_MAJOR_VER           9
-!define PRODUCT_TAP_MINOR_VER           7
-!define PRODUCT_TAP_RELDATE             "04/19/2010"
-
-# TAP adapter icon -- visible=0x81 or hidden=0x89
-!define PRODUCT_TAP_CHARACTERISTICS     0x81
-
-# Build debugging version of TAP driver
-;!define PRODUCT_TAP_DEBUG
-
-# DDK Version.
-# DDK distribution is assumed to be in C:\WINDDK\${DDKVER}
-!define DDKVER      6001.18002
-!define DDKVER_MAJOR 6001
-
-# Code Signing.
-# If undefined, don't sign any files.
-!define SIGNTOOL        "../signtool.old"
-!define PRODUCT_SIGN_CN "openvpn"
-
 # -j parameter passed to make
-!define MAKE_JOBS 2
+!define MAKE_JOBS 1
 
 # output directory for built binaries
 # and other generated files
index 06d526fdfb3956ee0a70169868e88679b4e64e98..f37e1c2e9a36f89ff6798614cfc257e0a9b9143c 100644 (file)
@@ -1,5 +1,5 @@
 dnl define the OpenVPN version
-define(PRODUCT_VERSION,[2.1.2])
+define(PRODUCT_VERSION,[2.1.3])
 dnl define the TAP version
 define(PRODUCT_TAP_ID,[tap0901])
 define(PRODUCT_TAP_WIN32_MIN_MAJOR,[9])
index ca68e81d1879fd2943ba9a9dea56e14c2d19e790..1a0cf82eb44aab15e287a4fb2850f51e3aef4207 100644 (file)
@@ -2,9 +2,13 @@ import os
 from wb import system, home_fn, choose_arch\r
 \r
 def build_ddk(config, dir, x64):\r
-    setenv_bat = os.path.realpath(os.path.join(config['DDK_PATH'], 'bin/setenv.bat'))\r
+    ddk_path = config['DDK_PATH']\r
     ddk_major = int(config['DDKVER_MAJOR'])\r
     debug = 'PRODUCT_TAP_DEBUG' in config\r
+    return build_tap(ddk_path, ddk_major, debug, dir, x64)\r
+\r
+def build_tap(ddk_path, ddk_major, debug, dir, x64):\r
+    setenv_bat = os.path.realpath(os.path.join(ddk_path, 'bin/setenv.bat'))\r
     target = 'chk' if debug else 'fre'\r
     if x64:\r
         target += ' x64'\r
@@ -23,7 +27,7 @@ def build_ddk(config, dir, x64):
 \r
     system('cmd /c "%s %s %s && cd %s && build -cef"' % (\r
            setenv_bat,\r
-           os.path.realpath(config['DDK_PATH']),\r
+           os.path.realpath(ddk_path),\r
            target,\r
            dir\r
            ))\r
index 0e1bb1cb94b68063f935b8e106916214306a7be4..f8eeb204231899b2a6807445c65324a2822873f9 100644 (file)
@@ -47,6 +47,9 @@
 !define DDK_PATH "c:/winddk/7600.16385.1"
 ;!define DDK_PATH "c:/winddk/6001.18002"
 
+# output path for tap_span.py
+!define TAP_DIST "tap_dist"
+
 # Visual studio path
 !define MSVC "C:/Program Files/Microsoft Visual Studio 9.0"
 
diff --git a/win/tap_span.py b/win/tap_span.py
new file mode 100644 (file)
index 0000000..9cd127b
--- /dev/null
@@ -0,0 +1,129 @@
+import sys, os, shutil\r
+from wb import config, home_fn, mod_fn, preprocess, autogen, dict_def, build_autodefs, rm_rf, mkdir_silent, cp\r
+if 'SIGNTOOL' in config:\r
+    sys.path.append(home_fn(config['SIGNTOOL']))\r
+from signtool import SignTool\r
+from build_ddk import build_tap\r
+\r
+ti_dir = "c:/src/tapinstall"\r
+hi = ("c:/winddk/7600.16385.1", 7600, 7600, ("i386", "amd64"))\r
+low = ("c:/winddk/6001.18002", 6001, 5600, ("win2k",))\r
+dest_top = home_fn('tap_build')\r
+dist = home_fn(config['TAP_DIST'])\r
+\r
+def copy_tap(src, dest, x64):\r
+    dir = os.path.join(src, { False : 'i386', True: 'amd64' }[x64])\r
+    mkdir_silent(dest)\r
+    for dirpath, dirnames, filenames in os.walk(dir):\r
+        for f in filenames:\r
+            root, ext = os.path.splitext(f)\r
+            if ext in ('.inf', '.cat', '.sys'):\r
+                cp(os.path.join(dir, f), dest)\r
+        break\r
+\r
+def copy_tapinstall(src, dest, x64):\r
+    base = { False : 'i386', True: 'amd64' }[x64]\r
+    mkdir_silent(dest)\r
+    for dirpath, dirnames, filenames in os.walk(home_fn(src)):\r
+        for f in filenames:\r
+            if f == 'tapinstall.exe':\r
+                dir_name = os.path.basename(dirpath)\r
+                s = os.path.join(dirpath, f)\r
+                if dir_name == base:\r
+                    cp(s, dest)\r
+\r
+def main():\r
+    rm_rf(dest_top)\r
+    os.mkdir(dest_top)\r
+\r
+    rm_rf(dist)\r
+    os.mkdir(dist)\r
+\r
+    for ver in hi, low:\r
+        top = os.path.join(dest_top, str(ver[1]))\r
+        os.mkdir(top)\r
+        tap_dest = os.path.join(top, "tap-win32")\r
+        ti_dest = os.path.join(top, "tapinstall")\r
+        ti_src = os.path.join(ti_dir, str(ver[2]))\r
+        shutil.copytree(home_fn("tap-win32"), tap_dest)\r
+        shutil.copytree(ti_src, ti_dest)\r
+\r
+        i386 = os.path.join(tap_dest, "i386")\r
+        amd64 = os.path.join(tap_dest, "amd64")\r
+\r
+        build_amd64 = (len(ver[3]) >= 2)\r
+\r
+        build_autodefs(config, mod_fn('autodefs.h.in'), os.path.join(top, 'autodefs.h'))\r
+\r
+        st = SignTool(config, tap_dest)\r
+\r
+        preprocess(config,\r
+                   in_fn=os.path.join(tap_dest, 'SOURCES.in'),\r
+                   out_fn=os.path.join(tap_dest, 'SOURCES'),\r
+                   quote_begin='@@',\r
+                   quote_end='@@',\r
+                   head_comment='# %s\n\n' % autogen)\r
+\r
+        preprocess(config,\r
+                   in_fn=os.path.join(i386, 'OemWin2k.inf.in'),\r
+                   out_fn=os.path.join(i386, 'OemWin2k.inf'),\r
+                   quote_begin='@@',\r
+                   quote_end='@@',\r
+                   if_prefix='!',\r
+                   head_comment='; %s\n\n' % autogen)\r
+\r
+        preprocess(config,\r
+                   in_fn=os.path.join(ti_dest, 'sources.in'),\r
+                   out_fn=os.path.join(ti_dest, 'sources'),\r
+                   if_prefix='!',\r
+                   head_comment='# %s\n\n' % autogen)\r
+\r
+        build_tap(ddk_path=ver[0],\r
+                  ddk_major=ver[1],\r
+                  debug=False,\r
+                  dir=tap_dest,\r
+                  x64=False)\r
+\r
+        st.sign_verify(x64=False)\r
+\r
+        build_tap(ddk_path=ver[0],\r
+                  ddk_major=ver[1],\r
+                  debug=False,\r
+                  dir=ti_dest,\r
+                  x64=False)\r
+\r
+        tap_dist = os.path.join(dist, ver[3][0])\r
+\r
+        copy_tap(tap_dest, tap_dist, x64=False)\r
+        copy_tapinstall(ti_dest, tap_dist, x64=False)\r
+\r
+        if build_amd64:\r
+            os.mkdir(amd64)\r
+            preprocess(dict_def(config, [('AMD64', '1')]),\r
+                       in_fn=os.path.join(i386, 'OemWin2k.inf.in'),\r
+                       out_fn=os.path.join(amd64, 'OemWin2k.inf'),\r
+                       quote_begin='@@',\r
+                       quote_end='@@',\r
+                       if_prefix='!',\r
+                       head_comment='; %s\n\n' % autogen)\r
+\r
+            build_tap(ddk_path=ver[0],\r
+                      ddk_major=ver[1],\r
+                      debug=False,\r
+                      dir=tap_dest,\r
+                      x64=True)\r
+\r
+            build_tap(ddk_path=ver[0],\r
+                      ddk_major=ver[1],\r
+                      debug=False,\r
+                      dir=ti_dest,\r
+                      x64=True)\r
+\r
+            st.sign_verify(x64=True)\r
+\r
+            tap_dist_x64 = os.path.join(dist, ver[3][1])\r
+\r
+            copy_tap(tap_dest, tap_dist_x64, x64=True)\r
+            copy_tapinstall(ti_dest, tap_dist_x64, x64=True)\r
+\r
+main()\r
index 7c2c8b9fffa30301b8166c910c71a9c54e116fda..8e236840e407b208170332b7cf7d510e64dba394 100644 (file)
--- a/win/wb.py
+++ b/win/wb.py
@@ -1,7 +1,7 @@
 # Python module containing general build functions\r
 # for OpenVPN on Windows\r
 \r
-import os, re, shutil\r
+import os, re, shutil, stat\r
 \r
 autogen = "Automatically generated by OpenVPN Windows build system"\r
 \r
@@ -182,4 +182,34 @@ def cp(src, dest, dest_is_dir=True):
     print "COPY %s %s" % (src, dest)\r
     shutil.copyfile(src, dest)\r
 \r
+def rm_rf(path):\r
+    try:\r
+        shutil.rmtree(path, onerror=onerror)\r
+    except:\r
+        pass\r
+\r
+def onerror(func, path, exc_info):\r
+    """\r
+    Error handler for ``shutil.rmtree``.\r
+\r
+    If the error is due to an access error (read only file)\r
+    it attempts to add write permission and then retries.\r
+\r
+    If the error is for another reason it re-raises the error.\r
+\r
+    Usage : ``shutil.rmtree(path, onerror=onerror)``\r
+    """\r
+    if not os.access(path, os.W_OK):\r
+        # Is the error an access error ?\r
+        os.chmod(path, stat.S_IWUSR)\r
+        func(path)\r
+    else:\r
+        raise\r
+\r
+def mkdir_silent(dir):\r
+    try:\r
+        os.mkdir(dir)\r
+    except:\r
+        pass\r
+\r
 config = get_config()\r