Require compilers to support C11.

It should be available in all relevant modern compilers and will allow
us to use features like anonymous unions.

Note that stdatomic.h is still emulated on MSVC, as current versions
require the /experimental:c11atomics, and do not support
ATOMIC_VAR_INIT() anyway.
release/7.0
Anton Khirnov 1 year ago
parent 78812cd147
commit 75697836b1
  1. 3
      Changelog
  2. 19
      configure
  3. 10
      doc/developer.texi

@ -24,6 +24,9 @@ version <next>:
- ffmpeg CLI options may now be used as -/opt <path>, which is equivalent - ffmpeg CLI options may now be used as -/opt <path>, which is equivalent
to -opt <contents of file <path>> to -opt <contents of file <path>>
- showinfo bitstream filter - showinfo bitstream filter
- a C11-compliant compiler is now required; note that this requirement
will be bumped to C17 in the near future, so consider updating your
build environment if it lacks C17 support
version 6.1: version 6.1:
- libaribcaption decoder - libaribcaption decoder

19
configure vendored

@ -4705,7 +4705,7 @@ msvc_common_flags(){
# generic catch all at the bottom will print the original flag. # generic catch all at the bottom will print the original flag.
-Wall) ;; -Wall) ;;
-Wextra) ;; -Wextra) ;;
-std=c*) ;; -std=c*) echo /std:${flag#-std=};;
# Common flags # Common flags
-fomit-frame-pointer) ;; -fomit-frame-pointer) ;;
-g) echo -Z7 ;; -g) echo -Z7 ;;
@ -4750,7 +4750,7 @@ icl_flags(){
# Despite what Intel's documentation says -Wall, which is supported # Despite what Intel's documentation says -Wall, which is supported
# on Windows, does enable remarks so disable them here. # on Windows, does enable remarks so disable them here.
-Wall) echo $flag -Qdiag-disable:remark ;; -Wall) echo $flag -Qdiag-disable:remark ;;
-std=c99) echo -Qstd=c99 ;; -std=c11) echo -Qstd=c11 ;;
-flto*) echo -ipo ;; -flto*) echo -ipo ;;
esac esac
done done
@ -4798,7 +4798,7 @@ suncc_flags(){
athlon*) echo -xarch=pentium_proa ;; athlon*) echo -xarch=pentium_proa ;;
esac esac
;; ;;
-std=c99) echo -xc99 ;; -std=c11) echo -xc11 ;;
-fomit-frame-pointer) echo -xregs=frameptr ;; -fomit-frame-pointer) echo -xregs=frameptr ;;
-fPIC) echo -KPIC -xcode=pic32 ;; -fPIC) echo -KPIC -xcode=pic32 ;;
-W*,*) echo $flag ;; -W*,*) echo $flag ;;
@ -4887,8 +4887,8 @@ probe_cc(){
_type=suncc _type=suncc
_ident=$($_cc -V 2>&1 | head -n1 | cut -d' ' -f 2-) _ident=$($_cc -V 2>&1 | head -n1 | cut -d' ' -f 2-)
_DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)' _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
_DEPFLAGS='-xM1 -xc99' _DEPFLAGS='-xM1 -xc11'
_ldflags='-std=c99' _ldflags='-std=c11'
_cflags_speed='-O5' _cflags_speed='-O5'
_cflags_size='-O5 -xspace' _cflags_size='-O5 -xspace'
_flags_filter=suncc_flags _flags_filter=suncc_flags
@ -5517,21 +5517,20 @@ if test "$?" != 0; then
die "C compiler test failed." die "C compiler test failed."
fi fi
add_cppflags -D_ISOC99_SOURCE add_cppflags -D_ISOC11_SOURCE
add_cxxflags -D__STDC_CONSTANT_MACROS add_cxxflags -D__STDC_CONSTANT_MACROS
check_cxxflags -std=c++11 || check_cxxflags -std=c++0x check_cxxflags -std=c++11 || check_cxxflags -std=c++0x
# some compilers silently accept -std=c11, so we also need to check that the # some compilers silently accept -std=c11, so we also need to check that the
# version macro is defined properly # version macro is defined properly
test_cflags_cc -std=c11 ctype.h "__STDC_VERSION__ >= 201112L" && test_cflags_cc -std=c11 ctype.h "__STDC_VERSION__ >= 201112L" &&
add_cflags -std=c11 || add_cflags -std=c11 || die "Compiler lacks C11 support"
check_cflags -std=c99
check_cppflags -D_FILE_OFFSET_BITS=64 check_cppflags -D_FILE_OFFSET_BITS=64
check_cppflags -D_LARGEFILE_SOURCE check_cppflags -D_LARGEFILE_SOURCE
add_host_cppflags -D_ISOC99_SOURCE add_host_cppflags -D_ISOC11_SOURCE
check_host_cflags -std=c99 check_host_cflags -std=c11
check_host_cflags -Wall check_host_cflags -Wall
check_host_cflags $host_cflags_speed check_host_cflags $host_cflags_speed

@ -56,14 +56,8 @@ and should try to fix issues their commit causes.
@section Language @section Language
FFmpeg is mainly programmed in the ISO C99 language, extended with: FFmpeg is mainly programmed in the ISO C11 language, except for the public
@itemize @bullet headers which must stay C99 compatible.
@item
Atomic operations from C11 @file{stdatomic.h}. They are emulated on
architectures/compilers that do not support them, so all FFmpeg-internal code
may use atomics without any extra checks. However, @file{stdatomic.h} must not
be included in public headers, so they stay C99-compatible.
@end itemize
Compiler-specific extensions may be used with good reason, but must not be Compiler-specific extensions may be used with good reason, but must not be
depended on, i.e. the code must still compile and work with compilers lacking depended on, i.e. the code must still compile and work with compilers lacking

Loading…
Cancel
Save