Newer
Older
Fabrice Bellard
committed
#
# FFmpeg configure script
#
# Copyright (c) 2000, 2001, 2002 Fabrice Bellard
# Copyright (c) 2005-2006 Diego Biurrun
# Copyright (c) 2005-2006 Mans Rullgard
Fabrice Bellard
committed
#
# make sure we are running under a compatible shell
# try to make this part work with most shells
try_exec(){
type "$1" >/dev/null 2>&1 && exec "$@"
}
(: ${foo%%bar}) 2>/dev/null
E1="$?"
(: ${foo?}) 2>/dev/null
E2="$?"
if test "$E1" != 0 || test "$E2" = 0; then
echo "Broken shell detected. Trying alternatives."
export FF_CONF_EXEC
if test "0$FF_CONF_EXEC" -lt 1; then
FF_CONF_EXEC=1
try_exec bash "$0" "$@"
fi
if test "0$FF_CONF_EXEC" -lt 2; then
FF_CONF_EXEC=2
try_exec ksh "$0" "$@"
fi
if test "0$FF_CONF_EXEC" -lt 3; then
FF_CONF_EXEC=3
try_exec /usr/xpg4/bin/sh "$0" "$@"
fi
echo "No compatible shell script interpreter found."
echo "such as bash or ksh."
echo "THIS IS NOT A BUG IN FFMPEG, DO NOT REPORT IT AS SUCH."
echo "Instead, install a working POSIX-compatible shell."
echo "Disabling this configure test will create a broken FFmpeg."
if test "$BASH_VERSION" = '2.04.0(1)-release'; then
echo "This bash version ($BASH_VERSION) is broken on your platform."
echo "Upgrade to a later version if available."
fi
exit 1
fi
show_help(){
echo "Usage: configure [options]"
echo "Options: [defaults in brackets after descriptions]"
echo
echo "Standard options:"
echo " --help print this message"
echo " --log[=FILE|yes|no] log tests and output to FILE [config.err]"
echo " --prefix=PREFIX install in PREFIX [$PREFIX]"
echo " --libdir=DIR install libs in DIR [PREFIX/lib]"
Diego Biurrun
committed
echo " --shlibdir=DIR install shared libs in DIR [PREFIX/lib]"
echo " --incdir=DIR install includes in DIR [PREFIX/include/ffmpeg]"
echo " --mandir=DIR install man page in DIR [PREFIX/man]"
echo " --enable-mingwce enable MinGW native/cross WinCE compile"
echo " --enable-static build static libraries [default=yes]"
echo " --disable-static do not build static libraries [default=no]"
echo " --enable-shared build shared libraries [default=no]"
echo " --disable-shared do not build shared libraries [default=yes]"
echo " --enable-gpl allow use of GPL code, the resulting libav*"
echo " and ffmpeg will be under GPL [default=no]"
echo " --enable-pp enable GPLed postprocessing support [default=no]"
echo " --enable-swscaler software scaler support [default=no]"
echo " --enable-beosthreads use BeOS threads [default=no]"
echo " --enable-os2threads use OS/2 threads [default=no]"
echo " --enable-pthreads use pthreads [default=no]"
echo " --enable-w32threads use Win32 threads [default=no]"
echo " --enable-x11grab enable X11 grabbing [default=no]"
echo
echo "External library support:"
echo " --enable-sunmlib use Sun medialib [default=no]"
echo " --enable-dc1394 enable IIDC-1394 grabbing using libdc1394"
echo " and libraw1394 [default=no]"
echo " --enable-liba52 enable GPLed liba52 support [default=no]"
echo " --enable-liba52bin open liba52.so.0 at runtime [default=no]"
echo " --enable-avisynth allow reading AVISynth script files [default=no]"
echo " --enable-libdts enable GPLed libdts support [default=no]"
echo " --enable-libfaac enable FAAC support via libfaac [default=no]"
echo " --enable-libfaad enable FAAD support via libfaad [default=no]"
echo " --enable-libfaadbin build FAAD support with runtime linking [default=no]"
echo " --enable-libgsm enable GSM support via libgsm [default=no]"
echo " --enable-libmp3lame enable MP3 encoding via libmp3lame [default=no]"
echo " --enable-libnut enable NUT (de)muxing via libnut,"
echo " native demuxer exists [default=no]"
echo " --enable-libogg enable Ogg muxing via libogg [default=no]"
echo " --enable-libtheora enable Theora encoding via libtheora [default=no]"
echo " --enable-libvorbis enable Vorbis en/decoding via libvorbis,"
echo " native implementations exist [default=no]"
echo " --enable-x264 enable H.264 encoding via x264 [default=no]"
echo " --enable-xvid enable Xvid encoding via xvidcore,"
echo " native MPEG-4/Xvid encoder exists [default=no]"
echo " --enable-amr_nb enable amr_nb float audio codec"
echo " --enable-amr_nb-fixed use fixed point for amr-nb codec"
echo " --enable-amr_wb enable amr_wb float audio codec"
echo " --enable-amr_if2 enable amr_wb IF2 audio codec"
echo ""
echo "Advanced options (experts only):"
echo " --source-path=PATH path to source code [$source_path]"
echo " --cross-prefix=PREFIX use PREFIX for compilation tools [$cross_prefix]"
echo " --cross-compile assume a cross-compiler is used"
echo " --target-os=OS compiler targets OS [$targetos]"
echo " --cc=CC use C compiler CC [$cc]"
echo " --make=MAKE use specified make [$make]"
echo " --extra-cflags=ECFLAGS add ECFLAGS to CFLAGS [$CFLAGS]"
echo " --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]"
echo " --extra-libs=ELIBS add ELIBS [$ELIBS]"
echo " --build-suffix=SUFFIX suffix for application specific build []"
echo " --arch=ARCH select architecture [$arch]"
echo " --cpu=CPU selects the minimum cpu required (affects"
echo " instruction selection, may crash on older CPUs)"
echo " --enable-powerpc-perf enable performance report on PPC"
echo " (requires enabling PMC)"
echo " --disable-mmx disable MMX usage"
echo " --disable-armv5te disable armv5te usage"
echo " --disable-armv6 disable armv6 usage"
echo " --disable-iwmmxt disable iwmmxt usage"
echo " --disable-altivec disable AltiVec usage"
echo " --disable-audio-oss disable OSS audio support [default=no]"
echo " --disable-audio-beos disable BeOS audio support [default=no]"
echo " --disable-v4l disable video4linux grabbing [default=no]"
echo " --disable-v4l2 disable video4linux2 grabbing [default=no]"
echo " --disable-bktr disable bktr video grabbing [default=no]"
echo " --disable-dv1394 disable DV1394 grabbing [default=no]"
echo " --disable-network disable network support [default=no]"
echo " --disable-ipv6 disable ipv6 support [default=no]"
echo " --disable-zlib disable zlib [default=no]"
echo " --disable-vhook disable video hooking support"
echo " --disable-debug disable debugging symbols"
echo " --disable-mpegaudio-hp faster (but less accurate)"
echo " MPEG audio decoding [default=no]"
echo " --disable-protocols disable I/O protocols support [default=no]"
echo " --disable-ffmpeg disable ffmpeg build"
echo " --disable-ffserver disable ffserver build"
echo " --disable-ffplay disable ffplay build"
echo " --enable-small optimize for size instead of speed"
echo " --enable-memalign-hack emulate memalign, interferes with memory debuggers"
echo " --disable-encoder=NAME disables encoder NAME"
echo " --enable-encoder=NAME enables encoder NAME"
echo " --disable-decoder=NAME disables decoder NAME"
echo " --enable-decoder=NAME enables decoder NAME"
echo " --disable-encoders disables all encoders"
echo " --disable-decoders disables all decoders"
echo " --disable-muxer=NAME disables muxer NAME"
echo " --enable-muxer=NAME enables muxer NAME"
echo " --disable-muxers disables all muxers"
echo " --disable-demuxer=NAME disables demuxer NAME"
echo " --enable-demuxer=NAME enables demuxer NAME"
echo " --disable-demuxers disables all demuxers"
echo " --enable-parser=NAME enables parser NAME"
echo " --disable-parser=NAME disables parser NAME"
echo " --disable-parsers disables all parsers"
echo
echo "Developer options (useful when working on FFmpeg itself):"
echo " --enable-gprof enable profiling with gprof [$gprof]"
echo " --disable-opts disable compiler optimizations"
echo " --enable-extra-warnings enable more compiler warnings"
echo " --disable-strip disable stripping of executables and shared libraries"
echo ""
echo "NOTE: Object files are built at the place where configure is launched."
exit 1
}
log(){
echo "$@" >>$logfile
}
log_file(){
log BEGIN $1
cat -n $1 >>$logfile
log END $1
}
echolog(){
echo "$@"
}
die(){
echolog "$@"
cat <<EOF
If you think configure made a mistake, make sure you are using the latest
version from SVN. If the latest version fails, report the problem to the
ffmpeg-devel@mplayerhq.hu mailing list or IRC #ffmpeg on irc.freenode.net.
EOF
if enabled logging; then
cat <<EOF
Include the log file "$logfile" produced by configure as this will help
solving the problem.
EOF
else
cat <<EOF
Rerun configure with logging enabled (do not use --log=no), and include the
log this produces with your report.
EOF
fi
rm -f $TMPC $TMPO $TMPE $TMPS $TMPH
exit 1
}
# "tr '[a-z]' '[A-Z]'" is a workaround for Solaris tr not grokking "tr a-z A-Z"
toupper(){
echo "$@" | tr '[a-z]' '[A-Z]'
}
tolower(){
echo "$@" | tr '[A-Z]' '[a-z]'
}
set_all(){
value=$1
shift
for var in $*; do
eval $var=$value
done
}
pushvar(){
for var in $*; do
eval level=\${${var}_level:=0}
eval ${var}_${level}="\$$var"
eval ${var}_level=$(($level+1))
done
}
popvar(){
for var in $*; do
eval level=\${${var}_level:-0}
test $level = 0 && continue
eval level=$(($level-1))
eval $var="\${${var}_${level}}"
eval ${var}_level=$level
eval unset ${var}_${level}
done
}
enable(){
set_all yes $*
}
disable(){
set_all no $*
}
enabled(){
eval test "x\$$1" = "xyes"
}
disabled(){
eval test "x\$$1" = "xno"
}
enabled_all(){
for opt; do
enabled $opt || return 1
done
}
disabled_all(){
for opt; do
disabled $opt || return 1
done
}
enabled_any(){
for opt; do
enabled $opt && return 0
done
}
disabled_any(){
for opt; do
disabled $opt && return 0
done
}
check_deps(){
for cfg; do
enabled ${cfg}_checking && die "Circular dependency for $cfg."
disabled ${cfg}_checking && continue
enable ${cfg}_checking
eval dep_all="\$${cfg}_deps"
eval dep_any="\$${cfg}_deps_any"
pushvar cfg dep_all dep_any
check_deps $dep_all $dep_any
popvar cfg dep_all dep_any
enabled_all $dep_all || disable $cfg
enabled_any $dep_any || disable $cfg
print_config(){
pfx=$1
header=$2
makefile=$3
shift 3
for cfg; do
if enabled $cfg; then
ucname="${pfx}`toupper $cfg`"
echo "#define ${ucname} 1" >> $header
echo "${ucname}=yes" >> $makefile
fi
done
}
flags_saved(){
(: ${SAVE_CFLAGS?}) 2>/dev/null
}
flags_saved && return
SAVE_CFLAGS="$CFLAGS"
SAVE_LDFLAGS="$LDFLAGS"
SAVE_extralibs="$extralibs"
}
restore_flags(){
flags_saved || return
CFLAGS="$SAVE_CFLAGS"
LDFLAGS="$SAVE_LDFLAGS"
extralibs="$SAVE_extralibs"
unset SAVE_CFLAGS
unset SAVE_LDFLAGS
unset SAVE_extralibs
}
temp_cflags(){
save_flags
CFLAGS="$CFLAGS $*"
}
temp_ldflags(){
save_flags
LDFLAGS="$LDFLAGS $*"
}
temp_extralibs(){
save_flags
extralibs="$extralibs $*"
}
append(){
var=$1
shift
flags_saved && eval "SAVE_$var=\"\$SAVE_$var $*\""
eval "$var=\"\$$var $*\""
}
add_cflags(){
append CFLAGS "$@"
}
add_ldflags(){
append LDFLAGS "$@"
}
add_extralibs(){
append extralibs "$@"
}
check_cmd(){
"$@" >>$logfile 2>&1
log check_cc "$@"
cat >$TMPC
log_file $TMPC
check_cmd $cc $CFLAGS "$@" -c -o $TMPO $TMPC
}
check_cpp(){
log check_cpp "$@"
log_file $TMPC
check_cmd $cc $CFLAGS "$@" -E -o $TMPO $TMPC
log check_ld "$@"
check_cmd $cc $LDFLAGS "$@" -o $TMPE $TMPO $extralibs
log check_cflags "$@"
check_cc "$@" <<EOF && add_cflags "$@"
int x;
EOF
}
check_ldflags(){
log check_ldflags "$@"
check_ld "$@" <<EOF && add_ldflags "$@"
int main(){
return 0;
}
EOF
}
check_header(){
log check_header "$@"
var=`echo $header | sed 's/[^A-Za-z0-9_]/_/g'`
disable $var
check_cpp "$@" <<EOF && enable $var
#include <$header>
int x;
EOF
}
check_func(){
log check_func "$@"
extern int $func();
int main(){
$func();
}
EOF
}
check_func2(){
log check_func2 "$@"
headers=$1
func=$2
shift 2
disable $func
incs=""
for hdr in $headers; do
incs="$incs
#include <$hdr>"
done
check_ld "$@" <<EOF && enable $func
$incs
int main(){
(void) $func;
return 0;
}
EOF
}
check_lib(){
log check_lib "$@"
header="$1"
func="$2"
shift 2
temp_extralibs "$@"
check_header $header && check_func $func && add_extralibs "$@"
err=$?
restore_flags
return $err
}
check_lib2(){
log check_lib2 "$@"
headers="$1"
func="$2"
shift 2
temp_extralibs "$@"
check_func2 "$headers" $func && add_extralibs "$@"
err=$?
restore_flags
return $err
}
check_ld "$@" && { enabled cross_compile || $TMPE >>$logfile 2>&1; }
}
require(){
name="$1"
header="$2"
func="$3"
shift 3
check_lib $header $func "$@" || die "ERROR: $name not found"
require2(){
name="$1"
headers="$2"
func="$3"
shift 3
check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
}
check_foo_config(){
cfg=$1
pkg=$2
header=$3
func=$4
shift 4
disable $cfg
check_cmd ${pkg}-config --version
err=$?
if test "$err" = 0; then
temp_cflags `${pkg}-config --cflags`
temp_extralibs `${pkg}-config --libs`
check_lib "$@" $header $func && enable $cfg
fi
return $err
}
apply(){
file=$1
shift
"$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
}
CONFIG_LIST='
encoders
decoders
parsers
muxers
demuxers
amr
amr_nb
amr_nb_fixed
amr_wb
audio_beos
audio_oss
avisynth
beos_netserver
bktr
dc1394
dv1394
ffmpeg
ffplay
ffserver
gpl
Diego Biurrun
committed
libfaac
libfaad
libfaadbin
libvorbis
memalign_hack
mpegaudio_hp
network
powerpc_perf
pp
protocols
swscaler
vhook
Måns Rullgård
committed
v4l
v4l2
x264
xvid
zlib
'
HAVE_LIST='
dev_bktr_ioctl_bt848_h
dev_bktr_ioctl_meteor_h
dev_ic_bt8xx_h
dev_video_meteor_ioctl_meteor_h
dev_video_bktr_ioctl_bt848_h
freetype2
imlib2
localtime_r
lrintf
machine_ioctl_bt848_h
machine_ioctl_meteor_h
malloc_h
memalign
mlib
sdl
sdl_video_size
TARGET_LIST='
altivec
armv5te
CMDLINE_SELECT="
$CONFIG_LIST
$TARGET_LIST
debug
extra_warnings
shared
static
beosthreads
os2threads
pthreads
w32threads
flashsv_decoder_deps="zlib"
mpeg_xvmc_decoder_deps="xvmc"
png_decoder_deps="zlib"
png_encoder_deps="zlib"
x264_encoder_deps="x264"
xvid_encoder_deps="xvid"
zmbv_decoder_deps="zlib"
zmbv_encoder_deps="zlib"
aac_decoder_deps="libfaad"
mpeg4aac_decoder_deps="libfaad"
amr_nb_decoder_deps_any="amr_nb amr_nb_fixed"
amr_nb_encoder_deps_any="amr_nb amr_nb_fixed"
amr_wb_decoder_deps="amr_wb"
amr_wb_encoder_deps="amr_wb"
dts_decoder_deps="libdts"
faac_encoder_deps="libfaac"
liba52_decoder_deps="liba52"
libgsm_decoder_deps="libgsm"
libgsm_encoder_deps="libgsm"
mp3lame_encoder_deps="libmp3lame"
oggvorbis_decoder_deps="libvorbis"
oggvorbis_encoder_deps="libvorbis"
audio_demuxer_deps_any="audio_oss audio_beos"
audio_muxer_deps_any="audio_oss audio_beos"
dc1394_demuxer_deps="dc1394"
dv1394_demuxer_deps="dv1394"
gxf_muxer_deps="gpl"
libnut_demuxer_deps="libnut"
libnut_muxer_deps="libnut"
ogg_muxer_deps="libogg"
redir_demuxer_deps="network"
rtp_muxer_deps="network"
rtsp_demuxer_deps="network"
sdp_demuxer_deps="network"
Måns Rullgård
committed
v4l2_demuxer_deps="v4l2"
video_grab_device_demuxer_deps_any="v4l bktr"
x11_grab_device_demuxer_deps="x11grab"
network_deps="protocols"
Fabrice Bellard
committed
# set temporary file name
Fabrice Bellard
committed
TMPDIR1="${TMPDIR}"
Fabrice Bellard
committed
TMPDIR1="${TEMPDIR}"
Fabrice Bellard
committed
TMPDIR1="/tmp"
Fabrice Bellard
committed
TMPC="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.c"
TMPO="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.o"
TMPE="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}"
Fabrice Bellard
committed
TMPS="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.S"
TMPH="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.h"
logging="yes"
logfile="config.err"
PREFIX="/usr/local"
libdir='${PREFIX}/lib'
Diego Biurrun
committed
shlibdir="$libdir"
incdir='${PREFIX}/include/ffmpeg'
mandir='${PREFIX}/man'
bindir='${PREFIX}/bin'
Fabrice Bellard
committed
cross_prefix=""
cross_compile="no"
Fabrice Bellard
committed
strip="strip"
asmalign_pot="unknown"
# machine
arch=`uname -m`
Guillaume Poirier
committed
cpu="generic"
powerpc_perf="no"
Fabrice Bellard
committed
mmx="default"
Guillaume Poirier
committed
cmov="no"
fast_cmov="no"
Gildas Bazin
committed
iwmmxt="default"
Brian Foley
committed
altivec="default"
mmi="default"
targetos=`uname -s`
beos_netserver="no"
mingw32="no"
os2="no"
wince="no"
# non-library system interfaces
audio_beos="default"
bktr="yes"
Måns Rullgård
committed
v4l2="yes"
v4l="yes"
# libraries
amr_if2="no"
amr_nb="no"
amr_nb_fixed="no"
amr_wb="no"
avisynth="no"
liba52="no"
Diego Biurrun
committed
libfaac="no"
Diego Biurrun
committed
libfaadbin="no"
Oded Shimon
committed
libnut="no"
libogg="no"
x264="no"
xvid="no"
zlib="yes"
# configurable options
debug="yes"
Michel Bardiaux
committed
dostrip="yes"
extra_warnings="no"
ffmpeg="yes"
ffplay="yes"
ffserver="yes"
gpl="no"
gprof="no"
ipv6="yes"
shared="no"
static="yes"
Fabrice Bellard
committed
mpegaudio_hp="yes"
network="yes"
optimize="yes"
pp="no"
protocols="yes"
swscaler="no"
vhook="default"
# threading
beosthreads="no"
os2threads="no"
pthreads="no"
w32threads="no"
thread_type="no"
# build settings
SHFLAGS='-shared -Wl,-soname,$@'
VHOOKSHFLAGS='$(SHFLAGS)'
LIBOBJFLAGS=""
LDLATEFLAGS='-Wl,-rpath-link,\$(BUILD_ROOT)/libavcodec -Wl,-rpath-link,\$(BUILD_ROOT)/libavformat -Wl,-rpath-link,\$(BUILD_ROOT)/libavutil'
FFSERVERLDFLAGS=-Wl,-E
Jacob Meuser
committed
LDCONFIG="ldconfig"
LIBPREF="lib"
LIBSUF=".a"
Diego Biurrun
committed
LIB='$(LIBPREF)$(NAME)$(LIBSUF)'
SLIBPREF="lib"
SLIBSUF=".so"
Diego Biurrun
committed
SLIBNAME='$(SLIBPREF)$(NAME)$(SLIBSUF)'
SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
BUILDSUF=""
LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(libdir)/$(LIB)"'
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
# find source path
source_path="`dirname \"$0\"`"
source_path_used="yes"
if test -z "$source_path" -o "$source_path" = "." ; then
source_path="`pwd`"
source_path_used="no"
else
source_path="`cd \"$source_path\"; pwd`"
echo "$source_path" | grep -q '[[:blank:]]' &&
die "Out of tree builds are impossible with whitespace in source path."
fi
if test x"$1" = x"-h" -o x"$1" = x"--help" ; then
show_help
fi
FFMPEG_CONFIGURATION="$@"
ENCODER_LIST=`sed -n 's/^[^#]*ENC.*, *\(.*\)).*/\1_encoder/p' "$source_path/libavcodec/allcodecs.c"`
DECODER_LIST=`sed -n 's/^[^#]*DEC.*, *\(.*\)).*/\1_decoder/p' "$source_path/libavcodec/allcodecs.c"`
PARSER_LIST=`sed -n 's/^[^#]*PARSER.*, *\(.*\)).*/\1_parser/p' "$source_path/libavcodec/allcodecs.c"`
MUXER_LIST=`sed -n 's/^[^#]*_MUX.*, *\(.*\)).*/\1_muxer/p' "$source_path/libavformat/allformats.c"`
DEMUXER_LIST=`sed -n 's/^[^#]*DEMUX.*, *\(.*\)).*/\1_demuxer/p' "$source_path/libavformat/allformats.c"`
enable $ENCODER_LIST $DECODER_LIST $PARSER_LIST $MUXER_LIST $DEMUXER_LIST
die_unknown(){
echo "Unknown option \"$1\"."
echo "See $0 --help for available options."
exit 1
}
for opt do
optval="${opt#*=}"
case "$opt" in
--log)
;;
--log=*) logging="$optval"
;;
--prefix=*) PREFIX="$optval"
;;
--libdir=*) libdir="$optval"
;;
--shlibdir=*) shlibdir="$optval"
;;
--incdir=*) incdir="$optval"
;;
--mandir=*) mandir="$optval"
;;
--source-path=*) source_path="$optval"
;;
--cross-prefix=*) cross_prefix="$optval"
;;
--cross-compile) cross_compile="yes"
;;
--target-os=*) targetos="$optval"
;;
--cc=*) cc="$optval"
;;
--make=*) make="$optval"
;;
--extra-cflags=*) add_cflags "$optval"
;;
--extra-ldflags=*) add_ldflags "$optval"
;;
--extra-libs=*) add_extralibs "$optval"
;;
--build-suffix=*) BUILDSUF="$optval"
;;
--arch=*) arch="$optval"
;;
--cpu=*) cpu="$optval"
;;
--enable-mingwce) wince="yes"
;;
--disable-opts) optimize="no"
;;
--enable-small) optimize="small"
;;
--enable-sunmlib) mlib="yes"
;;
--disable-strip) dostrip="no"
;;
--disable-encoders) disable $ENCODER_LIST
;;
--disable-decoders) disable $DECODER_LIST
;;
--disable-muxers) disable $MUXER_LIST
;;
--disable-demuxers) disable $DEMUXER_LIST
;;
--disable-parsers) disable $PARSER_LIST
;;
--enable-*=*|--disable-*=*)
eval `echo "$opt" | sed 's/=/-/;s/--/action=/;s/-/ thing=/;s/-/ name=/'`
case "$thing" in
encoder|decoder|muxer|demuxer|parser) $action ${optval}_${thing} ;;
*) die_unknown "$opt" ;;
esac
;;
--enable-?*|--disable-?*)
eval `echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g'`
echo "$CMDLINE_SELECT" | grep -q "^ *$option\$" || die_unknown $opt
$action $option
;;
--help) show_help
;;
*)
die_unknown $opt
;;
esac
done
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
case "$arch" in
i386|i486|i586|i686|i86pc|BePC)
arch="x86_32"
;;
x86_64|amd64)
arch="x86_32"
canon_arch="`$cc -dumpmachine | sed -e 's,\([^-]*\)-.*,\1,'`"
if [ x"$canon_arch" = x"x86_64" -o x"$canon_arch" = x"amd64" ]; then
if [ -z "`echo $CFLAGS | grep -- -m32`" ]; then
arch="x86_64"
fi
fi
;;
# armv4l is a subset of armv[567]*l
arm|armv[4567]*l)
arch="armv4l"
;;
alpha)
arch="alpha"
;;
"Power Macintosh"|ppc|ppc64|powerpc)
arch="powerpc"
;;
mips|mipsel|IP*)
arch="mips"
;;
sun4u|sparc64)
arch="sparc64"
;;
sparc)
arch="sparc"
;;
sh4)
arch="sh4"
;;
parisc|parisc64)
arch="parisc"
;;
s390|s390x)
arch="s390"
;;
m68k)
arch="m68k"
;;
ia64)
arch="ia64"
;;
bfin)
arch="bfin"
;;
*)
arch="unknown"
;;
esac
osextralibs="-lm"
case `tolower $targetos` in
beos|haiku|zeta)
François Revol
committed
PREFIX="$HOME/config"
# helps building libavcodec
add_cflags "-DPIC -fomit-frame-pointer"
# 3 gcc releases known for BeOS, each with ugly bugs
gcc_version="`$cc -v 2>&1 | grep version | cut -d ' ' -f3-`"
case "$gcc_version" in
2.9-beos-991026*|2.9-beos-000224*) echo "R5/GG gcc"
mmx="no"
;;
*20010315*) echo "BeBits gcc"
add_cflags "-fno-expensive-optimizations"
;;
esac
François Revol
committed
LDCONFIG="echo ignoring ldconfig"
SHFLAGS=-nostart
# disable Linux things
dv1394="no"
# enable BeOS things
disabled audio_beos || enable_audio_beos
François Revol
committed
# XXX: actually should check for NOT net_server
osextralibs="-lbind -lsocket"
osextralibs="-lnet"
dv1394="no"
FFLDFLAGS=""
FFSERVERLDFLAGS=""
SHFLAGS="-shared -Wl,-h,\$@"
add_extralibs "-lsocket -lnsl"
;;
dv1394="no"
need_memalign="no"
LIBOBJFLAGS="\$(PIC)"
LDCONFIG="ldconfig -m \$(shlibdir)"
SHFLAGS='-shared'
SLIBNAME='$(SLIBPREF)$(NAME)$(SLIBSUF).$(LIBVERSION)'
SLIBNAME_WITH_VERSION='$(SLIBNAME)'
SLIBNAME_WITH_MAJOR='$(SLIBNAME)'
add_extralibs "-lossaudio"
;;
dv1394="no"
need_memalign="no"
add_cflags "-pthread"
;;
osextralibs="-lpoll -lgnugetopt -lm"
cc="cc"
dv1394="no"
need_memalign="no"
SHFLAGS="-dynamiclib -Wl,-single_module -Wl,-install_name,\$(shlibdir)/\$(SLIBNAME),-current_version,\$(SPPVERSION),-compatibility_version,\$(SPPVERSION) -Wl,-read_only_relocs,suppress"
VHOOKSHFLAGS='-dynamiclib -Wl,-single_module -flat_namespace -undefined suppress -Wl,-install_name,$(shlibdir)/vhook/$@'
osextralibs=""
strip="strip -x"
FFLDFLAGS="-Wl,-dynamic,-search_paths_first"
SLIBSUF=".dylib"
SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME).$(LIBVERSION)$(SLIBSUF)'
SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(NAME).$(LIBMAJOR)$(SLIBSUF)'
FFSERVERLDFLAGS=-Wl,-bind_at_load
;;
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
if enabled_all shared static; then
cat <<EOF
You can only build one library type at once on MinGW.
Specify --disable-static --enable-shared to only build
the shared libraries. To build only the static libraries
you do not need to pass additional options.
EOF
exit 1
fi
dv1394="no"
ffserver="no"
network="no"
if enabled wince; then
protocols="no"
fi
SLIBPREF=""
SLIBSUF=".dll"
EXESUF=".exe"
SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(NAME)-$(LIBMAJOR)$(SLIBSUF)'
SLIB_EXTRA_CMD="-lib /machine:i386 /def:\$(@:${SLIBSUF}=.def)"
SLIB_INSTALL_EXTRA_CMD="-install -m 644 \$(SLIBNAME_WITH_MAJOR:\$(SLIBSUF)=.lib) \"\$(shlibdir)/\$(SLIBNAME_WITH_MAJOR:\$(SLIBSUF)=.lib)\""
SHFLAGS="-shared -Wl,--output-def,\$(@:${SLIBSUF}=.def),--out-implib,lib\$(SLIBNAME:\$(SLIBSUF)=.dll.a) -Wl,--enable-runtime-pseudo-reloc"
VHOOKSHFLAGS='-shared -L$(BUILD_ROOT)/libavformat -L$(BUILD_ROOT)/libavcodec -L$(BUILD_ROOT)/libswscale -L$(BUILD_ROOT)/libavutil'
VHOOKLIBS='-lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lswscale$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)'
osextralibs=""
EXESUF=".exe"
SLIBPREF="cyg"
SLIBSUF=".dll"
SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(NAME)-$(LIBMAJOR)$(SLIBSUF)'
SHFLAGS='-shared -Wl,--out-implib=lib$(NAME).dll.a'
;;
TMPE=$TMPE".exe"
ar="emxomfar -p128"
ranlib="echo ignoring ranlib"
strip="echo ignoring strip"
add_cflags "-Zomf"
FFLDFLAGS="-Zomf -Zstack 16384 -s"
SHFLAGS="-Zdll -Zomf"
FFSERVERLDFLAGS=""
LIBPREF=""
LIBSUF=".lib"
SLIBPREF=""
SLIBSUF=".dll"
EXESUF=".exe"
osextralibs=""
pkg_requires=""
dv1394="no"
ffserver="no"
vhook="no"
os2="yes"
;;
*)
targetos="${targetos}-UNKNOWN"
;;
add_extralibs $osextralibs
enabled logging || logfile="$logging"
echo "# $0 $@" >$logfile
set >>$logfile
else
logfile=/dev/null
fi
# Combine FFLDFLAGS and the LDFLAGS environment variable.
LDFLAGS="$FFLDFLAGS $LDFLAGS"
test -n "$cross_prefix" && cross_compile=yes
cc="${cross_prefix}${cc}"
ar="${cross_prefix}${ar}"
ranlib="${cross_prefix}${ranlib}"
strip="${cross_prefix}${strip}"
# we need to build at least one lib type
if disabled_all static shared; then
cat <<EOF
At least one library type must be built.
Specify --enable-static to build the static libraries or --enable-shared to
build the shared libraries as well. To only build the shared libraries specify
--disable-static in addition to --enable-shared.
EOF
exit 1;
fi
if disabled libogg; then
enabled libtheora && die "libogg must be enabled to enable libtheora."
enabled libvorbis && die "libogg must be enabled to enable libvorbis."
if enabled_any libfaad libfaadbin ; then
if check_header faad.h; then
check_cc << EOF
#include <faad.h>
#ifndef FAAD2_VERSION
ok faad1
#endif
int main( void ) { return 0; }
EOF
test $? = 0 && enable libfaad2
else
die_gpl_disabled(){
name=$1
shift
enabled_any $@ && die "$name is under GPL and --enable-gpl is not specified."
}
die_gpl_disabled "The Postprocessing code" pp
die_gpl_disabled "liba52" liba52
die_gpl_disabled "libxvidcore" xvid
die_gpl_disabled "x264" x264
die_gpl_disabled "libdts" libdts
die_gpl_disabled "FAAD2" libfaad2
die_gpl_disabled "The X11 grabber" x11grab
die_gpl_disabled "The software scaler" swscaler
Ramiro Polla
committed
fi
Michael Niedermayer
committed
Fabrice Bellard
committed
if test $mmx = "default"; then
if test $arch = "x86_32" -o $arch = "x86_64"; then
Fabrice Bellard
committed
mmx="yes"
else
mmx="no"
fi
fi
test -z "$need_memalign" && need_memalign="$mmx"
#Darwin CC versions
Michael Niedermayer
committed
needmdynamicnopic="no"
if test $targetos = Darwin; then
if test -n "`$cc -v 2>&1 | grep xlc`"; then
add_cflags "-qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto"
else
gcc_version="`$cc -v 2>&1 | grep version | cut -d ' ' -f3-`"
case "$gcc_version" in
*2.95*)
add_cflags "-no-cpp-precomp -pipe"
add_cflags "-no-cpp-precomp -pipe -force_cpusubtype_ALL -Wno-sign-compare"
if disabled shared; then
needmdynamicnopic="yes"
fi
;;
*)
add_cflags "-no-cpp-precomp -pipe"
if disabled shared; then
needmdynamicnopic="yes"
fi
;;
esac
fi
fi
disabled optimize || add_cflags -fomit-frame-pointer
Brian Foley
committed
# Can only do AltiVec on PowerPC
if test $altivec = "default"; then
if test $arch = "powerpc"; then
Brian Foley
committed
altivec="yes"
else
altivec="no"
fi
fi
Michael Niedermayer
committed
# Add processor-specific flags
Romain Dolbeau
committed
POWERPCMODE="32bits"
Guillaume Poirier
committed
if test $cpu != "generic"; then
warn_altivec(){
$1 altivec && echo "WARNING: Tuning for $2 but AltiVec $1.";
Guillaume Poirier
committed
case $cpu in
;;
603*|ppc603*|PowerPC603*)
;;
604*|ppc604*|PowerPC604*)
;;
G3|g3|75*|ppc75*|PowerPC75*)
add_cflags "-mcpu=750 -mpowerpc-gfxopt"
;;
G4|g4|745*|ppc745*|PowerPC745*)
add_cflags "-mcpu=7450 -mpowerpc-gfxopt"
;;
74*|ppc74*|PowerPC74*)
add_cflags "-mcpu=7400 -mpowerpc-gfxopt"
;;
G5|g5|970|ppc970|PowerPC970|power4*|Power4*)
add_cflags "-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
Romain Dolbeau
committed
POWERPCMODE="64bits"
Guillaume Poirier
committed
# targets that do NOT support conditional mov (cmov)
i[345]86|pentium|pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
Guillaume Poirier
committed
add_cflags "-march=$cpu"
Guillaume Poirier
committed
cmov="no"
;;
# targets that do support conditional mov (cmov)
i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2)
Guillaume Poirier
committed
add_cflags "-march=$cpu"
fast_cmov="yes"
;;
# targets that do support conditional mov but on which it's slow
pentium4|prescott|nocona)
add_cflags "-march=$cpu"
cmov="yes"
fast_cmov="no"
Guillaume Poirier
committed
echo "WARNING: Unknown CPU \"$cpu\", ignored."
Michael Niedermayer
committed
esac
fi
gnu_make(){
$1 --version 2>&1 | grep -q GNU
}
if ! gnu_make $make; then
gnu_make gmake && make=gmake || die "GNU make not found."
fi
# make sure we can execute files in $TMPDIR
cat >$TMPE 2>>$logfile <<EOF
#! /bin/sh
EOF
chmod +x $TMPE >>$logfile 2>&1
if ! $TMPE >>$logfile 2>&1; then
cat <<EOF
Unable to create and execute files in $TMPDIR1. Set the TMPDIR environment
variable to another directory and make sure that $TMPDIR1 is not mounted
noexec.
EOF
die "Sanity test failed."
fi
# compiler sanity check
check_exec <<EOF
int main(){
return 0;
}
EOF
if test "$?" != 0; then
echo "$cc is unable to create an executable file."
if test -z "$cross_prefix" && disabled cross_compile ; then
echo "If $cc is a cross-compiler, use the --cross-compile option."
echo "Only do this if you know what cross compiling means."
fi
die "C compiler test failed."
fi
# check for assembler specific support
if test $arch = "powerpc"; then
check_cc <<EOF && dcbzl=yes
int main(void) {
register long zero = 0;
char data[1024];
asm volatile("dcbzl %0, %1" : : "b" (data), "r" (zero));
return 0;
}
EOF
fi
# check for SIMD availability
# AltiVec flags: The FSF version of GCC differs from the Apple version
if test $arch = "powerpc"; then
if enabled altivec; then
if test -n "`$cc -v 2>&1 | grep version | grep Apple`"; then
add_cflags "-faltivec"
Magnus Damm
committed
else
add_cflags "-maltivec -mabi=altivec"
Magnus Damm
committed
fi
fi
fi
check_header altivec.h
if enabled altivec; then
if enabled altivec_h; then
inc_altivec_h="#include <altivec.h>"
else
inc_altivec_h=
fi
check_cc <<EOF || altivec=no
int main(void) {
vector signed int v1, v2, v3;
v1 = vec_add(v2,v3);
return 0;
}
EOF
fi
Brian Foley
committed
# check armv5te instructions support
if test $armv5te = "default" -a $arch = "armv4l"; then
armv5te=no
check_cc <<EOF && armv5te=yes
int main(void) {
__asm__ __volatile__ ("qadd r0, r0, r0");
}
EOF
fi
if test $armv6 = "default" -a $arch = "armv4l"; then
check_cc <<EOF && armv6=yes || armv6=no
int main(void) {
__asm__ __volatile__ ("sadd16 r0, r0, r0");
}
EOF
fi
if test $iwmmxt = "default" -a $arch = "armv4l"; then
iwmmxt=no
check_cc <<EOF && iwmmxt=yes
int main(void) {
__asm__ __volatile__ ("wunpckelub wr6, wr4");
}
EOF
fi
if test $mmi = "default"; then
if test $arch = "mips"; then
mmi="yes"
else
mmi="no"
fi
fi
enabled mmi && check_cc <<EOF || mmi="no"
int main(void) {
__asm__ ("lq \$2, 0(\$2)");
return 0;
}
EOF
# ---
# big/little-endian test
if disabled cross_compile; then
check_ld <<EOF || die "endian test failed" && $TMPE && bigendian="yes"
#include <inttypes.h>
int main(int argc, char ** argv){
volatile uint32_t i=0x01234567;
return (*((uint8_t*)(&i))) == 0x67;
# programs cannot be launched if cross compiling, so make a static guess
if test "$arch" = "powerpc" -o "$arch" = "mips" ; then
# ---
# check availability of some header files
check_header malloc.h
check_func memalign
if disabled_all memalign memalign_hack && enabled need_memalign ; then
die "Error, no memalign() but SSE enabled, disable it or use --enable-memalign-hack."
check_header byteswap.h
check_func inet_aton
check_func localtime_r
enabled zlib && check_lib zlib.h zlibVersion -lz || zlib="no"
# ffserver uses poll(),
# if it's not found we can emulate it using select().
if enabled ffserver; then
check_header sys/poll.h
fi
# check for some common methods of building with pthread support
# do this before the optional library checks as some of them require pthreads
if enabled pthreads; then
if check_func pthread_create; then
:
elif check_func pthread_create -pthread; then
add_cflags -pthread
add_ldflags -pthread
elif check_func pthread_create -pthreads; then
add_cflags -pthreads
add_ldflags -pthreads
elif ! check_lib pthread.h pthread_create -lpthread; then
die "ERROR: can't find pthreads library"
fi
fi
for thread in pthreads beosthreads os2threads w32threads; do
if enabled $thread; then
die "ERROR: Only one thread type must be selected."
else
thread_type="$thread"
fi
fi
done
enabled_any amr_nb amr_nb_fixed amr_wb amr_if2 && enable amr
enabled_all amr_nb amr_nb_fixed &&
die "Only one of amr_nb and amr_nb_fixed may be enabled."
# these are off by default, so fail if requested and not available
enabled liba52 && require liba52 a52dec/a52.h a52_init -la52
enabled libdts && require libdts dts.h dts_init -ldts -lm
enabled libgsm && require libgsm gsm.h gsm_create -lgsm
enabled libmp3lame && require LAME lame/lame.h lame_init -lmp3lame -lm
enabled libtheora && require libtheora theora/theora.h theora_info_init -ltheora -logg
enabled libvorbis && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbis -lvorbisenc -logg
enabled libogg && require libogg ogg/ogg.h ogg_sync_init -logg
enabled libnut && require libnut libnut.h nut_demuxer_init -lnut
enabled xvid && require XviD xvid.h xvid_global -lxvidcore
enabled x264 && require x264 x264.h x264_encoder_open -lx264
enabled dc1394 && require libdc1394 libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394
enabled mlib && require mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
enabled libfaac && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
enabled libfaad && require2 libfaad faad.h faacDecOpen -lfaad
enabled avisynth && require2 vfw32 "windows.h vfw.h" AVIFileInit -lvfw32
Michael Niedermayer
committed
# test for lrintf in math.h
Michael Niedermayer
committed
#define _ISOC9X_SOURCE 1
#include <math.h>
int main( void ) { return (lrintf(3.999f) > 0)?0:1; }
EOF
_restrict=
for restrict_keyword in restrict __restrict__ __restrict; do
check_cc <<EOF && _restrict=$restrict_keyword && break
void foo(char * $restrict_keyword p);
EOF
# dlopen/dlfcn.h probing
check_header dlfcn.h
if check_func dlopen; then
ldl=
elif check_func dlopen -ldl; then
ldl=-ldl
test "$vhook" = "default" && vhook="$dlopen"
enabled_any vhook liba52bin libfaadbin && add_extralibs $ldl
if test "$targetos" = "CYGWIN" && enabled static ; then
vhook="no"
echo
echo "At the moment vhooks don't work on Cygwin static builds."
echo "Patches welcome."
echo
fi
if enabled vhook; then
check_ldflags -rdynamic
check_ldflags -export-dynamic
fi
enabled audio_beos && add_extralibs "-lmedia -lbe"
François Revol
committed
enabled mingw32 && add_extralibs -lws2_32
check_foo_config imlib2 imlib2 Imlib2.h imlib_load_font
check_foo_config freetype2 freetype ft2build.h FT_Init_FreeType
##########################################
SDL_CONFIG="${cross_prefix}sdl-config"
if "${SDL_CONFIG}" --version >/dev/null 2>&1; then
sdl_cflags=`"${SDL_CONFIG}" --cflags`
temp_cflags $sdl_cflags
temp_extralibs `"${SDL_CONFIG}" --libs`
_sdlversion=`"${SDL_CONFIG}" --version | sed 's/[^0-9]//g'`
if test "$_sdlversion" -lt 121 ; then
sdl_too_old=yes
else
sdl=yes
#include <SDL.h>
int main(void){
const SDL_VideoInfo *vi = SDL_GetVideoInfo();
int w = vi->current_w;
return 0;
}
EOF
restore_flags
texi2html -version >/dev/null 2>&1 && enable texi2html || disable texi2html
Nicolas Boos
committed
##########################################
enabled network && enabled ipv6 && check_ld <<EOF && ipv6=yes || ipv6=no
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
int main( void ) {
struct sockaddr_storage saddr;
struct ipv6_mreq mreq6;
getaddrinfo(0,0,0,0);
getnameinfo(0,0,0,0,0,0,0);
Dan Villiom Podlaski Christiansen
committed
IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
}
EOF
Måns Rullgård
committed
enabled v4l && check_header linux/videodev.h || disable v4l
enabled v4l2 && check_header linux/videodev2.h || disable v4l2
# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
if enabled bktr; then
{ check_header dev/bktr/ioctl_meteor.h &&
check_header dev/bktr/ioctl_bt848.h; } ||
{ check_header machine/ioctl_meteor.h &&
check_header machine/ioctl_bt848.h; } ||
{ check_header dev/video/meteor/ioctl_meteor.h &&
check_header dev/video/bktr/ioctl_bt848.h; } ||
check_header dev/ic/bt8xx.h ||
disable bktr
enabled audio_oss &&
check_header sys/soundcard.h ||
check_header soundcard.h ||
disable audio_oss
# Deal with the x11 frame grabber
enabled gpl &&
enabled x11_grab_device_demuxer &&
check_header X11/Xlib.h &&
check_header X11/extensions/XShm.h &&
check_func XOpenDisplay -lX11 &&
check_func XShmCreateImage -lX11 -lXext &&
add_extralibs -lX11 -lXext ||
disable x11_grab_device_demuxer
enabled debug && add_cflags -g
# add some useful compiler flags if supported
check_cflags -Wdeclaration-after-statement
check_cflags -Wall
check_cflags -Wno-switch
check_cflags -Wdisabled-optimization
check_cflags -Wpointer-arith
check_cflags -Wredundant-decls
enabled extra_warnings && check_cflags -Winline
# add some linker flags
check_ldflags $LDLATEFLAGS
# not all compilers support -Os
test "$optimize" = "small" && check_cflags -Os
if enabled optimize; then
if test -n "`$cc -v 2>&1 | grep xlc`"; then
add_cflags "-O5"
add_ldflags "-O5"
else
add_cflags "-O3"
fi
fi
# PIC flags for shared library objects where they are needed
if enabled shared; then
# LIBOBJFLAGS may have already been set in the OS configuration
if test -z "$LIBOBJFLAGS" ; then
case "$arch" in
x86_64|ia64|alpha|sparc*|power*) LIBOBJFLAGS="\$(PIC)" ;;
fi
fi
if enabled gprof; then
add_cflags "-p"
add_ldflags "-p"
VHOOKCFLAGS="-fPIC $CFLAGS"
enabled needmdynamicnopic && add_cflags -mdynamic-no-pic
# find if .align arg is power-of-two or not
if test $asmalign_pot = "unknown"; then
asmalign_pot="no"
echo 'asm (".align 3");' | check_cc && asmalign_pot="yes"
fi
enabled_any $ENCODER_LIST && enable encoders
enabled_any $DECODER_LIST && enable decoders
enabled_any $MUXER_LIST && enable muxers
enabled_any $DEMUXER_LIST && enable demuxers
enabled_any pthreads beosthreads os2threads w32threads && enable threads
check_deps $CONFIG_LIST $HAVE_LIST $DECODER_LIST $ENCODER_LIST $PARSER_LIST \
$DEMUXER_LIST $MUXER_LIST
enabled libogg && append pkg_requires "ogg >= 1.1"
enabled libtheora && append pkg_requires "theora"
enabled libvorbis && append pkg_requires "vorbis vorbisenc"
enabled dc1394 && append pkg_requires "libraw1394"
echo "install prefix $PREFIX"
echo "source path $source_path"
echo "C compiler $cc"
echo "make $make"
if test "$BUILDSUF" != ""; then
if test $arch = "x86_32" -o $arch = "x86_64"; then
echo "MMX enabled $mmx"
echo "CMOV enabled $cmov"
echo "CMOV is fast $fast_cmov"
if test $arch = "armv4l"; then
Gildas Bazin
committed
fi
if test $arch = "mips"; then
if test $arch = "powerpc"; then
echo "AltiVec enabled $altivec"
echo "dcbzl available $dcbzl"
echo "gprof enabled $gprof"
echo "debug symbols $debug"
echo "strip symbols $dostrip"
echo "optimize $optimize"
echo "static $static"
echo "shared $shared"
echo "postprocessing support $pp"
echo "software scaler enabled $swscaler"
if enabled vhook; then
echo "Imlib2 support $imlib2"
echo "FreeType support $freetype2"
Philip Gladstone
committed
fi
if enabled network; then
echo "threading support $thread_type"
if enabled sdl_too_old; then
echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support."
fi
echo "Sun medialib support $mlib"
echo "AVISynth enabled $avisynth"
echo "liba52 support $liba52"
echo "liba52 dlopened $liba52bin"
Diego Biurrun
committed
echo "libfaac enabled $libfaac"
echo "libfaad enabled $libfaad"
echo "faadbin enabled $libfaadbin"
echo "libmp3lame enabled $libmp3lame"
echo "libnut enabled $libnut"
echo "libogg enabled $libogg"
echo "libvorbis enabled $libvorbis"
echo "x264 enabled $x264"
echo "AMR-NB float support $amr_nb"
echo "AMR-NB fixed support $amr_nb_fixed"
echo "AMR-WB float support $amr_wb"
echo "AMR-WB IF2 support $amr_if2"
Michael Niedermayer
committed
else
Michael Niedermayer
committed
fi
echo "# Automatically generated by configure - do not modify!" > config.mak
echo "/* Automatically generated by configure - do not modify! */" > $TMPH
echo "#define FFMPEG_CONFIGURATION \"$FFMPEG_CONFIGURATION\"" >> $TMPH
echo "PREFIX=$PREFIX" >> config.mak
echo "prefix=\$(DESTDIR)\${PREFIX}" >> config.mak
echo "libdir=\$(DESTDIR)$libdir" >> config.mak
Diego Biurrun
committed
echo "shlibdir=\$(DESTDIR)$shlibdir" >> config.mak
echo "incdir=\$(DESTDIR)$incdir" >> config.mak
echo "bindir=\$(DESTDIR)$bindir" >> config.mak
echo "mandir=\$(DESTDIR)$mandir" >> config.mak
echo "CC=$cc" >> config.mak
echo "AR=$ar" >> config.mak
if enabled dostrip; then
Michel Bardiaux
committed
else
Michel Bardiaux
committed
fi
Michael Niedermayer
committed
echo "VHOOKCFLAGS=$VHOOKCFLAGS">>config.mak
Fabrice Bellard
committed
echo "LDFLAGS=$LDFLAGS" >> config.mak
Jacob Meuser
committed
echo "LDCONFIG=$LDCONFIG" >> config.mak
echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
echo "SHFLAGS=$SHFLAGS" >> config.mak
echo "VHOOKSHFLAGS=$VHOOKSHFLAGS" >> config.mak
echo "VHOOKLIBS=$VHOOKLIBS" >> config.mak
echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
echo "BUILD_STATIC=$static" >> config.mak
echo "BUILDSUF=$BUILDSUF" >> config.mak
echo "LIBPREF=$LIBPREF" >> config.mak
echo "LIBSUF=\${BUILDSUF}$LIBSUF" >> config.mak
if enabled static; then
echo "LIB=$LIB" >> config.mak
else # Some Make complain if this variable does not exist.
echo "LIB=" >> config.mak
fi
echo "SLIBPREF=$SLIBPREF" >> config.mak
echo "SLIBSUF=\${BUILDSUF}$SLIBSUF" >> config.mak
echo "EXESUF=\${BUILDSUF}$EXESUF" >> config.mak
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
ucarch=`toupper $arch`
echo "TARGET_ARCH_${ucarch}=yes" >> config.mak
echo "#define ARCH_${ucarch} 1" >> $TMPH
# special cases
case "$arch" in
x86_32|x86_64)
echo "TARGET_ARCH_X86=yes" >> config.mak
echo "#define ARCH_X86 1" >> $TMPH
;;
powerpc)
if test "$POWERPCMODE" = "64bits"; then
echo "#define POWERPC_MODE_64BITS 1" >> $TMPH
fi
;;
sparc64)
echo "TARGET_ARCH_SPARC=yes" >> config.mak
echo "#define ARCH_SPARC 1" >> $TMPH
;;
esac
if enabled bigendian; then
Fabrice Bellard
committed
echo "WORDS_BIGENDIAN=yes" >> config.mak
echo "#define WORDS_BIGENDIAN 1" >> $TMPH
Nick Kurshev
committed
fi
if enabled mmx; then
if enabled sdl; then
echo "SDL_LIBS=`"${SDL_CONFIG}" --libs`" >> config.mak
echo "SDL_CFLAGS=`"${SDL_CONFIG}" --cflags`" >> config.mak
if enabled texi2html; then
Nicolas Boos
committed
echo "BUILD_DOC=yes" >> config.mak
fi
sws_version=`grep '#define LIBSWSCALE_VERSION ' "$source_path/libswscale/swscale.h" | sed 's/[^0-9\.]//g'`
pp_version=`grep '#define LIBPOSTPROC_VERSION ' "$source_path/libpostproc/postprocess.h" | sed 's/[^0-9\.]//g'`
lavc_version=`grep '#define LIBAVCODEC_VERSION ' "$source_path/libavcodec/avcodec.h" | sed 's/[^0-9\.]//g'`
lavf_version=`grep '#define LIBAVFORMAT_VERSION ' "$source_path/libavformat/avformat.h" | sed 's/[^0-9\.]//g'`
lavu_version=`grep '#define LIBAVUTIL_VERSION ' "$source_path/libavutil/avutil.h" | sed 's/[^0-9\.]//g'`
if enabled shared; then
echo "PIC=-fPIC -DPIC" >> config.mak
echo "SPPMAJOR=${pp_version%%.*}" >> config.mak
echo "SPPVERSION=$pp_version" >> config.mak
echo "LAVCMAJOR=${lavc_version%%.*}" >> config.mak
echo "LAVCVERSION=$lavc_version" >> config.mak
echo "LAVFMAJOR=${lavf_version%%.*}" >> config.mak
echo "LAVFVERSION=$lavf_version" >> config.mak
echo "LAVUMAJOR=${lavu_version%%.*}" >> config.mak
echo "LAVUVERSION=$lavu_version" >> config.mak
echo "SWSMAJOR=${sws_version%%.*}" >> config.mak
echo "SWSVERSION=$sws_version" >> config.mak
Diego Biurrun
committed
echo "SLIBNAME=${SLIBNAME}" >> config.mak
echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
echo "EXTRALIBS=$extralibs" >> config.mak
print_config HAVE_ $TMPH config.mak $HAVE_LIST
print_config CONFIG_ $TMPH config.mak $CONFIG_LIST
print_config TARGET_ $TMPH config.mak $TARGET_LIST
if test "$targetos" = "Darwin"; then
echo "#define CONFIG_DARWIN 1" >> $TMPH
fi
echo "#define restrict $_restrict" >> $TMPH
if test "$optimize" = "small"; then
echo "#define always_inline" >> $TMPH
echo "#define CONFIG_SMALL 1" >> $TMPH
echo "SRC_PATH=\"$source_path\"" >> config.mak
echo "SRC_PATH_BARE=$source_path" >> config.mak
echo "BUILD_ROOT=\"$PWD\"" >> config.mak
Fabrice Bellard
committed
if enabled amr_if2; then
Torsten Martinsen
committed
echo "AMR_CFLAGS=-DIF2=1" >> config.mak
fi
# Apparently it's not possible to portably echo a backslash.
if enabled asmalign_pot; then
printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH
printf '#define ASMALIGN(ZEROBITS) ".align 1<<" #ZEROBITS "\\n\\t"\n' >> $TMPH
for codec in $DECODER_LIST $ENCODER_LIST $PARSER_LIST $DEMUXER_LIST $MUXER_LIST; do
config_name="CONFIG_$ucname"
enabled_name="ENABLE_$ucname"
if enabled $codec; then
echo "#define $config_name 1" >> $TMPH
echo "#define $enabled_name 1" >> $TMPH
echo "$config_name=yes" >> config.mak
else
echo "#define $enabled_name 0" >> $TMPH
fi
Michael Niedermayer
committed
done
Diego Biurrun
committed
# Do not overwrite config.h if unchanged to avoid superfluous rebuilds.
Diego Biurrun
committed
mv -f $TMPH config.h
else
echo "config.h is unchanged"
fi
rm -f $TMPO $TMPC $TMPE $TMPS $TMPH
Aurelien Jacobs
committed
# build tree in object directory if source path is different from current one
if enabled source_path_used; then
DIRS="\
doc \
libavformat \
libavcodec \
libavcodec/alpha \
libavcodec/armv4l \
libavcodec/bfin \
libavcodec/i386 \
libavcodec/sparc \
libavcodec/mlib \
libavcodec/ppc \
libavcodec/amr \
libavcodec/amr_float \
libavcodec/amrwb_float \
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
libpostproc \
libavutil \
libswscale \
tests \
vhook \
"
FILES="\
Makefile \
common.mak \
libavformat/Makefile \
libavcodec/Makefile \
libpostproc/Makefile \
libavutil/Makefile \
libswscale/Makefile \
tests/Makefile \
vhook/Makefile \
doc/Makefile \
doc/texi2pod.pl \
"
for dir in $DIRS ; do
mkdir -p $dir
done
for f in $FILES ; do
ln -sf "$source_path/$f" $f
done
fi
Aurelien Jacobs
committed
# FIXME: libdir and includedir are hardcoded and may differ from the real path.
Aurelien Jacobs
committed
pkgconfig_generate(){
name=$1
comment=$2
version=$3
libs=$4
requires=$5
include=$6
cat <<EOF >$name.pc
prefix=$PREFIX
exec_prefix=\${prefix}
Aurelien Jacobs
committed
libdir=\${exec_prefix}/lib
includedir=\${prefix}/include
Aurelien Jacobs
committed
Name: $name
Description: $comment
Version: $version
Requires: $requires
Aurelien Jacobs
committed
Conflicts:
Libs: -L\${libdir} $libs
Cflags: -I\${includedir} -I\${includedir}/$include
Aurelien Jacobs
committed
EOF
Aurelien Jacobs
committed
pkgconfig_generate_uninstalled(){
name=$1
comment=$2
version=$3
libs=$4
requires=$5
cat <<EOF >$name-uninstalled.pc
Aurelien Jacobs
committed
prefix=
exec_prefix=
libdir=\${pcfiledir}/$name
includedir=\${pcfiledir}/$name
Aurelien Jacobs
committed
Name: $name
Description: $comment
Version: $version
Requires: $requires
Aurelien Jacobs
committed
Conflicts:
Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
Aurelien Jacobs
committed
Cflags: -I\${includedir}
EOF
Aurelien Jacobs
committed
pkgconfig_generate libavutil "FFmpeg utility library" "$lavu_version" -lavutil "" ffmpeg
pkgconfig_generate_uninstalled libavutil "FFmpeg utility library" "$lavu_version"
Aurelien Jacobs
committed
pkgconfig_generate libavcodec "FFmpeg codec library" "$lavc_version" "-lavcodec $extralibs" "$pkg_requires libavutil = $lavu_version" ffmpeg
pkgconfig_generate_uninstalled libavcodec "FFmpeg codec library" "$lavc_version" "$extralibs" "$pkg_requires libavutil = $lavu_version"
Aurelien Jacobs
committed
pkgconfig_generate libavformat "FFmpeg container format library" "$lavf_version" "-lavformat $extralibs" "$pkg_requires libavcodec = $lavc_version" ffmpeg
pkgconfig_generate_uninstalled libavformat "FFmpeg container format library" "$lavf_version" "$extralibs" "$pkg_requires libavcodec = $lavc_version"
Aurelien Jacobs
committed
if enabled pp; then
pkgconfig_generate libpostproc "FFmpeg post processing library" "$pp_version" -lpostproc "" postproc
pkgconfig_generate_uninstalled libpostproc "FFmpeg post processing library" "$pp_version"
fi
if enabled swscaler; then
pkgconfig_generate libswscale "FFmpeg image rescaling library" "$sws_version" "-lswscale" "libavutil = $lavu_version" swscale
pkgconfig_generate_uninstalled libswscale "FFmpeg image rescaling library" "$sws_version" "" "libavutil = $lavu_version"
pkgconfig_generate libswscale "FFmpeg image rescaling library" "$sws_version" "" "$pkg_requires libavcodec = $lavc_version" swscale
pkgconfig_generate_uninstalled libswscale "FFmpeg image rescaling library" "$sws_version" "" "$pkg_requires libavcodec = $lavc_version"
apply libswscale.pc sed s/^Libs:.*$/Libs:/
apply libswscale-uninstalled.pc sed s/^Libs:.*$/Libs:/