configure 47.2 KB
Newer Older
1
#!/bin/bash
2

Loren Merritt's avatar
Loren Merritt committed
3
if test x"$1" = x"-h" -o x"$1" = x"--help" ; then
Yasuhiro Ikeda's avatar
Yasuhiro Ikeda committed
4
5
cat <<EOF
Usage: ./configure [options]
Loren Merritt's avatar
Loren Merritt committed
6

Yasuhiro Ikeda's avatar
Yasuhiro Ikeda committed
7
8
Help:
  -h, --help               print this message
Yasuhiro Ikeda's avatar
Yasuhiro Ikeda committed
9

Yasuhiro Ikeda's avatar
Yasuhiro Ikeda committed
10
11
12
13
14
15
16
17
18
19
20
Standard options:
  --prefix=PREFIX          install architecture-independent files in PREFIX
                           [/usr/local]
  --exec-prefix=EPREFIX    install architecture-dependent files in EPREFIX
                           [PREFIX]
  --bindir=DIR             install binaries in DIR [EPREFIX/bin]
  --libdir=DIR             install libs in DIR [EPREFIX/lib]
  --includedir=DIR         install includes in DIR [PREFIX/include]
  --extra-asflags=EASFLAGS add EASFLAGS to ASFLAGS
  --extra-cflags=ECFLAGS   add ECFLAGS to CFLAGS
  --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS
21
  --extra-rcflags=ERCFLAGS add ERCFLAGS to RCFLAGS
Yasuhiro Ikeda's avatar
Yasuhiro Ikeda committed
22
23
24

Configuration options:
  --disable-cli            disable cli
Nikoli's avatar
Nikoli committed
25
26
27
  --system-libx264         use system libx264 instead of internal
  --enable-shared          build shared library
  --enable-static          build static library
Steve Borho's avatar
Steve Borho committed
28
  --disable-opencl         disable OpenCL features
Yasuhiro Ikeda's avatar
Yasuhiro Ikeda committed
29
30
  --disable-gpl            disable GPL-only features
  --disable-thread         disable multithreaded encoding
31
  --disable-win32thread    disable win32threads (windows only)
Yasuhiro Ikeda's avatar
Yasuhiro Ikeda committed
32
33
  --disable-interlaced     disable interlaced encoding support
  --bit-depth=BIT_DEPTH    set output bit depth (8-10) [8]
34
  --chroma-format=FORMAT   output chroma format (420, 422, 444, all) [all]
Yasuhiro Ikeda's avatar
Yasuhiro Ikeda committed
35
36
37

Advanced options:
  --disable-asm            disable platform-specific assembly optimizations
38
  --enable-lto             enable link-time optimization
Yasuhiro Ikeda's avatar
Yasuhiro Ikeda committed
39
40
41
  --enable-debug           add -g
  --enable-gprof           add -pg
  --enable-strip           add -s
Yasuhiro Ikeda's avatar
Yasuhiro Ikeda committed
42
  --enable-pic             build position-independent code
Yasuhiro Ikeda's avatar
Yasuhiro Ikeda committed
43
44

Cross-compilation:
Yasuhiro Ikeda's avatar
Yasuhiro Ikeda committed
45
46
47
48
  --host=HOST              build programs to run on HOST
  --cross-prefix=PREFIX    use PREFIX for compilation tools
  --sysroot=SYSROOT        root of cross-build tree

Yasuhiro Ikeda's avatar
Yasuhiro Ikeda committed
49
External library support:
50
  --disable-avs            disable avisynth support
Yasuhiro Ikeda's avatar
Yasuhiro Ikeda committed
51
52
53
54
  --disable-swscale        disable swscale support
  --disable-lavf           disable libavformat support
  --disable-ffms           disable ffmpegsource support
  --disable-gpac           disable gpac support
55
  --disable-lsmash         disable lsmash support
Yasuhiro Ikeda's avatar
Yasuhiro Ikeda committed
56

Yasuhiro Ikeda's avatar
Yasuhiro Ikeda committed
57
EOF
Loren Merritt's avatar
Loren Merritt committed
58
59
60
exit 1
fi

Diogo Franco's avatar
Diogo Franco committed
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
log_check() {
    echo -n "checking $1... " >> config.log
}

log_ok() {
    echo "yes" >> config.log
}

log_fail() {
    echo "no" >> config.log
}

log_msg() {
    echo "$1" >> config.log
}

Steven Walters's avatar
Steven Walters committed
77
cc_cflags() {
78
79
    # several non gcc compilers issue an incredibly large number of warnings on high warning levels,
    # suppress them by reducing the warning level rather than having to use #pragmas
Steven Walters's avatar
Steven Walters committed
80
81
82
83
    for arg in $*; do
        [[ "$arg" = -falign-loops* ]] && arg=
        [ "$arg" = -fno-tree-vectorize ] && arg=
        [ "$arg" = -Wshadow ] && arg=
Steven Walters's avatar
Steven Walters committed
84
        [ "$arg" = -Wno-maybe-uninitialized ] && arg=
85
86
87
        [[ "$arg" = -mpreferred-stack-boundary* ]] && arg=
        [[ "$arg" = -l* ]] && arg=
        [[ "$arg" = -L* ]] && arg=
Steven Walters's avatar
Steven Walters committed
88
        if [ $compiler_style = MS ]; then
89
90
            [ "$arg" = -ffast-math ] && arg="-fp:fast"
            [ "$arg" = -Wall ] && arg=
Steven Walters's avatar
Steven Walters committed
91
            [ "$arg" = -Werror ] && arg="-W3 -WX"
Steven Walters's avatar
Steven Walters committed
92
93
94
95
96
            [ "$arg" = -g ] && arg=-Z7
            [ "$arg" = -fomit-frame-pointer ] && arg=
            [ "$arg" = -s ] && arg=
            [ "$arg" = -fPIC ] && arg=
        else
97
98
            [ "$arg" = -ffast-math ] && arg=
            [ "$arg" = -Wall ] && arg=
Steven Walters's avatar
Steven Walters committed
99
            [ "$arg" = -Werror ] && arg="-w3 -Werror"
Steven Walters's avatar
Steven Walters committed
100
        fi
Steven Walters's avatar
Steven Walters committed
101
        [ $compiler = CL -a "$arg" = -O3 ] && arg=-O2
Steven Walters's avatar
Steven Walters committed
102
103
104
105
106

        [ -n "$arg" ] && echo -n "$arg "
    done
}

