Re: [PATCH v4 3/3] gnu: Update ldc to 0.17.1.

2016-09-13 Thread Danny Milosavljevic
Sigh. Yeah, I've researched a bit why that happens.

The story is this:

glibc wanted to have isinf work with double AND float etc without conversion. 
Therefore, there is a special gcc construct where you can find out what type a 
parameter is IN A MACRO. Therefore, in C, isnan is a macro and so is isinf. The 
include file defining it is 

However, in C++ there's a include file . This one provides normal 
functions in the namespace "std" (since overloads are possible in C++).

dmd2 undefs isinf which is why the C version doesn't work anymore (that's 
stupid, really. What were they thinking?). But then they dont use the namespace 
std so it won't use that one either. "::isinf" is DEFINITELY wrong - no idea 
how that ever worked. It won't find the macro that way AND it won't find the 
function in namespace std either (since :: definitely says you want 
the one without namespace).

Some LLVM versions include  somewhere in their header files - so dmd2 is 
forced to use cmath rather than math.h even though they *want* to use math.h 
and the source code says so.

Therefore, I now use the C++ std::isinf - I hope LLVM won't change their mind 
again because then it will break again.



Re: [PATCH v4 3/3] gnu: Update ldc to 0.17.1.

2016-09-13 Thread Efraim Flashner
https://wiki.dlang.org/LDC
https://github.com/ldc-developers/ldc/releases/tag/v0.17.1

After 0.17.1 is working on guix *someone* should change the supported
platforms to include arm.  Based on the wiki it sounds like maybe we
should try building it on mips also.


-- 
Efraim Flashner  אפרים פלשנר
GPG key = A28B F40C 3E55 1372 662D  14F7 41AA E7DC CA3D 8351
Confidentiality cannot be guaranteed on emails sent or received unencrypted


signature.asc
Description: PGP signature


Re: [PATCH v4 3/3] gnu: Update ldc to 0.17.1.

2016-09-13 Thread Leo Famulari
On Tue, Sep 13, 2016 at 12:30:42PM +0200, Danny Milosavljevic wrote:
> * gnu/packages/ldc.scm (ldc): Update to 0.17.1.

With this patch, LDC fails to build on my x86_64 machine with the
familiar errors about isnan and isinf:

[ 11%] Building CXX object CMakeFiles/LDCShared.dir/dmd2/scope.c.o
/gnu/store/frrj3bfbmg5vrd0flh9cf8j64h7cr2v4-gcc-4.9.3/bin/c++   -DDMDV2 
-DHAVE_SC_ARG_MAX -DIN_LLVM 
-DLDC_INSTALL_PREFIX=\"/gnu/store/4p7hh4a7dyp2wg7zd08lvlxafayrjznx-ldc-0.17.1\" 
-DLDC_LLVM_VER=307 
-DLLVM_INTRINSIC_TD_PATH=\"/gnu/store/vy5wrh1igqlcswxi6bmfdl16frpjw7nf-llvm-3.7.1/include\"
 -DOPAQUE_VTBLS -D__LITTLE_ENDIAN__ 
