File: lex-clean-cxx.sh

package info (click to toggle)
automake 1%3A1.18.1-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 14,228 kB
  • sloc: sh: 60,348; perl: 14,562; makefile: 115; ansic: 9
file content (136 lines) | stat: -rw-r--r-- 2,974 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
#! /bin/sh
# Copyright (C) 2011-2025 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/>.

# Check that C++ source files derived from non-distributed Lex sources
# are cleaned by "make clean", while C++ source files derived from
# distributed Lex sources are cleaned by "make maintainer-clean".
# See also sister test 'lex-clean.sh'.

required='c++ lex'
. test-init.sh

cat >> configure.ac << 'END'
AC_PROG_CXX
AC_PROG_LEX
AC_OUTPUT
END

cat > Makefile.am << 'END'
AM_LFLAGS = --never-interactive

bin_PROGRAMS = foo bar baz qux

foo_SOURCES = mainfoo.cc parsefoo.lxx

bar_SOURCES = mainbar.cpp parsebar.ll
bar_LFLAGS = $(AM_LFLAGS)

baz_SOURCES = mainbaz.c++
nodist_baz_SOURCES = parsebaz.l++

qux_SOURCES = mainqux.cxx
nodist_qux_SOURCES = parsequx.lpp
qux_LFLAGS = $(AM_LFLAGS)

parsebaz.l++ parsequx.lpp:
	cp $(srcdir)/parsefoo.lxx $@

CLEANFILES = parsebaz.l++ parsequx.lpp

LDADD = $(LEXLIB)
END

# For the explanation of the conditionals on using extern "C",
# see https://debbugs.gnu.org/cgi/bugreport.cgi?bug=45205#13.
cat > parsefoo.lxx << 'END'
%{
#define YY_DECL int yylex (void)
#if (defined __cplusplus) && ((!defined __sun) || (defined __EXTERN_C__))
extern "C"
#endif
YY_DECL;
%}
%%
"GOOD"   return EOF;
.
%%
int yywrap (void)
{
  return 1;
}
END
cp parsefoo.lxx parsebar.ll

cat > mainfoo.cc << 'END'
// This file should contain valid C++ but invalid C.
#if (defined __cplusplus) && ((!defined __sun) || (defined __EXTERN_C__))
extern "C"
#endif
int yylex (void);
using namespace std;
int main (int argc, char **argv)
{
  return yylex ();
}
END
cp mainfoo.cc mainbar.cpp
cp mainfoo.cc mainbaz.c++
cp mainfoo.cc mainqux.cxx

$ACLOCAL
$AUTOCONF
$AUTOMAKE -a

./configure

cp config.status config.sav

$MAKE
ls -l
# Sanity checks.
test -f parsefoo.cxx
test -f bar-parsebar.cc
test -f parsebaz.l++
test -f parsebaz.c++
test -f parsequx.lpp
test -f qux-parsequx.cpp

for target in clean distclean; do
  $MAKE $target
  ls -l
  test -f parsefoo.cxx
  test -f bar-parsebar.cc
  test ! -e parsebaz.l++
  test ! -e parsebaz.c++
  test ! -e parsequx.lpp
  test ! -e qux-parsequx.cpp
done

cp config.sav config.status
./config.status # re-create Makefile

$MAKE maintainer-clean
ls -l
test -f parsefoo.lxx
test -f parsebar.ll
test ! -e parsefoo.cxx
test ! -e bar-parsebar.cc
test -f parsefoo.lxx
test -f parsebar.ll
test ! -e parsefoo.cxx
test ! -e bar-parsebar.cc

: