exit 1
fi
+test -d /usr/xpg4/bin && PATH=/usr/xpg4/bin:$PATH
+
show_help(){
-cat <<EOF
+ cat <<EOF
Usage: configure [options]
Options: [defaults in brackets after descriptions]
--enable-libopencore-amrwb enable AMR-WB decoding via libopencore-amrwb [no]
--enable-libopencv enable video filtering via libopencv [no]
--enable-libopenjpeg enable JPEG 2000 de/encoding via OpenJPEG [no]
+ --enable-libopus enable Opus decoding via libopus [no]
--enable-libpulse enable Pulseaudio input via libpulse [no]
--enable-librtmp enable RTMP[E] support via librtmp [no]
--enable-libschroedinger enable Dirac de/encoding via libschroedinger [no]
--target-os=OS compiler targets OS [$target_os]
--target-exec=CMD command to run executables on target
--target-path=DIR path to view of build directory on target
+ --toolchain=NAME set tool defaults according to NAME
--nm=NM use nm tool
--ar=AR use archive tool AR [$ar_default]
--as=AS use assembler AS [$as_default]
disable buffer boundary checking in bitreaders
(faster, but may crash)
--enable-memalign-hack emulate memalign, interferes with memory debuggers
+ --enable-lto use link-time optimization
Optimization options (experts only):
--disable-asm disable all assembler optimizations
--disable-armv6 disable armv6 optimizations
--disable-armv6t2 disable armv6t2 optimizations
--disable-armvfp disable ARM VFP optimizations
- --disable-mmi disable MMI optimizations
--disable-neon disable NEON optimizations
--disable-vis disable VIS optimizations
+ --disable-inline-asm disable use of inline assembler
--disable-yasm disable use of yasm assembler
Developer options (useful when working on Libav itself):
include the log this produces with your report.
EOF
else
-cat <<EOF
+ cat <<EOF
Include the log file "$logfile" produced by configure as this will help
solving the problem.
EOF
}
print_enabled(){
- test "$1" = -n && end=" " && shift || end="\n"
+ test x"$1" = x-n && end=" " && shift || end="\n"
suf=$1
shift
for v; do
static void sighandler(int sig){
raise(SIGTERM);
}
+int foo(void){
+ $code
+}
int main(void){
signal(SIGILL, sighandler);
signal(SIGFPE, sighandler);
#ifdef SIGBUS
signal(SIGBUS, sighandler);
#endif
- { $code }
+ foo();
}
EOF
}
libopencore_amrwb
libopencv
libopenjpeg
+ libopus
libpulse
librtmp
libschroedinger
armv6
armv6t2
armvfp
- mmi
neon
ppc4xx
vfpv3
vis
"
+HAVE_LIST_CMDLINE='
+ inline_asm
+ symver
+ yasm
+'
+
HAVE_LIST_PUB='
bigendian
fast_unaligned
$ARCH_EXT_LIST
$(add_suffix _external $ARCH_EXT_LIST)
$(add_suffix _inline $ARCH_EXT_LIST)
+ $HAVE_LIST_CMDLINE
$HAVE_LIST_PUB
$THREADS_LIST
aligned_malloc
cbrtf
closesocket
cmov
- cpuid
cpunop
+ CryptGenRandom
dcbzl
dev_bktr_ioctl_bt848_h
dev_bktr_ioctl_meteor_h
dev_ic_bt8xx_h
dev_video_bktr_ioctl_bt848_h
dev_video_meteor_ioctl_meteor_h
+ direct_h
dlfcn_h
dlopen
dos_paths
gnu_as
ibm_asm
inet_aton
- inline_asm
io_h
isatty
isinf
rint
round
roundf
- rweflags
sched_getaffinity
sdl
sdl_video_size
struct_sockaddr_sa_len
struct_sockaddr_storage
struct_v4l2_frmivalenum_discrete
- symver
symver_asm_label
symver_gnu_asm
sysconf
windows_h
winsock2_h
xform_asm
- xgetbv
xmm_clobbers
- yasm
"
# options emitted with CONFIG_ prefix but not available on command line
huffman
lgplv3
lpc
+ mpegaudio
mpegaudiodsp
mpegvideo
mpegvideoenc
CMDLINE_SELECT="
$ARCH_EXT_LIST
$CONFIG_LIST
+ $HAVE_LIST_CMDLINE
$THREADS_LIST
asm
cross_compile
debug
extra_warnings
logging
+ lto
optimizations
- symver
- yasm
"
PATHS_LIST='
target_exec
target_os
target_path
+ toolchain
"
CMDLINE_APPEND="
neon_deps="arm"
vfpv3_deps="armvfp"
-mmi_deps="mips"
-
altivec_deps="ppc"
ppc4xx_deps="ppc"
symver_if_any="symver_asm_label symver_gnu_asm"
+log2_deps="!msvcrt"
+
# subsystems
dct_select="rdft"
mdct_select="fft"
rdft_select="fft"
+mpegaudio_select="mpegaudiodsp"
mpegaudiodsp_select="dct"
mpegvideoenc_select="mpegvideo"
mdec_decoder_select="error_resilience mpegvideo"
mjpeg_encoder_select="aandcttables mpegvideoenc"
mlp_decoder_select="mlp_parser"
-mp1_decoder_select="mpegaudiodsp"
-mp1float_decoder_select="mpegaudiodsp"
-mp2_decoder_select="mpegaudiodsp"
-mp2float_decoder_select="mpegaudiodsp"
-mp3_decoder_select="mpegaudiodsp"
-mp3adu_decoder_select="mpegaudiodsp"
-mp3adufloat_decoder_select="mpegaudiodsp"
-mp3float_decoder_select="mpegaudiodsp"
-mp3on4_decoder_select="mpegaudiodsp"
-mp3on4float_decoder_select="mpegaudiodsp"
+mp1_decoder_select="mpegaudio"
+mp1float_decoder_select="mpegaudio"
+mp2_decoder_select="mpegaudio"
+mp2float_decoder_select="mpegaudio"
+mp3_decoder_select="mpegaudio"
+mp3adu_decoder_select="mpegaudio"
+mp3adufloat_decoder_select="mpegaudio"
+mp3float_decoder_select="mpegaudio"
+mp3on4_decoder_select="mpegaudio"
+mp3on4float_decoder_select="mpegaudio"
mpc7_decoder_select="mpegaudiodsp"
mpc8_decoder_select="mpegaudiodsp"
mpeg_vdpau_decoder_select="vdpau mpegvideo_decoder"
libopencore_amrwb_decoder_deps="libopencore_amrwb"
libopenjpeg_decoder_deps="libopenjpeg"
libopenjpeg_encoder_deps="libopenjpeg"
+libopus_decoder_deps="libopus"
+libopus_encoder_deps="libopus"
libschroedinger_decoder_deps="libschroedinger"
libschroedinger_encoder_deps="libschroedinger"
libspeex_decoder_deps="libspeex"
sap_demuxer_select="sdp_demuxer"
sap_muxer_select="rtp_muxer rtp_protocol"
sdp_demuxer_select="rtpdec"
+smoothstreaming_muxer_select="ismv_muxer"
spdif_muxer_select="aac_parser"
tg2_muxer_select="mov_muxer"
tgp_muxer_select="mov_muxer"
cc_default="gcc"
host_cc_default="gcc"
ln_s="ln -sf"
-nm_default="nm"
+nm_default="nm -g"
objformat="elf"
pkg_config_default=pkg-config
ranlib="ranlib"
yasmexe="yasm"
-nm_opts='-g'
nogas=":"
# machine
sysinclude_default="${sysroot}/usr/include"
-set_default cc nm pkg_config sysinclude
+case "$toolchain" in
+ msvc)
+ cc_default="c99wrap cl"
+ ld_default="c99wrap link"
+ nm_default="dumpbin -symbols"
+ ar_default="lib"
+ ;;
+ ?*)
+ die "Unknown toolchain $toolchain"
+ ;;
+esac
+
+set_default cc pkg_config sysinclude
enabled cross_compile || host_cc_default=$cc
set_default host_cc
-fno-common) ;;
-fno-signed-zeros) ;;
-lz) echo zlib.lib ;;
+ -lavifil32) echo vfw32.lib ;;
+ -lavicap32) echo vfw32.lib user32.lib ;;
-l*) echo ${flag#-l}.lib ;;
*) echo $flag ;;
esac
pgi_flags(){
for flag; do
case $flag in
+ -flto) echo -Mipa=fast,libopt,libinline,vestigial ;;
-fomit-frame-pointer) echo -Mnoframe ;;
-g) echo -gopt ;;
*) echo $flag ;;
-mfpu=neon) echo --float_support=vfpv3 --neon ;;
-mfpu=vfp) echo --float_support=vfpv2 ;;
-mfpu=vfpv3) echo --float_support=vfpv3 ;;
+ -mfpu=vfpv3-d16) echo --float_support=vfpv3d16 ;;
-msoft-float) echo --float_support=vfplib ;;
-O[0-3]|-mf=*) echo $flag ;;
-g) echo -g -mn ;;
_depflags='-MMD'
_cflags_speed='-O3'
_cflags_size='-Os'
- elif $_cc -version 2>/dev/null | grep -q TMS470; then
+ elif $_cc -version 2>/dev/null | grep -Eq 'TMS470|TI ARM'; then
_type=tms470
_ident=$($_cc -version | head -n1 | tr -s ' ')
_flags='--gcc --abi=eabi -me'
- _cflags='-D__gnuc_va_list=va_list -D__USER_LABEL_PREFIX__='
_cc_e='-ppl -fe=$@'
_cc_o='-fe=$@'
- as_default="${cross_prefix}gcc"
- ld_default="${cross_prefix}gcc"
_depflags='-ppa -ppd=$(@:.o=.d)'
_cflags_speed='-O3 -mf=5'
_cflags_size='-O3 -mf=2'
elif $_cc -V 2>&1 | grep -q Portland; then
_type=pgi
_ident="PGI $($_cc -V 2>&1 | awk '/^pgcc/ { print $2; exit }')"
- opt_common='-alias=ansi -Mlre -Mpre'
+ opt_common='-alias=ansi -Mdse -Mlre -Mpre'
_cflags_speed="-O3 -Mautoinline -Munroll=c:4 $opt_common"
_cflags_size="-O2 -Munroll=c:1 $opt_common"
_cflags_noopt="-O1"
_flags='-nologo'
_cflags='-D_USE_MATH_DEFINES -Dinline=__inline -FIstdlib.h -Dstrtoll=_strtoi64'
if [ $pfx = hostcc ]; then
- _cflags="$cflags -Dsnprintf=_snprintf"
+ append _cflags -Dsnprintf=_snprintf
fi
- disable aligned_stack
fi
eval ${pfx}_type=\$_type
DEPCCFLAGS=$_flags
fi
+if $ar 2>&1 | grep -q Microsoft; then
+ arflags="-nologo"
+ ar_o='-out:$@'
+elif $ar 2>&1 | grep -q 'Texas Instruments'; then
+ arflags="rq"
+ ar_o='$@'
+else
+ arflags="rc"
+ ar_o='$@'
+fi
+
add_cflags $extra_cflags
add_asflags $extra_cflags
# guards for processor-specific code, instead suppress
# generation of the HWCAPS ELF section on Solaris x86 only.
enabled_all suncc x86 && echo "hwcap_1 = OVERRIDE;" > mapfile && add_ldflags -Wl,-M,mapfile
- nm_opts='-P -g'
+ nm_default='nm -P -g'
;;
netbsd)
disable symver
dlltool="${cross_prefix}dlltool"
ranlib=:
enable dos_paths
- check_cflags -fno-common
add_cppflags -U__STRICT_ANSI__
;;
cygwin*)
SHFLAGS='-shared -Wl,--out-implib,$(SUBDIR)lib$(FULLNAME).dll.a'
objformat="win32"
enable dos_paths
- check_cflags -fno-common
add_cppflags -U__STRICT_ANSI__
;;
*-dos|freedos|opendos)
SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
- echo PROTMODE >> $(SUBDIR)$(NAME).def; \
- echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
- echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
- echo EXPORTS >> $(SUBDIR)$(NAME).def; \
- emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
+ echo PROTMODE >> $(SUBDIR)$(NAME).def; \
+ echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
+ echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
+ echo EXPORTS >> $(SUBDIR)$(NAME).def; \
+ emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
- emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
+ emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
SLIB_INSTALL_EXTRA_LIB='$(LIBPREF)$(NAME)_dll.a $(LIBPREF)$(NAME)_dll.lib'
enable dos_paths
;;
-l:drtaeabi.dso -l:scppnwdl.dso -lsupc++ -lgcc \
-l:libc.dso -l:libm.dso -l:euser.dso -l:libcrt0.lib
;;
+ osf1)
+ add_cppflags -D_OSF_SOURCE -D_POSIX_PII -D_REENTRANT
+ AVSERVERLDFLAGS=
+ ;;
+ minix)
+ ;;
none)
;;
*)
test -n "$libc_type" && enable $libc_type
+# hacks for compiler/libc/os combinations
+
+if enabled_all tms470 glibc; then
+ add_cppflags -D__USER_LABEL_PREFIX__=
+ add_cppflags -D__builtin_memset=memset
+ add_cppflags -D__gnuc_va_list=va_list -D_VA_LIST_DEFINED
+ add_cflags -pds=48 # incompatible redefinition of macro
+fi
+
esc(){
echo "$*" | sed 's/%/%25/g;s/:/%3a/g'
}
check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable pic
set_default $PATHS_LIST
+set_default nm
# we need to build at least one lib type
if ! enabled_any static shared; then
check_cc <<EOF || die "Symbol mangling check failed."
int ff_extern;
EOF
-sym=$($nm $nm_opts $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
+sym=$($nm $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
extern_prefix=${sym%%ff_extern*}
-check_cc <<EOF && enable inline_asm
+check_cc <<EOF && enable_weak inline_asm
void foo(void) { __asm__ volatile ("" ::); }
EOF
elif enabled mips; then
check_inline_asm loongson '"dmult.g $1, $2, $3"'
- enabled mmi && check_inline_asm mmi '"lq $2, 0($2)"'
elif enabled ppc; then
enabled vis &&
check_inline_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc &&
- add_cflags -mcpu=ultrasparc -mtune=ultrasparc
+ add_cflags -mcpu=ultrasparc -mtune=ultrasparc
elif enabled x86; then
- check_code ld immintrin.h "__xgetbv(0)" && enable xgetbv
- check_code ld intrin.h "int info[4]; __cpuid(info, 0)" && enable cpuid
check_code ld intrin.h "__rdtsc()" && enable rdtsc
- check_code ld intrin.h "unsigned int x = __readeflags()" && enable rweflags
check_code ld mmintrin.h "_mm_empty()" && enable mm_empty
# if the base pointer is used to access it because the
# base pointer is cleared in the inline assembly code.
check_exec_crash <<EOF && enable ebp_available
- volatile int i=0;
- __asm__ volatile (
- "xorl %%ebp, %%ebp"
- ::: "%ebp");
- return i;
+volatile int i=0;
+__asm__ volatile ("xorl %%ebp, %%ebp" ::: "%ebp");
+return i;
EOF
# check whether EBX is available on x86
check_func usleep
check_func_headers io.h setmode
check_lib2 "windows.h shellapi.h" CommandLineToArgvW -lshell32
+check_lib2 "windows.h wincrypt.h" CryptGenRandom -ladvapi32
check_lib2 "windows.h psapi.h" GetProcessMemoryInfo -lpsapi
check_func_headers windows.h GetProcessAffinityMask
check_func_headers windows.h GetProcessTimes
check_func_headers windows.h Sleep
check_func_headers windows.h VirtualAlloc
+check_header direct.h
check_header dlfcn.h
check_header dxva.h
check_header dxva2api.h
enabled libopencore_amrwb && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb
enabled libopencv && require_pkg_config opencv opencv/cv.h cvCreateImageHeader
enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
+enabled libopus && require_pkg_config opus opus_multistream.h opus_multistream_decoder_create
enabled libpulse && require_pkg_config libpulse-simple pulse/simple.h pa_simple_new
enabled librtmp && require_pkg_config librtmp librtmp/rtmp.h RTMP_Socket
enabled libschroedinger && require_pkg_config schroedinger-1.0 schroedinger/schro.h schro_init
fi
if ! disabled vdpau && enabled vdpau_vdpau_h; then
-check_cpp_condition \
- vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
- { echolog "Please upgrade to libvdpau >= 0.2 if you would like vdpau support." &&
- disable vdpau; }
+ check_cpp_condition vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
+ { echolog "Please upgrade to libvdpau >= 0.2 if you would like vdpau support." && disable vdpau; }
fi
enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
EOF
fi
-if [ -n "$optflags" ]; then
- add_cflags $optflags
-elif enabled small; then
- add_cflags $cflags_size
-elif enabled optimizations; then
- add_cflags $cflags_speed
-else
- add_cflags $cflags_noopt
+if [ -z "$optflags" ]; then
+ if enabled small; then
+ optflags=$cflags_size
+ elif enabled optimizations; then
+ optflags=$cflags_speed
+ else
+ optflags=$cflags_noopt
+ fi
fi
-check_cflags -fno-math-errno
-check_cflags -fno-signed-zeros
+
+check_optflags(){
+ check_cflags "$@"
+ enabled lto && check_ldflags "$@"
+}
+
+
+if enabled lto; then
+ test "$cc_type" != "$ld_type" && die "LTO requires same compiler and linker"
+ check_cflags -flto
+ check_ldflags -flto $cpuflags
+fi
+
+check_optflags $optflags
+check_optflags -fno-math-errno
+check_optflags -fno-signed-zeros
if enabled icc; then
# Just warnings, no remarks
add_cflags -msg_disable ptrmismatch1
add_cflags -msg_disable unreachcode
elif enabled gcc; then
- check_cflags -fno-tree-vectorize
+ check_optflags -fno-tree-vectorize
check_cflags -Werror=implicit-function-declaration
check_cflags -Werror=missing-prototypes
check_cflags -Werror=declaration-after-statement
+ check_cflags -Werror=vla
elif enabled llvm_gcc; then
check_cflags -mllvm -stack-alignment=16
elif enabled clang; then
add_cflags -pds=824 -pds=837
elif enabled pathscale; then
add_cflags -fstrict-overflow -OPT:wrap_around_unsafe_opt=OFF
+elif enabled msvc; then
+ enabled x86_32 && disable aligned_stack
fi
enabled_any $THREADS_LIST && enable threads
echo "ARM VFP enabled ${armvfp-no}"
echo "NEON enabled ${neon-no}"
fi
-if enabled mips; then
- echo "MMI enabled ${mmi-no}"
-fi
if enabled ppc; then
echo "AltiVec enabled ${altivec-no}"
echo "PPC 4xx optimizations ${ppc4xx-no}"
echo "libopencore-amrwb support ${libopencore_amrwb-no}"
echo "libopencv support ${libopencv-no}"
echo "libopenjpeg enabled ${libopenjpeg-no}"
+echo "libopus enabled ${libopus-no}"
echo "libpulse enabled ${libpulse-no}"
echo "librtmp enabled ${librtmp-no}"
echo "libschroedinger enabled ${libschroedinger-no}"
YASM=$yasmexe
DEPYASM=$yasmexe
AR=$ar
+ARFLAGS=$arflags
+AR_O=$ar_o
RANLIB=$ranlib
LN_S=$ln_s
CPPFLAGS=$CPPFLAGS
# build pkg-config files
pkgconfig_generate(){
-name=$1
-shortname=${name#lib}${build_suffix}
-comment=$2
-version=$3
-libs=$4
-requires=$5
-enabled ${name#lib} || return 0
-mkdir -p $name
-cat <<EOF > $name/$name.pc
+ name=$1
+ shortname=${name#lib}${build_suffix}
+ comment=$2
+ version=$3
+ libs=$4
+ requires=$5
+ enabled ${name#lib} || return 0
+ mkdir -p $name
+ cat <<EOF > $name/$name.pc
prefix=$prefix
exec_prefix=\${prefix}
libdir=$libdir
Libs.private: $(enabled shared && echo $libs)
Cflags: -I\${includedir}
EOF
-cat <<EOF > $name/$name-uninstalled.pc
+ cat <<EOF > $name/$name-uninstalled.pc
prefix=
exec_prefix=
libdir=\${pcfiledir}