library_builders.sh 17 KB
Newer Older
1
2
3
#Functions and environment variables to build various
#native libraries commonly used as dependencies

4
MULTIBUILD_DIR=$(dirname "${BASH_SOURCE[0]}")
xoviat's avatar
xoviat committed
5
source $MULTIBUILD_DIR/_gfortran_utils.sh
6
source $MULTIBUILD_DIR/configure_build.sh
xoviat's avatar
xoviat committed
7
8

GF_LIB_URL="https://3f23b170c54c2533c070-1c8a9b3114517dc5fe17b7c3f8c63a43.ssl.cf2.rackcdn.com"
9
10
# For OpenBLAS
OPENBLAS_LIB_URL="https://anaconda.org/multibuild-wheels-staging/openblas-libs"
11

Andrew Murray's avatar
Andrew Murray committed
12
# Recipes for building some libraries
13
OPENBLAS_VERSION="${OPENBLAS_VERSION:-0.3.10}"
14
# We use system zlib by default - see build_new_zlib
Matthew Brett's avatar
Matthew Brett committed
15
ZLIB_VERSION="${ZLIB_VERSION:-1.2.10}"
Andrew Murray's avatar
Andrew Murray committed
16
LIBPNG_VERSION="${LIBPNG_VERSION:-1.6.37}"
mattip's avatar
mattip committed
17
BZIP2_VERSION="${BZIP2_VERSION:-1.0.7}"
Matthew Brett's avatar
Matthew Brett committed
18
FREETYPE_VERSION="${FREETYPE_VERSION:-2.11.0}"
19
TIFF_VERSION="${TIFF_VERSION:-4.1.0}"
20
JPEG_VERSION="${JPEG_VERSION:-9b}"
21
JPEGTURBO_VERSION="${JPEGTURBO_VERSION:-2.1.3}"
22
OPENJPEG_VERSION="${OPENJPEG_VERSION:-2.1}"
23
LCMS2_VERSION="${LCMS2_VERSION:-2.9}"
24
25
26
GIFLIB_VERSION="${GIFLIB_VERSION:-5.1.3}"
LIBWEBP_VERSION="${LIBWEBP_VERSION:-0.5.0}"
XZ_VERSION="${XZ_VERSION:-5.2.2}"
mattip's avatar
mattip committed
27
LIBYAML_VERSION="${LIBYAML_VERSION:-0.2.2}"
Matthew Brett's avatar
Matthew Brett committed
28
SZIP_VERSION="${SZIP_VERSION:-2.1.1}"
29
HDF5_VERSION="${HDF5_VERSION:-1.10.5}"
mattip's avatar
mattip committed
30
LIBAEC_VERSION="${LIBAEC_VERSION:-1.0.4}"
Matthew Brett's avatar
Matthew Brett committed
31
LZO_VERSION=${LZO_VERSION:-2.10}
Rolando Espinoza's avatar
Rolando Espinoza committed
32
LZF_VERSION="${LZF_VERSION:-3.6}"
33
BLOSC_VERSION=${BLOSC_VERSION:-1.10.2}
Rolando Espinoza's avatar
Rolando Espinoza committed
34
SNAPPY_VERSION="${SNAPPY_VERSION:-1.1.3}"
35
CURL_VERSION=${CURL_VERSION:-7.49.1}
36
NETCDF_VERSION=${NETCDF_VERSION:-4.4.1.1}
37
SWIG_VERSION=${SWIG_VERSION:-4.0.1}
38
PCRE_VERSION=${PCRE_VERSION:-8.38}
39
SUITESPARSE_VERSION=${SUITESPARSE_VERSION:-4.5.6}
40
41
42
43
LIBTOOL_VERSION=${LIBTOOL_VERSION:-2.4.6}
RAGEL_VERSION=${RAGEL_VERSION:-6.10}
FLEX_VERSION=${FLEX_VERSION:-2.6.4}
BISON_VERSION=${BISON_VERSION:-3.0.4}
Alex Rothberg's avatar
Alex Rothberg committed
44
FFTW_VERSION=${FFTW_VERSION:-3.3.7}
mattip's avatar
mattip committed
45
CFITSIO_VERSION=${CFITSIO_VERSION:-3450}
Andrew Murray's avatar
Andrew Murray committed
46
OPENSSL_ROOT=${OPENSSL_ROOT:-openssl-1.1.1l}
Andrew Murray's avatar
Andrew Murray committed
47
# Hash from https://www.openssl.org/source/openssl-1.1.1?.tar.gz.sha256
Andrew Murray's avatar
Andrew Murray committed
48
OPENSSL_HASH=${OPENSSL_HASH:-0b7a3e5e59c34827fe0c3a74b7ec8baef302b98fa80088d7f9153aa16fa76bd1}
49
OPENSSL_DOWNLOAD_URL=${OPENSSL_DOWNLOAD_URL:-https://www.openssl.org/source}
50

Rolando Espinoza's avatar
Rolando Espinoza committed
51

52
ARCHIVE_SDIR=${ARCHIVE_DIR:-archives}
53
54
55


function build_simple {
xoviat's avatar
xoviat committed
56
    # Example: build_simple libpng $LIBPNG_VERSION \
57
    #               https://download.sourceforge.net/libpng tar.gz \
xoviat's avatar
xoviat committed
58
    #               --additional --configure --arguments
59
60
61
    local name=$1
    local version=$2
    local url=$3
62
    local ext=${4:-tar.gz}
63
    local configure_args=${@:5}
64
65
66
67
    if [ -e "${name}-stamp" ]; then
        return
    fi
    local name_version="${name}-${version}"
68
69
    local archive=${name_version}.${ext}
    fetch_unpack $url/$archive
Matthew Brett's avatar
Matthew Brett committed
70
    (cd $name_version \
71
        && ./configure --prefix=$BUILD_PREFIX $configure_args \
72
        && make -j4 \
Matthew Brett's avatar
Matthew Brett committed
73
        && make install)
74
75
76
    touch "${name}-stamp"
}

77
78
79
function build_github {
    # Example: build_github fredrik-johansson/arb 2.11.1
    local path=$1
Matthew Brett's avatar
Matthew Brett committed
80
    local tag_name=$2
81
82
83
84
85
    local configure_args=${@:3}
    local name=`basename "$path"`
    if [ -e "${name}-stamp" ]; then
        return
    fi
86
87
    local out_dir=$(fetch_unpack "https://github.com/${path}/archive/${tag_name}.tar.gz")
    (cd $out_dir \
88
        && ./configure --prefix=$BUILD_PREFIX $configure_args \
89
        && make -j4 \
90
91
92
93
        && make install)
    touch "${name}-stamp"
}

94
95
96
97
98
99
100
101
102
function openblas_get {
    # Get an openblas compiled library from
    # https://anaconda.org/multibuild-wheels-staging/openblas-libs
    # The general form of the link is (under the URL above)
    # URL/v0.3.10/downloads/openblas-v0.3.10-manylinux2010_x86_64.tar.gz
    local plat=${1:-$}
    # qual could be 64 to get a 64-bit version
    local qual=$2
    local prefix=openblas${qual}-v$OPENBLAS_VERSION
103
    local manylinux=manylinux${MB_ML_VER}
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
    local fname="$prefix-${manylinux}_${plat}.tar.gz"
    local out_fname="${ARCHIVE_SDIR}/$fname"
    if [ ! -e "$out_fname" ]; then
        local webname=${OPENBLAS_LIB_URL}/v${OPENBLAS_VERSION}/download/${fname}
        curl -L "$webname" > $out_fname || exit 1
        # make sure it is not an HTML document of download failure
        local ok=$(file $out_fname | grep "HTML document")
        if [ -n "$ok" ]; then
            echo Fetching "${OPENBLAS_LIB_URL}/$fname" failed;
            exit 1;
        fi
    fi
    echo "$out_fname"
}

119
120
function build_openblas {
    if [ -e openblas-stamp ]; then return; fi
Andrew Murray's avatar
Andrew Murray committed
121
    if [ -n "$IS_MACOS" ]; then
122
123
        brew install openblas
        brew link --force openblas
124
    else
125
        mkdir -p $ARCHIVE_SDIR
Matthew Brett's avatar
Matthew Brett committed
126
        local plat=${1:-${PLAT:-x86_64}}
127
        local tar_path=$(abspath $(openblas_get $plat))
xoviat's avatar
xoviat committed
128
        (cd / && tar zxf $tar_path)
129
    fi
130
131
132
133
134
    touch openblas-stamp
}

function build_zlib {
    # Gives an old but safe version
Andrew Murray's avatar
Andrew Murray committed
135
    if [ -n "$IS_MACOS" ]; then return; fi  # OSX has zlib already
136
    if [ -e zlib-stamp ]; then return; fi
John Jones's avatar
John Jones committed
137
138
139
    if [ -n "$IS_ALPINE" ]; then
        apk add zlib-dev
    elif [[ $MB_ML_VER == "_2_24" ]]; then
mattip's avatar
mattip committed
140
        # debian:9 based distro
mattip's avatar
mattip committed
141
142
        apt-get install -y zlib1g-dev
    else
mattip's avatar
mattip committed
143
        #centos based distro
mattip's avatar
mattip committed
144
145
        yum_install zlib-devel
    fi
146
147
148
149
150
    touch zlib-stamp
}

function build_new_zlib {
    # Careful, this one may cause yum to segfault
151
    # Fossils directory should also contain latest
152
    build_simple zlib $ZLIB_VERSION https://zlib.net/fossils
153
154
155
156
}

function build_jpeg {
    if [ -e jpeg-stamp ]; then return; fi
157
158
    fetch_unpack http://ijg.org/files/jpegsrc.v${JPEG_VERSION}.tar.gz
    (cd jpeg-${JPEG_VERSION} \
Matthew Brett's avatar
Matthew Brett committed
159
        && ./configure --prefix=$BUILD_PREFIX \
160
        && make -j4 \
Matthew Brett's avatar
Matthew Brett committed
161
        && make install)
162
163
164
    touch jpeg-stamp
}

Andrew Murray's avatar
Andrew Murray committed
165
166
167
168
169
170
171
172
173
174
175
176
function build_libjpeg_turbo {
    if [ -e jpeg-stamp ]; then return; fi
    local cmake=$(get_modern_cmake)
    fetch_unpack https://download.sourceforge.net/libjpeg-turbo/libjpeg-turbo-${JPEGTURBO_VERSION}.tar.gz
    (cd libjpeg-turbo-${JPEGTURBO_VERSION} \
        && $cmake -G"Unix Makefiles" -DCMAKE_INSTALL_PREFIX=/usr/local -DCMAKE_INSTALL_LIBDIR=/usr/local/lib . \
        && make install)

    # Prevent build_jpeg
    touch jpeg-stamp
}

177
178
function build_libpng {
    build_zlib
179
    build_simple libpng $LIBPNG_VERSION https://download.sourceforge.net/libpng
180
181
182
}

function build_bzip2 {
Andrew Murray's avatar
Andrew Murray committed
183
    if [ -n "$IS_MACOS" ]; then return; fi  # OSX has bzip2 libs already
184
    if [ -e bzip2-stamp ]; then return; fi
185
    fetch_unpack https://mirrors.kernel.org/sourceware/bzip2/bzip2-${BZIP2_VERSION}.tar.gz
Matthew Brett's avatar
Matthew Brett committed
186
187
188
    (cd bzip2-${BZIP2_VERSION} \
        && make -f Makefile-libbz2_so \
        && make install PREFIX=$BUILD_PREFIX)
189
190
191
192
193
194
    touch bzip2-stamp
}

function build_tiff {
    build_zlib
    build_jpeg
195
    ensure_xz
196
    build_simple tiff $TIFF_VERSION https://download.osgeo.org/libtiff
197
198
}

199
function get_modern_cmake {
Andrew Murray's avatar
Andrew Murray committed
200
    # Install cmake >= 2.8
Matthew Brett's avatar
Matthew Brett committed
201
    local cmake=cmake
Andrew Murray's avatar
Andrew Murray committed
202
    if [ -n "$IS_MACOS" ]; then
203
        brew install cmake > /dev/null
John Jones's avatar
John Jones committed
204
    elif [ -n "$IS_ALPINE" ]; then
205
        apk add cmake > /dev/null
mattip's avatar
mattip committed
206
    elif [[ $MB_ML_VER == "_2_24" ]]; then
mattip's avatar
mattip committed
207
        # debian:9 based distro
mattip's avatar
mattip committed
208
        apt-get install -y cmake
209
    else
210
211
212
        if [ "`yum search cmake | grep ^cmake28\.`" ]; then
            cmake=cmake28
        fi
mattip's avatar
mattip committed
213
        # centos based distro
214
        yum_install $cmake > /dev/null
215
    fi
216
217
218
    echo $cmake
}

219
220
221
222
223
function get_cmake {
	>&2 echo "get_cmake has been deprecated. Please use get_modern_cmake instead."
	get_modern_cmake
}

224
225
function build_openjpeg {
    if [ -e openjpeg-stamp ]; then return; fi
Matthew Brett's avatar
Matthew Brett committed
226
227
228
229
    build_zlib
    build_libpng
    build_tiff
    build_lcms2
230
    local cmake=$(get_modern_cmake)
231
232
233
234
    local archive_prefix="v"
    if [ $(lex_ver $OPENJPEG_VERSION) -lt $(lex_ver 2.1.1) ]; then
        archive_prefix="version."
    fi
235
236
    local out_dir=$(fetch_unpack https://github.com/uclouvain/openjpeg/archive/${archive_prefix}${OPENJPEG_VERSION}.tar.gz)
    (cd $out_dir \
Matthew Brett's avatar
Matthew Brett committed
237
238
        && $cmake -DCMAKE_INSTALL_PREFIX=$BUILD_PREFIX . \
        && make install)
239
240
241
242
243
    touch openjpeg-stamp
}

function build_lcms2 {
    build_tiff
244
    build_simple lcms2 $LCMS2_VERSION https://downloads.sourceforge.net/project/lcms/lcms/$LCMS2_VERSION
245
246
247
}

function build_giflib {
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
    local name=giflib
    local version=$GIFLIB_VERSION
    local url=https://downloads.sourceforge.net/project/giflib
    if [ $(lex_ver $GIFLIB_VERSION) -lt $(lex_ver 5.1.5) ]; then
        build_simple $name $version $url
    else
        local ext=tar.gz
        if [ -e "${name}-stamp" ]; then
            return
        fi
        local name_version="${name}-${version}"
        local archive=${name_version}.${ext}
        fetch_unpack $url/$archive
        (cd $name_version \
            && make -j4 \
            && make install)
        touch "${name}-stamp"
    fi
266
267
268
}

function build_xz {
269
    build_simple xz $XZ_VERSION https://tukaani.org/xz
270
271
}

272
273
function ensure_xz {
	if [[ ! $(type -P "xz") ]]; then
Andrew Murray's avatar
Andrew Murray committed
274
275
276
277
278
	    if [ -n "$IS_MACOS" ]; then
	        brew install xz
	    else
	        build_xz
	    fi
279
280
281
	fi
}

282
283
284
285
function build_libwebp {
    build_libpng
    build_tiff
    build_giflib
286
    build_simple libwebp $LIBWEBP_VERSION \
287
        https://storage.googleapis.com/downloads.webmproject.org/releases/webp tar.gz \
Thomas A Caswell's avatar
Thomas A Caswell committed
288
        --enable-libwebpmux --enable-libwebpdemux
289
290
291
292
293
}

function build_freetype {
    build_libpng
    build_bzip2
294
    build_simple freetype $FREETYPE_VERSION https://download.savannah.gnu.org/releases/freetype
295
296
297
}

function build_libyaml {
298
    build_simple yaml $LIBYAML_VERSION https://pyyaml.org/download/libyaml
299
}
Matthew Brett's avatar
Matthew Brett committed
300
301
302
303

function build_szip {
    # Build szip without encoding (patent restrictions)
    build_zlib
304
    build_simple szip $SZIP_VERSION \
Matthew Brett's avatar
Matthew Brett committed
305
        https://support.hdfgroup.org/ftp/lib-external/szip/$SZIP_VERSION/src tar.gz \
306
        --enable-encoding=no
Matthew Brett's avatar
Matthew Brett committed
307
308
309
310
}

function build_hdf5 {
    if [ -e hdf5-stamp ]; then return; fi
Matthew Brett's avatar
Matthew Brett committed
311
    build_zlib
312
313
    # libaec is a drop-in replacement for szip
    build_libaec
Andrew Murray's avatar
Andrew Murray committed
314
    local hdf5_url=https://support.hdfgroup.org/ftp/HDF5/releases
315
316
    local short=$(echo $HDF5_VERSION | awk -F "." '{printf "%d.%d", $1, $2}')
    fetch_unpack $hdf5_url/hdf5-$short/hdf5-$HDF5_VERSION/src/hdf5-$HDF5_VERSION.tar.gz
Matthew Brett's avatar
Matthew Brett committed
317
    (cd hdf5-$HDF5_VERSION \
318
        && export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$BUILD_PREFIX/lib \
Matthew Brett's avatar
Matthew Brett committed
319
        && ./configure --with-szlib=$BUILD_PREFIX --prefix=$BUILD_PREFIX \
Tom Kooij's avatar
Tom Kooij committed
320
        --enable-threadsafe --enable-unsupported --with-pthread=yes \
321
        && make -j4 \
Matthew Brett's avatar
Matthew Brett committed
322
323
324
        && make install)
    touch hdf5-stamp
}
325
326
327

function build_libaec {
    if [ -e libaec-stamp ]; then return; fi
mattip's avatar
mattip committed
328
    local root_name=libaec-1.0.4
329
330
    local tar_name=${root_name}.tar.gz
    # Note URL will change for each version
mattip's avatar
mattip committed
331
    fetch_unpack https://gitlab.dkrz.de/k202009/libaec/uploads/ea0b7d197a950b0c110da8dfdecbb71f/${tar_name}
332
    (cd $root_name \
Matthew Brett's avatar
Matthew Brett committed
333
        && ./configure --prefix=$BUILD_PREFIX \
334
335
336
337
        && make \
        && make install)
    touch libaec-stamp
}
338
339
340

function build_blosc {
    if [ -e blosc-stamp ]; then return; fi
341
    local cmake=$(get_modern_cmake)
342
343
344
345
    fetch_unpack https://github.com/Blosc/c-blosc/archive/v${BLOSC_VERSION}.tar.gz
    (cd c-blosc-${BLOSC_VERSION} \
        && $cmake -DCMAKE_INSTALL_PREFIX=$BUILD_PREFIX . \
        && make install)
Andrew Murray's avatar
Andrew Murray committed
346
    if [ -n "$IS_MACOS" ]; then
347
348
349
350
351
352
353
354
        # Fix blosc library id bug
        for lib in $(ls ${BUILD_PREFIX}/lib/libblosc*.dylib); do
            install_name_tool -id $lib $lib
        done
    fi
    touch blosc-stamp
}

Rolando Espinoza's avatar
Rolando Espinoza committed
355
356
357
358
function build_snappy {
    build_simple snappy $SNAPPY_VERSION https://github.com/google/snappy/releases/download/$SNAPPY_VERSION
}

359
360
function build_lzo {
    if [ -e lzo-stamp ]; then return; fi
361
    fetch_unpack https://www.oberhumer.com/opensource/lzo/download/lzo-${LZO_VERSION}.tar.gz
362
363
364
365
366
367
    (cd lzo-${LZO_VERSION} \
        && ./configure --prefix=$BUILD_PREFIX --enable-shared \
        && make \
        && make install)
    touch lzo-stamp
}
368

Rolando Espinoza's avatar
Rolando Espinoza committed
369
370
371
372
function build_lzf {
    build_simple liblzf $LZF_VERSION http://dist.schmorp.de/liblzf
}

373
374
function build_curl {
    if [ -e curl-stamp ]; then return; fi
Matthew Brett's avatar
Matthew Brett committed
375
    local flags="--prefix=$BUILD_PREFIX"
Andrew Murray's avatar
Andrew Murray committed
376
    if [ -n "$IS_MACOS" ]; then
377
        flags="$flags --with-darwinssl"
378
    else  # manylinux
379
        flags="$flags --with-ssl"
Matthew Brett's avatar
Matthew Brett committed
380
381
        build_openssl
    fi
382
383
    fetch_unpack https://curl.haxx.se/download/curl-${CURL_VERSION}.tar.gz
    (cd curl-${CURL_VERSION} \
Andrew Murray's avatar
Andrew Murray committed
384
        && if [ -z "$IS_MACOS" ]; then \
385
386
        LIBS=-ldl ./configure $flags; else \
        ./configure $flags; fi\
387
        && make -j4 \
388
389
390
391
        && make install)
    touch curl-stamp
}

Matthew Brett's avatar
Matthew Brett committed
392
393
394
395
396
397
function check_sha256sum {
    local fname=$1
    if [ -z "$fname" ]; then echo "Need path"; exit 1; fi
    local sha256=$2
    if [ -z "$sha256" ]; then echo "Need SHA256 hash"; exit 1; fi
    echo "${sha256}  ${fname}" > ${fname}.sha256
Andrew Murray's avatar
Andrew Murray committed
398
    if [ -n "$IS_MACOS" ]; then
Matthew Brett's avatar
Matthew Brett committed
399
400
401
402
403
404
405
406
407
408
409
410
411
        shasum -a 256 -c ${fname}.sha256
    else
        sha256sum -c ${fname}.sha256
    fi
    rm ${fname}.sha256
}

function build_openssl {
    if [ -e openssl-stamp ]; then return; fi
    fetch_unpack ${OPENSSL_DOWNLOAD_URL}/${OPENSSL_ROOT}.tar.gz
    check_sha256sum $ARCHIVE_SDIR/${OPENSSL_ROOT}.tar.gz ${OPENSSL_HASH}
    (cd ${OPENSSL_ROOT} \
        && ./config no-ssl2 no-shared -fPIC --prefix=$BUILD_PREFIX \
412
        && make -j4 \
Matthew Brett's avatar
Matthew Brett committed
413
414
415
416
        && make install)
    touch openssl-stamp
}

417
418
419
420
421
422
function build_netcdf {
    if [ -e netcdf-stamp ]; then return; fi
    build_hdf5
    build_curl
    fetch_unpack https://github.com/Unidata/netcdf-c/archive/v${NETCDF_VERSION}.tar.gz
    (cd netcdf-c-${NETCDF_VERSION} \
Matthew Brett's avatar
Matthew Brett committed
423
        && ./configure --prefix=$BUILD_PREFIX --enable-dap \
424
        && make -j4 \
425
426
        && make install)
    touch netcdf-stamp
Josep Pon Farreny's avatar
Josep Pon Farreny committed
427
}
xoviat's avatar
xoviat committed
428

429
function build_pcre {
Josep Pon Farreny's avatar
Josep Pon Farreny committed
430
    build_simple pcre $PCRE_VERSION https://sourceforge.net/projects/pcre/files/pcre/${PCRE_VERSION}
xoviat's avatar
xoviat committed
431
432
}

xoviat's avatar
xoviat committed
433
function build_swig {
Andrew Murray's avatar
Andrew Murray committed
434
    if [ -e swig-stamp ]; then return; fi
Andrew Murray's avatar
Andrew Murray committed
435
    if [ -n "$IS_MACOS" ]; then
xoviat's avatar
xoviat committed
436
437
        brew install swig > /dev/null
    else
438
        build_pcre
439
        build_simple swig $SWIG_VERSION https://prdownloads.sourceforge.net/swig
xoviat's avatar
xoviat committed
440
    fi
Andrew Murray's avatar
Andrew Murray committed
441
    touch swig-stamp
xoviat's avatar
xoviat committed
442
443
}

xoviat's avatar
xoviat committed
444
function build_suitesparse {
Andrew Murray's avatar
Andrew Murray committed
445
    if [ -e suitesparse-stamp ]; then return; fi
Andrew Murray's avatar
Andrew Murray committed
446
    if [ -n "$IS_MACOS" ]; then
xoviat's avatar
xoviat committed
447
        brew install suite-sparse > /dev/null
John Jones's avatar
John Jones committed
448
    elif [ -n "$IS_ALPINE" ]; then
449
        apk add suitesparse-dev
mattip's avatar
mattip committed
450
    elif [[ $MB_ML_VER == "_2_24" ]]; then
mattip's avatar
mattip committed
451
        # debian:9 based distro
mattip's avatar
mattip committed
452
        apt-get install -y libsuitesparse-dev > /dev/null
xoviat's avatar
xoviat committed
453
    else
mattip's avatar
mattip committed
454
        # centos based distro
455
        yum_install suitesparse-devel > /dev/null
xoviat's avatar
xoviat committed
456
    fi
Andrew Murray's avatar
Andrew Murray committed
457
    touch suitesparse-stamp
xoviat's avatar
xoviat committed
458
}
459
460

function build_libtool {
461
    build_simple libtool $LIBTOOL_VERSION https://ftp.gnu.org/gnu/libtool
462
463
464
}

function build_ragel {
Matthew Brett's avatar
Matthew Brett committed
465
    local htprefix=https
Andrew Murray's avatar
Andrew Murray committed
466
    if [ -n "$IS_MACOS" ]; then
Matthew Brett's avatar
Matthew Brett committed
467
468
469
470
471
472
        # Invalid certificate, when using macOS curl.
        # https://security.stackexchange.com/questions/232445/https-connection-to-specific-sites-fail-with-curl-on-macos
        # Cert will likely be removed by Safari update in due course.
        htprefix=http
    fi
    build_simple ragel $RAGEL_VERSION ${htprefix}://www.colm.net/files/ragel
473
474
475
}

function build_bison {
476
    build_simple bison $BISON_VERSION https://ftp.gnu.org/gnu/bison
477
478
479
480
481
482
483
}

function build_flex {
    # the flex repository's git tags have a 'v' prefix
    build_simple flex $FLEX_VERSION \
        https://github.com/westes/flex/releases/download/v$FLEX_VERSION
}
Alex Rothberg's avatar
Alex Rothberg committed
484

Alex Rothberg's avatar
Alex Rothberg committed
485
486
487
488
function build_fftw_case {
    local configure_args=${@:0}

    build_simple fftw $FFTW_VERSION \
489
        http://www.fftw.org tar.gz \
Alex Rothberg's avatar
Alex Rothberg committed
490
491
492
493
494
        --with-pic --enable-shared --enable-threads --disable-fortran \
        $configure_args
    # eval cd fftw-$FFTW_VERSION/tests && make check-local && cd -
}

Alex Rothberg's avatar
Alex Rothberg committed
495
496
function build_fftw {
    echo 'Building fftw'
Alex Rothberg's avatar
Alex Rothberg committed
497
498
499
500

    # Save off current CFLAGS
    local old_cflags=$CFLAGS

Alex Rothberg's avatar
Alex Rothberg committed
501
502
503
504
505
    # Taken from: https://github.com/conda-forge/fftw-feedstock/blob/master/recipe/build.sh
    export CFLAGS="-O3 -fomit-frame-pointer -fstrict-aliasing -ffast-math"

    # single
    echo 'Building fftw: single'
Alex Rothberg's avatar
Alex Rothberg committed
506
    build_fftw_case --enable-float --enable-sse --enable-sse2 --enable-avx
Alex Rothberg's avatar
Alex Rothberg committed
507
508
509
510
511
512

    # Clear stamp file which prevents subsequent builds
    rm fftw-stamp

    # double
    echo 'Building fftw: double'
Alex Rothberg's avatar
Alex Rothberg committed
513
    build_fftw_case --enable-sse2 --enable-avx
Alex Rothberg's avatar
Alex Rothberg committed
514
515
516
517
518
519

    # Clear stamp file which prevents subsequent builds
    rm fftw-stamp

    # long double (SSE2 and AVX not supported)
    echo 'Building fftw: long double'
Alex Rothberg's avatar
Alex Rothberg committed
520
    build_fftw_case --enable-long-double
Alex Rothberg's avatar
Alex Rothberg committed
521
522
523
524
525
526
527
528
529
530
531
532

    # Taken from: https://github.com/conda-forge/pyfftw-feedstock/blob/master/recipe/build.sh
    export C_INCLUDE_PATH=$BUILD_PREFIX/include  # required as fftw3.h installed here

    # define STATIC_FFTW_DIR so the patched setup.py will statically link FFTW
    export STATIC_FFTW_DIR=$BUILD_PREFIX/lib

    # TODO: These can be made into asserts per:
    # https://github.com/conda-forge/fftw-feedstock/blob/8eaa8a1c63e7fcb97c63c1ee8e33c62ef3afa9c7/recipe/meta.yaml#L29-L52
    ls -l $C_INCLUDE_PATH/fftw3*
    ls -l $STATIC_FFTW_DIR/libfftw3*

Alex Rothberg's avatar
Alex Rothberg committed
533
534
    # restore CFLAGS
    export CFLAGS=$old_cflags
Alex Rothberg's avatar
Alex Rothberg committed
535
}
Simon Conseil's avatar
Simon Conseil committed
536
537

function build_cfitsio {
Simon Conseil's avatar
Simon Conseil committed
538
    if [ -e cfitsio-stamp ]; then return; fi
Andrew Murray's avatar
Andrew Murray committed
539
    if [ -n "$IS_MACOS" ]; then
Simon Conseil's avatar
Simon Conseil committed
540
541
542
543
544
545
546
547
548
        brew install cfitsio
    else
        # cannot use build_simple because cfitsio has no dash between name and version
        local cfitsio_name_ver=cfitsio${CFITSIO_VERSION}
        fetch_unpack https://heasarc.gsfc.nasa.gov/FTP/software/fitsio/c/${cfitsio_name_ver}.tar.gz
        (cd cfitsio \
            && ./configure --prefix=$BUILD_PREFIX \
            && make shared && make install)
    fi
Simon Conseil's avatar
Simon Conseil committed
549
    touch cfitsio-stamp
Simon Conseil's avatar
Simon Conseil committed
550
}