-I/tmp/guix-build-ldc-0.17.1.drv-0/ldc-0.17.1/. 
-I/tmp/guix-build-ldc-0.17.1.drv-0/ldc-0.17.1/dmd2 
-I/tmp/guix-build-ldc-0.17.1.drv-0/ldc-0.17.1/dmd2/root 
-I/tmp/guix-build-ldc-0.17.1.drv-0/build/dmd2 
-I/tmp/guix-build-ldc-0.17.1.drv-0/ldc-0.17.1 -isystem 
/gnu/store/vy5wrh1igqlcswxi6bmfdl16frpjw7nf-llvm-3.7.1/include -isystem 
/gnu/store/1v4anv1dwvskkav1zj08gicwaibachr1-libconfig-1.5/include  -O2 -g 
-DNDEBUG   -I/gnu/store/vy5wrh1igqlcswxi6bmfdl16frpjw7nf-llvm-3.7.1/include  
-fPIC -fvisibility-inlines-hidden -Wall -W -Wno-unused-parameter 
-Wwrite-strings -Wcast-qual -Wno-missing-field-initializers -pedantic 
-Wno-long-long -Wno-maybe-uninitialized -Wno-comment -std=c++11 
-ffunction-sections -fdata-sections -O3 -DNDEBUG -fno-exceptions -fno-rtti  
-D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS 
-D__STDC_LIMIT_MACROS   -w -DPOSIX -DLDC_POSIX  -o 
CMakeFiles/LDCShared.dir/dmd2/scope.c.o -c 
/tmp/guix-build-ldc-0.17.1.drv-0/ldc-0.17.1/dmd2/scope.c
/tmp/guix-build-ldc-0.17.1.drv-0/ldc-0.17.1/dmd2/root/port.c: In static member 
function ‘static int Port::isNan(double)’:
/tmp/guix-build-ldc-0.17.1.drv-0/ldc-0.17.1/dmd2/root/port.c:773:19: error: 
‘isnan’ was not declared in this scope
 return isnan(r);
   ^
/tmp/guix-build-ldc-0.17.1.drv-0/ldc-0.17.1/dmd2/root/port.c:773:19: note: 
suggested alternative:
In file included from 
/gnu/store/vy5wrh1igqlcswxi6bmfdl16frpjw7nf-llvm-3.7.1/include/llvm/Support/DataTypes.h:35:0,
 from 
/gnu/store/vy5wrh1igqlcswxi6bmfdl16frpjw7nf-llvm-3.7.1/include/llvm/Support/SwapByteOrder.h:19,
 from 
/gnu/store/vy5wrh1igqlcswxi6bmfdl16frpjw7nf-llvm-3.7.1/include/llvm/Support/MathExtras.h:18,
 from 
/gnu/store/vy5wrh1igqlcswxi6bmfdl16frpjw7nf-llvm-3.7.1/include/llvm/ADT/SmallVector.h:20,
 from 
/gnu/store/vy5wrh1igqlcswxi6bmfdl16frpjw7nf-llvm-3.7.1/include/llvm/ADT/ArrayRef.h:14,
 from 
/gnu/store/vy5wrh1igqlcswxi6bmfdl16frpjw7nf-llvm-3.7.1/include/llvm/ADT/APInt.h:19,
 from 
/gnu/store/vy5wrh1igqlcswxi6bmfdl16frpjw7nf-llvm-3.7.1/include/llvm/ADT/APFloat.h:20,
 from 
/tmp/guix-build-ldc-0.17.1.drv-0/ldc-0.17.1/dmd2/root/port.c:677:
/gnu/store/frrj3bfbmg5vrd0flh9cf8j64h7cr2v4-gcc-4.9.3/include/c++/cmath:632:5: 
note:   ‘std::isnan’
 isnan(_Tp __x)
 ^
/tmp/guix-build-ldc-0.17.1.drv-0/ldc-0.17.1/dmd2/root/port.c: In static member 
function ‘static int Port::isNan(longdouble)’:
/tmp/guix-build-ldc-0.17.1.drv-0/ldc-0.17.1/dmd2/root/port.c:789:19: error: 
‘isnan’ was not declared in this scope
 return isnan(r);
   ^
/tmp/guix-build-ldc-0.17.1.drv-0/ldc-0.17.1/dmd2/root/port.c:789:19: note: 
suggested alternative:
In file included from 
/gnu/store/vy5wrh1igqlcswxi6bmfdl16frpjw7nf-llvm-3.7.1/include/llvm/Support/DataTypes.h:35:0,
 from 
/gnu/store/vy5wrh1igqlcswxi6bmfdl16frpjw7nf-llvm-3.7.1/include/llvm/Support/SwapByteOrder.h:19,
 from 
/gnu/store/vy5wrh1igqlcswxi6bmfdl16frpjw7nf-llvm-3.7.1/include/llvm/Support/MathExtras.h:18,
 from 
