]> git.sesse.net Git - x264/blob - configure
5f11e729adf395eb5195eecaf93fe1e65af6d65f
[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 "  --enable-avis-input      enables avisynth input (win32 only)"
11 echo "  --enable-mp4-output      enables mp4 output (using gpac)"
12 echo "  --enable-vfw             compiles the VfW frontend"
13 echo "  --enable-gtk             build GTK+ interface"
14 echo "  --enable-pthread         enables multithreaded encoding"
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 ""
24 exit 1
25 fi
26
27 cc_check() {
28     rm -f conftest*
29     cat > conftest.c << EOF
30 #include <$1>
31 int main () { $3 return 0; }
32 EOF
33     $CC $CFLAGS $LDFLAGS $2 conftest.c -o conftest 2>$DEVNULL
34     TMP="$?"
35     rm -f conftest.c conftest*
36     return $TMP
37 }
38
39 rm -f config.h config.mak x264.pc
40
41 prefix='/usr/local'
42 exec_prefix='${prefix}'
43 bindir='${exec_prefix}/bin'
44 libdir='${exec_prefix}/lib'
45 includedir='${prefix}/include'
46 DEVNULL='/dev/null'
47
48 avis_input="auto"
49 mp4_output="auto"
50 pthread="auto"
51 debug="no"
52 gprof="no"
53 pic="no"
54 vfw="no"
55 gtk="no"
56 vis="no"
57 shared="no"
58
59 CC="${CC-gcc}"
60 CFLAGS="-Wall -I. -D__X264__"
61 LDFLAGS=""
62 HAVE_GETOPT_LONG=1
63
64 AS="nasm"
65 ASFLAGS=""
66
67 EXE=""
68
69 UNAMES="`uname -s`"
70 case "$UNAMES" in
71   BeOS)
72     SYS="BEOS"
73     CFLAGS="$CFLAGS -DHAVE_MALLOC_H"
74     ;;
75   Darwin)
76     SYS="MACOSX"
77     CFLAGS="$CFLAGS -falign-loops=16"
78     LDFLAGS="$LDFLAGS -lm -lmx"
79     ;;
80   FreeBSD)
81     SYS="FREEBSD"
82     LDFLAGS="$LDFLAGS -lm"
83     ;;
84   NetBSD)
85     SYS="NETBSD"
86     LDFLAGS="$LDFLAGS -lm"
87     ;;
88   OpenBSD)
89     SYS="OPENBSD"
90     CFLAGS="$CFLAGS -I/usr/X11R6/include"
91     LDFLAGS="$LDFLAGS -lm"
92     ;;
93   Linux)
94     SYS="LINUX"
95     CFLAGS="$CFLAGS -DHAVE_MALLOC_H"
96     LDFLAGS="$LDFLAGS -lm"
97     ;;
98   CYGWIN*)
99     SYS="CYGWIN"
100     CFLAGS="$CFLAGS -mno-cygwin"
101     LDFLAGS="$LDFLAGS -mno-cygwin"
102     EXE=".exe"
103     DEVNULL="NUL"
104     ;;
105   MINGW*)
106     SYS="MINGW"
107     EXE=".exe"
108     DEVNULL="NUL"
109     ;;
110   SunOS)
111     SYS="SunOS"
112     CFLAGS="$CFLAGS -DHAVE_MALLOC_H"
113     LDFLAGS="$LDFLAGS -lm"
114     HAVE_GETOPT_LONG=0
115     ;;
116   *)
117     echo "Unknown system $UNAMES, edit the configure"
118     exit 1
119     ;;
120 esac
121
122 UNAMEM="`uname -m`"
123 case "$UNAMEM" in
124   i386|i486|i586|i686|BePC)
125     ARCH="X86"
126     CFLAGS="$CFLAGS -DHAVE_MMXEXT -DHAVE_SSE2"
127     AS="nasm"
128     ASFLAGS="-O2"
129     if [ "$SYS" = MACOSX ]; then
130       ASFLAGS="$ASFLAGS -f macho -DPREFIX"
131     elif [ "$SYS" = CYGWIN -o "$SYS" = MINGW ]; then
132       ASFLAGS="$ASFLAGS -f win32 -DPREFIX"
133     elif [ "$SYS" = NETBSD ]; then
134       ASFLAGS="$ASFLAGS -f aoutb"
135     else
136       ASFLAGS="$ASFLAGS -f elf"
137     fi
138     ;;
139   x86_64)
140     ARCH="X86_64"
141     CFLAGS="$CFLAGS -DHAVE_MMXEXT -DHAVE_SSE2"
142     AS="yasm"
143     ASFLAGS="-f elf -m amd64"
144     ;;
145   "Power Macintosh"|ppc|ppc64)
146     ARCH="PPC"
147     if [ $SYS = MACOSX ]
148     then
149       CFLAGS="$CFLAGS -faltivec -fastf -mcpu=G4"
150     else
151       CFLAGS="$CFLAGS -maltivec -mabi=altivec"
152     fi
153     ;;
154   sun4m|sun4d|sparc|sparc64)
155     ARCH="Sparc"
156     ;;
157   sun4u)
158     ARCH="UltraSparc"
159     CFLAGS="$CFLAGS -mcpu=ultrasparc"
160     LDFLAGS="$LDFLAGS -mcpu=ultrasparc"
161     AS="as"
162     ASFLAGS="-xarch=v8plusa"
163     ;;
164   ia64)
165     ARCH="IA64"
166     ;;
167   alpha)
168     ARCH="ALPHA"
169     ;;
170   mips|mipsel|mips64)
171     ARCH="MIPS"
172     ;;
173   m68k)
174     ARCH="M68K"
175     ;;
176   arm|armv5tel|armv4l)
177     ARCH="ARM"
178     ;;
179   s390|s390x)
180     ARCH="S390"
181     ;;
182   parisc|parisc64)
183     ARCH="PARISC"
184     ;;
185   *)
186     echo "Unknown platform $UNAMEM, edit the configure"
187     exit 1
188     ;;
189 esac
190
191 CFLAGS="$CFLAGS -DARCH_$ARCH -DSYS_$SYS"
192
193 # parse options
194
195 for opt do
196     optarg="${opt#*=}"
197     case "$opt" in
198         --prefix=*)
199             prefix="$optarg"
200             ;;
201         --exec-prefix=*)
202             exec_prefix="$optarg"
203             ;;
204         --bindir=*)
205             bindir="$optarg"
206             ;;
207         --libdir=*)
208             libdir="$optarg"
209             ;;
210         --includedir=*)
211             includedir="$optarg"
212             ;;
213         --enable-avis-input)
214             avis_input="yes"
215             ;;
216         --disable-avis-input)
217             avis_input="no"
218             ;;
219         --enable-mp4-output)
220             mp4_output="yes"
221             ;;
222         --disable-mp4-output)
223             mp4_output="no"
224             ;;
225         --extra-asflags=*)
226             ASFLAGS="$ASFLAGS ${opt#--extra-asflags=}"
227             ;;
228         --extra-cflags=*)
229             CFLAGS="$CFLAGS ${opt#--extra-cflags=}"
230             VFW_CFLAGS="${opt#--extra-cflags=}"
231             ;;
232         --extra-ldflags=*)
233             LDFLAGS="$LDFLAGS ${opt#--extra-ldflags=}"
234             VFW_LDFLAGS="${opt#--extra-ldflags=}"
235             ;;
236         --enable-pthread)
237             pthread="yes"
238             ;;
239         --disable-pthread)
240             pthread="no"
241             ;;
242         --enable-debug)
243             debug="yes"
244             ;;
245         --enable-gprof)
246             CFLAGS="$CFLAGS -pg"
247             LDFLAGS="$LDFLAGS -pg"
248             gprof="yes"
249             ;;
250         --enable-pic)
251             pic="yes"
252             ;;
253         --enable-vfw)
254             vfw="yes"
255             ;;
256         --disable-vfw)
257             vfw="no"
258             ;;
259         --enable-gtk)
260             gtk="yes"
261             ;;
262         --disable-gtk)
263             gtk="no"
264             ;;
265         --enable-shared)
266             shared="yes"
267             if [ $ARCH = "X86_64" -o $ARCH = "PPC" -o $ARCH = "ALPHA" ] ; then
268                 pic="yes"
269             fi
270             ;;
271         --enable-visualize)
272             LDFLAGS="$LDFLAGS -L/usr/X11R6/lib -lX11"
273             CFLAGS="$CFLAGS -DVISUALIZE=1"
274             vis="yes"
275             ;;
276         *)
277             echo "Unknown option $opt, ignored"
278             ;;
279     esac
280 done
281
282 # autodetect options that weren't forced nor disabled
283
284 if test "$pthread" = "auto" ; then
285     case $SYS in
286         MINGW|CYGWIN|BEOS)
287             pthread="yes"
288             ;;
289         *)
290             pthread="no"
291             cc_check pthread.h -lpthread && pthread="yes"
292             ;;
293     esac
294 fi
295 if test "$pthread" = "yes" ; then
296     CFLAGS="$CFLAGS -DHAVE_PTHREAD"
297     case $SYS in
298         MINGW|CYGWIN|BEOS)
299             ;;
300         *) LDFLAGS="$LDFLAGS -lpthread"
301             ;;
302     esac
303 fi
304
305 MP4_LDFLAGS="-lgpac_static"
306 if [ $SYS = CYGWIN -o $SYS = MINGW ]; then
307     MP4_LDFLAGS="$MP4_LDFLAGS -lwinmm"
308 fi
309 if [ "$mp4_output" = "auto" ] ; then
310     mp4_output="no"
311     cc_check gpac/isomedia.h "$MP4_LDFLAGS" && mp4_output="yes"
312 fi
313 if [ "$mp4_output" = "yes" ] ; then
314     echo "#define MP4_OUTPUT" >> config.h
315     LDFLAGS="$LDFLAGS $MP4_LDFLAGS"
316 fi
317
318 if [ "$avis_input" = "auto" ] ; then
319     if [ $SYS = CYGWIN -o $SYS = MINGW ]; then
320         avis_input="yes"
321     else
322         avis_input="no";
323     fi
324 fi
325 if [ "$avis_input" = "yes" ] ; then
326     echo "#define AVIS_INPUT" >> config.h
327     LDFLAGS="$LDFLAGS -lvfw32"
328 fi
329
330 if [ "$pic" = "yes" ] ; then
331     CFLAGS="$CFLAGS -fPIC"
332     ASFLAGS="$ASFLAGS -D__PIC__"
333 fi
334
335 if [ "$debug" != "yes" -a "$gprof" != "yes" ]; then
336     CFLAGS="$CFLAGS -s -fomit-frame-pointer"
337     LDFLAGS="$LDFLAGS -s"
338     VFW_LDFLAGS="$VFW_LDFLAGS -s"
339 fi
340
341 if [ "$debug" = "yes" ]; then
342     CFLAGS="-O1 -g $CFLAGS"
343 else
344     CFLAGS="-O4 -ffast-math $CFLAGS"
345 fi
346
347 if cc_check "stdio.h" "" "fseeko(stdin,0,0);" ; then
348     echo "#define fseek fseeko" >> config.h
349     echo "#define ftell ftello" >> config.h
350 elif cc_check "stdio.h" "" "fseeko64(stdin,0,0);" ; then
351     echo "#define fseek fseeko64" >> config.h
352     echo "#define ftell ftello64" >> config.h
353 fi
354
355 # generate config files
356
357 cat > config.mak << EOF
358 prefix=$prefix
359 exec_prefix=$exec_prefix
360 bindir=$bindir
361 libdir=$libdir
362 includedir=$includedir
363 ARCH=$ARCH
364 SYS=$SYS
365 CC=$CC
366 CFLAGS=$CFLAGS
367 LDFLAGS=$LDFLAGS
368 AS=$AS
369 ASFLAGS=$ASFLAGS
370 VFW=$vfw
371 GTK=$gtk
372 EXE=$EXE
373 VIS=$vis
374 HAVE_GETOPT_LONG=$HAVE_GETOPT_LONG
375 DEVNULL=$DEVNULL
376 EOF
377
378 echo -n 'CONFIGURE_ARGS=' >> config.mak
379 for A in "$@" ; do
380     echo -n " '$A'" >> config.mak
381 done
382 echo '' >> config.mak
383
384 cp config.mak gtk/config.mak
385
386 if [ "$vfw" = "yes" ]; then
387     rm -f vfw/build/cygwin/config.mak
388     cat > vfw/build/cygwin/config.mak << EOF
389 CFLAGS=$VFW_CFLAGS
390 LDFLAGS=$VFW_LDFLAGS
391 EOF
392     echo "default: x264vfw.dll" >> config.mak
393 fi
394
395 if [ "$shared" = "yes" ]; then
396     API=`grep '#define X264_BUILD' < x264.h | cut -f 3 -d ' '`
397     echo "SONAME=libx264.so.$API" >> config.mak
398     echo 'default: $(SONAME)' >> config.mak
399     if [ "$gtk" = "yes" ]; then
400         echo "SONAMEGTK=libx264gtk.so.$API" >> gtk/config.mak
401     fi
402 fi
403
404 if [ "$gtk" = "yes" ]; then
405     echo 'default: libx264gtk.a' >> config.mak
406     echo 'install: install-gtk' >> config.mak
407 fi
408
409 ./version.sh
410
411 pclibs="-L$libdir -lx264"
412 if test "$pthread" = "yes" ; then
413   case $SYS in
414     MINGW|CYGWIN|BEOS)
415       ;;
416     *) pclibs="$pclibs -lpthread"
417       ;;
418   esac
419 fi
420
421 cat > x264.pc << EOF
422 prefix=$prefix
423 exec_prefix=$exec_prefix
424 libdir=$libdir
425 includedir=$includedir
426
427 Name: x264
428 Description: H.264 (MPEG4 AVC) encoder library
429 Version: $(grep POINTVER < config.h | sed -e 's/.* "//; s/".*//')
430 Libs: $pclibs
431 Cflags: -I$includedir
432 EOF
433
434
435 echo "Platform:   $ARCH"
436 echo "System:     $SYS"
437 echo "avis input: $avis_input"
438 echo "mp4 output: $mp4_output"
439 echo "pthread:    $pthread"
440 echo "vfw:        $vfw"
441 echo "gtk:        $gtk"
442 echo "debug:      $debug"
443 echo "gprof:      $gprof"
444 echo "PIC:        $pic"
445 echo "shared:     $shared"
446 echo "visualize:  $vis"
447 echo
448 echo "You can run 'make' or 'make fprofiled' now."
449