summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnton Khirnov <anton@khirnov.net>2024-02-03 17:44:43 +0100
committerAnton Khirnov <anton@khirnov.net>2024-02-09 16:33:07 +0100
commitfd5f2b8ae811d147c90ea4ef02b4f69c1d3540a3 (patch)
tree71585df4b5e61ede5bad7ed385b825872eec6c50
parent7c873fb2985f94da61eb7b41c90176fa471e6163 (diff)
Require compilers to support C11.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.
-rw-r--r--Changelog3
-rwxr-xr-xconfigure19
-rw-r--r--doc/developer.texi10
3 files changed, 14 insertions, 18 deletions
diff --git a/Changelog b/Changelog
index c5fb21d198..610ee61dd6 100644
--- a/Changelog
+++ b/Changelog
@@ -24,6 +24,9 @@ version <next>:
- ffmpeg CLI options may now be used as -/opt <path>, which is equivalent
to -opt <contents of file <path>>
- 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:
- libaribcaption decoder
diff --git a/configure b/configure
index f72533b7d2..d66694e83e 100755
--- a/configure
+++ b/configure
@@ -4705,7 +4705,7 @@ msvc_common_flags(){
# generic catch all at the bottom will print the original flag.
-Wall) ;;
-Wextra) ;;
- -std=c*) ;;
+ -std=c*) echo /std:${flag#-std=};;
# Common flags
-fomit-frame-pointer) ;;
-g) echo -Z7 ;;
@@ -4750,7 +4750,7 @@ icl_flags(){
# Despite what Intel's documentation says -Wall, which is supported
# on Windows, does enable remarks so disable them here.
-Wall) echo $flag -Qdiag-disable:remark ;;
- -std=c99) echo -Qstd=c99 ;;
+ -std=c11) echo -Qstd=c11 ;;
-flto*) echo -ipo ;;
esac
done
@@ -4798,7 +4798,7 @@ suncc_flags(){
athlon*) echo -xarch=pentium_proa ;;
esac
;;
- -std=c99) echo -xc99 ;;
+ -std=c11) echo -xc11 ;;
-fomit-frame-pointer) echo -xregs=frameptr ;;
-fPIC) echo -KPIC -xcode=pic32 ;;
-W*,*) echo $flag ;;
@@ -4887,8 +4887,8 @@ probe_cc(){
_type=suncc
_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)'
- _DEPFLAGS='-xM1 -xc99'
- _ldflags='-std=c99'
+ _DEPFLAGS='-xM1 -xc11'
+ _ldflags='-std=c11'
_cflags_speed='-O5'
_cflags_size='-O5 -xspace'
_flags_filter=suncc_flags
@@ -5517,21 +5517,20 @@ if test "$?" != 0; then
die "C compiler test failed."
fi
-add_cppflags -D_ISOC99_SOURCE
+add_cppflags -D_ISOC11_SOURCE
add_cxxflags -D__STDC_CONSTANT_MACROS
check_cxxflags -std=c++11 || check_cxxflags -std=c++0x
# some compilers silently accept -std=c11, so we also need to check that the
# version macro is defined properly
test_cflags_cc -std=c11 ctype.h "__STDC_VERSION__ >= 201112L" &&
- add_cflags -std=c11 ||
- check_cflags -std=c99
+ add_cflags -std=c11 || die "Compiler lacks C11 support"
check_cppflags -D_FILE_OFFSET_BITS=64
check_cppflags -D_LARGEFILE_SOURCE
-add_host_cppflags -D_ISOC99_SOURCE
-check_host_cflags -std=c99
+add_host_cppflags -D_ISOC11_SOURCE
+check_host_cflags -std=c11
check_host_cflags -Wall
check_host_cflags $host_cflags_speed
diff --git a/doc/developer.texi b/doc/developer.texi
index eed0ee4915..c86bb5820c 100644
--- a/doc/developer.texi
+++ b/doc/developer.texi
@@ -56,14 +56,8 @@ and should try to fix issues their commit causes.
@section Language
-FFmpeg is mainly programmed in the ISO C99 language, extended with:
-@itemize @bullet
-@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
+FFmpeg is mainly programmed in the ISO C11 language, except for the public
+headers which must stay C99 compatible.
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