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