-
Notifications
You must be signed in to change notification settings - Fork 2.7k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
ENH: Prevent cmake in source builds (#1091)
* ENH: Prevent cmake in source builds Building directly inside the root of the source tree can cause problems where the build intermediate files overwrite or conflict with the intended source code files. This modification identifies this problem and issues failure messages and suggestions to over come the problem with more robust build suggestion. Co-authored-by: Jordan Bayles <[email protected]>
- Loading branch information
1 parent
ceae0e3
commit 8954092
Showing
5 changed files
with
67 additions
and
4 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
string(TOLOWER "${CMAKE_INSTALL_PREFIX}" _PREFIX) | ||
string(TOLOWER "${ITK_BINARY_DIR}" _BUILD) | ||
This comment has been minimized.
Sorry, something went wrong. |
||
if("${_PREFIX}" STREQUAL "${_BUILD}") | ||
message(FATAL_ERROR | ||
"The current CMAKE_INSTALL_PREFIX points at the build tree:\n" | ||
" ${CMAKE_INSTALL_PREFIX}\n" | ||
"This is not supported." | ||
) | ||
endif() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,45 @@ | ||
# | ||
# This function will prevent in-source builds | ||
function(AssureOutOfSourceBuilds) | ||
# make sure the user doesn't play dirty with symlinks | ||
get_filename_component(srcdir "${CMAKE_SOURCE_DIR}" REALPATH) | ||
get_filename_component(bindir "${CMAKE_BINARY_DIR}" REALPATH) | ||
|
||
# disallow in-source builds | ||
if("${srcdir}" STREQUAL "${bindir}") | ||
message("######################################################") | ||
message("# jsoncpp should not be configured & built in the jsoncpp source directory") | ||
message("# You must run cmake in a build directory.") | ||
message("# For example:") | ||
message("# mkdir jsoncpp-Sandbox ; cd jsoncpp-sandbox") | ||
message("# git clone https://github.com/open-source-parsers/jsoncpp.git # or download & unpack the source tarball") | ||
message("# mkdir jsoncpp-build") | ||
message("# this will create the following directory structure") | ||
message("#") | ||
message("# jsoncpp-Sandbox") | ||
message("# +--jsoncpp") | ||
message("# +--jsoncpp-build") | ||
message("#") | ||
message("# Then you can proceed to configure and build") | ||
message("# by using the following commands") | ||
message("#") | ||
message("# cd jsoncpp-build") | ||
message("# cmake ../jsoncpp # or ccmake, or cmake-gui ") | ||
message("# make") | ||
message("#") | ||
message("# NOTE: Given that you already tried to make an in-source build") | ||
message("# CMake have already created several files & directories") | ||
message("# in your source tree. run 'git status' to find them and") | ||
message("# remove them by doing:") | ||
message("#") | ||
message("# cd jsoncpp-Sandbox/jsoncpp") | ||
message("# git clean -n -d") | ||
message("# git clean -f -d") | ||
message("# git checkout --") | ||
message("#") | ||
message("######################################################") | ||
message(FATAL_ERROR "Quitting configuration") | ||
endif() | ||
endfunction() | ||
|
||
AssureOutOfSourceBuilds() |
@hjmjohnson @baylesj I'm a mere 4-something years late to the party, but this should likely be
CMAKE_BINARY_DIR
, as last I checked jsoncpp doesn't have a dependency on ITK, so it's pretty unlikely thatITK_BINARY_DIR
will be set. ;)