Steven Walters's avatar
Steven Walters committed
107
cl_ldflags() {
Steven Walters's avatar
Steven Walters committed
108
109
    for arg in $*; do
        arg=${arg/LIBPATH/libpath}
110
111
112
113
        [ "${arg#-libpath:}" == "$arg" -a "${arg#-l}" != "$arg" ] && arg=${arg#-l}.lib
        [ "${arg#-L}" != "$arg" ] && arg=-libpath:${arg#-L}
        [ "$arg" = -Wl,--large-address-aware ] && arg=-largeaddressaware
        [ "$arg" = -s ] && arg=
Steven Walters's avatar
Steven Walters committed
114
        [ "$arg" = -Wl,-Bsymbolic ] && arg=
Steven Walters's avatar
Steven Walters committed
115
116
117
118
        [ "$arg" = -fno-tree-vectorize ] && arg=
        [ "$arg" = -Werror ] && arg=
        [ "$arg" = -Wshadow ] && arg=
        [ "$arg" = -Wmaybe-uninitialized ] && arg=
119
        [[ "$arg" = -Qdiag-error* ]] && arg=
Steven Walters's avatar
Steven Walters committed
120
121
122
123

        arg=${arg/pthreadGC/pthreadVC}
        [ "$arg" = avifil32.lib ] && arg=vfw32.lib
        [ "$arg" = gpac_static.lib ] && arg=libgpac_static.lib
124
        [ "$arg" = x264.lib ] && arg=libx264.lib
Steven Walters's avatar
Steven Walters committed
125
126
127
128
129

        [ -n "$arg" ] && echo -n "$arg "
    done
}

130
cc_check() {
Diogo Franco's avatar
Diogo Franco committed
131
    if [ -z "$3" ]; then
132
        if [ -z "$1$2" ]; then
Diogo Franco's avatar
Diogo Franco committed
133
            log_check "whether $CC works"
134
135
        elif [ -z "$1" ]; then
            log_check "for $2"
Diogo Franco's avatar
Diogo Franco committed
136
137
138
139
        else
            log_check "for $1"
        fi
    elif [ -z "$1" ]; then
140
141
142
143
144
        if [ -z "$2" ]; then
            log_check "whether $CC supports $3"
        else
            log_check "whether $CC supports $3 with $2"
        fi
Diogo Franco's avatar
Diogo Franco committed
145
    else
146
        log_check "for $3 in $1";
Diogo Franco's avatar
Diogo Franco committed
147
    fi
148
    rm -f conftest.c
149
150
151
    for arg in $1; do
        echo "#include <$arg>" >> conftest.c
    done
Steven Walters's avatar
Steven Walters committed
152
153
    echo "int main (void) { $3 return 0; }" >> conftest.c
    if [ $compiler_style = MS ]; then
154
        cc_cmd="$CC conftest.c $(cc_cflags $CFLAGS $CHECK_CFLAGS $2) -link $(cl_ldflags $2 $LDFLAGSCLI $LDFLAGS)"
Steven Walters's avatar
Steven Walters committed
155
    else
156
        cc_cmd="$CC conftest.c $CFLAGS $CHECK_CFLAGS $2 $LDFLAGSCLI $LDFLAGS -o conftest"
Steven Walters's avatar
Steven Walters committed
157
158
    fi
    if $cc_cmd >conftest.log 2>&1; then
Diogo Franco's avatar
Diogo Franco committed
159
160
161
162
163
164
165
        res=$?
        log_ok
    else
        res=$?
        log_fail
        log_msg "Failed commandline was:"
        log_msg "--------------------------------------------------"
Steven Walters's avatar
Steven Walters committed
166
        log_msg "$cc_cmd"
167
168
        cat conftest.log >> config.log
        log_msg "--------------------------------------------------"
169
170
171
172
        log_msg "Failed program was:"
        log_msg "--------------------------------------------------"
        cat conftest.c >> config.log
        log_msg "--------------------------------------------------"
173
174
175
176
177
178
179
    fi
    return $res
}

cpp_check() {
    log_check "whether $3 is true"
    rm -f conftest.c
180
181
182
    for arg in $1; do
        echo "#include <$arg>" >> conftest.c
    done
183
    echo -e "#if !($3) \n#error $4 \n#endif " >> conftest.c
Steven Walters's avatar
Steven Walters committed
184
185
186
187
188
189
    if [ $compiler_style = MS ]; then
        cpp_cmd="$CC conftest.c $(cc_cflags $CFLAGS $2) -P"
    else
        cpp_cmd="$CC conftest.c $CFLAGS $2 -E -o conftest"
    fi
    if $cpp_cmd >conftest.log 2>&1; then
190
191
192
193
194
195
        res=$?
        log_ok
    else
        res=$?
        log_fail
        log_msg "--------------------------------------------------"
Diogo Franco's avatar
Diogo Franco committed
196
197
        cat conftest.log >> config.log
        log_msg "--------------------------------------------------"
198
199
200
201
        log_msg "Failed program was:"
        log_msg "--------------------------------------------------"
        cat conftest.c >> config.log
        log_msg "--------------------------------------------------"
Diogo Franco's avatar
Diogo Franco committed
202
203
    fi
    return $res
204
205
}

206
as_check() {
Diogo Franco's avatar
Diogo Franco committed
207
    log_check "whether $AS supports $1"
208
209
210
    echo "$1" > conftest$AS_EXT
    as_cmd="$AS conftest$AS_EXT $ASFLAGS $2 -o conftest.o"
    if $as_cmd >conftest.log 2>&1; then
Diogo Franco's avatar
Diogo Franco committed
211
212
213
214
215
216
217
        res=$?
        log_ok
    else
        res=$?
        log_fail
        log_msg "Failed commandline was:"
        log_msg "--------------------------------------------------"
218
        log_msg "$as_cmd"
Diogo Franco's avatar
Diogo Franco committed
219
220
        cat conftest.log >> config.log
        log_msg "--------------------------------------------------"
221
222
        log_msg "Failed program was:"
        log_msg "--------------------------------------------------"
223
        cat conftest$AS_EXT >> config.log
224
        log_msg "--------------------------------------------------"
Diogo Franco's avatar
Diogo Franco committed
225
226
    fi
    return $res
227
228
}

Henrik Gramner's avatar
Henrik Gramner committed
229
230
231
rc_check() {
    log_check "whether $RC works"
    echo "$1" > conftest.rc
Steven Walters's avatar
Steven Walters committed
232
    if [ $compiler = GNU ]; then
233
        rc_cmd="$RC $RCFLAGS -o conftest.o conftest.rc"
Steven Walters's avatar
Steven Walters committed
234
235
    else
        rc_cmd="$RC $RCFLAGS -foconftest.o conftest.rc"
236
237
    fi
    if $rc_cmd >conftest.log 2>&1; then
Henrik Gramner's avatar
Henrik Gramner committed
238
239
240
241
242
243
244
        res=$?
        log_ok
    else
        res=$?
        log_fail
        log_msg "Failed commandline was:"
        log_msg "--------------------------------------------------"
245
        log_msg "$rc_cmd"
Henrik Gramner's avatar
Henrik Gramner committed
246
247
248
249
250
251
252
253
254
255
        cat conftest.log >> config.log
        log_msg "--------------------------------------------------"
        log_msg "Failed program was:"
        log_msg "--------------------------------------------------"
        cat conftest.rc >> config.log
        log_msg "--------------------------------------------------"
    fi
    return $res
}

Diogo Franco's avatar
Diogo Franco committed
256
define() {
Steven Walters's avatar
Steven Walters committed
257
    echo "#define $1$([ -n "$2" ] && echo " $2" || echo " 1")" >> config.h
Diogo Franco's avatar
Diogo Franco committed
258
259
}

260
die() {
Diogo Franco's avatar
Diogo Franco committed
261
    log_msg "DIED: $@"
262
263
264
265
    echo "$@"
    exit 1
}

266
267
configure_system_override() {
    log_check "system libx264 configuration"
268
269
    x264_config_path="$1/x264_config.h"
    if [ -e "$x264_config_path" ]; then
270
271
        res=$?
        log_ok
272
        arg="$(grep '#define X264_GPL ' $x264_config_path | sed -e 's/#define X264_GPL *//; s/ *$//')"
273
274
275
276
        if [ -n "$arg" ]; then
            [ "$arg" = 0 ] && arg="no" || arg="yes"
            [ "$arg" != "$gpl" ] && die "Incompatible license with system libx264"
        fi
277
        arg="$(grep '#define X264_BIT_DEPTH ' $x264_config_path | sed -e 's/#define X264_BIT_DEPTH *//; s/ *$//')"
278
279
280
        if [ -n "$arg" ]; then
            if [ "$arg" != "$bit_depth" ]; then
                echo "Override output bit depth with system libx264 configuration"
281
                bit_depth="$arg"
282
283
            fi
        fi
284
        arg="$(grep '#define X264_CHROMA_FORMAT ' $x264_config_path | sed -e 's/#define X264_CHROMA_FORMAT *//; s/ *$//')"
285
286
287
288
        if [ -n "$arg" ]; then
            [ "$arg" = 0 ] && arg="all" || arg="${arg#X264_CSP_I}"
            if [ "$arg" != "$chroma_format" ]; then
                echo "Override output chroma format with system libx264 configuration"
289
                chroma_format="$arg"
290
291
            fi
        fi
292
        arg="$(grep '#define X264_INTERLACED ' $x264_config_path | sed -e 's/#define X264_INTERLACED *//; s/ *$//')"
293
294
295
296
        if [ -n "$arg" ]; then
            [ "$arg" = 0 ] && arg="no" || arg="yes"
            if [ "$arg" != "$interlaced" ]; then
                echo "Override interlaced encoding support with system libx264 configuration"
297
                interlaced="$arg"
298
299
300
301
302
            fi
        fi
    else
        res=$?
        log_fail
303
        log_msg "Failed search path was: $x264_config_path"
304
305
306
307
    fi
    return $res
}

Steven Walters's avatar
Steven Walters committed
308
rm -f x264_config.h config.h config.mak config.log x264.pc x264.def conftest*
Loren Merritt's avatar
Loren Merritt committed
309

310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
# Construct a path to the specified directory relative to the working directory
relative_path() {
    local base="${PWD%/}"
    local path="$(cd "$1" >/dev/null; printf '%s/.' "${PWD%/}")"
    local up=''

    while [[ $path != "$base/"* ]]; do
        base="${base%/*}"
        up="../$up"
    done

    dirname "$up${path#"$base/"}"
}

SRCPATH="$(relative_path "$(dirname "$0")")"
echo "$SRCPATH" | grep -q ' ' && die "Out of tree builds are impossible with whitespace in source path."
326
[ -e "$SRCPATH/config.h" -o -e "$SRCPATH/x264_config.h" ] && die "Out of tree builds are impossible with config.h/x264_config.h in source dir."
Oka Motofumi's avatar
Oka Motofumi committed
327

328
prefix='/usr/local'
Loren Merritt's avatar
Loren Merritt committed
329
330
331
exec_prefix='${prefix}'
bindir='${exec_prefix}/bin'
libdir='${exec_prefix}/lib'
332
includedir='${prefix}/include'
333
DEVNULL='/dev/null'
334

Nikoli's avatar
Nikoli committed
335
336
337
338
cli="yes"
cli_libx264="internal"
shared="no"
static="no"
Steven Walters's avatar
Steven Walters committed
339
340
341
342
avs="auto"
lavf="auto"
ffms="auto"
gpac="auto"
343
344
lsmash="auto"
mp4="no"
345
gpl="yes"
346
thread="auto"
347
swscale="auto"
348
asm="auto"
349
interlaced="yes"
350
lto="no"
351
debug="no"
352
gprof="no"
Nikoli's avatar
Nikoli committed
353
strip="no"
354
pic="no"
355
bit_depth="8"
356
chroma_format="all"
Steven Walters's avatar
Steven Walters committed
357
compiler="GNU"
Steven Walters's avatar
Steven Walters committed
358
compiler_style="GNU"
Steve Borho's avatar
Steve Borho committed
359
opencl="yes"
Loren Merritt's avatar
Loren Merritt committed
360

Oka Motofumi's avatar
Oka Motofumi committed
361
CFLAGS="$CFLAGS -Wall -I. -I\$(SRCPATH)"
362
LDFLAGS="$LDFLAGS"
363
LDFLAGSCLI="$LDFLAGSCLI"
364
ASFLAGS="$ASFLAGS -I. -I\$(SRCPATH)"
365
RCFLAGS="$RCFLAGS"
366
CHECK_CFLAGS=""
367
HAVE_GETOPT_LONG=1
Anton Mitrofanov's avatar
Anton Mitrofanov committed
368
cross_prefix=""
369

Loren Merritt's avatar
Loren Merritt committed
370
EXE=""
371
372
373
AS_EXT=".S"
NL="
"
Loren Merritt's avatar
Loren Merritt committed
374

375
# list of all preprocessor HAVE values we can define
Anton Mitrofanov's avatar
Anton Mitrofanov committed
376
CONFIG_HAVE="MALLOC_H ALTIVEC ALTIVEC_H MMX ARMV6 ARMV6T2 NEON BEOSTHREAD POSIXTHREAD WIN32THREAD THREAD LOG2F SWSCALE \
Kaustubh Raste's avatar
Kaustubh Raste committed
377
             LAVF FFMS GPAC AVS GPL VECTOREXT INTERLACED CPU_COUNT OPENCL THP LSMASH X86_INLINE_ASM AS_FUNC INTEL_DISPATCHER \
Henrik Gramner's avatar
Henrik Gramner committed
378
             MSA MMAP WINRT"
379

380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
# parse options

for opt do
    optarg="${opt#*=}"
    case "$opt" in
        --prefix=*)
            prefix="$optarg"
            ;;
        --exec-prefix=*)
            exec_prefix="$optarg"
            ;;
        --bindir=*)
            bindir="$optarg"
            ;;
        --libdir=*)
            libdir="$optarg"
            ;;
        --includedir=*)
            includedir="$optarg"
            ;;
