From 5ff037e894fc4631dc3d7c6a59e5f2e4fb87c793 Mon Sep 17 00:00:00 2001 From: Bill Hoffman Date: Thu, 30 Nov 2006 17:32:46 -0500 Subject: [PATCH] BUG: better fix for .dll.lib problem --- Source/cmOrderLinkDirectories.cxx | 5 +++-- Source/cmTarget.cxx | 9 ++++++++- Tests/LibName/CMakeLists.txt | 7 ++++++- 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/Source/cmOrderLinkDirectories.cxx b/Source/cmOrderLinkDirectories.cxx index 744c1fee6..f3d91a2ae 100644 --- a/Source/cmOrderLinkDirectories.cxx +++ b/Source/cmOrderLinkDirectories.cxx @@ -466,8 +466,9 @@ bool cmOrderLinkDirectories::DetermineLibraryPathOrder() // check to see if the file is a full path or just contains // a / in it and is a path to something cmStdString& item = this->RawLinkItems[i]; - if(cmSystemTools::FileIsFullPath(item.c_str()) - || item.find("/") != item.npos) + // if it is a full path to an item then separate it from the path + // this only works with files and paths + if(cmSystemTools::FileIsFullPath(item.c_str())) { if(cmSystemTools::FileIsDirectory(this->RawLinkItems[i].c_str())) { diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx index 3ee22f3ac..0dc8bd90e 100644 --- a/Source/cmTarget.cxx +++ b/Source/cmTarget.cxx @@ -864,7 +864,14 @@ const char* cmTarget::GetDirectory(const char* config) { this->Directory = this->Makefile->GetStartOutputDirectory(); } - + // if LIBRARY_OUTPUT_PATH or EXECUTABLE_OUTPUT_PATH was relative + // then make them full paths because this directory MUST + // be a full path or things will not work!!! + if(!cmSystemTools::FileIsFullPath(this->Directory.c_str())) + { + this->Directory = this->Makefile->GetCurrentOutputDirectory() + + std::string("/") + this->Directory; + } if(config) { // Add the configuration's subdirectory. diff --git a/Tests/LibName/CMakeLists.txt b/Tests/LibName/CMakeLists.txt index e97b6b13e..3dca0b003 100644 --- a/Tests/LibName/CMakeLists.txt +++ b/Tests/LibName/CMakeLists.txt @@ -1,8 +1,13 @@ project(LibName) -set(LIBRARY_OUTPUT_PATH lib) +# this is a test to make sure that relative path +# LIBRARY_OUTPUT_PATH and EXECUTABLE_OUTPUT_PATH work +set(LIBRARY_OUTPUT_PATH lib) set(EXECUTABLE_OUTPUT_PATH lib) add_library(bar SHARED bar.c) add_library(foo SHARED foo.c) target_link_libraries(foo bar) add_executable(foobar foobar.c) target_link_libraries(foobar foo) +IF(UNIX) + target_link_libraries(foobar -L/usr/local/lib) +ENDIF(UNIX)