mirror of
https://github.com/libgit2/libgit2.git
synced 2026-06-22 06:26:26 +00:00
Make a distinction between generated headers and "translated" headers. This is important to support build-time dependencies when headers are updated. Generated headers are those which contain build-time feature specifications, like `git2_features.h` that are internal to the build and `experimental.h` that contain API information. Translated headers are the headers that are in `include/git2`, but may be translated to have a unique prefix like `incklude/git2-experimental`. This distinction is important so that the CMakeFiles.txt depend on the in-tree include files (`src/include`) and the generated header files _but not_ the translated header files. Otherwise there are two `pack.h` and it's unclear whether the in-tree build is targeting the one in `src/include` or the one in the build tree. Without this, updating an in-tree header file like `pack.h` would not cause a rebuild of its dependencies.
56 lines
1.6 KiB
CMake
56 lines
1.6 KiB
CMake
set(CLI_INCLUDES
|
|
"${libgit2_SOURCE_DIR}/src/util"
|
|
"${libgit2_SOURCE_DIR}/src/cli"
|
|
"${libgit2_SOURCE_DIR}/include"
|
|
"${libgit2_BINARY_DIR}/gen_headers"
|
|
"${LIBGIT2_DEPENDENCY_INCLUDES}"
|
|
"${LIBGIT2_SYSTEM_INCLUDES}")
|
|
|
|
if(WIN32 AND NOT CYGWIN)
|
|
file(GLOB CLI_SRC_OS win32/*.c)
|
|
list(SORT CLI_SRC_OS)
|
|
else()
|
|
file(GLOB CLI_SRC_OS unix/*.c)
|
|
list(SORT CLI_SRC_OS)
|
|
endif()
|
|
|
|
file(GLOB CLI_SRC_C *.c *.h)
|
|
list(SORT CLI_SRC_C)
|
|
|
|
#
|
|
# The CLI currently needs to be statically linked against libgit2 because
|
|
# the utility library uses libgit2's thread-local error buffers. TODO:
|
|
# remove this dependency and allow us to dynamically link against libgit2.
|
|
#
|
|
|
|
if(BUILD_CLI STREQUAL "dynamic")
|
|
set(CLI_LIBGIT2_LIBRARY libgit2package)
|
|
else()
|
|
set(CLI_LIBGIT2_OBJECTS $<TARGET_OBJECTS:libgit2>)
|
|
endif()
|
|
|
|
#
|
|
# Compile and link the CLI
|
|
#
|
|
|
|
add_executable(git2_cli ${CLI_SRC_C} ${CLI_SRC_OS} ${CLI_OBJECTS}
|
|
$<TARGET_OBJECTS:util>
|
|
${CLI_LIBGIT2_OBJECTS}
|
|
${LIBGIT2_DEPENDENCY_OBJECTS})
|
|
target_link_libraries(git2_cli ${CLI_LIBGIT2_LIBRARY} ${LIBGIT2_SYSTEM_LIBS})
|
|
|
|
set_target_properties(git2_cli PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${libgit2_BINARY_DIR})
|
|
set_target_properties(git2_cli PROPERTIES OUTPUT_NAME ${LIBGIT2_FILENAME})
|
|
|
|
ide_split_sources(git2_cli)
|
|
|
|
target_include_directories(git2_cli PRIVATE ${CLI_INCLUDES})
|
|
|
|
if(MSVC_IDE)
|
|
# Precompiled headers
|
|
set_target_properties(git2_cli PROPERTIES COMPILE_FLAGS "/Yuprecompiled.h /FIprecompiled.h")
|
|
set_source_files_properties(win32/precompiled.c COMPILE_FLAGS "/Ycprecompiled.h")
|
|
endif()
|
|
|
|
install(TARGETS git2_cli RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
|