summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'dev-scheme/chicken')
-rw-r--r--dev-scheme/chicken/Manifest2
-rw-r--r--dev-scheme/chicken/chicken-4.8.0.3-r1.ebuild93
-rw-r--r--dev-scheme/chicken/files/50hen-gentoo.el5
-rw-r--r--dev-scheme/chicken/files/chicken-4.5.0-r0-ARCH-to-zARCH-hack.patch210
-rw-r--r--dev-scheme/chicken/files/chicken-4.7.3-parallel-build.patch74
-rw-r--r--dev-scheme/chicken/files/chicken-4.8.0.3-CVE-2013-1874.patch25
-rw-r--r--dev-scheme/chicken/files/chicken-4.8.0.3-CVE-2013-2024.patch47
-rw-r--r--dev-scheme/chicken/files/chicken-4.8.0.3-CVE-2013-2075_1.patch161
-rw-r--r--dev-scheme/chicken/files/chicken-4.8.0.3-CVE-2013-2075_2.patch309
-rw-r--r--dev-scheme/chicken/files/chicken-4.8.0.3-parallel-build.patch74
-rw-r--r--dev-scheme/chicken/metadata.xml25
11 files changed, 1025 insertions, 0 deletions
diff --git a/dev-scheme/chicken/Manifest b/dev-scheme/chicken/Manifest
new file mode 100644
index 000000000000..03cf7036c1ab
--- /dev/null
+++ b/dev-scheme/chicken/Manifest
@@ -0,0 +1,2 @@
+DIST chicken-4.8.0.3-cve-updates.tar.bz2 218025 SHA256 3e4de410766b09706be156d8460a39a8382365470f46f2da545a577a4f986502 SHA512 2ad05fbc414fe536d94a63e4d57c98c3bb19267f99e636c2039cd2c3984778fb7f7a0765c64ed6dbe4c438c14bdc94d1f83a626191e0cb817eeca5ea1e480132 WHIRLPOOL b0c7a0280ff08e1ca66a8155e3917f6b12c4e9d9b94f2b354046d3d4cbc598d5edb43c4a210d30fda59c9a4654e95adfe7b21a0aa84ab795e46b37128235ec1e
+DIST chicken-4.8.0.3.tar.gz 3959422 SHA256 6a1414e6f35586e47d7f4470eaf1779a4f73dec664b14bebf8763dd804b399c3 SHA512 8a716953fe7eeaea9039e90c5a2abad7fbe341a580176abe870c7b78bfdd11f1291d90bb9df43334b7f7ea484695ba59eba3558b9e360e5e9bd21fa106679197 WHIRLPOOL f55ca79a7df54dce9612b444a5a6a767b9b18cb9ba48a91bb5abab799d260e6c8aef83dade54d38013f41cc4d4b8bbdcda77513d75c91ab038289c6eabcca2fb
diff --git a/dev-scheme/chicken/chicken-4.8.0.3-r1.ebuild b/dev-scheme/chicken/chicken-4.8.0.3-r1.ebuild
new file mode 100644
index 000000000000..925f2fc8445e
--- /dev/null
+++ b/dev-scheme/chicken/chicken-4.8.0.3-r1.ebuild
@@ -0,0 +1,93 @@
+# Copyright 1999-2013 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Id$
+
+EAPI="3"
+
+inherit eutils multilib versionator
+
+MY_PV=$(get_version_component_range 1-3)
+DESCRIPTION="Chicken is a Scheme interpreter and native Scheme to C compiler"
+HOMEPAGE="http://www.call-cc.org/"
+SRC_URI="http://code.call-cc.org/releases/${MY_PV}/${P}.tar.gz
+ mirror://gentoo/${P}-cve-updates.tar.bz2"
+
+LICENSE="BSD"
+SLOT="0"
+KEYWORDS="alpha amd64 ppc ppc64 x86"
+IUSE="emacs parallel-build doc"
+
+DEPEND="sys-apps/texinfo
+ emacs? ( virtual/emacs )"
+RDEPEND="emacs? ( virtual/emacs app-emacs/scheme-complete )"
+
+src_prepare() {
+ #these patch .scm source files
+ # bug 467966
+ epatch "${FILESDIR}"/${P}-CVE-2013-2024.patch
+ # bug 469392
+ epatch "${FILESDIR}"/${P}-CVE-2013-2075_1.patch \
+ "${FILESDIR}"/${P}-CVE-2013-2075_2.patch
+ # bug 462458
+ epatch "${FILESDIR}"/${P}-CVE-2013-1874.patch
+
+ # buildsystem tries to generate .c out of patched .scm files,
+ # which fails w/o installed chicken binary
+ # touch and add precompiled .c files
+ touch ../${P}-cve-updates/*
+ mv -v ../${P}-cve-updates/* .
+
+ if use "parallel-build"
+ then
+ epatch "${FILESDIR}"/${P}-parallel-build.patch
+ fi
+
+ #Because chicken's Upstream is in the habit of using variables that
+ #portage also uses :( eg. $ARCH and $A
+ sed 's,A\(\s?=\|)\),chicken&,' -i Makefile.cross-linux-mingw \
+ defaults.make rules.make \
+ || die "sed failed"
+
+ sed "s,ARCH,zARCH," -i Makefile.bsd Makefile.cross-linux-mingw \
+ Makefile.cygwin Makefile.haiku Makefile.linux Makefile.macosx \
+ Makefile.mingw Makefile.mingw-msys Makefile.solaris \
+ defaults.make rules.make \
+ || die "sed failed"
+
+ sed "s,\$(PREFIX)/lib,\$(PREFIX)/$(get_libdir)," -i defaults.make || die "sed failed"
+ sed "s,\$(DATADIR)/doc,\$(SHAREDIR)/doc/${P}," -i defaults.make || die "sed failed"
+}
+
+src_compile() {
+ OPTIONS="PLATFORM=linux PREFIX=/usr"
+ if use "parallel-build"
+ then
+ emake ${OPTIONS} C_COMPILER_OPTIMIZATION_OPTIONS="${CFLAGS}" \
+ LINKER_OPTIONS="${LDFLAGS}" \
+ HOSTSYSTEM="${CBUILD}" || die "emake failed"
+ else
+ emake -j1 ${OPTIONS} C_COMPILER_OPTIMIZATION_OPTIONS="${CFLAGS}" \
+ LINKER_OPTIONS="${LDFLAGS}" \
+ HOSTSYSTEM="${CBUILD}" || die "emake failed"
+ fi
+}
+
+# chicken's testsuite is not runnable before install
+# upstream has been notified of the issue
+RESTRICT=test
+
+src_install() {
+ # still can't run make in parallel for the install target
+ emake -j1 ${OPTIONS} DESTDIR="${D}" HOSTSYSTEM="${CBUILD}" \
+ LINKER_OPTIONS="${LDFLAGS}" \
+ install || die
+
+ rm "${D}"/usr/share/doc/${P}/LICENSE || die
+ dodoc NEWS || die
+
+ # remove HTML documentation if the user doesn't USE=doc
+ if ! use "doc"
+ then
+ rm -rf "${D}"/usr/share/doc/${P}/manual || die
+ fi
+}
diff --git a/dev-scheme/chicken/files/50hen-gentoo.el b/dev-scheme/chicken/files/50hen-gentoo.el
new file mode 100644
index 000000000000..712b287ded9f
--- /dev/null
+++ b/dev-scheme/chicken/files/50hen-gentoo.el
@@ -0,0 +1,5 @@
+
+;;; chicken site-lisp configuration
+
+(add-to-list 'load-path "@SITELISP@")
+(autoload 'hen-mode "hen" "Major mode for Chicken Scheme source." t)
diff --git a/dev-scheme/chicken/files/chicken-4.5.0-r0-ARCH-to-zARCH-hack.patch b/dev-scheme/chicken/files/chicken-4.5.0-r0-ARCH-to-zARCH-hack.patch
new file mode 100644
index 000000000000..33527cd7f4cf
--- /dev/null
+++ b/dev-scheme/chicken/files/chicken-4.5.0-r0-ARCH-to-zARCH-hack.patch
@@ -0,0 +1,210 @@
+diff -ru a//defaults.make b//defaults.make
+--- a//defaults.make 2010-05-11 18:50:35.000000000 +0300
++++ b//defaults.make 2010-06-07 21:24:55.000000000 +0300
+@@ -31,7 +31,7 @@
+ STACKDIRECTION ?= 1
+ CROSS_CHICKEN ?= 0
+
+-ifeq ($(ARCH),x86-64)
++ifeq ($(zARCH),x86-64)
+ NURSERY ?= (256*1024)
+ else
+ NURSERY ?= (128*1024)
+@@ -272,10 +272,10 @@
+ POSIXFILE ?= posixunix
+ CHICKEN_CONFIG_H = chicken-config.h
+
+-ifneq ($(ARCH),)
++ifneq ($(zARCH),)
+ HACKED_APPLY ?= 1
+-APPLY_HACK_SRC ?= apply-hack.$(ARCH)$(ASM)
+-APPLY_HACK_OBJECT ?= apply-hack.$(ARCH)$(O)
++APPLY_HACK_SRC ?= apply-hack.$(zARCH)$(ASM)
++APPLY_HACK_OBJECT ?= apply-hack.$(zARCH)$(O)
+ endif
+
+ ifeq ($(HACKED_APPLY),)
+diff -ru a//Makefile.bsd b//Makefile.bsd
+--- a//Makefile.bsd 2010-05-11 18:50:34.000000000 +0300
++++ b//Makefile.bsd 2010-06-07 21:24:25.000000000 +0300
+@@ -33,7 +33,7 @@
+
+ # platform configuration
+
+-ARCH ?= $(shell sh $(SRCDIR)/config-arch.sh)
++zARCH ?= $(shell sh $(SRCDIR)/config-arch.sh)
+
+ # options
+
+diff -ru a//Makefile.cross-linux-mingw b//Makefile.cross-linux-mingw
+--- a//Makefile.cross-linux-mingw 2010-05-11 18:50:34.000000000 +0300
++++ b//Makefile.cross-linux-mingw 2010-06-07 21:23:02.000000000 +0300
+@@ -34,7 +34,7 @@
+ # platform configuration
+
+ DLLSINPATH = 1
+-ARCH ?= x86
++zARCH ?= x86
+ HACKED_APPLY = 1
+ WINDOWS = 1
+
+@@ -72,7 +72,7 @@
+
+ # special files
+
+-APPLY_HACK_OBJECT = apply-hack.$(ARCH)$(O)
++APPLY_HACK_OBJECT = apply-hack.$(zARCH)$(O)
+ POSIXFILE = posixwin
+
+ # select default and internal settings
+diff -ru a//Makefile.cygwin b//Makefile.cygwin
+--- a//Makefile.cygwin 2010-05-11 18:50:34.000000000 +0300
++++ b//Makefile.cygwin 2010-06-07 21:24:07.000000000 +0300
+@@ -33,7 +33,7 @@
+
+ # platform configuration
+
+-ARCH ?= x86
++zARCH ?= x86
+ HACKED_APPLY ?= 1
+ DLLSINPATH = 1
+
+@@ -76,7 +76,7 @@
+ # special files
+
+ CHICKEN_CONFIG_H = chicken-config.h
+-APPLY_HACK_OBJECT = apply-hack.$(ARCH)$(O)
++APPLY_HACK_OBJECT = apply-hack.$(zARCH)$(O)
+
+ # select default and internal settings
+
+diff -ru a//Makefile.linux b//Makefile.linux
+--- a//Makefile.linux 2010-05-11 18:50:34.000000000 +0300
++++ b//Makefile.linux 2010-06-07 21:25:31.000000000 +0300
+@@ -33,7 +33,7 @@
+
+ # platform configuration
+
+-ARCH ?= $(shell sh $(SRCDIR)/config-arch.sh)
++zARCH ?= $(shell sh $(SRCDIR)/config-arch.sh)
+
+ # options
+
+diff -ru a//Makefile.macosx b//Makefile.macosx
+--- a//Makefile.macosx 2010-05-11 18:50:34.000000000 +0300
++++ b//Makefile.macosx 2010-06-07 21:23:51.000000000 +0300
+@@ -33,7 +33,7 @@
+
+ # platform configuration
+
+-ARCH ?= $(shell sh $(SRCDIR)/config-arch.sh)
++zARCH ?= $(shell sh $(SRCDIR)/config-arch.sh)
+
+ # commands
+
+@@ -64,19 +64,19 @@
+ # special files
+
+ CHICKEN_CONFIG_H = chicken-config.h
+-APPLY_HACK_OBJECT = apply-hack.$(ARCH)$(O)
++APPLY_HACK_OBJECT = apply-hack.$(zARCH)$(O)
+ HACKED_APPLY ?= 1
+
+ # architectures
+
+-ifeq ($(ARCH),x86-64)
++ifeq ($(zARCH),x86-64)
+ C_COMPILER_OPTIONS += -m64
+ LINKER_OPTIONS += -m64
+ # Avoid bus error in install_name_tool
+ LINKER_LINK_SHARED_DLOADABLE_OPTIONS += -Wl,-headerpad -Wl,128
+ else
+
+-ifeq ($(ARCH),universal)
++ifeq ($(zARCH),universal)
+ C_COMPILER_OPTIONS += -arch ppc -arch i386 -isysroot /Developer/SDKs/MacOSX10.4u.sdk
+ LINKER_OPTIONS += -arch ppc -arch i386 -isysroot /Developer/SDKs/MacOSX10.4u.sdk
+ endif
+@@ -126,7 +126,7 @@
+ endif
+ cat chicken-defaults.h >>$@
+
+-ifeq ($(ARCH),universal)
++ifeq ($(zARCH),universal)
+ ifneq ($(HACKED_APPLY),)
+ # We undefine HACKED_APPLY in order to override rules.make
+ # with our own build rules.
+diff -ru a//Makefile.mingw b//Makefile.mingw
+--- a//Makefile.mingw 2010-05-11 18:50:34.000000000 +0300
++++ b//Makefile.mingw 2010-06-07 21:25:59.000000000 +0300
+@@ -36,12 +36,12 @@
+ # platform configuration
+
+ DLLSINPATH = 1
+-ARCH ?= x86
++zARCH ?= x86
+ WINDOWS = 1
+ WINDOWS_SHELL = 1
+ UNAME_SYS = MinGW
+
+-ifeq ($(ARCH),x86)
++ifeq ($(zARCH),x86)
+ HACKED_APPLY ?= 1
+ else
+ HACKED_APPLY =
+@@ -79,7 +79,7 @@
+ # special files
+
+ CHICKEN_CONFIG_H = chicken-config.h
+-APPLY_HACK_OBJECT = apply-hack.$(ARCH)$(O)
++APPLY_HACK_OBJECT = apply-hack.$(zARCH)$(O)
+ POSIXFILE = posixwin
+
+ # select default and internal settings
+diff -ru a//Makefile.mingw-msys b//Makefile.mingw-msys
+--- a//Makefile.mingw-msys 2010-05-11 18:50:34.000000000 +0300
++++ b//Makefile.mingw-msys 2010-06-07 21:26:33.000000000 +0300
+@@ -34,8 +34,8 @@
+ # platform configuration
+
+ DLLSINPATH = 1
+-ARCH ?= x86
+-ifeq ($(ARCH),x86)
++zARCH ?= x86
++ifeq ($(zARCH),x86)
+ HACKED_APPLY ?= 1
+ else
+ HACKED_APPLY =
+@@ -79,7 +79,7 @@
+ # special files
+
+ CHICKEN_CONFIG_H = chicken-config.h
+-APPLY_HACK_OBJECT = apply-hack.$(ARCH)$(O)
++APPLY_HACK_OBJECT = apply-hack.$(zARCH)$(O)
+ POSIXFILE = posixwin
+
+ # select default and internal settings
+diff -ru a//Makefile.solaris b//Makefile.solaris
+--- a//Makefile.solaris 2010-05-11 18:50:34.000000000 +0300
++++ b//Makefile.solaris 2010-06-07 21:25:45.000000000 +0300
+@@ -33,7 +33,7 @@
+
+ # platform configuration
+
+-ARCH ?= $(shell sh $(SRCDIR)/config-arch.sh)
++zARCH ?= $(shell sh $(SRCDIR)/config-arch.sh)
+
+ # options
+
+diff -ru a//rules.make b//rules.make
+--- a//rules.make 2010-05-11 18:50:36.000000000 +0300
++++ b//rules.make 2010-06-07 21:26:10.000000000 +0300
+@@ -453,7 +453,7 @@
+ # assembler objects
+
+ ifneq ($(HACKED_APPLY),)
+-$(APPLY_HACK_OBJECT): $(SRCDIR)apply-hack.$(ARCH)$(ASM)
++$(APPLY_HACK_OBJECT): $(SRCDIR)apply-hack.$(zARCH)$(ASM)
+ $(ASSEMBLER) $(ASSEMBLER_OPTIONS) $(ASSEMBLER_COMPILE_OPTION) $< $(ASSEMBLER_OUTPUT)
+ endif
+
diff --git a/dev-scheme/chicken/files/chicken-4.7.3-parallel-build.patch b/dev-scheme/chicken/files/chicken-4.7.3-parallel-build.patch
new file mode 100644
index 000000000000..6d9628701481
--- /dev/null
+++ b/dev-scheme/chicken/files/chicken-4.7.3-parallel-build.patch
@@ -0,0 +1,74 @@
+diff --git a/GNUmakefile b/GNUmakefile
+index 9bc40ca..c697f14 100644
+--- a/GNUmakefile
++++ b/GNUmakefile
+@@ -49,6 +49,9 @@ STANDARD_TARGETS \
+ fullcheck libs install-target install-dev bench
+
+ .PHONY: $(STANDARD_TARGETS) dist boot-chicken
++# Build this file's targets sequentially. This avoids executing overlapping
++# makes if the user specifies multiple targets.
++.NOTPARALLEL:
+
+ $(STANDARD_TARGETS):
+ $(MAKE) -f $(SRCDIR)/Makefile.$(PLATFORM) CONFIG=$(CONFIG) $@
+diff --git a/README b/README
+index 8d0d067..551b716 100644
+--- a/README
++++ b/README
+@@ -72,7 +72,7 @@
+ platforms.
+
+ Note that parallel builds (using the "-j" make(1) option) are
+- *not* supported.
++ also supported. Beware that parallel install will not work though.
+
+ If you invoke "make" later with different configuration parameters,
+ it is advisable to run:
+diff --git a/rules.make b/rules.make
+index 929b0a3..a8cb9b0 100644
+--- a/rules.make
++++ b/rules.make
+@@ -243,8 +243,8 @@ lib$(PROGRAM_PREFIX)chicken$(PROGRAM_SUFFIX)$(A): $(APPLY_HACK_OBJECT) $(LIBCHIC
+
+ # import libraries and extensions
+
+-%.so: %.o
+- $(LINKER) $(LINKER_OPTIONS) $(LINKER_LINK_SHARED_DLOADABLE_OPTIONS) $^ $(LINKER_OUTPUT_OPTION) $@ \
++%.so: %.o $(PRIMARY_LIBCHICKEN)
++ $(LINKER) $(LINKER_OPTIONS) $(LINKER_LINK_SHARED_DLOADABLE_OPTIONS) $< $(LINKER_OUTPUT_OPTION) $@ \
+ $(LINKER_LIBRARY_PREFIX)$(PROGRAM_PREFIX)chicken$(PROGRAM_SUFFIX)$(LINKER_LIBRARY_SUFFIX) \
+ $(LIBRARIES)
+
+@@ -578,9 +578,9 @@ chicken-profile.c: $(SRCDIR)chicken-profile.scm
+ $(CHICKEN) $< $(CHICKEN_PROGRAM_OPTIONS) -output-file $@
+ chicken-install.c: $(SRCDIR)chicken-install.scm setup-download.c setup-api.c
+ $(CHICKEN) $< $(CHICKEN_PROGRAM_OPTIONS) -output-file $@
+-chicken-uninstall.c: $(SRCDIR)chicken-uninstall.scm
++chicken-uninstall.c: $(SRCDIR)chicken-uninstall.scm setup-api.c
+ $(CHICKEN) $< $(CHICKEN_PROGRAM_OPTIONS) -output-file $@
+-chicken-status.c: $(SRCDIR)chicken-status.scm
++chicken-status.c: $(SRCDIR)chicken-status.scm setup-api.c
+ $(CHICKEN) $< $(CHICKEN_PROGRAM_OPTIONS) -output-file $@
+ csc.c: $(SRCDIR)csc.scm
+ $(CHICKEN) $< $(CHICKEN_PROGRAM_OPTIONS) -output-file $@
+@@ -671,14 +671,17 @@ bench: $(CHICKEN_SHARED_EXECUTABLE) $(CSI_SHARED_EXECUTABLE) $(CSC_PROGRAM)$(EXE
+ .PHONY: boot-chicken
+
+ boot-chicken:
++ $(MAKE) -f Makefile.$(PLATFORM) PLATFORM=$(PLATFORM) CONFIG= confclean
+ $(MAKE) -f Makefile.$(PLATFORM) PLATFORM=$(PLATFORM) PREFIX=/nowhere CONFIG= \
+ SRCDIR=$(SRCDIR) CHICKEN=$(CHICKEN) PROGRAM_SUFFIX=-boot-stage1 STATICBUILD=1 \
+ C_COMPILER_OPTIMIZATION_OPTIONS= C_HACKED_APPLY= \
+- confclean chicken-boot-stage1$(EXE)
++ chicken-boot-stage1$(EXE)
++ $(MAKE) -f Makefile.$(PLATFORM) PLATFORM=$(PLATFORM) CONFIG= touchfiles
+ $(MAKE) -f Makefile.$(PLATFORM) PLATFORM=$(PLATFORM) PREFIX=/nowhere CONFIG= \
+ SRCDIR=$(SRCDIR) CHICKEN=`pwd`/chicken-boot-stage1$(EXE) PROGRAM_SUFFIX=-boot \
+ STATICBUILD=1 C_COMPILER_OPTIMIZATION_OPTIONS= \
+- touchfiles chicken-boot$(EXE) confclean
++ chicken-boot$(EXE)
++ $(MAKE) -f Makefile.$(PLATFORM) PLATFORM=$(PLATFORM) CONFIG= confclean
+
+ .PHONY: touchfiles
+
diff --git a/dev-scheme/chicken/files/chicken-4.8.0.3-CVE-2013-1874.patch b/dev-scheme/chicken/files/chicken-4.8.0.3-CVE-2013-1874.patch
new file mode 100644
index 000000000000..599ae61d322f
--- /dev/null
+++ b/dev-scheme/chicken/files/chicken-4.8.0.3-CVE-2013-1874.patch
@@ -0,0 +1,25 @@
+From http://lists.nongnu.org/archive/html/chicken-hackers/2013-03/msg00074.html
+--- chicken-4.8.0.3/csi.scm
++++ chicken-4.8.0.3/csi.scm
+@@ -1019,13 +1019,11 @@ EOF
+ (cons (cadr p) (loop (cddr p)))) ) ]
+ [else '()] ) ) )
+ (define (loadinit)
+- (let ([fn (##sys#string-append "./" init-file)])
+- (if (file-exists? fn)
+- (load fn)
+- (let* ([prefix (chop-separator (or (get-environment-variable "HOME") "."))]
+- [fn (string-append prefix "/" init-file)] )
+- (when (file-exists? fn)
+- (load fn) ) ) ) ) )
++ (and-let* ((home (get-environment-variable "HOME"))
++ ((not (string=? home ""))))
++ (let ((fn (string-append (chop-separator home) "/" init-file)))
++ (when (file-exists? fn)
++ (load fn) ) ) ) )
+ (define (evalstring str #!optional (rec (lambda _ (void))))
+ (let ((in (open-input-string str)))
+ (do ([x (read in) (read in)])
+--
+1.7.12
+
diff --git a/dev-scheme/chicken/files/chicken-4.8.0.3-CVE-2013-2024.patch b/dev-scheme/chicken/files/chicken-4.8.0.3-CVE-2013-2024.patch
new file mode 100644
index 000000000000..d57a4bce970a
--- /dev/null
+++ b/dev-scheme/chicken/files/chicken-4.8.0.3-CVE-2013-2024.patch
@@ -0,0 +1,47 @@
+From http://code.call-cc.org/cgi-bin/gitweb.cgi?p=chicken-core.git;a=commit;h=58684f69572453acc6fed7326fa9df39be98760e
+--- chicken-4.8.0.3/setup-api.scm
++++ chicken-4.8.0.3/setup-api.scm
+@@ -239,7 +239,7 @@
+ (cond ((string=? prg "csc")
+ (string-intersperse
+ (cons*
+- (shellpath (find-program "csc"))
++ (find-program "csc")
+ "-feature" "compiling-extension"
+ (if (or (deployment-mode)
+ (and (feature? #:cross-chicken)
+--- chicken-4.8.0.3/utils.scm
++++ chicken-4.8.0.3/utils.scm
+@@ -59,20 +59,18 @@
+ ;;; Quote string for shell
+
+ (define (qs str #!optional (platform (build-platform)))
+- (case platform
+- ((mingw32)
+- (string-append "\"" str "\""))
+- (else
+- (if (zero? (string-length str))
+- "''"
+- (string-concatenate
+- (map (lambda (c)
+- (if (or (char-whitespace? c)
+- (memq c '(#\# #\" #\' #\` #\´ #\~ #\& #\% #\$ #\! #\* #\;
+- #\< #\> #\\ #\( #\) #\[ #\] #\{ #\} #\?)))
+- (string #\\ c)
+- (string c)))
+- (string->list str)))))))
++ (let ((delim (if (eq? platform 'mingw32) #\" #\'))
++ (escaped (if (eq? platform 'mingw32) "\"\"" "'\\''")))
++ (string-append
++ (string delim)
++ (string-concatenate
++ (map (lambda (c)
++ (cond
++ ((char=? c delim) escaped)
++ ((char=? c #\nul) (error 'qs "NUL character can not be represented in shell string" str))
++ (else (string c))))
++ (string->list str)))
++ (string delim))))
+
+
+ ;;; Compile and load file
diff --git a/dev-scheme/chicken/files/chicken-4.8.0.3-CVE-2013-2075_1.patch b/dev-scheme/chicken/files/chicken-4.8.0.3-CVE-2013-2075_1.patch
new file mode 100644
index 000000000000..d3de47bb6ece
--- /dev/null
+++ b/dev-scheme/chicken/files/chicken-4.8.0.3-CVE-2013-2075_1.patch
@@ -0,0 +1,161 @@
+From 9e2022652258e8a30e5cedbf0abc9cd85a0f6af7 Mon Sep 17 00:00:00 2001
+From: Peter Bex <peter.bex@xs4all.nl>
+Date: Thu, 18 Apr 2013 00:31:08 +0200
+Subject: [PATCH] Implement file-select in terms of POSIX poll() for UNIX
+
+Signed-off-by: felix <felix@call-with-current-continuation.org>
+---
+ posixunix.scm | 116 ++++++++++++++++++++++++++------------------------------
+ 1 files changed, 54 insertions(+), 62 deletions(-)
+
+diff --git a/posixunix.scm b/posixunix.scm
+index 15cb535..90e0176 100644
+--- a/posixunix.scm
++++ b/posixunix.scm
+@@ -67,6 +67,7 @@ static C_TLS int C_wait_status;
+ #endif
+
+ #include <sys/mman.h>
++#include <sys/poll.h>
+ #include <time.h>
+
+ #ifndef O_FSYNC
+@@ -136,7 +137,6 @@ static C_TLS struct {
+ static C_TLS int C_pipefds[ 2 ];
+ static C_TLS time_t C_secs;
+ static C_TLS struct tm C_tm;
+-static C_TLS fd_set C_fd_sets[ 2 ];
+ static C_TLS struct timeval C_timeval;
+ static C_TLS char C_hostbuf[ 256 ];
+ static C_TLS struct stat C_statbuf;
+@@ -303,13 +303,6 @@ static C_TLS sigset_t C_sigset;
+ #define C_fseek(p, n, w) C_mk_nbool(fseek(C_port_file(p), C_num_to_int(n), C_unfix(w)))
+ #define C_lseek(fd, o, w) C_fix(lseek(C_unfix(fd), C_unfix(o), C_unfix(w)))
+
+-#define C_zero_fd_set(i) FD_ZERO(&C_fd_sets[ i ])
+-#define C_set_fd_set(i, fd) FD_SET(fd, &C_fd_sets[ i ])
+-#define C_test_fd_set(i, fd) FD_ISSET(fd, &C_fd_sets[ i ])
+-#define C_C_select(m) C_fix(select(C_unfix(m), &C_fd_sets[ 0 ], &C_fd_sets[ 1 ], NULL, NULL))
+-#define C_C_select_t(m, t) (C_set_timeval(t, &C_timeval), \
+- C_fix(select(C_unfix(m), &C_fd_sets[ 0 ], &C_fd_sets[ 1 ], NULL, &C_timeval)))
+-
+ #define C_ctime(n) (C_secs = (n), ctime(&C_secs))
+
+ #if defined(__SVR4) || defined(C_MACOSX)
+@@ -656,60 +649,59 @@ EOF
+
+ ;;; I/O multiplexing:
+
+-(define file-select
+- (let ([fd_zero (foreign-lambda void "C_zero_fd_set" int)]
+- [fd_set (foreign-lambda void "C_set_fd_set" int int)]
+- [fd_test (foreign-lambda bool "C_test_fd_set" int int)] )
+- (lambda (fdsr fdsw . timeout)
+- (let ([fdmax 0]
+- [tm (if (pair? timeout) (car timeout) #f)] )
+- (fd_zero 0)
+- (fd_zero 1)
+- (cond [(not fdsr)]
+- [(fixnum? fdsr)
+- (set! fdmax fdsr)
+- (fd_set 0 fdsr) ]
+- [else
+- (##sys#check-list fdsr 'file-select)
+- (for-each
+- (lambda (fd)
+- (##sys#check-exact fd 'file-select)
+- (set! fdmax (##core#inline "C_i_fixnum_max" fdmax fd))
+- (fd_set 0 fd) )
+- fdsr) ] )
+- (cond [(not fdsw)]
+- [(fixnum? fdsw)
+- (set! fdmax fdsw)
+- (fd_set 1 fdsw) ]
+- [else
+- (##sys#check-list fdsw 'file-select)
+- (for-each
+- (lambda (fd)
+- (##sys#check-exact fd 'file-select)
+- (set! fdmax (##core#inline "C_i_fixnum_max" fdmax fd))
+- (fd_set 1 fd) )
+- fdsw) ] )
+- (let ([n (cond [tm
+- (##sys#check-number tm 'file-select)
+- (##core#inline "C_C_select_t" (fx+ fdmax 1) tm) ]
+- [else (##core#inline "C_C_select" (fx+ fdmax 1))] ) ] )
+- (cond [(fx< n 0)
+- (posix-error #:file-error 'file-select "failed" fdsr fdsw) ]
+- [(fx= n 0) (values (if (pair? fdsr) '() #f) (if (pair? fdsw) '() #f))]
+- [else
+- (values
+- (and fdsr
+- (if (fixnum? fdsr)
+- (fd_test 0 fdsr)
+- (let ([lstr '()])
+- (for-each (lambda (fd) (when (fd_test 0 fd) (set! lstr (cons fd lstr)))) fdsr)
+- lstr) ) )
+- (and fdsw
+- (if (fixnum? fdsw)
+- (fd_test 1 fdsw)
+- (let ([lstw '()])
+- (for-each (lambda (fd) (when (fd_test 1 fd) (set! lstw (cons fd lstw)))) fdsw)
+- lstw) ) ) ) ] ) ) ) ) ) )
++(define (file-select fdsr fdsw . timeout)
++ (let* ((tm (if (pair? timeout) (car timeout) #f))
++ (fdsrl (cond ((not fdsr) '())
++ ((fixnum? fdsr) (list fdsr))
++ (else (##sys#check-list fdsr 'file-select)
++ fdsr)))
++ (fdswl (cond ((not fdsw) '())
++ ((fixnum? fdsw) (list fdsw))
++ (else (##sys#check-list fdsw 'file-select)
++ fdsw)))
++ (nfdsr (##sys#length fdsrl))
++ (nfdsw (##sys#length fdswl))
++ (nfds (fx+ nfdsr nfdsw))
++ (fds-blob (##sys#make-blob
++ (fx* nfds (foreign-value "sizeof(struct pollfd)" int)))))
++ (when tm (##sys#check-number tm))
++ (do ((i 0 (fx+ i 1))
++ (fdsrl fdsrl (cdr fdsrl)))
++ ((null? fdsrl))
++ ((foreign-lambda* void ((int i) (int fd) (scheme-pointer p))
++ "struct pollfd *fds = p;"
++ "fds[i].fd = fd; fds[i].events = POLLIN;") i (car fdsrl) fds-blob))
++ (do ((i nfdsr (fx+ i 1))
++ (fdswl fdswl (cdr fdswl)))
++ ((null? fdswl))
++ ((foreign-lambda* void ((int i) (int fd) (scheme-pointer p))
++ "struct pollfd *fds = p;"
++ "fds[i].fd = fd; fds[i].events = POLLOUT;") i (car fdswl) fds-blob))
++ (let ((n ((foreign-lambda int "poll" scheme-pointer int int)
++ fds-blob nfds (if tm (inexact->exact (* (max 0 tm) 1000)) -1))))
++ (cond ((fx< n 0)
++ (posix-error #:file-error 'file-select "failed" fdsr fdsw) )
++ ((fx= n 0) (values (if (pair? fdsr) '() #f) (if (pair? fdsw) '() #f)))
++ (else
++ (let ((rl (let lp ((i 0) (res '()) (fds fdsrl))
++ (cond ((null? fds) (##sys#fast-reverse res))
++ (((foreign-lambda* bool ((int i) (scheme-pointer p))
++ "struct pollfd *fds = p;"
++ "C_return(fds[i].revents & (POLLIN|POLLERR|POLLHUP|POLLNVAL));")
++ i fds-blob)
++ (lp (fx+ i 1) (cons (car fds) res) (cdr fds)))
++ (else (lp (fx+ i 1) res (cdr fds))))))
++ (wl (let lp ((i nfdsr) (res '()) (fds fdswl))
++ (cond ((null? fds) (##sys#fast-reverse res))
++ (((foreign-lambda* bool ((int i) (scheme-pointer p))
++ "struct pollfd *fds = p;"
++ "C_return(fds[i].revents & (POLLOUT|POLLERR|POLLHUP|POLLNVAL));")
++ i fds-blob)
++ (lp (fx+ i 1) (cons (car fds) res) (cdr fds)))
++ (else (lp (fx+ i 1) res (cdr fds)))))))
++ (values
++ (and fdsr (if (fixnum? fdsr) (and (memq fdsr rl) fdsr) rl))
++ (and fdsw (if (fixnum? fdsw) (and (memq fdsw wl) fdsw) wl)))))))))
+
+
+ ;;; File attribute access:
+--
+1.7.2.1
+
diff --git a/dev-scheme/chicken/files/chicken-4.8.0.3-CVE-2013-2075_2.patch b/dev-scheme/chicken/files/chicken-4.8.0.3-CVE-2013-2075_2.patch
new file mode 100644
index 000000000000..b85ea7c8b259
--- /dev/null
+++ b/dev-scheme/chicken/files/chicken-4.8.0.3-CVE-2013-2075_2.patch
@@ -0,0 +1,309 @@
+From http://code.call-cc.org/cgi-bin/gitweb.cgi?p=chicken-core.git;a=commitdiff;h=556108092774086b6c86c2e27daf3f740ffec091
+
+--- chicken-4.8.0.3/chicken.h
++++ chicken-4.8.0.3/chicken.h
+@@ -1668,6 +1668,7 @@
+ C_fctexport C_word C_fcall C_read_char(C_word port) C_regparm;
+ C_fctexport C_word C_fcall C_peek_char(C_word port) C_regparm;
+ C_fctexport C_word C_fcall C_execute_shell_command(C_word string) C_regparm;
++C_fctexport int C_fcall C_check_fd_ready(int fd) C_regparm;
+ C_fctexport C_word C_fcall C_char_ready_p(C_word port) C_regparm;
+ C_fctexport C_word C_fcall C_fudge(C_word fudge_factor) C_regparm;
+ C_fctexport void C_fcall C_raise_interrupt(int reason) C_regparm;
+--- chicken-4.8.0.3/posixunix.scm
++++ chicken-4.8.0.3/posixunix.scm
+@@ -493,16 +493,7 @@
+ "if(val == -1) C_return(0);"
+ "C_return(fcntl(fd, F_SETFL, val | O_NONBLOCK) != -1);" ) )
+
+-(define ##sys#file-select-one
+- (foreign-lambda* int ([int fd])
+- "fd_set in;"
+- "struct timeval tm;"
+- "FD_ZERO(&in);"
+- "FD_SET(fd, &in);"
+- "tm.tv_sec = tm.tv_usec = 0;"
+- "if(select(fd + 1, &in, NULL, NULL, &tm) == -1) C_return(-1);"
+- "else C_return(FD_ISSET(fd, &in) ? 1 : 0);" ) )
+-
++(define ##sys#file-select-one (foreign-lambda int "C_check_fd_ready" int) )
+
+ ;;; Lo-level I/O:
+
+--- chicken-4.8.0.3/runtime.c
++++ chicken-4.8.0.3/runtime.c
+@@ -60,6 +60,11 @@
+ # define EOVERFLOW 0
+ #endif
+
++/* TODO: Include sys/select.h? Windows doesn't seem to have it... */
++#ifdef HAVE_POSIX_POLL
++# include <poll.h>
++#endif
++
+ #if !defined(C_NONUNIX)
+
+ # include <sys/types.h>
+@@ -4036,20 +4041,39 @@
+ return C_fix(n);
+ }
+
++/*
++ * TODO: Implement something for Windows that supports selecting on
++ * arbitrary fds (there, select() only works on network sockets and
++ * poll() is not available at all).
++ */
++C_regparm int C_fcall C_check_fd_ready(int fd)
++{
++#ifdef HAVE_POSIX_POLL
++ struct pollfd ps;
++ ps.fd = fd;
++ ps.events = POLLIN;
++ return poll(&ps, 1, 0);
++#else
++ fd_set in;
++ struct timeval tm;
++ int rv;
++ FD_ZERO(&in);
++ FD_SET(fd, &in);
++ tm.tv_sec = tm.tv_usec = 0;
++ rv = select(fd + 1, &in, NULL, NULL, &tm);
++ if(rv > 0) { rv = FD_ISSET(fd, &in) ? 1 : 0; }
++ return rv;
++#endif
++}
+
+ C_regparm C_word C_fcall C_char_ready_p(C_word port)
+ {
+-#if !defined(C_NONUNIX)
+- fd_set fs;
+- struct timeval to;
+- int fd = C_fileno(C_port_file(port));
+-
+- FD_ZERO(&fs);
+- FD_SET(fd, &fs);
+- to.tv_sec = to.tv_usec = 0;
+- return C_mk_bool(C_select(fd + 1, &fs, NULL, NULL, &to) == 1);
+-#else
++#if defined(C_NONUNIX)
++ /* The best we can currently do on Windows... */
+ return C_SCHEME_TRUE;
++#else
++ int fd = C_fileno(C_port_file(port));
++ return C_mk_bool(C_check_fd_ready(fd) == 1);
+ #endif
+ }
+
+--- chicken-4.8.0.3/tcp.scm
++++ chicken-4.8.0.3/tcp.scm
+@@ -46,6 +46,7 @@
+ # define fcntl(a, b, c) 0
+ # define EWOULDBLOCK 0
+ # define EINPROGRESS 0
++# define EAGAIN 0
+ # define typecorrect_getsockopt(socket, level, optname, optval, optlen) \
+ getsockopt(socket, level, optname, (char *)optval, optlen)
+ #else
+@@ -111,6 +112,7 @@
+ (define ##net#recv (foreign-lambda int "recv" int scheme-pointer int int))
+ (define ##net#shutdown (foreign-lambda int "shutdown" int int))
+ (define ##net#connect (foreign-lambda int "connect" int scheme-pointer int))
++(define ##net#check-fd-ready (foreign-lambda int "C_check_fd_ready" int))
+
+ (define ##net#send
+ (foreign-lambda*
+@@ -177,30 +179,6 @@
+ if((se = getservbyname(serv, proto)) == NULL) C_return(0);
+ else C_return(ntohs(se->s_port));") )
+
+-(define ##net#select
+- (foreign-lambda* int ((int fd))
+- "fd_set in;
+- struct timeval tm;
+- int rv;
+- FD_ZERO(&in);
+- FD_SET(fd, &in);
+- tm.tv_sec = tm.tv_usec = 0;
+- rv = select(fd + 1, &in, NULL, NULL, &tm);
+- if(rv > 0) { rv = FD_ISSET(fd, &in) ? 1 : 0; }
+- C_return(rv);") )
+-
+-(define ##net#select-write
+- (foreign-lambda* int ((int fd))
+- "fd_set out;
+- struct timeval tm;
+- int rv;
+- FD_ZERO(&out);
+- FD_SET(fd, &out);
+- tm.tv_sec = tm.tv_usec = 0;
+- rv = select(fd + 1, NULL, &out, NULL, &tm);
+- if(rv > 0) { rv = FD_ISSET(fd, &out) ? 1 : 0; }
+- C_return(rv);") )
+-
+ (define ##net#gethostaddr
+ (foreign-lambda* bool ((scheme-pointer saddr) (c-string host) (unsigned-short port))
+ "struct hostent *he = gethostbyname(host);"
+@@ -212,13 +190,6 @@
+ "addr->sin_addr = *((struct in_addr *)he->h_addr);"
+ "C_return(1);") )
+
+-(define (yield)
+- (##sys#call-with-current-continuation
+- (lambda (return)
+- (let ((ct ##sys#current-thread))
+- (##sys#setslot ct 1 (lambda () (return (##core#undefined))))
+- (##sys#schedule) ) ) ) )
+-
+ (define ##net#parse-host
+ (let ((substring substring))
+ (lambda (host proto)
+@@ -343,7 +314,9 @@
+ (outbufsize (tbs))
+ (outbuf (and outbufsize (fx> outbufsize 0) ""))
+ (tmr (tcp-read-timeout))
++ (dlr (and tmr (+ (current-milliseconds) tmr)))
+ (tmw (tcp-write-timeout))
++ (dlw (and tmw (+ (current-milliseconds) tmw)))
+ (read-input
+ (lambda ()
+ (let loop ()
+@@ -351,12 +324,11 @@
+ (cond ((eq? -1 n)
+ (cond ((or (eq? errno _ewouldblock)
+ (eq? errno _eagain))
+- (when tmr
+- (##sys#thread-block-for-timeout!
+- ##sys#current-thread
+- (+ (current-milliseconds) tmr) ) )
++ (when dlr
++ (##sys#thread-block-for-timeout!
++ ##sys#current-thread dlr) )
+ (##sys#thread-block-for-i/o! ##sys#current-thread fd #:input)
+- (yield)
++ (##sys#thread-yield!)
+ (when (##sys#slot ##sys#current-thread 13)
+ (##sys#signal-hook
+ #:network-timeout-error
+@@ -386,7 +358,7 @@
+ c) ) )
+ (lambda ()
+ (or (fx< bufindex buflen)
+- (let ((f (##net#select fd)))
++ (let ((f (##net#check-fd-ready fd)))
+ (when (eq? f -1)
+ (##sys#update-errno)
+ (##sys#signal-hook
+@@ -469,12 +441,11 @@
+ (cond ((eq? -1 n)
+ (cond ((or (eq? errno _ewouldblock)
+ (eq? errno _eagain))
+- (when tmw
++ (when dlw
+ (##sys#thread-block-for-timeout!
+- ##sys#current-thread
+- (+ (current-milliseconds) tmw) ) )
+- (##sys#thread-block-for-i/o! ##sys#current-thread fd #:output)
+- (yield)
++ ##sys#current-thread dlw) )
++ (##sys#thread-block-for-i/o! ##sys#current-thread fd #:output)
++ (##sys#thread-yield!)
+ (when (##sys#slot ##sys#current-thread 13)
+ (##sys#signal-hook
+ #:network-timeout-error
+@@ -528,38 +499,29 @@
+
+ (define (tcp-accept tcpl)
+ (##sys#check-structure tcpl 'tcp-listener)
+- (let ((fd (##sys#slot tcpl 1))
+- (tma (tcp-accept-timeout)))
++ (let* ((fd (##sys#slot tcpl 1))
++ (tma (tcp-accept-timeout))
++ (dla (and tma (+ tma (current-milliseconds)))))
+ (let loop ()
+- (if (eq? 1 (##net#select fd))
+- (let ((fd (##net#accept fd #f #f)))
+- (cond ((not (eq? -1 fd)) (##net#io-ports fd))
+- ((eq? errno _eintr)
+- (##sys#dispatch-interrupt loop))
+- (else
+- (##sys#update-errno)
+- (##sys#signal-hook
+- #:network-error
+- 'tcp-accept
+- (##sys#string-append "could not accept from listener - " strerror)
+- tcpl))))
+- (begin
+- (when tma
+- (##sys#thread-block-for-timeout!
+- ##sys#current-thread
+- (+ (current-milliseconds) tma) ) )
+- (##sys#thread-block-for-i/o! ##sys#current-thread fd #:input)
+- (yield)
+- (when (##sys#slot ##sys#current-thread 13)
+- (##sys#signal-hook
+- #:network-timeout-error
+- 'tcp-accept
+- "accept operation timed out" tma fd) )
+- (loop) ) ) ) ) )
++ (when dla
++ (##sys#thread-block-for-timeout! ##sys#current-thread dla) )
++ (##sys#thread-block-for-i/o! ##sys#current-thread fd #:input)
++ (##sys#thread-yield!)
++ (if (##sys#slot ##sys#current-thread 13)
++ (##sys#signal-hook
++ #:network-timeout-error
++ 'tcp-accept
++ "accept operation timed out" tma fd) )
++ (let ((fd (##net#accept fd #f #f)))
++ (cond ((not (eq? -1 fd)) (##net#io-ports fd))
++ ((eq? errno _eintr)
++ (##sys#dispatch-interrupt loop))
++ (else
++ (network-error 'tcp-accept "could not accept from listener" tcpl)))) ) ) )
+
+ (define (tcp-accept-ready? tcpl)
+ (##sys#check-structure tcpl 'tcp-listener 'tcp-accept-ready?)
+- (let ((f (##net#select (##sys#slot tcpl 1))))
++ (let ((f (##net#check-fd-ready (##sys#slot tcpl 1))))
+ (when (eq? -1 f)
+ (##sys#update-errno)
+ (##sys#signal-hook
+@@ -578,8 +540,9 @@
+ (define general-strerror (foreign-lambda c-string "strerror" int))
+
+ (define (tcp-connect host . more)
+- (let ((port (optional more #f))
+- (tmc (tcp-connect-timeout)))
++ (let* ((port (optional more #f))
++ (tmc (tcp-connect-timeout))
++ (dlc (and tmc (+ (current-milliseconds) tmc))))
+ (##sys#check-string host)
+ (unless port
+ (set!-values (host port) (##net#parse-host host "tcp"))
+@@ -606,23 +569,9 @@
+ (let loop ()
+ (when (eq? -1 (##net#connect s addr _sockaddr_in_size))
+ (cond ((eq? errno _einprogress)
+- (let loop2 ()
+- (let ((f (##net#select-write s)))
+- (when (eq? f -1) (fail))
+- (unless (eq? f 1)
+- (when tmc
+- (##sys#thread-block-for-timeout!
+- ##sys#current-thread
+- (+ (current-milliseconds) tmc) ) )
+- (##sys#thread-block-for-i/o! ##sys#current-thread s #:all)
+- (yield)
+- (when (##sys#slot ##sys#current-thread 13)
+- (##net#close s)
+- (##sys#signal-hook
+- #:network-timeout-error
+- 'tcp-connect
+- "connect operation timed out" tmc s) )
+- (loop2) ) ) ))
++ (when dlc
++ (##sys#thread-block-for-timeout! ##sys#current-thread dlc))
++ (##sys#thread-block-for-i/o! ##sys#current-thread s #:all))
+ ((eq? errno _eintr)
+ (##sys#dispatch-interrupt loop))
+ (else (fail) ) )))
diff --git a/dev-scheme/chicken/files/chicken-4.8.0.3-parallel-build.patch b/dev-scheme/chicken/files/chicken-4.8.0.3-parallel-build.patch
new file mode 100644
index 000000000000..a42dd2ea4c14
--- /dev/null
+++ b/dev-scheme/chicken/files/chicken-4.8.0.3-parallel-build.patch
@@ -0,0 +1,74 @@
+diff --git a/GNUmakefile b/GNUmakefile
+index 9bc40ca..c697f14 100644
+--- a/GNUmakefile
++++ b/GNUmakefile
+@@ -49,6 +49,9 @@ STANDARD_TARGETS \
+ fullcheck libs install-target install-dev bench
+
+ .PHONY: $(STANDARD_TARGETS) dist boot-chicken
++# Build this file's targets sequentially. This avoids executing overlapping
++# makes if the user specifies multiple targets.
++.NOTPARALLEL:
+
+ $(STANDARD_TARGETS):
+ $(MAKE) -f $(SRCDIR)/Makefile.$(PLATFORM) CONFIG=$(CONFIG) $@
+diff --git a/README b/README
+index 8d0d067..551b716 100644
+--- a/README
++++ b/README
+@@ -72,7 +72,7 @@
+ platforms.
+
+ Note that parallel builds (using the "-j" make(1) option) are
+- *not* supported.
++ also supported. Beware that parallel install will not work though.
+
+ If you invoke "make" later with different configuration parameters,
+ it is advisable to run:
+diff --git a/rules.make b/rules.make
+index 929b0a3..a8cb9b0 100644
+--- a/rules.make
++++ b/rules.make
+@@ -243,8 +243,8 @@ lib$(PROGRAM_PREFIX)chicken$(PROGRAM_SUFFIX)$(A): $(APPLY_HACK_OBJECT) $(LIBCHIC
+
+ # import libraries and extensions
+
+-%.so: %.o
+- $(LINKER) $(LINKER_OPTIONS) $(LINKER_LINK_SHARED_DLOADABLE_OPTIONS) $^ $(LINKER_OUTPUT_OPTION) $@ \
++%.so: %.o $(PRIMARY_LIBCHICKEN)
++ $(LINKER) $(LINKER_OPTIONS) $(LINKER_LINK_SHARED_DLOADABLE_OPTIONS) $< $(LINKER_OUTPUT_OPTION) $@ \
+ $(LINKER_LIBRARY_PREFIX)$(PROGRAM_PREFIX)chicken$(PROGRAM_SUFFIX)$(LINKER_LIBRARY_SUFFIX) \
+ $(LIBRARIES)
+
+@@ -582,9 +582,9 @@ chicken-profile.c: $(SRCDIR)chicken-profile.scm
+ $(CHICKEN) $< $(CHICKEN_PROGRAM_OPTIONS) -output-file $@
+ chicken-install.c: $(SRCDIR)chicken-install.scm setup-download.c setup-api.c
+ $(CHICKEN) $< $(CHICKEN_PROGRAM_OPTIONS) -output-file $@
+-chicken-uninstall.c: $(SRCDIR)chicken-uninstall.scm
++chicken-uninstall.c: $(SRCDIR)chicken-uninstall.scm setup-api.c
+ $(CHICKEN) $< $(CHICKEN_PROGRAM_OPTIONS) -output-file $@
+-chicken-status.c: $(SRCDIR)chicken-status.scm
++chicken-status.c: $(SRCDIR)chicken-status.scm setup-api.c
+ $(CHICKEN) $< $(CHICKEN_PROGRAM_OPTIONS) -output-file $@
+ csc.c: $(SRCDIR)csc.scm
+ $(CHICKEN) $< $(CHICKEN_PROGRAM_OPTIONS) -output-file $@
+@@ -675,14 +675,17 @@ bench: $(CHICKEN_SHARED_EXECUTABLE) $(CSI_SHARED_EXECUTABLE) $(CSC_PROGRAM)$(EXE
+ .PHONY: boot-chicken
+
+ boot-chicken:
++ $(MAKE) -f Makefile.$(PLATFORM) PLATFORM=$(PLATFORM) CONFIG= confclean
+ $(MAKE) -f Makefile.$(PLATFORM) PLATFORM=$(PLATFORM) PREFIX=/nowhere CONFIG= \
+ CHICKEN=$(CHICKEN) PROGRAM_SUFFIX=-boot-stage1 STATICBUILD=1 \
+ C_COMPILER_OPTIMIZATION_OPTIONS= C_HACKED_APPLY= BUILDING_CHICKEN_BOOT=1 \
+- confclean chicken-boot-stage1$(EXE)
++ chicken-boot-stage1$(EXE)
++ $(MAKE) -f Makefile.$(PLATFORM) PLATFORM=$(PLATFORM) CONFIG= touchfiles
+ $(MAKE) -f Makefile.$(PLATFORM) PLATFORM=$(PLATFORM) PREFIX=/nowhere CONFIG= \
+ CHICKEN=.$(SEP)chicken-boot-stage1$(EXE) PROGRAM_SUFFIX=-boot \
+ STATICBUILD=1 C_COMPILER_OPTIMIZATION_OPTIONS= \
+- touchfiles chicken-boot$(EXE) confclean
++ chicken-boot$(EXE)
++ $(MAKE) -f Makefile.$(PLATFORM) PLATFORM=$(PLATFORM) CONFIG= confclean
+
+ .PHONY: touchfiles
+
diff --git a/dev-scheme/chicken/metadata.xml b/dev-scheme/chicken/metadata.xml
new file mode 100644
index 000000000000..cc5af33bd39b
--- /dev/null
+++ b/dev-scheme/chicken/metadata.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+<herd>scheme</herd>
+<herd>proxy-maintainers</herd>
+<maintainer>
+ <email>ewfalor@gmail.com</email>
+ <name>Erik Falor</name>
+</maintainer>
+<maintainer>
+ <email>maksbotan@gentoo.org</email>
+ <name>Maxim Koltsov</name>
+</maintainer>
+<longdescription>
+CHICKEN is a compiler for the Scheme programming language. CHICKEN produces
+portable, efficient C, supports almost all of the current Scheme language
+standard, the Revised5 Report on the Algorithmic Language Scheme (R5RS ), and
+includes many enhancements and extensions. CHICKEN runs on MacOS X, Windows, and
+many Unix flavours.
+</longdescription>
+<use>
+ <flag name="parallel-build">Enable testing parallel build mode added in
+ 4.7.3 version. Can still be not working</flag>
+</use>
+</pkgmetadata>