~ chicken-core (chicken-5) afc06e05cbca79e351bdcd47b29368c20b4af5ab


commit afc06e05cbca79e351bdcd47b29368c20b4af5ab
Author:     Christian Kellermann <ckeen@pestilenz.org>
AuthorDate: Thu Oct 24 10:21:54 2013 +0200
Commit:     Peter Bex <peter.bex@xs4all.nl>
CommitDate: Fri Nov 8 15:41:21 2013 +0100

    Make The Hurd a first class target
    
    This patch adds a Makefile which is currently a clone of the linux
    one. The Hurd also uses ELF binaries so it gets added to the list for
    csc.
    
    Also define PATH_MAX for now (1024).
    
    Signed-off-by: Peter Bex <peter.bex@xs4all.nl>

diff --git a/Makefile.hurd b/Makefile.hurd
new file mode 100644
index 00000000..74c8c007
--- /dev/null
+++ b/Makefile.hurd
@@ -0,0 +1,110 @@
+# Makefile.hurd - configuration for Hurd -*- Makefile -*-
+#
+# Copyright (c) 2008-2013, The Chicken Team
+# Copyright (c) 2007, Felix L. Winkelmann
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following
+# conditions are met:
+#
+#   Redistributions of source code must retain the above copyright notice, this list of conditions and the following
+#     disclaimer.
+#   Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following
+#     disclaimer in the documentation and/or other materials provided with the distribution.
+#   Neither the name of the author nor the names of its contributors may be used to endorse or promote
+#     products derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
+# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
+# AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
+
+ifneq ($(CONFIG),)
+include $(CONFIG)
+endif
+
+SRCDIR ?= ./
+
+# platform configuration
+
+ARCH ?= $(shell sh $(SRCDIR)/config-arch.sh)
+
+# options
+
+C_COMPILER_OPTIONS ?= -fno-strict-aliasing -fwrapv -DHAVE_CHICKEN_CONFIG_H
+ifdef DEBUGBUILD
+C_COMPILER_OPTIMIZATION_OPTIONS ?= -g -Wall -Wno-unused
+else
+ifdef OPTIMIZE_FOR_SPEED
+C_COMPILER_OPTIMIZATION_OPTIONS ?= -O3 -fomit-frame-pointer
+else
+C_COMPILER_OPTIMIZATION_OPTIONS ?= -Os -fomit-frame-pointer
+endif
+endif
+LINKER_LINK_SHARED_LIBRARY_OPTIONS = -shared
+LINKER_LINK_SHARED_DLOADABLE_OPTIONS = -L. -shared -Wl,-R"$(RUNTIME_LINKER_PATH)"
+LINKER_LINK_SHARED_PROGRAM_OPTIONS = -Wl,-R"$(RUNTIME_LINKER_PATH)"
+LIBCHICKEN_SO_LINKER_OPTIONS = -Wl,-soname,lib$(PROGRAM_PREFIX)chicken$(PROGRAM_SUFFIX).so.$(BINARYVERSION)
+LIBRARIES = -lm -ldl
+NEEDS_RELINKING = yes
+USES_SONAME = yes
+
+# special files
+
+CHICKEN_CONFIG_H = chicken-config.h
+
+# select default and internal settings
+
+include $(SRCDIR)/defaults.make
+
+chicken-config.h: chicken-defaults.h
+	echo "/* GENERATED */" >$@
+	echo "#define HAVE_DIRENT_H 1" >>$@
+	echo "#define HAVE_DLFCN_H 1" >>$@
+	echo "#define HAVE_INTTYPES_H 1" >>$@
+	echo "#define HAVE_LIMITS_H 1" >>$@
+	echo "#define HAVE_LONG_LONG 1" >>$@
+	echo "#define HAVE_MEMMOVE 1" >>$@
+	echo "#define HAVE_MEMORY_H 1" >>$@
+	echo "#define HAVE_POSIX_POLL 1" >>$@
+	echo "#define HAVE_SIGACTION 1" >>$@
+	echo "#define HAVE_SIGSETJMP 1" >>$@
+	echo "#define HAVE_SIGPROCMASK 1" >>$@
+	echo "#define HAVE_STDINT_H 1" >>$@
+	echo "#define HAVE_STDLIB_H 1" >>$@
+	echo "#define HAVE_STRERROR 1" >>$@
+	echo "#define HAVE_STRINGS_H 1" >>$@
+	echo "#define HAVE_STRING_H 1" >>$@
+	echo "#define HAVE_STRTOLL 1" >>$@
+	echo "#define HAVE_STRTOQ 1" >>$@
+	echo "#define HAVE_SYS_STAT_H 1" >>$@
+	echo "#define HAVE_SYS_TYPES_H 1" >>$@
+	echo "#define HAVE_UNISTD_H 1" >>$@
+	echo "#define HAVE_UNSIGNED_LONG_LONG 1" >>$@
+	echo "#define STDC_HEADERS 1" >>$@
+	echo "#define HAVE_ALLOCA 1" >>$@
+	echo "#define HAVE_ALLOCA_H 1" >>$@
+	echo "#define HAVE_GRP_H 1" >>$@
+	echo "#define HAVE_ERRNO_H 1" >>$@
+	echo "#define HAVE_GCVT 1" >>$@
+	echo "#define HAVE_SYSEXITS_H 1" >>$@
+	echo "#define HAVE_MEMMOVE 1" >>$@
+	echo "#define C_STACK_GROWS_DOWNWARD 1" >>$@
+ifdef GCHOOKS
+	echo "#define C_GC_HOOKS" >>$@
+endif
+ifdef SYMBOLGC
+	echo "#define C_COLLECT_ALL_SYMBOLS" >>$@
+endif
+ifneq ($(HACKED_APPLY),)
+	echo "#define C_HACKED_APPLY" >>$@
+endif
+	cat chicken-defaults.h >>$@
+
+include $(SRCDIR)/rules.make
diff --git a/NEWS b/NEWS
index 2137e335..e91d57aa 100644
--- a/NEWS
+++ b/NEWS
@@ -15,6 +15,7 @@
 
 - Platform support
   - CHICKEN can now be built on AIX (contributed by Erik Falor)
