summaryrefslogtreecommitdiff
path: root/Source/CPack/WiX/cmCMakeToWixPath.cxx
diff options
context:
space:
mode:
authorStephen Sorley <ssorley@monetra.com>2017-10-09 11:39:29 -0400
committerStephen Sorley <ssorley@monetra.com>2017-10-13 13:07:37 -0400
commite1409101c99f7a3487990e9927e8bd0e275f564f (patch)
treee5c0ecb010bc9bbfc11aeea8a2e65bbe9eafd14a /Source/CPack/WiX/cmCMakeToWixPath.cxx
parente258fe03968d27871d6a57e3f4571bc8fbba6b9b (diff)
downloadcmake-e1409101c99f7a3487990e9927e8bd0e275f564f.tar.gz
cpack wix: support WiX generator on Cygwin
Cygwin-built CMake now converts paths from Cygwin to Windows form (using cygpath -w) before they're passed to WiX. The Wix generator on Cygwin requires the libuuid-dev package when building CMake. However, the DLL it links to is installed by default as part of Cygwin's core libs, so it does not need to be distributed. If libuuid-dev isn't available, CMake is simply built without Wix support on Cygwin.
Diffstat (limited to 'Source/CPack/WiX/cmCMakeToWixPath.cxx')
-rw-r--r--Source/CPack/WiX/cmCMakeToWixPath.cxx39
1 files changed, 39 insertions, 0 deletions
diff --git a/Source/CPack/WiX/cmCMakeToWixPath.cxx b/Source/CPack/WiX/cmCMakeToWixPath.cxx
new file mode 100644
index 0000000000..0b0e42aa92
--- /dev/null
+++ b/Source/CPack/WiX/cmCMakeToWixPath.cxx
@@ -0,0 +1,39 @@
+/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
+ file Copyright.txt or https://cmake.org/licensing for details. */
+#include "cmCMakeToWixPath.h"
+
+#include "cmSystemTools.h"
+
+#include <string>
+#include <vector>
+
+#ifdef __CYGWIN__
+#include <sys/cygwin.h>
+std::string CMakeToWixPath(const std::string& cygpath)
+{
+ std::vector<char> winpath_chars;
+ ssize_t winpath_size;
+
+ // Get the required buffer size.
+ winpath_size =
+ cygwin_conv_path(CCP_POSIX_TO_WIN_A, cygpath.c_str(), nullptr, 0);
+ if (winpath_size <= 0) {
+ return cygpath;
+ }
+
+ winpath_chars.assign(static_cast<size_t>(winpath_size) + 1, '\0');
+
+ winpath_size = cygwin_conv_path(CCP_POSIX_TO_WIN_A, cygpath.c_str(),
+ winpath_chars.data(), winpath_size);
+ if (winpath_size < 0) {
+ return cygpath;
+ }
+
+ return cmSystemTools::TrimWhitespace(winpath_chars.data());
+}
+#else
+std::string CMakeToWixPath(const std::string& path)
+{
+ return path;
+}
+#endif