chicken-scheme: split library and refactor
authorGeorge Sapkin <george@sapk.in>
Sun, 21 Dec 2025 22:40:01 +0000 (00:40 +0200)
committerGeorge Sapkin <george@sapk.in>
Mon, 22 Dec 2025 12:56:48 +0000 (14:56 +0200)
Split library into a separate package and refactor Makefile.

Strip all executable binaries without stripping the library that's
used by the compiler.

Add SPDX license identifier.

Signed-off-by: George Sapkin <george@sapk.in>
lang/chicken-scheme/Makefile

index 2ab9904694c4b54c31624242a27b4f38e0eda64a..8cd3860a00873aadbfaa56ee1c5ff739409fc96e 100644 (file)
@@ -1,15 +1,12 @@
 # Copyright (C) 2019-2020 Jerônimo Cordoni Pellegrini <j_p@aleph0.info>
 #
-# This file is free software, licensed under the GNU General Public License v3
-# or later.
-# See /LICENSE for details
-#
+# SPDX-License-Identifier: GPL-3.0-or-later
 
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=chicken-scheme
 PKG_VERSION:=5.2.0
-PKG_RELEASE:=2
+PKG_RELEASE:=3
 
 PKG_BUILD_DIR:=$(BUILD_DIR)/chicken-$(PKG_VERSION)
 PKG_SOURCE:=chicken-$(PKG_VERSION).tar.gz
@@ -22,120 +19,120 @@ PKG_LICENSE_FILES:=LICENSE
 
 include $(INCLUDE_DIR)/package.mk
 
+MAKE_FLAGS += \
+       C_COMPILER="$(TARGET_CC)" \
+       C_COMPILER_OPTIMIZATION_OPTIONS="$(TARGET_CFLAGS)" \
+       LINKER="$(TARGET_CC)" \
+       PLATFORM=linux \
+       PREFIX=/usr
+
+SSTRIP:=$(STRIP)
+STRIP:=:
+RSTRIP:=:
+
 define Package/chicken-scheme/Default
   TITLE:=Chicken Scheme
   SECTION:=lang
   CATEGORY:=Languages
   URL:=https://call-cc.org
+endef
+
+define Package/chicken-scheme/description/Default
+  Chicken is an implementation of the Scheme language. It is portable,
+  efficient, and supports the R5RS and R7RS (work in progress) standards, and
+  many extensions.
+  Chicken can be used as a scripting language to automate tasks.
+  For more information, please refer to the Chicken Scheme website at
+  https://call-cc.org.
+endef
+
+define Package/libchicken
+$(call Package/chicken-scheme/Default)
+  TITLE+= library
   ABI_VERSION:=11
 endef
 
-##
-## chicken-scheme-interpreter
-##
+define Package/libchicken/description
+$(call Package/chicken-scheme/description/Default)
+  This package contains the library.
+endef
 
 define Package/chicken-scheme-interpreter
 $(call Package/chicken-scheme/Default)
-  TITLE+=interpreter only
+  TITLE+= interpreter only
   CONFLICTS:=chicken-scheme-full
+  DEPENDS:=+libchicken
+  EXTRA_DEPENDS:=libchicken (=$(PKG_VERSION)-r$(PKG_RELEASE))
 endef
 
 define Package/chicken-scheme-interpreter/description
-  Chicken is an implementation of the Scheme language. It is portable, efficient, and supports
-  the R5RS and R7RS (work in progress) standards, and many extensions.
-  Chicken can be used as a scripting language to automate tasks.
-  This package contains the interpreter, 'csi', only --
-  the compiler and the package installer are not included because they depend on a C compiler.
-  For more information, please refer to the Chicken Scheme website at https://call-cc.org.
+$(call Package/chicken-scheme/description/Default)
+  This package contains the interpreter, 'csi', only -- the compiler and the
+  package installer are not included because they depend on a C compiler.
 endef
 