Nikoli's avatar
Nikoli committed
400
401
402
403
404
405
406
407
408
409
410
411
        --disable-cli)
            cli="no"
            ;;
        --system-libx264)
            cli_libx264="system"
            ;;
        --enable-shared)
            shared="yes"
            ;;
        --enable-static)
            static="yes"
            ;;
412
413
414
        --disable-asm)
            asm="no"
            ;;
415
416
417
        --disable-interlaced)
            interlaced="no"
            ;;
Steven Walters's avatar
Steven Walters committed
418
419
        --disable-avs)
            avs="no"
420
            ;;
Steven Walters's avatar
Steven Walters committed
421
422
        --disable-lavf)
            lavf="no"
423
            ;;
Steven Walters's avatar
Steven Walters committed
424
425
        --disable-ffms)
            ffms="no"
426
            ;;
Steven Walters's avatar
Steven Walters committed
427
428
        --disable-gpac)
            gpac="no"
429
            ;;
430
431
432
        --disable-lsmash)
            lsmash="no"
            ;;
433
434
435
        --disable-gpl)
            gpl="no"
            ;;
436
        --extra-asflags=*)
437
            ASFLAGS="$ASFLAGS $optarg"
438
439
            ;;
        --extra-cflags=*)
440
            CFLAGS="$CFLAGS $optarg"
