fix(cmake): support xcode generator

This commit is contained in:
Sergiu Deitsch 2023-10-08 17:27:58 +02:00
parent 4dbc26af72
commit b8a251c091
3 changed files with 34 additions and 39 deletions

View File

@ -15,7 +15,7 @@ jobs:
matrix: matrix:
std: [14, 17, 20, 23] std: [14, 17, 20, 23]
include: include:
- generator: Ninja - generator: Xcode
- build_type: Debug - build_type: Debug
steps: steps:
@ -34,6 +34,7 @@ jobs:
if: matrix.build_type == 'Debug' if: matrix.build_type == 'Debug'
run: | run: |
echo 'CXXFLAGS=--coverage' >> $GITHUB_ENV echo 'CXXFLAGS=--coverage' >> $GITHUB_ENV
echo 'LDFLAGS=--coverage' >> $GITHUB_ENV
- name: Configure - name: Configure
shell: bash shell: bash
@ -55,6 +56,7 @@ jobs:
- name: Test - name: Test
run: | run: |
ctest --test-dir build_${{matrix.build_type}} \ ctest --test-dir build_${{matrix.build_type}} \
--build-config ${{matrix.build_type}} \
--output-on-failure --output-on-failure
- name: Generate Coverage - name: Generate Coverage

View File

@ -489,9 +489,20 @@ add_library (glog_internal OBJECT
${GLOG_SRCS} ${GLOG_SRCS}
) )
target_compile_features (glog_internal PUBLIC $<TARGET_PROPERTY:glog,COMPILE_FEATURES>) target_compile_features (glog_internal PUBLIC $<TARGET_PROPERTY:glog,COMPILE_FEATURES>)
set_target_properties (glog_internal PROPERTIES DEFINE_SYMBOL GOOGLE_GLOG_IS_A_DLL)
# Some generators (such as Xcode) do not generate any output if the target does
# not reference at least one source file.
set (_glog_EMPTY_SOURCE ${glog_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/glog.cc)
add_custom_command (
OUTPUT ${_glog_EMPTY_SOURCE}
COMMAND ${CMAKE_COMMAND} -E touch ${_glog_EMPTY_SOURCE}
)
add_library (glog add_library (glog
$<TARGET_OBJECTS:glog_internal> $<TARGET_OBJECTS:glog_internal>
${_glog_EMPTY_SOURCE}
) )
target_compile_features (glog PUBLIC cxx_std_14) target_compile_features (glog PUBLIC cxx_std_14)
@ -613,38 +624,30 @@ if (NOT WITH_FUZZING STREQUAL "none")
endif (NOT WITH_FUZZING STREQUAL "none") endif (NOT WITH_FUZZING STREQUAL "none")
if (BUILD_TESTING) if (BUILD_TESTING)
add_library (glogtest STATIC add_library (glog_test INTERFACE)
$<TARGET_OBJECTS:glog_internal> target_link_libraries (glog_test INTERFACE $<TARGET_OBJECTS:glog_internal> $<TARGET_PROPERTY:glog,LINK_LIBRARIES>)
) target_compile_definitions (glog_test INTERFACE GLOG_STATIC_DEFINE $<TARGET_PROPERTY:glog,COMPILE_DEFINITIONS>)
target_include_directories (glog_test INTERFACE $<TARGET_PROPERTY:glog,INCLUDE_DIRECTORIES>)
target_include_directories (glogtest PUBLIC
$<TARGET_PROPERTY:glog,INCLUDE_DIRECTORIES>)
target_compile_definitions (glogtest PUBLIC
$<TARGET_PROPERTY:glog,COMPILE_DEFINITIONS> GLOG_STATIC_DEFINE)
target_link_libraries (glogtest PUBLIC
$<TARGET_PROPERTY:glog,LINK_LIBRARIES>)
set (_GLOG_TEST_LIBS glogtest)
if (HAVE_LIB_GTEST) if (HAVE_LIB_GTEST)
list (APPEND _GLOG_TEST_LIBS GTest::gtest) target_link_libraries (glog_test INTERFACE GTest::gtest)
endif (HAVE_LIB_GTEST) endif (HAVE_LIB_GTEST)
if (HAVE_LIB_GMOCK) if (HAVE_LIB_GMOCK)
list (APPEND _GLOG_TEST_LIBS GTest::gmock) target_link_libraries (glog_test INTERFACE GTest::gmock)
endif (HAVE_LIB_GMOCK) endif (HAVE_LIB_GMOCK)
add_executable (logging_unittest add_executable (logging_unittest
src/logging_unittest.cc src/logging_unittest.cc
) )
target_link_libraries (logging_unittest PRIVATE ${_GLOG_TEST_LIBS}) target_link_libraries (logging_unittest PRIVATE glog_test)
add_executable (stl_logging_unittest add_executable (stl_logging_unittest
src/stl_logging_unittest.cc src/stl_logging_unittest.cc
) )
target_link_libraries (stl_logging_unittest PRIVATE ${_GLOG_TEST_LIBS}) target_link_libraries (stl_logging_unittest PRIVATE glog_test)
if (HAVE_NO_DEPRECATED) if (HAVE_NO_DEPRECATED)
set_property (TARGET stl_logging_unittest APPEND PROPERTY COMPILE_OPTIONS set_property (TARGET stl_logging_unittest APPEND PROPERTY COMPILE_OPTIONS
@ -661,35 +664,35 @@ if (BUILD_TESTING)
src/symbolize_unittest.cc src/symbolize_unittest.cc
) )
target_link_libraries (symbolize_unittest PRIVATE ${_GLOG_TEST_LIBS}) target_link_libraries (symbolize_unittest PRIVATE glog_test)
endif (HAVE_SYMBOLIZE) endif (HAVE_SYMBOLIZE)
add_executable (demangle_unittest add_executable (demangle_unittest
src/demangle_unittest.cc src/demangle_unittest.cc
) )
target_link_libraries (demangle_unittest PRIVATE ${_GLOG_TEST_LIBS}) target_link_libraries (demangle_unittest PRIVATE glog_test)
if (HAVE_STACKTRACE) if (HAVE_STACKTRACE)
add_executable (stacktrace_unittest add_executable (stacktrace_unittest
src/stacktrace_unittest.cc src/stacktrace_unittest.cc
) )
target_link_libraries (stacktrace_unittest PRIVATE ${_GLOG_TEST_LIBS}) target_link_libraries (stacktrace_unittest PRIVATE glog_test)
endif (HAVE_STACKTRACE) endif (HAVE_STACKTRACE)
add_executable (utilities_unittest add_executable (utilities_unittest
src/utilities_unittest.cc src/utilities_unittest.cc
) )
target_link_libraries (utilities_unittest PRIVATE ${_GLOG_TEST_LIBS}) target_link_libraries (utilities_unittest PRIVATE glog_test)
if (HAVE_STACKTRACE AND HAVE_SYMBOLIZE) if (HAVE_STACKTRACE AND HAVE_SYMBOLIZE)
add_executable (signalhandler_unittest add_executable (signalhandler_unittest
src/signalhandler_unittest.cc src/signalhandler_unittest.cc
) )
target_link_libraries (signalhandler_unittest PRIVATE ${_GLOG_TEST_LIBS}) target_link_libraries (signalhandler_unittest PRIVATE glog_test)
endif (HAVE_STACKTRACE AND HAVE_SYMBOLIZE) endif (HAVE_STACKTRACE AND HAVE_SYMBOLIZE)
add_test (NAME demangle COMMAND demangle_unittest) add_test (NAME demangle COMMAND demangle_unittest)
@ -735,7 +738,7 @@ if (BUILD_TESTING)
src/mock-log.h src/mock-log.h
) )
target_link_libraries (mock-log_unittest PRIVATE ${_GLOG_TEST_LIBS}) target_link_libraries (mock-log_unittest PRIVATE glog_test)
add_test (NAME mock-log COMMAND mock-log_unittest) add_test (NAME mock-log COMMAND mock-log_unittest)
endif (HAVE_LIB_GMOCK) endif (HAVE_LIB_GMOCK)
@ -797,17 +800,17 @@ if (BUILD_TESTING)
add_executable (cleanup_immediately_unittest add_executable (cleanup_immediately_unittest
src/cleanup_immediately_unittest.cc) src/cleanup_immediately_unittest.cc)
target_link_libraries (cleanup_immediately_unittest PRIVATE ${_GLOG_TEST_LIBS}) target_link_libraries (cleanup_immediately_unittest PRIVATE glog_test)
add_executable (cleanup_with_absolute_prefix_unittest add_executable (cleanup_with_absolute_prefix_unittest
src/cleanup_with_absolute_prefix_unittest.cc) src/cleanup_with_absolute_prefix_unittest.cc)
target_link_libraries (cleanup_with_absolute_prefix_unittest PRIVATE ${_GLOG_TEST_LIBS}) target_link_libraries (cleanup_with_absolute_prefix_unittest PRIVATE glog_test)
add_executable (cleanup_with_relative_prefix_unittest add_executable (cleanup_with_relative_prefix_unittest
src/cleanup_with_relative_prefix_unittest.cc) src/cleanup_with_relative_prefix_unittest.cc)
target_link_libraries (cleanup_with_relative_prefix_unittest PRIVATE ${_GLOG_TEST_LIBS}) target_link_libraries (cleanup_with_relative_prefix_unittest PRIVATE glog_test)
set (CLEANUP_LOG_DIR ${CMAKE_CURRENT_BINARY_DIR}/cleanup_tests) set (CLEANUP_LOG_DIR ${CMAKE_CURRENT_BINARY_DIR}/cleanup_tests)

