From: Johannes Schindelin <Johannes.Schindelin@gmx.de>
To: "brian m. carlson" <sandals@crustytoothpaste.net>
Cc: git@vger.kernel.org,
"Carlo Marcelo Arenas Belón" <carenas@gmail.com>,
"Ævar Arnfjörð Bjarmason" <avarab@gmail.com>,
"Jeff King" <peff@peff.net>, "Junio C Hamano" <gitster@pobox.com>
Subject: Re: [PATCH 1/1] git-compat-util: add a test balloon for C99 support
Date: Tue, 16 Nov 2021 11:30:08 +0100 (CET) [thread overview]
Message-ID: <nycvar.QRO.7.76.6.2111161129120.21127@tvgsbejvaqbjf.bet> (raw)
In-Reply-To: <20211114211622.1465981-2-sandals@crustytoothpaste.net>
Hi brian,
On Sun, 14 Nov 2021, brian m. carlson wrote:
> The C99 standard was released in January 1999, now 22 years ago. It
> provides a variety of useful features, including variadic arguments for
> macros, declarations after statements, variable length arrays, and a
> wide variety of other useful features, many of which we already use.
>
> We'd like to take advantage of these features, but we want to be
> cautious. As far as we know, all major compilers now support C99 or a
> later C standard, such as C11 or C17. POSIX has required C99 support as
> a requirement for the 2001 revision, so we can safely assume any POSIX
> system which we are interested in supporting has C99.
>
> Even MSVC, long a holdout against modern C, now supports both C11 and
> C17 with an appropriate update. Moreover, even if people are using an
> older version of MSVC on these systems, they will generally need some
> implementation of the standard Unix utilities for the testsuite, and GNU
> coreutils, the most common option, has required C99 since 2009.
> Therefore, we can safely assume that a suitable version of GCC or clang
> is available to users even if their version of MSVC is not sufficiently
> capable.
>
> Let's add a test balloon to git-compat-util.h to see if anyone is using
> an older compiler. We'll add a comment telling people how to enable
> this functionality on GCC and Clang, even though modern versions of both
> will automatically do the right thing, and ask people still experiencing
> a problem to report that to us on the list.
>
> Note that C89 compilers don't provide the __STDC_VERSION__ macro, so we
> use a well-known hack of using "- 0". On compilers with this macro, it
> doesn't change the value, and on C89 compilers, the macro will be
> replaced with nothing, and our value will be 0.
>
> Sparse is also updated with a reference to the gnu99 standard, without
> which it defaults to C89.
>
> Update the cmake configuration to require C11 for MSVC. We do this
> because this will make MSVC to use C11, since it does not explicitly
> support C99. We do this with a compiler options because setting the
> C_STANDARD option does not work in our CI on MSVC and at the moment, we
> don't want to require C11 for Unix compilers.
I am all in favor of this patch!
Thank you,
Dscho
>
> Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
> ---
> Makefile | 4 ++--
> contrib/buildsystems/CMakeLists.txt | 3 +--
> git-compat-util.h | 12 ++++++++++++
> 3 files changed, 15 insertions(+), 4 deletions(-)
>
> diff --git a/Makefile b/Makefile
> index 12be39ac49..22d9e67542 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -1204,7 +1204,7 @@ endif
> # Set CFLAGS, LDFLAGS and other *FLAGS variables. These might be
> # tweaked by config.* below as well as the command-line, both of
> # which'll override these defaults.
> -CFLAGS = -g -O2 -Wall
> +CFLAGS = -g -O2 -Wall -std=gnu99
> LDFLAGS =
> CC_LD_DYNPATH = -Wl,-rpath,
> BASIC_CFLAGS = -I.
> @@ -1215,7 +1215,7 @@ ARFLAGS = rcs
> PTHREAD_CFLAGS =
>
> # For the 'sparse' target
> -SPARSE_FLAGS ?=
> +SPARSE_FLAGS ?= -std=gnu99
> SP_EXTRA_FLAGS = -Wno-universal-initializer
>
> # For informing GIT-BUILD-OPTIONS of the SANITIZE=leak target
> diff --git a/contrib/buildsystems/CMakeLists.txt b/contrib/buildsystems/CMakeLists.txt
> index fd1399c440..91e8525fa9 100644
> --- a/contrib/buildsystems/CMakeLists.txt
> +++ b/contrib/buildsystems/CMakeLists.txt
> @@ -208,7 +208,7 @@ endif()
> if(CMAKE_C_COMPILER_ID STREQUAL "MSVC")
> set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CMAKE_BINARY_DIR})
> set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CMAKE_BINARY_DIR})
> - add_compile_options(/MP)
> + add_compile_options(/MP /std:c11)
> endif()
>
> #default behaviour
> @@ -600,7 +600,6 @@ endif()
> list(REMOVE_DUPLICATES excluded_progs)
> list(REMOVE_DUPLICATES PROGRAMS_BUILT)
>
> -
> foreach(p ${excluded_progs})
> list(APPEND EXCLUSION_PROGS --exclude-program ${p} )
> endforeach()
> diff --git a/git-compat-util.h b/git-compat-util.h
> index d70ce14286..6d995bdc0f 100644
> --- a/git-compat-util.h
> +++ b/git-compat-util.h
> @@ -1,6 +1,18 @@
> #ifndef GIT_COMPAT_UTIL_H
> #define GIT_COMPAT_UTIL_H
>
> +#if __STDC_VERSION__ - 0 < 199901L
> +/*
> + * Git is in a testing period for mandatory C99 support in the compiler. If
> + * your compiler is reasonably recent, you can try to enable C99 support (or,
> + * for MSVC, C11 support). If you encounter a problem and can't enable C99
> + * support with your compiler and don't have access to one with this support,
> + * such as GCC or Clang, you can remove this #if directive, but please report
> + * the details of your system to git@vger.kernel.org.
> + */
> +#error "Required C99 support is in a test phase. Please see git-compat-util.h for more details."
> +#endif
> +
> #ifdef USE_MSVC_CRTDBG
> /*
> * For these to work they must appear very early in each
>
next parent reply other threads:[~2021-11-16 10:30 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20211114211622.1465981-1-sandals@crustytoothpaste.net>
[not found] ` <20211114211622.1465981-2-sandals@crustytoothpaste.net>
2021-11-16 10:30 ` Johannes Schindelin [this message]
2021-11-17 8:29 ` [PATCH 1/1] git-compat-util: add a test balloon for C99 support Junio C Hamano
2021-11-22 11:44 ` Johannes Schindelin
2021-11-22 13:05 ` Ævar Arnfjörð Bjarmason
2021-11-22 17:27 ` Junio C Hamano
2021-11-22 17:52 ` Carlo Arenas
2021-11-22 18:58 ` Junio C Hamano
2021-11-22 20:52 ` Junio C Hamano
2021-11-22 22:03 ` [PATCH 1/1] git-compat-util: add a test balloon for C99 supporty Johannes Schindelin
2021-11-22 22:10 ` Junio C Hamano
2021-11-22 22:22 ` Carlo Arenas
2021-11-23 12:32 ` Johannes Schindelin
2021-11-23 20:17 ` Junio C Hamano
2021-11-24 15:10 ` brian m. carlson
2021-11-14 21:24 [PATCH 0/1] Add a test balloon for C99 brian m. carlson
2021-11-14 21:24 ` [PATCH 1/1] git-compat-util: add a test balloon for C99 support brian m. carlson
2021-11-15 1:14 ` Ævar Arnfjörð Bjarmason
2021-11-15 1:54 ` brian m. carlson
2021-11-15 3:16 ` Eric Sunshine
2021-11-16 1:53 ` brian m. carlson
2021-11-22 11:47 ` Johannes Schindelin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: http://vger.kernel.org/majordomo-info.html
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=nycvar.QRO.7.76.6.2111161129120.21127@tvgsbejvaqbjf.bet \
--to=johannes.schindelin@gmx.de \
--cc=avarab@gmail.com \
--cc=carenas@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=peff@peff.net \
--cc=sandals@crustytoothpaste.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://80x24.org/mirrors/git.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).