GNU bug report logs - #10825
Better bison support in Automake (was: Re: FYI: master: calc++: rely on Automake)

Please note: This is a static page, with minimal formatting, updated once a day.
Click here to see this page with the latest information and nicer formatting.

Package: automake; Reported by: Stefano Lattarini <stefano.lattarini@HIDDEN>; dated Thu, 16 Feb 2012 10:25:01 UTC; Maintainer for automake is bug-automake@HIDDEN.

Message received at submit <at> debbugs.gnu.org:


Received: (at submit) by debbugs.gnu.org; 16 Feb 2012 17:09:42 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Feb 16 12:09:42 2012
Received: from localhost ([127.0.0.1]:42763 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.72)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1Ry4px-0006q3-72
	for submit <at> debbugs.gnu.org; Thu, 16 Feb 2012 12:09:42 -0500
Received: from eggs.gnu.org ([140.186.70.92]:59758)
	by debbugs.gnu.org with esmtp (Exim 4.72)
	(envelope-from <akim@HIDDEN>) id 1RxzVZ-0004BR-Sn
	for submit <at> debbugs.gnu.org; Thu, 16 Feb 2012 06:28:19 -0500
Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71)
	(envelope-from <akim@HIDDEN>) id 1RxzTf-0007M2-RM
	for submit <at> debbugs.gnu.org; Thu, 16 Feb 2012 06:26:25 -0500
X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on eggs.gnu.org
X-Spam-Level: 
X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,T_RP_MATCHES_RCVD
	autolearn=unavailable version=3.3.2
Received: from lists.gnu.org ([140.186.70.17]:42471)
	by eggs.gnu.org with esmtp (Exim 4.71)
	(envelope-from <akim@HIDDEN>) id 1RxzTf-0007Lv-Pd
	for submit <at> debbugs.gnu.org; Thu, 16 Feb 2012 06:26:19 -0500
Received: from eggs.gnu.org ([140.186.70.92]:37327)
	by lists.gnu.org with esmtp (Exim 4.71)
	(envelope-from <akim@HIDDEN>) id 1RxzTb-0005mb-Ng
	for bug-automake@HIDDEN; Thu, 16 Feb 2012 06:26:19 -0500
Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71)
	(envelope-from <akim@HIDDEN>) id 1RxzTT-0007KQ-Gx
	for bug-automake@HIDDEN; Thu, 16 Feb 2012 06:26:15 -0500
Received: from sao-paulo.lrde.epita.fr ([163.5.55.1]:37944
	helo=kualalumpur.lrde.epita.fr)
	by eggs.gnu.org with esmtp (Exim 4.71)
	(envelope-from <akim@HIDDEN>)
	id 1RxzT4-0007Hf-Kd; Thu, 16 Feb 2012 06:25:42 -0500
Received: from tenochtitlan-eth.lrde.epita.fr ([192.168.101.154])
	by kualalumpur.lrde.epita.fr with esmtpsa
	(TLS-1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.63)
	(envelope-from <akim@HIDDEN>)
	id 1RxzT2-0001D2-2a; Thu, 16 Feb 2012 12:25:40 +0100
Subject: Re: Better bison support in Automake (was: Re: FYI: master: calc++:
	rely on Automake)
Mime-Version: 1.0 (Apple Message framework v1084)
Content-Type: multipart/mixed; boundary=Apple-Mail-7-1044505626
From: Akim Demaille <akim@HIDDEN>
In-Reply-To: <4F3CD8AB.6030605@HIDDEN>
Date: Thu, 16 Feb 2012 12:25:40 +0100
Message-Id: <07F1EE92-0749-422F-94FB-77F13748B038@HIDDEN>
References: <639EC8E7-E42F-478B-89ED-63ED3D2DE7B3@HIDDEN>
	<4F3BA288.4020802@HIDDEN>
	<78F5F00C-272C-46F2-8A4D-79983F196062@HIDDEN>
	<4F3CD8AB.6030605@HIDDEN>
