@@ -7,8 +7,9 @@ pkgconfigdir = @pkgconfigdir@
77m4 = @M4@
88
99bin_PROGRAMS = flex
10+
11+ EXTRA_PROGRAMS = stage1flex
1012if ENABLE_BOOTSTRAP
11- noinst_PROGRAMS = stage1flex
1213if !CROSS
1314noinst_DATA = src/stage2compare
1415endif
@@ -31,24 +32,70 @@ nodist_stage1flex_SOURCES = \
3132 $(SKELINCLUDES )
3233
3334if CROSS
34- stage1flex_LDADD =
35+
3536stage1flex_SOURCES += \
3637 lib/malloc.c \
3738 lib/realloc.c
38- stage1flex_LINK = $(LIBTOOL ) --tag=CC --mode=link $(CC_FOR_BUILD ) \
39- $(CFLAGS_FOR_BUILD ) $(LDFLAGS_FOR_BUILD ) -o $@
40-
41- $(stage1flex_OBJECTS ) : CC=$(CC_FOR_BUILD )
42- $(stage1flex_OBJECTS ) : CFLAGS=$(CFLAGS_FOR_BUILD ) -DUSE_CONFIG_FOR_BUILD
43- $(stage1flex_OBJECTS ) : CPP=$(CPP_FOR_BUILD )
44- $(stage1flex_OBJECTS ) : CPPFLAGS=$(CPPFLAGS_FOR_BUILD )
45- $(stage1flex_OBJECTS ) : LDFLAGS=$(LDFLAGS_FOR_BUILD )
39+
40+ stage1flex_CPPFLAGS = -DUSE_CONFIG_FOR_BUILD $(AM_CPPFLAGS )
41+
42+ # This also overrides AM_LIBTOOLFLAGS and AM_LDFLAGS
43+ stage1flex_LINK = $(LIBTOOL ) $(AM_V_lt ) --tag=CC $(LIBTOOLFLAGS ) \
44+ --mode=link $(CC_FOR_BUILD ) $(CFLAGS_FOR_BUILD ) \
45+ $(LDFLAGS_FOR_BUILD ) -o $@
46+
47+ stage1flex_LDADD =
48+
4649else
50+
51+ stage1flex_CPPFLAGS = $(AM_CPPFLAGS )
52+
53+ stage1flex_LINK = $(LIBTOOL ) $(AM_V_lt ) --tag=CC $(LIBTOOLFLAGS ) \
54+ --mode=link $(CCLD ) $(CFLAGS ) $(LDFLAGS ) -o $@
55+
4756stage1flex_LDADD = $(LDADD )
48- stage1flex_LINK = $(LINK )
49- stage1flex_CFLAGS = $(AM_CFLAGS )
57+
5058endif
5159
60+ # Suppress build warnings when compiling and linking stage1flex.
61+ stage1flex_CFLAGS =
62+
63+ # Override the 'stage1flex$(EXEEXT)' target automake would generate.
64+ # If the compiler is not $(CC_FOR_BUILD) when this target is invoked,
65+ # delete the object files that would be linked to 'stage1flex' to force
66+ # rebuild all of them.
67+
68+ stage1flex$(EXEEXT ) : $(stage1flex_OBJECTS ) $(stage1flex_DEPENDENCIES ) $(EXTRA_stage1flex_DEPENDENCIES )
69+ @rm -f stage1flex$(EXEEXT )
70+ { test ' x$(CC)' = ' x$(CC_FOR_BUILD)' && \
71+ test ' x$(CPP)' = ' x$(CPP_FOR_BUILD)' ; } || \
72+ { rm -f src/stage1flex-* .$( OBJEXT) \
73+ src/$(DEPDIR ) /stage1flex-* .Po || : ; }
74+ @{ test ' x$(CC)' = ' x$(CC_FOR_BUILD)' && test ' x$(CPP)' = ' x$(CPP_FOR_BUILD)' ; } || { \
75+ echo ' error: stage1flex must be built with a native compiler' 1>&2 ; \
76+ exit 1; \
77+ }
78+ $(AM_V_CCLD )$(stage1flex_LINK ) $(stage1flex_OBJECTS ) $(stage1flex_LDADD ) $(LIBS )
79+
80+ # The 'stage1bin/flex$(BUILD_EXEEXT)' target is not managed by
81+ # automake. We use a different file name from the automake-managed
82+ # 'stage1flex$(EXEEXT)' target to avoid clashing.
83+
84+ stage1bin/flex$(BUILD_EXEEXT ) :
85+ @if test ' x$(EXEEXT)' ! = ' x$(BUILD_EXEEXT)' ; then rm -f stage1flex$(EXEEXT ) ; else : ; fi
86+ @if test ' x$(OBJEXT)' ! = ' x$(BUILD_OBJEXT)' ; then rm -f src/stage1flex-* .$(OBJEXT ) ; else : ; fi
87+ $(MAKE ) $(AM_MAKEFLAGS ) \
88+ CC=' $(CC_FOR_BUILD)' \
89+ CPP=' $(CPP_FOR_BUILD)' \
90+ CFLAGS=' $(CFLAGS_FOR_BUILD)' \
91+ CPPFLAGS=' $(CPPFLAGS_FOR_BUILD)' \
92+ LDFLAGS=' $(LDFLAGS_FOR_BUILD)' \
93+ EXEEXT=' $(BUILD_EXEEXT)' \
94+ OBJEXT=' $(BUILD_OBJEXT)' \
95+ stage1flex$(BUILD_EXEEXT )
96+ $(MKDIR_P ) stage1bin
97+ $(INSTALL ) -m 700 stage1flex$(BUILD_EXEEXT ) $@
98+
5299flex_SOURCES = \
53100 $(COMMON_SOURCES )
54101
@@ -108,11 +155,15 @@ EXTRA_DIST += \
108155
109156MOSTLYCLEANFILES += \
110157 $(SKELINCLUDES ) \
158+ src/stage1flex-*.$(BUILD_OBJEXT ) \
111159 src/stage1scan.c \
112160 src/stage2scan.c \
113161 src/stage2compare
114162
115- CLEANFILES += stage1flex$(EXEEXT )
163+ CLEANFILES += \
164+ stage1bin/flex$(BUILD_EXEEXT ) \
165+ stage1flex$(BUILD_EXEEXT ) \
166+ stage1flex$(EXEEXT )
116167
117168SKELINCLUDES = \
118169 src/cpp-flex.h \
@@ -137,21 +188,20 @@ src/go-flex.h: src/go-flex.skl src/mkskel.sh
137188# The input and output file names are fixed for deterministic scanner
138189# generation. If scan.l is not modified by builders, stage1scan.c should
139190# be bit-identical to the scan.c pregenerated on release.
140- src/stage1scan.c : src/scan.l stage1flex $( EXEEXT )
141- ( cd $( srcdir) /src && $( abs_builddir) /stage1flex $( EXEEXT ) \
191+ src/stage1scan.c : src/scan.l stage1bin/flex $( BUILD_EXEEXT )
192+ ( cd $( srcdir) /src && $( abs_builddir) /stage1bin/flex $( BUILD_EXEEXT ) \
142193 $(AM_LFLAGS ) $(LFLAGS ) -o scan.c -t scan.l ) > $@ || \
143194 { s=$$ ? ; rm -f $@ ; exit $$ s; }
144195
145196# Unlike stage1scan.c, we leave stage2scan.c intact when the generation
146197# fails. This allow users to examine generation errors.
147- src/stage2scan.c : src/scan.l flex$(EXEEXT ) src/stage1scan.c
198+ src/stage2scan.c : src/scan.l flex$(EXEEXT )
148199 ( cd $( srcdir) /src && $( abs_builddir) /flex$( EXEEXT) \
149200 $(AM_LFLAGS ) $(LFLAGS ) -o scan.c -t scan.l ) > $@
150201
151- src/stage2compare : src/stage1scan.c
152- @rm -f src/stage2scan.c; \
153- $(MAKE ) $(AM_MAKEFLAGS ) src/stage2scan.c; \
154- echo Comparing stage1scan.c and stage2scan.c; \
202+
203+ src/stage2compare : src/stage1scan.c src/stage2scan.c
204+ @echo Comparing stage1scan.c and stage2scan.c; \
155205 cmp src/stage1scan.c src/stage2scan.c || { \
156206 s=$$? ; \
157207 echo " Bootstrap comparison failure!" ; \
@@ -211,4 +261,4 @@ indentfiles += \
211261 src/tables_shared.h \
212262 src/tblcmp.c
213263
214- .PHONY : dist-hook-src
264+ .PHONY : dist-hook-src src/stage2scan.c
0 commit comments