aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexey Dokuchaev <danfe@FreeBSD.org>2021-08-25 10:56:26 +0000
committerAlexey Dokuchaev <danfe@FreeBSD.org>2021-08-25 10:56:54 +0000
commitabc8ea44a2171da6cd0f97b44b854e1428d37535 (patch)
tree2a94c933e3fb05ee75cf62489c8e05c0d1c51ae5
parent7d3655f8cf734f97c0a162e4f6f179123abea24b (diff)
downloadports-abc8ea44a2171da6cd0f97b44b854e1428d37535.tar.gz
ports-abc8ea44a2171da6cd0f97b44b854e1428d37535.zip
lang/gforth: attempt to unbreak the port on i386, armv6, and armv7
- Partially apply upstream commit 9f35279358 to unbreak the build on i386 - With a recent update of devel/libffcall in 58a8a0aa37a8, the port is no longer ignored on armv6 and armv7. Amend the word size check so it can be built on these architectures PR: 258003
-rw-r--r--lang/gforth/Makefile5
-rw-r--r--lang/gforth/files/patch-engine_main.c29
2 files changed, 31 insertions, 3 deletions
diff --git a/lang/gforth/Makefile b/lang/gforth/Makefile
index 2b2f188b06d8..360cbcf671da 100644
--- a/lang/gforth/Makefile
+++ b/lang/gforth/Makefile
@@ -10,10 +10,9 @@ MASTER_SITES= http://www.complang.tuwien.ac.at/forth/gforth/ \
MAINTAINER= danfe@FreeBSD.org
COMMENT= Fast and portable Forth system
-LICENSE= GPLv3
+LICENSE= GPLv3+
LICENSE_FILE= ${WRKSRC}/COPYING
-BROKEN_i386= Assertion failed: (pi->restlength >=0), function check_prims, file ./main.c, line 1049.
BROKEN_powerpc64= fails to package: Unable to access file usr/local/share/gforth/0.7.3/kernl64l.fi:No such file or directory
LIB_DEPENDS= libavcall.so:devel/libffcall \
@@ -45,7 +44,7 @@ OPTIONS_DEFINE= DOCS
.include <bsd.port.pre.mk>
-.if ${ARCH} == i386 || ${ARCH} == powerpc
+.if ${ARCH} == i386 || ${ARCH} == powerpc || ${ARCH} == armv6 || ${ARCH} == armv7
WORDSIZE=32
.else
WORDSIZE=64
diff --git a/lang/gforth/files/patch-engine_main.c b/lang/gforth/files/patch-engine_main.c
new file mode 100644
index 000000000000..4767de3e2451
--- /dev/null
+++ b/lang/gforth/files/patch-engine_main.c
@@ -0,0 +1,29 @@
+--- engine/main.c.orig 2013-10-11 21:31:28 UTC
++++ engine/main.c
+@@ -976,7 +976,8 @@ static void check_prims(Label symbols1[])
+ goto_len = goto_p[1]-goto_p[0];
+ debugp(stderr, "goto * %p %p len=%ld\n",
+ goto_p[0],symbols2[goto_p-symbols1],(long)goto_len);
+- if (memcmp(goto_p[0],symbols2[goto_p-symbols1],goto_len)!=0) { /* unequal */
++ if ((goto_len < 0) ||
++ memcmp(goto_p[0],symbols2[goto_p-symbols1],goto_len)!=0) { /* unequal */
+ no_dynamic=1;
+ debugp(stderr," not relocatable, disabling dynamic code generation\n");
+ init_ss_cost();
+@@ -1045,8 +1046,14 @@ static void check_prims(Label symbols1[])
+ nonrelocs++;
+ continue;
+ }
+- assert(pi->length>=0);
+- assert(pi->restlength >=0);
++ if((pi->length<0) || (pi->restlength<0)) {
++ pi->length = endlabel-symbols1[i];
++ pi->restlength = 0;
++#ifndef BURG_FORMAT
++ debugp(stderr,"\n adjust restlen: len/restlen < 0, %d/%d",
++ pi->length, pi->restlength);
++#endif
++ };
+ while (j<(pi->length+pi->restlength)) {
+ if (s1[j]==s3[j]) {
+ if (s1[j] != s2[j]) {