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