To: Stefano Lattarini <stefano.lattarini@HIDDEN>
X-Mailer: Apple Mail (2.1084)
X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 3)
X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 3)
X-Received-From: 140.186.70.17
X-Spam-Score: -4.2 (----)
X-Debbugs-Envelope-To: submit
X-Mailman-Approved-At: Thu, 16 Feb 2012 12:09:39 -0500
Cc: bug-automake@HIDDEN, Bison Patches <bison-patches@HIDDEN>,
	automake-patches@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <http://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>,
	<mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <http://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <http://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>,
	<mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Sender: debbugs-submit-bounces <at> debbugs.gnu.org
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
X-Spam-Score: -4.2 (----)


--Apple-Mail-7-1044505626
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain;
	charset=iso-8859-1


Le 16 f=E9vr. 2012 =E0 11:21, Stefano Lattarini a =E9crit :

> Hi Akim.

Hi!

> Thanks, fixed (see attached patch).
>=20
>> But maybe automake no longer needs this?
>>=20
> It still need it; without that, no header file will be generated from
> the '.y' files (this is a feature, not a bug).
>=20
>> If it does, it would be good to recognize also --defines.
>>=20
> Maybe; but then, it should be done right, i.e., automake should also
> understand hand handle the '--defines=3Dmy-hdr.h' usage.  But I guess
> this would conflict with ylwrap in some way, sigh :-(
>=20
> Maybe it's truly time to introduce a new AM_PROG_BISON macro that
> will cause automake to drop all the cruft related to POSIX yacc
> compatibility ...  As usual, patches welcome ;-)

One of the problems that you would face is that it's hard
to know what files will be created by Bison.  Actually,
bison and only bison can know.  For instance currently
for C++ it generates stack.hh and other files that users
find painful to deal with, so I plan to have them go
into the generated *.cc file, upon user request.  This is
not something automake should know.

What would be your preferred option?  Would you like some sort
of --dry-run option that would in addition send the list of created
files on stdout?  Or an option to generate an additional file
with the list of the generated files during the normal run?
Or a Makefile snippet a la -M.

FWIW, I also use a wrapper around Bison, for several reasons:
I like to see the diffs, I want to run xsltproc to get the HTML
report, I want to keep old timestamps when possible, I'd like
to "optimize" some part of the output, etc.

Someone might find them useful, so here they are.


--Apple-Mail-7-1044505626
Content-Disposition: attachment;
	filename=bison++.in
Content-Type: application/octet-stream;
	name="bison++.in"
Content-Transfer-Encoding: 7bit

#! /bin/sh
##
## bison++.in: This file is part of build-aux.
## Copyright (C) 2006-2010, 2012, Gostai S.A.S.
##
## This software is provided "as is" without warranty of any kind,
## either expressed or implied, including but not limited to the
## implied warranties of fitness for a particular purpose.
##
## See the LICENSE file for more information.
##


# Exit status.
status=0

# Any tool failure is a failure of the script.
set -e

: ${BISON='@BISON@'}

stderr ()
{
  local i
  for i
  do
    echo "$i"
  done | sed >&2 -e "s/^/$me: /"
}

verbose ()
{
  if "$verbose"; then
    stderr "$@"
  fi
}

fatal ()
{
  stderr "$@"
  exit 1
}

usage ()
{
  cat <<EOF
usage: bison++ OPTIONS... -- INPUT OUTPUT BISON-OPTIONS

Options:
  -h, --help             display this message and exit successfully
  --location-dir=DIR     where to install position.hh and location.hh.
                         E.g., "\$(top_srcdir)/include/foo"
  --location-prefix=DIR  where #include must look for these headers.
                         E.g., "foo"
  --verbose              display diffs
EOF
  exit 0
}

me=$(basename $0)
fuse_switch='@abs_srcdir@/fuse-switch'
move_if_change='@abs_srcdir@/move-if-change --color'
verbose=false

## ---------------------- ##
## Command line parsing.  ##
## ---------------------- ##

