-import os, sys\r
-from wb import system, config, home_fn, cd_home, cd_service_win32
-\r
-os.environ['PATH'] += ";%s\\VC" % (os.path.normpath(config['MSVC']),)\r
-\r
-def build_vc(cmd):\r
- """Make sure environment variables are setup before build"""
- system('cmd /c "vcvarsall.bat x86 && %s"' % (cmd,))\r
-\r
-def main():\r
+import os, sys
+from wb import system, config, home_fn, cd_home, cd_service_win32, run_in_vs_shell
+
+def main():
"""Build openvpn.exe and openvpnserv.exe"""
- cd_home()\r
- build_vc("nmake /f %s" % (home_fn('msvc.mak'),))\r
+ cd_home()
+ run_in_vs_shell("nmake /f %s" % (home_fn('msvc.mak'),))
cd_service_win32()
- build_vc("nmake /f %s" % ('msvc.mak'))
-\r
-def clean():\r
+ run_in_vs_shell("nmake /f %s" % ('msvc.mak'))
+
+def clean():
"""Clean up after openvpn.exe and openvpnserv.exe build"""
- cd_home()\r
- build_vc("nmake /f %s clean" % (home_fn('msvc.mak'),))\r
+ cd_home()
+ run_in_vs_shell("nmake /f %s clean" % (home_fn('msvc.mak'),))
os.chdir("service-win32")
- build_vc("nmake /f %s clean" % ('msvc.mak'))
-\r
-# if we are run directly, and not loaded as a module\r
-if __name__ == "__main__":\r
+ run_in_vs_shell("nmake /f %s clean" % ('msvc.mak'))
+
+# if we are run directly, and not loaded as a module
+if __name__ == "__main__":
if len(sys.argv) == 2 and sys.argv[1] == 'clean':\r
clean()\r
else:\r
-import os\r
-from wb import home_fn, rm_rf, mkdir, cp_a, cp, rename
-\r
-def main(config, tap=True):\r
- dist = config['DIST']\r
+import os
+from wb import home_fn, rm_rf, mkdir, cp_a, cp, rename, run_in_vs_shell
+
+def main(config, tap=True):
+ dist = config['DIST']
assert dist\r
dist = home_fn(dist)\r
bin = os.path.join(dist, 'bin')\r
samples = os.path.join(dist, 'samples')
\r
# build dist and subdirectories\r
- rm_rf(dist)\r
- mkdir(dist)\r
- mkdir(bin)\r
- if tap:\r
- mkdir(i386)\r
- mkdir(amd64)\r
+ rm_rf(dist)
+ mkdir(dist)
+ mkdir(bin)
+ mkdir(i386)
+ mkdir(amd64)
mkdir(samples)
-\r
+
# copy openvpn.exe, openvpnserv.exe and their manifests
cp(home_fn('openvpn.exe'), bin)\r
cp(home_fn('openvpn.exe.manifest'), bin)\r
cp(home_fn('sample-config-files/server.conf'), samples)
rename(os.path.join(samples,'client.conf'), os.path.join(samples, 'client.ovpn'))
rename(os.path.join(samples,'server.conf'), os.path.join(samples, 'server.ovpn'))
-\r
- # copy MSVC CRT\r
- cp_a(home_fn(config['MSVC_CRT']), bin)\r
-\r
- if tap:\r
- # copy TAP drivers\r
- for dir_name, dest in (('amd64', amd64), ('i386', i386)):\r
- dir = home_fn(os.path.join('tap-win32', dir_name))\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
- # Copy tapinstall.exe (usually known as devcon.exe)
- dest = {'amd64' : amd64, 'i386' : i386}\r
- for dirpath, dirnames, filenames in os.walk(home_fn('tapinstall')):\r
- for f in filenames:\r
- if f == 'tapinstall.exe':\r
- # dir_name is either i386 or amd64
- dir_name = os.path.basename(dirpath)\r
- src = os.path.join(dirpath, f)\r
- if dir_name in dest:\r
- cp(src, dest[dir_name])\r
-\r
-# if we are run directly, and not loaded as a module\r
-if __name__ == "__main__":\r
+ # embed manifests to executables and DLLs
+ for f in [ "openvpn.exe", "openvpnserv.exe", "lzo2.dll", "libpkcs11-helper-1.dll" ]:
+
+ outputresource = os.path.join(bin,f)
+ manifest = outputresource+".manifest"
+
+ # EXEs and DLLs require slightly different treatment
+ if f.endswith(".exe"):
+ type = "1"
+ elif f.endswith(".dll"):
+ type = "2"
+ else:
+ print "ERROR: Could not embed manifest to "+outputresouce+", bailing out."
+ sys.exit(1)
+
+ # Embed the manifest
+ run_in_vs_shell('mt.exe -manifest %s -outputresource:%s;%s' % (manifest, outputresource, type))
+
+ # copy MSVC CRT
+ cp_a(home_fn(config['MSVC_CRT']), bin)
+
+ # TAP-driver and tapinstall.exe were built, so copy those over
+ if tap:
+ drv_dir = 'tap-win32'
+ ti_dir = 'tapinstall'
+
+ # we're using prebuilt TAP-driver and tapinstall.exe
+ elif 'TAP_PREBUILT' in config:
+ drv_dir = config['TAP_PREBUILT']
+ ti_dir = config['TAP_PREBUILT']
+
+ else:
+ print "ERROR: Could not find prebuilt TAP-drivers or tapinstall.exe. Please check win/settings.in"
+ sys.exit(1)
+
+ # copy TAP drivers
+ for dir_name, dest in (('amd64', amd64), ('i386', i386)):
+ dir = home_fn(os.path.join(drv_dir, dir_name))
+ for dirpath, dirnames, filenames in os.walk(dir):
+ for f in filenames:
+ root, ext = os.path.splitext(f)
+ if ext in ('.inf', '.cat', '.sys'):
+ cp(os.path.join(dir, f), dest)
+ break
+
+ # Copy tapinstall.exe (usually known as devcon.exe)
+ dest = {'amd64' : amd64, 'i386' : i386}
+ for dirpath, dirnames, filenames in os.walk(home_fn(ti_dir)):
+ for f in filenames:
+ if f == 'devcon.exe':
+ dir_name = os.path.basename(dirpath)
+ src = os.path.join(dirpath, f)
+ dst = os.path.join(dest[dir_name],'tapinstall.exe')
+ if dir_name in dest:
+ cp(src, dst, dest_is_dir=False)
+
+# if we are run directly, and not loaded as a module
+if __name__ == "__main__":
from wb import config\r
main(config)\r