diff --git a/lang/chicken-scheme/Makefile b/lang/chicken-scheme/Makefile index 2ab9904694c4b5..7026b00d7d0289 100644 --- a/lang/chicken-scheme/Makefile +++ b/lang/chicken-scheme/Makefile @@ -1,4 +1,4 @@ -# Copyright (C) 2019-2020 Jerônimo Cordoni Pellegrini +# Copyright (C) 2019-2024 Jerônimo Pellegrini # # This file is free software, licensed under the GNU General Public License v3 # or later. @@ -8,13 +8,13 @@ include $(TOPDIR)/rules.mk PKG_NAME:=chicken-scheme -PKG_VERSION:=5.2.0 -PKG_RELEASE:=2 +PKG_VERSION:=5.4.0 +PKG_RELEASE:=1 PKG_BUILD_DIR:=$(BUILD_DIR)/chicken-$(PKG_VERSION) PKG_SOURCE:=chicken-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=https://code.call-cc.org/releases/$(PKG_VERSION)/ -PKG_HASH:=819149c8ce7303a9b381d3fdc1d5765c5f9ac4dee6f627d1652f47966a8780fa +PKG_HASH:=3c5d4aa61c1167bf6d9bf9eaf891da7630ba9f5f3c15bf09515a7039bfcdec5f PKG_MAINTAINER:=Jeronimo Pellegrini PKG_LICENSE:=BSD-3-Clause @@ -30,9 +30,12 @@ define Package/chicken-scheme/Default ABI_VERSION:=11 endef -## -## chicken-scheme-interpreter -## + +############################### +### +### chicken-scheme-interpreter +### +############################### define Package/chicken-scheme-interpreter $(call Package/chicken-scheme/Default) @@ -73,10 +76,15 @@ $(eval $(call BuildPackage,chicken-scheme-interpreter)) -## -## chicken-scheme-full -## +######################## +### +### chicken-scheme-full +### +######################## +## ABOUT NOT STRIPPING THE BINARIES: +## -------------------------------- +# # mips-openwrt-linux-musl-gcc dowsn't seem to link with libchicken.so. # already tried -lchicken and passing /usr/lib/libchicken.so on the command # line. @@ -84,16 +92,17 @@ $(eval $(call BuildPackage,chicken-scheme-interpreter)) # # current solution: we do not strip binaries in chicken-scheme-full # we do this by unsetting STRIP and RSTRIP, *and* reloading rules.mk -# +# Here: STRIP:=: RSTRIP:=: + include $(TOPDIR)/rules.mk define Package/chicken-scheme-full $(call Package/chicken-scheme/Default) TITLE+=full package # csc depends on gcc; chicken-install uses the 'install' command from coreutils - DEPENDS:=gcc coreutils-install + DEPENDS:=+gcc +coreutils-install endef define Package/chicken-scheme-full/description diff --git a/lang/chicken-scheme/patches/00.fix-flags-passed-from-csc-to-gcc.patch b/lang/chicken-scheme/patches/00.fix-flags-passed-from-csc-to-gcc.patch new file mode 100644 index 00000000000000..837c21eba44724 --- /dev/null +++ b/lang/chicken-scheme/patches/00.fix-flags-passed-from-csc-to-gcc.patch @@ -0,0 +1,33 @@ +From: Jeronimo Pellegrini +Date: 2025-11-20 +Subject: Patch description - fix Chicken Scheme compiler behavior + +Chicken is a Scheme interpreter and compiler. csi is the interpreter, +and csc is the compiler, which translates Scheme into C and calls gcc. + +This patch changes the compiler, csc. + +The Chicken build system will dynamically build the file chicken-config.h, +and for OpenWRT this is done *inside the buildroot*. But then, the values +in that file are hardcoded into the csc binary, and they don't work well +in the target device: +1. -ldl is passed to ld +2. -fmacro-prefix-map=... is passed to gcc, with the original path from the + buildroot +and these two will not work on OpenWRT (and are not needed anyway), so the +patch included actually modifies the build system to remove those two flags. +Then csc works on the target device! + +Signed-off-by: Jeronimo Pellegrini + +--- a/defaults.make ++++ b/defaults.make +@@ -506,6 +506,8 @@ else + endif + $(call echo, >>, $@,#endif) + $(call echo, >>, $@,/* END OF FILE */) ++ # For OpenWRT: ++ sed -i -e's/\-fmacro-prefix-map[^ ]*//' -e's/\-ldl//' $@ + + chicken-install.rc: + $(call echo, >, $@,/* GENERATED */) diff --git a/lang/chicken-scheme/test.sh b/lang/chicken-scheme/test.sh new file mode 100644 index 00000000000000..7c0c445fada5c8 --- /dev/null +++ b/lang/chicken-scheme/test.sh @@ -0,0 +1,22 @@ +#!/bin/sh + +# Tries to run csi to check if the version is the same that +# we believe is being built. +csi -version 2>1 | grep -F "$2" + +if [ $? -ne 0 ] +then + echo "csi version different from expected" + return 1 +fi + +# Tries to compile silent.scm. If it fails, then csc is not +# suitable for packaging. We just send an S-expression to its +# standard input. If this fails, csc is not working. +echo "(+ 2 3)" | csc - + +if [ $? -ne 0 ]; then + echo "csc cannot compile a s-expression from standard input" + return 2 +fi +