echo "$v"
}
+filter(){
+ pat=$1
+ shift
+ for v; do
+ case "$v" in $pat) echo "$v" ;; esac
+ done
+}
+
set_all(){
value=$1
shift
getrusage
inet_aton
inline_asm
+ isatty
ldbrx
libdc1394_1
libdc1394_2
termios_h
threads
truncf
+ vfp_args
VirtualAlloc
winsock2_h
xform_asm
cpu
cross_prefix
dep_cc
- extra_cflags
extra_version
host_cc
host_cflags
target_path
"
+CMDLINE_APPEND="
+ extra_cflags
+"
+
# code dependency declarations
# architecture extensions
# decoders / encoders / hardware accelerators
aac_decoder_select="fft mdct"
+aac_encoder_select="fft mdct"
ac3_decoder_select="fft mdct"
atrac3_decoder_select="fft mdct"
cavs_decoder_select="golomb"
dca_decoder_select="fft mdct"
dnxhd_encoder_select="aandct"
dxa_decoder_select="zlib"
-eac3_decoder_select="fft mdct"
+eac3_decoder_select="ac3_decoder"
+eamad_decoder_select="aandct"
eatgq_decoder_select="aandct"
eatqi_decoder_select="aandct"
ffv1_decoder_select="golomb"
flac_encoder_select="golomb"
flashsv_decoder_select="zlib"
flashsv_encoder_select="zlib"
-flv_encoder_select="aandct"
+flv_encoder_select="h263_encoder"
h261_encoder_select="aandct"
h263_encoder_select="aandct"
h263_vaapi_hwaccel_deps="va_va_h"
h263_vaapi_hwaccel_select="vaapi h263_decoder"
-h263p_encoder_select="aandct"
+h263p_encoder_select="h263_encoder"
h264_decoder_select="golomb"
h264_vaapi_hwaccel_deps="va_va_h"
h264_vaapi_hwaccel_select="vaapi"
mjpeg_encoder_select="aandct"
mpeg1video_encoder_select="aandct"
mpeg2video_encoder_select="aandct"
-mpeg4_encoder_select="aandct"
+mpeg4_encoder_select="h263_encoder"
mpeg_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
mpeg_vdpau_decoder_select="vdpau mpegvideo_decoder"
mpeg1_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
mpeg4_vaapi_hwaccel_deps="va_va_h"
mpeg4_vaapi_hwaccel_select="vaapi mpeg4_decoder"
mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
-msmpeg4v1_encoder_select="aandct"
-msmpeg4v2_encoder_select="aandct"
-msmpeg4v3_encoder_select="aandct"
+mpeg_xvmc_decoder_select="mpegvideo_decoder"
+msmpeg4v1_encoder_select="h263_encoder"
+msmpeg4v2_encoder_select="h263_encoder"
+msmpeg4v3_encoder_select="h263_encoder"
nellymoser_decoder_select="fft mdct"
nellymoser_encoder_select="fft mdct"
png_decoder_select="zlib"
png_encoder_select="zlib"
qdm2_decoder_select="fft mdct rdft"
-rv10_encoder_select="aandct"
-rv20_encoder_select="aandct"
+rv10_encoder_select="h263_encoder"
+rv20_encoder_select="h263_encoder"
rv30_decoder_select="golomb"
rv40_decoder_select="golomb"
shorten_decoder_select="golomb"
sonic_ls_encoder_select="golomb"
svq3_decoder_select="golomb"
svq3_decoder_suggest="zlib"
+theora_decoder_select="vp3_decoder"
tiff_decoder_suggest="zlib"
tiff_encoder_suggest="zlib"
tscc_decoder_select="zlib"
wmav1_encoder_select="fft mdct"
wmav2_decoder_select="fft mdct"
wmav2_encoder_select="fft mdct"
-wmv1_encoder_select="aandct"
-wmv2_encoder_select="aandct"
+wmv1_encoder_select="h263_encoder"
+wmv2_encoder_select="h263_encoder"
wmv3_decoder_select="vc1_decoder"
wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
wmv3_vdpau_decoder_select="vc1_vdpau_decoder"
# protocols
gopher_protocol_deps="network"
http_protocol_deps="network"
+rtmp_protocol_deps="tcp_protocol"
rtp_protocol_deps="udp_protocol"
tcp_protocol_deps="network"
udp_protocol_deps="network"
# gcc stupidly only outputs the basename of targets with -MM, but we need the
# full relative path for objects in subdirectories for non-recursive Make.
-DEPEND_CMD='$(DEPCC) $(DEPFLAGS) $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o,"'
+DEPEND_CMD='$(DEPCC) $(DEPFLAGS) $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o," > $(@:.o=.d)'
DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -MM'
# find source path
--enable-debug=*) debuglevel="$optval"
;;
--enable-*=*|--disable-*=*)
- eval $(echo "$opt" | sed 's/=/-/;s/--/action=/;s/-/ thing=/;s/-/ name=/')
- case "$thing" in
- encoder|decoder|hwaccel|muxer|demuxer|indev|outdev|parser|bsf|protocol|filter) $action ${optval}_${thing} ;;
- *) die_unknown "$opt" ;;
- esac
+ eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
+ is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
+ eval list=\$$(toupper $thing)_LIST
+ name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
+ $action $(filter "$name" $list)
;;
--enable-?*|--disable-?*)
eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
optname="${opt%%=*}"
optname="${optname#--}"
optname=$(echo "$optname" | sed 's/-/_/g')
- is_in $optname $CMDLINE_SET || die_unknown $opt
- eval $optname='$optval'
+ if is_in $optname $CMDLINE_SET; then
+ eval $optname='$optval'
+ elif is_in $optname $CMDLINE_APPEND; then
+ append $optname "$optval"
+ else
+ die_unknown $opt
+ fi
;;
esac
done
filter_cppflags=echo
filter_asflags=echo
-if $cc --version 2>/dev/null | grep -qi gcc; then
+if $cc -v 2>&1 | grep -qi ^gcc; then
cc_type=gcc
+ if ! $cc -dumpversion | grep -q '^2\.'; then
+ CC_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
+ AS_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
+ fi
elif $cc --version 2>/dev/null | grep -q Intel; then
cc_type=icc
+ CC_DEPFLAGS='-MMD'
+ AS_DEPFLAGS='-MMD'
elif $cc -v 2>&1 | grep -q xlc; then
cc_type=xlc
elif $cc -V 2>/dev/null | grep -q Compaq; then
die "Error creating armcc configuration file."
cc="$cc --arm_linux_config_file=$armcc_conf --translate_gcc"
as_default="${cross_prefix}gcc"
+ CC_DEPFLAGS='-MMD'
+ AS_DEPFLAGS='-MMD'
elif $cc -version 2>/dev/null | grep -q TMS470; then
cc_type=tms470
cc="$cc --gcc --abi=eabi -eo=.o -mc -me"
CC_O='-fr=$(@D)'
as_default="${cross_prefix}gcc"
ld_default="${cross_prefix}gcc"
- dep_cc_default="${cross_prefix}gcc"
TMPO=$(basename $TMPC .c).o
append TMPFILES $TMPO
add_cflags -D__gnuc_va_list=va_list -D__USER_LABEL_PREFIX__=
- DEPFLAGS='$(CPPFLAGS) -MM'
+ CC_DEPFLAGS='-ppa -ppd=$(@:.o=.d)'
+ AS_DEPFLAGS='-MMD'
filter_cflags=tms470_flags
tms470_flags(){
for flag; do
: ${ld_default:=$cc}
set_default as dep_cc ld
+test -n "$CC_DEPFLAGS" || CCDEP=$DEPEND_CMD
+test -n "$AS_DEPFLAGS" || ASDEP=$DEPEND_CMD
+
add_cflags $extra_cflags
add_asflags $extra_cflags
esac
fi
+if test "$cpu" = host; then
+ enabled cross_compile && die "--cpu=host makes no sense when cross-compiling."
+
+ case "$cc_type" in
+ gcc)
+ check_native(){
+ $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
+ awk "/$1=/{ match(\$0, /$1=(\\w+)/, a);print a[1];exit }" $TMPE
+ }
+ cpu=$(check_native -march || check_native -mcpu)
+ ;;
+ esac
+
+ test "${cpu:-host}" = host && die "--cpu=host not supported with compiler $cc"
+fi
+
# Add processor-specific flags
case $cpu in
601|ppc601|PowerPC601)
arch="alpha"
enable fast_64bit
check_cflags -mieee
+ pic=$shared
;;
arm|armv[4567]*l)
arch="arm"
ia64)
arch="ia64"
enable fast_64bit
+ pic=$shared
;;
m68k)
arch="m68k"
;;
mips|mipsel|IP*)
arch="mips"
+ pic=$shared
;;
mips64)
arch="mips"
subarch="mips64"
enable fast_64bit
+ pic=$shared
;;
parisc|hppa)
arch="parisc"
+ pic=$shared
;;
parisc64|hppa64)
arch="parisc"
enable fast_64bit
+ pic=$shared
;;
"Power Macintosh"|ppc|powerpc)
arch="ppc"
;;
sparc)
arch="sparc"
+ pic=$shared
;;
sun4u|sparc64)
arch="sparc"
subarch="sparc64"
enable fast_64bit
+ pic=$shared
;;
i386|i486|i586|i686|i86pc|BePC)
arch="x86"
enable cmov
enable fast_cmov
enable fast_unaligned
- check_cc <<EOF && enable fast_64bit && subarch="x86_64"
+ check_cc <<EOF && enable fast_64bit && subarch="x86_64" && pic=$shared
int test[sizeof(char*) - 7];
EOF
;;
;;
openbsd)
enable malloc_aligned
- LIBOBJFLAGS='$(PIC)'
+ enable pic
SHFLAGS='-shared'
oss_indev_extralibs="-lossaudio"
oss_outdev_extralibs="-lossaudio"
FFSERVERLDFLAGS=-Wl,-bind_at_load
objformat="macho"
enabled x86_64 && objformat="macho64"
+ enabled shared ||
+ { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
;;
mingw32*)
- target_os=mingw32
+ if test $target_os = "mingw32ce"; then
+ disable network
+ else
+ target_os=mingw32
+ fi
LIBTARGET=i386
if enabled x86_64; then
enable malloc_aligned
check_deps $ARCH_EXT_LIST
-#Darwin CC versions
-if test $target_os = darwin; then
- if enabled xlc; then
- add_cflags -qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto
- else
- add_cflags -pipe
- check_cflags -force_cpusubtype_ALL
- check_cflags -Wno-sign-compare
- enabled shared || check_cflags -mdynamic-no-pic
- fi
-fi
-
disabled optimizations || check_cflags -fomit-frame-pointer
check_cc <<EOF || die "Symbol mangling check failed."
void foo(void) { __asm__ volatile ("" ::); }
EOF
-if enabled x86; then
+_restrict=
+for restrict_keyword in restrict __restrict__ __restrict; do
+ check_cc <<EOF && _restrict=$restrict_keyword && break
+void foo(char * $restrict_keyword p);
+EOF
+done
+
+check_cc <<EOF && enable attribute_packed
+struct { int x; } __attribute__((packed)) x;
+EOF
+
+check_cc <<EOF || die "endian test failed"
+unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
+EOF
+od -A n -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
+
+if enabled arm; then
+
+ check_ld <<EOF && enable vfp_args
+__asm__ (".eabi_attribute 28, 1");
+int main(void) { return 0; }
+EOF
+
+ # We have to check if pld is a nop and disable it.
+ check_asm pld '"pld [r0]"'
+
+ enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
+ enabled armv6 && check_asm armv6 '"sadd16 r0, r0, r0"'
+ enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
+ enabled armvfp && check_asm armvfp '"fadds s0, s0, s0"'
+ enabled iwmmxt && check_asm iwmmxt '"wunpckelub wr6, wr4"'
+ enabled neon && check_asm neon '"vadd.i16 q0, q0, q0"'
+
+elif enabled mips; then
+
+ check_asm loongson '"dmult.g $1, $2, $3"'
+ enabled mmi && check_asm mmi '"lq $2, 0($2)"'
+
+elif enabled ppc; then
+
+ check_asm dcbzl '"dcbzl 0, 1"'
+ check_asm ppc4xx '"maclhw r10, r11, r12"'
+ check_asm xform_asm '"lwzx 0, %y0" :: "Z"(*(int*)0)'
+
+ # AltiVec flags: The FSF version of GCC differs from the Apple version
+ if enabled altivec; then
+ check_cflags -maltivec -mabi=altivec &&
+ { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
+ check_cflags -faltivec
+
+ # check if our compiler supports Motorola AltiVec C API
+ check_cc <<EOF || disable altivec
+$inc_altivec_h
+int main(void) {
+ vector signed int v1, v2, v3;
+ v1 = vec_add(v2,v3);
+ return 0;
+}
+EOF
+
+ # check if our compiler supports braces for vector declarations
+ check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
+$inc_altivec_h
+int main (void) { (vector int) {1}; return 0; }
+EOF
+ fi
+
+elif enabled sparc; then
+
+ enabled vis && check_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc &&
+ add_cflags -mcpu=ultrasparc -mtune=ultrasparc
+
+elif enabled x86; then
+
# check whether EBP is available on x86
# As 'i' is stored on the stack, this program will crash
# if the base pointer is used to access it because the
*) append YASMFLAGS "-DPREFIX" ;;
esac
disabled yasm || { check_yasm "pabsw xmm0, xmm0" && enable yasm; }
-fi
-
-# check for assembler specific support
-
-enabled mips && check_asm loongson '"dmult.g $1, $2, $3"'
-
-enabled ppc && check_asm dcbzl '"dcbzl 0, 1"'
-enabled ppc && check_asm ppc4xx '"maclhw r10, r11, r12"'
-enabled ppc && check_asm xform_asm '"lwzx 0, %y0" :: "Z"(*(int*)0)'
-
-# check for SIMD availability
-
-# AltiVec flags: The FSF version of GCC differs from the Apple version
-if enabled altivec; then
- check_cflags -maltivec -mabi=altivec &&
- { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
- check_cflags -faltivec
-
- # check if our compiler supports Motorola AltiVec C API
- check_cc <<EOF || disable altivec
-$inc_altivec_h
-int main(void) {
- vector signed int v1, v2, v3;
- v1 = vec_add(v2,v3);
- return 0;
-}
-EOF
- # check if our compiler supports braces for vector declarations
- check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
-$inc_altivec_h
-int main (void) { (vector int) {1}; return 0; }
-EOF
fi
-# We have to check if pld is a nop and disable it.
-enabled arm && check_asm pld '"pld [r0]"'
-enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
-enabled armv6 && check_asm armv6 '"sadd16 r0, r0, r0"'
-enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
-enabled armvfp && check_asm armvfp '"fadds s0, s0, s0"'
-enabled iwmmxt && check_asm iwmmxt '"wunpckelub wr6, wr4"'
-enabled mmi && check_asm mmi '"lq $2, 0($2)"'
-enabled neon && check_asm neon '"vadd.i16 q0, q0, q0"'
-enabled vis && check_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc
-
-enabled vis && add_cflags -mcpu=ultrasparc -mtune=ultrasparc
-
-check_cc <<EOF || die "endian test failed"
-unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
-EOF
-od -A n -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
-
if check_func dlopen; then
ldl=
elif check_func dlopen -ldl; then
check_func gethrtime
check_func getrusage
check_func inet_aton $network_extralibs
+check_func isatty
check_func memalign
check_func mkstemp
check_func posix_memalign
die "ERROR: No version of libdc1394 found "
fi
-
-_restrict=
-for restrict_keyword in restrict __restrict__ __restrict; do
- check_cc <<EOF && _restrict=$restrict_keyword && break
-void foo(char * $restrict_keyword p);
-EOF
-done
-
-check_cc <<EOF && enable attribute_packed
-struct { int x; } __attribute__((packed)) x;
-EOF
-
disable sdl_too_old
disable sdl
SDL_CONFIG="${cross_prefix}sdl-config"
fi
fi
-enabled network && enabled ipv6 && check_ld <<EOF && enable ipv6 || disable ipv6
+enabled_all network ipv6 && check_ld <<EOF || disable ipv6
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
check_header sys/soundcard.h
check_header soundcard.h
-enabled alsa_indev || enabled alsa_outdev && check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
+enabled_any alsa_indev alsa_outdev && check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack
check_cflags -fno-tree-vectorize
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 "${subarch-$arch}" in
- x86_64|ia64|alpha|sparc*|power*|parisc*|mips*) LIBOBJFLAGS='$(PIC)' ;;
- esac
- fi
-fi
+enabled pic && LIBOBJFLAGS='$(PIC)'
if enabled gprof; then
add_cflags -p
echo "SHFLAGS=$SHFLAGS" >> config.mak
echo "YASMFLAGS=$YASMFLAGS" >> config.mak
echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
-echo "BUILD_STATIC=$static" >> config.mak
+echo "PIC=-fPIC -DPIC" >> config.mak
echo "BUILDSUF=$build_suffix" >> config.mak
echo "FULLNAME=$FULLNAME" >> config.mak
echo "LIBPREF=$LIBPREF" >> config.mak
echo "SLIBSUF=$SLIBSUF" >> config.mak
echo "EXESUF=$EXESUF" >> config.mak
echo "EXTRA_VERSION=$extra_version" >> config.mak
-echo "DEPEND_CMD=$DEPEND_CMD" >> config.mak
echo "DEPFLAGS=$DEPFLAGS" >> config.mak
+echo "CCDEP=$CCDEP" >> config.mak
+echo "ASDEP=$ASDEP" >> config.mak
+echo "CC_DEPFLAGS=$CC_DEPFLAGS" >> config.mak
+echo "AS_DEPFLAGS=$AS_DEPFLAGS" >> config.mak
echo "HOSTCC=$host_cc" >> config.mak
echo "HOSTCFLAGS=$host_cflags" >> config.mak
echo "HOSTEXESUF=$HOSTEXESUF" >> config.mak
echo "TARGET_EXEC=$target_exec" >> config.mak
echo "TARGET_PATH=$target_path" >> config.mak
-if enabled bigendian; then
- echo "WORDS_BIGENDIAN=yes" >> config.mak
- echo "#define WORDS_BIGENDIAN 1" >> $TMPH
-fi
-
if enabled sdl; then
echo "SDL_LIBS=$("${SDL_CONFIG}" --libs)" >> config.mak
echo "SDL_CFLAGS=$("${SDL_CONFIG}" --cflags)" >> config.mak
get_version LIBAVFILTER libavfilter/avfilter.h
if enabled shared; then
- echo "BUILD_SHARED=yes" >> config.mak
- echo "PIC=-fPIC -DPIC" >> config.mak
echo "LIBTARGET=${LIBTARGET}" >> config.mak
echo "SLIBNAME=${SLIBNAME}" >> config.mak
echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
echo "#define restrict $_restrict" >> $TMPH
-if enabled small; then
+if enabled small || disabled optimizations; then
echo "#define av_always_inline" >> $TMPH
fi