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

Loren Merritt's avatar
Loren Merritt committed
3 4 5 6 7 8 9
if test x"$1" = x"-h" -o x"$1" = x"--help" ; then

echo "Usage: ./configure [options]"
echo ""
echo "available options:"
echo ""
echo "  --help                   print this message"
Steven Walters's avatar
Steven Walters committed
10 11 12 13
echo "  --disable-avs            disables avisynth support (windows only)"
echo "  --disable-lavf           disables libavformat support"
echo "  --disable-ffms           disables ffmpegsource support"
echo "  --disable-gpac           disables gpac support"
14
echo "  --disable-gpl            disables GPL-only features"
15 16
echo "  --disable-thread         disables multithreaded encoding"
echo "  --enable-win32thread     use win32threads (windows only)"
17
echo "  --disable-swscale        disables swscale support"
18
echo "  --disable-asm            disables platform-specific assembly optimizations"
19
echo "  --enable-debug           adds -g, doesn't strip"
20
echo "  --enable-gprof           adds -pg, doesn't strip"
Loren Merritt's avatar
Loren Merritt committed
21
echo "  --enable-visualize       enables visualization (X11 only)"
22
echo "  --enable-pic             build position-independent code"
23
echo "  --enable-shared          build libx264.so"
24
echo "  --bit-depth=BIT_DEPTH    sets output bit depth (8-10), default 8"
25
echo "  --extra-asflags=EASFLAGS add EASFLAGS to ASFLAGS"
Loren Merritt's avatar
Loren Merritt committed
26 27
echo "  --extra-cflags=ECFLAGS   add ECFLAGS to CFLAGS"
echo "  --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS"
28
echo "  --host=HOST              build programs to run on HOST"
Anton Mitrofanov's avatar
Anton Mitrofanov committed
29
echo "  --cross-prefix=PREFIX    use PREFIX for compilation tools"
David Conrad's avatar
David Conrad committed
30
echo "  --sysroot=SYSROOT        root of cross-build tree"
Loren Merritt's avatar
Loren Merritt committed
31 32 33 34
echo ""
exit 1
fi

Diogo Franco's avatar
Diogo Franco committed
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
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
}

51
cc_check() {
Diogo Franco's avatar
Diogo Franco committed
52
    if [ -z "$3" ]; then
53
        if [ -z "$1$2" ]; then
Diogo Franco's avatar
Diogo Franco committed
54
            log_check "whether $CC works"
55 56
        elif [ -z "$1" ]; then
            log_check "for $2"
Diogo Franco's avatar
Diogo Franco committed
57 58 59 60 61 62
        else
            log_check "for $1"
        fi
    elif [ -z "$1" ]; then
        log_check "whether $CC supports $3"
    else
63
        log_check "for $3 in $1";
Diogo Franco's avatar
Diogo Franco committed
64
    fi
65 66 67
    rm -f conftest.c
    [ -n "$1" ] && echo "#include <$1>" > conftest.c
    echo "int main () { $3 return 0; }" >> conftest.c
68
    if $CC conftest.c $CFLAGS $2 $LDFLAGSCLI $LDFLAGS -o conftest >conftest.log 2>&1; then
Diogo Franco's avatar
Diogo Franco committed
69 70 71 72 73 74 75
        res=$?
        log_ok
    else
        res=$?
        log_fail
        log_msg "Failed commandline was:"
        log_msg "--------------------------------------------------"
76 77 78
        log_msg "$CC conftest.c $CFLAGS $2 $LDFLAGSCLI $LDFLAGS"
        cat conftest.log >> config.log
        log_msg "--------------------------------------------------"
79 80 81 82
        log_msg "Failed program was:"
        log_msg "--------------------------------------------------"
        cat conftest.c >> config.log
        log_msg "--------------------------------------------------"
83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
    fi
    return $res
}

cpp_check() {
    log_check "whether $3 is true"
    rm -f conftest.c
    [ -n "$1" ] && echo "#include <$1>" > conftest.c
    echo -e "#if !($3) \n#error $4 \n#endif " >> conftest.c

    if $CC conftest.c $CFLAGS $2 -E -o conftest >conftest.log 2>&1; then
        res=$?
        log_ok
    else
        res=$?
        log_fail
        log_msg "--------------------------------------------------"
Diogo Franco's avatar
Diogo Franco committed
100 101
        cat conftest.log >> config.log
        log_msg "--------------------------------------------------"
102 103 104 105
        log_msg "Failed program was:"
        log_msg "--------------------------------------------------"
        cat conftest.c >> config.log
        log_msg "--------------------------------------------------"
Diogo Franco's avatar
Diogo Franco committed
106 107
    fi
    return $res
108 109
}

