]> git.sesse.net Git - x264/blob - configure
Fix detection of Alpha CPU arch on alphaev67
[x264] / configure
1 #!/bin/bash
2
3 if test x"$1" = x"-h" -o x"$1" = x"--help" ; then
4 cat <<EOF
5 Usage: ./configure [options]
6
7 Help:
8   -h, --help               print this message
9
10 Standard options:
11   --prefix=PREFIX          install architecture-independent files in PREFIX
12                            [/usr/local]
13   --exec-prefix=EPREFIX    install architecture-dependent files in EPREFIX
14                            [PREFIX]
15   --bindir=DIR             install binaries in DIR [EPREFIX/bin]
16   --libdir=DIR             install libs in DIR [EPREFIX/lib]
17   --includedir=DIR         install includes in DIR [PREFIX/include]
18   --extra-asflags=EASFLAGS add EASFLAGS to ASFLAGS
19   --extra-cflags=ECFLAGS   add ECFLAGS to CFLAGS
20   --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS
21
22 Configuration options:
23   --disable-cli            disable cli
24   --system-libx264         use system libx264 instead of internal
25   --enable-shared          build shared library
26   --enable-static          build static library
27   --disable-gpl            disable GPL-only features
28   --disable-thread         disable multithreaded encoding
29   --enable-win32thread     use win32threads (windows only)
30   --disable-interlaced     disable interlaced encoding support
31   --enable-visualize       enable visualization (X11 only)
32   --bit-depth=BIT_DEPTH    set output bit depth (8-10) [8]
33
34 Advanced options:
35   --disable-asm            disable platform-specific assembly optimizations
36   --enable-debug           add -g
37   --enable-gprof           add -pg
38   --enable-strip           add -s
39   --enable-pic             build position-independent code
40
41 Cross-compilation:
42   --host=HOST              build programs to run on HOST
43   --cross-prefix=PREFIX    use PREFIX for compilation tools
44   --sysroot=SYSROOT        root of cross-build tree
45
46 External library support:
47   --disable-avs            disable avisynth support (windows only)
48   --disable-swscale        disable swscale support
49   --disable-lavf           disable libavformat support
50   --disable-ffms           disable ffmpegsource support
51   --disable-gpac           disable gpac support
52
53 EOF
54 exit 1
55 fi
56
57 log_check() {
58     echo -n "checking $1... " >> config.log
59 }
60
61 log_ok() {
62     echo "yes" >> config.log
63 }
64
65 log_fail() {
66     echo "no" >> config.log
67 }
68
69 log_msg() {
70     echo "$1" >> config.log
71 }
72
73 intel_cflags() {
74     # Intel Compiler issues an incredibly large number of warnings on any warning level,
75     # suppress them by disabling all warnings rather than having to use #pragmas to disable most of them
76     for arg in $*; do
77         [ $arg = -ffast-math ] && arg=
78         [[ "$arg" = -falign-loops* ]] && arg=
79         [ "$arg" = -fno-tree-vectorize ] && arg=
80         [ "$arg" = -Wshadow ] && arg=
81         if [ $compiler = ICL ]; then
82             [ "$arg" = -Wall ] && arg=-W0
83             [ "$arg" = -g ] && arg=-Z7
84             [ "$arg" = -fomit-frame-pointer ] && arg=
85             [ "$arg" = -s ] && arg=
86             [ "$arg" = -fPIC ] && arg=
87         else
88             [ "$arg" = -Wall ] && arg=-w0
89         fi
90
91         [ -n "$arg" ] && echo -n "$arg "
92     done
93 }
94
95 icl_ldflags() {
96     for arg in $*; do
97         arg=${arg/LIBPATH/libpath}
98         [ ${arg#-libpath:} == $arg -a ${arg#-l} != $arg ] && arg=${arg#-l}.lib
99         [ ${arg#-L} != $arg ] && arg=-libpath:${arg#-L}
100         [ $arg = -Wl,--large-address-aware ] && arg=-largeaddressaware
101         [ $arg = -s ] && arg=
102         [ "$arg" = -Wl,-Bsymbolic ] && arg=
103
104         arg=${arg/pthreadGC/pthreadVC}
105         [ "$arg" = avifil32.lib ] && arg=vfw32.lib
106         [ "$arg" = gpac_static.lib ] && arg=libgpac_static.lib
107
108         [ -n "$arg" ] && echo -n "$arg "
109     done
110 }
111
112 cc_check() {
113     if [ -z "$3" ]; then
114         if [ -z "$1$2" ]; then
115             log_check "whether $CC works"
116         elif [ -z "$1" ]; then
117             log_check "for $2"
118         else
119             log_check "for $1"
120         fi
121     elif [ -z "$1" ]; then
122         if [ -z "$2" ]; then
123             log_check "whether $CC supports $3"
124         else
125             log_check "whether $CC supports $3 with $2"
126         fi
127     else
128         log_check "for $3 in $1";
129     fi
130     rm -f conftest.c
131     [ -n "$1" ] && echo "#include <$1>" > conftest.c
132     echo "int main () { $3 return 0; }" >> conftest.c
133     if [ $compiler = ICL ]; then
134         cc_cmd="$CC conftest.c $CFLAGS $2 -link $(icl_ldflags $2 $LDFLAGSCLI $LDFLAGS)"
135     else
136         cc_cmd="$CC conftest.c $CFLAGS $2 $LDFLAGSCLI $LDFLAGS -o conftest"
137     fi
138     if $cc_cmd >conftest.log 2>&1; then
139         res=$?
140         log_ok
141     else
142         res=$?
143         log_fail
144         log_msg "Failed commandline was:"
145         log_msg "--------------------------------------------------"
146         log_msg "$cc_cmd"
147         cat conftest.log >> config.log
148         log_msg "--------------------------------------------------"
149         log_msg "Failed program was:"
150         log_msg "--------------------------------------------------"
151         cat conftest.c >> config.log
152         log_msg "--------------------------------------------------"
153     fi
154     return $res
155 }
156
157 cpp_check() {
158     log_check "whether $3 is true"
159     rm -f conftest.c
160     [ -n "$1" ] && echo "#include <$1>" > conftest.c
161     echo -e "#if !($3) \n#error $4 \n#endif " >> conftest.c
162
163     if $CC conftest.c $CFLAGS $2 -E -o conftest >conftest.log 2>&1; then
164         res=$?
165         log_ok
166     else
167         res=$?
168         log_fail
169         log_msg "--------------------------------------------------"
170         cat conftest.log >> config.log
171         log_msg "--------------------------------------------------"
172         log_msg "Failed program was:"
173         log_msg "--------------------------------------------------"
174         cat conftest.c >> config.log
175         log_msg "--------------------------------------------------"
176     fi
177     return $res
178 }
179
180 as_check() {
181     log_check "whether $AS supports $1"
182     echo "$1" > conftest.asm
183     if $AS conftest.asm $ASFLAGS $2 -o conftest.o >conftest.log 2>&1; then
184         res=$?
185         log_ok
186     else
187         res=$?
188         log_fail
189         log_msg "Failed commandline was:"
190         log_msg "--------------------------------------------------"
191         log_msg "$AS conftest.asm $ASFLAGS $2 -o conftest.o"
192         cat conftest.log >> config.log
193         log_msg "--------------------------------------------------"
194         log_msg "Failed program was:"
195         log_msg "--------------------------------------------------"
196         cat conftest.asm >> config.log
197         log_msg "--------------------------------------------------"
198     fi
199     return $res
200 }
201
202 define() {
203     echo "#define $1$([ -n "$2" ] && echo " $2" || echo " 1")" >> config.h
204 }
205
206 die() {
207     log_msg "DIED: $@"
208     echo "$@"
209     exit 1
210 }
211
212 rm -f x264_config.h config.h config.mak config.log x264.pc x264.def conftest*
213
214 prefix='/usr/local'
215 exec_prefix='${prefix}'
216 bindir='${exec_prefix}/bin'
217 libdir='${exec_prefix}/lib'
218 includedir='${prefix}/include'
219 DEVNULL='/dev/null'
220
221 cli="yes"
222 cli_libx264="internal"
223 shared="no"
224 static="no"
225 avs="auto"
226 lavf="auto"
227 ffms="auto"
228 gpac="auto"
229 gpl="yes"
230 thread="auto"
231 swscale="auto"
232 asm="auto"
233 interlaced="yes"
234 debug="no"
235 gprof="no"
236 strip="no"
237 pic="no"
238 vis="no"
239 bit_depth="8"
240 compiler="GNU"
241
242 CFLAGS="$CFLAGS -Wall -I."
243 LDFLAGS="$LDFLAGS"
244 LDFLAGSCLI="$LDFLAGSCLI"
245 ASFLAGS="$ASFLAGS"
246 HAVE_GETOPT_LONG=1
247 cross_prefix=""
248
249 EXE=""
250
251 # list of all preprocessor HAVE values we can define
252 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 VECTOREXT INTERLACED CPU_COUNT"
253
254 # parse options
255
256 for opt do
257     optarg="${opt#*=}"
258     case "$opt" in
259         --prefix=*)
260             prefix="$optarg"
261             ;;
262         --exec-prefix=*)
263             exec_prefix="$optarg"
264             ;;
265         --bindir=*)
266             bindir="$optarg"
267             ;;
268         --libdir=*)
269             libdir="$optarg"
270             ;;
271         --includedir=*)
272             includedir="$optarg"
273             ;;
274         --disable-cli)
275             cli="no"
276             ;;
277         --system-libx264)
278             cli_libx264="system"
279             ;;
280         --enable-shared)
281             shared="yes"
282             ;;
283         --enable-static)
284             static="yes"
285             ;;
286         --disable-asm)
287             asm="no"
288             ;;
289         --disable-interlaced)
290             interlaced="no"
291             ;;
292         --disable-avs)
293             avs="no"
294             ;;
295         --disable-lavf)
296             lavf="no"
297             ;;
298         --disable-ffms)
299             ffms="no"
300             ;;
301         --disable-gpac)
302             gpac="no"
303             ;;
304         --disable-gpl)
305             gpl="no"
306             ;;
307         --extra-asflags=*)
308             ASFLAGS="$ASFLAGS $optarg"
309             ;;
310         --extra-cflags=*)
311             CFLAGS="$CFLAGS $optarg"
312             ;;
313         --extra-ldflags=*)
314             LDFLAGS="$LDFLAGS $optarg"
315             ;;
316         --disable-thread)
317             thread="no"
318             ;;
319         --enable-win32thread)
320             thread="win32"
321             ;;
322         --disable-swscale)
323             swscale="no"
324             ;;
325         --enable-debug)
326             debug="yes"
327             ;;
328         --enable-gprof)
329             CFLAGS="$CFLAGS -pg"
330             LDFLAGS="$LDFLAGS -pg"
331             gprof="yes"
332             ;;
333         --enable-strip)
334             strip="yes"
335             ;;
336         --enable-pic)
337             pic="yes"
338             ;;
339         --enable-visualize)
340             vis="yes"
341             ;;
342         --host=*)
343             host="$optarg"
344             ;;
345         --cross-prefix=*)
346             cross_prefix="$optarg"
347             ;;
348         --sysroot=*)
349             CFLAGS="$CFLAGS --sysroot=$optarg"
350             LDFLAGS="$LDFLAGS --sysroot=$optarg"
351             ;;
352         --bit-depth=*)
353             bit_depth="$optarg"
354             if [ "$bit_depth" -lt "8" -o "$bit_depth" -gt "10" ]; then
355                 echo "Supplied bit depth must be in range [8,10]."
356                 exit 1
357             fi
358             bit_depth=`expr $bit_depth + 0`
359             ;;
360         *)
361             echo "Unknown option $opt, ignored"
362             ;;
363     esac
364 done
365
366 [ "$cli" = "no" -a "$shared" = "no" -a "$static" = "no" ] && die "Nothing to build. Enable cli, shared or static."
367
368 CC="${CC-${cross_prefix}gcc}"
369 AR="${AR-${cross_prefix}ar}"
370 RANLIB="${RANLIB-${cross_prefix}ranlib}"
371 STRIP="${STRIP-${cross_prefix}strip}"
372
373 if [ "x$host" = x ]; then
374     host=`./config.guess`
375 fi
376 # normalize a triplet into a quadruplet
377 host=`./config.sub $host`
378
379 # split $host
380 host_cpu="${host%%-*}"
381 host="${host#*-}"
382 host_vendor="${host%%-*}"
383 host_os="${host#*-}"
384
385 # test for use of Intel Compiler
386 if [[ $host_os = mingw* || $host_os = cygwin* ]]; then
387     if [[ `basename "$CC"` = icl* ]]; then
388         # Windows Intel Compiler creates dependency generation with absolute Windows paths, Cygwin's make does not support Windows paths.
389         [[ $host_os = cygwin* ]] && die "Windows Intel Compiler support requires MSYS"
390         compiler=ICL
391         CFLAGS="$CFLAGS -Qstd=c99 -nologo -Qms0 -DHAVE_STRING_H -Iextras"
392         QPRE="-Q"
393         `$CC 2>&1 | grep -q IA-32` && host_cpu=i486
394         `$CC 2>&1 | grep -q "Intel(R) 64"` && host_cpu=x86_64
395         cpp_check "" "" "_MSC_VER >= 1400" || die "Windows Intel Compiler support requires Visual Studio 2005 or newer"
396     fi
397 else
398     if [[ `basename "$CC"` = icc* ]]; then
399         AR="xiar"
400         compiler=ICC
401         QPRE="-"
402     fi
403 fi
404
405 case $host_os in
406     beos*)
407         SYS="BEOS"
408         define HAVE_MALLOC_H
409         ;;
410     darwin*)
411         SYS="MACOSX"
412         CFLAGS="$CFLAGS -falign-loops=16"
413         LDFLAGS="$LDFLAGS -lm"
414         if [ "$pic" = "no" ]; then
415             cc_check "" -mdynamic-no-pic && CFLAGS="$CFLAGS -mdynamic-no-pic"
416         fi
417         ;;
418     freebsd*)
419         SYS="FREEBSD"
420         LDFLAGS="$LDFLAGS -lm"
421         ;;
422     kfreebsd*-gnu)
423         SYS="FREEBSD"
424         define HAVE_MALLOC_H
425         LDFLAGS="$LDFLAGS -lm"
426         ;;
427     netbsd*)
428         SYS="NETBSD"
429         LDFLAGS="$LDFLAGS -lm"
430         ;;
431     openbsd*)
432         SYS="OPENBSD"
433         LDFLAGS="$LDFLAGS -lm"
434         ;;
435     *linux*)
436         SYS="LINUX"
437         define HAVE_MALLOC_H
438         LDFLAGS="$LDFLAGS -lm"
439         ;;
440     gnu*)
441         SYS="HURD"
442         define HAVE_MALLOC_H
443         LDFLAGS="$LDFLAGS -lm"
444         ;;
445     cygwin*)
446         EXE=".exe"
447         if cc_check "" -mno-cygwin; then
448             CFLAGS="$CFLAGS -mno-cygwin"
449             LDFLAGS="$LDFLAGS -mno-cygwin"
450         fi
451         if cpp_check "" "" "defined(__CYGWIN32__)" ; then
452             define HAVE_MALLOC_H
453             SYS="CYGWIN"
454         else
455             SYS="WINDOWS"
456             DEVNULL="NUL"
457         fi
458         ;;
459     mingw*)
460         SYS="WINDOWS"
461         EXE=".exe"
462         DEVNULL="NUL"
463         ;;
464     sunos*|solaris*)
465         SYS="SunOS"
466         define HAVE_MALLOC_H
467         LDFLAGS="$LDFLAGS -lm"
468         HAVE_GETOPT_LONG=0
469         ;;
470     *)
471         die "Unknown system $host, edit the configure"
472         ;;
473 esac
474
475 case $host_cpu in
476     i*86)
477         ARCH="X86"
478         AS="yasm"
479         ASFLAGS="$ASFLAGS -O2"
480         if [ $compiler = GNU ]; then
481             if [[ "$asm" == auto && "$CFLAGS" != *-march* ]]; then
482                 CFLAGS="$CFLAGS -march=i686"
483             fi
484             if [[ "$asm" == auto && "$CFLAGS" != *-mfpmath* ]]; then
485                 CFLAGS="$CFLAGS -mfpmath=sse -msse"
486             fi
487         else
488             # icc on linux has various degrees of mod16 stack support
489             if [ $SYS = LINUX ]; then
490                 # < 11 is completely incapable of keeping a mod16 stack
491                 if cpp_check "" "" "__INTEL_COMPILER < 1100" ; then
492                     define BROKEN_STACK_ALIGNMENT
493                 # 11 <= x < 12 is capable of keeping a mod16 stack, but defaults to not doing so.
494                 elif cpp_check "" "" "__INTEL_COMPILER < 1200" ; then
495                     CFLAGS="$CFLAGS -falign-stack=assume-16-byte"
496                 fi
497                 # >= 12 defaults to a mod16 stack
498             fi
499             # icl on windows has no mod16 stack support
500             [ $SYS = WINDOWS ] && define BROKEN_STACK_ALIGNMENT
501         fi
502         if [ "$SYS" = MACOSX ]; then
503             ASFLAGS="$ASFLAGS -f macho -DPREFIX"
504         elif [ "$SYS" = WINDOWS -o "$SYS" = CYGWIN ]; then
505             ASFLAGS="$ASFLAGS -f win32 -DPREFIX"
506             LDFLAGS="$LDFLAGS -Wl,--large-address-aware"
507         else
508             ASFLAGS="$ASFLAGS -f elf"
509         fi
510         ;;
511     x86_64)
512         ARCH="X86_64"
513         AS="yasm"
514         if [ "$SYS" = MACOSX ]; then
515             ASFLAGS="$ASFLAGS -f macho64 -m amd64 -DPIC -DPREFIX"
516             if cc_check '' "-arch x86_64"; then
517                 CFLAGS="$CFLAGS -arch x86_64"
518                 LDFLAGS="$LDFLAGS -arch x86_64"
519             fi
520         elif [ "$SYS" = WINDOWS ]; then
521             ASFLAGS="$ASFLAGS -f win32 -m amd64"
522             # only the GNU toolchain is inconsistent in prefixing function names with _
523             [ $compiler = GNU ] && cc_check "" "-S" && grep -q "_main:" conftest && ASFLAGS="$ASFLAGS -DPREFIX"
524         else
525             ASFLAGS="$ASFLAGS -f elf -m amd64"
526         fi
527         ;;
528     powerpc|powerpc64)
529         ARCH="PPC"
530         if [ $asm = auto ] ; then
531             define HAVE_ALTIVEC
532             AS="${AS-${cross_prefix}gcc}"
533             if [ $SYS = MACOSX ] ; then
534                 CFLAGS="$CFLAGS -faltivec -fastf -mcpu=G4"
535             else
536                 CFLAGS="$CFLAGS -maltivec -mabi=altivec"
537                 define HAVE_ALTIVEC_H
538             fi
539         fi
540         ;;
541     sparc)
542         ARCH="SPARC"
543         case $(uname -m) in
544             sun4u|sun4v)
545                 if [ $asm = auto ]; then
546                     ARCH="UltraSPARC"
547                     if ! echo $CFLAGS | grep -Eq '\-mcpu' ; then
548                         CFLAGS="$CFLAGS -mcpu=ultrasparc"
549                         LDFLAGS="$LDFLAGS -mcpu=ultrasparc"
550                     fi
551                     AS="${AS-${cross_prefix}as}"
552                     ASFLAGS="$ASFLAGS -xarch=v8plusa"
553                 fi
554                 ;;
555         esac
556         ;;
557     mips|mipsel|mips64|mips64el)
558         ARCH="MIPS"
559         ;;
560     arm*)
561         ARCH="ARM"
562         if [ "$SYS" = MACOSX ] ; then
563             AS="${AS-extras/gas-preprocessor.pl $CC}"
564             ASFLAGS="$ASFLAGS -DPREFIX -DPIC"  # apple's ld doesn't support movw/movt relocations at all
565             # build for armv7 by default
566             if ! echo $CFLAGS | grep -Eq '\-arch' ; then
567                 CFLAGS="$CFLAGS -arch armv7"
568                 LDFLAGS="$LDFLAGS -arch armv7"
569             fi
570         else
571             AS="${AS-${cross_prefix}gcc}"
572         fi
573         ;;
574     s390|s390x)
575         ARCH="S390"
576         ;;
577     parisc|parisc64)
578         ARCH="PARISC"
579         ;;
580     ia64)
581         ARCH="IA64"
582         ;;
583     alpha*)
584         ARCH="ALPHA"
585         ;;
586     *)
587         ARCH="$(echo $host_cpu | tr a-z A-Z)"
588         ;;
589 esac
590
591 log_msg "x264 configure script"
592 if [ -n "$*" ]; then
593     msg="Command line options:"
594     for i in $@; do
595         msg="$msg \"$i\""
596     done
597     log_msg "$msg"
598 fi
599 log_msg ""
600
601 # check requirements
602
603 cc_check || die "No working C compiler found."
604
605 if [ $compiler != ICL ]; then
606     if cc_check '' -std=gnu99 'for( int i = 0; i < 9; i++ );' ; then
607         CFLAGS="$CFLAGS -std=gnu99"
608     elif cc_check '' -std=c99 'for( int i = 0; i < 9; i++ );' ; then
609         CFLAGS="$CFLAGS -std=c99 -D_POSIX_C_SOURCE=200112L -D_BSD_SOURCE"
610     elif ! cc_check '' '' 'for( int i = 0; i < 9; i++ );' ; then
611         die "C99 compiler is needed for compilation."
612     fi
613 fi
614
615 if [ $shared = yes -a \( $ARCH = "X86_64" -o $ARCH = "PPC" -o $ARCH = "ALPHA" -o $ARCH = "ARM" -o $ARCH = "IA64" \) ] ; then
616     pic="yes"
617 fi
618
619 if [ $asm = auto -a \( $ARCH = X86 -o $ARCH = X86_64 \) ] ; then
620     if ! as_check "vpaddw xmm0, xmm0, xmm0" ; then
621         VER=`($AS --version || echo no assembler) 2>/dev/null | head -n 1`
622         echo "Found $VER"
623         echo "Minimum version is yasm-0.7.0"
624         echo "If you really want to compile without asm, configure with --disable-asm."
625         exit 1
626     fi
627     if ! cc_check '' '' '__asm__("pabsw %xmm0, %xmm0");' ; then
628         VER=`(${cross_prefix}as --version || echo no gnu as) 2>/dev/null | head -n 1`
629         echo "Found $VER"
630         echo "Minimum version is binutils-2.17"
631         echo "Your compiler can't handle inline SSSE3 asm."
632         echo "If you really want to compile without asm, configure with --disable-asm."
633         exit 1
634     fi
635     define HAVE_MMX
636 fi
637
638 if [ $asm = auto -a $ARCH = ARM ] ; then
639     # set flags so neon is built by default
640     echo $CFLAGS | grep -Eq '(-mcpu|-march|-mfpu)' || CFLAGS="$CFLAGS -mcpu=cortex-a8 -mfpu=neon"
641
642     if  cc_check '' '' '__asm__("rev ip, ip");' ; then      define HAVE_ARMV6
643         cc_check '' '' '__asm__("movt r0, #0");'         && define HAVE_ARMV6T2
644         cc_check '' '' '__asm__("vadd.i16 q0, q0, q0");' && define HAVE_NEON
645         ASFLAGS="$ASFLAGS $CFLAGS -c"
646     else
647         echo "You specified a pre-ARMv6 or Thumb-1 CPU in your CFLAGS."
648         echo "If you really want to run on such a CPU, configure with --disable-asm."
649         exit 1
650     fi
651 fi
652
653 [ $asm = no ] && AS=""
654 [ "x$AS" = x ] && asm="no" || asm="yes"
655
656 define ARCH_$ARCH
657 define SYS_$SYS
658
659 # skip endianness check for Intel Compiler, as all supported platforms are little. the -ipo flag will also cause the check to fail
660 if [ $compiler = GNU ]; then
661     echo "int i[2] = {0x42494745,0}; double f[2] = {0x1.0656e6469616ep+102,0};" > conftest.c
662     $CC $CFLAGS conftest.c -c -o conftest.o 2>/dev/null || die "endian test failed"
663     if (${cross_prefix}strings -a conftest.o | grep -q BIGE) && (${cross_prefix}strings -a conftest.o | grep -q FPendian) ; then
664         define WORDS_BIGENDIAN
665     elif !(${cross_prefix}strings -a conftest.o | grep -q EGIB && ${cross_prefix}strings -a conftest.o | grep -q naidnePF) ; then
666         die "endian test failed"
667     fi
668 fi
669
670 # autodetect options that weren't forced nor disabled
671
672 # pthread-win32 is lgpl, prevent its use if --disable-gpl is specified and targeting windows
673 [ "$SYS" = "WINDOWS" -a "$gpl" = "no" -a "$thread" = "auto" ] && thread="win32"
674
675 libpthread=""
676 if [ "$thread" = "auto" ]; then
677     thread="no"
678     case $SYS in
679         BEOS)
680             thread="beos"
681             define HAVE_BEOSTHREAD
682             ;;
683         WINDOWS)
684             if cc_check pthread.h -lpthread "pthread_create(0,0,0,0);" ; then
685                 thread="posix"
686                 libpthread="-lpthread"
687             elif cc_check pthread.h -lpthreadGC2 "pthread_create(0,0,0,0);" ; then
688                 thread="posix"
689                 libpthread="-lpthreadGC2"
690             elif cc_check pthread.h "-lpthreadGC2 -lwsock32 -DPTW32_STATIC_LIB" "pthread_create(0,0,0,0);" ; then
691                 thread="posix"
692                 libpthread="-lpthreadGC2 -lwsock32"
693                 define PTW32_STATIC_LIB
694             elif cc_check pthread.h "-lpthreadGC2 -lws2_32 -DPTW32_STATIC_LIB" "pthread_create(0,0,0,0);" ; then
695                 thread="posix"
696                 libpthread="-lpthreadGC2 -lws2_32"
697                 define PTW32_STATIC_LIB
698             else
699                 # default to native threading if pthread-win32 is unavailable
700                 thread="win32"
701             fi
702             ;;
703         OPENBSD)
704             cc_check pthread.h -pthread && thread="posix" && libpthread="-pthread"
705             ;;
706         *)
707             cc_check pthread.h -lpthread && thread="posix" && libpthread="-lpthread"
708             ;;
709     esac
710 fi
711 if [ "$thread" = "posix" ]; then
712     LDFLAGS="$LDFLAGS $libpthread"
713     define HAVE_POSIXTHREAD
714     if [ "$SYS" = "LINUX" ] && cc_check sched.h "-D_GNU_SOURCE -Werror" "cpu_set_t p_aff; return CPU_COUNT(&p_aff);" ; then
715         define HAVE_CPU_COUNT
716     fi
717 fi
718 if [ "$thread" = "win32" ]; then
719     # cygwin does not support win32 threads
720     if [ "$SYS" = "WINDOWS" ]; then
721         define HAVE_WIN32THREAD
722     else
723         thread="no"
724     fi
725 fi
726 [ "$thread" != "no" ] && define HAVE_THREAD
727
728 if cc_check "math.h" "-Werror" "return log2f(2);" ; then
729     define HAVE_LOG2F
730 fi
731
732 if [ "$vis" = "yes" ] ; then
733     save_CFLAGS="$CFLAGS"
734     CFLAGS="$CFLAGS -I/usr/X11R6/include"
735     if cc_check "X11/Xlib.h" "-L/usr/X11R6/lib -lX11" "XOpenDisplay(0);" ; then
736         LDFLAGS="-L/usr/X11R6/lib -lX11 $LDFLAGS"
737         define HAVE_VISUALIZE
738     else
739         vis="no"
740         CFLAGS="$save_CFLAGS"
741    fi
742 fi
743
744 if [ "$swscale" = "auto" ] ; then
745     swscale="no"
746     if ${cross_prefix}pkg-config --exists libswscale 2>/dev/null; then
747         SWSCALE_LIBS="$SWSCALE_LIBS $(${cross_prefix}pkg-config --libs libswscale libavutil)"
748         SWSCALE_CFLAGS="$SWSCALE_CFLAGS $(${cross_prefix}pkg-config --cflags libswscale libavutil)"
749     fi
750     [ -z "$SWSCALE_LIBS" ] && SWSCALE_LIBS="-lswscale -lavutil"
751
752     if cc_check "libswscale/swscale.h" "$SWSCALE_CFLAGS $SWSCALE_LIBS" "sws_init_context(0,0,0);" ; then
753         if cc_check "libavutil/pixdesc.h" "$SWSCALE_CFLAGS $SWSCALE_LIBS" "av_get_pix_fmt_name(0);" ; then
754             swscale="yes"
755         else
756             echo "Warning: av_get_pix_fmt_name is missing from libavutil, update for swscale support"
757         fi
758     fi
759 fi
760
761 if [ "$lavf" = "auto" ] ; then
762     lavf="no"
763     if ${cross_prefix}pkg-config --exists libavformat libavcodec libswscale 2>/dev/null; then
764         LAVF_LIBS="$LAVF_LIBS $(${cross_prefix}pkg-config --libs libavformat libavcodec libavutil libswscale)"
765         LAVF_CFLAGS="$LAVF_CFLAGS $(${cross_prefix}pkg-config --cflags libavformat libavcodec libavutil libswscale)"
766     fi
767     if [ -z "$LAVF_LIBS" -a -z "$LAVF_CFLAGS" ]; then
768         LAVF_LIBS="-lavformat"
769         for lib in -lpostproc -lavcodec -lavcore -lswscale -lavutil -lm -lz -lbz2 $libpthread -lavifil32; do
770             cc_check "" $lib && LAVF_LIBS="$LAVF_LIBS $lib"
771         done
772     fi
773     LAVF_LIBS="-L. $LAVF_LIBS"
774     if cc_check libavformat/avformat.h "$LAVF_CFLAGS $LAVF_LIBS" "avformat_find_stream_info(0,0); avcodec_open2(0,0,0);" ; then
775         if [ "$swscale" = "yes" ]; then
776             lavf="yes"
777         else
778             echo "Warning: libavformat is not supported without swscale support"
779         fi
780     fi
781 fi
782
783 if [ "$ffms" = "auto" ] ; then
784     ffms_major="2"; ffms_minor="14"; ffms_micro="0"; ffms_bump="0"
785     ffms="no"
786
787     if ${cross_prefix}pkg-config --exists ffms2 2>/dev/null; then
788         FFMS2_LIBS="$FFMS2_LIBS $(${cross_prefix}pkg-config --libs ffms2)"
789         FFMS2_CFLAGS="$FFMS2_CFLAGS $(${cross_prefix}pkg-config --cflags ffms2)"
790     fi
791     [ -z "$FFMS2_LIBS" ] && FFMS2_LIBS="-lffms2"
792
793     if cc_check ffms.h "$FFMS2_CFLAGS $FFMS2_LIBS" "FFMS_DestroyVideoSource(0);" ; then
794         ffms="yes"
795     elif cc_check ffms.h "$FFMS2_CFLAGS $FFMS2_LIBS -lstdc++ $LAVF_LIBS" "FFMS_DestroyVideoSource(0);" ; then
796         ffms="yes"
797         FFMS2_LIBS="$FFMS2_LIBS -lstdc++ $LAVF_LIBS"
798     fi
799
800     error="ffms must be at least version $ffms_major.$ffms_minor.$ffms_micro.$ffms_bump"
801     if [ $ffms = "yes" ] && ! cpp_check "ffms.h" "$FFMS2_CFLAGS" "FFMS_VERSION >= (($ffms_major << 24) | ($ffms_minor << 16) | ($ffms_micro << 8) | $ffms_bump)" "$error"; then
802        ffms="no"
803        echo "Warning: $error"
804     fi
805     if [ "$ffms" = "yes" -a "$swscale" = "no" ]; then
806         echo "Warning: ffms is not supported without swscale support"
807         ffms="no"
808     fi
809 fi
810
811 if [ "$swscale" = "yes" ]; then
812     LDFLAGSCLI="$SWSCALE_LIBS $LDFLAGSCLI"
813     CFLAGS="$CFLAGS $SWSCALE_CFLAGS"
814     define HAVE_SWSCALE
815     if [ "$lavf" = "yes" ]; then
816         LDFLAGSCLI="$LAVF_LIBS $LDFLAGSCLI"
817         CFLAGS="$CFLAGS $LAVF_CFLAGS"
818         define HAVE_LAVF
819     fi
820     if [ "$ffms" = "yes" ]; then
821         LDFLAGSCLI="$FFMS2_LIBS $LDFLAGSCLI"
822         CFLAGS="$CFLAGS $FFMS2_CFLAGS"
823         define HAVE_FFMS
824     fi
825 fi
826
827 if [ "$gpac" = "auto" ] ; then
828     gpac="no"
829     cc_check "" -lz && GPAC_LIBS="-lgpac_static -lz" || GPAC_LIBS="-lgpac_static"
830     if [ "$SYS" = "WINDOWS" ] ; then
831         GPAC_LIBS="$GPAC_LIBS -lwinmm"
832     fi
833     if cc_check gpac/isomedia.h "$GPAC_LIBS" ; then
834         if cc_check gpac/isomedia.h "$GPAC_LIBS" "gf_isom_set_pixel_aspect_ratio(0,0,0,0,0);" ; then
835             gpac="yes"
836         else
837             echo "Warning: gpac is too old, update to 2007-06-21 UTC or later"
838         fi
839     fi
840 fi
841 if [ "$gpac" = "yes" ] ; then
842     define HAVE_GPAC
843     if cc_check gpac/isomedia.h "-Werror $GPAC_LIBS" "gf_malloc(1); gf_free(NULL);" ; then
844         define HAVE_GF_MALLOC
845     fi
846     LDFLAGSCLI="$GPAC_LIBS $LDFLAGSCLI"
847 fi
848
849 if [ "$avs" = "auto" ] ; then
850     avs="no"
851     # cygwin can use avisynth if it can use LoadLibrary
852     if [ $SYS = WINDOWS ] || ([ $SYS = CYGWIN ] && cc_check windows.h "" "LoadLibrary(0);") ; then
853         avs="yes"
854         define HAVE_AVS
855     fi
856 fi
857
858 cc_check "stdint.h" "" "uint32_t test_vec __attribute__ ((vector_size (16))) = {0,1,2,3};" && define HAVE_VECTOREXT
859
860 if [ "$pic" = "yes" ] ; then
861     CFLAGS="$CFLAGS -fPIC"
862     ASFLAGS="$ASFLAGS -DPIC"
863     # resolve textrels in the x86 asm
864     cc_check stdio.h -Wl,-Bsymbolic && LDFLAGS="$LDFLAGS -Wl,-Bsymbolic"
865 fi
866
867 if [ "$debug" != "yes" -a "$gprof" != "yes" ]; then
868     CFLAGS="$CFLAGS -fomit-frame-pointer"
869 fi
870
871 if [ "$strip" = "yes" ]; then
872     CFLAGS="$CFLAGS -s"
873     LDFLAGS="$LDFLAGS -s"
874 fi
875
876 if [ "$debug" = "yes" ]; then
877     CFLAGS="-O1 -g $CFLAGS"
878 elif [ $ARCH = ARM ]; then
879     # arm-gcc-4.2 produces incorrect output with -ffast-math
880     # and it doesn't save any speed anyway on 4.4, so disable it
881     CFLAGS="-O3 -fno-fast-math $CFLAGS"
882 else
883     CFLAGS="-O3 -ffast-math $CFLAGS"
884 fi
885
886 if cc_check '' -fno-tree-vectorize ; then
887     CFLAGS="$CFLAGS -fno-tree-vectorize"
888 fi
889
890 if [ $SYS = WINDOWS -a $ARCH = X86 -a $compiler = GNU ] ; then
891     # workaround gcc/ld bug with alignment of static variables/arrays that are initialized to zero
892     cc_check '' -fno-zero-initialized-in-bss && CFLAGS="$CFLAGS -fno-zero-initialized-in-bss"
893 fi
894
895 if cc_check "stdio.h" "" "fseeko(stdin,0,0);" ; then
896     define fseek fseeko
897     define ftell ftello
898 elif cc_check "stdio.h" "" "fseeko64(stdin,0,0);" ; then
899     define fseek fseeko64
900     define ftell ftello64
901 elif cc_check "stdio.h" "" "_fseeki64(stdin,0,0);" ; then
902     define fseek _fseeki64
903     define ftell _ftelli64
904 fi
905
906 if cc_check '' -Wshadow ; then
907     CFLAGS="-Wshadow $CFLAGS"
908 fi
909
910 if [ "$bit_depth" -gt "8" ]; then
911     define HIGH_BIT_DEPTH
912     ASFLAGS="$ASFLAGS -DHIGH_BIT_DEPTH"
913 fi
914
915 ASFLAGS="$ASFLAGS -DBIT_DEPTH=$bit_depth"
916
917 [ $gpl = yes ] && define HAVE_GPL && x264_gpl=1 || x264_gpl=0
918
919 [ $interlaced = yes ] && define HAVE_INTERLACED && x264_interlaced=1 || x264_interlaced=0
920
921 #define undefined vars as 0
922 for var in $CONFIG_HAVE; do
923     grep -q "HAVE_$var 1" config.h || define HAVE_$var 0
924 done
925
926 if [ $compiler = ICL ]; then
927     AR="xilib -nologo -out:"
928     DEPMM=-QMM
929     DEPMT=-QMT
930     HAVE_GETOPT_LONG=0
931     LD="xilink -out:"
932     LDFLAGS="-nologo -incremental:no $(icl_ldflags $LDFLAGS)"
933     LDFLAGSCLI="$(icl_ldflags $LDFLAGSCLI)"
934     LIBX264=libx264.lib
935     RANLIB=
936     STRIP=
937     if [ $debug = yes ]; then
938         LDFLAGS="-debug $LDFLAGS"
939         CFLAGS="-D_DEBUG $CFLAGS"
940     else
941         CFLAGS="-DNDEBUG $CFLAGS"
942     fi
943 else
944     AR="$AR rc "
945     DEPMM="-MM -g0"
946     DEPMT="-MT"
947     LD="$CC -o "
948     LIBX264=libx264.a
949 fi
950 if [ $compiler = GNU ]; then
951     PROF_GEN_CC="-fprofile-generate"
952     PROF_GEN_LD="-fprofile-generate"
953     PROF_USE_CC="-fprofile-use"
954     PROF_USE_LD="-fprofile-use"
955 else
956     CFLAGS="$(intel_cflags $CFLAGS)"
957     # icc does not define __SSE__ until SSE2 optimization and icl never defines it or _M_IX86_FP
958     [ \( $ARCH = X86_64 -o $ARCH = X86 \) -a $asm = yes ] && ! cpp_check "" "" "defined(__SSE__)" && define __SSE__
959     PROF_GEN_CC="${QPRE}prof-gen ${QPRE}prof-dir."
960     PROF_GEN_LD=
961     PROF_USE_CC="${QPRE}prof-use ${QPRE}prof-dir."
962     PROF_USE_LD=
963 fi
964
965 rm -f conftest*
966
967 # generate exported config file
968
969 cat > x264_config.h << EOF
970 #define X264_BIT_DEPTH  $bit_depth
971 #define X264_GPL        $x264_gpl
972 #define X264_INTERLACED $x264_interlaced
973 EOF
974
975 # generate config files
976
977 cat > config.mak << EOF
978 prefix=$prefix
979 exec_prefix=$exec_prefix
980 bindir=$bindir
981 libdir=$libdir
982 includedir=$includedir
983 ARCH=$ARCH
984 SYS=$SYS
985 CC=$CC
986 CFLAGS=$CFLAGS
987 DEPMM=$DEPMM
988 DEPMT=$DEPMT
989 LD=$LD
990 LDFLAGS=$LDFLAGS
991 LIBX264=$LIBX264
992 AR=$AR
993 RANLIB=$RANLIB
994 STRIP=$STRIP
995 AS=$AS
996 ASFLAGS=$ASFLAGS
997 EXE=$EXE
998 HAVE_GETOPT_LONG=$HAVE_GETOPT_LONG
999 DEVNULL=$DEVNULL
1000 PROF_GEN_CC=$PROF_GEN_CC
1001 PROF_GEN_LD=$PROF_GEN_LD
1002 PROF_USE_CC=$PROF_USE_CC
1003 PROF_USE_LD=$PROF_USE_LD
1004 EOF
1005
1006 if [ $compiler = ICL ]; then
1007     echo '%.o: %.c' >> config.mak
1008     echo '      $(CC) $(CFLAGS) -c -Fo$@ $<' >> config.mak
1009 fi
1010
1011 if [ "$cli" = "yes" ]; then
1012     echo 'default: cli' >> config.mak
1013     echo 'install: install-cli' >> config.mak
1014 fi
1015
1016 if [ "$shared" = "yes" ]; then
1017     API=$(grep '#define X264_BUILD' < x264.h | cut -f 3 -d ' ')
1018     if [ "$SYS" = "WINDOWS" -o "$SYS" = "CYGWIN" ]; then
1019         echo "SONAME=libx264-$API.dll" >> config.mak
1020         if [ $compiler = ICL ]; then
1021             echo 'IMPLIBNAME=libx264.dll.lib' >> config.mak
1022             # GNU ld on windows defaults to exporting all global functions if there are no explicit __declspec(dllexport) declarations
1023             # MSVC link does not act similarly, so it is required to make an export definition out of x264.h and use it at link time
1024             echo 'SOFLAGS=-dll -def:x264.def -implib:$(IMPLIBNAME)' >> config.mak
1025             echo "EXPORTS" > x264.def
1026             grep "^\(int\|void\|x264_t\|extern\).*x264.*[\[(;]" x264.h | sed -e "s/.*\(x264.*\)[\[(].*/\1/;s/.*\(x264.*\);/\1/;s/open/open_$API/g" >> x264.def
1027         else
1028             echo 'IMPLIBNAME=libx264.dll.a' >> config.mak
1029             echo 'SOFLAGS=-shared -Wl,--out-implib,$(IMPLIBNAME) -Wl,--enable-auto-image-base' >> config.mak
1030         fi
1031     elif [ "$SYS" = "MACOSX" ]; then
1032         echo "SOSUFFIX=dylib" >> config.mak
1033         echo "SONAME=libx264.$API.dylib" >> config.mak
1034         echo 'SOFLAGS=-shared -dynamiclib -Wl,-single_module -Wl,-read_only_relocs,suppress -install_name $(DESTDIR)$(libdir)/$(SONAME)' >> config.mak
1035     elif [ "$SYS" = "SunOS" ]; then
1036         echo "SOSUFFIX=so" >> config.mak
1037         echo "SONAME=libx264.so.$API" >> config.mak
1038         echo 'SOFLAGS=-shared -Wl,-h,$(SONAME)' >> config.mak
1039     else
1040         echo "SOSUFFIX=so" >> config.mak
1041         echo "SONAME=libx264.so.$API" >> config.mak
1042         echo 'SOFLAGS=-shared -Wl,-soname,$(SONAME)' >> config.mak
1043     fi
1044     echo 'default: lib-shared' >> config.mak
1045     echo 'install: install-lib-shared' >> config.mak
1046 fi
1047
1048 if [ "$static" = "yes" ]; then
1049     echo 'default: lib-static' >> config.mak
1050     echo 'install: install-lib-static' >> config.mak
1051 fi
1052
1053 if [ "$cli_libx264" = "system" ] ; then
1054     if [ "$shared" = "yes" ]; then
1055         CLI_LIBX264='$(SONAME)'
1056     elif ${cross_prefix}pkg-config --exists x264 2>/dev/null; then
1057         LDFLAGSCLI="$LDFLAGSCLI $(${cross_prefix}pkg-config --libs x264)"
1058         CLI_LIBX264=
1059     else
1060         die "Can not find system libx264"
1061     fi
1062 else
1063     CLI_LIBX264='$(LIBX264)'
1064 fi
1065 echo "LDFLAGSCLI = $LDFLAGSCLI" >> config.mak
1066 echo "CLI_LIBX264 = $CLI_LIBX264" >> config.mak
1067
1068 ./version.sh >> x264_config.h
1069
1070 pclibs="-L$libdir -lx264 $libpthread"
1071
1072 cat > x264.pc << EOF
1073 prefix=$prefix
1074 exec_prefix=$exec_prefix
1075 libdir=$libdir
1076 includedir=$includedir
1077
1078 Name: x264
1079 Description: H.264 (MPEG4 AVC) encoder library
1080 Version: $(grep POINTVER < x264_config.h | sed -e 's/.* "//; s/".*//')
1081 Libs: $pclibs
1082 Cflags: -I$includedir
1083 EOF
1084
1085 filters="crop select_every"
1086 gpl_filters=""
1087 [ $swscale = yes ] && filters="resize $filters"
1088 [ $gpl = yes ] && filters="$filters $gpl_filters"
1089
1090 cat > conftest.log <<EOF
1091 Platform:   $ARCH
1092 System:     $SYS
1093 cli:        $cli
1094 libx264:    $cli_libx264
1095 shared:     $shared
1096 static:     $static
1097 asm:        $asm
1098 interlaced: $interlaced
1099 avs:        $avs
1100 lavf:       $lavf
1101 ffms:       $ffms
1102 gpac:       $gpac
1103 gpl:        $gpl
1104 thread:     $thread
1105 filters:    $filters
1106 debug:      $debug
1107 gprof:      $gprof
1108 strip:      $strip
1109 PIC:        $pic
1110 visualize:  $vis
1111 bit depth:  $bit_depth
1112 EOF
1113
1114 echo >> config.log
1115 cat conftest.log >> config.log
1116 cat conftest.log
1117 rm conftest.log
1118
1119 echo
1120 echo "You can run 'make' or 'make fprofiled' now."
1121