441
442
            ;;
        --extra-ldflags=*)
443
            LDFLAGS="$LDFLAGS $optarg"
444
            ;;
445
446
447
        --extra-rcflags=*)
            RCFLAGS="$RCFLAGS $optarg"
            ;;
448
449
450
        --disable-thread)
            thread="no"
            ;;
451
452
        --disable-win32thread)
            [ "$thread" != "no" ] && thread="posix"
453
            ;;
454
455
456
        --disable-swscale)
            swscale="no"
            ;;
457
458
459
        --enable-lto)
            lto="auto"
            ;;
460
461
462
463
464
465
466
467
        --enable-debug)
            debug="yes"
            ;;
        --enable-gprof)
            CFLAGS="$CFLAGS -pg"
            LDFLAGS="$LDFLAGS -pg"
            gprof="yes"
            ;;
Nikoli's avatar
Nikoli committed
468
469
470
        --enable-strip)
            strip="yes"
            ;;
471
472
473
474
        --enable-pic)
            pic="yes"
            ;;
        --host=*)
475
            host="$optarg"
476
            ;;
Steve Borho's avatar
Steve Borho committed
477
478
479
        --disable-opencl)
            opencl="no"
            ;;
Anton Mitrofanov's avatar
Anton Mitrofanov committed
480
        --cross-prefix=*)
481
            cross_prefix="$optarg"
Anton Mitrofanov's avatar
Anton Mitrofanov committed
482
            ;;
David Conrad's avatar
David Conrad committed
483
        --sysroot=*)
484
485
            CFLAGS="$CFLAGS --sysroot=$optarg"
            LDFLAGS="$LDFLAGS --sysroot=$optarg"
David Conrad's avatar
David Conrad committed
486
            ;;
487
        --bit-depth=*)
488
            bit_depth="$optarg"
489
490
491
492
493
494
            if [ "$bit_depth" -lt "8" -o "$bit_depth" -gt "10" ]; then
                echo "Supplied bit depth must be in range [8,10]."
                exit 1
            fi
            bit_depth=`expr $bit_depth + 0`
            ;;
495
496
497
498
499
500
501
        --chroma-format=*)
            chroma_format="$optarg"
            if [ $chroma_format != "420" -a $chroma_format != "422" -a $chroma_format != "444" -a $chroma_format != "all" ]; then
                echo "Supplied chroma format must be 420, 422, 444 or all."
                exit 1
            fi
            ;;
502
503
504
505
506
507
        *)
            echo "Unknown option $opt, ignored"
            ;;
    esac
done

Nikoli's avatar
Nikoli committed
508
509
[ "$cli" = "no" -a "$shared" = "no" -a "$static" = "no" ] && die "Nothing to build. Enable cli, shared or static."

Anton Mitrofanov's avatar
Anton Mitrofanov committed
510
511
CC="${CC-${cross_prefix}gcc}"
STRIP="${STRIP-${cross_prefix}strip}"
512
INSTALL="${INSTALL-install}"
Anton Mitrofanov's avatar
Anton Mitrofanov committed
513

514
515
516
517
518
519
520
521
522
523
524
525
# ar and ranlib doesn't load the LTO plugin by default, prefer the gcc-prefixed wrappers which does.
if ${cross_prefix}gcc-ar --version >/dev/null 2>&1; then
    AR="${AR-${cross_prefix}gcc-ar}"
else
    AR="${AR-${cross_prefix}ar}"
fi
if ${cross_prefix}gcc-ranlib --version >/dev/null 2>&1; then
    RANLIB="${RANLIB-${cross_prefix}gcc-ranlib}"
else
    RANLIB="${RANLIB-${cross_prefix}ranlib}"
fi

526
if [ "x$host" = x ]; then
Oka Motofumi's avatar
Oka Motofumi committed
527
    host=`${SRCPATH}/config.guess`
528
529
fi
# normalize a triplet into a quadruplet
Oka Motofumi's avatar
Oka Motofumi committed
530
host=`${SRCPATH}/config.sub $host`
531

532
# split $host
Loren Merritt's avatar
Loren Merritt committed
533
host_cpu="${host%%-*}"
534
host="${host#*-}"
Loren Merritt's avatar
Loren Merritt committed
535
host_vendor="${host%%-*}"
536
host_os="${host#*-}"
537

538
539
trap 'rm -f conftest*' EXIT

Steven Walters's avatar
Steven Walters committed
540
541
542
# test for use of compilers that require specific handling
cc_base=`basename "$CC"`
QPRE="-"
Steven Walters's avatar
Steven Walters committed
543
if [[ $host_os = mingw* || $host_os = cygwin* ]]; then
544
    if [[ "$cc_base" = icl || "$cc_base" = icl[\ .]* ]]; then
Steven Walters's avatar
Steven Walters committed
545
546
547
        # Windows Intel Compiler creates dependency generation with absolute Windows paths, Cygwin's make does not support Windows paths.
        [[ $host_os = cygwin* ]] && die "Windows Intel Compiler support requires MSYS"
        compiler=ICL
Steven Walters's avatar
Steven Walters committed
548
        compiler_style=MS
549
        CFLAGS="$CFLAGS -Qstd=c99 -nologo -Qms0 -DHAVE_STRING_H -I\$(SRCPATH)/extras"