110
as_check() {
Diogo Franco's avatar
Diogo Franco committed
111
    log_check "whether $AS supports $1"
112
    echo "$1" > conftest.asm
Diogo Franco's avatar
Diogo Franco committed
113 114 115 116 117 118 119 120 121 122 123
    if $AS conftest.asm $ASFLAGS $2 -o conftest.o >conftest.log 2>&1; then
        res=$?
        log_ok
    else
        res=$?
        log_fail
        log_msg "Failed commandline was:"
        log_msg "--------------------------------------------------"
        log_msg "$AS conftest.asm $ASFLAGS $2 -o conftest.o"
        cat conftest.log >> config.log
        log_msg "--------------------------------------------------"
124 125 126 127
        log_msg "Failed program was:"
        log_msg "--------------------------------------------------"
        cat conftest.asm >> config.log
        log_msg "--------------------------------------------------"
Diogo Franco's avatar
Diogo Franco committed
128 129
    fi
    return $res
130 131
}

Diogo Franco's avatar
Diogo Franco committed
132
define() {
Steven Walters's avatar
Steven Walters committed
133
    echo "#define $1$([ -n "$2" ] && echo " $2" || echo " 1")" >> config.h
Diogo Franco's avatar
Diogo Franco committed
134 135
}

136
die() {
Diogo Franco's avatar
Diogo Franco committed
137
    log_msg "DIED: $@"
138 139 140 141
    echo "$@"
    exit 1
}

142
rm -f x264_config.h config.h config.mak config.log x264.pc conftest*
Loren Merritt's avatar
Loren Merritt committed
143

144
prefix='/usr/local'
Loren Merritt's avatar
Loren Merritt committed
145 146 147
exec_prefix='${prefix}'
bindir='${exec_prefix}/bin'
libdir='${exec_prefix}/lib'
148
includedir='${prefix}/include'
149
DEVNULL='/dev/null'
150

Steven Walters's avatar
Steven Walters committed
151 152 153 154
avs="auto"
lavf="auto"
ffms="auto"
gpac="auto"
155
gpl="yes"
156
thread="auto"
157
swscale="auto"
158
asm="auto"
159
debug="no"
160
gprof="no"
161
pic="no"
Loren Merritt's avatar
Loren Merritt committed
162
vis="no"
163
shared="no"
164
bit_depth="8"
Loren Merritt's avatar
Loren Merritt committed
165

166
CFLAGS="$CFLAGS -Wall -I."
167
LDFLAGS="$LDFLAGS"
168
LDFLAGSCLI="$LDFLAGSCLI"
Anton Mitrofanov's avatar
Anton Mitrofanov committed
169
ASFLAGS="$ASFLAGS"
170
HAVE_GETOPT_LONG=1
Anton Mitrofanov's avatar
Anton Mitrofanov committed
171
cross_prefix=""
172

Loren Merritt's avatar
Loren Merritt committed
173 174
EXE=""

175
# list of all preprocessor HAVE values we can define
176
CONFIG_HAVE="MALLOC_H ALTIVEC ALTIVEC_H MMX ARMV6 ARMV6T2 NEON BEOSTHREAD POSIXTHREAD WIN32THREAD THREAD LOG2F VISUALIZE SWSCALE LAVF FFMS GPAC GF_MALLOC AVS GPL"
177

178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197
# 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"
            ;;
198 199 200
        --disable-asm)
            asm="no"
            ;;
Steven Walters's avatar
Steven Walters committed
201 202
        --disable-avs)
            avs="no"
203
            ;;
Steven Walters's avatar
Steven Walters committed
204 205
        --disable-lavf)
            lavf="no"
206
            ;;
Steven Walters's avatar
Steven Walters committed
207 208
        --disable-ffms)
            ffms="no"
209
            ;;
Steven Walters's avatar
Steven Walters committed
210 211
        --disable-gpac)
            gpac="no"
212
            ;;
213 214 215
        --disable-gpl)
            gpl="no"
            ;;
216 217 218 219 220 221 222 223 224
        --extra-asflags=*)
            ASFLAGS="$ASFLAGS ${opt#--extra-asflags=}"
            ;;
        --extra-cflags=*)
            CFLAGS="$CFLAGS ${opt#--extra-cflags=}"
            ;;
        --extra-ldflags=*)
            LDFLAGS="$LDFLAGS ${opt#--extra-ldflags=}"
            ;;
225 226 227 228 229
        --disable-thread)
            thread="no"
            ;;
        --enable-win32thread)
            thread="win32"
230
            ;;
231 232 233
        --disable-swscale)
            swscale="no"
            ;;
234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253
        --enable-debug)
            debug="yes"
            ;;
        --enable-gprof)
            CFLAGS="$CFLAGS -pg"
            LDFLAGS="$LDFLAGS -pg"
            gprof="yes"
            ;;
        --enable-pic)
            pic="yes"
            ;;
        --enable-shared)
            shared="yes"
            ;;
        --enable-visualize)
            vis="yes"
            ;;
        --host=*)
            host="${opt#--host=}"
            ;;
Anton Mitrofanov's avatar
Anton Mitrofanov committed
254 255 256
        --cross-prefix=*)
            cross_prefix="${opt#--cross-prefix=}"
            ;;
David Conrad's avatar
David Conrad committed
257 258 259 260
        --sysroot=*)
            CFLAGS="$CFLAGS --sysroot=${opt#--sysroot=}"
            LDFLAGS="$LDFLAGS --sysroot=${opt#--sysroot=}"
            ;;