/gnu/store/vy5wrh1igqlcswxi6bmfdl16frpjw7nf-llvm-3.7.1/include/llvm/ADT/SmallVector.h:20,
 from 
/gnu/store/vy5wrh1igqlcswxi6bmfdl16frpjw7nf-llvm-3.7.1/include/llvm/ADT/ArrayRef.h:14,
 from 
/gnu/store/vy5wrh1igqlcswxi6bmfdl16frpjw7nf-llvm-3.7.1/include/llvm/ADT/APInt.h:19,
 from 
/gnu/store/vy5wrh1igqlcswxi6bmfdl16frpjw7nf-llvm-3.7.1/include/llvm/ADT/APFloat.h:20,
 from 
/tmp/guix-build-ldc-0.17.1.drv-0/ldc-0.17.1/dmd2/root/port.c:677:
/gnu/store/frrj3bfbmg5vrd0flh9cf8j64h7cr2v4-gcc-4.9.3/include/c++/cmath:632:5: 
note:   ‘std::isnan’
 isnan(_Tp __x)
 ^
/tmp/guix-build-ldc-0.17.1.drv-0/ldc-0.17.1/dmd2/root/port.c: In static member 
function ‘static int Port::isInfinity(double)’:
/tmp/guix-build-ldc-0.17.1.drv-0/ldc-0.17.1/dmd2/root/port.c:817:19: error: 
‘isinf’ was not declared in this scope
 return isinf(r);
   ^
/tmp/guix-build-ldc-0.17.1.drv-0/ldc-0.17.1/dmd2/root/port.c:817:19: note: 
suggested alternative:
In file included from 
/gnu/store/vy5wrh1igqlcswxi6bmfdl16frpjw7nf-llvm-3.7.1/include/llvm/Support/DataTypes.h:35:0,
 from 
/gnu/store/vy5wrh1igqlcswxi6bmfdl16frpjw7nf-llvm-3.7.1/include/llvm/Support/SwapByte

[PATCH v4 3/3] gnu: Update ldc to 0.17.1.

2016-09-13 Thread Danny Milosavljevic

* gnu/packages/ldc.scm (ldc): Update to 0.17.1.
---
 gnu/packages/ldc.scm   |  15 ++-
 .../patches/ldc-0.17.1-disable-tests.patch | 147 +
 2 files changed, 156 insertions(+), 6 deletions(-)
 create mode 100644 gnu/packages/patches/ldc-0.17.1-disable-tests.patch

diff --git a/gnu/packages/ldc.scm b/gnu/packages/ldc.scm
index 560fa49..70b2c5e 100644
--- a/gnu/packages/ldc.scm
+++ b/gnu/packages/ldc.scm
@@ -29,6 +29,7 @@
   #:use-module (gnu packages compression)
   #:use-module (gnu packages libedit)
   #:use-module (gnu packages llvm)
+  #:use-module (gnu packages python)
   #:use-module (gnu packages textutils)
   #:use-module (gnu packages zip))
 
