]> git.sesse.net Git - x264/blobdiff - configure
ffms: Various improvements
[x264] / configure
index 681535c8330a259e24000e92a870f85dec61fc82..5b9f8af0b5bec87a0e1bfd5b3c11af9f2dfcd368 100755 (executable)
--- a/configure
+++ b/configure
@@ -28,7 +28,7 @@ Configuration options:
   --disable-opencl         disable OpenCL features
   --disable-gpl            disable GPL-only features
   --disable-thread         disable multithreaded encoding
-  --enable-win32thread     use win32threads (windows only)
+  --disable-win32thread    disable win32threads (windows only)
   --disable-interlaced     disable interlaced encoding support
   --bit-depth=BIT_DEPTH    set output bit depth (8-10) [8]
   --chroma-format=FORMAT   output chroma format (420, 422, 444, all) [all]
@@ -373,7 +373,7 @@ NL="
 # list of all preprocessor HAVE values we can define
 CONFIG_HAVE="MALLOC_H ALTIVEC ALTIVEC_H MMX ARMV6 ARMV6T2 NEON BEOSTHREAD POSIXTHREAD WIN32THREAD THREAD LOG2F SWSCALE \
              LAVF FFMS GPAC AVS GPL VECTOREXT INTERLACED CPU_COUNT OPENCL THP LSMASH X86_INLINE_ASM AS_FUNC INTEL_DISPATCHER \
-             MSA"
+             MSA MMAP WINRT"
 
 # parse options
 
@@ -446,8 +446,8 @@ for opt do
         --disable-thread)
             thread="no"
             ;;
-        --enable-win32thread)
-            thread="win32"
+        --disable-win32thread)
+            [ "$thread" != "no" ] && thread="posix"
             ;;
         --disable-swscale)
             swscale="no"
@@ -601,29 +601,18 @@ case $host_os in
         define HAVE_MALLOC_H
         libm="-lm"
         ;;
-    cygwin*)
+    cygwin*|mingw*|msys*)
         EXE=".exe"
-        if [ $compiler_style = GNU ] && cc_check "" -mno-cygwin; then
-            CFLAGS="$CFLAGS -mno-cygwin"
-            LDFLAGS="$LDFLAGS -mno-cygwin"
-        fi
-        if cpp_check "" "" "defined(__CYGWIN__)" ; then
-            define HAVE_MALLOC_H
+        if [[ $host_os = cygwin* ]] && cpp_check "" "" "defined(__CYGWIN__)" ; then
             SYS="CYGWIN"
+            define HAVE_MALLOC_H
         else
             SYS="WINDOWS"
             DEVNULL="NUL"
             LDFLAGSCLI="$LDFLAGSCLI -lshell32"
-            RC="${RC-${cross_prefix}windres}"
+            [ $compiler = GNU ] && RC="${RC-${cross_prefix}windres}" || RC="${RC-rc}"
         fi
         ;;
-    mingw*)
-        SYS="WINDOWS"
-        EXE=".exe"
-        DEVNULL="NUL"
-        LDFLAGSCLI="$LDFLAGSCLI -lshell32"
-        [ $compiler = GNU ] && RC="${RC-${cross_prefix}windres}" || RC="${RC-rc}"
-        ;;
     sunos*|solaris*)
         SYS="SunOS"
         define HAVE_MALLOC_H
@@ -661,7 +650,7 @@ esac
 
 LDFLAGS="$LDFLAGS $libm"
 
-stack_alignment=16
+stack_alignment=4
 case $host_cpu in
     i*86)
         ARCH="X86"
@@ -677,21 +666,6 @@ case $host_cpu in
             fi
             CFLAGS="-m32 $CFLAGS"
             LDFLAGS="-m32 $LDFLAGS"
-        elif [ $compiler = ICC ]; then
-            # icc on linux has various degrees of mod16 stack support
-            if [ $SYS = LINUX ]; then
-                # < 11 is completely incapable of keeping a mod16 stack
-                if cpp_check "" "" "__INTEL_COMPILER < 1100" ; then
-                    stack_alignment=4
-                # 11 <= x < 12 is capable of keeping a mod16 stack, but defaults to not doing so.
-                elif cpp_check "" "" "__INTEL_COMPILER < 1200" ; then
-                    CFLAGS="$CFLAGS -falign-stack=assume-16-byte"
-                fi
-                # >= 12 defaults to a mod16 stack
-            fi
-        else # ICL/CL
-            # always a mod4 stack
-            stack_alignment=4
         fi
         if [ "$SYS" = MACOSX ]; then
             ASFLAGS="$ASFLAGS -f macho32 -DPREFIX"
