Merge branch 'msvc' into maint
[platform/upstream/automake.git] / tests / silent-lex-gcc.test
1 #!/bin/sh
2 # Copyright (C) 2010, 2011 Free Software Foundation, Inc.
3 #
4 # This program is free software; you can redistribute it and/or modify
5 # it under the terms of the GNU General Public License as published by
6 # the Free Software Foundation; either version 2, or (at your option)
7 # any later version.
8 #
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 # GNU General Public License for more details.
13 #
14 # You should have received a copy of the GNU General Public License
15 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
16
17 # Check silent-rules mode for Lex, forcing gcc depmode.
18 # Keep this in sync with sister test `silent-lex-generic.test'.
19
20 required='flex gcc'
21 . ./defs || Exit 1
22
23 set -e
24
25 mkdir sub
26
27 cat >>configure.in <<'EOF'
28 AM_SILENT_RULES
29 AM_PROG_CC_C_O
30 AC_PROG_LEX
31 AC_CONFIG_FILES([sub/Makefile])
32 AC_OUTPUT
33 EOF
34
35 cat > Makefile.am <<'EOF'
36 # Need generic and non-generic rules.
37 bin_PROGRAMS = foo1 foo2
38 foo1_SOURCES = foo.l
39 foo2_SOURCES = $(foo1_SOURCES)
40 foo2_CFLAGS = $(AM_CFLAGS)
41 SUBDIRS = sub
42 LDADD = $(LEXLIB)
43 EOF
44
45 cat > sub/Makefile.am <<'EOF'
46 AUTOMAKE_OPTIONS = subdir-objects
47 # Need generic and non-generic rules.
48 bin_PROGRAMS = bar1 bar2
49 bar1_SOURCES = bar.l
50 bar2_SOURCES = $(bar1_SOURCES)
51 bar2_CFLAGS = $(AM_CFLAGS)
52 LDADD = $(LEXLIB)
53 EOF
54
55 cat > foo.l <<'EOF'
56 %%
57 "END"   return EOF;
58 .
59 %%
60 /* Avoid possible link errors. */
61 int yywrap (void) { return 1; }
62 int   main (void) { return 0; }
63 EOF
64 cp foo.l sub/bar.l
65
66 $ACLOCAL
67 $AUTOMAKE --add-missing
68 $AUTOCONF
69
70 # Force gcc ("fast") depmode.
71 # This apparently useless "for" loop is here to simplify the syncing
72 # with sister test `silent-lex-gcc.test'.
73 for config_args in \
74   am_cv_CC_dependencies_compiler_type=gcc
75 do
76   ./configure $config_args --enable-silent-rules
77
78   $MAKE >stdout || { cat stdout; Exit 1; }
79   cat stdout
80
81   $EGREP ' (-c|-o)' stdout && Exit 1
82   $EGREP '(mv|ylwrap) ' stdout && Exit 1
83
84   grep 'LEX .*foo\.' stdout
85   grep 'LEX .*bar\.' stdout
86   grep ' CC .*foo\.' stdout
87   grep ' CC .*bar\.' stdout
88   grep 'CCLD .*foo1' stdout
89   grep 'CCLD .*bar1' stdout
90   grep 'CCLD .*foo2' stdout
91   grep 'CCLD .*bar2' stdout
92
93   # Cleaning and then rebuilding with the same V flag (and without
94   # removing the generated sources in between) shouldn't trigger a
95   # different set of rules.
96   $MAKE clean
97
98   $MAKE >stdout || { cat stdout; Exit 1; }
99   cat stdout
100
101   $EGREP ' (-c|-o)' stdout && Exit 1
102   $EGREP '(mv|ylwrap) ' stdout && Exit 1
103
104   # Don't look for LEX, as probably lex hasn't been re-run.
105   grep ' CC .*foo\.' stdout
106   grep ' CC .*bar\.' stdout
107   grep 'CCLD .*foo1' stdout
108   grep 'CCLD .*bar1' stdout
109   grep 'CCLD .*foo2' stdout
110   grep 'CCLD .*bar2' stdout
111
112   # Ensure a truly clean rebuild.
113   $MAKE clean
114   rm -f foo.c sub/bar.c
115
116   $MAKE V=1 >stdout || { cat stdout; Exit 1; }
117   cat stdout
118
119   grep ' -c ' stdout
120   grep ' -o ' stdout
121   grep 'ylwrap ' stdout
122
123   $EGREP '(LEX|CC|CCLD) ' stdout && Exit 1
124
125   # Cleaning and then rebuilding with the same V flag (and without
126   # removing the generated sources in between) shouldn't trigger a
127   # different set of rules.
128   $MAKE clean
129
130   $MAKE V=1 >stdout || { cat stdout; Exit 1; }
131   cat stdout
132
133   # Don't look for ylwrap, as probably lex hasn't been re-run.
134   grep ' -c ' stdout
135   grep ' -o ' stdout
136
137   $EGREP '(LEX|CC|CCLD) ' stdout && Exit 1
138
139   # Ensure a truly clean reconfiguration/rebuild.
140   $MAKE clean
141   $MAKE maintainer-clean
142   rm -f foo.c sub/bar.c
143
144 done
145
146 :