Steven Walters's avatar
Steven Walters committed
550
551
552
553
        QPRE="-Q"
        `$CC 2>&1 | grep -q IA-32` && host_cpu=i486
        `$CC 2>&1 | grep -q "Intel(R) 64"` && host_cpu=x86_64
        cpp_check "" "" "_MSC_VER >= 1400" || die "Windows Intel Compiler support requires Visual Studio 2005 or newer"
554
555
556
557
        if cc_check '' -Qdiag-error:10006,10157 ; then
            CHECK_CFLAGS="$CHECK_CFLAGS -Qdiag-error:10006,10157"
        fi
    elif [[ "$cc_base" = cl || "$cc_base" = cl[\ .]* ]]; then
Steven Walters's avatar
Steven Walters committed
558
559
560
        # Standard Microsoft Visual Studio
        compiler=CL
        compiler_style=MS
561
        CFLAGS="$CFLAGS -nologo -GS- -DHAVE_STRING_H -I\$(SRCPATH)/extras"
562
563
        `$CC 2>&1 | grep -q 'x86'` && host_cpu=i486
        `$CC 2>&1 | grep -q 'x64'` && host_cpu=x86_64
Steven Walters's avatar
Steven Walters committed
564
        cpp_check '' '' '_MSC_VER > 1800 || (_MSC_VER == 1800 && _MSC_FULL_VER >= 180030324)' || die "Microsoft Visual Studio support requires Visual Studio 2013 Update 2 or newer"
565
566
567
    else
        # MinGW uses broken pre-VS2015 Microsoft printf functions unless it's told to use the POSIX ones.
        CFLAGS="$CFLAGS -D_POSIX_C_SOURCE=200112L"
Steven Walters's avatar
Steven Walters committed
568
569
    fi
else
570
    if [[ "$cc_base" = icc || "$cc_base" = icc[\ .]* ]]; then
Steven Walters's avatar
Steven Walters committed
571
572
573
574
575
        AR="xiar"
        compiler=ICC
    fi
fi

576
if [[ "$cc_base" = clang* ]]; then
577
578
579
580
581
    if cc_check '' -Werror=unknown-warning-option ; then
        CHECK_CFLAGS="$CHECK_CFLAGS -Werror=unknown-warning-option"
    fi
fi

582
libm=""
583
case $host_os in
Yasuhiro Ikeda's avatar
Yasuhiro Ikeda committed
584
585
586
587
588
589
    beos*)
        SYS="BEOS"
        define HAVE_MALLOC_H
        ;;
    darwin*)
        SYS="MACOSX"
590
        libm="-lm"
Yasuhiro Ikeda's avatar
Yasuhiro Ikeda committed
591
592
593
594
595
596
        if [ "$pic" = "no" ]; then
            cc_check "" -mdynamic-no-pic && CFLAGS="$CFLAGS -mdynamic-no-pic"
        fi
        ;;
    freebsd*)
        SYS="FREEBSD"
597
        libm="-lm"
Yasuhiro Ikeda's avatar
Yasuhiro Ikeda committed
598
599
600
601
        ;;
    kfreebsd*-gnu)
        SYS="FREEBSD"
        define HAVE_MALLOC_H
602
        libm="-lm"
Yasuhiro Ikeda's avatar
Yasuhiro Ikeda committed
603
604
605
        ;;
    netbsd*)
        SYS="NETBSD"
606
        libm="-lm"
Yasuhiro Ikeda's avatar
Yasuhiro Ikeda committed
607
608
609
        ;;
    openbsd*)
        SYS="OPENBSD"
610
        libm="-lm"
Yasuhiro Ikeda's avatar
Yasuhiro Ikeda committed
611
612
613
614
        ;;
    *linux*)
        SYS="LINUX"
        define HAVE_MALLOC_H
615
        libm="-lm"
Yasuhiro Ikeda's avatar
Yasuhiro Ikeda committed
616
        ;;
617
618
619
    gnu*)
        SYS="HURD"
        define HAVE_MALLOC_H
620
        libm="-lm"
621
        ;;
622
    cygwin*|mingw*|msys*)
Yasuhiro Ikeda's avatar
Yasuhiro Ikeda committed
623
        EXE=".exe"
624
        if [[ $host_os = cygwin* ]] && cpp_check "" "" "defined(__CYGWIN__)" ; then
625
            SYS="CYGWIN"
626
            define HAVE_MALLOC_H
627
628
629
        else
            SYS="WINDOWS"
            DEVNULL="NUL"
Henrik Gramner's avatar
Henrik Gramner committed
630
            LDFLAGSCLI="$LDFLAGSCLI -lshell32"
631
            [ $compiler = GNU ] && RC="${RC-${cross_prefix}windres}" || RC="${RC-rc}"
632
        fi
Yasuhiro Ikeda's avatar
Yasuhiro Ikeda committed
633
634
635
636
        ;;
    sunos*|solaris*)
        SYS="SunOS"
        define HAVE_MALLOC_H
637
        libm="-lm"
638
639
640
641
642
        if cc_check "" /usr/lib/64/values-xpg6.o; then
            LDFLAGS="$LDFLAGS /usr/lib/64/values-xpg6.o"
        else
            LDFLAGS="$LDFLAGS /usr/lib/values-xpg6.o"
        fi
643
644
645
646
647
648
649
650
651
        if test -x /usr/ucb/install ; then
            INSTALL=/usr/ucb/install
        elif test -x /usr/bin/ginstall ; then
            # OpenSolaris
            INSTALL=/usr/bin/ginstall
        elif test -x /usr/gnu/bin/install ; then
            # OpenSolaris
            INSTALL=/usr/gnu/bin/install
        fi
Yasuhiro Ikeda's avatar
Yasuhiro Ikeda committed
652
653
        HAVE_GETOPT_LONG=0
        ;;
Mike Gorchak's avatar
Mike Gorchak committed
654
655
656
657
658
659
660
    *qnx*)
        SYS="QNX"
        define HAVE_MALLOC_H
        libm="-lm"
        HAVE_GETOPT_LONG=0
        CFLAGS="$CFLAGS -I\$(SRCPATH)/extras"
        ;;
Jerome Duval's avatar
Jerome Duval committed
661
662
663
    *haiku*)
        SYS="HAIKU"
        ;;
Yasuhiro Ikeda's avatar
Yasuhiro Ikeda committed
664
665
666
    *)
        die "Unknown system $host, edit the configure"
        ;;
667
668
esac

669
670
LDFLAGS="$LDFLAGS $libm"

671
stack_alignment=4
672
case $host_cpu in
Yasuhiro Ikeda's avatar
Yasuhiro Ikeda committed
673
674
    i*86)
        ARCH="X86"
675
        AS="${AS-yasm}"
676
        AS_EXT=".asm"
677
        ASFLAGS="$ASFLAGS -DARCH_X86_64=0 -I\$(SRCPATH)/common/x86/"