@@ -709,6 +683,7 @@ case $host_cpu in
         AS="${AS-yasm}"
         AS_EXT=".asm"
         ASFLAGS="$ASFLAGS -DARCH_X86_64=1 -I\$(SRCPATH)/common/x86/"
+        stack_alignment=16
         [ $compiler = GNU ] && CFLAGS="-m64 $CFLAGS" && LDFLAGS="-m64 $LDFLAGS"
         if [ "$SYS" = MACOSX ]; then
             ASFLAGS="$ASFLAGS -f macho64 -DPIC -DPREFIX"
@@ -718,10 +693,15 @@ case $host_cpu in
             fi
         elif [ "$SYS" = WINDOWS -o "$SYS" = CYGWIN ]; then
             ASFLAGS="$ASFLAGS -f win64"
-            # only the GNU toolchain is inconsistent in prefixing function names with _
-            [ $compiler = GNU ] && cc_check "" "-S" && grep -q "_main:" conftest && ASFLAGS="$ASFLAGS -DPREFIX"
-            [ $compiler = GNU ] && LDFLAGS="$LDFLAGS -Wl,--dynamicbase,--nxcompat,--tsaware"
-            [ $compiler = GNU ] && RCFLAGS="--target=pe-x86-64 $RCFLAGS"
+            if [ $compiler = GNU ]; then
+                # only the GNU toolchain is inconsistent in prefixing function names with _
+                cc_check "" "-S" && grep -q "_main:" conftest && ASFLAGS="$ASFLAGS -DPREFIX"
+                cc_check "" "-Wl,--high-entropy-va" && LDFLAGS="$LDFLAGS -Wl,--high-entropy-va"
+                LDFLAGS="$LDFLAGS -Wl,--dynamicbase,--nxcompat,--tsaware"
+                LDFLAGSCLI="$LDFLAGSCLI -Wl,--image-base,0x140000000"
+                SOFLAGS="$SOFLAGS -Wl,--image-base,0x180000000"
+                RCFLAGS="--target=pe-x86-64 $RCFLAGS"
+            fi
         else
             ASFLAGS="$ASFLAGS -f elf64"
         fi
@@ -764,6 +744,7 @@ case $host_cpu in
         ;;
     aarch64)
         ARCH="AARCH64"
+        stack_alignment=16
         if [ "$SYS" = MACOSX ] ; then
             AS="${AS-${SRCPATH}/tools/gas-preprocessor.pl -arch aarch64 -- ${CC}}"
             ASFLAGS="$ASFLAGS -DPREFIX"
@@ -792,6 +773,21 @@ if [ $SYS = WINDOWS ]; then
     if ! rc_check "0 RCDATA {0}" ; then
         RC=""
     fi
+
+    if cpp_check "winapifamily.h" "" "!WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)" ; then
+        [ $compiler = CL ] || die "WinRT requires MSVC"
+        define HAVE_WINRT
+        CFLAGS="$CFLAGS -MD"
+        LDFLAGS="$LDFLAGS -appcontainer"
+        if ! cpp_check "" "" "defined(_WIN32_WINNT) && _WIN32_WINNT >= 0x0603" ; then
+            die "_WIN32_WINNT must be defined to at least 0x0603 (Windows 8.1) for WinRT"
+        elif cpp_check "" "" "_WIN32_WINNT >= 0x0A00" ; then
+            # Universal Windows Platform (Windows 10)
+            LDFLAGS="$LDFLAGS -lWindowsApp"
+        fi
+        cli="no"
+        opencl="no"
+    fi
 fi
 
 log_msg "x264 configure script"
@@ -810,7 +806,7 @@ cc_check || die "No working C compiler found."
 
 if [ $compiler_style = GNU ]; then
     if cc_check '' -std=gnu99 'for( int i = 0; i < 9; i++ );' ; then
