diff --git a/Makefile.am b/Makefile.am index 8f8cb12c85..c9653505e7 100644 --- a/Makefile.am +++ b/Makefile.am @@ -37,7 +37,9 @@ GOBJECTS = $(MODULES:%.scm=%.go) nobase_dist_guilemodule_DATA = \ $(MODULES) \ - distro/guile-1.8-cpp-4.5.patch + distro/guile-1.8-cpp-4.5.patch \ + distro/m4-readlink-EINVAL.patch \ + distro/m4-s_isdir.patch nobase_nodist_guilemodule_DATA = $(GOBJECTS) diff --git a/distro/base.scm b/distro/base.scm index 8492f1029a..86f9811ed4 100644 --- a/distro/base.scm +++ b/distro/base.scm @@ -108,6 +108,54 @@ code.") (home-page "http://www.gnu.org/software/hello/") (license "GPLv3+"))) +(define-public m4 + (package + (name "m4") + (version "1.4.16") + (source (origin + (method http-fetch) + (uri (string-append "http://ftp.gnu.org/gnu/m4/m4-" + version ".tar.bz2")) + (sha256 + (base32 + "035r7ma272j2cwni2961jp22k6bn3n9xwn3b3qbcn2yrvlghql22")))) + (build-system gnu-build-system) + (arguments (case-lambda + ((system) + ;; XXX: Disable tests on those platforms with know issues. + `(#:tests? ,(not (member system + '("x86_64-darwin" + "i686-cygwin" + "i686-sunos"))) + #:patches (list (assoc-ref %build-inputs "patch/s_isdir") + (assoc-ref %build-inputs + "patch/readlink-EINVAL")))) + ((system cross-system) + `(#:patches (list (assoc-ref %build-inputs "patch/s_isdir") + (assoc-ref %build-inputs + "patch/readlink-EINVAL")))))) + (inputs `(("patch/s_isdir" + ,(search-path %load-path "distro/m4-s_isdir.patch")) + ("patch/readlink-EINVAL" + ,(search-path %load-path "distro/m4-readlink-EINVAL.patch")))) + (description "GNU M4, a macro processor") + (long-description + "GNU M4 is an implementation of the traditional Unix macro processor. It +is mostly SVR4 compatible although it has some extensions (for example, +handling more than 9 positional parameters to macros). GNU M4 also has +built-in functions for including files, running shell commands, doing +arithmetic, etc. + +GNU M4 is a macro processor in the sense that it copies its input to the +output expanding macros as it goes. Macros are either builtin or +user-defined and can take any number of arguments. Besides just doing macro +expansion, m4 has builtin functions for including named files, running UNIX +commands, doing integer arithmetic, manipulating text in various ways, +recursion etc... m4 can be used either as a front-end to a compiler or as a +macro processor in its own right.") + (license "GPLv3+") + (home-page "http://www.gnu.org/software/m4/"))) + (define-public guile-1.8 (package (name "guile") diff --git a/distro/m4-readlink-EINVAL.patch b/distro/m4-readlink-EINVAL.patch new file mode 100644 index 0000000000..dd371584a7 --- /dev/null +++ b/distro/m4-readlink-EINVAL.patch @@ -0,0 +1,18 @@ +Newer Linux kernels would return EINVAL instead of ENOENT. +The patch below, taken from Gnulib, allows the test to pass when +these Linux versions are in use: +https://lists.gnu.org/archive/html/bug-gnulib/2011-03/msg00308.html . + +diff --git a/tests/test-readlink.h b/tests/test-readlink.h +index 08d5662..7247fc4 100644 +--- a/tests/test-readlink.h ++++ b/tests/test-readlink.h +@@ -38,7 +38,7 @@ test_readlink (ssize_t (*func) (char const *, char *, size_t), bool print) + ASSERT (errno == ENOENT); + errno = 0; + ASSERT (func ("", buf, sizeof buf) == -1); +- ASSERT (errno == ENOENT); ++ ASSERT (errno == ENOENT || errno == EINVAL); + errno = 0; + ASSERT (func (".", buf, sizeof buf) == -1); + ASSERT (errno == EINVAL); diff --git a/distro/m4-s_isdir.patch b/distro/m4-s_isdir.patch new file mode 100644 index 0000000000..a009a4ba44 --- /dev/null +++ b/distro/m4-s_isdir.patch @@ -0,0 +1,14 @@ +Fails to build with glibc 2.12.1 without this patch. + +http://lists.gnu.org/archive/html/bug-m4/2010-05/msg00002.html + +--- a/src/path.c ++++ b/src/path.c +@@ -22,6 +22,7 @@ + /* Handling of path search of included files via the builtins "include" + and "sinclude". */ + + #include "m4.h" ++#include "sys/stat.h" + + struct includes