Steven Walters's avatar
Steven Walters committed
678
679
680
681
682
        if [ $compiler = GNU ]; then
            if [[ "$asm" == auto && "$CFLAGS" != *-march* ]]; then
                CFLAGS="$CFLAGS -march=i686"
            fi
            if [[ "$asm" == auto && "$CFLAGS" != *-mfpmath* ]]; then
683
                CFLAGS="$CFLAGS -mfpmath=sse -msse -msse2"
Steven Walters's avatar
Steven Walters committed
684
            fi
685
686
            CFLAGS="-m32 $CFLAGS"
            LDFLAGS="-m32 $LDFLAGS"
Yasuhiro Ikeda's avatar
Yasuhiro Ikeda committed
687
688
        fi
        if [ "$SYS" = MACOSX ]; then
689
            ASFLAGS="$ASFLAGS -f macho32 -DPREFIX"
690
        elif [ "$SYS" = WINDOWS -o "$SYS" = CYGWIN ]; then
Yasuhiro Ikeda's avatar
Yasuhiro Ikeda committed
691
692
            ASFLAGS="$ASFLAGS -f win32 -DPREFIX"
            LDFLAGS="$LDFLAGS -Wl,--large-address-aware"
693
            [ $compiler = GNU ] && LDFLAGS="$LDFLAGS -Wl,--dynamicbase,--nxcompat,--tsaware"
694
            [ $compiler = GNU ] && RCFLAGS="--target=pe-i386 $RCFLAGS"
Yasuhiro Ikeda's avatar
Yasuhiro Ikeda committed
695
        else
696
            ASFLAGS="$ASFLAGS -f elf32"
Sean McGovern's avatar
Sean McGovern committed
697
698
        fi
        ;;
Yasuhiro Ikeda's avatar
Yasuhiro Ikeda committed
699
700
    x86_64)
        ARCH="X86_64"
701
        AS="${AS-yasm}"
702
        AS_EXT=".asm"
703
        ASFLAGS="$ASFLAGS -DARCH_X86_64=1 -I\$(SRCPATH)/common/x86/"
704
        stack_alignment=16
705
        [ $compiler = GNU ] && CFLAGS="-m64 $CFLAGS" && LDFLAGS="-m64 $LDFLAGS"
706
        if [ "$SYS" = MACOSX ]; then
707
            ASFLAGS="$ASFLAGS -f macho64 -DPIC -DPREFIX"
Yasuhiro Ikeda's avatar
Yasuhiro Ikeda committed
708
709
710
711
            if cc_check '' "-arch x86_64"; then
                CFLAGS="$CFLAGS -arch x86_64"
                LDFLAGS="$LDFLAGS -arch x86_64"
            fi
Diogo Franco's avatar
Diogo Franco committed
712
        elif [ "$SYS" = WINDOWS -o "$SYS" = CYGWIN ]; then
713
            ASFLAGS="$ASFLAGS -f win64"
714
715
716
717
718
719
720
721
722
            if [ $compiler = GNU ]; then
                # only the GNU toolchain is inconsistent in prefixing function names with _
                cc_check "" "-S" && grep -q "_main:" conftest && ASFLAGS="$ASFLAGS -DPREFIX"
                cc_check "" "-Wl,--high-entropy-va" && LDFLAGS="$LDFLAGS -Wl,--high-entropy-va"
                LDFLAGS="$LDFLAGS -Wl,--dynamicbase,--nxcompat,--tsaware"
                LDFLAGSCLI="$LDFLAGSCLI -Wl,--image-base,0x140000000"
                SOFLAGS="$SOFLAGS -Wl,--image-base,0x180000000"
                RCFLAGS="--target=pe-x86-64 $RCFLAGS"
            fi
Yasuhiro Ikeda's avatar
Yasuhiro Ikeda committed
723
        else
724
            ASFLAGS="$ASFLAGS -f elf64"
Yasuhiro Ikeda's avatar
Yasuhiro Ikeda committed
725
726
        fi
        ;;
727
    powerpc*)
Yasuhiro Ikeda's avatar
Yasuhiro Ikeda committed
728
729
730
        ARCH="PPC"
        if [ $asm = auto ] ; then
            define HAVE_ALTIVEC
731
            AS="${AS-${CC}}"
732
            AS_EXT=".c"
Yasuhiro Ikeda's avatar
Yasuhiro Ikeda committed
733
734
735
736
737
738
739
740
741
742
743
            if [ $SYS = MACOSX ] ; then
                CFLAGS="$CFLAGS -faltivec -fastf -mcpu=G4"
            else
                CFLAGS="$CFLAGS -maltivec -mabi=altivec"
                define HAVE_ALTIVEC_H
            fi
        fi
        ;;
    sparc)
        ARCH="SPARC"
        ;;
Kaustubh Raste's avatar
Kaustubh Raste committed
744
    mips*)
Yasuhiro Ikeda's avatar
Yasuhiro Ikeda committed
745
        ARCH="MIPS"
Kaustubh Raste's avatar
Kaustubh Raste committed
746
747
        AS="${AS-${CC}}"
        AS_EXT=".c"
Yasuhiro Ikeda's avatar
Yasuhiro Ikeda committed
748
749
750
751
        ;;
    arm*)
        ARCH="ARM"
        if [ "$SYS" = MACOSX ] ; then
752
            AS="${AS-${SRCPATH}/tools/gas-preprocessor.pl -arch arm -- ${CC}}"
Yasuhiro Ikeda's avatar
Yasuhiro Ikeda committed
753
754
755
756
757
758
759
            ASFLAGS="$ASFLAGS -DPREFIX -DPIC"  # apple's ld doesn't support movw/movt relocations at all
            # build for armv7 by default
            if ! echo $CFLAGS | grep -Eq '\-arch' ; then
                CFLAGS="$CFLAGS -arch armv7"
                LDFLAGS="$LDFLAGS -arch armv7"
            fi
        else
760
            AS="${AS-${CC}}"
Yasuhiro Ikeda's avatar
Yasuhiro Ikeda committed
761
762
        fi
        ;;
Janne Grunau's avatar
Janne Grunau committed
763
764
    aarch64)
        ARCH="AARCH64"
765
        stack_alignment=16
Janne Grunau's avatar
Janne Grunau committed
766
        if [ "$SYS" = MACOSX ] ; then
767
            AS="${AS-${SRCPATH}/tools/gas-preprocessor.pl -arch aarch64 -- ${CC}}"
Janne Grunau's avatar
Janne Grunau committed
768
769
770
771
772
            ASFLAGS="$ASFLAGS -DPREFIX"
        else
            AS="${AS-${CC}}"
        fi
        ;;
Yasuhiro Ikeda's avatar
Yasuhiro Ikeda committed
773
774
775
    s390|s390x)
        ARCH="S390"
        ;;
776
    hppa*|parisc*)
Yasuhiro Ikeda's avatar
Yasuhiro Ikeda committed
777
778
779
780
781
        ARCH="PARISC"
        ;;
    ia64)
        ARCH="IA64"
        ;;
