# sign the installer
if [ -d "$SIGNTOOL" ]; then
- TARGET_EXE="$(echo $(pwd)/$GENOUT/*.exe)" $SIGNTOOL/signexe
+ python $SIGNTOOL/signapp.py "$(echo $(pwd)/$GENOUT/*.exe)"
fi
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
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
#!/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
#!/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
!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
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])
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
\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
!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"
--- /dev/null
+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
# 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
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