Re: makeinfo swallows page breaks

2013-03-22 Thread Andy Wingo
On Thu 21 Mar 2013 22:56, k...@freefriends.org (Karl Berry) writes:

 Guile’s Texinfo parser

 Argh.  The idea of a full second Texinfo parser in GNU is fundamentally
 wrong.

I understand where you come from.  For some context on why I wrote this
parser back in 2004:

  http://wingolog.org/archives/2006/11/17/high-on-sodium-vapor

I even had a gtk browser at one point with help:

  http://wingolog.org/pub/texinfo-browser.png

I had a GTK app then with context-sensitive interactive help.  So I
needed to treat docs programmatically.

 If you want to call it a Guile docstring parser, whose language
 happens to bear some resemblance to a subset of Texinfo, fine.

It is intended to be a strict subset.  To do otherwise we would have to
make a new format, and that would be bad.

Cheers,

Andy
-- 
http://wingolog.org/



Re: makeinfo swallows page breaks

2013-03-21 Thread Ludovic Courtès
l...@gnu.org (Ludovic Courtès) skribis:

 Alternately, would you suggest using a different approach?

Attached is a patch to use Guile’s Texinfo support [0] to build said
file.  Guile’s Texinfo parser is incomplete but sufficient to handle
those docstrings.

It solves an actual bug for anyone using Texinfo 5.x.  It also seems to
be the most profitable solution for us Guile hackers in the long run.

And, it’s much faster:

  makeinfo 4.13 takes 0.1s
  makeinfo 5.1 takes 11.7s
  Guile takes 1.3s

OK to commit?

Thanks,
Ludo’.

From 84b2457ed9fdf866a354465c67e282f8fbb30eb3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= l...@gnu.org
Date: Thu, 21 Mar 2013 19:17:13 +0100
Subject: [PATCH] Build `guile-procedures.txt' using (texinfo) instead of
 `makeinfo'.

* Makefile.am (schemelibdir, schemelib_DATA): New variables.
  (libguile/guile-procedures.txt): New target.
  (EXTRA_DIST): Add libguile/texi-fragments-to-docstrings.
* libguile/Makefile.am (guile-procedures.txt): Remove target.
  (schemelibdir, schemelib_DATA): Remove.
* libguile/texi-fragments-to-docstrings: New file.
---
 Makefile.am   |   17 --
 libguile/Makefile.am  |   16 --
 libguile/texi-fragments-to-docstrings |   55 +
 3 files changed, 70 insertions(+), 18 deletions(-)
 create mode 100644 libguile/texi-fragments-to-docstrings

diff --git a/Makefile.am b/Makefile.am
index 3aa5ddd..737897b 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,7 +1,7 @@
 ## Process this file with automake to produce Makefile.in.
 ##
 ##  	Copyright (C) 1998, 1999, 2000, 2001, 2002, 2006, 2007,
-##2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
+##2008, 2009, 2010, 2011, 2012, 2013 Free Software Foundation, Inc.
 ##
 ##   This file is part of GUILE.
 ##
@@ -42,6 +42,18 @@ SUBDIRS =	\
 libguileincludedir = $(pkgincludedir)/$(GUILE_EFFECTIVE_VERSION)
 libguileinclude_HEADERS = libguile.h
 
+schemelibdir = $(pkgdatadir)/$(GUILE_EFFECTIVE_VERSION)
+schemelib_DATA = libguile/guile-procedures.txt
+
+# Build it from here so that all the modules are compiled by the time we
+# build it.
+libguile/guile-procedures.txt: libguile/guile-procedures.texi
+	$(AM_V_GEN)		\
+	$(top_builddir)/meta/guile --no-auto-compile		\
+	  $(srcdir)/libguile/texi-fragments-to-docstrings	\
+	  $(builddir)/libguile/guile-procedures.texi		\
+	   libguile/guile-procedures.txt
+
 EXTRA_DIST = LICENSE HACKING GUILE-VERSION			\
 	 m4/ChangeLog-2008	\
 	 m4/gnulib-cache.m4	\
@@ -50,7 +62,8 @@ EXTRA_DIST = LICENSE HACKING GUILE-VERSION			\
 	 gnulib-local/lib/localcharset.h.diff		\
 	 gnulib-local/lib/localcharset.c.diff		\
 	 gnulib-local/m4/clock_time.m4.diff			\