782
783
784
    alpha*)
        ARCH="ALPHA"
        ;;
Yasuhiro Ikeda's avatar
Yasuhiro Ikeda committed
785
786
787
    *)
        ARCH="$(echo $host_cpu | tr a-z A-Z)"
        ;;
788
789
esac

Henrik Gramner's avatar
Henrik Gramner committed
790
791
792
793
if [ $SYS = WINDOWS ]; then
    if ! rc_check "0 RCDATA {0}" ; then
        RC=""
    fi
Henrik Gramner's avatar
Henrik Gramner committed
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808

    if cpp_check "winapifamily.h" "" "!WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)" ; then
        [ $compiler = CL ] || die "WinRT requires MSVC"
        define HAVE_WINRT
        CFLAGS="$CFLAGS -MD"
        LDFLAGS="$LDFLAGS -appcontainer"
        if ! cpp_check "" "" "defined(_WIN32_WINNT) && _WIN32_WINNT >= 0x0603" ; then
            die "_WIN32_WINNT must be defined to at least 0x0603 (Windows 8.1) for WinRT"
        elif cpp_check "" "" "_WIN32_WINNT >= 0x0A00" ; then
            # Universal Windows Platform (Windows 10)
            LDFLAGS="$LDFLAGS -lWindowsApp"
        fi
        cli="no"
        opencl="no"
    fi
Henrik Gramner's avatar
Henrik Gramner committed
809
810
fi

Diogo Franco's avatar
Diogo Franco committed
811
812
813
814
815
816
817
818
819
820
log_msg "x264 configure script"
if [ -n "$*" ]; then
    msg="Command line options:"
    for i in $@; do
        msg="$msg \"$i\""
    done
    log_msg "$msg"
fi
log_msg ""

821
822
# check requirements

823
824
cc_check || die "No working C compiler found."

Steven Walters's avatar
Steven Walters committed
825
if [ $compiler_style = GNU ]; then
826
    if cc_check '' -std=gnu99 'for( int i = 0; i < 9; i++ );' ; then
827
        CFLAGS="$CFLAGS -std=gnu99 -D_GNU_SOURCE"
828
    elif cc_check '' -std=c99 'for( int i = 0; i < 9; i++ );' ; then
Steven Walters's avatar
Steven Walters committed
829
        CFLAGS="$CFLAGS -std=c99 -D_POSIX_C_SOURCE=200112L -D_BSD_SOURCE"
830
831
    elif ! cc_check '' '' 'for( int i = 0; i < 9; i++ );' ; then
        die "C99 compiler is needed for compilation."
Steven Walters's avatar
Steven Walters committed
832
    fi
833
834
fi

835
if [ $shared = yes -a \( $ARCH = "X86_64" -o $ARCH = "PPC" -o $ARCH = "ALPHA" -o $ARCH = "ARM" -o $ARCH = "IA64" -o $ARCH = "PARISC" -o $ARCH = "MIPS" -o $ARCH = "AARCH64" \) ] ; then
836
837
838
    pic="yes"
fi

839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
if [ $compiler = GNU -a \( $ARCH = X86 -o $ARCH = X86_64 \) ] ; then
    if cc_check '' -mpreferred-stack-boundary=5 ; then
        CFLAGS="$CFLAGS -mpreferred-stack-boundary=5"
        stack_alignment=32
    elif [ $stack_alignment -lt 16 ] && cc_check '' -mpreferred-stack-boundary=4 ; then
        CFLAGS="$CFLAGS -mpreferred-stack-boundary=4"
        stack_alignment=16
    fi
elif [ $compiler = ICC -a $ARCH = X86 ]; then
    # icc on linux has various degrees of mod16 stack support
    if [ $SYS = LINUX ]; then
        # >= 12 defaults to a mod16 stack
        if cpp_check "" "" "__INTEL_COMPILER >= 1200" ; then
            stack_alignment=16
        # 11 <= x < 12 is capable of keeping a mod16 stack, but defaults to not doing so.
        elif cpp_check "" "" "__INTEL_COMPILER >= 1100" ; then
            CFLAGS="$CFLAGS -falign-stack=assume-16-byte"
            stack_alignment=16
        fi
        # < 11 is completely incapable of keeping a mod16 stack
    fi
fi

862
if [ $asm = auto -a \( $ARCH = X86 -o $ARCH = X86_64 \) ] ; then
863
    if ! as_check "vpmovzxwd ymm0, xmm0" ; then
864
        VER=`($AS --version || echo no assembler) 2>/dev/null | head -n 1`
865
        echo "Found $VER"
866
        echo "Minimum version is yasm-1.2.0"
867
868
        echo "If you really want to compile without asm, configure with --disable-asm."
        exit 1
869
    fi
Steven Walters's avatar
Steven Walters committed
870
    cc_check '' '' '__asm__("pabsw %xmm0, %xmm0");' && define HAVE_X86_INLINE_ASM
871
    ASFLAGS="$ASFLAGS -Worphan-labels"
Diogo Franco's avatar
Diogo Franco committed
872
    define HAVE_MMX
873
fi
874

875
if [ $asm = auto -a $ARCH = ARM ] ; then
876
    # set flags so neon is built by default
877
    echo $CFLAGS | grep -Eq '(-mcpu|-march|-mfpu)' || CFLAGS="$CFLAGS -mcpu=cortex-a8 -mfpu=neon"
878

David Conrad's avatar
David Conrad committed
879
880
881
    if  cc_check '' '' '__asm__("rev ip, ip");' ; then      define HAVE_ARMV6
        cc_check '' '' '__asm__("movt r0, #0");'         && define HAVE_ARMV6T2
        cc_check '' '' '__asm__("vadd.i16 q0, q0, q0");' && define HAVE_NEON
882
        ASFLAGS="$ASFLAGS -c"
883
    else
884
        echo "You specified a pre-ARMv6 or Thumb-1 CPU in your CFLAGS."
885
886
        echo "If you really want to run on such a CPU, configure with --disable-asm."
        exit 1
887
888
889
    fi
fi

Janne Grunau's avatar
Janne Grunau committed
890
891
892
893
894
895
896
897
898
899
900
if [ $asm = auto -a $ARCH = AARCH64 ] ; then
    if  cc_check '' '' '__asm__("cmeq v0.8h, v0.8h, #0");' ; then define HAVE_NEON
        ASFLAGS="$ASFLAGS -c"
    else
        echo "no NEON support, try adding -mfpu=neon to CFLAGS"
        echo "If you really want to run on such a CPU, configure with --disable-asm."
        exit 1
    fi
fi

if [ $asm = auto -a \( $ARCH = ARM -o $ARCH = AARCH64 \) ] ; then
901
902
903
904
    # check if the assembler supports '.func' (clang 3.5 does not)
    as_check ".func test${NL}.endfunc" && define HAVE_AS_FUNC 1
