summaryrefslogtreecommitdiffstats
path: root/Source
diff options
context:
space:
mode:
authorAndy Cedilnik <andy.cedilnik@kitware.com>2003-08-07 20:09:19 (GMT)
committerAndy Cedilnik <andy.cedilnik@kitware.com>2003-08-07 20:09:19 (GMT)
commit6c65c77d350cab78832b6a2e20fec655a4e39969 (patch)
tree7721b4cafea9e14c7462d2c43ed47e071f7e9a6b /Source
parent7e54a53a3da92ea2d16e2396bf7cfc801c3d076d (diff)
downloadCMake-6c65c77d350cab78832b6a2e20fec655a4e39969.zip
CMake-6c65c77d350cab78832b6a2e20fec655a4e39969.tar.gz
CMake-6c65c77d350cab78832b6a2e20fec655a4e39969.tar.bz2
ENH: Report an error when ADD_LIBRARY and TARGET_LINK_LIBRARIES are in the wrong order and fix CMakeLists files to actually work
Diffstat (limited to 'Source')
-rw-r--r--Source/CMakeLists.txt19
-rw-r--r--Source/CTest/CMakeLists.txt2
-rw-r--r--Source/cmTargetLinkLibrariesCommand.cxx28
-rw-r--r--Source/cmTargetLinkLibrariesCommand.h8
4 files changed, 48 insertions, 9 deletions
diff --git a/Source/CMakeLists.txt b/Source/CMakeLists.txt
index b1e2c8d..342689b 100644
--- a/Source/CMakeLists.txt
+++ b/Source/CMakeLists.txt
@@ -81,24 +81,28 @@ IF (WIN32)
cmWin32ProcessExecution.cxx
cmWin32ProcessExecution.h
)
- IF( NOT BORLAND )
- LINK_LIBRARIES( rpcrt4.lib )
- ADD_EXECUTABLE(cmw9xcom cmw9xcom.cxx)
- TARGET_LINK_LIBRARIES(cmw9xcom CMakeLib)
- SUBDIRS(MFCDialog)
- ENDIF( NOT BORLAND )
ENDIF(NOT UNIX)
ENDIF (WIN32)
# create a library used by the command line and the GUI
ADD_LIBRARY(CMakeLib ${SRCS})
-
TARGET_LINK_LIBRARIES(CMakeLib cmsys)
# always link in the library
# the library is found here
LINK_DIRECTORIES(${CMake_BINARY_DIR}/Source)
+IF (WIN32)
+ IF(NOT UNIX)
+ IF( NOT BORLAND )
+ LINK_LIBRARIES( rpcrt4.lib )
+ ADD_EXECUTABLE(cmw9xcom cmw9xcom.cxx)
+ TARGET_LINK_LIBRARIES(cmw9xcom CMakeLib)
+ SUBDIRS(MFCDialog)
+ ENDIF( NOT BORLAND )
+ ENDIF(NOT UNIX)
+ENDIF (WIN32)
+
ADD_EXECUTABLE(cmake cmakemain.cxx)
ADD_EXECUTABLE(DumpDocumentation cmDumpDocumentation)
@@ -111,7 +115,6 @@ ENDIF (UNIX)
TARGET_LINK_LIBRARIES(cmake CMakeLib)
TARGET_LINK_LIBRARIES(DumpDocumentation CMakeLib)
-SET(CMAKE_BUILD_WITH_CURL 1)
IF(CMAKE_BUILD_WITH_CURL)
SUBDIRS(CTest)
SET(CMTEST_SRCS ${CMTEST_SRCS} CTest/cmCTestSubmit.cxx)
diff --git a/Source/CTest/CMakeLists.txt b/Source/CTest/CMakeLists.txt
index e262727..6514ff9 100644
--- a/Source/CTest/CMakeLists.txt
+++ b/Source/CTest/CMakeLists.txt
@@ -8,11 +8,11 @@ IF(CMAKE_SYSTEM MATCHES "AIX.*")
ENDIF(NOT CMAKE_COMPILER_IS_GNUCXX)
ENDIF(CMAKE_SYSTEM MATCHES "AIX.*")
-SUBDIRS(Curl)
IF(CMAKE_BUILD_WITH_CURL)
SET(CMAKE_LIBRARY CMakeLib)
ELSE(CMAKE_BUILD_WITH_CURL)
+ SUBDIRS(Curl)
FIND_LIBRARY(CMAKE_LIBRARY NAMES CMakeLib PATHS
${CTEST_BINARY_DIR}/..
${CTEST_BINARY_DIR}/../Source
diff --git a/Source/cmTargetLinkLibrariesCommand.cxx b/Source/cmTargetLinkLibrariesCommand.cxx
index 70ba944..d2d80df 100644
--- a/Source/cmTargetLinkLibrariesCommand.cxx
+++ b/Source/cmTargetLinkLibrariesCommand.cxx
@@ -25,6 +25,9 @@ bool cmTargetLinkLibrariesCommand::InitialPass(std::vector<std::string> const& a
this->SetError("called with incorrect number of arguments");
return false;
}
+
+ m_TargetName = args[0];
+
// but we might not have any libs after variable expansion
if(args.size() < 2)
{
@@ -59,11 +62,16 @@ bool cmTargetLinkLibrariesCommand::InitialPass(std::vector<std::string> const& a
if (cmSystemTools::IsOff(ldir))
{
std::string libPath = *i + "_CMAKE_PATH";
+
const char* dir = m_Makefile->GetDefinition(libPath.c_str());
if( dir )
{
m_Makefile->AddLinkDirectoryForTarget(args[0].c_str(), dir );
}
+ else
+ {
+ m_HasLocation.push_back(*i);
+ }
}
else
{
@@ -73,3 +81,23 @@ bool cmTargetLinkLibrariesCommand::InitialPass(std::vector<std::string> const& a
return true;
}
+void cmTargetLinkLibrariesCommand::FinalPass()
+{
+ std::vector<std::string>::size_type cc;
+ std::string libPath;
+ for ( cc = 0; cc < m_HasLocation.size(); cc ++ )
+ {
+ libPath = m_HasLocation[cc] + "_CMAKE_PATH";
+ const char* dir = m_Makefile->GetDefinition(libPath.c_str());
+ if ( dir )
+ {
+ std::string str = "Library " + m_HasLocation[cc] +
+ " is defined using ADD_LIBRARY after the library is used "
+ "using TARGET_LINK_LIBRARIES for the target " + m_TargetName +
+ ". This breaks CMake's dependency "
+ "handling. Please fix the CMakeLists.txt file.";
+ this->SetError(str.c_str());
+ cmSystemTools::Message(str.c_str(), "CMake Error");
+ }
+ }
+}
diff --git a/Source/cmTargetLinkLibrariesCommand.h b/Source/cmTargetLinkLibrariesCommand.h
index 696fd1a..e189ef5 100644
--- a/Source/cmTargetLinkLibrariesCommand.h
+++ b/Source/cmTargetLinkLibrariesCommand.h
@@ -45,6 +45,11 @@ public:
virtual bool InitialPass(std::vector<std::string> const& args);
/**
+ * Verify that the ordering in CMake is correct.
+ */
+ virtual void FinalPass();
+
+ /**
* The name of the command as specified in CMakeList.txt.
*/
virtual const char* GetName() { return "TARGET_LINK_LIBRARIES";}
@@ -74,6 +79,9 @@ public:
}
cmTypeMacro(cmTargetLinkLibrariesCommand, cmCommand);
+private:
+ std::vector<std::string> m_HasLocation;
+ std::string m_TargetName;
};