From 5a8f155e002274e03e51b51fbe86ed0c0e7f890a Mon Sep 17 00:00:00 2001 From: Emmanuel Christophe <emmanuel.christophe@orfeo-toolbox.org> Date: Mon, 18 Oct 2010 18:40:30 +0800 Subject: [PATCH] ENH: prevent in-source build (following discussion on the ITK dev list) --- CMake/PreventInSourceBuilds.cmake | 43 +++++++++++++++++++++++++++++++ CMakeLists.txt | 5 ++++ 2 files changed, 48 insertions(+) create mode 100644 CMake/PreventInSourceBuilds.cmake diff --git a/CMake/PreventInSourceBuilds.cmake b/CMake/PreventInSourceBuilds.cmake new file mode 100644 index 0000000000..60f035f686 --- /dev/null +++ b/CMake/PreventInSourceBuilds.cmake @@ -0,0 +1,43 @@ +# +# 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("# OTB should not be configured & built in the OTB source directory") + message("# You must run cmake in a build directory.") + message("# For example:") + message("# mkdir OTB-Sandbox ; cd OTB-Sandbox") + message("# hg clone http://hg.orfeo-toolbox.org/OTB # or download & unpack the source tarball") + message("# mkdir OTB-Binary ") + message("# this will create the following directory structure ") + message("# ") + message("# OTB-Sandbox") + message("# +--OTB ") + message("# +--OTB-Binary ") + message("# ") + message("# Then you can proceed to configure and build ") + message("# by using the following commands ") + message("# ") + message("# cd OTB-Binary") + message("# ccmake ../OTB") + 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 'hg status' to find them and") + message("# remove them by doing:") + message("# ") + message("# cd OTB-Sandbox/OTB") + message("# hg purge ") + message("# ") + message("######################################################") + message(FATAL_ERROR "Quitting configuration") + endif() +endfunction() + +AssureOutOfSourceBuilds() diff --git a/CMakeLists.txt b/CMakeLists.txt index c5da571bc7..41e5dd37fe 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,6 +6,11 @@ IF(COMMAND CMAKE_POLICY) CMAKE_POLICY(SET CMP0003 NEW) ENDIF(COMMAND CMAKE_POLICY) +#----------------------------------------------------------------------------- +# Sanity check -- prevent in-source builds +# +INCLUDE(${CMAKE_CURRENT_SOURCE_DIR}/CMake/PreventInSourceBuilds.cmake) + PROJECT(OTB) # Path to additional CMake modules -- GitLab