fi

Kaustubh Raste's avatar
Kaustubh Raste committed
905
906
907
908
909
910
911
912
913
914
915
916
917
918
if [ $asm = auto -a $ARCH = MIPS ] ; then
    if ! echo $CFLAGS | grep -Eq '(-march|-mmsa|-mno-msa)' ; then
        cc_check '' '-mmsa -mfp64 -mhard-float' && CFLAGS="-mmsa -mfp64 -mhard-float $CFLAGS"
    fi

    if cc_check '' '' '__asm__("addvi.b $w0, $w1, 1");' ; then
        define HAVE_MSA
    else
        echo "You specified a pre-MSA CPU in your CFLAGS."
        echo "If you really want to run on such a CPU, configure with --disable-asm."
        exit 1
    fi
fi

919
[ $asm = no ] && AS=""
920
[ "x$AS" = x ] && asm="no" || asm="yes"
921

Diogo Franco's avatar
Diogo Franco committed
922
923
define ARCH_$ARCH
define SYS_$SYS
924

925
926
927
define STACK_ALIGNMENT $stack_alignment
ASFLAGS="$ASFLAGS -DSTACK_ALIGNMENT=$stack_alignment"

Steven Walters's avatar
Steven Walters committed
928
# skip endianness check for Intel Compiler and MSVS, as all supported platforms are little. each have flags that will cause the check to fail as well
929
CPU_ENDIAN="little-endian"
Steven Walters's avatar
Steven Walters committed
930
931
if [ $compiler = GNU ]; then
    echo "int i[2] = {0x42494745,0}; double f[2] = {0x1.0656e6469616ep+102,0};" > conftest.c
932
    $CC $CFLAGS conftest.c -c -o conftest.o 2>/dev/null || die "endian test failed"
Steven Walters's avatar
Steven Walters committed
933
934
    if (${cross_prefix}strings -a conftest.o | grep -q BIGE) && (${cross_prefix}strings -a conftest.o | grep -q FPendian) ; then
        define WORDS_BIGENDIAN
935
        CPU_ENDIAN="big-endian"
Steven Walters's avatar
Steven Walters committed
936
937
938
    elif !(${cross_prefix}strings -a conftest.o | grep -q EGIB && ${cross_prefix}strings -a conftest.o | grep -q naidnePF) ; then
        die "endian test failed"
    fi
Kieran Kunhya's avatar
Kieran Kunhya committed
939
fi
Loren Merritt's avatar
Loren Merritt committed
940

941
942
943
if [ "$cli_libx264" = "system" -a "$shared" != "yes" ] ; then
    [ "$static" = "yes" ] && die "Option --system-libx264 can not be used together with --enable-static"
    if ${cross_prefix}pkg-config --exists x264 2>/dev/null; then
944
945
946
        X264_LIBS="$(${cross_prefix}pkg-config --libs x264)"
        X264_INCLUDE_DIR="${X264_INCLUDE_DIR-$(${cross_prefix}pkg-config --variable=includedir x264)}"
        configure_system_override "$X264_INCLUDE_DIR" || die "Detection of system libx264 configuration failed"
947
948
949
950
951
    else
        die "Can not find system libx264"
    fi
fi

952
953
# autodetect options that weren't forced nor disabled

954
libpthread=""
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
if [ "$SYS" = "WINDOWS" -a "$thread" = "posix" ] ; then
    if [ "$gpl" = "no" ] ; then
        echo "Warning: pthread-win32 is LGPL and is therefore not supported with --disable-gpl"
        thread="no"
    elif cc_check pthread.h -lpthread "pthread_create(0,0,0,0);" ; then
        libpthread="-lpthread"
    elif cc_check pthread.h -lpthreadGC2 "pthread_create(0,0,0,0);" ; then
        libpthread="-lpthreadGC2"
    elif cc_check pthread.h "-lpthreadGC2 -lwsock32 -DPTW32_STATIC_LIB" "pthread_create(0,0,0,0);" ; then
        libpthread="-lpthreadGC2 -lwsock32"
        define PTW32_STATIC_LIB
    elif cc_check pthread.h "-lpthreadGC2 -lws2_32 -DPTW32_STATIC_LIB" "pthread_create(0,0,0,0);" ; then
        libpthread="-lpthreadGC2 -lws2_32"
        define PTW32_STATIC_LIB
    else
        thread="no"
    fi
elif [ "$thread" != "no" ] ; then
973
    thread="no"
974
    case $SYS in
975
        BEOS)
976
977
            thread="beos"
            define HAVE_BEOSTHREAD
978
            ;;
Steven Walters's avatar
Steven Walters committed
979
        WINDOWS)
980
981
            thread="win32"
            define HAVE_WIN32THREAD
982
            ;;
Mike Gorchak's avatar
Mike Gorchak committed
983
        QNX)
Xiaolei Yu's avatar
Xiaolei Yu committed
984
            cc_check pthread.h -lc "pthread_create(0,0,0,0);" && thread="posix" && libpthread="-lc"
Mike Gorchak's avatar
Mike Gorchak committed
985
            ;;
986
        *)
Xiaolei Yu's avatar
Xiaolei Yu committed
987
988
989
990
991
992
            if cc_check pthread.h -lpthread "pthread_create(0,0,0,0);" ; then
               thread="posix"
               libpthread="-lpthread"
            else
                cc_check pthread.h "" "pthread_create(0,0,0,0);" && thread="posix" && libpthread=""
            fi
993
994
995
            ;;
    esac
fi
996
if [ "$thread" = "posix" ]; then
997
    LDFLAGS="$LDFLAGS $libpthread"
998
    define HAVE_POSIXTHREAD
999
1000
1001
    if [ "$SYS" = "LINUX" ] && cc_check sched.h "-D_GNU_SOURCE -Werror" "cpu_set_t p_aff; return CPU_COUNT(&p_aff);" ; then
        define HAVE_CPU_COUNT
    fi
1002
1003
fi
[ "$thread" != "no" ] && define HAVE_THREAD
1004

1005
if cc_check "math.h" "-Werror" "return log2f(2);" ; then
Diogo Franco's avatar
Diogo Franco committed
1006
    define HAVE_LOG2F
1007
1008
fi

1009
1010
1011
1012
if [ "$SYS" != "WINDOWS" ] && cpp_check "sys/mman.h unistd.h" "" "defined(MAP_PRIVATE)"; then
    define HAVE_MMAP
fi

Henrik Gramner's avatar
Henrik Gramner committed
1013
1014
1015
1016
if [ "$SYS" = "LINUX" -a \( "$ARCH" = "X86" -o "$ARCH" = "X86_64" \) ] && cc_check "sys/mman.h" "" "MADV_HUGEPAGE;" ; then
    define HAVE_THP
fi

1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
if [ "$cli" = "no" ]