-	 gnulib-local/build-aux/git-version-gen.diff
+	 gnulib-local/build-aux/git-version-gen.diff	\
+	 libguile/texi-fragments-to-docstrings
 
 TESTS = check-guile
 TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@
diff --git a/libguile/Makefile.am b/libguile/Makefile.am
index d77bdfe..450d955 100644
--- a/libguile/Makefile.am
+++ b/libguile/Makefile.am
@@ -713,25 +713,9 @@ guile.texi: $(alldotdocfiles) guile$(EXEEXT)
 guile-procedures.texi: $(alldotdocfiles) guile$(EXEEXT)
 	$(AM_V_GEN)$(dotdoc2texi)   $@ || { rm $@; false; }
 
-if HAVE_MAKEINFO
-
-guile-procedures.txt: guile-procedures.texi
-	rm -f $@
-	makeinfo --force -o $@ guile-procedures.texi || test -f $@
-
-else
-
-guile-procedures.txt: guile-procedures.texi
-	cp guile-procedures.texi $@
-
-endif
-
 c-tokenize.c: c-tokenize.lex
 	flex -t $(srcdir)/c-tokenize.lex  $@ || { rm $@; false; }
 
-schemelibdir = $(pkgdatadir)/$(GUILE_EFFECTIVE_VERSION)
-schemelib_DATA = guile-procedures.txt
-
 ## Add -MG to make the .x magic work with auto-dep code.
 MKDEP = gcc -M -MG $(DEFS) $(AM_CPPFLAGS) $(CPPFLAGS) $(CFLAGS)
 
diff --git a/libguile/texi-fragments-to-docstrings b/libguile/texi-fragments-to-docstrings
new file mode 100644
index 000..b72390b
--- /dev/null
+++ b/libguile/texi-fragments-to-docstrings
@@ -0,0 +1,55 @@
+;;; -*- mode: scheme; coding: utf-8; -*-
+;;;
+;;; Copyright (C) 2013 Free Software Foundation, Inc.
+;;;
+;;; This library is free software; you can redistribute it and/or
+;;; modify it under the terms of the GNU Lesser General Public
+;;; License as published by the Free Software Foundation; either
+;;; version 3 of the License, or (at your option) any later version.
+;;;
+;;; This library is distributed in the hope that it will be useful,
+;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+;;; Lesser General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU Lesser General Public
+;;; License along with this library; if not, write to the Free Software
+;;; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+
+;;;
+;;; Read Texinfo 

Re: makeinfo swallows page breaks

2013-03-21 Thread Mike Gran
Hi Ludo



 Attached is a patch to use Guile’s Texinfo support [0] to build said
 file.  Guile’s Texinfo parser is incomplete but sufficient to handle
 those docstrings.

 OK to commit?

If Guile depends on Guile for multiple stages the build, it becomes
difficult to recover from a problem when the build is failing.

So maybe this commit will lead to better, more methodical hacking; maybe
it will make fixing a broken Guile more annoying.

Dunno.

-Mike




Re: makeinfo swallows page breaks

2013-03-21 Thread Ludovic Courtès
Mike Gran spk...@yahoo.com skribis:

 Attached is a patch to use Guile’s Texinfo support [0] to build said
 file.  Guile’s Texinfo parser is incomplete but sufficient to handle
 those docstrings.

 OK to commit?

 If Guile depends on Guile for multiple stages the build, it becomes
 difficult to recover from a problem when the build is failing.

Well, that’s nothing compared to its bootstrapping procedure.  :-)

 So maybe this commit will lead to better, more methodical hacking; maybe
 it will make fixing a broken Guile more annoying.

It will force us to maintain the Texinfo modules at a reasonable level,
which I think it’s good.  Hopefully, if something breaks, it will break
deterministically.

Conversely, here people with Texinfo 5.x get no docstrings (and thus
failing tests), people with an older Texinfo don’t have any problems,
and people without Texinfo have no problem but their docstrings include
unprocessed markup.

Overall, I really think it’s an improvement.

Ludo’.



Re: makeinfo swallows page breaks

2013-03-21 Thread Karl Berry
Guileœôòùs Texinfo parser

Argh.  The idea of a full second Texinfo parser in GNU is fundamentally
wrong.  If you want to call it a Guile docstring parser, whose language
happens to bear some resemblance to a subset of Texinfo, fine.

Anyway, your change to use more Guile in the Guile build procedures
makes sense to me.

k