mirror of
https://github.com/libgit2/libgit2.git
synced 2026-01-25 02:56:17 +00:00
Also applies to *_BINARY_DIR.
This effectively reverts 84083dcc8b,
which broke all users of libgit2 that use it as a CMake subdirectory
(via `add_subdirectory()`). This is because CMAKE_SOURCE_DIR refers
to the root-most CMake directory, which in the case of
`add_subdirectory()` is a parent project to libgit2 and thus the paths
don't make any sense to the configuration files. Corollary,
CMAKE_SOURCE_DIR only makes sense if the CMake project is always the
root project - which can rarely be guaranteed.
In all honesty, CMake should deprecate and eventually remove
CMAKE_SOURCE_DIR and CMAKE_BINARY_DIR. It's been the source of headaches
and confusion for years, they're rarely useful over
CMAKE_CURRENT_(SOURCE|BINARY)_DIR or PROJECT_(SOURCE|BINARY)_DIR,
and they cause a lot of confusing configuration and source
code layouts to boot.
Any time they are used, they break `add_subdirectory()` almost 100% of
the time, cause confusing error messages, and hide subtle bugs.
23 lines
812 B
CMake
23 lines
812 B
CMake
# This function splits the sources files up into their appropriate
|
|
# subdirectories. This is especially useful for IDEs like Xcode and
|
|
# Visual Studio, so that you can navigate into the libgit2_tests project,
|
|
# and see the folders within the tests folder (instead of just seeing all
|
|
# source and tests in a single folder.)
|
|
function(IDE_SPLIT_SOURCES target)
|
|
if(MSVC_IDE OR CMAKE_GENERATOR STREQUAL Xcode)
|
|
get_target_property(sources ${target} SOURCES)
|
|
foreach(source ${sources})
|
|
if(source MATCHES ".*/")
|
|
string(REPLACE ${PROJECT_SOURCE_DIR}/ "" rel ${source})
|
|
if(rel)
|
|
string(REGEX REPLACE "/([^/]*)$" "" rel ${rel})
|
|
if(rel)
|
|
string(REPLACE "/" "\\\\" rel ${rel})
|
|
source_group(${rel} FILES ${source})
|
|
endif()
|
|
endif()
|
|
endif()
|
|
endforeach()
|
|
endif()
|
|
endfunction()
|