summary refs log tree commit diff
diff options
context:
space:
mode:
authorFlorian Friesdorf <flo@chaoflow.net>2014-10-29 23:44:53 +0100
committerRok Garbas <rok@garbas.si>2015-05-28 10:53:36 +0200
commit90a97d32df1a7809d755c47ed84c25fd2d46b4fe (patch)
treed8f86b98df2cc1927e52152b531f7313191db05a
parent12b781a945aa4c6c8d95f36161780f693a43c73d (diff)
downloadnixpkgs-90a97d32df1a7809d755c47ed84c25fd2d46b4fe.tar
nixpkgs-90a97d32df1a7809d755c47ed84c25fd2d46b4fe.tar.gz
nixpkgs-90a97d32df1a7809d755c47ed84c25fd2d46b4fe.tar.bz2
nixpkgs-90a97d32df1a7809d755c47ed84c25fd2d46b4fe.tar.lz
nixpkgs-90a97d32df1a7809d755c47ed84c25fd2d46b4fe.tar.xz
nixpkgs-90a97d32df1a7809d755c47ed84c25fd2d46b4fe.tar.zst
nixpkgs-90a97d32df1a7809d755c47ed84c25fd2d46b4fe.zip
cygwin cmake
-rw-r--r--pkgs/development/tools/build-managers/cmake/2.8.11-cygwin.patch237
-rw-r--r--pkgs/development/tools/build-managers/cmake/default.nix4
2 files changed, 239 insertions, 2 deletions
diff --git a/pkgs/development/tools/build-managers/cmake/2.8.11-cygwin.patch b/pkgs/development/tools/build-managers/cmake/2.8.11-cygwin.patch
new file mode 100644
index 00000000000..e16dab32632
--- /dev/null
+++ b/pkgs/development/tools/build-managers/cmake/2.8.11-cygwin.patch
@@ -0,0 +1,237 @@
+--- cmake-2.8.10/Source/cmFileCommand.cxx	2012-10-31 10:32:06.000000000 -0500
++++ cmake-2.8.10/Source/cmFileCommand.cxx	2013-03-16 22:55:11.306681100 -0500
+@@ -1002,7 +1002,7 @@ protected:
+   MatchProperties CollectMatchProperties(const char* file)
+     {
+     // Match rules are case-insensitive on some platforms.
+-#if defined(_WIN32) || defined(__APPLE__) || defined(__CYGWIN__)
++#if defined(_WIN32) || defined(__APPLE__)
+     std::string lower = cmSystemTools::LowerCase(file);
+     const char* file_to_match = lower.c_str();
+ #else
+--- cmake-2.8.10/Source/cmInstallCommand.cxx	2012-10-31 10:32:06.000000000 -0500
++++ cmake-2.8.10/Source/cmInstallCommand.cxx	2013-03-16 22:56:21.008667800 -0500
+@@ -1090,7 +1090,7 @@ cmInstallCommand::HandleDirectoryMode(st
+       {
+       literal_args += " REGEX \"";
+     // Match rules are case-insensitive on some platforms.
+-#if defined(_WIN32) || defined(__APPLE__) || defined(__CYGWIN__)
++#if defined(_WIN32) || defined(__APPLE__)
+       std::string regex = cmSystemTools::LowerCase(args[i]);
+ #else
+       std::string regex = args[i];
+--- cmake-2.8.10/Source/kwsys/Glob.cxx	2012-10-31 10:32:06.000000000 -0500
++++ cmake-2.8.10/Source/kwsys/Glob.cxx	2013-03-16 22:58:54.192429400 -0500
+@@ -37,7 +37,7 @@
+ #include <string.h>
+ namespace KWSYS_NAMESPACE
+ {
+-#if defined(_WIN32) || defined(__APPLE__) || defined(__CYGWIN__)
++#if defined(_WIN32) || defined(__APPLE__)
+ // On Windows and apple, no difference between lower and upper case
+ # define KWSYS_GLOB_CASE_INDEPENDENT
+ #endif
+--- cmake-2.8.11/Source/kwsys/SystemInformation.cxx	2013-05-15 12:38:13.000000000 -0500
++++ cmake-2.8.11/Source/kwsys/SystemInformation.cxx	2013-07-08 01:57:31.216321800 -0500
+@@ -888,7 +888,7 @@ void SystemInformation::RunMemoryCheck()
+ // Hide implementation details in an anonymous namespace.
+ namespace {
+ // *****************************************************************************
+-#if defined(__linux) || defined(__APPLE__)
++#if defined(__linux) || defined(__APPLE__) || defined(__CYGWIN__)
+ int LoadLines(
+       FILE *file,
+       kwsys_stl::vector<kwsys_stl::string> &lines)
+@@ -918,7 +918,7 @@ int LoadLines(
+   return nRead;
+ }
+ 
+-# if defined(__linux)
++# if defined(__linux) || defined(__CYGWIN__)
+ // *****************************************************************************
+ int LoadLines(
+       const char *fileName,
+@@ -957,7 +957,7 @@ int NameValue(
+ }
+ #endif
+ 
+-#if defined(__linux)
++#if defined(__linux) || defined(__CYGWIN__)
+ // ****************************************************************************
+ template<typename T>
+ int GetFieldsFromFile(
+@@ -2869,7 +2869,6 @@ bool SystemInformationImplementation::Re
+     pos = buffer.find("processor\t",pos+1);
+     }
+ 
+-#ifdef __linux
+   // Find the largest physical id.
+   int maxId = -1;
+   kwsys_stl::string idc =
+@@ -2893,14 +2892,6 @@ bool SystemInformationImplementation::Re
+   this->NumberOfPhysicalCPU=static_cast<unsigned int>(
+     numberOfCoresPerCPU*(maxId+1));
+ 
+-#else // __CYGWIN__
+-  // does not have "physical id" entries, neither "cpu cores"
+-  // this has to be fixed for hyper-threading.
+-  kwsys_stl::string cpucount =
+-    this->ExtractValueFromCpuInfoFile(buffer,"cpu count");
+-  this->NumberOfPhysicalCPU=
+-    this->NumberOfLogicalCPU = atoi(cpucount.c_str());
+-#endif
+   // gotta have one, and if this is 0 then we get a / by 0n
+   // better to have a bad answer than a crash
+   if(this->NumberOfPhysicalCPU <= 0)
+@@ -3086,7 +3077,7 @@ SystemInformationImplementation::GetHost
+   GlobalMemoryStatusEx(&statex);
+   return statex.ullTotalPhys/1024;
+ # endif
+-#elif defined(__linux)
++#elif defined(__linux) || defined(__CYGWIN__)
+   SystemInformation::LongLong memTotal=0;
+   int ierr=GetFieldFromFile("/proc/meminfo","MemTotal:",memTotal);
+   if (ierr)
+@@ -3217,7 +3208,7 @@ SystemInformationImplementation::GetHost
+   GlobalMemoryStatusEx(&statex);
+   return (statex.ullTotalPhys - statex.ullAvailPhys)/1024;
+ # endif
+-#elif defined(__linux)
++#elif defined(__linux) || defined(__CYGWIN__)
+   const char *names[3]={"MemTotal:","MemFree:",NULL};
+   SystemInformation::LongLong values[2]={SystemInformation::LongLong(0)};
+   int ierr=GetFieldsFromFile("/proc/meminfo",names,values);
+@@ -3276,7 +3267,7 @@ SystemInformationImplementation::GetProc
+     return -2;
+     }
+   return pmc.WorkingSetSize/1024;
+-#elif defined(__linux)
++#elif defined(__linux) || defined(__CYGWIN__)
+   SystemInformation::LongLong memUsed=0;
+   int ierr=GetFieldFromFile("/proc/self/status","VmRSS:",memUsed);
+   if (ierr)
+@@ -3328,7 +3319,7 @@ SystemInformationImplementation::GetProc
+ {
+ #if defined(_WIN32)
+   return GetCurrentProcessId();
+-#elif defined(__linux) || defined(__APPLE__)
++#elif defined(__linux) || defined(__APPLE__) || defined(__CYGWIN__)
+   return getpid();
+ #else
+   return -1;
+--- cmake-2.8.10/Source/kwsys/SystemTools.cxx	2012-10-31 10:32:06.000000000 -0500
++++ cmake-2.8.10/Source/kwsys/SystemTools.cxx	2013-03-16 22:52:11.830415600 -0500
+@@ -75,19 +75,12 @@
+ // Windows API.
+ #if defined(_WIN32)
+ # include <windows.h>
+-#elif defined (__CYGWIN__)
+-# include <windows.h>
+-# undef _WIN32
+ #endif
+ 
+ #if !KWSYS_CXX_HAS_ENVIRON_IN_STDLIB_H
+ extern char **environ;
+ #endif
+ 
+-#ifdef __CYGWIN__
+-extern "C" void cygwin_conv_to_win32_path(const char *path, char *win32_path);
+-#endif
+-
+ // getpwnam doesn't exist on Windows and Cray Xt3/Catamount
+ // same for TIOCGWINSZ
+ #if defined(_WIN32) || defined (__LIBCATAMOUNT__)
+@@ -1068,7 +1061,7 @@ bool SystemTools::SameFile(const char* f
+ }
+ 
+ //----------------------------------------------------------------------------
+-#if defined(_WIN32) || defined(__CYGWIN__)
++#if defined(_WIN32)
+ static bool WindowsFileExists(const char* filename)
+ {
+   WIN32_FILE_ATTRIBUTE_DATA fd;
+@@ -1083,7 +1076,7 @@ bool SystemTools::FileExists(const char*
+     {
+     return false;
+     }
+-#if defined(__CYGWIN__)
++#if 0
+   // Convert filename to native windows path if possible.
+   char winpath[MAX_PATH];
+   if(SystemTools::PathCygwinToWin32(filename, winpath))
+@@ -1111,7 +1104,7 @@ bool SystemTools::FileExists(const char*
+ }
+ 
+ //----------------------------------------------------------------------------
+-#ifdef __CYGWIN__
++#if 0
+ bool SystemTools::PathCygwinToWin32(const char *path, char *win32_path)
+ {
+   SystemToolsTranslationMap::iterator i =
+@@ -3894,7 +3887,7 @@ bool SystemTools::LocateFileInDir(const
+ bool SystemTools::FileIsFullPath(const char* in_name)
+ {
+   kwsys_stl::string name = in_name;
+-#if defined(_WIN32) || defined(__CYGWIN__)
++#if defined(_WIN32)
+   // On Windows, the name must be at least two characters long.
+   if(name.length() < 2)
+     {
+@@ -4712,9 +4705,6 @@ bool SystemTools::ParseURL( const kwsys_
+ unsigned int SystemToolsManagerCount;
+ SystemToolsTranslationMap *SystemTools::TranslationMap;
+ SystemToolsTranslationMap *SystemTools::LongPathMap;
+-#ifdef __CYGWIN__
+-SystemToolsTranslationMap *SystemTools::Cyg2Win32Map;
+-#endif
+ 
+ // SystemToolsManager manages the SystemTools singleton.
+ // SystemToolsManager should be included in any translation unit
+@@ -4760,9 +4750,6 @@ void SystemTools::ClassInitialize()
+   // Allocate the translation map first.
+   SystemTools::TranslationMap = new SystemToolsTranslationMap;
+   SystemTools::LongPathMap = new SystemToolsTranslationMap;
+-#ifdef __CYGWIN__
+-  SystemTools::Cyg2Win32Map = new SystemToolsTranslationMap;
+-#endif
+ 
+   // Add some special translation paths for unix.  These are not added
+   // for windows because drive letters need to be maintained.  Also,
+@@ -4817,9 +4804,6 @@ void SystemTools::ClassFinalize()
+ {
+   delete SystemTools::TranslationMap;
+   delete SystemTools::LongPathMap;
+-#ifdef __CYGWIN__
+-  delete SystemTools::Cyg2Win32Map;
+-#endif
+ }
+ 
+ 
+--- cmake-2.8.10/Source/kwsys/SystemTools.hxx.in	2012-10-31 10:32:06.000000000 -0500
++++ cmake-2.8.10/Source/kwsys/SystemTools.hxx.in	2013-03-16 23:10:30.185237900 -0500
+@@ -277,15 +277,6 @@ public:
+   static bool FileExists(const char* filename);
+ 
+   /**
+-   * Converts Cygwin path to Win32 path. Uses dictionary container for
+-   * caching and calls to cygwin_conv_to_win32_path from Cygwin dll
+-   * for actual translation.  Returns true on success, else false.
+-   */
+-#ifdef __CYGWIN__
+-  static bool PathCygwinToWin32(const char *path, char *win32_path);
+-#endif
+-
+-  /**
+    * Return file length
+    */
+   static unsigned long FileLength(const char *filename);
+@@ -887,9 +878,6 @@ private:
+    */
+   static SystemToolsTranslationMap *TranslationMap;
+   static SystemToolsTranslationMap *LongPathMap;
+-#ifdef __CYGWIN__
+-  static SystemToolsTranslationMap *Cyg2Win32Map;
+-#endif
+   friend class SystemToolsManager;
+ };
+ 
diff --git a/pkgs/development/tools/build-managers/cmake/default.nix b/pkgs/development/tools/build-managers/cmake/default.nix
index 45bdeece45e..9f2ed0a7352 100644
--- a/pkgs/development/tools/build-managers/cmake/default.nix
+++ b/pkgs/development/tools/build-managers/cmake/default.nix
@@ -36,7 +36,7 @@ stdenv.mkDerivation rec {
       url = "http://public.kitware.com/Bug/file_download.php?"
           + "file_id=4981&type=bug";
       sha256 = "16acmdr27adma7gs9rs0dxdiqppm15vl3vv3agy7y8s94wyh4ybv";
-    });
+    }) ++ stdenv.lib.optional stdenv.isCygwin ./2.8.11-cygwin.patch;
 
   buildInputs =
     [ bzip2 curl expat libarchive xz zlib ]
@@ -52,8 +52,8 @@ stdenv.mkDerivation rec {
     [
       "--docdir=/share/doc/${name}"
       "--mandir=/share/man"
-      "--system-libs"
     ]
+    ++ optional (!stdenv.isCygwin) "--system-libs"
     ++ optional (jsoncpp == null) "--no-system-jsoncpp"
     ++ optional useQt4 "--qt-gui"
     ++ ["--"]