261 262 263 264 265 266 267 268
        --bit-depth=*)
            bit_depth="${opt#--bit-depth=}"
            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`
            ;;
269 270 271 272 273 274
        *)
            echo "Unknown option $opt, ignored"
            ;;
    esac
done

Anton Mitrofanov's avatar
Anton Mitrofanov committed
275 276 277 278 279
CC="${CC-${cross_prefix}gcc}"
AR="${AR-${cross_prefix}ar}"
RANLIB="${RANLIB-${cross_prefix}ranlib}"
STRIP="${STRIP-${cross_prefix}strip}"

280 281 282 283 284
if [ "x$host" = x ]; then
    host=`./config.guess`
fi
# normalize a triplet into a quadruplet
host=`./config.sub $host`
285

286
# split $host
Loren Merritt's avatar
Loren Merritt committed
287
host_cpu="${host%%-*}"
288
host="${host#*-}"
Loren Merritt's avatar
Loren Merritt committed
289
host_vendor="${host%%-*}"
290
host_os="${host#*-}"
291 292

case $host_os in
Yasuhiro Ikeda's avatar
Yasuhiro Ikeda committed
293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349
    beos*)
        SYS="BEOS"
        define HAVE_MALLOC_H
        ;;
    darwin*)
        SYS="MACOSX"
        CFLAGS="$CFLAGS -falign-loops=16"
        LDFLAGS="$LDFLAGS -lm"
        if [ "$pic" = "no" ]; then
            cc_check "" -mdynamic-no-pic && CFLAGS="$CFLAGS -mdynamic-no-pic"
        fi
        ;;
    freebsd*)
        SYS="FREEBSD"
        LDFLAGS="$LDFLAGS -lm"
        ;;
    kfreebsd*-gnu)
        SYS="FREEBSD"
        define HAVE_MALLOC_H
        LDFLAGS="$LDFLAGS -lm"
        ;;
    netbsd*)
        SYS="NETBSD"
        LDFLAGS="$LDFLAGS -lm"
        ;;
    openbsd*)
        SYS="OPENBSD"
        LDFLAGS="$LDFLAGS -lm"
        ;;
    *linux*)
        SYS="LINUX"
        define HAVE_MALLOC_H
        LDFLAGS="$LDFLAGS -lm"
        ;;
    cygwin*)
        SYS="MINGW"
        EXE=".exe"
        DEVNULL="NUL"
        if cc_check "" -mno-cygwin; then
            CFLAGS="$CFLAGS -mno-cygwin"
            LDFLAGS="$LDFLAGS -mno-cygwin"
        fi
        ;;
    mingw*)
        SYS="MINGW"
        EXE=".exe"
        DEVNULL="NUL"
        ;;
    sunos*|solaris*)
        SYS="SunOS"
        define HAVE_MALLOC_H
        LDFLAGS="$LDFLAGS -lm"
        HAVE_GETOPT_LONG=0
        ;;
    *)
        die "Unknown system $host, edit the configure"
        ;;
350 351
esac

352
case $host_cpu in
Yasuhiro Ikeda's avatar
Yasuhiro Ikeda committed
353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369
    i*86)
        ARCH="X86"
        AS="yasm"
        ASFLAGS="$ASFLAGS -O2"
        if [[ "$asm" == auto && "$CFLAGS" != *-march* ]]; then
            CFLAGS="$CFLAGS -march=i686"
        fi
        if [[ "$asm" == auto && "$CFLAGS" != *-mfpmath* ]]; then
            CFLAGS="$CFLAGS -mfpmath=sse -msse"
        fi
        if [ "$SYS" = MACOSX ]; then
            ASFLAGS="$ASFLAGS -f macho -DPREFIX"
        elif [ "$SYS" = MINGW ]; then
            ASFLAGS="$ASFLAGS -f win32 -DPREFIX"
            LDFLAGS="$LDFLAGS -Wl,--large-address-aware"
        else
            ASFLAGS="$ASFLAGS -f elf"
370 371
        fi
        ;;
Yasuhiro Ikeda's avatar
Yasuhiro Ikeda committed
372 373 374
    x86_64)
        ARCH="X86_64"
        AS="yasm"
375
        if [ "$SYS" = MACOSX ]; then
Yasuhiro Ikeda's avatar
Yasuhiro Ikeda committed
376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445
            ASFLAGS="$ASFLAGS -f macho64 -m amd64 -DPIC -DPREFIX"
            if cc_check '' "-arch x86_64"; then
                CFLAGS="$CFLAGS -arch x86_64"
                LDFLAGS="$LDFLAGS -arch x86_64"
            fi
        elif [ "$SYS" = MINGW ]; then
            ASFLAGS="$ASFLAGS -f win32 -m amd64"
            cc_check "" "-S" && grep -q "_main:" conftest && ASFLAGS="$ASFLAGS -DPREFIX"
        else
            ASFLAGS="$ASFLAGS -f elf -m amd64"
        fi
        ;;
    powerpc|powerpc64)
        ARCH="PPC"
        if [ $asm = auto ] ; then
            define HAVE_ALTIVEC
            AS="${AS-${cross_prefix}gcc}"
            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"
        case $(uname -m) in
            sun4u|sun4v)
                if [ $asm = auto ]; then
                    ARCH="UltraSPARC"
                    if ! echo $CFLAGS | grep -Eq '\-mcpu' ; then
                        CFLAGS="$CFLAGS -mcpu=ultrasparc"
                        LDFLAGS="$LDFLAGS -mcpu=ultrasparc"
                    fi
                    AS="${AS-${cross_prefix}as}"
                    ASFLAGS="$ASFLAGS -xarch=v8plusa"
                fi
                ;;
        esac
        ;;
    mips|mipsel|mips64|mips64el)
        ARCH="MIPS"
        ;;
    arm*)
        ARCH="ARM"
        if [ "$SYS" = MACOSX ] ; then
            AS="${AS-extras/gas-preprocessor.pl $CC}"
            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
            AS="${AS-${cross_prefix}gcc}"
        fi
        ;;
    s390|s390x)
        ARCH="S390"
        ;;
    parisc|parisc64)
        ARCH="PARISC"
        ;;
    ia64)
        ARCH="IA64"
        ;;
    *)
        ARCH="$(echo $host_cpu | tr a-z A-Z)"
        ;;
446 447
esac

Diogo Franco's avatar
Diogo Franco committed
448 449 450 451 452 453 454 455 456 457
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 ""

458 459
# check requirements

460 461
cc_check || die "No working C compiler found."

462 463 464 465 466 467
if cc_check '' -std=gnu99 ; then
    CFLAGS="$CFLAGS -std=gnu99"
elif cc_check '' -std=c99 ; then
    CFLAGS="$CFLAGS -std=c99 -D_POSIX_C_SOURCE=200112L -D_BSD_SOURCE"
fi

Loic Minier's avatar
Loic Minier committed
468
if [ $shared = yes -a \( $ARCH = "X86_64" -o $ARCH = "PPC" -o $ARCH = "ALPHA" -o $ARCH = "ARM" -o $ARCH = "IA64" \) ] ; then
469 470 471
    pic="yes"
fi

472
if [ $asm = auto -a \( $ARCH = X86 -o $ARCH = X86_64 \) ] ; then
Fiona Glaser's avatar
Fiona Glaser committed
473
    if ! as_check "lzcnt eax, eax" ; then
Fiona Glaser's avatar
Fiona Glaser committed
474
        VER=`($AS --version || echo no assembler) 2>$DEVNULL | head -n 1`
475
        echo "Found $VER"
Fiona Glaser's avatar
Fiona Glaser committed
476
        echo "Minimum version is yasm-0.6.2"
477 478
        echo "If you really want to compile without asm, configure with --disable-asm."
        exit 1
479
    fi
480
    if ! cc_check '' '' '__asm__("pabsw %xmm0, %xmm0");' ; then
481
        VER=`(${cross_prefix}as --version || echo no gnu as) 2>$DEVNULL | head -n 1`
482 483 484 485 486 487
        echo "Found $VER"
        echo "Minimum version is binutils-2.17"
        echo "Your compiler can't handle inline SSSE3 asm."
        echo "If you really want to compile without asm, configure with --disable-asm."
        exit 1
    fi
Diogo Franco's avatar
Diogo Franco committed
488
    define HAVE_MMX
489
fi
490

491
if [ $asm = auto -a $ARCH = ARM ] ; then
492 493 494
    # set flags so neon is built by default
    echo $CFLAGS | grep -Eq '(-mcpu|-march|-mfpu|-mfloat-abi)' || CFLAGS="$CFLAGS -mcpu=cortex-a8 -mfpu=neon -mfloat-abi=softfp"

David Conrad's avatar
David Conrad committed
495 496 497 498
    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
        ASFLAGS="$ASFLAGS $CFLAGS -c"
499
    else
500
        echo "You specified a pre-ARMv6 or Thumb-1 CPU in your CFLAGS."
501 502
        echo "If you really want to run on such a CPU, configure with --disable-asm."
        exit 1
503 504 505
    fi
fi

506
[ $asm = no ] && AS=""
507
[ "x$AS" = x ] && asm="no" || asm="yes"
508

Diogo Franco's avatar
Diogo Franco committed
509 510
define ARCH_$ARCH
define SYS_$SYS
511

512
echo "int i[2] = {0x42494745,0}; double f[2] = {0x1.0656e6469616ep+102,0};" > conftest.c
513
$CC $CFLAGS conftest.c -c -o conftest.o 2>$DEVNULL || die "endian test failed"
514
if (${cross_prefix}strings -a conftest.o | grep -q BIGE) && (${cross_prefix}strings -a conftest.o | grep -q FPendian) ; then
Diogo Franco's avatar
Diogo Franco committed
515
    define WORDS_BIGENDIAN
516
elif !(${cross_prefix}strings -a conftest.o | grep -q EGIB && ${cross_prefix}strings -a conftest.o | grep -q naidnePF) ; then
Kieran Kunhya's avatar
Kieran Kunhya committed
517 518
    die "endian test failed"
fi
519

520 521
# autodetect options that weren't forced nor disabled

522 523 524
# pthread-win32 is lgpl, prevent its use if --disable-gpl is specified and targeting windows
[ "$SYS" = "MINGW" -a "$gpl" = "no" -a "$thread" = "auto" ] && thread="win32"

525
libpthread=""
526 527
if [ "$thread" = "auto" ]; then
    thread="no"
528
    case $SYS in
529
        BEOS)
530 531
            thread="beos"
            define HAVE_BEOSTHREAD
532
            ;;
533
        MINGW)
534
            if cc_check pthread.h -lpthread "pthread_create(0,0,0,0);" ; then
535
                thread="posix"
536 537
                libpthread="-lpthread"
            elif cc_check pthread.h -lpthreadGC2 "pthread_create(0,0,0,0);" ; then
538
                thread="posix"
539 540
                libpthread="-lpthreadGC2"
            elif cc_check pthread.h "-lpthreadGC2 -lwsock32 -DPTW32_STATIC_LIB" "pthread_create(0,0,0,0);" ; then
541
                thread="posix"
Loren Merritt's avatar
Loren Merritt committed
542
                libpthread="-lpthreadGC2 -lwsock32"
Diogo Franco's avatar
Diogo Franco committed
543
                define PTW32_STATIC_LIB
Anton Mitrofanov's avatar
Anton Mitrofanov committed
544
            elif cc_check pthread.h "-lpthreadGC2 -lws2_32 -DPTW32_STATIC_LIB" "pthread_create(0,0,0,0);" ; then
545
                thread="posix"
Anton Mitrofanov's avatar
Anton Mitrofanov committed
546
                libpthread="-lpthreadGC2 -lws2_32"
Diogo Franco's avatar
Diogo Franco committed
547
                define PTW32_STATIC_LIB
548 549 550
            else
                # default to native threading if pthread-win32 is unavailable
                thread="win32"
551 552
            fi
            ;;
553
        OPENBSD)
554
            cc_check pthread.h -pthread && thread="posix" && libpthread="-pthread"
555
            ;;
556
        *)
557
            cc_check pthread.h -lpthread && thread="posix" && libpthread="-lpthread"
558 559 560
            ;;
    esac
fi
561
if [ "$thread" = "posix" ]; then
562
    LDFLAGS="$LDFLAGS $libpthread"
563 564 565 566 567 568 569 570
    define HAVE_POSIXTHREAD
fi
if [ "$thread" = "win32" ]; then
    if [ "$SYS" = "MINGW" ]; then
        define HAVE_WIN32THREAD
    else
        thread="no"
    fi
571
fi
572
[ "$thread" != "no" ] && define HAVE_THREAD
573

574
if cc_check "math.h" "-Werror" "return log2f(2);" ; then
Diogo Franco's avatar
Diogo Franco committed
575
    define HAVE_LOG2F
576 577
fi

578 579 580 581 582 583 584 585 586 587
if [ "$vis" = "yes" ] ; then
    save_CFLAGS="$CFLAGS"
    CFLAGS="$CFLAGS -I/usr/X11R6/include"
    if cc_check "X11/Xlib.h" "-L/usr/X11R6/lib -lX11" "XOpenDisplay(0);" ; then
        LDFLAGS="-L/usr/X11R6/lib -lX11 $LDFLAGS"
        define HAVE_VISUALIZE
    else
        vis="no"
        CFLAGS="$save_CFLAGS"
   fi
588 589
fi

590 591 592 593 594 595 596 597 598 599 600
if [ "$swscale" = "auto" ] ; then
    swscale="no"
    if ${cross_prefix}pkg-config --exists libswscale 2>$DEVNULL; then
        SWSCALE_LIBS="$SWSCALE_LIBS $(${cross_prefix}pkg-config --libs libswscale)"
        SWSCALE_CFLAGS="$SWSCALE_CFLAGS $(${cross_prefix}pkg-config --cflags libswscale)"
    fi
    [ -z "$SWSCALE_LIBS" ] && SWSCALE_LIBS="-lswscale -lavutil"

    error="swscale must be at least version 0.9.0"
    if cc_check "libswscale/swscale.h" "$SWSCALE_CFLAGS $SWSCALE_LIBS" "sws_getContext(0,0,0,0,0,0,0,0,0,0);" ; then
        if cpp_check "libswscale/swscale.h" "$SWSCALE_CFLAGS" "LIBSWSCALE_VERSION_INT >= AV_VERSION_INT(0,9,0)" "$error"; then
601 602 603 604 605 606
            # we use colorspaces that were defined in libavutil r19775
            if cc_check "libavutil/pixfmt.h" "$SWSCALE_CFLAGS" "enum PixelFormat pixfmt = PIX_FMT_YUV422P16LE;" ; then
                swscale="yes"
            else
                echo "Warning: libavutil is too old, update to ffmpeg r19775+"
            fi
607 608 609 610 611 612
        else
            echo "Warning: ${error}"
        fi
    fi
fi

Steven Walters's avatar
Steven Walters committed
613 614
if [ "$lavf" = "auto" ] ; then
    lavf="no"
615
    if ${cross_prefix}pkg-config --exists libavformat libavcodec libswscale 2>$DEVNULL; then
616 617
        LAVF_LIBS="$LAVF_LIBS $(${cross_prefix}pkg-config --libs libavformat libavcodec libavutil libswscale)"
        LAVF_CFLAGS="$LAVF_CFLAGS $(${cross_prefix}pkg-config --cflags libavformat libavcodec libavutil libswscale)"
618
    fi
619
    if [ -z "$LAVF_LIBS" -a -z "$LAVF_CFLAGS" ]; then
620
        LAVF_LIBS="-lavformat"
621
        for lib in -lpostproc -lavcodec -lavcore -lswscale -lavutil -lm -lz -lbz2 $libpthread -lavifil32; do
622
            cc_check "" $lib && LAVF_LIBS="$LAVF_LIBS $lib"
623 624
        done
    fi
625
    LAVF_LIBS="-L. $LAVF_LIBS"
626 627 628 629 630 631 632 633
    if cc_check libavformat/avformat.h "$LAVF_CFLAGS $LAVF_LIBS" "avcodec_decode_video2(0,0,0,0);" ; then
        # libvautil/pixdesc.h included the private header intreadwrite.h until r21854
        if cc_check libavutil/pixdesc.h "$LAVF_CFLAGS $LAVF_LIBS" ; then
            if [ "$swscale" = "yes" ]; then
                lavf="yes"
            else
                echo "Warning: libavformat is not supported without swscale support"
            fi
634
        else
635
            echo "Warning: libavutil is too old, update to ffmpeg r21854+"
636 637 638 639
        fi
    fi
fi

Steven Walters's avatar
Steven Walters committed
640
if [ "$ffms" = "auto" ] ; then
641
    ffms_major="2"; ffms_minor="14"; ffms_micro="0"; ffms_bump="0"
Steven Walters's avatar
Steven Walters committed
642
    ffms="no"
643 644

    if ${cross_prefix}pkg-config --exists ffms2 2>$DEVNULL; then
645
        FFMS2_LIBS="$FFMS2_LIBS $(${cross_prefix}pkg-config --libs ffms2)"
James Darnley's avatar
James Darnley committed
646
        FFMS2_CFLAGS="$FFMS2_CFLAGS $(${cross_prefix}pkg-config --cflags ffms2)"
647 648 649 650
    fi
    [ -z "$FFMS2_LIBS" ] && FFMS2_LIBS="-lffms2"

    if cc_check ffms.h "$FFMS2_CFLAGS $FFMS2_LIBS" "FFMS_DestroyVideoSource(0);" ; then
Steven Walters's avatar
Steven Walters committed
651
        ffms="yes"
652
    elif cc_check ffms.h "$FFMS2_CFLAGS $FFMS2_LIBS -lstdc++ $LAVF_LIBS" "FFMS_DestroyVideoSource(0);" ; then
Steven Walters's avatar
Steven Walters committed
653
        ffms="yes"
654
        FFMS2_LIBS="$FFMS2_LIBS -lstdc++ $LAVF_LIBS"
655
    fi
Diogo Franco's avatar
Diogo Franco committed
656

657 658 659 660 661 662 663 664
    error="ffms must be at least version $ffms_major.$ffms_minor.$ffms_micro.$ffms_bump"
    if [ $ffms = "yes" ] && ! cpp_check "ffms.h" "$FFMS2_CFLAGS" "FFMS_VERSION >= (($ffms_major << 24) | ($ffms_minor << 16) | ($ffms_micro << 8) | $ffms_bump)" "$error"; then
       ffms="no"
       echo "Warning: $error"
    fi
    if [ "$ffms" = "yes" -a "$swscale" = "no" ]; then
        echo "Warning: ffms is not supported without swscale support"
        ffms="no"
Diogo Franco's avatar
Diogo Franco committed
665
    fi
666 667
fi

Yasuhiro Ikeda's avatar
Yasuhiro Ikeda committed
668
if [ "$swscale" = "yes" ]; then
669 670
    LDFLAGSCLI="$SWSCALE_LIBS $LDFLAGSCLI"
    CFLAGS="$CFLAGS $SWSCALE_CFLAGS"
Yasuhiro Ikeda's avatar
Yasuhiro Ikeda committed
671 672 673 674 675 676
    define HAVE_SWSCALE
    if [ "$lavf" = "yes" ]; then
        LDFLAGSCLI="$LAVF_LIBS $LDFLAGSCLI"
        CFLAGS="$CFLAGS $LAVF_CFLAGS"
        define HAVE_LAVF
    fi
Fiona Glaser's avatar
Fiona Glaser committed
677
    if [ "$ffms" = "yes" ]; then
Yasuhiro Ikeda's avatar
Yasuhiro Ikeda committed
678 679 680 681
        LDFLAGSCLI="$FFMS2_LIBS $LDFLAGSCLI"
        CFLAGS="$CFLAGS $FFMS2_CFLAGS"
        define HAVE_FFMS
    fi
682 683
fi

Steven Walters's avatar
Steven Walters committed
684
GPAC_LIBS="-lgpac_static"
685
if [ $SYS = MINGW ]; then
Steven Walters's avatar
Steven Walters committed
686
    GPAC_LIBS="$GPAC_LIBS -lwinmm"
687
fi
Steven Walters's avatar
Steven Walters committed
688 689 690 691 692
if [ "$gpac" = "auto" ] ; then
    gpac="no"
    if cc_check gpac/isomedia.h "$GPAC_LIBS" ; then
        if cc_check gpac/isomedia.h "$GPAC_LIBS" "gf_isom_set_pixel_aspect_ratio(0,0,0,0,0);" ; then
            gpac="yes"
Yusuke Nakamura's avatar
Yusuke Nakamura committed
693 694 695 696
        else
            echo "Warning: gpac is too old, update to 2007-06-21 UTC or later"
        fi
    fi
697
fi
Steven Walters's avatar
Steven Walters committed
698 699 700
if [ "$gpac" = "yes" ] ; then
    define HAVE_GPAC
    if cc_check gpac/isomedia.h "-Werror $GPAC_LIBS" "gf_malloc(1); gf_free(NULL);" ; then
701 702
        define HAVE_GF_MALLOC
    fi
703
    LDFLAGSCLI="$GPAC_LIBS $LDFLAGSCLI"
704 705
fi

Steven Walters's avatar
Steven Walters committed
706
if [ "$avs" = "auto" ] ; then
707 708
    avs="no"
    if [ $SYS = MINGW ] && cc_check extras/avisynth_c.h ; then
Steven Walters's avatar
Steven Walters committed
709 710
        avs="yes"
        define HAVE_AVS
Anton Mitrofanov's avatar
Anton Mitrofanov committed
711
    fi
712 713
fi

714 715
if [ "$pic" = "yes" ] ; then
    CFLAGS="$CFLAGS -fPIC"
Loren Merritt's avatar
Loren Merritt committed
716
    ASFLAGS="$ASFLAGS -DPIC"
717
    # resolve textrels in the x86 asm
718
    cc_check stdio.h -Wl,-Bsymbolic && LDFLAGS="$LDFLAGS -Wl,-Bsymbolic"
719 720
fi

721
if [ "$debug" != "yes" -a "$gprof" != "yes" ]; then
Loren Merritt's avatar
Loren Merritt committed
722
    CFLAGS="$CFLAGS -s -fomit-frame-pointer"
723
    LDFLAGS="$LDFLAGS -s"
724 725
fi

Loren Merritt's avatar
Loren Merritt committed
726
if [ "$debug" = "yes" ]; then
727
    CFLAGS="-O1 -g $CFLAGS"
728 729 730
elif [ $ARCH = ARM ]; then
    # arm-gcc-4.2 produces incorrect output with -ffast-math
    # and it doesn't save any speed anyway on 4.4, so disable it
Diogo Franco's avatar
Diogo Franco committed
731
    CFLAGS="-O3 -fno-fast-math $CFLAGS"
732
else
Diogo Franco's avatar
Diogo Franco committed
733
    CFLAGS="-O3 -ffast-math $CFLAGS"
734 735
fi

736 737 738 739
if cc_check '' -fno-tree-vectorize ; then
    CFLAGS="$CFLAGS -fno-tree-vectorize"
fi

740 741 742 743 744
if [ $SYS = MINGW -a $ARCH = X86 ] ; then
    # workaround gcc/ld bug with alignment of static variables/arrays that are initialized to zero
    cc_check '' -fno-zero-initialized-in-bss && CFLAGS="$CFLAGS -fno-zero-initialized-in-bss"
fi

Loren Merritt's avatar
Loren Merritt committed
745
if cc_check "stdio.h" "" "fseeko(stdin,0,0);" ; then
Diogo Franco's avatar
Diogo Franco committed
746 747
    define fseek fseeko
    define ftell ftello
Loren Merritt's avatar
Loren Merritt committed
748
elif cc_check "stdio.h" "" "fseeko64(stdin,0,0);" ; then
Diogo Franco's avatar
Diogo Franco committed
749 750
    define fseek fseeko64
    define ftell ftello64
Loren Merritt's avatar
Loren Merritt committed
751 752
fi

753 754 755 756
if cc_check '' -Wshadow ; then
    CFLAGS="-Wshadow $CFLAGS"
fi

757
if [ "$bit_depth" -gt "8" ]; then
758 759
    define HIGH_BIT_DEPTH
    ASFLAGS="$ASFLAGS -DHIGH_BIT_DEPTH"
760 761
fi

762
ASFLAGS="$ASFLAGS -DBIT_DEPTH=$bit_depth"
763

764
[ $gpl = yes ] && define HAVE_GPL && x264_gpl=1 || x264_gpl=0
765 766 767 768 769

#define undefined vars as 0
for var in $CONFIG_HAVE; do
    grep -q "HAVE_$var 1" config.h || define HAVE_$var 0
done
770

771 772
rm -f conftest*

773 774 775 776 777 778 779
# generate exported config file

cat > x264_config.h << EOF
#define X264_BIT_DEPTH $bit_depth
#define X264_GPL       $x264_gpl
EOF

780 781
# generate config files

782
cat > config.mak << EOF
783
prefix=$prefix
Loren Merritt's avatar
Loren Merritt committed
784
exec_prefix=$exec_prefix
785 786 787
bindir=$bindir
libdir=$libdir
includedir=$includedir
788 789 790 791 792
ARCH=$ARCH
SYS=$SYS
CC=$CC
CFLAGS=$CFLAGS
LDFLAGS=$LDFLAGS
793
LDFLAGSCLI=$LDFLAGSCLI
Anton Mitrofanov's avatar
Anton Mitrofanov committed
794 795 796
AR=$AR
RANLIB=$RANLIB
STRIP=$STRIP
797 798
AS=$AS
ASFLAGS=$ASFLAGS
Loren Merritt's avatar
Loren Merritt committed
799
EXE=$EXE
800
HAVE_GETOPT_LONG=$HAVE_GETOPT_LONG
801
DEVNULL=$DEVNULL
802 803
EOF

804
if [ "$shared" = "yes" ]; then
805
    API=$(grep '#define X264_BUILD' < x264.h | cut -f 3 -d ' ')
Zuxy Meng's avatar
Zuxy Meng committed
806 807 808 809
    if [ "$SYS" = "MINGW" ]; then
        echo "SONAME=libx264-$API.dll" >> config.mak
        echo 'IMPLIBNAME=libx264.dll.a' >> config.mak
        echo 'SOFLAGS=-Wl,--out-implib,$(IMPLIBNAME) -Wl,--enable-auto-image-base' >> config.mak
810
    elif [ "$SYS" = "MACOSX" ]; then
811
        echo "SOSUFFIX=dylib" >> config.mak
812
        echo "SONAME=libx264.$API.dylib" >> config.mak
813
        echo 'SOFLAGS=-dynamiclib -Wl,-single_module -Wl,-read_only_relocs,suppress -install_name $(DESTDIR)$(libdir)/$(SONAME)' >> config.mak
814 815 816 817
    elif [ "$SYS" = "SunOS" ]; then
        echo "SOSUFFIX=so" >> config.mak
        echo "SONAME=libx264.so.$API" >> config.mak
        echo 'SOFLAGS=-Wl,-h,$(SONAME)' >> config.mak
Zuxy Meng's avatar
Zuxy Meng committed
818
    else
819
        echo "SOSUFFIX=so" >> config.mak
Zuxy Meng's avatar
Zuxy Meng committed
820
        echo "SONAME=libx264.so.$API" >> config.mak
Loren Merritt's avatar
Loren Merritt committed
821
        echo 'SOFLAGS=-Wl,-soname,$(SONAME)' >> config.mak
Zuxy Meng's avatar
Zuxy Meng committed
822
    fi
823 824 825
    echo 'default: $(SONAME)' >> config.mak
fi

826
./version.sh >> config.h
827

828
pclibs="-L$libdir -lx264 $libpthread"
829

Loren Merritt's avatar
Loren Merritt committed
830 831 832 833 834 835 836 837
cat > x264.pc << EOF
prefix=$prefix
exec_prefix=$exec_prefix
libdir=$libdir
includedir=$includedir

Name: x264
Description: H.264 (MPEG4 AVC) encoder library
838
Version: $(grep POINTVER < config.h | sed -e 's/.* "//; s/".*//')
839
Libs: $pclibs
Loren Merritt's avatar
Loren Merritt committed
840 841 842
Cflags: -I$includedir
EOF

843
filters="crop select_every"
844
gpl_filters=""
845
[ $swscale = yes ] && filters="resize $filters"
846
[ $gpl = yes ] && filters="$filters $gpl_filters"
847

Diogo Franco's avatar
Diogo Franco committed
848 849 850 851
cat > conftest.log <<EOF
Platform:   $ARCH
System:     $SYS
asm:        $asm
Steven Walters's avatar
Steven Walters committed
852 853 854 855
avs:        $avs
lavf:       $lavf
ffms:       $ffms
gpac:       $gpac
856
gpl:        $gpl
857
thread:     $thread
858
filters:    $filters
Diogo Franco's avatar
Diogo Franco committed
859 860 861 862 863
debug:      $debug
gprof:      $gprof
PIC:        $pic
shared:     $shared
visualize:  $vis
864
bit depth:  $bit_depth
Diogo Franco's avatar
Diogo Franco committed
865 866 867 868 869 870
EOF

echo >> config.log
cat conftest.log >> config.log
cat conftest.log
rm conftest.log
Loren Merritt's avatar
Loren Merritt committed
871

872
echo
873
echo "You can run 'make' or 'make fprofiled' now."
874