diff --git a/Source/CMakeLists.txt b/Source/CMakeLists.txt index 63db83363..e53aca131 100644 --- a/Source/CMakeLists.txt +++ b/Source/CMakeLists.txt @@ -403,6 +403,18 @@ IF(BUILD_TESTING) ${CMake_SOURCE_DIR}/Tests/TargetName/scripts/hello_world ${CMake_BINARY_DIR}/Tests/TargetName/scripts/hello_world) + ADD_TEST(LibName ${CMAKE_CTEST_COMMAND} + --build-and-test + "${CMake_SOURCE_DIR}/Tests/LibName" + "${CMake_BINARY_DIR}/Tests/LibName" + --build-two-config + --build-generator ${CMAKE_TEST_GENERATOR} + --build-makeprogram ${CMAKE_TEST_MAKEPROGRAM} + --build-project LibName + --build-run-dir "${CMake_BINARY_DIR}/Tests/LibName/lib" + --test-command foobar + ) + ADD_TEST(CustomCommand ${CMAKE_CTEST_COMMAND} --build-and-test "${CMake_SOURCE_DIR}/Tests/CustomCommand" diff --git a/Source/cmOrderLinkDirectories.cxx b/Source/cmOrderLinkDirectories.cxx index fb2571183..c04400bf9 100644 --- a/Source/cmOrderLinkDirectories.cxx +++ b/Source/cmOrderLinkDirectories.cxx @@ -463,7 +463,10 @@ bool cmOrderLinkDirectories::DetermineLibraryPathOrder() #ifdef CM_ORDER_LINK_DIRECTORIES_DEBUG fprintf(stderr, "Raw link item [%s]\n", this->RawLinkItems[i].c_str()); #endif - if(cmSystemTools::FileIsFullPath(this->RawLinkItems[i].c_str())) + // check to see if the file is a full path or just contains + // a / in it and is a path to something + if(cmSystemTools::FileIsFullPath(this->RawLinkItems[i].c_str()) + || this->RawLinkItems[i].find("/") != cmStdString.npos) { if(cmSystemTools::FileIsDirectory(this->RawLinkItems[i].c_str())) { @@ -486,6 +489,8 @@ bool cmOrderLinkDirectories::DetermineLibraryPathOrder() } else { + // A full path to a directory was found as a link item + // warn user std::string message = "Warning: Ignoring path found in link libraries for target: "; message += this->TargetName; @@ -496,7 +501,7 @@ bool cmOrderLinkDirectories::DetermineLibraryPathOrder() cmSystemTools::Message(message.c_str()); continue; } - } + } // is it a directory if(!framework) { dir = cmSystemTools::GetFilenamePath(this->RawLinkItems[i]); diff --git a/Tests/LibName/CMakeLists.txt b/Tests/LibName/CMakeLists.txt new file mode 100644 index 000000000..649aae3d7 --- /dev/null +++ b/Tests/LibName/CMakeLists.txt @@ -0,0 +1,7 @@ +project(LibName) +set(LIBRARY_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) diff --git a/Tests/LibName/bar.c b/Tests/LibName/bar.c new file mode 100644 index 000000000..c434bf7c3 --- /dev/null +++ b/Tests/LibName/bar.c @@ -0,0 +1,3 @@ +__declspec(dllexport) void foo() +{ +} diff --git a/Tests/LibName/foo.c b/Tests/LibName/foo.c new file mode 100644 index 000000000..b068b46cd --- /dev/null +++ b/Tests/LibName/foo.c @@ -0,0 +1,5 @@ +__declspec(dllimport) void foo(); +__declspec(dllexport) void bar() +{ + foo(); +} diff --git a/Tests/LibName/foobar.c b/Tests/LibName/foobar.c new file mode 100644 index 000000000..ac22ab363 --- /dev/null +++ b/Tests/LibName/foobar.c @@ -0,0 +1,7 @@ +__declspec(dllimport) void bar(); + +int main(int ac, char** av) +{ + bar(); + return 0; +}