Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -150,6 +150,12 @@ set(BUSTUB_THIRD_PARTY_INCLUDE_DIR

include_directories(${BUSTUB_SRC_INCLUDE_DIR} ${BUSTUB_TEST_INCLUDE_DIR} ${BUSTUB_THIRD_PARTY_INCLUDE_DIR})
include_directories(BEFORE src) # This is needed for gtest.
# This ensures that the bundled headers are searched before system paths
if (EXISTS "/usr/local/include/gtest" OR EXISTS "/opt/homebrew/include/gtest")
message(STATUS "System googletest detected, prioritizing bundled version")
include_directories(BEFORE ${PROJECT_SOURCE_DIR}/third_party/googletest/googletest/include)
include_directories(BEFORE ${PROJECT_SOURCE_DIR}/third_party/googletest/googlemock/include)
endif()

function(disable_target_warnings NAME)
target_compile_options(${NAME} PRIVATE "-w")
Expand Down
6 changes: 6 additions & 0 deletions third_party/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,12 @@ add_subdirectory(murmur3)
add_subdirectory(libpg_query)

set(gtest_force_shared_crt ON CACHE BOOL "" FORCE) # don't override our compiler/linker options when building gtest
if (EXISTS "/usr/local/include/gtest" OR EXISTS "/opt/homebrew/include/gtest")
message(STATUS "System googletest detected, prioritizing bundled version")
# Prevent system googletest headers from being used - add our include paths with higher priority
include_directories(BEFORE ${PROJECT_SOURCE_DIR}/third_party/googletest/googletest/include)
include_directories(BEFORE ${PROJECT_SOURCE_DIR}/third_party/googletest/googlemock/include)
endif()
add_subdirectory(googletest)

add_subdirectory(fmt)
Expand Down
23 changes: 17 additions & 6 deletions third_party/googletest/googlemock/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -102,12 +102,23 @@ else()
endif()

string(REPLACE ";" "$<SEMICOLON>" dirs "${gmock_build_include_dirs}")
target_include_directories(gmock SYSTEM INTERFACE
"$<BUILD_INTERFACE:${dirs}>"
"$<INSTALL_INTERFACE:$<INSTALL_PREFIX>/${CMAKE_INSTALL_INCLUDEDIR}>")
target_include_directories(gmock_main SYSTEM INTERFACE
"$<BUILD_INTERFACE:${dirs}>"
"$<INSTALL_INTERFACE:$<INSTALL_PREFIX>/${CMAKE_INSTALL_INCLUDEDIR}>")
if (EXISTS "/usr/local/include/gtest" OR EXISTS "/opt/homebrew/include/gtest")
message(STATUS "System googletest detected, prioritizing bundled version")
# Don't add SYSTEM as CMake uses -isystem compiler flag which will override the bundled headers & use system specific headers
target_include_directories(gmock INTERFACE
"$<BUILD_INTERFACE:${dirs}>"
"$<INSTALL_INTERFACE:$<INSTALL_PREFIX>/${CMAKE_INSTALL_INCLUDEDIR}>")
target_include_directories(gmock_main INTERFACE
"$<BUILD_INTERFACE:${dirs}>"
"$<INSTALL_INTERFACE:$<INSTALL_PREFIX>/${CMAKE_INSTALL_INCLUDEDIR}>")
else()
target_include_directories(gmock SYSTEM INTERFACE
"$<BUILD_INTERFACE:${dirs}>"
"$<INSTALL_INTERFACE:$<INSTALL_PREFIX>/${CMAKE_INSTALL_INCLUDEDIR}>")
target_include_directories(gmock_main SYSTEM INTERFACE
"$<BUILD_INTERFACE:${dirs}>"
"$<INSTALL_INTERFACE:$<INSTALL_PREFIX>/${CMAKE_INSTALL_INCLUDEDIR}>")
endif()

########################################################################
#
Expand Down
23 changes: 17 additions & 6 deletions third_party/googletest/googletest/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -141,12 +141,23 @@ endif()
cxx_library(gtest_main "${cxx_strict}" src/gtest_main.cc)
set_target_properties(gtest_main PROPERTIES VERSION ${GOOGLETEST_VERSION})
string(REPLACE ";" "$<SEMICOLON>" dirs "${gtest_build_include_dirs}")
target_include_directories(gtest SYSTEM INTERFACE
"$<BUILD_INTERFACE:${dirs}>"
"$<INSTALL_INTERFACE:$<INSTALL_PREFIX>/${CMAKE_INSTALL_INCLUDEDIR}>")
target_include_directories(gtest_main SYSTEM INTERFACE
"$<BUILD_INTERFACE:${dirs}>"
"$<INSTALL_INTERFACE:$<INSTALL_PREFIX>/${CMAKE_INSTALL_INCLUDEDIR}>")
if (EXISTS "/usr/local/include/gtest" OR EXISTS "/opt/homebrew/include/gtest")
message(STATUS "System googletest detected, prioritizing bundled version")
# Don't add SYSTEM as CMake uses -isystem compiler flag which will override the bundled headers & use system specific headers
target_include_directories(gtest INTERFACE
"$<BUILD_INTERFACE:${dirs}>"
"$<INSTALL_INTERFACE:$<INSTALL_PREFIX>/${CMAKE_INSTALL_INCLUDEDIR}>")
target_include_directories(gtest_main INTERFACE
"$<BUILD_INTERFACE:${dirs}>"
"$<INSTALL_INTERFACE:$<INSTALL_PREFIX>/${CMAKE_INSTALL_INCLUDEDIR}>")
else()
target_include_directories(gtest SYSTEM INTERFACE
"$<BUILD_INTERFACE:${dirs}>"
"$<INSTALL_INTERFACE:$<INSTALL_PREFIX>/${CMAKE_INSTALL_INCLUDEDIR}>")
target_include_directories(gtest_main SYSTEM INTERFACE
"$<BUILD_INTERFACE:${dirs}>"
"$<INSTALL_INTERFACE:$<INSTALL_PREFIX>/${CMAKE_INSTALL_INCLUDEDIR}>")
endif()
if(CMAKE_SYSTEM_NAME MATCHES "QNX")
target_link_libraries(gtest PUBLIC regex)
endif()
Expand Down