+  - CHICKEN can now be built on GNU Hurd (contributed by Christian Kellermann)
 
 4.8.2
 
diff --git a/chicken.h b/chicken.h
index 89b8cc44..0ef4cc13 100644
--- a/chicken.h
+++ b/chicken.h
@@ -725,6 +725,10 @@ static inline int isinf_ld (long double x)
 # endif
 #elif defined(_AIX)
 # define C_SOFTWARE_VERSION "aix"
+#elif defined(__GNU__)
+# define C_SOFTWARE_VERSION "hurd"
+/* This is as silly as the other limits, there is no PATH_MAX in The Hurd */
+# define PATH_MAX 1024
 #else
 # define C_SOFTWARE_VERSION "unknown"
 #endif
diff --git a/csc.scm b/csc.scm
index 1582e2de..bf76b60d 100644
--- a/csc.scm
+++ b/csc.scm
@@ -73,7 +73,7 @@
 (define aix (eq? (build-platform) 'aix))
 
 (define elf
-  (memq (software-version) '(linux netbsd freebsd solaris openbsd)))
+  (memq (software-version) '(linux netbsd freebsd solaris openbsd hurd)))
 
 (define (stop msg . args)
   (fprintf (current-error-port) "~a: ~?~%" CSC_PROGRAM msg args)
diff --git a/distribution/manifest b/distribution/manifest
index 32da5357..11c0aab3 100644
--- a/distribution/manifest
+++ b/distribution/manifest
@@ -226,6 +226,7 @@ Makefile.solaris
 Makefile.bsd
 Makefile.cygwin
 Makefile.haiku
+Makefile.hurd
 Makefile.cross-linux-mingw
 GNUmakefile
 config.make
Trap