1# @configure_input@
2# Makefile for libcpp.  Run 'configure' to generate Makefile from Makefile.in
3
4# Copyright (C) 2004-2022 Free Software Foundation, Inc.
5
6#This file is part of libcpp.
7
8#libcpp is free software; you can redistribute it and/or modify
9#it under the terms of the GNU General Public License as published by
10#the Free Software Foundation; either version 3, or (at your option)
11#any later version.
12
13#libcpp is distributed in the hope that it will be useful,
14#but WITHOUT ANY WARRANTY; without even the implied warranty of
15#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16#GNU General Public License for more details.
17
18#You should have received a copy of the GNU General Public License
19#along with libcpp; see the file COPYING3.  If not see
20#<http://www.gnu.org/licenses/>.
21
22@SET_MAKE@
23
24srcdir = @srcdir@
25top_builddir = .
26VPATH = @srcdir@
27INSTALL = @INSTALL@
28AR = @AR@
29ARFLAGS = cru
30ACLOCAL = @ACLOCAL@
31AUTOCONF = @AUTOCONF@
32AUTOHEADER = @AUTOHEADER@
33CATALOGS = $(patsubst %,po/%,@CATALOGS@)
34CC = @CC@
35CFLAGS = @CFLAGS@
36WARN_CFLAGS = @warn@ @c_warn@ @WARN_PEDANTIC@ @WERROR@
37CXX = @CXX@
38CXXFLAGS = @CXXFLAGS@
39WARN_CXXFLAGS = @warn@ @WARN_PEDANTIC@ @WERROR@
40CPP = @CPP@
41CPPFLAGS = @CPPFLAGS@
42EXEEXT = @EXEEXT@
43GMSGFMT = @GMSGFMT@
44INCINTL = @INCINTL@
45INSTALL_DATA = @INSTALL_DATA@
46INSTALL_PROGRAM = @INSTALL_PROGRAM@
47INSTALL_SCRIPT = @INSTALL_SCRIPT@
48LDFLAGS = @LDFLAGS@
49LIBICONV = @LIBICONV@
50LIBINTL = @LIBINTL@
51PACKAGE = @PACKAGE@
52RANLIB = @RANLIB@
53SHELL = @SHELL@
54USED_CATALOGS = @USED_CATALOGS@
55XGETTEXT = @XGETTEXT@
56CCDEPMODE = @CCDEPMODE@
57CXXDEPMODE = @CXXDEPMODE@
58DEPDIR = @DEPDIR@
59NOEXCEPTION_FLAGS = @noexception_flags@
60PICFLAG = @PICFLAG@
61CET_HOST_FLAGS = @CET_HOST_FLAGS@
62
63datarootdir = @datarootdir@
64datadir = @datadir@
65exec_prefix = @prefix@
66libdir = @libdir@
67localedir = $(datadir)/locale
68prefix = @prefix@
69
70MSGMERGE = msgmerge
71mkinstalldirs = $(SHELL) $(srcdir)/../mkinstalldirs
72depcomp = $(SHELL) $(srcdir)/../depcomp
73
74INCLUDES = -I$(srcdir) -I. -I$(srcdir)/../include @INCINTL@ \
75          -I$(srcdir)/include
76
77ALL_CFLAGS = $(CFLAGS) $(WARN_CFLAGS) $(INCLUDES) $(CPPFLAGS) $(PICFLAG) \
78          $(CET_HOST_FLAGS)
79ALL_CXXFLAGS = $(CXXFLAGS) $(WARN_CXXFLAGS) $(NOEXCEPTION_FLAGS) $(INCLUDES) \
80          $(CPPFLAGS) $(PICFLAG) $(CET_HOST_FLAGS)
81
82# The name of the compiler to use.
83COMPILER = $(CXX)
84COMPILER_FLAGS = $(ALL_CXXFLAGS)
85DEPMODE = $(CXXDEPMODE)
86
87
88libcpp_a_OBJS = charset.o directives.o errors.o \
89          expr.o files.o identifiers.o init.o lex.o line-map.o macro.o \
90          mkdeps.o pch.o symtab.o traditional.o
91
92libcpp_a_SOURCES = charset.cc directives.cc errors.cc \
93          expr.cc files.cc identifiers.cc init.cc lex.cc line-map.cc macro.cc \
94          mkdeps.cc pch.cc symtab.cc traditional.cc
95
96all: libcpp.a $(USED_CATALOGS)
97
98.SUFFIXES:
99.SUFFIXES: .cc .gmo .o .obj .po .pox
100
101libcpp.a: $(libcpp_a_OBJS)
102          -rm -f libcpp.a
103          $(AR) $(ARFLAGS) libcpp.a $(libcpp_a_OBJS)
104          $(RANLIB) libcpp.a
105
106# Rules to rebuild the configuration
107
108Makefile: $(srcdir)/Makefile.in config.status
109          $(SHELL) ./config.status Makefile
110
111config.status: $(srcdir)/configure
112          $(SHELL) ./config.status --recheck
113
114$(srcdir)/configure: @MAINT@ $(srcdir)/aclocal.m4
115          cd $(srcdir) && $(AUTOCONF)
116
117$(srcdir)/aclocal.m4: @MAINT@ $(srcdir)/../config/acx.m4 \
118          $(srcdir)/../config/gettext-sister.m4 $(srcdir)/../config/iconv.m4 \
119          $(srcdir)/../config/codeset.m4 $(srcdir)/../config/lib-ld.m4 \
120          $(srcdir)/../config/lib-link.m4 $(srcdir)/../config/lib-prefix.m4 \
121          $(srcdir)/../config/override.m4 $(srcdir)/../config/proginstall.m4 \
122          $(srcdir)/configure.ac
123          cd $(srcdir) && $(ACLOCAL) -I ../config
124
125config.h: stamp-h1
126          test -f config.h || (rm -f stamp-h1 && $(MAKE) stamp-h1)
127
128stamp-h1: $(srcdir)/config.in config.status
129          -rm -f stamp-h1
130          $(SHELL) ./config.status config.h
131
132$(srcdir)/config.in: @MAINT@ $(srcdir)/configure.ac
133          cd $(srcdir) && $(AUTOHEADER)
134          -rm -f stamp-h1
135
136# It is not possible to get LOCALEDIR defined in config.h because
137# the value it needs to be defined to is only determined in the
138# Makefile.  Hence we do this instead.
139localedir.h: localedir.hs; @true
140localedir.hs: Makefile
141          echo "#define LOCALEDIR \"$(localedir)\"" > localedir.new
142          $(SHELL) $(srcdir)/../move-if-change localedir.new localedir.h
143          echo timestamp > localedir.hs
144
145# Installation rules and other phony targets
146
147# These rule has to look for .gmo modules in both srcdir and
148# the cwd, and has to check that we actually have a catalog
149# for each language, in case they weren't built or included
150# with the distribution.
151installdirs:
152          @$(mkinstalldirs) $(DESTDIR)$(datadir); \
153          cats="$(CATALOGS)"; for cat in $$cats; do \
154            lang=`basename $$cat | sed 's/\.gmo$$//'`; \
155            if [ -f $$cat ] || [ -f $(srcdir)/$$cat ]; then \
156              dir=$(localedir)/$$lang/LC_MESSAGES; \
157              $(mkinstalldirs) $(DESTDIR)$$dir || exit 1; \
158            fi; \
159          done
160
161install-strip install: all installdirs
162          cats="$(CATALOGS)"; for cat in $$cats; do \
163            lang=`basename $$cat | sed 's/\.gmo$$//'`; \
164            if [ -f $$cat ]; then :; \
165            elif [ -f $(srcdir)/$$cat ]; then cat=$(srcdir)/$$cat; \
166            else continue; \
167            fi; \
168            dir=$(localedir)/$$lang/LC_MESSAGES; \
169            echo $(INSTALL_DATA) $$cat $(DESTDIR)$$dir/$(PACKAGE).mo; \
170            $(INSTALL_DATA) $$cat $(DESTDIR)$$dir/$(PACKAGE).mo; \
171          done
172
173mostlyclean:
174          -rm -f *.o
175
176clean: mostlyclean
177          -rm -rf libcpp.a $(srcdir)/autom4te.cache
178
179distclean: clean
180          -rm -f config.h stamp-h1 config.status config.cache config.log \
181            configure.lineno configure.status.lineno Makefile localedir.h \
182            localedir.hs $(DEPDIR)/*.Po
183          -rmdir $(DEPDIR)
184
185maintainer-clean: distclean
186          @echo "This command is intended for maintainers to use"
187          @echo "it deletes files that may require special tools to rebuild."
188          -rm -f $(srcdir)/configure $(srcdir)/aclocal.m4
189
190check:
191installcheck:
192dvi:
193pdf:
194html:
195info:
196install-info:
197install-pdf:
198install-dvi:
199install-man:
200install-html:
201
202update-po: $(CATALOGS:.gmo=.pox)
203
204.PHONY: installdirs install install-strip mostlyclean clean distclean \
205  maintainer-clean check installcheck dvi pdf html info install-info \
206  install-man update-po install-html install-pdf install-dvi
207
208# Dependency rule.
209COMPILE.base = $(COMPILER) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(COMPILER_FLAGS) -c
210ifeq ($(DEPMODE),depmode=gcc3)
211# Note that we put the dependencies into a .Tpo file, then move them
212# into place if the compile succeeds.  We need this because gcc does
213# not atomically write the dependency output file.
214COMPILE = $(COMPILE.base) -o $@ -MT $@ -MMD -MP -MF $(DEPDIR)/$*.Tpo
215POSTCOMPILE = @mv $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
216else
217COMPILE = source='$<' object='$@' libtool=no DEPDIR=$(DEPDIR) $(DEPMODE) \
218            $(depcomp) $(COMPILE.base)
219# depcomp handles atomicity for us, so we don't need a postcompile
220# step.
221POSTCOMPILE =
222endif
223
224# Implicit rules and I18N
225
226.cc.o:
227          $(COMPILE) $<
228          $(POSTCOMPILE)
229
230# N.B. We do not attempt to copy these into $(srcdir).
231.po.gmo:
232          $(mkinstalldirs) po
233          $(GMSGFMT) --statistics -o $@ $<
234
235# The new .po has to be gone over by hand, so we deposit it into
236# build/po with a different extension.
237# If build/po/$(PACKAGE).pot exists, use it (it was just created),
238# else use the one in srcdir.
239.po.pox:
240          $(mkinstalldirs) po
241          $(MSGMERGE) $< `if test -f po/$(PACKAGE).pot; \
242                          then echo po/$(PACKAGE).pot; \
243                          else echo $(srcdir)/po/$(PACKAGE).pot; fi` -o $@
244
245# Rule for regenerating the message template.
246$(PACKAGE).pot: po/$(PACKAGE).pot
247po/$(PACKAGE).pot: $(libcpp_a_SOURCES)
248          $(mkinstalldirs) $(srcdir)/po
249          $(XGETTEXT) --default-domain=$(PACKAGE) \
250            --keyword=_ --keyword=N_ \
251            --keyword=cpp_error:3 \
252            --keyword=cpp_warning:3 \
253            --keyword=cpp_pedwarning:3 \
254            --keyword=cpp_warning_syshdr:3 \
255            --keyword=cpp_warning_at:4 \
256            --keyword=cpp_pedwarning_at:4 \
257            --keyword=cpp_error_with_line:5 \
258            --keyword=cpp_warning_with_line:5 \
259            --keyword=cpp_pedwarning_with_line:5 \
260            --keyword=cpp_warning_with_line_syshdr:5 \
261            --keyword=cpp_error_at:4 \
262            --keyword=cpp_errno:3 \
263            --keyword=SYNTAX_ERROR --keyword=SYNTAX_ERROR2 \
264            --copyright-holder="Free Software Foundation, Inc." \
265            --msgid-bugs-address="https://gcc.gnu.org/bugs/" \
266            --language=c -o po/$(PACKAGE).pot.tmp $^
267          sed 's:$(srcdir)/::g' <po/$(PACKAGE).pot.tmp >po/$(PACKAGE).pot
268          rm po/$(PACKAGE).pot.tmp
269
270ETAGS = @ETAGS@
271
272TAGS_SOURCES = $(libcpp_a_SOURCES) internal.h system.h ucnid.h \
273    include/cpplib.h include/line-map.h include/mkdeps.h include/symtab.h
274
275TAGS: $(TAGS_SOURCES)
276          cd $(srcdir) && $(ETAGS) $(TAGS_SOURCES)
277
278# Tell versions [3.59,3.63) of GNU make to not export all variables.
279# Otherwise a system limit (for SysV at least) may be exceeded.
280.NOEXPORT:
281
282# Dependencies
283-include $(patsubst %.o, $(DEPDIR)/%.Po, $(libcpp_a_OBJS))
284
285# Dependencies on generated headers have to be explicit.
286init.o: localedir.h
287