Edit

kc3-lang/automake/t/yacc-basic.sh

Branch :

  • Show log

    Commit

  • Author : Akim Demaille
    Date : 2021-09-11 10:06:13
    Hash : 2bb6340f
    Message : tests: let yacc's yyerror take its argument as a const string Some of yacc error messages are const strings; it makes no sense for yyerror to take a 'char *', it should be a 'const char *' as POSIX now requires. Fixes all the failures reported by Kiyoshi Kanazawa. <https://lists.gnu.org/r/bug-bison/2021-09/msg00005.html> See bug#50469 <https://debbugs.gnu.org/50469>. * t/cond35.sh, t/silent-many-languages.sh, t/silent-yacc-headers.sh, * t/silent-yacc.sh, t/subpkg-yacc.sh, t/suffix10.tap, t/yacc-basic.sh, * t/yacc-clean.sh, t/yacc-d-basic.sh, t/yacc-d-vpath.sh, * t/yacc-deleted-headers.sh, t/yacc-depend.sh, t/yacc-depend2.sh, * t/yacc-dist-nobuild-subdir.sh, t/yacc-dist-nobuild.sh, t/yacc-dry.sh, * t/yacc-line.sh, t/yacc-misc.sh, t/yacc-mix-c-cxx.sh, t/yacc-nodist.sh, * t/yacc-pr204.sh, t/yacc-subdir.sh, t/yacc-vpath.sh, * t/yflags-cmdline-override.sh, t/yflags-force-override.sh (yyerror): From 'char *' to 'const char *'. Enforce consistency: prefer '{}' to '{ return; }'.

  • t/yacc-basic.sh
  • #! /bin/sh
    # Copyright (C) 2010-2021 Free Software Foundation, Inc.
    #
    # This program is free software; you can redistribute it and/or modify
    # it under the terms of the GNU General Public License as published by
    # the Free Software Foundation; either version 2, or (at your option)
    # any later version.
    #
    # This program 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 General Public License for more details.
    #
    # You should have received a copy of the GNU General Public License
    # along with this program.  If not, see <https://www.gnu.org/licenses/>.
    
    # Basic semantic checks on Yacc support (without yacc-generated headers).
    # Keep in sync with sister test 'yacc-cxx.sh'.
    
    required='cc yacc'
    . test-init.sh
    
    cat >> configure.ac << 'END'
    AC_PROG_CC
    AC_PROG_YACC
    AC_OUTPUT
    END
    
    cat > Makefile.am << 'END'
    bin_PROGRAMS = foo bar
    foo_SOURCES = parse.y foo.c
    bar_SOURCES = $(foo_SOURCES)
    bar_YFLAGS = -v
    
    .PHONY: echo-distcom
    echo-distcom:
    	@echo ' ' $(DIST_COMMON) ' '
    END
    
    cat > parse.y << 'END'
    %{
    #include <stdio.h>
    #include <stdlib.h>
    int yylex () { return getchar (); }
    void yyerror (const char *s) {}
    %}
    %%
    a : 'a' { exit(0); };
    END
    
    cat > foo.c << 'END'
    int main () { yyparse (); return 1; }
    END
    
    $ACLOCAL
    $AUTOCONF
    $AUTOMAKE -a
    
    ./configure
    $MAKE
    ls -l
    # The Yacc-derived C sources must be created, and not removed once
    # compiled (i.e., not treated like "intermediate files" in the GNU
    # make sense).
    test -f parse.c
    test -f bar-parse.c
    # Check that per-object flags are honored.
    test -f bar-parse.output
    
    if ! cross_compiling; then
      echo a | ./foo
      echo b | ./foo && exit 1
      echo a | ./bar
      echo b | ./bar && exit 1
      : For shells with busted 'set -e'.
    fi
    
    # The Yacc-derived C sources must be shipped.
    $MAKE echo-distcom
    $MAKE -s echo-distcom | grep '[ /]parse\.c '
    $MAKE -s echo-distcom | grep '[ /]bar-parse\.c '
    $MAKE distdir
    ls -l $distdir
    test -f $distdir/parse.c
    test -f $distdir/bar-parse.c
    
    # Sanity check on distribution.
    # Note that, for this to succeed, bar-parse.output must either not
    # be distributed, or properly cleaned by automake-generated rules.
    # We don't want to set the exact semantics yet, but want to ensure
    # they are are consistent.
    yl_distcheck
    
    # Make sure that the Yacc-derived C sources are erased by
    # maintainer-clean, and not by distclean.
    test -f parse.c
    test -f bar-parse.c
    $MAKE distclean
    ls -l
    test -f parse.c
    test -f bar-parse.c
    ./configure # We must re-create 'Makefile'.
    $MAKE maintainer-clean
    ls -l
    test ! -e parse.c
    test ! -e bar-parse.c
    
    :