From 3b068f78ac962b866e947a0323777639e0f9e639 Mon Sep 17 00:00:00 2001 From: Sergey Avseyev Date: Fri, 27 Mar 2026 08:42:58 -0700 Subject: [PATCH] PCBC-1053: Fix CC compiler flags bleeding into CMAKE_C_COMPILER on macOS phpize on macOS can set CC to a compound string like 'cc -std=gnu23', concatenating the standard flag directly onto the compiler path. CMake rejects this as CMAKE_C_COMPILER because it is not a bare path. Apply the same flag-stripping logic that already existed for CXX to CC as well: detect when CC contains flags, extract the bare path into CC_PATH, substitute it back, and pass CC_PATH directly to -DCMAKE_C_COMPILER in Makefile.frag instead of relying on the GNU make function. --- Makefile.frag | 4 ++-- config.m4 | 17 +++++++++++++++++ 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/Makefile.frag b/Makefile.frag index f6d277ee..0e697bc2 100644 --- a/Makefile.frag +++ b/Makefile.frag @@ -3,8 +3,8 @@ $(COUCHBASE_CMAKE_BUILD_DIRECTORY)/CMakeCache.txt: $(COUCHBASE_CMAKE_SOURCE_DIRE -S $(COUCHBASE_CMAKE_SOURCE_DIRECTORY) \ -B $(COUCHBASE_CMAKE_BUILD_DIRECTORY) \ -DCMAKE_BUILD_TYPE=$(if $(COUCHBASE_CMAKE_BUILD_TYPE),$(COUCHBASE_CMAKE_BUILD_TYPE),$(COUCHBASE_DEFAULT_CMAKE_BUILD_TYPE)) \ - -DCMAKE_C_COMPILER="$(CC)" \ - -DCMAKE_CXX_COMPILER="$(CXX)" \ + -DCMAKE_C_COMPILER="$(CC_PATH)" \ + -DCMAKE_CXX_COMPILER="$(CXX_PATH)" \ -DCMAKE_C_FLAGS="$(COMMON_FLAGS)" \ -DCMAKE_CXX_FLAGS="$(CXXFLAGS_CLEAN) $(EXTRA_CXXFLAGS)" \ -DCOUCHBASE_ABI_VERSION="$(CB_ABI_VERSION)" \ diff --git a/config.m4 b/config.m4 index e0184eca..f0ca8b91 100644 --- a/config.m4 +++ b/config.m4 @@ -25,11 +25,26 @@ if test "$PHP_COUCHBASE" != "no"; then fi AC_MSG_NOTICE([Detected C++ compiler: $CXX_PATH]) + # Similarly, CC may have flags concatenated into it (e.g. "cc -std=gnu23"). + # Strip them so CMake receives a bare compiler path in CMAKE_C_COMPILER. + AC_CHECK_FILE([$CC], [CC_PATH=$CC], [CC_PATH=no]) + if test "$CC_PATH" = "no"; then + AC_MSG_NOTICE([PHP suggested C compiler, which includes flags "$CC", trying to strip them]) + CC_PATH=$(echo "$CC" | cut -d' ' -f1) + AC_CHECK_FILE([$CC_PATH], [], [CC_PATH=no]) + if test "$CC_PATH" == "no"; then + AC_MSG_NOTICE([Unable to locate path to C compiler, falling back to "cc"]) + AC_SUBST([CC_PATH], [cc]) + fi + fi + AC_MSG_NOTICE([Detected C compiler: $CC_PATH]) + AC_PATH_PROG(CMAKE, cmake, no) if ! test -x "${CMAKE}"; then AC_MSG_ERROR(Please install cmake to build couchbase extension) fi + CC="${CC_PATH}" CXX="${CXX_PATH}" CXXFLAGS="${CXXFLAGS} -std=c++17" COUCHBASE_CMAKE_SOURCE_DIRECTORY="$srcdir/src" @@ -41,6 +56,8 @@ if test "$PHP_COUCHBASE" != "no"; then fi PHP_SUBST([CMAKE]) + PHP_SUBST([CC_PATH]) + PHP_SUBST([CXX_PATH]) PHP_SUBST([COUCHBASE_CMAKE_SOURCE_DIRECTORY]) PHP_SUBST([COUCHBASE_CMAKE_BUILD_DIRECTORY]) PHP_SUBST([COUCHBASE_DEFAULT_CMAKE_BUILD_TYPE])