[Cmake-commits] CMake branch, next, updated. v3.0.0-rc2-1457-g2ec1efe
Brad King
brad.king at kitware.com
Wed Mar 26 12:39:34 EDT 2014
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "CMake".
The branch, next has been updated
via 2ec1efe6b116b7a04354143d707cb939a93306c2 (commit)
via f4796b40acdf677a9122af955a9fcad4e6522027 (commit)
via e348fa57704739b2ed61cd036fa0bb6f3bc50dd2 (commit)
from 841457b599ecae12da9b561f38c9e63f4b8f12a6 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=2ec1efe6b116b7a04354143d707cb939a93306c2
commit 2ec1efe6b116b7a04354143d707cb939a93306c2
Merge: 841457b f4796b4
Author: Brad King <brad.king at kitware.com>
AuthorDate: Wed Mar 26 12:39:33 2014 -0400
Commit: CMake Topic Stage <kwrobot at kitware.com>
CommitDate: Wed Mar 26 12:39:33 2014 -0400
Merge topic 'link-line-quoting' into next
f4796b40 Makefile: Generate single-quoted linker lines for Watcom on Windows
e348fa57 cmLocalUnixMakefileGenerator3: Re-organize ConvertToQuotedOutputPath
http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=f4796b40acdf677a9122af955a9fcad4e6522027
commit f4796b40acdf677a9122af955a9fcad4e6522027
Author: Jiri Malak <malak.jiri at gmail.com>
AuthorDate: Tue Mar 25 07:17:45 2014 +0100
Commit: Brad King <brad.king at kitware.com>
CommitDate: Wed Mar 26 11:32:36 2014 -0400
Makefile: Generate single-quoted linker lines for Watcom on Windows
Drop the CMAKE_NO_QUOTED_OBJECTS internal variable from the Makefile
generators. The underlying problem is with the Watcom linker, not with
WMake. The Watcom linker wants object files to be single-quoted since
it does its own parsing of the Windows process command-line string. Add
<LINK-RULE>_USE_SINGLE_QUOTE platform information variables to tell the
generators to use single quotes for object files on link lines.
diff --git a/Modules/Platform/Windows-wcl386.cmake b/Modules/Platform/Windows-wcl386.cmake
index 6b1cfd1..359097f 100644
--- a/Modules/Platform/Windows-wcl386.cmake
+++ b/Modules/Platform/Windows-wcl386.cmake
@@ -39,6 +39,11 @@ set (CMAKE_C_FLAGS_RELWITHDEBINFO_INIT "-br -bm -d2 -ot -dNDEBUG")
set (CMAKE_C_STANDARD_LIBRARIES_INIT "library clbrdll.lib library plbrdll.lib library kernel32.lib library user32.lib library gdi32.lib library winspool.lib library comdlg32.lib library advapi32.lib library shell32.lib library ole32.lib library oleaut32.lib library uuid.lib library odbc32.lib library odbccp32.lib")
set (CMAKE_CXX_STANDARD_LIBRARIES_INIT "${CMAKE_C_STANDARD_LIBRARIES_INIT}")
+foreach(type CREATE_SHARED_LIBRARY CREATE_SHARED_MODULE LINK_EXECUTABLE)
+ set(CMAKE_C_${type}_USE_SINGLE_QUOTE 1)
+ set(CMAKE_CXX_${type}_USE_SINGLE_QUOTE 1)
+endforeach()
+
set(CMAKE_C_CREATE_IMPORT_LIBRARY
"wlib -c -q -n -b <TARGET_IMPLIB> +<TARGET_QUOTED>")
set(CMAKE_CXX_CREATE_IMPORT_LIBRARY ${CMAKE_C_CREATE_IMPORT_LIBRARY})
diff --git a/Source/cmGlobalWatcomWMakeGenerator.cxx b/Source/cmGlobalWatcomWMakeGenerator.cxx
index 0ae1b34..e44ed79 100644
--- a/Source/cmGlobalWatcomWMakeGenerator.cxx
+++ b/Source/cmGlobalWatcomWMakeGenerator.cxx
@@ -35,7 +35,6 @@ void cmGlobalWatcomWMakeGenerator
mf->AddDefinition("CMAKE_MANGLE_OBJECT_FILE_NAMES", "1");
mf->AddDefinition("CMAKE_MAKE_LINE_CONTINUE", "&");
mf->AddDefinition("CMAKE_MAKE_SYMBOLIC_RULE", ".SYMBOLIC");
- mf->AddDefinition("CMAKE_NO_QUOTED_OBJECTS", "1");
mf->AddDefinition("CMAKE_GENERATOR_CC", "wcl386");
mf->AddDefinition("CMAKE_GENERATOR_CXX", "wcl386");
this->cmGlobalUnixMakefileGenerator3::EnableLanguage(l, mf, optional);
diff --git a/Source/cmLocalUnixMakefileGenerator3.cxx b/Source/cmLocalUnixMakefileGenerator3.cxx
index 8fa14d2..7e55838 100644
--- a/Source/cmLocalUnixMakefileGenerator3.cxx
+++ b/Source/cmLocalUnixMakefileGenerator3.cxx
@@ -2181,14 +2181,15 @@ cmLocalUnixMakefileGenerator3
//----------------------------------------------------------------------------
std::string
-cmLocalUnixMakefileGenerator3::ConvertToQuotedOutputPath(const char* p)
+cmLocalUnixMakefileGenerator3::ConvertToQuotedOutputPath(const char* p,
+ const char* quote)
{
// Split the path into its components.
std::vector<std::string> components;
cmSystemTools::SplitPath(p, components);
// Open the quoted result.
- std::string result = "\"";
+ std::string result = quote;
// Return an empty path if there are no components.
if(!components.empty())
@@ -2232,7 +2233,7 @@ cmLocalUnixMakefileGenerator3::ConvertToQuotedOutputPath(const char* p)
}
// Close the quoted result.
- result += "\"";
+ result += quote;
return result;
}
diff --git a/Source/cmLocalUnixMakefileGenerator3.h b/Source/cmLocalUnixMakefileGenerator3.h
index 14543fb..2871cba 100644
--- a/Source/cmLocalUnixMakefileGenerator3.h
+++ b/Source/cmLocalUnixMakefileGenerator3.h
@@ -186,7 +186,8 @@ public:
const char *targetDir,
cmLocalGenerator::RelativeRoot returnDir);
- static std::string ConvertToQuotedOutputPath(const char* p);
+ static std::string ConvertToQuotedOutputPath(const char* p,
+ const char* quote);
std::string CreateMakeVariable(const std::string& sin,
const std::string& s2in);
diff --git a/Source/cmMakefileExecutableTargetGenerator.cxx b/Source/cmMakefileExecutableTargetGenerator.cxx
index a61005b..a392780 100644
--- a/Source/cmMakefileExecutableTargetGenerator.cxx
+++ b/Source/cmMakefileExecutableTargetGenerator.cxx
@@ -290,6 +290,7 @@ void cmMakefileExecutableTargetGenerator::WriteExecutableRule(bool relink)
linkRuleVar += linkLanguage;
linkRuleVar += "_LINK_EXECUTABLE";
std::string linkRule = this->GetLinkRule(linkRuleVar);
+ bool useSingleQuote = this->Makefile->IsOn(linkRuleVar+"_USE_SINGLE_QUOTE");
std::vector<std::string> commands1;
cmSystemTools::ExpandListArgument(linkRule, real_link_commands);
if(this->Target->IsExecutableWithExports())
@@ -343,7 +344,8 @@ void cmMakefileExecutableTargetGenerator::WriteExecutableRule(bool relink)
// rule.
std::string buildObjs;
this->CreateObjectLists(useLinkScript, false,
- useResponseFileForObjects, buildObjs, depends);
+ useResponseFileForObjects, buildObjs, depends,
+ useSingleQuote);
cmLocalGenerator::RuleVariables vars;
vars.RuleLauncher = "RULE_LAUNCH_LINK";
diff --git a/Source/cmMakefileLibraryTargetGenerator.cxx b/Source/cmMakefileLibraryTargetGenerator.cxx
index 02469d1..eea1b02 100644
--- a/Source/cmMakefileLibraryTargetGenerator.cxx
+++ b/Source/cmMakefileLibraryTargetGenerator.cxx
@@ -458,6 +458,8 @@ void cmMakefileLibraryTargetGenerator::WriteLibraryRules
this->Target);
}
+ bool useSingleQuote = this->Makefile->IsOn(linkRuleVar+"_USE_SINGLE_QUOTE");
+
// Determine whether a link script will be used.
bool useLinkScript = this->GlobalGenerator->GetUseLinkScript();
@@ -553,7 +555,8 @@ void cmMakefileLibraryTargetGenerator::WriteLibraryRules
// rule.
std::string buildObjs;
this->CreateObjectLists(useLinkScript, useArchiveRules,
- useResponseFileForObjects, buildObjs, depends);
+ useResponseFileForObjects, buildObjs, depends,
+ useSingleQuote);
cmLocalGenerator::RuleVariables vars;
vars.TargetPDB = targetOutPathPDB.c_str();
diff --git a/Source/cmMakefileTargetGenerator.cxx b/Source/cmMakefileTargetGenerator.cxx
index 6759d05..4ebd334 100644
--- a/Source/cmMakefileTargetGenerator.cxx
+++ b/Source/cmMakefileTargetGenerator.cxx
@@ -1349,10 +1349,12 @@ cmMakefileTargetGenerator::AppendProgress(std::vector<std::string>& commands)
void
cmMakefileTargetGenerator
::WriteObjectsVariable(std::string& variableName,
- std::string& variableNameExternal)
+ std::string& variableNameExternal,
+ bool useSingleQuote)
{
// Write a make variable assignment that lists all objects for the
// target.
+ char const* quote = (useSingleQuote) ? "'" : "\"";
variableName =
this->LocalGenerator->CreateMakeVariable(this->Target->GetName(),
"_OBJECTS");
@@ -1360,8 +1362,6 @@ cmMakefileTargetGenerator
<< "# Object files for target " << this->Target->GetName() << "\n"
<< variableName << " =";
std::string object;
- const char* objName =
- this->Makefile->GetDefinition("CMAKE_NO_QUOTED_OBJECTS");
const char* lineContinue =
this->Makefile->GetDefinition("CMAKE_MAKE_LINE_CONTINUE");
if(!lineContinue)
@@ -1372,17 +1372,8 @@ cmMakefileTargetGenerator
i != this->Objects.end(); ++i)
{
*this->BuildFileStream << " " << lineContinue << "\n";
- if(objName)
- {
- *this->BuildFileStream <<
- this->Convert(*i, cmLocalGenerator::START_OUTPUT,
- cmLocalGenerator::MAKEFILE);
- }
- else
- {
- *this->BuildFileStream <<
- this->LocalGenerator->ConvertToQuotedOutputPath(i->c_str());
- }
+ *this->BuildFileStream <<
+ this->LocalGenerator->ConvertToQuotedOutputPath(i->c_str(), quote);
}
*this->BuildFileStream << "\n";
@@ -1404,17 +1395,8 @@ cmMakefileTargetGenerator
*this->BuildFileStream
<< " " << lineContinue << "\n"
<< this->Makefile->GetSafeDefinition("CMAKE_OBJECT_NAME");
- if(objName)
- {
- *this->BuildFileStream <<
- this->Convert(*i, cmLocalGenerator::START_OUTPUT,
- cmLocalGenerator::MAKEFILE);
- }
- else
- {
- *this->BuildFileStream <<
- this->LocalGenerator->ConvertToQuotedOutputPath(i->c_str());
- }
+ *this->BuildFileStream <<
+ this->LocalGenerator->ConvertToQuotedOutputPath(i->c_str(), quote);
}
*this->BuildFileStream << "\n" << "\n";
}
@@ -1882,11 +1864,13 @@ void
cmMakefileTargetGenerator
::CreateObjectLists(bool useLinkScript, bool useArchiveRules,
bool useResponseFile, std::string& buildObjs,
- std::vector<std::string>& makefile_depends)
+ std::vector<std::string>& makefile_depends,
+ bool useSingleQuote)
{
std::string variableName;
std::string variableNameExternal;
- this->WriteObjectsVariable(variableName, variableNameExternal);
+ this->WriteObjectsVariable(variableName, variableNameExternal,
+ useSingleQuote);
if(useResponseFile)
{
// MSVC response files cannot exceed 128K.
diff --git a/Source/cmMakefileTargetGenerator.h b/Source/cmMakefileTargetGenerator.h
index 7ff6da9..0e10b62 100644
--- a/Source/cmMakefileTargetGenerator.h
+++ b/Source/cmMakefileTargetGenerator.h
@@ -113,7 +113,8 @@ protected:
// write out the variable that lists the objects for this target
void WriteObjectsVariable(std::string& variableName,
- std::string& variableNameExternal);
+ std::string& variableNameExternal,
+ bool useSingleQuote);
void WriteObjectsString(std::string& buildObjs);
void WriteObjectsStrings(std::vector<std::string>& objStrings,
std::string::size_type limit = std::string::npos);
@@ -172,7 +173,8 @@ protected:
/** Create lists of object files for linking and cleaning. */
void CreateObjectLists(bool useLinkScript, bool useArchiveRules,
bool useResponseFile, std::string& buildObjs,
- std::vector<std::string>& makefile_depends);
+ std::vector<std::string>& makefile_depends,
+ bool useSingleQuote);
void AddIncludeFlags(std::string& flags, const std::string& lang);
http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=e348fa57704739b2ed61cd036fa0bb6f3bc50dd2
commit e348fa57704739b2ed61cd036fa0bb6f3bc50dd2
Author: Jiri Malak <malak.jiri at gmail.com>
AuthorDate: Tue Mar 25 07:17:45 2014 +0100
Commit: Brad King <brad.king at kitware.com>
CommitDate: Wed Mar 26 11:20:50 2014 -0400
cmLocalUnixMakefileGenerator3: Re-organize ConvertToQuotedOutputPath
Use one code path whether the components list is empty or not.
Fix indentation accordingly.
diff --git a/Source/cmLocalUnixMakefileGenerator3.cxx b/Source/cmLocalUnixMakefileGenerator3.cxx
index cc872d5..8fa14d2 100644
--- a/Source/cmLocalUnixMakefileGenerator3.cxx
+++ b/Source/cmLocalUnixMakefileGenerator3.cxx
@@ -2183,52 +2183,51 @@ cmLocalUnixMakefileGenerator3
std::string
cmLocalUnixMakefileGenerator3::ConvertToQuotedOutputPath(const char* p)
{
-
// Split the path into its components.
std::vector<std::string> components;
cmSystemTools::SplitPath(p, components);
+ // Open the quoted result.
+ std::string result = "\"";
+
// Return an empty path if there are no components.
- if(components.empty())
+ if(!components.empty())
{
- return "\"\"";
- }
-
- // Choose a slash direction and fix root component.
- const char* slash = "/";
+ // Choose a slash direction and fix root component.
+ const char* slash = "/";
#if defined(_WIN32) && !defined(__CYGWIN__)
- if(!cmSystemTools::GetForceUnixPaths())
- {
- slash = "\\";
- for(std::string::iterator i = components[0].begin();
- i != components[0].end(); ++i)
- {
- if(*i == '/')
- {
- *i = '\\';
- }
- }
- }
+ if(!cmSystemTools::GetForceUnixPaths())
+ {
+ slash = "\\";
+ for(std::string::iterator i = components[0].begin();
+ i != components[0].end(); ++i)
+ {
+ if(*i == '/')
+ {
+ *i = '\\';
+ }
+ }
+ }
#endif
- // Begin the quoted result with the root component.
- std::string result = "\"";
- result += components[0];
+ // Begin the quoted result with the root component.
+ result += components[0];
- // Now add the rest of the components separated by the proper slash
- // direction for this platform.
- bool first = true;
- for(unsigned int i=1; i < components.size(); ++i)
- {
- // Only the last component can be empty to avoid double slashes.
- if(components[i].length() > 0 || (i == (components.size()-1)))
+ // Now add the rest of the components separated by the proper slash
+ // direction for this platform.
+ bool first = true;
+ for(unsigned int i=1; i < components.size(); ++i)
{
- if(!first)
+ // Only the last component can be empty to avoid double slashes.
+ if(components[i].length() > 0 || (i == (components.size()-1)))
{
- result += slash;
+ if(!first)
+ {
+ result += slash;
+ }
+ result += components[i];
+ first = false;
}
- result += components[i];
- first = false;
}
}
-----------------------------------------------------------------------
Summary of changes:
Modules/Platform/Windows-wcl386.cmake | 5 ++
Source/cmGlobalWatcomWMakeGenerator.cxx | 1 -
Source/cmLocalUnixMakefileGenerator3.cxx | 70 ++++++++++++------------
Source/cmLocalUnixMakefileGenerator3.h | 3 +-
Source/cmMakefileExecutableTargetGenerator.cxx | 4 +-
Source/cmMakefileLibraryTargetGenerator.cxx | 5 +-
Source/cmMakefileTargetGenerator.cxx | 38 ++++---------
Source/cmMakefileTargetGenerator.h | 6 +-
8 files changed, 64 insertions(+), 68 deletions(-)
hooks/post-receive
--
CMake
More information about the Cmake-commits
mailing list