get_options ()
{
  while test $# != 0
  do
    # Handle --option=value by splitting apart and putting back on argv.
    case $1 in
      (--*=*)
	opt=$(echo "$1" | sed -e 's/=.*//')
	val=$(echo "$1" | sed -e 's/[^=]*=//')
	shift
	set dummy "$opt" "$val" ${1+"$@"}; shift
	;;
    esac

    case $1 in
      (-h | --help   )    usage;;
      (--location-dir)    shift; location_dir=$1;;
      (--location-prefix) shift; location_prefix=$1/;;
      (--verbose)         verbose=:
                          move_if_change="$move_if_change --verbose";;
      (--) shift; break;;
      (*) fatal "invalid argument: $1";;
     esac
     shift
  done

  input=$1
  shift
  output=$1
  shift
  bisonflags="$@"
}


## ------ ##
## Main.  ##
## ------ ##

get_options "$@"

input_base=$(basename "$input")
input_dir=$(dirname "$input")

output_base=$(basename "$output")
output_base_noext=$(echo "$output_base" | sed -e 's/\.[^.]*//')
output_dir=$(dirname "$output")

: ${location_dir=$output_dir}

# The namespace we are in.
# FIXME: We need $srcdir to be able to compute it.
namespace=parser

if $BISON --xml --version >/dev/null 2>&1; then
  bisonflags="$bisonflags --xml"
fi

# Alexandre Duret-Lutz also notes that in VPATH-builds $(srcdir) can
# be an absolute path depending on how ./configure is called ...
# In that case

#   bison $(srcdir)/parsetiger.yy [...]

# will hard code the path in the maintainer's tree.  Hence, do not use
# paths with Bison, chdir there.

# A tmp dir.
tmp=$output_base_noext.dir
rm -rf $tmp
mkdir $tmp

# Compile in this dir.
# Don't use `ln -s' as its semantics of paths sucks.
cp $input $tmp
cd $tmp
set +e
$BISON $bisonflags $input_base -o $output_base
status=$?
set -e


