svn commit: r556106 - in head: . lang lang/gprolog lang/gprolog/files
Eugene Grosbein
eugen at FreeBSD.org
Mon Nov 23 13:26:16 UTC 2020
Author: eugen
Date: Mon Nov 23 13:26:14 2020
New Revision: 556106
URL: https://svnweb.freebsd.org/changeset/ports/556106
Log:
lang/gprolog: recover GNU Prolog under FreeBSD.
Update to version 1.4.5 released in 2020.
Make it build and run with Clang 10:
- clang has no register reservation for x86, hence patch-EnginePl_machine.h
and -DNO_MACHINE_REG_FOR_REG_BANK to prevent using missing feature;
- add patch-Ma2Asm_x86__64__any.c fetched from upstream SourceForge
post-release commit dealing with PIC issues;
- disable usage of spinlocks that results in a hang eating all available
CPU cycles; fixed with -DUSE_LOCKS=1 -DUSE_RECURSIVE_LOCKS=1
-DUSE_SPIN_LOCKS=0;
- the software uses bundled dlmalloc dated back 2011 that replaces
functions like calloc() with own implemenations and it's calloc()
sometimes fails to clear allocated memory; this results in SIGSEGV
when its own hash-table implementation dereferences junk that
supposed to be NULL pointer, so it fails to complete build;
fixed with MMAP_CLEARS=0.
PR: 231393
Added:
head/lang/gprolog/
- copied from r507372, head/lang/gprolog/
head/lang/gprolog/files/
head/lang/gprolog/files/patch-EnginePl_machine.h (contents, props changed)
head/lang/gprolog/files/patch-Ma2Asm_x86__64__any.c (contents, props changed)
Modified:
head/MOVED
head/lang/Makefile
head/lang/gprolog/Makefile
head/lang/gprolog/distinfo
Modified: head/MOVED
==============================================================================
--- head/MOVED Mon Nov 23 11:55:46 2020 (r556105)
+++ head/MOVED Mon Nov 23 13:26:14 2020 (r556106)
@@ -12845,7 +12845,6 @@ textproc/rubygem-gitlab-linguist|textproc/rubygem-gith
textproc/rubygem-html-pipeline1|textproc/rubygem-html-pipeline|2019-08-31|Has expired: Use textproc/rubygem-html-pipeline instead
devel/pure-stldict||2019-09-01|Has expired: Depends on expiring devel/llvm35
lang/dmd1||2019-09-01|Has expired: No longer supported upstream
-lang/gprolog||2019-09-01|Has expired: Abandonware upstream (more than five years), fails in various ways with remotely recent compilers
math/pure-mpfr||2019-09-01|Has expired: Depends on expiring devel/llvm35
math/pure-rational||2019-09-01|Has expired: Depends on expiring devel/llvm35
net/pure-sockets||2019-09-01|Has expired: Depends on expiring devel/llvm35
Modified: head/lang/Makefile
==============================================================================
--- head/lang/Makefile Mon Nov 23 11:55:46 2020 (r556105)
+++ head/lang/Makefile Mon Nov 23 13:26:14 2020 (r556106)
@@ -116,6 +116,7 @@
SUBDIR += go
SUBDIR += go-devel
SUBDIR += gomacro
+ SUBDIR += gprolog
SUBDIR += gravity
SUBDIR += groovy
SUBDIR += gscheme
Modified: head/lang/gprolog/Makefile
==============================================================================
--- head/lang/gprolog/Makefile Fri Jul 26 20:46:53 2019 (r507372)
+++ head/lang/gprolog/Makefile Mon Nov 23 13:26:14 2020 (r556106)
@@ -2,8 +2,7 @@
# $FreeBSD$
PORTNAME= gprolog
-PORTVERSION= 1.4.4
-PORTREVISION= 9
+PORTVERSION= 1.4.5
CATEGORIES= lang
MASTER_SITES= http://www.gprolog.org/
@@ -12,17 +11,12 @@ COMMENT= Free Prolog compiler
LICENSE= GPLv2
-BROKEN= fails to build
-DEPRECATED= Abandonware upstream (more than five years), fails in various ways with remotely recent compilers
-# Bumped EXPIRATION date due to new release
-# and efforts to get it in: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=231393
-EXPIRATION_DATE= 2019-08-31
+ONLY_FOR_ARCHS= amd64 i386
-ONLY_FOR_ARCHS= i386 amd64
-
USES= gmake
-USE_GCC= any
-CFLAGS+= -O3 # gcc5/gcc6 + -O2 = pl2wam hangs
+CFLAGS+= -DUSE_LOCKS=1 -DUSE_RECURSIVE_LOCKS=1 -DUSE_SPIN_LOCKS=0 \
+ -DMMAP_CLEARS=0 -DNO_MACHINE_REG_FOR_REG_BANK
+
PLIST_SUB= GPROLOG_VER=${PORTVERSION}
GNU_CONFIGURE= yes
CONFIGURE_ARGS= --with-c-flags="${CFLAGS}" \
@@ -38,14 +32,6 @@ OPTIONS_SUB= yes
FD_DESC= Enable finite domain constraint solver
FD_CONFIGURE_OFF= --disable-fd-solver
-
-.include <bsd.port.options.mk>
-
-# Disable registers on i386. This fixes build with gcc6.
-# See: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=852008
-.if ${ARCH} == i386
-CONFIGURE_ARGS+= --disable-regs
-.endif
post-patch:
@${REINPLACE_CMD} \
Modified: head/lang/gprolog/distinfo
==============================================================================
--- head/lang/gprolog/distinfo Fri Jul 26 20:46:53 2019 (r507372)
+++ head/lang/gprolog/distinfo Mon Nov 23 13:26:14 2020 (r556106)
@@ -1,2 +1,3 @@
-SHA256 (gprolog-1.4.4.tar.gz) = 18c0e9644b33afd4dd3cdf29f94c099ad820d65e0c99da5495b1ae43b4f2b18e
-SIZE (gprolog-1.4.4.tar.gz) = 3538152
+TIMESTAMP = 1606049432
+SHA256 (gprolog-1.4.5.tar.gz) = ce5335d1607f0b01d5567252211ae2b19e6a5e52b62978717880524748afb9a2
+SIZE (gprolog-1.4.5.tar.gz) = 3585704
Added: head/lang/gprolog/files/patch-EnginePl_machine.h
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ head/lang/gprolog/files/patch-EnginePl_machine.h Mon Nov 23 13:26:14 2020 (r556106)
@@ -0,0 +1,20 @@
+--- EnginePl/machine.h.orig 2015-01-13 18:00:19 UTC
++++ EnginePl/machine.h
+@@ -124,7 +124,7 @@ void M_Check_Magic_Words(void); /* not c
+ # define M_USED_REGS {"$9", "$10", "$11", "$12", "$13", "$14", 0}
+
+ /* on M_ix86_darwin : %ebx is used by gcc for pic base */
+-#elif defined(M_ix86) && !defined(_MSC_VER) && !defined(M_ix86_darwin)
++#elif defined(M_ix86) && !defined(_MSC_VER) && !defined(M_ix86_darwin) && !defined(__clang__)
+
+ #ifdef NO_USE_EBP
+ # define M_USED_REGS {"ebx", 0}
+@@ -137,7 +137,7 @@ void M_Check_Magic_Words(void); /* not c
+ # define M_USED_REGS {"15", "20", 0}
+
+ /* on M_x86_64_darwin Lion r12-r15 do not work (why ?) */
+-#elif defined(M_x86_64) && !defined(_MSC_VER) && !defined(M_x86_64_darwin)
++#elif defined(M_x86_64) && !defined(_MSC_VER) && !defined(M_x86_64_darwin) && !defined(__clang__)
+
+ # define M_USED_REGS {"r12", "r13", "r14", "r15", 0}
+
Added: head/lang/gprolog/files/patch-Ma2Asm_x86__64__any.c
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ head/lang/gprolog/files/patch-Ma2Asm_x86__64__any.c Mon Nov 23 13:26:14 2020 (r556106)
@@ -0,0 +1,57 @@
+--- Ma2Asm/x86_64_any.c.orig 2018-10-23 15:17:17 UTC
++++ Ma2Asm/x86_64_any.c
+@@ -112,6 +112,9 @@
+ * Global Variables *
+ *---------------------------------*/
+
++int can_produce_pic_code = 1; /* overwritte var of ma2asm.c */
++extern int pic_code;
++
+ static double dbl_tbl[MAX_DOUBLES_IN_PRED];
+ static int nb_dbl = 0;
+ static int dbl_lc_no = 0;
+@@ -149,7 +152,6 @@ static const char *fpr_arg[MAX_FPR_ARGS]
+ #endif
+ /* variables for ma_parser.c / ma2asm.c */
+
+-int can_produce_pic_code = 1;
+ char *comment_prefix = "#";
+ #ifdef M_x86_64_darwin
+ char *local_symb_prefix = "L";
+@@ -210,10 +212,8 @@ Asm_Start(void)
+ strcpy(asm_reg_cp, Off_Reg_Bank(MAP_OFFSET_CP));
+ #endif
+
+-#if defined(M_x86_64_darwin) || defined(M_x86_64_bsd)
+- pic_code = 1; /* NB: on darwin and BSD everything is PIC code */
+-#elif defined(M_x86_64_linux) && __GNUC__ >= 6 /* gcc >= 6 needs PIC for linux */
+- pic_code = 1;
++#ifdef M_x86_64_darwin
++ pic_code = 1; /* NB: on darwin everything is PIC code */
+ #elif defined(_WIN32)
+ pic_code = 0; /* NB: on MinGW nothing is needed for PIC code */
+ #endif
+@@ -1199,9 +1199,9 @@ Dico_Long(char *name, int global, VType
+ size_bytes = value * 8;
+ #ifdef M_x86_64_darwin
+ if (!global)
+- Label_Printf(".zerofill __DATA,__bss," UN "%s,%" PL_FMT_d ",4", name, size_bytes);
++ Label_Printf(".zerofill __DATA,__bss," UN "%s,%" PL_FMT_d ",3", name, size_bytes);
+ else
+- Inst_Printf(".comm", UN "%s,%" PL_FMT_d ",4", name, size_bytes);
++ Inst_Printf(".comm", UN "%s,%" PL_FMT_d ",3", name, size_bytes);
+ #else
+ #if defined(M_x86_64_linux) || defined(M_x86_64_sco) || \
+ defined(M_x86_64_solaris) || defined(M_x86_64_bsd)
+@@ -1226,11 +1226,6 @@ Dico_Long(char *name, int global, VType
+ case INITIAL_VALUE:
+ if (global)
+ Inst_Printf(".globl", UN "%s", name);
+-#ifdef M_x86_64_darwin
+- Inst_Printf(".align", "3");
+-#else
+- Inst_Printf(".align", "8");
+-#endif
+ #if !(defined(M_x86_64_darwin) || defined(_WIN32))
+ Inst_Printf(".size", UN "%s,8", name);
+ #endif
More information about the svn-ports-head
mailing list