[Git][ghc/ghc][wip/rts-rm-c99-check] autoconf/ghc-toolchain: remove obsolete C99 check
Cheng Shao pushed to branch wip/rts-rm-c99-check at Glasgow Haskell Compiler / GHC Commits: 3c9bcb37 by Cheng Shao at 2025-09-29T20:07:47+02:00 autoconf/ghc-toolchain: remove obsolete C99 check This patch removes obsolete c99 check from autoconf/ghc-toolchain. For all toolchain & platform combination we support, gnu11 or above is already supported without any -std flag required, and our RTS already required C11 quite a few years ago, so the C99 check is completely pointless. - - - - - 6 changed files: - configure.ac - distrib/configure.ac.in - m4/fp_cmm_cpp_cmd_with_args.m4 - − m4/fp_set_cflags_c99.m4 - utils/ghc-toolchain/src/GHC/Toolchain/Tools/Cc.hs - utils/ghc-toolchain/src/GHC/Toolchain/Tools/Cpp.hs Changes: ===================================== configure.ac ===================================== @@ -448,11 +448,6 @@ AC_SUBST([CmmCPPCmd]) AC_SUBST([CmmCPPArgs]) AC_SUBST([CmmCPPSupportsG0]) -FP_SET_CFLAGS_C99([CC],[CFLAGS],[CPPFLAGS]) -FP_SET_CFLAGS_C99([CC_STAGE0],[CONF_CC_OPTS_STAGE0],[CONF_CPP_OPTS_STAGE0]) -FP_SET_CFLAGS_C99([CC],[CONF_CC_OPTS_STAGE1],[CONF_CPP_OPTS_STAGE1]) -FP_SET_CFLAGS_C99([CC],[CONF_CC_OPTS_STAGE2],[CONF_CPP_OPTS_STAGE2]) - dnl ** Do we have a compatible emsdk version? dnl -------------------------------------------------------------- EMSDK_VERSION("3.1.20", "", "") ===================================== distrib/configure.ac.in ===================================== @@ -163,11 +163,6 @@ AC_SUBST([CmmCPPCmd]) AC_SUBST([CmmCPPArgs]) AC_SUBST([CmmCPPSupportsG0]) -FP_SET_CFLAGS_C99([CC],[CFLAGS],[CPPFLAGS]) -dnl FP_SET_CFLAGS_C99([CC_STAGE0],[CONF_CC_OPTS_STAGE0],[CONF_CPP_OPTS_STAGE0]) -FP_SET_CFLAGS_C99([CC],[CONF_CC_OPTS_STAGE1],[CONF_CPP_OPTS_STAGE1]) -FP_SET_CFLAGS_C99([CC],[CONF_CC_OPTS_STAGE2],[CONF_CPP_OPTS_STAGE2]) - dnl ** Which ld to use? dnl -------------------------------------------------------------- FIND_LD([$target],[GccUseLdOpt]) ===================================== m4/fp_cmm_cpp_cmd_with_args.m4 ===================================== @@ -56,27 +56,6 @@ else AC_MSG_RESULT([no]) fi -AC_MSG_CHECKING([the C-- preprocessor for C99 support]) -cat > conftest.c <<EOF -#include <stdio.h> -#if !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L -# error "Compiler does not advertise C99 conformance" -#endif -EOF -if "$CMM_CPP_CMD" $CMM_CPP_ARGS conftest.c -o conftest -g0 >/dev/null 2>&1; then - AC_MSG_RESULT([yes]) -else - # Try -std=gnu99 - if "$CMM_CPP_CMD" -std=gnu99 $CMM_CPP_ARGS conftest.c -o conftest -g0 >/dev/null 2>&1; then - $3="-std=gnu99 $$3" - AC_MSG_RESULT([needs -std=gnu99]) - else - AC_MSG_ERROR([C99-compatible compiler needed]) - fi -fi -rm -f conftest.c conftest.o conftest - - $2="$CMM_CPP_CMD" $3="$$3 $CMM_CPP_ARGS" @@ -85,4 +64,3 @@ unset CMM_CPP_CMD unset CMM_CPP_ARGS ]) - ===================================== m4/fp_set_cflags_c99.m4 deleted ===================================== @@ -1,38 +0,0 @@ -# FP_SET_CFLAGS_C99 -# ---------------------------------- -# figure out which CFLAGS are needed to place the compiler into C99 mode -# $1 is name of CC variable (unmodified) -# $2 is name of CC flags variable (augmented if needed) -# $3 is name of CPP flags variable (augmented if needed) -AC_DEFUN([FP_SET_CFLAGS_C99], -[ - dnl save current state of AC_PROG_CC_C99 - FP_COPY_SHELLVAR([CC],[fp_save_CC]) - FP_COPY_SHELLVAR([CFLAGS],[fp_save_CFLAGS]) - FP_COPY_SHELLVAR([CPPFLAGS],[fp_save_CPPFLAGS]) - FP_COPY_SHELLVAR([ac_cv_prog_cc_c99],[fp_save_cc_c99]) - dnl set local state - CC="$$1" - CFLAGS="$$2" - CPPFLAGS="$$3" - unset ac_cv_prog_cc_c99 - dnl perform detection - AC_PROG_CC_C99 - fp_cc_c99="$ac_cv_prog_cc_c99" - case "x$ac_cv_prog_cc_c99" in - x) ;; # noop - xno) AC_MSG_ERROR([C99-compatible compiler needed]) ;; - *) $2="$$2 $ac_cv_prog_cc_c99" - $3="$$3 $ac_cv_prog_cc_c99" - ;; - esac - dnl restore saved state - FP_COPY_SHELLVAR([fp_save_CC],[CC]) - FP_COPY_SHELLVAR([fp_save_CFLAGS],[CFLAGS]) - FP_COPY_SHELLVAR([fp_save_CPPFLAGS],[CPPFLAGS]) - FP_COPY_SHELLVAR([fp_save_cc_c99],[ac_cv_prog_cc_c99]) - dnl cleanup - unset fp_save_CC - unset fp_save_CFLAGS - unset fp_save_cc_c99 -]) ===================================== utils/ghc-toolchain/src/GHC/Toolchain/Tools/Cc.hs ===================================== @@ -11,7 +11,6 @@ module GHC.Toolchain.Tools.Cc , compileC , compileAsm , addPlatformDepCcFlags - , checkC99Support ) where import Control.Monad @@ -51,12 +50,8 @@ findCc archOs llvmTarget progOpt = do cc1 <- ignoreUnusedArgs cc0 cc2 <- ccSupportsTarget archOs llvmTarget cc1 checking "whether Cc works" $ checkCcWorks cc2 - cc3 <- oneOf "cc doesn't support C99" $ map checkC99Support - [ cc2 - , cc2 & _ccFlags %++ "-std=gnu99" - ] - checkCcSupportsExtraViaCFlags cc3 - return cc3 + checkCcSupportsExtraViaCFlags cc2 + return cc2 checkCcWorks :: Cc -> M () checkCcWorks cc = withTempDir $ \dir -> do @@ -88,17 +83,6 @@ ccSupportsTarget archOs target cc = checking "whether Cc supports --target" $ supportsTarget archOs _ccProgram checkCcWorks target cc -checkC99Support :: Cc -> M Cc -checkC99Support cc = checking "for C99 support" $ withTempDir $ \dir -> do - let test_o = dir </> "test.o" - compileC cc test_o $ unlines - [ "#include <stdio.h>" - , "#if !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L" - , "# error \"Compiler does not advertise C99 conformance\"" - , "#endif" - ] - return cc - checkCcSupportsExtraViaCFlags :: Cc -> M () checkCcSupportsExtraViaCFlags cc = checking "whether cc supports extra via-c flags" $ withTempDir $ \dir -> do let test_o = dir </> "test.o" ===================================== utils/ghc-toolchain/src/GHC/Toolchain/Tools/Cpp.hs ===================================== @@ -19,7 +19,7 @@ import GHC.Toolchain.Prelude import GHC.Toolchain.Program import GHC.Toolchain.Tools.Cc -import GHC.Toolchain.Utils (withTempDir, oneOf, expectFileExists) +import GHC.Toolchain.Utils (withTempDir, expectFileExists) newtype Cpp = Cpp { cppProgram :: Program } @@ -160,13 +160,7 @@ findJsCpp progOpt cc = checking "for JavaScript C preprocessor" $ do findCmmCpp :: ProgOpt -> Cc -> M CmmCpp findCmmCpp progOpt cc = checking "for a Cmm preprocessor" $ do -- Use the specified CPP or try to use the c compiler - foundCppProg <- findProgram "Cmm preprocessor" progOpt [] <|> pure (programFromOpt progOpt (prgPath $ ccProgram cc) []) - -- Check whether the C preprocessor needs -std=gnu99 (only very old toolchains need this) - Cc cpp <- oneOf "cc doesn't support C99" $ map checkC99Support - [ Cc foundCppProg - , Cc (foundCppProg & _prgFlags %++ "-std=gnu99") - ] - + cpp <- findProgram "Cmm preprocessor" progOpt [] <|> pure (programFromOpt progOpt (prgPath $ ccProgram cc) []) cmmCppSupportsG0 <- withTempDir $ \dir -> do let conftest = dir </> "conftest.c" writeFile conftest "int main(void) {}" @@ -181,14 +175,9 @@ findCmmCpp progOpt cc = checking "for a Cmm preprocessor" $ do findCpp :: ProgOpt -> Cc -> M Cpp findCpp progOpt cc = checking "for C preprocessor" $ do -- Use the specified CPP or try to use the c compiler - foundCppProg <- findProgram "C preprocessor" progOpt [] <|> pure (programFromOpt progOpt (prgPath $ ccProgram cc) []) - -- Check whether the C preprocessor needs -std=gnu99 (only very old toolchains need this) - Cc cpp2 <- oneOf "cc doesn't support C99" $ map checkC99Support - [ Cc foundCppProg - , Cc (foundCppProg & _prgFlags %++ "-std=gnu99") - ] + cpp <- findProgram "C preprocessor" progOpt [] <|> pure (programFromOpt progOpt (prgPath $ ccProgram cc) []) -- Always add the -E flag to the CPP, regardless of the user options - let cppProgram = addFlagIfNew "-E" cpp2 + let cppProgram = addFlagIfNew "-E" cpp return Cpp{cppProgram} -------------------------------------------------------------------------------- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/3c9bcb378efe476fed312fe4e12c6a51... -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/3c9bcb378efe476fed312fe4e12c6a51... You're receiving this email because of your account on gitlab.haskell.org.
participants (1)
-
Cheng Shao (@TerrorJack)