From: Anton Mitrofanov Date: Tue, 30 Dec 2014 23:15:05 +0000 (+0300) Subject: Update configure for auto detection of system libx264 configuration X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=8e71b432e5dbe835fa4516064f6841a03c79b183;p=libx264 Update configure for auto detection of system libx264 configuration --- diff --git a/Makefile b/Makefile index 37d6531e..9804e5f4 100644 --- a/Makefile +++ b/Makefile @@ -267,7 +267,7 @@ clean: rm -f $(SRC2:%.c=%.gcda) $(SRC2:%.c=%.gcno) *.dyn pgopti.dpi pgopti.dpi.lock *.pgd *.pgc distclean: clean - rm -f config.mak x264_config.h config.h config.log x264.pc x264.def + rm -f config.mak x264_config.h config.h config.log x264.pc x264.def conftest* install-cli: cli $(INSTALL) -d $(DESTDIR)$(bindir) diff --git a/configure b/configure index 2916036c..15b1c911 100755 --- a/configure +++ b/configure @@ -77,7 +77,7 @@ cc_cflags() { # several non gcc compilers issue an incredibly large number of warnings on any warning level, # suppress them by disabling all warnings rather than having to use #pragmas to disable most of them for arg in $*; do - [ $arg = -ffast-math ] && arg= + [ "$arg" = -ffast-math ] && arg= [[ "$arg" = -falign-loops* ]] && arg= [ "$arg" = -fno-tree-vectorize ] && arg= [ "$arg" = -Wshadow ] && arg= @@ -105,10 +105,10 @@ cc_cflags() { cl_ldflags() { for arg in $*; do arg=${arg/LIBPATH/libpath} - [ ${arg#-libpath:} == $arg -a ${arg#-l} != $arg ] && arg=${arg#-l}.lib - [ ${arg#-L} != $arg ] && arg=-libpath:${arg#-L} - [ $arg = -Wl,--large-address-aware ] && arg=-largeaddressaware - [ $arg = -s ] && arg= + [ "${arg#-libpath:}" == "$arg" -a "${arg#-l}" != "$arg" ] && arg=${arg#-l}.lib + [ "${arg#-L}" != "$arg" ] && arg=-libpath:${arg#-L} + [ "$arg" = -Wl,--large-address-aware ] && arg=-largeaddressaware + [ "$arg" = -s ] && arg= [ "$arg" = -Wl,-Bsymbolic ] && arg= [ "$arg" = -fno-tree-vectorize ] && arg= [ "$arg" = -Werror ] && arg= @@ -119,6 +119,7 @@ cl_ldflags() { arg=${arg/pthreadGC/pthreadVC} [ "$arg" = avifil32.lib ] && arg=vfw32.lib [ "$arg" = gpac_static.lib ] && arg=libgpac_static.lib + [ "$arg" = x264.lib ] && arg=libx264.lib [ -n "$arg" ] && echo -n "$arg " done @@ -143,7 +144,9 @@ cc_check() { log_check "for $3 in $1"; fi rm -f conftest.c - [ -n "$1" ] && echo "#include <$1>" > conftest.c + for arg in $1; do + echo "#include <$arg>" >> conftest.c + done echo "int main (void) { $3 return 0; }" >> conftest.c if [ $compiler_style = MS ]; then cc_cmd="$CC conftest.c $(cc_cflags $CFLAGS $CHECK_CFLAGS $2) -link $(cl_ldflags $2 $LDFLAGSCLI $LDFLAGS)" @@ -172,7 +175,9 @@ cc_check() { cpp_check() { log_check "whether $3 is true" rm -f conftest.c - [ -n "$1" ] && echo "#include <$1>" > conftest.c + for arg in $1; do + echo "#include <$arg>" >> conftest.c + done echo -e "#if !($3) \n#error $4 \n#endif " >> conftest.c if [ $compiler_style = MS ]; then cpp_cmd="$CC conftest.c $(cc_cflags $CFLAGS $2) -P" @@ -256,6 +261,54 @@ die() { exit 1 } +configure_system_override() { + log_check "system libx264 configuration" + x264_config_path= + for arg in $1; do + if [ "${arg#-I}" != "$arg" -a -e "${arg#-I}/x264_config.h" ]; then + x264_config_path=${arg#-I}/x264_config.h + break + fi + done + if [ -n "$x264_config_path" ]; then + res=$? + log_ok + arg=$(grep '#define X264_GPL ' $x264_config_path | sed -e 's/#define X264_GPL *//; s/ *$//') + if [ -n "$arg" ]; then + [ "$arg" = 0 ] && arg="no" || arg="yes" + [ "$arg" != "$gpl" ] && die "Incompatible license with system libx264" + fi + arg=$(grep '#define X264_BIT_DEPTH ' $x264_config_path | sed -e 's/#define X264_BIT_DEPTH *//; s/ *$//') + if [ -n "$arg" ]; then + if [ "$arg" != "$bit_depth" ]; then + echo "Override output bit depth with system libx264 configuration" + bit_depth=$arg + fi + fi + arg=$(grep '#define X264_CHROMA_FORMAT ' $x264_config_path | sed -e 's/#define X264_CHROMA_FORMAT *//; s/ *$//') + if [ -n "$arg" ]; then + [ "$arg" = 0 ] && arg="all" || arg="${arg#X264_CSP_I}" + if [ "$arg" != "$chroma_format" ]; then + echo "Override output chroma format with system libx264 configuration" + chroma_format=$arg + fi + fi + arg=$(grep '#define X264_INTERLACED ' $x264_config_path | sed -e 's/#define X264_INTERLACED *//; s/ *$//') + if [ -n "$arg" ]; then + [ "$arg" = 0 ] && arg="no" || arg="yes" + if [ "$arg" != "$interlaced" ]; then + echo "Override interlaced encoding support with system libx264 configuration" + interlaced=$arg + fi + fi + else + res=$? + log_fail + log_msg "Failed search path was: $1" + fi + return $res +} + rm -f x264_config.h config.h config.mak config.log x264.pc x264.def conftest* SRCPATH="$(cd $(dirname $0); pwd)" @@ -458,6 +511,8 @@ host="${host#*-}" host_vendor="${host%%-*}" host_os="${host#*-}" +trap 'rm -f conftest*' EXIT + # test for use of compilers that require specific handling cc_base=`basename "$CC"` QPRE="-" @@ -825,6 +880,17 @@ if [ $compiler = GNU ]; then fi fi +if [ "$cli_libx264" = "system" -a "$shared" != "yes" ] ; then + [ "$static" = "yes" ] && die "Option --system-libx264 can not be used together with --enable-static" + if ${cross_prefix}pkg-config --exists x264 2>/dev/null; then + X264_LIBS="$X264_LIBS $(${cross_prefix}pkg-config --libs x264)" + X264_CFLAGS="$X264_CFLAGS $(${cross_prefix}pkg-config --cflags x264)" + configure_system_override "$X264_CFLAGS" || die "Detection of system libx264 configuration failed" + else + die "Can not find system libx264" + fi +fi + # autodetect options that weren't forced nor disabled # pthread-win32 is lgpl, prevent its use if --disable-gpl is specified and targeting windows @@ -1137,6 +1203,31 @@ for var in $CONFIG_HAVE; do grep -q "HAVE_$var 1" config.h || define HAVE_$var 0 done +# generate exported config file + +config_chroma_format="X264_CSP_I$chroma_format" +[ "$config_chroma_format" == "X264_CSP_Iall" ] && config_chroma_format="0" +cat > x264_config.h << EOF +#define X264_BIT_DEPTH $bit_depth +#define X264_GPL $x264_gpl +#define X264_INTERLACED $x264_interlaced +#define X264_CHROMA_FORMAT $config_chroma_format +EOF + +${SRCPATH}/version.sh "${SRCPATH}" >> x264_config.h + +if [ "$cli_libx264" = "system" ] ; then + if [ "$shared" = "yes" ]; then + CLI_LIBX264='$(SONAME)' + else + CLI_LIBX264= + LDFLAGSCLI="$X264_LIBS $LDFLAGSCLI" + cc_check 'stdint.h x264.h' '' 'x264_encoder_open(0);' || die "System libx264 can't be used for compilation of this version" + fi +else + CLI_LIBX264='$(LIBX264)' +fi + DEPMM="${QPRE}MM" DEPMT="${QPRE}MT" if [ $compiler_style = MS ]; then @@ -1189,19 +1280,6 @@ else PROF_USE_LD="-fprofile-use" fi -rm -f conftest* - -# generate exported config file - -config_chroma_format="X264_CSP_I$chroma_format" -[ "$config_chroma_format" == "X264_CSP_Iall" ] && config_chroma_format="0" -cat > x264_config.h << EOF -#define X264_BIT_DEPTH $bit_depth -#define X264_GPL $x264_gpl -#define X264_INTERLACED $x264_interlaced -#define X264_CHROMA_FORMAT $config_chroma_format -EOF - # generate config files cat > config.mak << EOF @@ -1290,23 +1368,9 @@ if [ "$static" = "yes" ]; then echo 'install: install-lib-static' >> config.mak fi -if [ "$cli_libx264" = "system" ] ; then - if [ "$shared" = "yes" ]; then - CLI_LIBX264='$(SONAME)' - elif ${cross_prefix}pkg-config --exists x264 2>/dev/null; then - LDFLAGSCLI="$LDFLAGSCLI $(${cross_prefix}pkg-config --libs x264)" - CLI_LIBX264= - else - die "Can not find system libx264" - fi -else - CLI_LIBX264='$(LIBX264)' -fi echo "LDFLAGSCLI = $LDFLAGSCLI" >> config.mak echo "CLI_LIBX264 = $CLI_LIBX264" >> config.mak -${SRCPATH}/version.sh "${SRCPATH}" >> x264_config.h - cat > x264.pc << EOF prefix=$prefix exec_prefix=$exec_prefix @@ -1354,7 +1418,6 @@ EOF echo >> config.log cat conftest.log >> config.log cat conftest.log -rm conftest.log [ "$SRCPATH" != "." ] && ln -sf ${SRCPATH}/Makefile ./Makefile mkdir -p common/{aarch64,arm,ppc,x86} encoder extras filters/video input output tools diff --git a/filters/video/depth.c b/filters/video/depth.c index fe32f34f..88de95a8 100644 --- a/filters/video/depth.c +++ b/filters/video/depth.c @@ -73,10 +73,10 @@ static int csp_num_interleaved( int csp, int plane ) static void dither_plane_##pitch( pixel *dst, int dst_stride, uint16_t *src, int src_stride, \ int width, int height, int16_t *errors ) \ { \ - const int lshift = 16-BIT_DEPTH; \ - const int rshift = 16-BIT_DEPTH+2; \ - const int half = 1 << (16-BIT_DEPTH+1); \ - const int pixel_max = (1 << BIT_DEPTH)-1; \ + const int lshift = 16-X264_BIT_DEPTH; \ + const int rshift = 16-X264_BIT_DEPTH+2; \ + const int half = 1 << (16-X264_BIT_DEPTH+1); \ + const int pixel_max = (1 << X264_BIT_DEPTH)-1; \ memset( errors, 0, (width+1) * sizeof(int16_t) ); \ for( int y = 0; y < height; y++, src += src_stride, dst += dst_stride ) \ { \ @@ -136,7 +136,7 @@ static void dither_image( cli_image_t *out, cli_image_t *img, int16_t *error_buf static void scale_image( cli_image_t *output, cli_image_t *img ) { int csp_mask = img->csp & X264_CSP_MASK; - const int shift = BIT_DEPTH - 8; + const int shift = X264_BIT_DEPTH - 8; for( int i = 0; i < img->planes; i++ ) { uint8_t *src = img->plane[i]; @@ -216,7 +216,7 @@ static int init( hnd_t *handle, cli_vid_filter_t *filter, video_info_t *info, ret = 1; } - FAIL_IF_ERROR( bit_depth != BIT_DEPTH, "this build supports only bit depth %d\n", BIT_DEPTH ) + FAIL_IF_ERROR( bit_depth != X264_BIT_DEPTH, "this build supports only bit depth %d\n", X264_BIT_DEPTH ) FAIL_IF_ERROR( ret, "unsupported bit depth conversion.\n" ) /* only add the filter to the chain if it's needed */ diff --git a/x264.c b/x264.c index 5c3df0f9..cc8ace11 100644 --- a/x264.c +++ b/x264.c @@ -209,6 +209,13 @@ static const char * const output_csp_names[] = #endif 0 }; +static const char * const chroma_format_names[] = +{ + [0] = "all", + [X264_CSP_I420] = "i420", + [X264_CSP_I422] = "i422", + [X264_CSP_I444] = "i444" +}; static const char * const range_names[] = { "auto", "tv", "pc", 0 }; @@ -325,7 +332,8 @@ static void print_version_info( void ) #else printf( "using an unknown compiler\n" ); #endif - printf( "configuration: --bit-depth=%d --chroma-format=%s\n", x264_bit_depth, X264_CHROMA_FORMAT ? (output_csp_names[0]+1) : "all" ); + printf( "x264 configuration: --bit-depth=%d --chroma-format=%s\n", X264_BIT_DEPTH, chroma_format_names[X264_CHROMA_FORMAT] ); + printf( "libx264 configuration: --bit-depth=%d --chroma-format=%s\n", x264_bit_depth, chroma_format_names[x264_chroma_format] ); printf( "x264 license: " ); #if HAVE_GPL printf( "GPL version 2 or later\n" ); @@ -533,7 +541,7 @@ static void help( x264_param_t *defaults, int longhelp ) " Overrides all settings.\n" ); H2( #if X264_CHROMA_FORMAT <= X264_CSP_I420 -#if BIT_DEPTH==8 +#if X264_BIT_DEPTH==8 " - baseline:\n" " --no-8x8dct --bframes 0 --no-cabac\n" " --cqm flat --weightp 0\n" @@ -561,7 +569,7 @@ static void help( x264_param_t *defaults, int longhelp ) else H0( " - " #if X264_CHROMA_FORMAT <= X264_CSP_I420 -#if BIT_DEPTH==8 +#if X264_BIT_DEPTH==8 "baseline,main,high," #endif "high10,"