summaryrefslogtreecommitdiff
path: root/.travis/build-deps.sh
blob: 08b93e7a21d1dce9120e7cb7240acda15b277a6f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
#!/bin/sh
set -eux

if [ "${TRAVIS_OS_NAME}" = "windows" ]; then
    choco install strawberryperl nasm
    choco install visualstudio2019buildtools --package-parameters "--includeRecommended --includeOptional"
    choco install visualstudio2019-workload-vctools
    cd ..
    git clone https://github.com/openvpn/openvpn-build.git
    cd openvpn-build
    PATH="/c/Strawberry/perl/bin:":$PATH MODE=DEPS msvc/build.bat
    exit 0
fi

# Set defaults
PREFIX="${PREFIX:-${HOME}/opt}"

download_tap_windows () {
    if [ ! -f "download-cache/tap-windows-${TAP_WINDOWS_VERSION}.zip" ]; then
       wget -P download-cache/ \
           "http://build.openvpn.net/downloads/releases/tap-windows-${TAP_WINDOWS_VERSION}.zip"
    fi
}

download_lzo () {
    if [ ! -f "download-cache/lzo-${LZO_VERSION}.tar.gz" ]; then
        wget -P download-cache/ \
            "http://www.oberhumer.com/opensource/lzo/download/lzo-${LZO_VERSION}.tar.gz"
    fi
}

build_lzo () {
    if [ "$(cat ${PREFIX}/.lzo-version)" != "${LZO_VERSION}" ]; then
        tar zxf download-cache/lzo-${LZO_VERSION}.tar.gz
        (
            cd "lzo-${LZO_VERSION}"

            ./configure --host=${CHOST} --program-prefix='' \
                --libdir=${PREFIX}/lib --prefix=${PREFIX} --build=x86_64-pc-linux-gnu
            make all install
        )
        echo "${LZO_VERSION}" > "${PREFIX}/.lzo-version"
    fi
}

download_pkcs11_helper () {
    if [ ! -f "pkcs11-helper-${PKCS11_HELPER_VERSION}.tar.gz" ]; then
        wget -P download-cache/ \
            "https://github.com/OpenSC/pkcs11-helper/archive/pkcs11-helper-${PKCS11_HELPER_VERSION}.tar.gz"
    fi
}

build_pkcs11_helper () {
    if [ "$(cat ${PREFIX}/.pkcs11_helper-version)" != "${PKCS11_HELPER_VERSION}" ]; then
        tar xf download-cache/pkcs11-helper-${PKCS11_HELPER_VERSION}.tar.gz
        (
            cd "pkcs11-helper-pkcs11-helper-${PKCS11_HELPER_VERSION}"

            autoreconf -iv

            ./configure --host=${CHOST} --program-prefix='' --libdir=${PREFIX}/lib \
                 --prefix=${PREFIX} --build=x86_64-pc-linux-gnu \
                 --disable-crypto-engine-gnutls \
                 --disable-crypto-engine-nss \
                 --disable-crypto-engine-polarssl \
                 --disable-crypto-engine-mbedtls
            make all install
         )
         echo "${PKCS11_HELPER_VERSION}" > "${PREFIX}/.pkcs11_helper-version"
    fi
}

download_mbedtls () {
    if [ ! -f "download-cache/mbedtls-${MBEDTLS_VERSION}-apache.tgz" ]; then
        wget -P download-cache/ \
            "https://tls.mbed.org/download/mbedtls-${MBEDTLS_VERSION}-apache.tgz"
    fi
}

build_mbedtls () {
    if [ "$(cat ${PREFIX}/.mbedtls-version)" != "${MBEDTLS_VERSION}" ]; then
        tar zxf download-cache/mbedtls-${MBEDTLS_VERSION}-apache.tgz
        (
            cd "mbedtls-${MBEDTLS_VERSION}"
            make
            make install DESTDIR="${PREFIX}"
        )
        echo "${MBEDTLS_VERSION}" > "${PREFIX}/.mbedtls-version"
    fi
}

download_openssl () {
    if [ ! -f "download-cache/openssl-${OPENSSL_VERSION}.tar.gz" ]; then
        MAJOR=`echo $OPENSSL_VERSION | sed -e 's/\([0-9.]*\).*/\1/'`
        wget -P download-cache/ \
             "https://www.openssl.org/source/old/${MAJOR}/openssl-${OPENSSL_VERSION}.tar.gz"
    fi
}

build_openssl_linux () {
    (
        cd "openssl-${OPENSSL_VERSION}/"
        ./config shared --prefix="${PREFIX}" --openssldir="${PREFIX}" -DPURIFY
        make all install_sw
    )
}

build_openssl_osx () {
    (
        cd "openssl-${OPENSSL_VERSION}/"
        ./Configure darwin64-x86_64-cc shared \
            --prefix="${PREFIX}" --openssldir="${PREFIX}" -DPURIFY
        make depend all install_sw
    )
}

build_openssl_mingw () {
    (
        cd "openssl-${OPENSSL_VERSION}/"

        if [ "${CHOST}" = "i686-w64-mingw32" ]; then
            export TARGET=mingw
        elif [ "${CHOST}" = "x86_64-w64-mingw32" ]; then
            export TARGET=mingw64
        fi

        ./Configure --cross-compile-prefix=${CHOST}- shared \
           ${TARGET} no-capieng --prefix="${PREFIX}" --openssldir="${PREFIX}" -static-libgcc
        make install
    )
}

build_openssl () {
    if [ "$(cat ${PREFIX}/.openssl-version)" != "${OPENSSL_VERSION}" ]; then
        tar zxf "download-cache/openssl-${OPENSSL_VERSION}.tar.gz"
        if [ ! -z ${CHOST+x} ]; then
            build_openssl_mingw
        elif [ "${TRAVIS_OS_NAME}" = "osx" ]; then
            build_openssl_osx
        elif [ "${TRAVIS_OS_NAME}" = "linux" ]; then
            build_openssl_linux
        fi
        echo "${OPENSSL_VERSION}" > "${PREFIX}/.openssl-version"
    fi
}

# Download and build crypto lib
if [ "${SSLLIB}" = "openssl" ]; then
    download_openssl
    build_openssl
elif [ "${SSLLIB}" = "mbedtls" ]; then
    download_mbedtls
    build_mbedtls
else
    echo "Invalid crypto lib: ${SSLLIB}"
    exit 1
fi

# Download and build dependencies for mingw cross build
# dependencies are the same as in regular windows installer build
if [ ! -z ${CHOST+x} ]; then
      download_tap_windows
      unzip download-cache/tap-windows-${TAP_WINDOWS_VERSION}.zip

      download_lzo
      build_lzo

      download_pkcs11_helper
      build_pkcs11_helper
fi