# fix_bison_output FILE
# ---------------------
# Fixes in place.
fix_bison_output ()
{
  local file="$1"
  local base
  base=$(basename "$file")
  local base_noext
  base_noext=$(echo "$file" | sed -e 's/\..*//')
  perl -pi -e "
# Fix doxygen tags.
s|\Q\\file $base\E\b|\\\\file $namespace/$base|g;

# Fix sync lines for composite paths.
s|(^#line.*)$base_noext|\$1$input_dir/$base_noext|g;

# In case position.hh and location.hh were moved.
s{include \"(position.hh|location.hh)\"}
 {include <$location_prefix\$1>}g;

# Bison lacks a means to include headers in position.hh.
print <<EOF if \$ARGV =~ /position.hh/ && /namespace yy/;
# include <libport/symbol.hh>
# include <libport/windows.hh>
EOF

# Kill all the trailing blanks.
s/[ \t]+\$//;
"  "$1"

  # Fuse the switches of the parser.
  case $file in
    (*.cc) $fuse_switch $file
          # diff -uw $file.bak $file || true
          ;;
  esac
}

# compile_xml_file XML XSL OUT-EXT
# --------------------------------
# By transforming XML = FILE.xml with XSL.xsl, create FILE.OUT-EXT if needed.
# "Needed" means FILE.OUT-EXT does not exist, or XML was updated.
compile_xml_file ()
{
  local xml="$1"
  local xsl="$2.xsl"
  local out
  out=$(basename "$xml" ".xml").$3

  # "cmp NON-EXISTENT FILE" does what we want: fail.
  if ! cmp -s "$xml" "$(out "$xml")" \
      || test ! -f "$(out "$out")"; then
    local compile="xsltproc $($BISON --print-datadir)/xslt/$xsl"
    if ! $compile "$xml" >"$(tmp "$out")"; then
      stderr "cannot convert $xml report to $out"
      # Produce a stub for the HTML for sake of the Makefile.
      cat >"$(tmp "$out")" <<EOF
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html>
  <head>
    <title>Cannot run xsltproc</title>
  </head>
  <body>
    <p>Cannot run xsltproc</p>
  </body>
</html>
EOF
    fi
    install "$out"
  fi
}

# out FILE
# --------
# Return path name of FILE once installed in its destination directory.
out ()
{
  local f
  f=$(basename "$1")
  case $f in
    (position.hh|location.hh) echo "$location_dir/$f";;
    (*)                       echo "$output_dir/$f";;
  esac
}

# out FILE
# --------
# Return path name of FILE in the tmp directory.
tmp ()
{
  echo "$tmp/$(basename "$1")"
}

# install FILE
# ------------
# Install FILE in its destination directory.
install ()
{
  local dest
  dest=$(out "$1")
  local dir
  dir=$(dirname "$dest")
  mkdir -p "$dir" ||
    fatal "cannot create $dir"
  $move_if_change "$(tmp "$1")" "$dest"
}

# Go back to where we were and use relative paths instead of using
# absolute file names.  The messages look nicer.
cd ..
for file in $tmp/*
do
  base=$(basename $file)
  base_noext=$(echo "$base" | sed -e 's/\.[^.]*//')
  case $status:$base in
    (*:$input_base)
	# Leave it here.
	;;

    # Success or not, install it.
    (*:*.xml)
	# Computing the HTML is slow.  Do it when the XML changed.
	fix_bison_output "$file"
	compile_xml_file "$file" "xml2xhtml" "html"
	# Compiling the dot output is quite long, it would be better
	# to do that from the Makefile, so that -j applies.
	# compile_xml_file "$file" "xml2dot" "dot"
	install "$file"
	;;

    (0:*.hh)
	fix_bison_output "$file"
	# To save cycles, if the file differs only on sync lines,
	# update it (to be right), but keep the original timestamps.
	if test -r "$(out "$file")" &&
	   diff -I '^#line' -I '/\* Line .* of .*  \*/' -q \
                "$file" "$(out "$file")"
        then
	    touch -r "$(out "$file")" "$file"
	    cp "$(out "$file")" "$(out "$file").bak"
	    verbose "kept the stamps of $file"
	fi
	install "$file"
	;;

    (*:*.output)
	install "$file"
	;;

    (0:*)
	fix_bison_output "$file"
	install "$file"
	;;
  esac
done

# Get rid of the tmp dir.
rm -rf $tmp
exit $status

--Apple-Mail-7-1044505626
Content-Disposition: attachment;
	filename=fuse-switch
Content-Type: application/octet-stream;
	name="fuse-switch"
Content-Transfer-Encoding: 7bit

#! /usr/bin/perl -w

# This script *tries* to fuse consecutive "switches" that have the
# same body.
#
# Usage: $0 FILES
#
# Leaves a copy of the input files as FILE.bak.


use strict;

my $case_re = '^\s*(case\b.*|default)\s*:';

# Return the block of code with all the ignored parts removed.
sub code ($)
{
  local ($_) = @_;
#  print STDERR "CODE IN: $_";
  s,//.*,,gm;
  s,/\*.*?.*\*/,,gm;
  s/#line .*//gm;
#  print STDERR "CODE OUT: $_";
  return $_;
}

# Compare two case blocks against equality, ignoring the case label.
sub case_eq($$)
{
  my ($b1, $b2) = @_;
  return case_body(code($b1)) eq case_body(code($b2));
}

# Return the line which contains the "case" this block of code.
sub case_label($)
{
  my ($case) = @_;
  my $res = '';
  for my $line (split "\n", $case)
    {
      # We put no space at the end of '//-' not to introduce trailing
      # spaces.
      $res .= ($line !~ /$case_re/ && '//-') . $line . "\n"
    }
  return $res;
}

# Return the case-block without its case line.
sub case_body($)
{
  local ($_) = @_;
# print STDERR "BODY IN: $_";
  s/^.*$case_re.*\n//mg;
#  print STDERR "BODY OUT: $_";
  return $_;
}


sub fuse($$)
{
  my ($input, $output) = @_;
  use IO::File;

  my $in = new IO::File($input) or die;
  my $out = new IO::File(">$output") or die;

  # Something before the next $case.
  my $pre_case = '';
  # The body of the case: from case/default to the next break;
  # There must be no break inside.
  my $case = '';
  my $previous_case = '';

  # Whether we are in the switch {}.
  my $in_switch = 0;

  while ($_ = $in->getline)
    {
#      print STDERR "\$_ = $_";
      if (!$in_switch)
        {
          if (/^\s*switch\b/)
            {
              $in_switch = 1;
            }
        }
      else
        {
          # in switch.
          #
          # The "default: break" one a single line is output by
          # bison's lalr1.cc..
          if (m/$case_re/ .. m/^\s*(?:default:\s*)?break/)
            {
              # Register the current case.
              $case .= $_;
              if (/break/)
                {
                  if (case_eq($previous_case, $case))
                    {
#                      print STDERR "== {{$previous_case}} {{$case}}\n";
                      $_ = case_label ($previous_case);
                    }
                  else
                    {
                      # The previous case is needed.
#                      print STDERR "!= {{$previous_case}} {{$case}}\n";
                      $_ = $previous_case;
                    }
                  $previous_case = $case;
                  $case = "";
                  $_ .= $pre_case;
                  $pre_case = '';
                }
              else
                {
                  # Print nothing.
                  $_ = "";
                }
            }
          elsif (m/}/)
            {
              # The closing brace of the switch.
              $_ = $previous_case . $pre_case . $_;
              $pre_case = '';
              $previous_case = '';
              $in_switch = 0;
            }
          else
            {
              # Something in a switch, but not in a case.  Keep it,
              # and output it before the forth coming output.  Don't
              # put it in $case though, as it would be commented out,
              # which might be wrong (e.g., pragmas, or cpp
              # directives).
              $pre_case .= $_;
              $_ = '';
            }
        }
      print $out $_;
    }
  die "could not insert $pre_case"
    if $pre_case;
}

use File::Copy;
for my $file (@ARGV)
{
  copy ($file, "$file.bak") or die;
  fuse("$file.bak", "$file");
}

### Setup "GNU" style for perl-mode and cperl-mode.
## Local Variables:
## perl-indent-level: 2
## perl-continued-statement-offset: 2
## perl-continued-brace-offset: 0
## perl-brace-offset: 0
## perl-brace-imaginary-offset: 0
## perl-label-offset: -2
## cperl-indent-level: 2
## cperl-brace-offset: 0
## cperl-continued-brace-offset: 0
## cperl-label-offset: -2
## cperl-extra-newline-before-brace: t
## cperl-merge-trailing-else: nil
## cperl-continued-statement-offset: 2
## End:

--Apple-Mail-7-1044505626--




Information forwarded to bug-automake@HIDDEN:
bug#10825; Package automake. Full text available.

Message received at submit <at> debbugs.gnu.org:


Received: (at submit) by debbugs.gnu.org; 16 Feb 2012 10:24:10 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Feb 16 05:24:10 2012
Received: from localhost ([127.0.0.1]:42243 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.72)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1RxyVW-0002iL-Do
	for submit <at> debbugs.gnu.org; Thu, 16 Feb 2012 05:24:10 -0500
Received: from eggs.gnu.org ([140.186.70.92]:35100)
	by debbugs.gnu.org with esmtp (Exim 4.72)
	(envelope-from <stefano.lattarini@HIDDEN>) id 1RxyVT-0002i6-JP
	for submit <at> debbugs.gnu.org; Thu, 16 Feb 2012 05:24:09 -0500
Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71)
	(envelope-from <stefano.lattarini@HIDDEN>) id 1RxyTd-0004GE-Tl
	for submit <at> debbugs.gnu.org; Thu, 16 Feb 2012 05:22:15 -0500
