diff options
author | Nicolas BUNEL <nbunel@purples-dev-thx11.1> | 2016-05-27 14:03:43 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2016-06-01 15:12:36 (GMT) |
commit | 18bfbc972fd3daf3e973f80072c4de09ec7e852b (patch) | |
tree | 092bba580eac1fcf3977a56adbdb2c3f18223f04 /Source | |
parent | d6754d37d593a0189809dcf98bc4fdf3a609f0a3 (diff) | |
download | CMake-18bfbc972fd3daf3e973f80072c4de09ec7e852b.zip CMake-18bfbc972fd3daf3e973f80072c4de09ec7e852b.tar.gz CMake-18bfbc972fd3daf3e973f80072c4de09ec7e852b.tar.bz2 |
Add option to control 'bin' directory of CMake's own installation (#16076)
Add a `CMAKE_BIN_DIR` cache entry to CMake's own build configuration.
Add a `--bindir` option to the `bootstrap` script to set it.
Diffstat (limited to 'Source')
-rw-r--r-- | Source/CMakeInstallDestinations.cmake | 5 | ||||
-rw-r--r-- | Source/CMakeLists.txt | 2 | ||||
-rw-r--r-- | Source/CursesDialog/CMakeLists.txt | 2 | ||||
-rw-r--r-- | Source/cmConfigure.cmake.h.in | 1 | ||||
-rw-r--r-- | Source/cmSystemTools.cxx | 21 |
5 files changed, 22 insertions, 9 deletions
diff --git a/Source/CMakeInstallDestinations.cmake b/Source/CMakeInstallDestinations.cmake index 2f9d95a..023f6c0 100644 --- a/Source/CMakeInstallDestinations.cmake +++ b/Source/CMakeInstallDestinations.cmake @@ -1,27 +1,32 @@ # Keep formatting here consistent with bootstrap script expectations. if(BEOS) + set(CMAKE_BIN_DIR_DEFAULT "bin") # HAIKU set(CMAKE_DATA_DIR_DEFAULT "share/cmake-${CMake_VERSION_MAJOR}.${CMake_VERSION_MINOR}") # HAIKU set(CMAKE_MAN_DIR_DEFAULT "documentation/man") # HAIKU set(CMAKE_DOC_DIR_DEFAULT "documentation/doc/cmake-${CMake_VERSION_MAJOR}.${CMake_VERSION_MINOR}") # HAIKU set(CMAKE_XDGDATA_DIR_DEFAULT "share") # HAIKU elseif(CYGWIN) + set(CMAKE_BIN_DIR_DEFAULT "bin") # CYGWIN set(CMAKE_DATA_DIR_DEFAULT "share/cmake-${CMake_VERSION}") # CYGWIN set(CMAKE_DOC_DIR_DEFAULT "share/doc/cmake-${CMake_VERSION}") # CYGWIN set(CMAKE_MAN_DIR_DEFAULT "share/man") # CYGWIN set(CMAKE_XDGDATA_DIR_DEFAULT "share") # CYGWIN else() + set(CMAKE_BIN_DIR_DEFAULT "bin") # OTHER set(CMAKE_DATA_DIR_DEFAULT "share/cmake-${CMake_VERSION_MAJOR}.${CMake_VERSION_MINOR}") # OTHER set(CMAKE_DOC_DIR_DEFAULT "doc/cmake-${CMake_VERSION_MAJOR}.${CMake_VERSION_MINOR}") # OTHER set(CMAKE_MAN_DIR_DEFAULT "man") # OTHER set(CMAKE_XDGDATA_DIR_DEFAULT "share") # OTHER endif() +set(CMAKE_BIN_DIR_DESC "bin") set(CMAKE_DATA_DIR_DESC "data") set(CMAKE_DOC_DIR_DESC "docs") set(CMAKE_MAN_DIR_DESC "man pages") set(CMAKE_XDGDATA_DIR_DESC "XDG specific files") foreach(v + CMAKE_BIN_DIR CMAKE_DATA_DIR CMAKE_DOC_DIR CMAKE_MAN_DIR diff --git a/Source/CMakeLists.txt b/Source/CMakeLists.txt index 3223831..3f00c8e 100644 --- a/Source/CMakeLists.txt +++ b/Source/CMakeLists.txt @@ -786,7 +786,7 @@ endif() foreach(_tool ${_tools}) CMake_OPTIONAL_COMPONENT(${_tool}) - install(TARGETS ${_tool} DESTINATION bin ${COMPONENT}) + install(TARGETS ${_tool} DESTINATION ${CMAKE_BIN_DIR} ${COMPONENT}) endforeach() install(FILES cmCPluginAPI.h DESTINATION ${CMAKE_DATA_DIR}/include) diff --git a/Source/CursesDialog/CMakeLists.txt b/Source/CursesDialog/CMakeLists.txt index 93ff425..55599b6 100644 --- a/Source/CursesDialog/CMakeLists.txt +++ b/Source/CursesDialog/CMakeLists.txt @@ -48,4 +48,4 @@ else() endif() CMake_OPTIONAL_COMPONENT(ccmake) -install(TARGETS ccmake DESTINATION bin ${COMPONENT}) +install(TARGETS ccmake DESTINATION ${CMAKE_BIN_DIR} ${COMPONENT}) diff --git a/Source/cmConfigure.cmake.h.in b/Source/cmConfigure.cmake.h.in index 62128a7..11ff00b 100644 --- a/Source/cmConfigure.cmake.h.in +++ b/Source/cmConfigure.cmake.h.in @@ -15,4 +15,5 @@ #cmakedefine CMAKE_USE_MACH_PARSER #cmakedefine CMAKE_ENCODING_UTF8 #cmakedefine CMake_HAVE_CXX11_UNORDERED_MAP +#define CMAKE_BIN_DIR "/@CMAKE_BIN_DIR@" #define CMAKE_DATA_DIR "/@CMAKE_DATA_DIR@" diff --git a/Source/cmSystemTools.cxx b/Source/cmSystemTools.cxx index 7dece47..99d8569 100644 --- a/Source/cmSystemTools.cxx +++ b/Source/cmSystemTools.cxx @@ -1930,11 +1930,11 @@ void cmSystemTools::FindCMakeResources(const char* argv0) } if (cmSystemTools::GetFilenameName(exe_dir) == "MacOS") { // The executable is inside an application bundle. - // Look for ../bin (install tree) and then fall back to + // Look for ..<CMAKE_BIN_DIR> (install tree) and then fall back to // ../../../bin (build tree). exe_dir = cmSystemTools::GetFilenamePath(exe_dir); - if (cmSystemTools::FileExists((exe_dir + "/bin/cmake").c_str())) { - exe_dir += "/bin"; + if (cmSystemTools::FileExists(exe_dir + CMAKE_BIN_DIR "/cmake")) { + exe_dir += CMAKE_BIN_DIR; } else { exe_dir = cmSystemTools::GetFilenamePath(exe_dir); exe_dir = cmSystemTools::GetFilenamePath(exe_dir); @@ -1985,13 +1985,20 @@ void cmSystemTools::FindCMakeResources(const char* argv0) } #ifdef CMAKE_BUILD_WITH_CMAKE - // Install tree has "<prefix>/bin/cmake" and "<prefix><CMAKE_DATA_DIR>". - std::string dir = cmSystemTools::GetFilenamePath(exe_dir); - cmSystemToolsCMakeRoot = dir + CMAKE_DATA_DIR; - if (!cmSystemTools::FileExists( + // Install tree has + // - "<prefix><CMAKE_BIN_DIR>/cmake" + // - "<prefix><CMAKE_DATA_DIR>" + if (cmHasSuffix(exe_dir, CMAKE_BIN_DIR)) { + std::string const prefix = + exe_dir.substr(0, exe_dir.size() - strlen(CMAKE_BIN_DIR)); + cmSystemToolsCMakeRoot = prefix + CMAKE_DATA_DIR; + } + if (cmSystemToolsCMakeRoot.empty() || + !cmSystemTools::FileExists( (cmSystemToolsCMakeRoot + "/Modules/CMake.cmake").c_str())) { // Build tree has "<build>/bin[/<config>]/cmake" and // "<build>/CMakeFiles/CMakeSourceDir.txt". + std::string dir = cmSystemTools::GetFilenamePath(exe_dir); std::string src_dir_txt = dir + "/CMakeFiles/CMakeSourceDir.txt"; cmsys::ifstream fin(src_dir_txt.c_str()); std::string src_dir; |