Hello, yesterday I've sent to MacPorts a port definition for "gcl27" [1], together with some macOS specific patches. I'm physically using macOS Big Sur (11.7.10) on an Intel Mac, and currently GCL 2.7 doesn't build on ARM Mac yet, so perhaps very few people can actually use this "gcl27" package at this moment.
[1] https://github.com/macports/macports-ports/pull/28141 Anyway, I have GCL 2.7.1 installed at /opt/local by a locally built MacPorts package, and now I can start gcl in both ANSI and CLtL1 (by default) modes, aligned with the Debian testing "gcl27" package (there's no support of GCL_PROF). $ gcl GCL (GNU Common Lisp) 2.7.1 Thu Apr 10 09:38:27 PM EDT 2025 CLtL1 git: Version_2_7_1 Source License: LGPL(gcl,gmp), GPL(unexec,bfd,xgcl) Binary License: GPL due to GPL'ed components: (READLINE UNEXEC) Modifications of this banner must retain notice of a compatible license Dedicated to the memory of W. Schelter Use (help) to get some basic information on how to use GCL. Temporary directory for compiler files set to /var/folders/8h/4sglq7954pb36vkz51v4br7r0000gn/T/ >(quit) $ GCL_ANSI=1 gcl GCL (GNU Common Lisp) 2.7.1 Thu Apr 10 09:38:27 PM EDT 2025 ANSI git: Version_2_7_1 Source License: LGPL(gcl,gmp), GPL(unexec,bfd,xgcl) Binary License: GPL due to GPL'ed components: (READLINE UNEXEC) Modifications of this banner must retain notice of a compatible license Dedicated to the memory of W. Schelter Use (help) to get some basic information on how to use GCL. Temporary directory for compiler files set to /var/folders/8h/4sglq7954pb36vkz51v4br7r0000gn/T/ >(quit) $ which gcl /opt/local/bin/gcl Beside the official patch (upstream-small-release-errata), I need to modify some other places in the source code to get the build done. The main purpose of this email is to explain these patches (they are in attach), to see if some of them can be part of the upstream source code. 1. o/sfaslmacho.c (see section_64.patch in attach) At Line 212 there's the following line accessing the "sh_addr" and "sh_size" members of the "section_64" structure (related to Mach-O format): bzero((void *)sec->sh_addr,sec->sh_size); But the compiler complains that no such members exist. I think maybe the following modification should be done: bzero((void *)sec->addr,sec->size); 2. Makefile.in|am (part of binutils.patch) The macOS linker doesn't support "-z" option (by calling gcc with "-Wl,-z,relro"). I checked documentation of "-z" option of "ld" on Linux and found it's related to ELF format, thus perhaps on macOS we don't need it? (by deleting this option the building process can continue.) 3. Makefile.in|am (part of binutils.patch) Some shell commands used in this file involve the grammar <(...), which is beyond the vanilla (BSD?) "/bin/sh" on macOS. I had to set "SHELL = /bin/bash" at the beginning of Makefile.in|am and remove the default generated "SHELL = /bin/sh" in the middle. 4. xbin/ar_merge (part of binutils.patch) The macOS "ar" command, unfortunately, doesn't support "--output" option, therefore "ar x" can only extract the archive to the current directory. I ever tried to depend on GNU binutils (available in MacPorts) but it seems that macOS linker doesn't understand its output format. After some experiments I wrote the following working "ar_merge" achieving the same goal but does't rely on "ar --output": +fullfile= +filename= + TMPDIR=$(mktemp -d) while [ $# -gt 0 ] ; do case $(basename $1) in *.o) cp $1 $TMPDIR;; *.go) cp $1 $TMPDIR/$(echo $(basename $1)|sed 's,\.go,.o,g');; - *.a) ar x $1 --output $TMPDIR;; + *.a) + fullfile=$1; + filename="${fullfile##*/}"; + cp $fullfile $TMPDIR; + pushd $TMPDIR; + ar -x $filename; + rm $filename; + popd;; Regards, Chun Tian
diff -ur gcl-2.7.1.orig/Makefile.in gcl-2.7.1/Makefile.in --- gcl-2.7.1.orig/Makefile.in 2025-04-11 16:05:19.000000000 +1000 +++ gcl-2.7.1/Makefile.in 2025-04-15 12:14:35.000000000 +1000 @@ -14,8 +14,7 @@ @SET_MAKE@ - - +SHELL = /bin/bash VPATH = @srcdir@ am__is_gnu_make = { \ @@ -768,7 +767,6 @@ RL_LIB = @RL_LIB@ RL_OBJS = @RL_OBJS@ SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ STRIP = @STRIP@ TCLSH = @TCLSH@ TCL_INCLUDE = @TCL_INCLUDE@ @@ -4556,7 +4554,7 @@ rm -rf sb_$* unixport/raw_%: unixport/lib%.a - $(CC) $(AM_LDFLAGS) -rdynamic -Wl,-z,relro $(LDFLAGS) -o $@ $< $(LIBS) #FIXME relro + $(CC) $(AM_LDFLAGS) -rdynamic $(LDFLAGS) -o $@ $< $(LIBS) unixport/gcl_cmpnopt_gcl_gprof.lsp unixport/gcl_cmpnopt_ansi_gcl_gprof.lsp:\ unixport/gcl_cmpnopt_%_gprof.lsp: unixport/gcl_cmpnopt_%.lsp diff -ur gcl-2.7.1.orig/xbin/ar_merge gcl-2.7.1/xbin/ar_merge --- gcl-2.7.1.orig/xbin/ar_merge 2025-04-11 04:21:26.000000000 +1000 +++ gcl-2.7.1/xbin/ar_merge 2025-04-15 11:27:09.000000000 +1000 @@ -5,12 +5,22 @@ ARCHIVE=$1 shift +fullfile= +filename= + TMPDIR=$(mktemp -d) while [ $# -gt 0 ] ; do case $(basename $1) in *.o) cp $1 $TMPDIR;; *.go) cp $1 $TMPDIR/$(echo $(basename $1)|sed 's,\.go,.o,g');; - *.a) ar x $1 --output $TMPDIR;; + *.a) + fullfile=$1; + filename="${fullfile##*/}"; + cp $fullfile $TMPDIR; + pushd $TMPDIR; + ar -x $filename; + rm $filename; + popd;; recompile);; *) echo Bad arg $1 ; exit 1 ;; esac
diff -ur gcl-2.7.1.orig/o/sfaslmacho.c gcl-2.7.1/o/sfaslmacho.c --- gcl-2.7.1.orig/o/sfaslmacho.c 2025-04-11 04:21:26.000000000 +1000 +++ gcl-2.7.1/o/sfaslmacho.c 2025-04-15 10:18:32.000000000 +1000 @@ -208,7 +208,7 @@ if (LOAD_SEC(sec)) memcpy((void *)sec->addr,v1+sec->offset,sec->size); else - bzero((void *)sec->sh_addr,sec->sh_size); + bzero((void *)sec->addr,sec->size); } if (**got) {
signature.asc
Description: OpenPGP digital signature