X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on eggs.gnu.org
X-Spam-Level: 
X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00,FREEMAIL_FROM,
	RCVD_IN_DNSWL_LOW,T_DKIM_INVALID autolearn=unavailable version=3.3.2
Received: from lists.gnu.org ([140.186.70.17]:46688)
	by eggs.gnu.org with esmtp (Exim 4.71)
	(envelope-from <stefano.lattarini@HIDDEN>) id 1RxyTd-0004G8-Pv
	for submit <at> debbugs.gnu.org; Thu, 16 Feb 2012 05:22:13 -0500
Received: from eggs.gnu.org ([140.186.70.92]:58967)
	by lists.gnu.org with esmtp (Exim 4.71)
	(envelope-from <stefano.lattarini@HIDDEN>) id 1RxyTY-0001uW-4Y
	for bug-automake@HIDDEN; Thu, 16 Feb 2012 05:22:13 -0500
Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71)
	(envelope-from <stefano.lattarini@HIDDEN>) id 1RxyTR-0004Eo-Pq
	for bug-automake@HIDDEN; Thu, 16 Feb 2012 05:22:08 -0500
Received: from mail-bk0-f41.google.com ([209.85.214.41]:64025)
	by eggs.gnu.org with esmtp (Exim 4.71)
	(envelope-from <stefano.lattarini@HIDDEN>)
	id 1RxyT3-0004C9-VP; Thu, 16 Feb 2012 05:21:38 -0500
