summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHans Johnson <hans-johnson@uiowa.edu>2016-07-27 07:53:36 -0500
committerHans Johnson <hans-johnson@uiowa.edu>2016-07-28 08:56:44 -0500
commitea081254b4a0538f81c74bdb8338b29a068303aa (patch)
treeef6fcc472e88667f9c84e8595dbd0ffa7b680554
parent44ef9da070628a2ff7bf63afca60d0ebe0ed7875 (diff)
downloadlapack-ea081254b4a0538f81c74bdb8338b29a068303aa.tar.gz
lapack-ea081254b4a0538f81c74bdb8338b29a068303aa.tar.bz2
lapack-ea081254b4a0538f81c74bdb8338b29a068303aa.zip
COMP: Prevent insource builds and inbuild installs
With cmake is best to require out-of-source builds, and to avoid intalling into the same directory as the build was performed. Both of these situations can cause very confusing situations that can frustrate new users of the software package, so check for and provide guidance to the end-users. These files were initially contributed to the ITK (www.itk.org) project and have been widely re-used by many other projects. NOTE: This patch is dependant on pull request #16
-rw-r--r--CMAKE/PreventInBuildInstalls.cmake9
-rw-r--r--CMAKE/PreventInSourceBuilds.cmake45
-rw-r--r--CMakeLists.txt2
3 files changed, 56 insertions, 0 deletions
diff --git a/CMAKE/PreventInBuildInstalls.cmake b/CMAKE/PreventInBuildInstalls.cmake
new file mode 100644
index 00000000..accfea64
--- /dev/null
+++ b/CMAKE/PreventInBuildInstalls.cmake
@@ -0,0 +1,9 @@
+string(TOLOWER "${CMAKE_INSTALL_PREFIX}" _PREFIX)
+string(TOLOWER "${ITK_BINARY_DIR}" _BUILD)
+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()
diff --git a/CMAKE/PreventInSourceBuilds.cmake b/CMAKE/PreventInSourceBuilds.cmake
new file mode 100644
index 00000000..8101aa65
--- /dev/null
+++ b/CMAKE/PreventInSourceBuilds.cmake
@@ -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("# lapack should not be configured & built in the lapack source directory")
+ message("# You must run cmake in a build directory.")
+ message("# For example:")
+ message("# mkdir lapack-Sandbox ; cd lapack-sandbox")
+ message("# git clone https://github.com/Reference-LAPACK/lapack.git # or download & unpack the source tarball")
+ message("# mkdir lapack-build")
+ message("# this will create the following directory structure")
+ message("#")
+ message("# lapack-Sandbox")
+ message("# +--lapack")
+ message("# +--lapack-build")
+ message("#")
+ message("# Then you can proceed to configure and build")
+ message("# by using the following commands")
+ message("#")
+ message("# cd lapack-build")
+ message("# cmake ../lapack # 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 lapack-Sandbox/lapack")
+ message("# git clean -n -d")
+ message("# git clean -f -d")
+ message("# git checkout --")
+ message("#")
+ message("######################################################")
+ message(FATAL_ERROR "Quitting configuration")
+ endif()
+endfunction()
+
+AssureOutOfSourceBuilds()
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 0f235537..ae2bd2d3 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -42,6 +42,8 @@ configure_file(
# Add the CMake directory for custon CMake modules
set(CMAKE_MODULE_PATH "${LAPACK_SOURCE_DIR}/CMAKE" ${CMAKE_MODULE_PATH})
+include(PreventInSourceBuilds)
+include(PreventInBuildInstalls)
if (UNIX)
if ( "${CMAKE_Fortran_COMPILER}" MATCHES "ifort" )