Skip to content

Commit 36a102a

Browse files
committed
(draft) bootstrap code revised
1 parent eaa32c5 commit 36a102a

File tree

3 files changed

+71
-20
lines changed

3 files changed

+71
-20
lines changed

configure.ac

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,7 @@ AC_PATH_PROG([HELP2MAN], help2man, [\${top_srcdir}/build-aux/missing help2man])
126126
AS_IF([test "$HELP2MAN" = "\${top_srcdir}/build-aux/missing help2man"],
127127
AC_MSG_WARN(help2man: program not found: building man page will not work)
128128
)
129+
AM_CONDITIONAL([HAVE_HELP2MAN], [test "$HELP2MAN" != "\${top_srcdir}/build-aux/missing help2man"])
129130

130131
AC_PATH_PROGS([TEXI2DVI], [gtexi2dvi texi2dvi], [\${top_srcdir}/build-aux/missing texi2dvi])
131132
AS_IF([test "$TEXI2DVI" = "\${top_srcdir}/build-aux/missing texi2dvi"],

doc/local.mk

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
if CROSS
2-
FLEX_FOR_DOC = stage1flex
2+
FLEX_FOR_DOC = stage1bin/flex
33
else
4-
FLEX_FOR_DOC = flex$(EXEEXT)
4+
FLEX_FOR_DOC = flex
55
endif
66

77
TEXI2DVI = @TEXI2DVI@ -I $(srcdir)/examples/manual/
@@ -36,13 +36,18 @@ CLEANFILES += \
3636
# page generation. 'help2man' strips directory prefix ("./") from the
3737
# usage string, but not file extensions.
3838

39-
doc/flex.1: $(srcdir)/configure.ac $(srcdir)/src/cpp-flex.skl $(srcdir)/src/options.c $(srcdir)/src/options.h
40-
$(MAKE) $(AM_MAKEFLAGS) $(FLEX_FOR_DOC)
41-
$(INSTALL) -m 700 $(FLEX_FOR_DOC) doc/flex$(EXEEXT)
39+
if HAVE_HELP2MAN
40+
doc/flex.1: $(FLEX_FOR_DOC)$(BUILD_EXEEXT)
41+
$(MKDIR_P) doc
4242
$(HELP2MAN) \
4343
--name='$(PACKAGE_NAME)' \
4444
--section=1 \
4545
--source='The Flex Project' \
4646
--manual='Programming' \
4747
--output=$@ \
48-
doc/flex
48+
./$(FLEX_FOR_DOC)
49+
else
50+
doc/flex.1: $(srcdir)/configure.ac $(srcdir)/src/cpp-flex.skl $(srcdir)/src/options.c $(srcdir)/src/options.h
51+
@echo 'error: flex.1 man page outdated; please install help2man and regenerate configure' 1>&2
52+
@false
53+
endif

src/local.mk

Lines changed: 59 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -31,24 +31,65 @@ nodist_stage1flex_SOURCES = \
3131
$(SKELINCLUDES)
3232

3333
if CROSS
34-
stage1flex_LDADD =
34+
3535
stage1flex_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+
4648
else
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+
4755
stage1flex_LDADD = $(LDADD)
48-
stage1flex_LINK = $(LINK)
49-
stage1flex_CFLAGS = $(AM_CFLAGS)
56+
5057
endif
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+
# This target is not managed by automake.
77+
78+
stage1bin/flex$(BUILD_EXEEXT):
79+
@if test 'x$(EXEEXT)' != 'x$(BUILD_EXEEXT)'; then rm -f stage1flex$(EXEEXT); else :; fi
80+
@if test 'x$(OBJEXT)' != 'x$(BUILD_OBJEXT)'; then rm -f src/stage1flex-*.$(OBJEXT); else :; fi
81+
$(MAKE) $(AM_MAKEFLAGS) \
82+
CC='$(CC_FOR_BUILD)' \
83+
CPP='$(CPP_FOR_BUILD)' \
84+
CFLAGS='$(CFLAGS_FOR_BUILD)' \
85+
CPPFLAGS='$(CPPFLAGS_FOR_BUILD)' \
86+
LDFLAGS='$(LDFLAGS_FOR_BUILD)' \
87+
EXEEXT='$(BUILD_EXEEXT)' \
88+
OBJEXT='$(BUILD_OBJEXT)' \
89+
stage1flex$(BUILD_EXEEXT)
90+
$(MKDIR_P) stage1bin
91+
$(INSTALL) -m 700 stage1flex$(BUILD_EXEEXT) $@
92+
5293
flex_SOURCES = \
5394
$(COMMON_SOURCES)
5495

@@ -108,11 +149,15 @@ EXTRA_DIST += \
108149

109150
MOSTLYCLEANFILES += \
110151
$(SKELINCLUDES) \
152+
src/stage1flex-*.$(BUILD_OBJEXT) \
111153
src/stage1scan.c \
112154
src/stage2scan.c \
113155
src/stage2compare
114156

115-
CLEANFILES += stage1flex$(EXEEXT)
157+
CLEANFILES += \
158+
stage1bin/flex$(BUILD_EXEEXT) \
159+
stage1flex$(BUILD_EXEEXT) \
160+
stage1flex$(EXEEXT)
116161

117162
SKELINCLUDES = \
118163
src/cpp-flex.h \
@@ -137,8 +182,8 @@ src/go-flex.h: src/go-flex.skl src/mkskel.sh
137182
# The input and output file names are fixed for deterministic scanner
138183
# generation. If scan.l is not modified by builders, stage1scan.c should
139184
# 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) \
185+
src/stage1scan.c: src/scan.l stage1bin/flex$(BUILD_EXEEXT)
186+
( cd $(srcdir)/src && $(abs_builddir)/stage1bin/flex$(BUILD_EXEEXT) \
142187
$(AM_LFLAGS) $(LFLAGS) -o scan.c -t scan.l ) >$@ || \
143188
{ s=$$?; rm -f $@; exit $$s; }
144189

0 commit comments

Comments
 (0)