Received: by bkty12 with SMTP id y12so2125980bkt.0
	for <multiple recipients>; Thu, 16 Feb 2012 02:21:36 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma;
	h=message-id:date:from:mime-version:to:cc:subject:references
	:in-reply-to:content-type;
	bh=ChJZqfBM2y/wiKac+e/61Bb6ztnBbkk3BNxWcDOgDuA=;
	b=QjgqDydAhFWkDAkUE/wbQk1FphiEBq6QhP+6EvPkp6dflbqie28gfDiyu/S51HriYg
	/A+hcJZL61zWfegy0/gnz6jEkI2J2NU8G8vyJ9t+JcHWew/pO0qqBu8Kp5h+k828nIe3
	ewDMW2X/igiMMMSEUkRs+PHA7jfDSQ6M5wqMQ=
Received: by 10.204.128.146 with SMTP id k18mr827445bks.92.1329387696589;
	Thu, 16 Feb 2012 02:21:36 -0800 (PST)
Received: from [87.0.95.92] (host92-95-dynamic.0-87-r.retail.telecomitalia.it.
	[87.0.95.92])
	by mx.google.com with ESMTPS id x11sm11934893bkd.2.2012.02.16.02.21.33
	(version=SSLv3 cipher=OTHER); Thu, 16 Feb 2012 02:21:35 -0800 (PST)
Message-ID: <4F3CD8AB.6030605@HIDDEN>
Date: Thu, 16 Feb 2012 11:21:31 +0100
From: Stefano Lattarini <stefano.lattarini@HIDDEN>
MIME-Version: 1.0
To: Akim Demaille <akim@HIDDEN>
Subject: Better bison support in Automake (was: Re: FYI: master: calc++: rely
	on Automake)
References: <639EC8E7-E42F-478B-89ED-63ED3D2DE7B3@HIDDEN>
	<4F3BA288.4020802@HIDDEN>
	<78F5F00C-272C-46F2-8A4D-79983F196062@HIDDEN>
In-Reply-To: <78F5F00C-272C-46F2-8A4D-79983F196062@HIDDEN>
Content-Type: multipart/mixed; boundary="------------010101060100030609080502"
X-detected-operating-system: by eggs.gnu.org: Genre and OS details not
	recognized.
X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 3)
X-Received-From: 140.186.70.17
X-Spam-Score: -3.4 (---)
X-Debbugs-Envelope-To: submit
Cc: bug-automake@HIDDEN, Bison Patches <bison-patches@HIDDEN>,
	automake-patches@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <http://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>,
	<mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <http://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <http://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>,
	<mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Sender: debbugs-submit-bounces <at> debbugs.gnu.org
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
X-Spam-Score: -3.4 (---)

This is a multi-part message in MIME format.
--------------010101060100030609080502
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit

