summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Source/CMakeLists.txt12
-rw-r--r--Source/cmOrderLinkDirectories.cxx9
-rw-r--r--Tests/LibName/CMakeLists.txt7
-rw-r--r--Tests/LibName/bar.c3
-rw-r--r--Tests/LibName/foo.c5
-rw-r--r--Tests/LibName/foobar.c7
6 files changed, 41 insertions, 2 deletions
diff --git a/Source/CMakeLists.txt b/Source/CMakeLists.txt
index 63db833..e53aca1 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 fb25711..c04400b 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 0000000..649aae3
--- /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 0000000..c434bf7
--- /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 0000000..b068b46
--- /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 0000000..ac22ab3
--- /dev/null
+++ b/Tests/LibName/foobar.c
@@ -0,0 +1,7 @@
+__declspec(dllimport) void bar();
+
+int main(int ac, char** av)
+{
+ bar();
+ return 0;
+}