@@ -31,24 +31,67 @@ nodist_stage1flex_SOURCES = \
3131 $(SKELINCLUDES )
3232
3333if CROSS
34- stage1flex_LDADD =
34+
3535stage1flex_SOURCES += \
3636 lib/malloc.c \
3737 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 )
38+
39+ stage1flex_CPPFLAGS = -DUSE_CONFIG_FOR_BUILD $(AM_CPPFLAGS )
40+
41+ # This also overrides AM_LIBTOOLFLAGS and AM_LDFLAGS
42+ stage1flex_LINK = $(LIBTOOL ) $(AM_V_lt ) --tag=CC $(LIBTOOLFLAGS ) \
43+ --mode=link $(CC_FOR_BUILD ) $(CFLAGS_FOR_BUILD ) \
44+ $(LDFLAGS_FOR_BUILD ) -o $@
45+
46+ stage1flex_LDADD =
47+
4648else
49+
50+ stage1flex_CPPFLAGS = $(AM_CPPFLAGS )
51+
52+ stage1flex_LINK = $(LIBTOOL ) $(AM_V_lt ) --tag=CC $(LIBTOOLFLAGS ) \
53+ --mode=link $(CCLD ) $(CFLAGS ) $(LDFLAGS ) -o $@
54+
4755stage1flex_LDADD = $(LDADD )
48- stage1flex_LINK = $(LINK )
49- stage1flex_CFLAGS = $(AM_CFLAGS )
56+
5057endif
5158
59+ # Suppress build warnings when compiling and linking stage1flex.
60+ stage1flex_CFLAGS =
61+
62+ # Override the 'stage1flex$(EXEEXT)' target automake would generate.
63+ # If the compiler is not $(CC_FOR_BUILD) when this target is invoked,
64+ # delete the object files that would be linked to 'stage1flex' to force
65+ # rebuild all of them.
66+
67+ stage1flex$(EXEEXT ) : $(stage1flex_OBJECTS ) $(stage1flex_DEPENDENCIES ) $(EXTRA_stage1flex_DEPENDENCIES )
68+ @rm -f stage1flex$(EXEEXT )
69+ @{ test ' x$(CC)' = ' x$(CC_FOR_BUILD)' && test ' x$(CPP)' = ' x$(CPP_FOR_BUILD)' ; } || { \
70+ rm -f src/stage1flex-* .$(OBJEXT ) ; \
71+ echo ' error: stage1flex must be built with a native compiler' 1>&2 ; \
72+ false ; \
73+ }
74+ $(AM_V_CCLD )$(stage1flex_LINK ) $(stage1flex_OBJECTS ) $(stage1flex_LDADD ) $(LIBS )
75+
76+ # The 'stage1bin/flex$(BUILD_EXEEXT)' target is not managed by
77+ # automake. We use a different file name from the automake-managed
78+ # 'stage1flex$(EXEEXT)' target to avoid clashing.
79+
80+ stage1bin/flex$(BUILD_EXEEXT ) :
81+ @if test ' x$(EXEEXT)' ! = ' x$(BUILD_EXEEXT)' ; then rm -f stage1flex$(EXEEXT ) ; else : ; fi
82+ @if test ' x$(OBJEXT)' ! = ' x$(BUILD_OBJEXT)' ; then rm -f src/stage1flex-* .$(OBJEXT ) ; else : ; fi
83+ $(MAKE ) $(AM_MAKEFLAGS ) \
84+ CC=' $(CC_FOR_BUILD)' \
85+ CPP=' $(CPP_FOR_BUILD)' \
86+ CFLAGS=' $(CFLAGS_FOR_BUILD)' \
87+ CPPFLAGS=' $(CPPFLAGS_FOR_BUILD)' \
88+ LDFLAGS=' $(LDFLAGS_FOR_BUILD)' \
89+ EXEEXT=' $(BUILD_EXEEXT)' \
90+ OBJEXT=' $(BUILD_OBJEXT)' \
91+ stage1flex$(BUILD_EXEEXT )
92+ $(MKDIR_P ) stage1bin
93+ $(INSTALL ) -m 700 stage1flex$(BUILD_EXEEXT ) $@
94+
5295flex_SOURCES = \
5396 $(COMMON_SOURCES )
5497
@@ -108,11 +151,15 @@ EXTRA_DIST += \
108151
109152MOSTLYCLEANFILES += \
110153 $(SKELINCLUDES ) \
154+ src/stage1flex-*.$(BUILD_OBJEXT ) \
111155 src/stage1scan.c \
112156 src/stage2scan.c \
113157 src/stage2compare
114158
115- CLEANFILES += stage1flex$(EXEEXT )
159+ CLEANFILES += \
160+ stage1bin/flex$(BUILD_EXEEXT ) \
161+ stage1flex$(BUILD_EXEEXT ) \
162+ stage1flex$(EXEEXT )
116163
117164SKELINCLUDES = \
118165 src/cpp-flex.h \
@@ -137,8 +184,8 @@ src/go-flex.h: src/go-flex.skl src/mkskel.sh
137184# The input and output file names are fixed for deterministic scanner
138185# generation. If scan.l is not modified by builders, stage1scan.c should
139186# 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 ) \
187+ src/stage1scan.c : src/scan.l stage1bin/flex $( BUILD_EXEEXT )
188+ ( cd $( srcdir) /src && $( abs_builddir) /stage1bin/flex $( BUILD_EXEEXT ) \
142189 $(AM_LFLAGS ) $(LFLAGS ) -o scan.c -t scan.l ) > $@ || \
143190 { s=$$ ? ; rm -f $@ ; exit $$ s; }
144191
0 commit comments