mirror of
https://github.com/OpenVPN/openvpn.git
synced 2025-05-09 05:31:05 +08:00
Added support for prebuilt TAP-drivers. Automated embedding manifests.
Removed win/make_dist.py's dependency on TAP-driver and tapinstall.exe building. Also added manifest embedding commands to win/make_dist.py. To avoid duplicate code moved the "build_vc" method from win/build.py to win/wb.py and renamed it "run_in_vs_shell". Signed-off-by: Samuli Seppänen <samuli@openvpn.net> Acked-by: James Yonan <james@openvpn.net> Signed-off-by: David Sommerseth <davids@redhat.com>
This commit is contained in:
parent
0265cf3a6b
commit
0c03c731a8
36
win/build.py
36
win/build.py
@ -1,28 +1,22 @@
|
||||
import os, sys
|
||||
from wb import system, config, home_fn, cd_home, cd_service_win32
|
||||
|
||||
os.environ['PATH'] += ";%s\\VC" % (os.path.normpath(config['MSVC']),)
|
||||
|
||||
def build_vc(cmd):
|
||||
"""Make sure environment variables are setup before build"""
|
||||
system('cmd /c "vcvarsall.bat x86 && %s"' % (cmd,))
|
||||
|
||||
def main():
|
||||
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()
|
||||
build_vc("nmake /f %s" % (home_fn('msvc.mak'),))
|
||||
cd_home()
|
||||
run_in_vs_shell("nmake /f %s" % (home_fn('msvc.mak'),))
|
||||
cd_service_win32()
|
||||
build_vc("nmake /f %s" % ('msvc.mak'))
|
||||
|
||||
def clean():
|
||||
run_in_vs_shell("nmake /f %s" % ('msvc.mak'))
|
||||
|
||||
def clean():
|
||||
"""Clean up after openvpn.exe and openvpnserv.exe build"""
|
||||
cd_home()
|
||||
build_vc("nmake /f %s clean" % (home_fn('msvc.mak'),))
|
||||
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'))
|
||||
|
||||
# if we are run directly, and not loaded as a module
|
||||
if __name__ == "__main__":
|
||||
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':
|
||||
clean()
|
||||
else:
|
||||
|
@ -54,13 +54,14 @@ def main(config):
|
||||
if tap:
|
||||
build_ddk(config, 'tap', 'all')
|
||||
build_ddk(config, 'tapinstall', 'all')
|
||||
if signedBuild:
|
||||
sign(config, 'all')
|
||||
make_dist(config,tap=True)
|
||||
|
||||
else:
|
||||
print "Not building the TAP driver"
|
||||
|
||||
if signedBuild:
|
||||
sign(config, 'all')
|
||||
|
||||
make_dist(config)
|
||||
if 'TAP_PREBUILT' in config:
|
||||
print "Using prebuilt TAP driver"
|
||||
make_dist(config,tap=False)
|
||||
|
||||
# if we are run directly, and not loaded as a module
|
||||
if __name__ == "__main__":
|
||||
|
109
win/make_dist.py
109
win/make_dist.py
@ -1,8 +1,8 @@
|
||||
import os
|
||||
from wb import home_fn, rm_rf, mkdir, cp_a, cp, rename
|
||||
|
||||
def main(config, tap=True):
|
||||
dist = config['DIST']
|
||||
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
|
||||
dist = home_fn(dist)
|
||||
bin = os.path.join(dist, 'bin')
|
||||
@ -11,14 +11,13 @@ def main(config, tap=True):
|
||||
samples = os.path.join(dist, 'samples')
|
||||
|
||||
# build dist and subdirectories
|
||||
rm_rf(dist)
|
||||
mkdir(dist)
|
||||
mkdir(bin)
|
||||
if tap:
|
||||
mkdir(i386)
|
||||
mkdir(amd64)
|
||||
rm_rf(dist)
|
||||
mkdir(dist)
|
||||
mkdir(bin)
|
||||
mkdir(i386)
|
||||
mkdir(amd64)
|
||||
mkdir(samples)
|
||||
|
||||
|
||||
# copy openvpn.exe, openvpnserv.exe and their manifests
|
||||
cp(home_fn('openvpn.exe'), bin)
|
||||
cp(home_fn('openvpn.exe.manifest'), bin)
|
||||
@ -45,34 +44,64 @@ def main(config, tap=True):
|
||||
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'))
|
||||
|
||||
# copy MSVC CRT
|
||||
cp_a(home_fn(config['MSVC_CRT']), bin)
|
||||
|
||||
if tap:
|
||||
# copy TAP drivers
|
||||
for dir_name, dest in (('amd64', amd64), ('i386', i386)):
|
||||
dir = home_fn(os.path.join('tap-win32', 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('tapinstall')):
|
||||
for f in filenames:
|
||||
if f == 'tapinstall.exe':
|
||||
# dir_name is either i386 or amd64
|
||||
dir_name = os.path.basename(dirpath)
|
||||
src = os.path.join(dirpath, f)
|
||||
if dir_name in dest:
|
||||
cp(src, dest[dir_name])
|
||||
|
||||
|
||||
# if we are run directly, and not loaded as a module
|
||||
if __name__ == "__main__":
|
||||
# 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
|
||||
main(config)
|
||||
|
@ -69,6 +69,9 @@
|
||||
!define SIGNTOOL "../signtool"
|
||||
!define PRODUCT_SIGN_CN "openvpn"
|
||||
|
||||
# Directory with prebuilt TAP drivers and tapinstall.exes
|
||||
!define TAP_PREBUILT "../tap-prebuilt"
|
||||
|
||||
; DEBUGGING -- set to something like "-DBG2"
|
||||
!define OUTFILE_LABEL ""
|
||||
|
||||
|
@ -23,13 +23,13 @@ def copy_tap(src, dest, x64):
|
||||
|
||||
def copy_tapinstall(src, dest, x64):
|
||||
base = { False : 'i386', True: 'amd64' }[x64]
|
||||
mkdir_silent(dest)
|
||||
for dirpath, dirnames, filenames in os.walk(home_fn(src)):
|
||||
for f in filenames:
|
||||
if f == 'tapinstall.exe':
|
||||
dir_name = os.path.basename(dirpath)
|
||||
s = os.path.join(dirpath, f)
|
||||
if dir_name == base:
|
||||
mkdir_silent(dest)
|
||||
for dirpath, dirnames, filenames in os.walk(home_fn(src)):
|
||||
for f in filenames:
|
||||
if f == 'devcon.exe':
|
||||
dir_name = os.path.basename(dirpath)
|
||||
s = os.path.join(dirpath, f)
|
||||
if dir_name == base:
|
||||
cp(s, dest)
|
||||
|
||||
def main():
|
||||
|
15
win/wb.py
15
win/wb.py
@ -41,12 +41,17 @@ def cd_service_win32():
|
||||
os.chdir(os.path.join(os.path.dirname(__file__), '../service-win32'))
|
||||
|
||||
def system(cmd):
|
||||
print "RUN:", cmd
|
||||
os.system(cmd)
|
||||
|
||||
def parse_version_m4(kv, version_m4):
|
||||
print "RUN:", cmd
|
||||
os.system(cmd)
|
||||
|
||||
def run_in_vs_shell(cmd):
|
||||
"""Make sure environment variables are setup before running command"""
|
||||
os.environ['PATH'] += ";%s\\VC" % (os.path.normpath(config['MSVC']),)
|
||||
system('cmd /c "vcvarsall.bat x86 && %s"' % (cmd,))
|
||||
|
||||
def parse_version_m4(kv, version_m4):
|
||||
'''Parse define lines in version.m4'''
|
||||
r = re.compile(r'^define\((\w+),\[(.*)\]\)$')
|
||||
r = re.compile(r'^define\((\w+),\[(.*)\]\)$')
|
||||
f = open(version_m4)
|
||||
for line in f:
|
||||
line = line.rstrip()
|
||||
|
Loading…
x
Reference in New Issue
Block a user