From ba865c55a61b4dd3bcf3e2c6bb2632e38d07cd2a Mon Sep 17 00:00:00 2001 From: james Date: Fri, 1 Feb 2008 19:44:53 +0000 Subject: Changes to Windows build system: added GENOUT_PREBUILT mode to allow building an OpenVPN installer with a reduced set of prerequisites. See comments in domake-win for more info. git-svn-id: http://svn.openvpn.net/projects/openvpn/branches/BETA21/openvpn@2711 e7ae566f-a301-0410-adde-c780ea21d3b5 --- domake-win | 63 +++++++++++++++++++++++++++++++++++++++++------ install-win32/getgui | 5 +++- install-win32/getprebuilt | 10 ++++++++ install-win32/makeopenvpn | 18 ++++++++------ install-win32/settings.in | 5 ++++ 5 files changed, 86 insertions(+), 15 deletions(-) create mode 100644 install-win32/getprebuilt diff --git a/domake-win b/domake-win index f27d6e7..ca71f25 100644 --- a/domake-win +++ b/domake-win @@ -4,17 +4,25 @@ # This script will build OpenVPN, the TAP driver, and # the installer from source, targeting x86 on Windows # 2000 and higher, and x64 on Windows 2003 and higher. +# For quick start options, see pre-built notes below. # -# See top-level build configuration in install-win32/settings.in +# See top-level build configuration and settings in: # -# Prerequisite installs: +# install-win32/settings.in +# +# Mandatory prerequisites: # # MinGW -- for GNU C compiler # MSYS -- for bash # msysDTK -- for perl # NSIS -- for building installer +# +# The following additional prerequisites may be omitted +# when building in pre-built mode (see note below). + # svn -- for checking out source code (or TortoiseSVN) -# Windows Driver Kit (6001_17121_HyperV_WDK.iso) -- for building TAP driver + tapinstall +# Windows Driver Kit (6001_17121_HyperV_WDK.iso) -- for building +# TAP driver + tapinstall # # Required libraries (must be prebuilt) # @@ -36,10 +44,47 @@ # ../svc-template -- This directory should contain service.[ch] # from the MS Platform SDK. -# Note that all variables referenced here such as GENOUT and CLEAN -# are defined in install-win32/settings.in +# Note that all variables referenced here such as GENOUT, +# GENOUT_PREBUILT, and CLEAN are defined in install-win32/settings.in -# First build the autodefs directory, with C, sh, and NSIS versions +# SPECIAL NOTES ON PRE-BUILT MODE +# Setting up a complete tool chain to build OpenVPN and all +# dependencies on Windows can be an onerous task, so the capability +# is provided to reference a directory of pre-built components during +# the build process. This would allow you, for example, to build an +# OpenVPN installer with custom edits to install-win32/settings.in, +# but then avoid needing to build all other components (such as OpenSSL, +# LZO, Pkcs11-helper, TAP driver windows service, etc.). The procedure +# is as follows. First Download and expand the pre-built binaries from: +# +# http://openvpn.net/beta/windows-devel/ (choose the most recent .tbz file) +# +# After expanding the .tbz file, cd to the top level directory and +# expand an OpenVPN source distribution taken from either the subversion +# repository or a source .tar.gz file. It's best to use an OpenVPN source +# version that is the same or slightly later than the pre-built binaries +# file. So now you have a directory containing something that looks like +# this: +# +# gen-prebuilt -> from prebuilt .tbz file +# lzo-2.02 -> from prebuilt .tbz file +# openssl-0.9.7m -> from prebuilt .tbz file +# pkcs11-helper -> from prebuilt .tbz file +# openvpn-2.1_rc7a.tar.gz -> downloaded from openvpn.net +# openvpn-2.1_rc7a -> directory expanded from above file +# +# Now cd to your expanded source tree (openvpn-2.1_rc7a in the +# example above), make edits to install-win32/settings.in (or even +# patch the OpenVPN source code directly), and run this script: +# +# ./domake-win +# +# If everything runs correctly, you should have a custom installer +# written to ./gen/install + + + +# First build the autodefs directory, containing C, sh, and NSIS versions # of global settings, using install-win32/settings.in as source. # These settings will then drive the rest of the build process. install-win32/winconfig @@ -47,11 +92,15 @@ install-win32/winconfig # Delete the GENOUT directory if CLEAN="yes" install-win32/doclean +# Load a pre-built GENOUT directory if GENOUT_PREBUILT is defined +# and the GENOUT directory is non-existing +install-win32/getprebuilt + # Each of the scripts below build, get, and/or possibly sign a different # OpenVPN component, placing the generated files in GENOUT. Each of these # steps is fully indepedent, and can be executed in any order or omitted. # The exception is the last script which gathers together all files from -# GENOUT and build the installer. +# GENOUT and builds the installer. # Make the OpenVPN user-space component (openvpn.exe) install-win32/makeopenvpn diff --git a/install-win32/getgui b/install-win32/getgui index c7fd2bb..03f68a8 100644 --- a/install-win32/getgui +++ b/install-win32/getgui @@ -10,10 +10,13 @@ GUI="$OPENVPN_GUI_DIR/$OPENVPN_GUI" if [ -e "$GUI" ]; then mkdir -p $GENOUT/bin &>/dev/null cp $GUI $GENOUT/bin - echo '!define OPENVPN_GUI_DEFINED' >autodefs/guidefs.nsi if [ -d "$SIGNTOOL" ]; then TARGET_EXE="$GENOUT/bin/$OPENVPN_GUI" $SIGNTOOL/signexe fi +fi + +if [ -e "$GENOUT/bin/$OPENVPN_GUI" ]; then + echo '!define OPENVPN_GUI_DEFINED' >autodefs/guidefs.nsi else cat /dev/null >autodefs/guidefs.nsi fi diff --git a/install-win32/getprebuilt b/install-win32/getprebuilt new file mode 100644 index 0000000..36c4827 --- /dev/null +++ b/install-win32/getprebuilt @@ -0,0 +1,10 @@ +#!/bin/sh + +# get version.nsi definitions +. autodefs/defs.sh + +# Get PKCS11-helper libraries +if [ -d "$GENOUT_PREBUILT" ] && ! [ -d "$GENOUT" ]; then + echo LOADING prebuilt binaries from $GENOUT_PREBUILT + cp -a $GENOUT_PREBUILT $GENOUT +fi diff --git a/install-win32/makeopenvpn b/install-win32/makeopenvpn index 31df604..be43fdc 100644 --- a/install-win32/makeopenvpn +++ b/install-win32/makeopenvpn @@ -3,11 +3,15 @@ # get version.nsi definitions . autodefs/defs.sh -# build OpenVPN binary -[ "$CLEAN" = "yes" ] && make -f makefile.w32 clean -make -f makefile.w32 -j $MAKE_JOBS +if [ -d "$OPENSSL_DIR" ] && [ -d "$LZO_DIR" ] && [ -d "$PKCS11_HELPER_DIR" ]; then + # build OpenVPN binary + [ "$CLEAN" = "yes" ] && make -f makefile.w32 clean + make -f makefile.w32 -j $MAKE_JOBS -# copy OpenVPN executable to GENOUT/bin -mkdir -p $GENOUT/bin &>/dev/null -cp $PRODUCT_UNIX_NAME.exe $GENOUT/bin -strip $GENOUT/bin/$PRODUCT_UNIX_NAME.exe + # copy OpenVPN executable to GENOUT/bin + mkdir -p $GENOUT/bin &>/dev/null + cp $PRODUCT_UNIX_NAME.exe $GENOUT/bin + strip $GENOUT/bin/$PRODUCT_UNIX_NAME.exe +else + echo DID NOT BUILD openvpn.exe because one or more of OPENSSL_DIR, LZO_DIR, or PKCS11_HELPER_DIR directories were missing +fi diff --git a/install-win32/settings.in b/install-win32/settings.in index ce9ee35..864cf19 100644 --- a/install-win32/settings.in +++ b/install-win32/settings.in @@ -23,6 +23,11 @@ !define PKCS11_HELPER_DIR "../pkcs11-helper/usr/local" !define DMALLOC_DIR "../dmalloc-5.4.2" +# 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. !define TISRC "../tapinstall" -- cgit v1.2.3