[CC:ing bug-automake, so that we won't forget about the issues raised here]

Hi Akim.

On 02/15/2012 01:31 PM, Akim Demaille wrote:
> 
> Le 15 févr. 2012 à 13:18, Stefano Lattarini a écrit :
> 
>> On 02/15/2012 11:36 AM, Akim Demaille wrote:
>>> Rely on $(YACC) being the bison being built, and let Automake do the
>>> rest.  It turned out to be much more difficult than anticipated, for
>>> various reasons, including some bad behavior from Automake 1.11.2
>>> which (i) generates calc++-parser.h instead of calc++-parser.hh,
>>>
>> FYI: this will be fixed in automake 1.12 -- the patch fixing it being
>> already merged into master.
> 
> Thanks Stefano!
> 
> I can't clone automake right now (Savannah seems to be overloaded),
> so I can't check the following typo in the current documentation.
> It should take you only a couple of seconds to check.
> 
>>    ---------- Footnotes ----------
>>
>>    (1) Please note that `automake' recognizes `-d' in `AM_YFLAGS' only
>> if it is not clustered with other options; for example, it won't be
>> recognized if `AM_YFLAGS' is `-dt', but it will be if `AM_YFLAGS' is
>> `-d -t' or `-d -t'
> 
> I guess the latter is `-t -d', and the period is missing.
>
Thanks, fixed (see attached patch).

> But maybe automake no longer needs this?
>
It still need it; without that, no header file will be generated from
the '.y' files (this is a feature, not a bug).

> If it does, it would be good to recognize also --defines.
> 
Maybe; but then, it should be done right, i.e., automake should also
understand hand handle the '--defines=my-hdr.h' usage.  But I guess
this would conflict with ylwrap in some way, sigh :-(

Maybe it's truly time to introduce a new AM_PROG_BISON macro that
will cause automake to drop all the cruft related to POSIX yacc
compatibility ...  As usual, patches welcome ;-)

Regards,
  Stefano

--------------010101060100030609080502
Content-Type: text/x-diff;
 name="0001-docs-fix-typo-in-description-of-AM_YFLAGS.patch"
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
 filename*0="0001-docs-fix-typo-in-description-of-AM_YFLAGS.patch"

From 22b28b638a2d7d9d05bf7f2741367fc36f8bb8c0 Mon Sep 17 00:00:00 2001
Message-Id: <22b28b638a2d7d9d05bf7f2741367fc36f8bb8c0.1329387643.git.stefano.lattarini@HIDDEN>
From: Stefano Lattarini <stefano.lattarini@HIDDEN>
Date: Thu, 16 Feb 2012 11:09:50 +0100
Subject: [PATCH] docs: fix typo in description of AM_YFLAGS

Report by Akim Demaille.

* doc/automake.texi (Program variables): Don't list "-d -t" twice
in the examples of valid ways to specify the '-d' flag to Yacc;
instead, use "-d -t" and "-t -d".  Add missing period.
---
 doc/automake.texi |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/doc/automake.texi b/doc/automake.texi
index da134ef..8b1a84b 100644
--- a/doc/automake.texi
+++ b/doc/automake.texi
@@ -6209,7 +6209,7 @@ adjust its rules to update and distribute the header file built by
 @option{-d} in @code{AM_YFLAGS} only if it is not clustered with other
 options; for example, it won't be recognized if @code{AM_YFLAGS} is
 @option{-dt}, but it will be if @code{AM_YFLAGS} is @option{-d -t} or
-@option{-d -t}}.
+@option{-t -d}.}.
 What Automake cannot guess, though, is where this
 header will be used: it is up to you to ensure the header gets built
 before it is first used.  Typically this is necessary in order for
-- 
1.7.9


--------------010101060100030609080502--




Acknowledgement sent to Stefano Lattarini <stefano.lattarini@HIDDEN>:
New bug report received and forwarded. Copy sent to bug-automake@HIDDEN. Full text available.
Report forwarded to bug-automake@HIDDEN:
bug#10825; Package automake. Full text available.
Please note: This is a static page, with minimal formatting, updated once a day.
Click here to see this page with the latest information and nicer formatting.
Last modified: Fri, 31 Oct 2014 17:00:04 UTC

GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997 nCipher Corporation Ltd, 1994-97 Ian Jackson.