View File

@ -1,13 +1,3 @@
# Create the build directory
execute_process (
COMMAND ${CMAKE_COMMAND} -E make_directory ${TEST_BINARY_DIR}
RESULT_VARIABLE _DIRECTORY_CREATED_SUCCEEDED
)
if (NOT _DIRECTORY_CREATED_SUCCEEDED EQUAL 0)
message (FATAL_ERROR "Failed to create build directory")
endif (NOT _DIRECTORY_CREATED_SUCCEEDED EQUAL 0)
if (GENERATOR_TOOLSET) if (GENERATOR_TOOLSET)
list (APPEND _ADDITIONAL_ARGS -T ${GENERATOR_TOOLSET}) list (APPEND _ADDITIONAL_ARGS -T ${GENERATOR_TOOLSET})
endif (GENERATOR_TOOLSET) endif (GENERATOR_TOOLSET)
@ -29,9 +19,9 @@ execute_process (
${_ADDITIONAL_ARGS} ${_ADDITIONAL_ARGS}
-DCMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY=ON -DCMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY=ON
-DCMAKE_FIND_PACKAGE_NO_SYSTEM_PACKAGE_REGISTRY=ON -DCMAKE_FIND_PACKAGE_NO_SYSTEM_PACKAGE_REGISTRY=ON
-DCMAKE_PREFIX_PATH=${PACKAGE_DIR} -Dglog_ROOT=${PACKAGE_DIR}
${SOURCE_DIR} -S ${SOURCE_DIR}
WORKING_DIRECTORY ${TEST_BINARY_DIR} -B ${TEST_BINARY_DIR}
RESULT_VARIABLE _GENERATE_SUCCEEDED RESULT_VARIABLE _GENERATE_SUCCEEDED
) )