diff options
| author | kali <kali@leap.se> | 2012-12-06 01:37:00 +0900 | 
|---|---|---|
| committer | kali <kali@leap.se> | 2012-12-06 01:37:00 +0900 | 
| commit | fa59d347e82e3ddfb758658e15bf8a2d8e3d83b1 (patch) | |
| tree | 196e83055c27f8d38a4f55cafdfd8850eabdbe64 | |
| parent | 53a615a9507265e133e8f85714f5039eeae1f10d (diff) | |
| parent | 161fec1b1abd153605c5377ec0e4c7f45fb1e3b8 (diff) | |
Merge branch 'feature/openvpn-bin-build' into develop
| -rw-r--r-- | openvpn/README | 6 | ||||
| -rw-r--r-- | openvpn/Sources | 4 | ||||
| -rwxr-xr-x | openvpn/build.zsh | 191 | 
3 files changed, 201 insertions, 0 deletions
| diff --git a/openvpn/README b/openvpn/README new file mode 100644 index 00000000..bf2205c2 --- /dev/null +++ b/openvpn/README @@ -0,0 +1,6 @@ +OpenVPN binary, build scripts +Works using a GCC minGW32 cross-compiler on Debian/Ubuntu +Produces a working MS Windows executable +openvpn.exe: PE32 executable (DLL) (console) Intel 80386, for MS Windows +goes smooth for the 99%, might still need some slapping the flags around now and then + -jrml diff --git a/openvpn/Sources b/openvpn/Sources new file mode 100644 index 00000000..e2fe7bb3 --- /dev/null +++ b/openvpn/Sources @@ -0,0 +1,4 @@ +lzo		-2.06	.tar.gz +opensc		-0.12.2	.tar.gz +openssl		-1.0.1c	.tar.gz +polarssl	-1.1.4	.tgz diff --git a/openvpn/build.zsh b/openvpn/build.zsh new file mode 100755 index 00000000..87c591cc --- /dev/null +++ b/openvpn/build.zsh @@ -0,0 +1,191 @@ +#!/bin/zsh +# +# Copyright (C) 2012 Denis Roio <jaromil@dyne.org> +# +# This source  code is free  software; you can redistribute  it and/or +# modify it under the terms of  the GNU Public License as published by +# the Free  Software Foundation; either  version 3 of the  License, or +# (at your option) any later version. +# +# This source code is distributed in  the hope that it will be useful, +# but  WITHOUT ANY  WARRANTY;  without even  the  implied warranty  of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# Please refer to the GNU Public License for more details. +# +# You should have received a copy of the GNU Public License along with +# this source code; if not, write to: +# Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + + +REPO="http://files.dyne.org/leap/openvpn/sources" +TOPSRC=`pwd` +QUIET=0 +DEBUG=0 + + +autoload colors; colors +# standard output message routines +# it's always useful to wrap them, in case we change behaviour later +notice() { if [[ $QUIET == 0 ]]; then print "$fg_bold[green][*]$fg_no_bold[default] $1" >&2; fi } +error()  { if [[ $QUIET == 0 ]]; then print "$fg[red][!]$fg[default] $1" >&2; fi } +func()   { if [[ $DEBUG == 1 ]]; then print "$fg[blue][D]$fg[default] $1" >&2; fi } +act()    { +    if [[ $QUIET == 0 ]]; then +	if [ "$1" = "-n" ]; then +	    print -n "$fg_bold[white] . $fg_no_bold[default] $2" >&2; +	else +	    print "$fg_bold[white] . $fg_no_bold[default] $1" >&2; +	fi +    fi +} + +{ test "$1" = "clean" } && { +	notice "Cleaning up all build in ${TOPSRC}" +	for src in `cat Sources | awk ' +/^#/ {next} +/^./ { print $1 }'`; do +		{ test "$src" != "" } && { rm -rf "${src}" } +	done +	act "Done." +	return 0 +} + +os="`uname -s`" +target="$1" +notice "OpenVPN build on $os for $target in ${TOPSRC}" + +prepare_sources() { +    notice "Preparing sources" +    # look for a file names "Sources", download and decompress entries +    # format of file: name version compression (complete filename when merged) +    { test -r Sources } || { +	error "Sources not found, nothing to build here" +	return 1 +    } +    for src in `cat Sources | awk ' +/^#/ {next} +/^./ { print $1 ";" $2 ";" $3 }'`; do +	name="${src[(ws:;:)1]}" +	ver="${src[(ws:;:)2]}" +	arch="${src[(ws:;:)3]}" +	file="${name}${ver}${arch}" +	func "preparing source for ${name}${ver}" + +	{ test "$1" != "" } && { +	    test "$1" != "$name" } && { +	    continue } + +	# download the file +	{ test -r ${file} } || { +	    act "downloading ${file}" +	    curl ${REPO}/${file} -o ${file} +	} +	# decompress the file +	{ test -r ${name} } || { +	    act "decompressing ${name}" +	    case $arch in +		## BARE SOURCE +		.tar.gz)  tar xfz ${file}; mv ${name}${ver} ${name} ;; +		.tar.bz2) tar xfj ${file}; mv ${name}${ver} ${name} ;; +		.tgz) tar xfz ${file}; mv ${name}${ver} ${name} ;; +		*) error "compression not supported: $arch" +	    esac +	} +	act "${name} source ready" +    done +} + +act "Downloading sources" + +# git clone latest openvpn +{ test -r openvpn } || { git clone https://github.com/OpenVPN/openvpn.git } + +case "$os" in +    Darwin) +	prepare_sources lzo +	prepare_sources polarssl +	;; +    Linux) # Cross-compile for Win32 +	prepare_sources lzo +	prepare_sources opensc +	prepare_sources openssl +	# tap windows +	{ test -r tap-windows } || { git clone https://github.com/OpenVPN/tap-windows.git } +	;; +esac + +notice "Sources ready, now compiling..." +LOG="`pwd`/build.log"; touch ${LOG} +act "logs saved in build.log" + +case "$target" in +    osx) +	{ test -r polarssl/library/libpolarssl.a } || { +	    act "building PolarSSL..." +	    pushd polarssl +	    CC=clang cmake . >> ${LOG} +	    make -C library clean +	    cat CMakeCache.txt | awk ' +/^CMAKE_C_COMPILER/ { print "CMAKE_C_COMPILER:FILEPATH=/usr/bin/clang"; next } +/^CMAKE_BUILD_TYPE/ { print $1 "Release"; next } +/^CMAKE_C_FLAGS:STRING/ { print "CMAKE_C_FLAGS:STRING=-arch x86_64 -arch i386"; next } +{ print $0 } +' > CMakeCache.leap +	    cp CMakeCache.leap CMakeCache.txt +	    make -C library >> ${LOG} +	    popd +	    act "done." +	} + +	act "building OpenVPN" +	pushd openvpn +	CC=clang CFLAGS="-arch x86_64 -arch i386" \ +	    LZO_LIBS="/opt/local/lib/liblzo2.a" LZO_CFLAGS="-I/opt/local/include" \ +	    POLARSSL_CFLAGS="-I${TOPSRC}/polarssl/include" \ +	    POLARSSL_LIBS="${TOPSRC}/polarssl/library/libpolarssl.a" \ +	    ./configure --with-crypto-library=polarssl >> ${LOG} +	make src/openvpn/openvpn +	popd +	act "done." +	;; + +    win32) +	{ test -r lzo/src/liblzo2.la } || { pushd lzo +	    act "building LZO lib" +	    ./configure --host=i586-mingw32msvc >> ${LOG} +	    make >> ${LOG}; popd } +	# openssl +	{ test -r openssl/libssl.a } || { +	    act "building OpenSSL lib" +	    pushd openssl +	    ./Configure --cross-compile-prefix=i586-mingw32msvc- mingw >> ${LOG} +	    make ${LOG}; popd } + +	pushd openvpn +	act "building latest OpenVPN" +	{ test -r configure } || { +	    sed -i -e 's/-municode//' src/openvpn/Makefile.am +	    autoreconf -i >> ${LOG} +	} +	CFLAGS="-I/usr/i586-mingw32msvc/include/ddk -D_WIN32_WINNT=0x0501" \ +	    LZO_LIBS="${TOPSRC}/lzo/src/liblzo2.la" \ +	    LZO_CFLAGS="-I${TOPSRC}/lzo/include" \ +	    TAP_CFLAGS="-I${TOPSRC}/tap-windows/src" \ +	    OPENSSL_SSL_CFLAGS="-I${TOPSRC}/openssl/include" \ +	    OPENSSL_CRYPTO_CFLAGS="-I${TOPSRC}/openssl/crypto" \ +	    OPENSSL_SSL_LIBS="${TOPSRC}/openssl/libssl.a" \ +	    OPENSSL_CRYPTO_LIBS="${TOPSRC}/openssl/libcrypto.a" \ +	    ./configure --host=i586-mingw32msvc >> ${LOG} +	make >> ${LOG} +	popd + +	act "If OpenVPN build reports a final error on linkage, it might be due to a libtool bug" +	act "(something like undefined reference to _WinMain@16)" +	act "You need to go inside openvpn/src/openvpn and issue the last compile line manually" +	act "adding an flat '-shared' at the end of it, then do 'cp .libs/openvpn.exe .'" +	act "Happy hacking." +	;; +    *) +	error "Unknown target: $target" +	;; +esac
\ No newline at end of file | 
