On 11/15/15 00:19, Nigel Taylor wrote:
> On 11/14/15 22:46, Stuart Henderson wrote:
>> On 2015/11/14 21:39, Jérémie Courrèges-Anglas wrote:

I have a better solution for this problem encountered with m4,

$ diff -u bison-3.0.4{.gm4,}/bison-3.0.4/examples/calc++/calc++-parser.cc
--- bison-3.0.4.gm4/bison-3.0.4/examples/calc++/calc++-parser.cc Thu Nov
12 01:25:32 2015
+++ bison-3.0.4/bison-3.0.4/examples/calc++/calc++-parser.cc Sat Nov 14
13:09:05 2015
@@ -1010,7 +1010,7 @@
// The symbols being reduced.
for (int yyi = 0; yyi < yynrhs; yyi++)
YY_SYMBOL_PRINT (" $" << yyi + 1 << " =",
- yystack_[(yynrhs) - (yyi + 1)]);
+ yystack_[......................]);
}
#endif // YYDEBUG

also solves all the similar problems. foreach.m4 redefined m4_bmatch to
use a faster method, removing it makes things work. diff is attached to
switch back to m4, includes the patch for foreach.m4. The Makefile
change to it will add the --gnu argument when bison uses m4. m4 I have
now accepts --gnu as an argument, which allows the
ac_cv_prog_gnu_m4_gnu=yes to be used.


Now all the bison tests pass for m4, same results as gnu m4.

## ------------- ##
## Test results. ##
## ------------- ##

470 tests were successful.
23 tests were skipped.

I needed to increase m4 macro arguments to 4digits for torture tests to
pass. Skipped tests are for things like java not installed.

diff of changes for m4 updated in ~nigel.

There maybe other changes, if problems are hit  building a release / ports.

Index: Makefile
===================================================================
RCS file: /home/cvs/ports/devel/bison/Makefile,v
retrieving revision 1.53
diff -u -p -r1.53 Makefile
--- Makefile	15 Nov 2015 11:57:35 -0000	1.53
+++ Makefile	15 Nov 2015 20:33:20 -0000
@@ -3,6 +3,7 @@
 COMMENT=	GNU parser generator
 
 DISTNAME=	bison-3.0.4
+REVISION=	0
 CATEGORIES=	devel
 MASTER_SITES=	${MASTER_SITE_GNU:=bison/}
 
@@ -13,10 +14,10 @@ PERMIT_PACKAGE_CDROM=	Yes
 
 WANTLIB=	c
 MODULES=	devel/gettext
-BUILD_DEPENDS=	devel/help2man \
-		devel/m4
-RUN_DEPENDS=	devel/m4
+BUILD_DEPENDS=	devel/help2man
 
+# Only use with m4 that accepts --gnu argument...
+CONFIGURE_ENV += ac_cv_prog_gnu_m4_gnu=yes M4="/usr/bin/m4"
 CONFIGURE_STYLE=gnu
 CONFIGURE_ARGS=	--disable-yacc
 MODGNU_CONFIG_GUESS_DIRS=${WRKSRC}/build-aux
Index: patches/patch-data_c++_m4
===================================================================
RCS file: patches/patch-data_c++_m4
diff -N patches/patch-data_c++_m4
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ patches/patch-data_c++_m4	15 Nov 2015 20:16:31 -0000
@@ -0,0 +1,15 @@
+$OpenBSD$
+--- data/c++.m4.orig	Fri Jan 16 14:47:42 2015
++++ data/c++.m4	Thu Nov 12 01:20:00 2015
+@@ -100,9 +100,9 @@ m4_define([b4_namespace_open],
+ m4_define([b4_namespace_close],
+ [b4_user_code([b4_percent_define_get_syncline([[api.namespace]])
+ m4_bpatsubst(m4_dquote(m4_bpatsubst(m4_dquote(b4_namespace_ref[ ]),
+-                                    [^\(.\)[	 ]*\(::\)?\([^][:]\|:[^:]\)*],
++                                    [^\(.\)[	 ]*\(::\)?\([	-9;-Z^-~]\|:[^:]\)*],
+                                     [\1])),
+-             [::\([^][:]\|:[^:]\)*], [} ])[} // ]b4_namespace_ref])])
++             [::\([	-9;-Z\^-~]\|:[^:]\)*], [} ])[} // ]b4_namespace_ref])])
+ 
+ 
+ # b4_token_enums
Index: patches/patch-data_m4sugar_foreach_m4
===================================================================
RCS file: patches/patch-data_m4sugar_foreach_m4
diff -N patches/patch-data_m4sugar_foreach_m4
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ patches/patch-data_m4sugar_foreach_m4	15 Nov 2015 20:17:33 -0000
@@ -0,0 +1,26 @@
+$OpenBSD$
+--- data/m4sugar/foreach.m4.orig	Sun Nov 15 16:48:24 2015
++++ data/m4sugar/foreach.m4	Sun Nov 15 16:49:48 2015
+@@ -120,14 +120,14 @@ m4_define([_m4_case__],
+ #   m4_define([_m4_b], _m4_defn([_m4_bmatch]))_m4_b([$1], [$2], [$3])...
+ #   _m4_b([$1], [$m-1], [$m])_m4_b([], [], [$m+1]_m4_popdef([_m4_b]))
+ # then invoke m4_unquote(_m4_b($@)), for concatenation with later text.
+-m4_define([m4_bmatch],
+-[m4_if([$#], 0, [m4_fatal([$0: too few arguments: $#])],
+-       [$#], 1, [m4_fatal([$0: too few arguments: $#: $1])],
+-       [$#], 2, [$2],
+-       [m4_pushdef([_m4_b], [m4_define([_m4_b],
+-  _m4_defn([_$0]))]_m4_for([3], m4_eval([($# + 1) / 2 * 2 - 1]),
+-  [2], [_$0_(], [)])[_m4_b([], [],]m4_dquote([$]m4_eval(
+-  [($# + 1) / 2 * 2]))[_m4_popdef([_m4_b]))])m4_unquote(_m4_b($@))])])
++#m4_define([m4_bmatch],
++#[m4_if([$#], 0, [m4_fatal([$0: too few arguments: $#])],
++#       [$#], 1, [m4_fatal([$0: too few arguments: $#: $1])],
++#       [$#], 2, [$2],
++#       [m4_pushdef([_m4_b], [m4_define([_m4_b],
++#  _m4_defn([_$0]))]_m4_for([3], m4_eval([($# + 1) / 2 * 2 - 1]),
++#  [2], [_$0_(], [)])[_m4_b([], [],]m4_dquote([$]m4_eval(
++#  [($# + 1) / 2 * 2]))[_m4_popdef([_m4_b]))])m4_unquote(_m4_b($@))])])
+ 
+ m4_define([_m4_bmatch],
+ [m4_if(m4_bregexp([$1], [$2]), [-1], [], [[$3]m4_define([$0])])])

Reply via email to