]> git.sesse.net Git - x264/blob - configure
Prevent VBV from lowering quantizer too much
[x264] / configure
1 #! /bin/sh
2
3 if test x"$1" = x"-h" -o x"$1" = x"--help" ; then
4
5 echo "Usage: ./configure [options]"
6 echo ""
7 echo "available options:"
8 echo ""
9 echo "  --help                   print this message"
10 echo "  --disable-avis-input     disables avisynth input (win32 only)"
11 echo "  --disable-mp4-output     disables mp4 output (using gpac)"
12 echo "  --disable-pthread        disables multithreaded encoding"
13 echo "  --disable-asm            disables assembly optimizations on x86"
14 echo "  --enable-gtk             build GTK+ interface"
15 echo "  --enable-debug           adds -g, doesn't strip"
16 echo "  --enable-gprof           adds -pg, doesn't strip"
17 echo "  --enable-visualize       enables visualization (X11 only)"
18 echo "  --enable-pic             build position-independent code"
19 echo "  --enable-shared          build libx264.so"
20 echo "  --extra-asflags=EASFLAGS add EASFLAGS to ASFLAGS"
21 echo "  --extra-cflags=ECFLAGS   add ECFLAGS to CFLAGS"
22 echo "  --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS"
23 echo "  --host=HOST              build programs to run on HOST"
24 echo ""
25 exit 1
26 fi
27
28 cc_check() {
29     cat > conftest.c << EOF
30 #include <$1>
31 int main () { $3 return 0; }
32 EOF
33     $CC conftest.c $CFLAGS $LDFLAGS $2 -o conftest 2>$DEVNULL
34     TMP="$?"
35     return $TMP
36 }
37
38 as_check() {
39     echo "$1" > conftest.asm
40     $AS conftest.asm $ASFLAGS $2 -o conftest.o 2>$DEVNULL
41     TMP="$?"
42     return $TMP
43 }
44
45 rm -f config.h config.mak x264.pc conftest*
46
47 prefix='/usr/local'
48 exec_prefix='${prefix}'
49 bindir='${exec_prefix}/bin'
50 libdir='${exec_prefix}/lib'
51 includedir='${prefix}/include'
52 DEVNULL='/dev/null'
53
54 avis_input="auto"
55 mp4_output="auto"
56 pthread="auto"
57 asm="yes"
58 debug="no"
59 gprof="no"
60 pic="no"
61 gtk="no"
62 vis="no"
63 shared="no"
64
65 CC="${CC-gcc}"
66 CFLAGS="$CFLAGS -Wall -I."
67 LDFLAGS="$LDFLAGS"
68 HAVE_GETOPT_LONG=1
69
70 AS="yasm"
71 ASFLAGS=""
72
73 EXE=""
74
75 # check whether 'echo -n' works as expected, otherwise try printf
76 if [ "x`echo -n houba`" = xhouba ]
77 then
78   ECHON="echo -n"
79 elif [ "x`printf houba`" = xhouba ]
80 then
81   ECHON="printf"
82 else
83   echo "Neither 'echo -n' nor 'printf' are working with your shell!"
84   exit 1
85 fi
86
87 # parse options
88
89 for opt do
90     optarg="${opt#*=}"
91     case "$opt" in
92         --prefix=*)
93             prefix="$optarg"
94             ;;
95         --exec-prefix=*)
96             exec_prefix="$optarg"
97             ;;
98         --bindir=*)
99             bindir="$optarg"
100             ;;
101         --libdir=*)
102             libdir="$optarg"
103             ;;
104         --includedir=*)
105             includedir="$optarg"
106             ;;
107         --enable-asm)
108             asm="yes"
109             ;;
110         --disable-asm)
111             asm="no"
112             ;;
113         --enable-avis-input)
114             avis_input="yes"
115             ;;
116         --disable-avis-input)
117             avis_input="no"
118             ;;
119         --enable-mp4-output)
120             mp4_output="yes"
121             ;;
122         --disable-mp4-output)
123             mp4_output="no"
124             ;;
125         --extra-asflags=*)
126             ASFLAGS="$ASFLAGS ${opt#--extra-asflags=}"
127             ;;
128         --extra-cflags=*)
129             CFLAGS="$CFLAGS ${opt#--extra-cflags=}"
130             ;;
131         --extra-ldflags=*)
132             LDFLAGS="$LDFLAGS ${opt#--extra-ldflags=}"
133             ;;
134         --enable-pthread)
135             pthread="auto" # can't skip detection, since it differs by OS
136             ;;
137         --disable-pthread)
138             pthread="no"
139             ;;
140         --enable-debug)
141             debug="yes"
142             ;;
143         --enable-gprof)
144             CFLAGS="$CFLAGS -pg"
145             LDFLAGS="$LDFLAGS -pg"
146             gprof="yes"
147             ;;
148         --enable-pic)
149             pic="yes"
150             ;;
151         --enable-gtk)
152             gtk="yes"
153             ;;
154         --disable-gtk)
155             gtk="no"
156             ;;
157         --enable-shared)
158             shared="yes"
159             ;;
160         --enable-visualize)
161             LDFLAGS="$LDFLAGS -L/usr/X11R6/lib -lX11"
162             CFLAGS="$CFLAGS -DVISUALIZE=1"
163             vis="yes"
164             ;;
165         --host=*)
166             host="${opt#--host=}"
167             ;;
168         *)
169             echo "Unknown option $opt, ignored"
170             ;;
171     esac
172 done
173
174 if [ "x$host" = x ]; then
175     host=`./config.guess`
176 fi
177 # normalize a triplet into a quadruplet
178 host=`./config.sub $host`
179
180 # split $host
181 host_cpu="${host%%-*}"
182 host="${host#*-}"
183 host_vendor="${host%%-*}"
184 host_os="${host#*-}"
185
186 case $host_os in
187   beos*)
188     SYS="BEOS"
189     CFLAGS="$CFLAGS -DHAVE_MALLOC_H"
190     ;;
191   darwin*)
192     SYS="MACOSX"
193     CFLAGS="$CFLAGS -falign-loops=16"
194     LDFLAGS="$LDFLAGS -lm -lmx"
195     ;;
196   freebsd*)
197     SYS="FREEBSD"
198     LDFLAGS="$LDFLAGS -lm"
199     ;;
200   kfreebsd*-gnu)
201     SYS="FREEBSD"
202     CFLAGS="$CFLAGS -DHAVE_MALLOC_H"
203     LDFLAGS="$LDFLAGS -lm"
204     ;;
205   netbsd*)
206     SYS="NETBSD"
207     LDFLAGS="$LDFLAGS -lm"
208     ;;
209   openbsd*)
210     SYS="OPENBSD"
211     CFLAGS="$CFLAGS -I/usr/X11R6/include"
212     LDFLAGS="$LDFLAGS -lm"
213     ;;
214   linux*)
215     SYS="LINUX"
216     CFLAGS="$CFLAGS -DHAVE_MALLOC_H"
217     LDFLAGS="$LDFLAGS -lm"
218     ;;
219   cygwin*)
220     SYS="MINGW"
221     CFLAGS="$CFLAGS -mno-cygwin"
222     LDFLAGS="$LDFLAGS -mno-cygwin"
223     EXE=".exe"
224     DEVNULL="NUL"
225     ;;
226   mingw*)
227     SYS="MINGW"
228     EXE=".exe"
229     DEVNULL="NUL"
230     ;;
231   sunos*|solaris*)
232     SYS="SunOS"
233     CFLAGS="$CFLAGS -DHAVE_MALLOC_H"
234     LDFLAGS="$LDFLAGS -lm"
235     HAVE_GETOPT_LONG=0
236     ;;
237   *)
238     echo "Unknown system $host, edit the configure"
239     exit 1
240     ;;
241 esac
242
243 case $host_cpu in
244   i*86)
245     ARCH="X86"
246     AS="yasm"
247     ASFLAGS="-O2"
248     if [ "$SYS" = MACOSX ]; then
249       ASFLAGS="$ASFLAGS -f macho -DPREFIX"
250     elif [ "$SYS" = MINGW ]; then
251       ASFLAGS="$ASFLAGS -f win32 -DPREFIX"
252     else
253       ASFLAGS="$ASFLAGS -f elf"
254     fi
255     as_check || AS="nasm"
256     ;;
257   x86_64)
258     ARCH="X86_64"
259     AS="yasm"
260     if [ "$SYS" = MACOSX ];then
261       ASFLAGS="-f macho64 -m amd64 -D__PIC__ -DPREFIX"
262       CFLAGS="$CFLAGS -arch x86_64"
263       LDFLAGS="$LDFLAGS -arch x86_64"
264     else
265       ASFLAGS="-f elf -m amd64"
266     fi
267     ;;
268   powerpc|powerpc64)
269     ARCH="PPC"
270     if [ $SYS = MACOSX ]
271     then
272       ALTIVECFLAGS="$ALTIVECFLAGS -faltivec -fastf -mcpu=G4"
273     else
274       ALTIVECFLAGS="$ALTIVECFLAGS -maltivec -mabi=altivec"
275     fi
276     ;;
277   sparc)
278     if test "$(uname -m)" = "sun4u"; then
279       ARCH="UltraSparc"
280       CFLAGS="$CFLAGS -mcpu=ultrasparc"
281       LDFLAGS="$LDFLAGS -mcpu=ultrasparc"
282       AS="as"
283       ASFLAGS="-xarch=v8plusa"
284     else
285       ARCH="Sparc"
286     fi
287     ;;
288   mips|mipsel|mips64|mips64el)
289     ARCH="MIPS"
290     ;;
291   arm*)
292     ARCH="ARM"
293     ;;
294   s390|s390x)
295     ARCH="S390"
296     ;;
297   parisc|parisc64)
298     ARCH="PARISC"
299     ;;
300   *)
301     ARCH="$(echo $host_cpu | tr a-z A-Z)"
302     ;;
303 esac
304
305 # check requirements
306
307 if [ $shared = yes -a \( $ARCH = "X86_64" -o $ARCH = "PPC" -o $ARCH = "ALPHA" \) ] ; then
308     pic="yes"
309 fi
310
311 if [ $asm = yes -a \( $ARCH = X86 -o $ARCH = X86_64 \) ] ; then
312     if [ $ARCH = X86 -a $pic = yes -a x$AS = xyasm -a\
313          "`yasm --version 2>$DEVNULL | head -n 1`" "<" "yasm 0.6.2" ] ; then
314          echo "yasm prior to 0.6.2 miscompiles PIC. trying nasm instead..."
315          AS=nasm
316     fi
317     if as_check "pabsw xmm0, xmm0" ; then
318         CFLAGS="$CFLAGS -DHAVE_MMX"
319     else
320         echo "No suitable assembler found.  Install 'yasm' to get MMX/SSE optimized code."
321         echo "If you really want to compile without asm, configure with --disable-asm."
322         exit 1
323     fi
324 else
325     AS=""
326 fi
327
328 CFLAGS="$CFLAGS -DARCH_$ARCH -DSYS_$SYS"
329
330 echo "unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';" > conftest.c
331 $CC $CFLAGS conftest.c -c -o conftest.o 2>$DEVNULL || die "endian test failed"
332 grep -q BIGE conftest.o && CFLAGS="$CFLAGS -DWORDS_BIGENDIAN"
333
334 # autodetect options that weren't forced nor disabled
335
336 libpthread=""
337 if test "$pthread" = "auto" ; then
338     pthread="no"
339     case $SYS in
340         BEOS)
341             pthread="yes"
342             ;;
343         MINGW)
344             if cc_check pthread.h -lpthread "pthread_create(0,0,0,0);" ; then
345                 pthread="yes"
346                 libpthread="-lpthread"
347             elif cc_check pthread.h -lpthreadGC2 "pthread_create(0,0,0,0);" ; then
348                 pthread="yes"
349                 libpthread="-lpthreadGC2"
350             elif cc_check pthread.h "-lpthreadGC2 -lwsock32 -DPTW32_STATIC_LIB" "pthread_create(0,0,0,0);" ; then
351                 pthread="yes"
352                 libpthread="-lpthreadGC2 -lwsock32"
353                 CFLAGS="$CFLAGS -DPTW32_STATIC_LIB"
354             fi
355             ;;
356         *)
357             cc_check pthread.h -lpthread && pthread="yes" && libpthread="-lpthread"
358             ;;
359     esac
360 fi
361 if test "$pthread" = "yes" ; then
362     CFLAGS="$CFLAGS -DHAVE_PTHREAD"
363     LDFLAGS="$LDFLAGS $libpthread"
364 fi
365
366 MP4_LDFLAGS="-lgpac_static"
367 if [ $SYS = MINGW ]; then
368     MP4_LDFLAGS="$MP4_LDFLAGS -lwinmm"
369 fi
370 if [ "$mp4_output" = "auto" ] ; then
371     mp4_output="no"
372     cc_check gpac/isomedia.h "$MP4_LDFLAGS" && mp4_output="yes"
373 fi
374 if [ "$mp4_output" = "yes" ] ; then
375     echo "#define MP4_OUTPUT" >> config.h
376     LDFLAGS="$LDFLAGS $MP4_LDFLAGS"
377 fi
378
379 if [ "$avis_input" = "auto" ] ; then
380     if [ $SYS = MINGW ]; then
381         avis_input="yes"
382     else
383         avis_input="no";
384     fi
385 fi
386 if [ "$avis_input" = "yes" ] ; then
387     echo "#define AVIS_INPUT" >> config.h
388     LDFLAGS="$LDFLAGS -lvfw32"
389 fi
390
391 if [ "$pic" = "yes" ] ; then
392     CFLAGS="$CFLAGS -fPIC"
393     ASFLAGS="$ASFLAGS -D__PIC__"
394     # resolve textrels in the x86 asm
395     cc_check stdio.h -Wl,-Bsymbolic && LDFLAGS="$LDFLAGS -Wl,-Bsymbolic"
396 fi
397
398 if [ "$debug" != "yes" -a "$gprof" != "yes" ]; then
399     CFLAGS="$CFLAGS -s -fomit-frame-pointer"
400     LDFLAGS="$LDFLAGS -s"
401 fi
402
403 if [ "$debug" = "yes" ]; then
404     CFLAGS="-O1 -g $CFLAGS"
405 else
406     CFLAGS="-O4 -ffast-math $CFLAGS"
407 fi
408
409 if cc_check "stdio.h" "" "fseeko(stdin,0,0);" ; then
410     echo "#define fseek fseeko" >> config.h
411     echo "#define ftell ftello" >> config.h
412 elif cc_check "stdio.h" "" "fseeko64(stdin,0,0);" ; then
413     echo "#define fseek fseeko64" >> config.h
414     echo "#define ftell ftello64" >> config.h
415 fi
416
417 rm -f conftest*
418
419 # generate config files
420
421 cat > config.mak << EOF
422 prefix=$prefix
423 exec_prefix=$exec_prefix
424 bindir=$bindir
425 libdir=$libdir
426 includedir=$includedir
427 ARCH=$ARCH
428 SYS=$SYS
429 CC=$CC
430 CFLAGS=$CFLAGS
431 ALTIVECFLAGS=$ALTIVECFLAGS
432 LDFLAGS=$LDFLAGS
433 AS=$AS
434 ASFLAGS=$ASFLAGS
435 GTK=$gtk
436 EXE=$EXE
437 VIS=$vis
438 HAVE_GETOPT_LONG=$HAVE_GETOPT_LONG
439 DEVNULL=$DEVNULL
440 ECHON=$ECHON
441 EOF
442
443 $ECHON 'CONFIGURE_ARGS=' >> config.mak
444 for A in "$@" ; do
445     $ECHON " '$A'" >> config.mak
446 done
447 echo '' >> config.mak
448
449 cp config.mak gtk/config.mak
450
451 if [ "$shared" = "yes" ]; then
452     API=$(grep '#define X264_BUILD' < x264.h | cut -f 3 -d ' ')
453     if [ "$SYS" = "MINGW" ]; then
454         echo "SONAME=libx264-$API.dll" >> config.mak
455         echo 'IMPLIBNAME=libx264.dll.a' >> config.mak
456         echo 'SOFLAGS=-Wl,--out-implib,$(IMPLIBNAME) -Wl,--enable-auto-image-base' >> config.mak
457     elif [ "$SYS" = "MACOSX" ]; then
458         echo "SONAME=libx264.$API.dylib" >> config.mak
459         echo 'SOFLAGS=-dynamiclib -Wl,-single_module -Wl,-read_only_relocs,suppress' >> config.mak        
460     else
461         echo "SONAME=libx264.so.$API" >> config.mak
462         echo 'SOFLAGS=-Wl,-soname,$(SONAME)' >> config.mak
463     fi
464     echo 'default: $(SONAME)' >> config.mak
465     if [ "$gtk" = "yes" ]; then
466         echo "SONAMEGTK=libx264gtk.so.$API" >> gtk/config.mak
467     fi
468 fi
469
470 if [ "$gtk" = "yes" ]; then
471     echo 'default: libx264gtk.a' >> config.mak
472     echo 'install: install-gtk' >> config.mak
473 fi
474
475 ./version.sh
476
477 pclibs="-L$libdir -lx264 $libpthread"
478
479 cat > x264.pc << EOF
480 prefix=$prefix
481 exec_prefix=$exec_prefix
482 libdir=$libdir
483 includedir=$includedir
484
485 Name: x264
486 Description: H.264 (MPEG4 AVC) encoder library
487 Version: $(grep POINTVER < config.h | sed -e 's/.* "//; s/".*//')
488 Libs: $pclibs
489 Cflags: -I$includedir
490 EOF
491
492
493 echo "Platform:   $ARCH"
494 echo "System:     $SYS"
495 echo "asm:        $asm"
496 echo "avis input: $avis_input"
497 echo "mp4 output: $mp4_output"
498 echo "pthread:    $pthread"
499 echo "gtk:        $gtk"
500 echo "debug:      $debug"
501 echo "gprof:      $gprof"
502 echo "PIC:        $pic"
503 echo "shared:     $shared"
504 echo "visualize:  $vis"
505 echo
506 echo "You can run 'make' or 'make fprofiled' now."
507