@@ -76,7 +77,7 @@ and freshness without requiring additional information from the user.")
 (define-public ldc
   (package
 (name "ldc")
-(version "0.16.1")
+(version "0.17.1")
 (source (origin
   (method url-fetch)
   (uri (string-append
@@ -85,7 +86,7 @@ and freshness without requiring additional information from the user.")
   (file-name (string-append name "-" version ".tar.gz"))
   (sha256
(base32
-"1jvilxx0rpqmkbja4m69fhd5g09697xq7vyqp2hz4hvxmmmv4j40"
+"0rwggnbr60jbajfdw11kx058llmwljiss8rrv8df07vaygiv845i"
 (build-system cmake-build-system)
 ;; LDC currently only supports the x86_64 and i686 architectures.
 (supported-systems '("x86_64-linux" "i686-linux"))
@@ -130,6 +131,8 @@ and freshness without requiring additional information from the user.")
  `(("llvm" ,llvm-3.7)
("clang" ,clang-3.7)
("unzip" ,unzip)
+   ("python-wrapper" ,python-wrapper) ; Needed for running tests
+   ("python-lit" ,python-lit) ; Needed for running tests
("phobos-src"
 ,(origin
(method url-fetch)
@@ -138,8 +141,8 @@ and freshness without requiring additional information from the user.")
  version ".tar.gz"))
(sha256
 (base32
- "0sgdj0536c4nb118yiw1f8lqy5d3g3lpg9l99l165lk9xy45l9z4"))
-   (patches (search-patches "ldc-disable-tests.patch"
+ "17nb1yvqblqj3q42c8nlnwvy823fw6kna28n2b48j4m6kd2w0nan"))
+   (patches (search-patches "ldc-0.17.1-disable-tests.patch"
("druntime-src"
 ,(origin
(method url-fetch)
@@ -148,7 +151,7 @@ and freshness without requiring additional information from the user.")
  version ".tar.gz"))
(sha256
 (base32
- "0z4mkyddx6c4sy1vqgqvavz55083dsxws681qkh93jh1rpby9yg6"
+ "129j7mfd0vnzaw7i6hr5waxm5cb0qcm8gyawy2xy5avlv8hrw5m4"
("dmd-testsuite-src"
 ,(origin
(method url-fetch)
@@ -157,7 +160,7 @@ and freshness without requiring additional information from the user.")
  version ".tar.gz"))
(sha256
 (base32
- "0yc6miidzgl9k33ygk7xcppmfd6kivqj02cvv4fmkbs3qz4yy3z1"))
+ "18h16lwwmr3k9dh7mcip17il72mz680wnygv9d0mdnivczn80zyv"))
 (home-page "http://wiki.dlang.org/LDC";)
 (synopsis "LLVM compiler for the D programming language")
 (description
diff --git a/gnu/packages/patches/ldc-0.17.1-disable-tests.patch b/gnu/packages/patches/ldc-0.17.1-disable-tests.patch
new file mode 100644
index 000..ee73077
--- /dev/null
+++ b/gnu/packages/patches/ldc-0.17.1-disable-tests.patch
@@ -0,0 +1,147 @@
+Only in b/std: algorithm
+Only in b/std: array.d
+Only in b/std: ascii.d
+Only in b/std: base64.d
+Only in b/std: bigint.d
+Only in b/std: bitmanip.d
+Only in b/std: c
+Only in b/std: compiler.d
+Only in b/std: complex.d
+Only in b/std: concurrency.d
+Only in b/std: container
+Only in b/std: conv.d
+Only in b/std: cstream.d
+Only in b/std: csv.d
+diff -ru a/std/datetime.d b/std/datetime.d
+--- a/std/datetime.d	2016-08-02 23:56:13.969292202 +0200
 b/std/datetime.d	2016-08-02 23:57:39.078408313 +0200
+@@ -28080,9 +28080,6 @@
+ import std.algorithm : sort;
+ import std.range : retro;
+ import std.format : format;
+-
+-name = strip(name);
+-
+ enforce(tzDatabaseDir.exists(), new DateTimeException(format("Directory %s does not exist.", tzDatabaseDir)));
+ enforce(tzDatabaseDir.isDir, new DateTimeException(format("%s is not a directory.", tzDatabaseDir)));
+ 
+@@ -28094,7 +28091,10 @@
+ immutable file = buildNormalizedPath(tzDatabaseDir, tzFilename);
+ }
+ else
+-immutable file = buildNormalizedPath(tzDatabaseDir, name);
++{
++auto filename = "./" ~ strip(name); // make sure the prefix is not stripped
++immutable file = buildNormalizedPath(tzDatabaseDir, filename);
++}
+ 
+ enforce(file.exists(), new DateTimeException(format("File %s does not exist.", file)));
+ enforce(file.isFile, new DateTimeException(format("%s is