diff --git a/lang/mit-scheme/Makefile b/lang/mit-scheme/Makefile index e19cc8eeb615..6f6067e0c9c8 100644 --- a/lang/mit-scheme/Makefile +++ b/lang/mit-scheme/Makefile @@ -1,74 +1,75 @@ PORTNAME= mit-scheme PORTVERSION= 12.1 +PORTREVISION= 1 CATEGORIES= lang scheme MASTER_SITES= GNU/mit-scheme/stable.pkg/${PORTVERSION} DISTNAME= ${PORTNAME}-${PORTVERSION}-${MIT_SCHEME_ARCH} MAINTAINER= olgeni@FreeBSD.org COMMENT= MIT Scheme: includes runtime, compiler, and edwin binaries WWW= https://www.gnu.org/software/mit-scheme/ LICENSE= GPLv2 BUILD_DEPENDS= as:devel/binutils ONLY_FOR_ARCHS= amd64 GNU_CONFIGURE= yes INSTALL_TARGET= install-strip USES= gmake libtool ncurses WRKSRC= ${WRKDIR}/mit-scheme-${PORTVERSION}/src/ OPTIONS_DEFINE= BLOWFISH EDWIN GDBM IMAIL PGSQL X11 OPTIONS_DEFAULT= BLOWFISH EDWIN GDBM IMAIL PGSQL X11 OPTIONS_SUB= yes IMAIL_IMPLIES= EDWIN BLOWFISH_DESC= blowfish library support GDBM_DESC= gdbm library support EDWIN_DESC= Edwin editor support IMAIL_DESC= Imail mail reader support PGSQL_DESC= pgsql library support X11_DESC= X11 graphics support BLOWFISH_CONFIGURE_ENABLE= blowfish BLOWFISH_CONFIGURE_OFF= --disable-blowfish GDBM_CONFIGURE_ENABLE= gdbm GDBM_CONFIGURE_OFF= --disable-gdbm EDWIN_CONFIGURE_ENABLE= edwin EDWIN_CONFIGURE_OFF= --disable-edwin IMAIL_CONFIGURE_ENABLE= imail IMAIL_CONFIGURE_OFF= --disable-imail PGSQL_CONFIGURE_ENABLE= pgsql PGSQL_CONFIGURE_OFF= --disable-pgsql X11_CONFIGURE_ENABLE= x11 X11_CONFIGURE_OFF= --disable-x11 BLOWFISH_USES= makeinfo GDBM_USES= localbase:ldflags makeinfo PGSQL_USES= pgsql pkgconfig X11_USES= xorg X11_USE= XORG=x11 GDBM_LIB_DEPENDS+= libgdbm.so:databases/gdbm .include MIT_SCHEME_ARCH= x86-64 PLIST_SUB+= MIT_SCHEME_ARCH=${MIT_SCHEME_ARCH} \ PORTVERSION=${PORTVERSION} do-build: @cd ${WRKDIR}/mit-scheme-${PORTVERSION}/src && ${MAKE_CMD} post-build: @${FIND} ${WRKDIR} -type d -empty -delete do-install: @cd ${WRKDIR}/mit-scheme-${PORTVERSION}/src && ${MAKE_CMD} install DESTDIR=${STAGEDIR} ${INSTALL_MAN} ${WRKDIR}/mit-scheme-${PORTVERSION}/doc/mit-scheme.1 ${STAGEDIR}${PREFIX}/share/man/man1/ post-install: @${FIND} ${STAGEDIR}${PREFIX}/lib -name "*-shim.so" -exec ${STRIP_CMD} {} \; .include diff --git a/lang/mit-scheme/files/patch-microcode_cmpint.c b/lang/mit-scheme/files/patch-microcode_cmpint.c new file mode 100644 index 000000000000..5b60e97f5c82 --- /dev/null +++ b/lang/mit-scheme/files/patch-microcode_cmpint.c @@ -0,0 +1,24 @@ +--- microcode/cmpint.c.orig 2022-09-07 06:01:33 UTC ++++ microcode/cmpint.c +@@ -562,10 +562,10 @@ open_stack_gap (unsigned long offset, unsigned long n_ + { + SCHEME_OBJECT * scan_from = (STACK_LOC (0)); + SCHEME_OBJECT * scan_end = (STACK_LOC (offset)); +- SCHEME_OBJECT * scan_to = (STACK_LOC (-n_words)); ++ SCHEME_OBJECT * scan_to = (STACK_NEG (n_words)); + while (scan_from != scan_end) + (STACK_LOCATIVE_POP (scan_to)) = (STACK_LOCATIVE_POP (scan_from)); +- stack_pointer = (STACK_LOC (-n_words)); ++ stack_pointer = (STACK_NEG (n_words)); + } + + static void +@@ -2721,7 +2721,7 @@ bkpt_proceed (insn_t * ep, SCHEME_OBJECT handle, SCHEM + && ((CC_RETURN_ADDRESS (STACK_REF (BKPT_PROCEED_FRAME_SIZE))) == ep))) + error_external_return (); + PUSH_REFLECTION (REFLECT_CODE_CC_BKPT); +- stack_pointer = (STACK_LOC (-BKPT_PROCEED_FRAME_SIZE)); ++ stack_pointer = (STACK_NEG (BKPT_PROCEED_FRAME_SIZE)); + return (SHARP_F); + } + diff --git a/lang/mit-scheme/files/patch-microcode_debug.c b/lang/mit-scheme/files/patch-microcode_debug.c new file mode 100644 index 000000000000..6aee21c7b986 --- /dev/null +++ b/lang/mit-scheme/files/patch-microcode_debug.c @@ -0,0 +1,11 @@ +--- microcode/debug.c.orig 2022-09-07 06:01:33 UTC ++++ microcode/debug.c +@@ -1419,7 +1419,7 @@ verify_stack (SCHEME_OBJECT * sp, SCHEME_OBJECT * bott + if (n_words > 1000) + outf_error ("%#lx: Extraordinary finger size: %ld\n", + ((unsigned long)sp), n_words); +- sp = STACK_LOCATIVE_OFFSET (sp, n_words); ++ sp = STACK_LOCATIVE_ADD (sp, n_words); + } + else if (type == TC_MANIFEST_CLOSURE + || type == TC_BROKEN_HEART diff --git a/lang/mit-scheme/files/patch-microcode_hooks.c b/lang/mit-scheme/files/patch-microcode_hooks.c new file mode 100644 index 000000000000..bb82db200e22 --- /dev/null +++ b/lang/mit-scheme/files/patch-microcode_hooks.c @@ -0,0 +1,20 @@ +--- microcode/hooks.c.orig 2022-09-07 06:01:33 UTC ++++ microcode/hooks.c +@@ -37,7 +37,7 @@ static void with_new_interrupt_mask (unsigned long); + + /* This is a kludge to compensate for the interpreter popping + a primitive's frame off the stack after it returns. */ +-#define UN_POP_PRIMITIVE_FRAME(n) (stack_pointer = (STACK_LOC (-(n)))) ++#define UN_POP_PRIMITIVE_FRAME(n) (stack_pointer = (STACK_NEG (n))) + + DEFINE_PRIMITIVE ("APPLY", Prim_apply, 2, 2, "(PROCEDURE ARG-LIST)\n\ + Invokes PROCEDURE on the arguments in ARG-LIST.") +@@ -87,7 +87,7 @@ Invokes PROCEDURE on the arguments in ARG-LIST.") + + { + SCHEME_OBJECT p1 = args; +- SCHEME_OBJECT * sp = (STACK_LOC (-n_args)); ++ SCHEME_OBJECT * sp = (STACK_NEG (n_args)); + SCHEME_OBJECT * s1 = sp; + while (s1 != stack_pointer) + { diff --git a/lang/mit-scheme/files/patch-microcode_interp.c b/lang/mit-scheme/files/patch-microcode_interp.c new file mode 100644 index 000000000000..a98b769c9c8c --- /dev/null +++ b/lang/mit-scheme/files/patch-microcode_interp.c @@ -0,0 +1,20 @@ +--- microcode/interp.c.orig 2022-09-07 06:01:33 UTC ++++ microcode/interp.c +@@ -455,7 +455,7 @@ Interpret (void) + { + long length = ((VECTOR_LENGTH (GET_EXP)) - 1); + Will_Push (length + 2 + CONTINUATION_SIZE); +- stack_pointer = (STACK_LOC (-length)); ++ stack_pointer = (STACK_NEG (length)); + STACK_PUSH (MAKE_OBJECT (TC_MANIFEST_NM_VECTOR, length)); + /* The finger: last argument number */ + Pushed (); +@@ -1156,7 +1156,7 @@ Interpret (void) + /* Frame consists of the return code followed by two objects. + The first object has already been popped into GET_EXP, + so just pop the second argument. */ +- stack_pointer = (STACK_LOCATIVE_OFFSET (stack_pointer, 1)); ++ stack_pointer = (STACK_LOCATIVE_ADD (stack_pointer, 1)); + break; + + case RC_EXECUTE_SEQUENCE_FINISH: diff --git a/lang/mit-scheme/files/patch-microcode_interp.h b/lang/mit-scheme/files/patch-microcode_interp.h new file mode 100644 index 000000000000..68f15e3e8117 --- /dev/null +++ b/lang/mit-scheme/files/patch-microcode_interp.h @@ -0,0 +1,11 @@ +--- microcode/interp.h.orig 2022-09-07 06:01:33 UTC ++++ microcode/interp.h +@@ -93,7 +93,7 @@ USA. + SCHEME_OBJECT * Will_Push_Limit; \ + \ + STACK_CHECK (N); \ +- Will_Push_Limit = (STACK_LOC (- (N))) ++ Will_Push_Limit = (STACK_NEG (N)) + + #define Pushed() \ + if (STACK_LOCATIVE_ABOVE_P (stack_pointer, Will_Push_Limit)) \ diff --git a/lang/mit-scheme/files/patch-microcode_stack.h b/lang/mit-scheme/files/patch-microcode_stack.h new file mode 100644 index 000000000000..af63ce8af335 --- /dev/null +++ b/lang/mit-scheme/files/patch-microcode_stack.h @@ -0,0 +1,26 @@ +--- microcode/stack.h.orig 2022-09-07 06:01:33 UTC ++++ microcode/stack.h +@@ -66,12 +66,13 @@ USA. + stack_death (s); \ + } while (false) + +-#define CAN_PUSH_P(n) (SP_OK_P (STACK_LOC (- (n)))) ++#define CAN_PUSH_P(n) (SP_OK_P (STACK_NEG (n))) + #define SP_OK_P(sp) ((sp) >= stack_guard) + + #define STACK_LOCATIVE_DECREMENT(locative) (-- (locative)) + #define STACK_LOCATIVE_INCREMENT(locative) ((locative) ++) +-#define STACK_LOCATIVE_OFFSET(locative, offset) ((locative) + (offset)) ++#define STACK_LOCATIVE_ADD(locative, offset) ((locative) + (offset)) ++#define STACK_LOCATIVE_SUB(locative, offset) ((locative) - (offset)) + #define STACK_LOCATIVE_REFERENCE(locative, offset) ((locative) [(offset)]) + #define STACK_LOCATIVE_DIFFERENCE(newer, older) ((older) - (newer)) + #define STACK_LOCATIVE_ABOVE_P(loc1, loc2) ((loc1) < (loc2)) +@@ -88,5 +89,6 @@ USA. + + #define STACK_PUSH(object) (STACK_LOCATIVE_PUSH (stack_pointer)) = (object) + #define STACK_POP() (STACK_LOCATIVE_POP (stack_pointer)) +-#define STACK_LOC(offset) (STACK_LOCATIVE_OFFSET (stack_pointer, (offset))) ++#define STACK_LOC(offset) (STACK_LOCATIVE_ADD (stack_pointer, (offset))) ++#define STACK_NEG(offset) (STACK_LOCATIVE_SUB (stack_pointer, (offset))) + #define STACK_REF(offset) (STACK_LOCATIVE_REFERENCE (stack_pointer, (offset))) diff --git a/lang/mit-scheme/files/patch-microcode_step.c b/lang/mit-scheme/files/patch-microcode_step.c new file mode 100644 index 000000000000..a8413e14a73e --- /dev/null +++ b/lang/mit-scheme/files/patch-microcode_step.c @@ -0,0 +1,11 @@ +--- microcode/step.c.orig 2022-09-07 06:01:33 UTC ++++ microcode/step.c +@@ -103,7 +103,7 @@ DEFINE_PRIMITIVE ("PRIMITIVE-APPLY-STEP", Prim_apply_s + POP_PRIMITIVE_FRAME (3); + install_traps (hooks); + { +- SCHEME_OBJECT * scan_stack = (STACK_LOC (- number_of_args)); ++ SCHEME_OBJECT * scan_stack = (STACK_NEG (number_of_args)); + SCHEME_OBJECT scan_list; + long i; + Will_Push (number_of_args + STACK_ENV_EXTRA_SLOTS + 1);