-        CFLAGS="$CFLAGS -std=gnu99"
+        CFLAGS="$CFLAGS -std=gnu99 -D_POSIX_C_SOURCE=200112L -D_GNU_SOURCE"
     elif cc_check '' -std=c99 'for( int i = 0; i < 9; i++ );' ; then
         CFLAGS="$CFLAGS -std=c99 -D_POSIX_C_SOURCE=200112L -D_BSD_SOURCE"
     elif ! cc_check '' '' 'for( int i = 0; i < 9; i++ );' ; then
@@ -822,6 +818,29 @@ if [ $shared = yes -a \( $ARCH = "X86_64" -o $ARCH = "PPC" -o $ARCH = "ALPHA" -o
     pic="yes"
 fi
 
+if [ $compiler = GNU -a \( $ARCH = X86 -o $ARCH = X86_64 \) ] ; then
+    if cc_check '' -mpreferred-stack-boundary=5 ; then
+        CFLAGS="$CFLAGS -mpreferred-stack-boundary=5"
+        stack_alignment=32
+    elif [ $stack_alignment -lt 16 ] && cc_check '' -mpreferred-stack-boundary=4 ; then
+        CFLAGS="$CFLAGS -mpreferred-stack-boundary=4"
+        stack_alignment=16
+    fi
+elif [ $compiler = ICC -a $ARCH = X86 ]; then
+    # icc on linux has various degrees of mod16 stack support
+    if [ $SYS = LINUX ]; then
+        # >= 12 defaults to a mod16 stack
+        if cpp_check "" "" "__INTEL_COMPILER >= 1200" ; then
+            stack_alignment=16
+        # 11 <= x < 12 is capable of keeping a mod16 stack, but defaults to not doing so.
+        elif cpp_check "" "" "__INTEL_COMPILER >= 1100" ; then
+            CFLAGS="$CFLAGS -falign-stack=assume-16-byte"
+            stack_alignment=16
+        fi
+        # < 11 is completely incapable of keeping a mod16 stack
+    fi
+fi
+
 if [ $asm = auto -a \( $ARCH = X86 -o $ARCH = X86_64 \) ] ; then
     if ! as_check "vpmovzxwd ymm0, xmm0" ; then
         VER=`($AS --version || echo no assembler) 2>/dev/null | head -n 1`
@@ -833,10 +852,6 @@ if [ $asm = auto -a \( $ARCH = X86 -o $ARCH = X86_64 \) ] ; then
     cc_check '' '' '__asm__("pabsw %xmm0, %xmm0");' && define HAVE_X86_INLINE_ASM
     ASFLAGS="$ASFLAGS -Worphan-labels"
     define HAVE_MMX
-    if [ $compiler = GNU ] && cc_check '' -mpreferred-stack-boundary=5 ; then
-        CFLAGS="$CFLAGS -mpreferred-stack-boundary=5"
-        stack_alignment=32
-    fi
 fi
 
 if [ $asm = auto -a $ARCH = ARM ] ; then
@@ -918,11 +933,25 @@ fi
 
 # autodetect options that weren't forced nor disabled
 
-# pthread-win32 is lgpl, prevent its use if --disable-gpl is specified and targeting windows
-[ "$SYS" = "WINDOWS" -a "$gpl" = "no" -a "$thread" = "auto" ] && thread="win32"
-
 libpthread=""
-if [ "$thread" = "auto" ]; then
+if [ "$SYS" = "WINDOWS" -a "$thread" = "posix" ] ; then
+    if [ "$gpl" = "no" ] ; then
+        echo "Warning: pthread-win32 is LGPL and is therefore not supported with --disable-gpl"
+        thread="no"
+    elif cc_check pthread.h -lpthread "pthread_create(0,0,0,0);" ; then
+        libpthread="-lpthread"
+    elif cc_check pthread.h -lpthreadGC2 "pthread_create(0,0,0,0);" ; then
+        libpthread="-lpthreadGC2"
+    elif cc_check pthread.h "-lpthreadGC2 -lwsock32 -DPTW32_STATIC_LIB" "pthread_create(0,0,0,0);" ; then
+        libpthread="-lpthreadGC2 -lwsock32"
+        define PTW32_STATIC_LIB
+    elif cc_check pthread.h "-lpthreadGC2 -lws2_32 -DPTW32_STATIC_LIB" "pthread_create(0,0,0,0);" ; then
+        libpthread="-lpthreadGC2 -lws2_32"
+        define PTW32_STATIC_LIB
+    else
+        thread="no"
+    fi
+elif [ "$thread" != "no" ] ; then
     thread="no"
     case $SYS in
         BEOS)
@@ -930,24 +959,8 @@ if [ "$thread" = "auto" ]; then
             define HAVE_BEOSTHREAD
             ;;
         WINDOWS)