-MAKE_FLAGS += PLATFORM=linux C_COMPILER="$(TARGET_CC)" LINKER="$(TARGET_CC)" PREFIX=/usr C_COMPILER_OPTIMIZATION_OPTIONS="$(TARGET_CFLAGS)"
-
-# not installed:
-# - csc and chicken, the compiler
-# - the include dir (only useful with the compiler)
-# - install, uninstall, status, and chicken-do, which deal with modules
-#   (installation of more modules depends on the compiler)
-# - profiler
-# - feathers, the debugger
-# - libchicken.a, the static library
-define Package/chicken-scheme-interpreter/install
-       $(INSTALL_DIR)  $(1)/usr/bin
-       $(INSTALL_DIR)  $(1)/usr/lib/chicken/$(ABI_VERSION)
-       $(INSTALL_BIN) $(PKG_BUILD_DIR)/csi                 $(1)/usr/bin/
-       $(CP) $(PKG_BUILD_DIR)/libchicken.so.$(ABI_VERSION) $(1)/usr/lib/
-       $(CP) $(PKG_BUILD_DIR)/libchicken.so                $(1)/usr/lib/
-       $(CP) $(PKG_BUILD_DIR)/*.import.so                  $(1)/usr/lib/chicken/$(ABI_VERSION)/
-       $(CP) $(PKG_BUILD_DIR)/types.db                     $(1)/usr/lib/chicken/$(ABI_VERSION)/
-endef
-
-$(eval $(call BuildPackage,chicken-scheme-interpreter))
-
-
-
-##
-## chicken-scheme-full
-##
-
-# 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.
-# also tried -Wl,-R/usr/lib,-R/usr/lib/chicken/$(ABI_VERSION)
-#
-# current solution: we do not strip binaries in chicken-scheme-full
-# we do this by unsetting STRIP and RSTRIP, *and* reloading rules.mk
-#
-STRIP:=:
-RSTRIP:=:
-include $(TOPDIR)/rules.mk
-
+# csc depends on gcc; chicken-install uses the 'install' command from coreutils
 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
+  TITLE+= full package
+  DEPENDS:=+coreutils-install +gcc +libchicken
+  EXTRA_DEPENDS:=libchicken (=$(PKG_VERSION)-r$(PKG_RELEASE))
 endef
 
 define Package/chicken-scheme-full/description
-  Chicken is an implementation of the Scheme language. It is portable, efficient, and supports
-  the R5RS and R7RS (work in progress) standards, and many extensions.
-  Chicken can be used as a scripting language to automate tasks.
-  This package contains the interpreter, 'csi'; the compiler, 'csc';
-  the tools for installing and removing eggs (modules); the profiler and
-  the debugger.
+$(call Package/chicken-scheme/description/Default)
+  This package contains the interpreter, 'csi'; the compiler, 'csc'; the tools
+  for installing and removing eggs (modules); the profiler and the debugger.
   Note that this package depends on gcc, which is quite large (more than 100Mb).
-  For more information, please refer to the Chicken Scheme website at https://call-cc.org.
 endef
 
+define Build/Compile
+$(call Build/Compile/Default)
+       $(SSTRIP) $(PKG_BUILD_DIR)/chicken
+       $(SSTRIP) $(PKG_BUILD_DIR)/chicken-do
+       $(SSTRIP) $(PKG_BUILD_DIR)/chicken-install
+       $(SSTRIP) $(PKG_BUILD_DIR)/chicken-profile
+       $(SSTRIP) $(PKG_BUILD_DIR)/chicken-status
+       $(SSTRIP) $(PKG_BUILD_DIR)/chicken-uninstall
+       $(SSTRIP) $(PKG_BUILD_DIR)/csc
+       $(SSTRIP) $(PKG_BUILD_DIR)/csi
+endef
+
+define Package/libchicken/install
+       $(INSTALL_DIR) $(1)/usr/lib
+       $(CP) $(PKG_BUILD_DIR)/libchicken.so{,.$(ABI_VERSION)} $(1)/usr/lib
+
+       $(INSTALL_DIR) $(1)/usr/lib/chicken/$(ABI_VERSION)
+       $(CP) $(PKG_BUILD_DIR)/*.import.so $(1)/usr/lib/chicken/$(ABI_VERSION)
+       $(CP) $(PKG_BUILD_DIR)/types.db $(1)/usr/lib/chicken/$(ABI_VERSION)
+endef
+
+define Package/chicken-scheme-interpreter/install
+       $(INSTALL_DIR) $(1)/usr/bin
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/csi $(1)/usr/bin
+endef
 
-# not installed:
-# - libchicken.a, the static library
 define Package/chicken-scheme-full/install
-       $(INSTALL_DIR)  $(1)/usr/bin
-       $(INSTALL_DIR)  $(1)/usr/lib/chicken/$(ABI_VERSION)
-       $(INSTALL_DIR)  $(1)/usr/include/chicken
-       $(INSTALL_DIR)  $(1)/usr/share/chicken
-       $(INSTALL_BIN) $(PKG_BUILD_DIR)/csi                 $(1)/usr/bin/
-       $(CP) $(PKG_BUILD_DIR)/libchicken.so.$(ABI_VERSION) $(1)/usr/lib/
-       $(CP) $(PKG_BUILD_DIR)/libchicken.so                $(1)/usr/lib/
-       $(CP) $(PKG_BUILD_DIR)/*.import.so                  $(1)/usr/lib/chicken/$(ABI_VERSION)/
-       $(CP) $(PKG_BUILD_DIR)/types.db                     $(1)/usr/lib/chicken/$(ABI_VERSION)/
-       # csc
-       $(INSTALL_BIN) $(PKG_BUILD_DIR)/csc                     $(1)/usr/bin/
-       $(INSTALL_BIN) $(PKG_BUILD_DIR)/chicken                 $(1)/usr/bin/
-       $(INSTALL_DATA) $(PKG_BUILD_DIR)/chicken.h              $(1)/usr/include/chicken/
-       $(INSTALL_DATA) $(PKG_BUILD_DIR)/chicken-config.h       $(1)/usr/include/chicken/
-       # chicken-install
-       $(INSTALL_BIN) $(PKG_BUILD_DIR)/chicken-install         $(1)/usr/bin/
-       $(INSTALL_BIN) $(PKG_BUILD_DIR)/chicken-uninstall       $(1)/usr/bin/
-       $(INSTALL_BIN) $(PKG_BUILD_DIR)/chicken-status          $(1)/usr/bin/
-       $(INSTALL_BIN) $(PKG_BUILD_DIR)/chicken-do              $(1)/usr/bin/
-       $(INSTALL_DATA) $(PKG_BUILD_DIR)/setup.defaults         $(1)/usr/share/chicken/
-       # profile
-       $(INSTALL_BIN) $(PKG_BUILD_DIR)/chicken-profile         $(1)/usr/bin/
-       # feathers
-       $(INSTALL_BIN) $(PKG_BUILD_DIR)/feathers.tcl            $(1)/usr/share/chicken/
-       $(INSTALL_BIN) $(PKG_BUILD_DIR)/feathers                $(1)/usr/bin/
+       $(INSTALL_DIR) $(1)/usr/bin
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/chicken $(1)/usr/bin
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/chicken-do $(1)/usr/bin
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/chicken-install $(1)/usr/bin
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/chicken-profile $(1)/usr/bin
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/chicken-status $(1)/usr/bin
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/chicken-uninstall $(1)/usr/bin
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/csc $(1)/usr/bin
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/csi $(1)/usr/bin
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/feathers $(1)/usr/bin
+
+       $(INSTALL_DIR) $(1)/usr/include/chicken
+       $(INSTALL_DATA) $(PKG_BUILD_DIR)/chicken.h $(1)/usr/include/chicken
+       $(INSTALL_DATA) $(PKG_BUILD_DIR)/chicken-config.h $(1)/usr/include/chicken
+
+       $(INSTALL_DIR) $(1)/usr/share/chicken
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/feathers.tcl $(1)/usr/share/chicken
+       $(INSTALL_DATA) $(PKG_BUILD_DIR)/setup.defaults $(1)/usr/share/chicken
 endef
 
 $(eval $(call BuildPackage,chicken-scheme-full))
+$(eval $(call BuildPackage,chicken-scheme-interpreter))
+$(eval $(call BuildPackage,libchicken))