summaryrefslogtreecommitdiffstats
path: root/Source
diff options
context:
space:
mode:
Diffstat (limited to 'Source')
-rw-r--r--Source/CMakeLists.txt23
-rw-r--r--Source/cmSystemTools.cxx45
-rw-r--r--Source/cmSystemTools.h3
3 files changed, 71 insertions, 0 deletions
diff --git a/Source/CMakeLists.txt b/Source/CMakeLists.txt
index 10828eb..d6adea7 100644
--- a/Source/CMakeLists.txt
+++ b/Source/CMakeLists.txt
@@ -7,6 +7,10 @@ CONFIGURE_FILE(
"${CMake_SOURCE_DIR}/Source/cmConfigure.cmake.h.in"
"${CMake_BINARY_DIR}/Source/cmConfigure.h"
)
+CONFIGURE_FILE(
+ "${CMake_SOURCE_DIR}/Source/CPack/cmCPackConfigure.h.in"
+ "${CMake_BINARY_DIR}/Source/CPack/cmCPackConfigure.h"
+ )
# add the include path to find the .h
INCLUDE_DIRECTORIES(
@@ -247,6 +251,21 @@ SET(CMTEST_SRCS cmCTest.cxx
ADD_LIBRARY(CTestLib ${CMTEST_SRCS})
TARGET_LINK_LIBRARIES(CTestLib CMakeLib ${CMAKE_CURL_LIBRARIES} ${CMAKE_XMLRPC_LIBRARIES})
+#
+# Sources for CPack
+#
+SET(CPACK_SRCS
+ CPack/cmCPackGenerators.cxx
+ CPack/cmCPackSTGZGenerator.cxx
+ CPack/cmCPackTGZGenerator.cxx
+ CPack/cmCPackNSISGenerator.cxx
+ CPack/cmCPackPackageMakerGenerator.cxx
+ CPack/cmCPackGenericGenerator.cxx
+ )
+# Build CPackLib
+ADD_LIBRARY(CPackLib ${CPACK_SRCS})
+TARGET_LINK_LIBRARIES(CPackLib CMakeLib)
+
# Build CMake executable
ADD_EXECUTABLE(cmake cmakemain.cxx)
TARGET_LINK_LIBRARIES(cmake CMakeLib)
@@ -265,6 +284,10 @@ ENDIF(WIN32)
ADD_EXECUTABLE(ctest ctest.cxx)
TARGET_LINK_LIBRARIES(ctest CTestLib)
+# Build CPack executable
+ADD_EXECUTABLE(cpack CPack/cpack.cxx)
+TARGET_LINK_LIBRARIES(cpack CPackLib)
+
# Curses GUI
IF (UNIX)
INCLUDE (${CMake_SOURCE_DIR}/Modules/FindCurses.cmake OPTIONAL)
diff --git a/Source/cmSystemTools.cxx b/Source/cmSystemTools.cxx
index 45fa836..85d1786 100644
--- a/Source/cmSystemTools.cxx
+++ b/Source/cmSystemTools.cxx
@@ -1353,6 +1353,51 @@ bool cmSystemTools::PutEnv(const char* value)
return ret == 0;
}
+std::string cmSystemTools::MakeXMLSafe(const char* str)
+{
+ std::vector<char> result;
+ result.reserve(500);
+ const char* pos = str;
+ for ( ;*pos; ++pos)
+ {
+ char ch = *pos;
+ if ( (ch > 126 || ch < 32) && ch != 9 && ch != 10 && ch != 13 && ch != '\r' )
+ {
+ char buffer[33];
+ sprintf(buffer, "&lt;%d&gt;", (int)ch);
+ //sprintf(buffer, "&#x%0x;", (unsigned int)ch);
+ result.insert(result.end(), buffer, buffer+strlen(buffer));
+ }
+ else
+ {
+ const char* const encodedChars[] = {
+ "&amp;",
+ "&lt;",
+ "&gt;"
+ };
+ switch ( ch )
+ {
+ case '&':
+ result.insert(result.end(), encodedChars[0], encodedChars[0]+5);
+ break;
+ case '<':
+ result.insert(result.end(), encodedChars[1], encodedChars[1]+4);
+ break;
+ case '>':
+ result.insert(result.end(), encodedChars[2], encodedChars[2]+4);
+ break;
+ case '\n':
+ result.push_back('\n');
+ break;
+ case '\r': break; // Ignore \r
+ default:
+ result.push_back(ch);
+ }
+ }
+ }
+ return std::string(&*result.begin(), result.size());
+}
+
bool cmSystemTools::IsPathToFramework(const char* path)
{
if(cmSystemTools::FileIsFullPath(path))
diff --git a/Source/cmSystemTools.h b/Source/cmSystemTools.h
index 181d513..2895fff 100644
--- a/Source/cmSystemTools.h
+++ b/Source/cmSystemTools.h
@@ -297,6 +297,9 @@ public:
of the form var=value */
static bool PutEnv(const char* value);
+ /** Make string XML safe */
+ static std::string MakeXMLSafe(const char* str);
+
/** Create tar */
static bool ListTar(const char* outFileName, std::vector<cmStdString>& files, bool gzip, bool verbose);
static bool CreateTar(const char* outFileName, const std::vector<cmStdString>& files, bool gzip, bool verbose);