-            if cc_check pthread.h -lpthread "pthread_create(0,0,0,0);" ; then
-                thread="posix"
-                libpthread="-lpthread"
-            elif cc_check pthread.h -lpthreadGC2 "pthread_create(0,0,0,0);" ; then
-                thread="posix"
-                libpthread="-lpthreadGC2"
-            elif cc_check pthread.h "-lpthreadGC2 -lwsock32 -DPTW32_STATIC_LIB" "pthread_create(0,0,0,0);" ; then
-                thread="posix"
-                libpthread="-lpthreadGC2 -lwsock32"
-                define PTW32_STATIC_LIB
-            elif cc_check pthread.h "-lpthreadGC2 -lws2_32 -DPTW32_STATIC_LIB" "pthread_create(0,0,0,0);" ; then
-                thread="posix"
-                libpthread="-lpthreadGC2 -lws2_32"
-                define PTW32_STATIC_LIB
-            else
-                # default to native threading if pthread-win32 is unavailable
-                thread="win32"
-            fi
+            thread="win32"
+            define HAVE_WIN32THREAD
             ;;
         QNX)
             cc_check pthread.h -lc "pthread_create(0,0,0,0);" && thread="posix" && libpthread="-lc"
@@ -969,24 +982,30 @@ if [ "$thread" = "posix" ]; then
         define HAVE_CPU_COUNT
     fi
 fi
-if [ "$thread" = "win32" ]; then
-    # cygwin does not support win32 threads
-    if [ "$SYS" = "WINDOWS" ]; then
-        define HAVE_WIN32THREAD
-    else
-        thread="no"
-    fi
-fi
 [ "$thread" != "no" ] && define HAVE_THREAD
 
 if cc_check "math.h" "-Werror" "return log2f(2);" ; then
     define HAVE_LOG2F
 fi
 
+if [ "$SYS" != "WINDOWS" ] && cpp_check "sys/mman.h unistd.h" "" "defined(MAP_PRIVATE)"; then
+    define HAVE_MMAP
+fi
+
 if [ "$SYS" = "LINUX" -a \( "$ARCH" = "X86" -o "$ARCH" = "X86_64" \) ] && cc_check "sys/mman.h" "" "MADV_HUGEPAGE;" ; then
     define HAVE_THP
 fi
 
+if [ "$cli" = "no" ] ; then
+    avs="no"
+    lavf="no"
+    ffms="no"
+    gpac="no"
+    lsmash="no"
+    mp4="no"
+    swscale="no"
+fi
+
 if [ "$swscale" = "auto" ] ; then
     swscale="no"
     if ${cross_prefix}pkg-config --exists libswscale 2>/dev/null; then
@@ -1027,7 +1046,7 @@ if [ "$lavf" = "auto" ] ; then
 fi
 
 if [ "$ffms" = "auto" ] ; then
-    ffms_major="2"; ffms_minor="16"; ffms_micro="2"; ffms_bump="0"
+    ffms_major="2"; ffms_minor="21"; ffms_micro="0"; ffms_bump="0"
     ffms="no"
 
     if ${cross_prefix}pkg-config --exists ffms2 2>/dev/null; then
@@ -1375,7 +1394,7 @@ if [ "$shared" = "yes" ]; then
             grep "extern.*x264" ${SRCPATH}/x264.h | sed -e "s/.*\(x264\w*\)\W.*/\1 DATA/;" >> x264.def
         else
             echo 'IMPLIBNAME=libx264.dll.a' >> config.mak
-            echo "SOFLAGS=-shared -Wl,--out-implib,\$(IMPLIBNAME) -Wl,--enable-auto-image-base $SOFLAGS" >> config.mak
+            echo "SOFLAGS=-shared -Wl,--out-implib,\$(IMPLIBNAME) $SOFLAGS" >> config.mak
         fi
     elif [ "$SYS" = "MACOSX" ]; then
         echo "SOSUFFIX=dylib" >> config.mak