mirror of
https://gcc.gnu.org/git/gcc.git
synced 2024-12-22 18:45:10 +08:00
b224c3763e
The existing directives-only code (a) punched a hole through the libcpp interface and (b) didn't support raw string literals. This reimplements this preprocessing mode. I added a proper callback interface, and adjusted c-ppoutput to use it. Sadly I cannot get rid of the libcpp/internal.h include for unrelated reasons. The new scanner is in lex.x, and works doing some backwards scanning when it finds a charater of interest. This reduces the number of cases one has to deal with in forward scanning. It may have different failure mode than forward scanning on bad tokenization. Finally, Moved some cpp tests from the c-specific dg.gcc/cpp directory to the c-c++-common/cpp shared directory, libcpp/ * directives-only.c: Delete. * Makefile.in (libcpp_a_OBJS, libcpp_a_SOURCES): Remove it. * include/cpplib.h (enum CPP_DO_task): New enum. (cpp_directive_only_preprocess): Declare. * internal.h (_cpp_dir_only_callbacks): Delete. (_cpp_preprocess_dir_only): Delete. * lex.c (do_peek_backslask, do_peek_next, do_peek_prev): New. (cpp_directives_only_process): New implementation. gcc/c-family/ Reimplement directives only processing. * c-ppoutput.c (token_streamer): Ne. (directives_only_cb): New. Swallow ... (print_lines_directives_only): ... this. (scan_translation_unit_directives_only): Reimplment using the published interface. gcc/testsuite/ * gcc.dg/cpp/counter-[23].c: Move to c-c+_-common/cpp. * gcc.dg/cpp/dir-only-*: Likewise. * c-c++-common/cpp/dir-only-[78].c: New.
279 lines
8.3 KiB
Makefile
279 lines
8.3 KiB
Makefile
# @configure_input@
|
|
# Makefile for libcpp. Run 'configure' to generate Makefile from Makefile.in
|
|
|
|
# Copyright (C) 2004-2020 Free Software Foundation, Inc.
|
|
|
|
#This file is part of libcpp.
|
|
|
|
#libcpp is free software; you can redistribute it and/or modify
|
|
#it under the terms of the GNU General Public License as published by
|
|
#the Free Software Foundation; either version 3, or (at your option)
|
|
#any later version.
|
|
|
|
#libcpp is distributed in the hope that it will be useful,
|
|
#but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
#GNU General Public License for more details.
|
|
|
|
#You should have received a copy of the GNU General Public License
|
|
#along with libcpp; see the file COPYING3. If not see
|
|
#<http://www.gnu.org/licenses/>.
|
|
|
|
@SET_MAKE@
|
|
|
|
srcdir = @srcdir@
|
|
top_builddir = .
|
|
VPATH = @srcdir@
|
|
INSTALL = @INSTALL@
|
|
AR = ar
|
|
ARFLAGS = cru
|
|
ACLOCAL = @ACLOCAL@
|
|
AUTOCONF = @AUTOCONF@
|
|
AUTOHEADER = @AUTOHEADER@
|
|
CATALOGS = $(patsubst %,po/%,@CATALOGS@)
|
|
CC = @CC@
|
|
CFLAGS = @CFLAGS@
|
|
WARN_CFLAGS = @warn@ @c_warn@ @WARN_PEDANTIC@ @WERROR@
|
|
CXX = @CXX@
|
|
CXXFLAGS = @CXXFLAGS@
|
|
WARN_CXXFLAGS = @warn@ @WARN_PEDANTIC@ @WERROR@
|
|
CPP = @CPP@
|
|
CPPFLAGS = @CPPFLAGS@
|
|
EXEEXT = @EXEEXT@
|
|
GMSGFMT = @GMSGFMT@
|
|
INCINTL = @INCINTL@
|
|
INSTALL_DATA = @INSTALL_DATA@
|
|
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
|
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
|
LDFLAGS = @LDFLAGS@
|
|
LIBICONV = @LIBICONV@
|
|
LIBINTL = @LIBINTL@
|
|
PACKAGE = @PACKAGE@
|
|
RANLIB = @RANLIB@
|
|
SHELL = @SHELL@
|
|
USED_CATALOGS = @USED_CATALOGS@
|
|
XGETTEXT = @XGETTEXT@
|
|
CCDEPMODE = @CCDEPMODE@
|
|
CXXDEPMODE = @CXXDEPMODE@
|
|
DEPDIR = @DEPDIR@
|
|
NOEXCEPTION_FLAGS = @noexception_flags@
|
|
PICFLAG = @PICFLAG@
|
|
|
|
datarootdir = @datarootdir@
|
|
datadir = @datadir@
|
|
exec_prefix = @prefix@
|
|
libdir = @libdir@
|
|
localedir = $(datadir)/locale
|
|
prefix = @prefix@
|
|
|
|
MSGMERGE = msgmerge
|
|
mkinstalldirs = $(SHELL) $(srcdir)/../mkinstalldirs
|
|
depcomp = $(SHELL) $(srcdir)/../depcomp
|
|
|
|
INCLUDES = -I$(srcdir) -I. -I$(srcdir)/../include @INCINTL@ \
|
|
-I$(srcdir)/include
|
|
|
|
ALL_CFLAGS = $(CFLAGS) $(WARN_CFLAGS) $(INCLUDES) $(CPPFLAGS) $(PICFLAG)
|
|
ALL_CXXFLAGS = $(CXXFLAGS) $(WARN_CXXFLAGS) $(NOEXCEPTION_FLAGS) $(INCLUDES) \
|
|
$(CPPFLAGS) $(PICFLAG)
|
|
|
|
# The name of the compiler to use.
|
|
COMPILER = $(CXX)
|
|
COMPILER_FLAGS = $(ALL_CXXFLAGS)
|
|
DEPMODE = $(CXXDEPMODE)
|
|
|
|
|
|
libcpp_a_OBJS = charset.o directives.o errors.o \
|
|
expr.o files.o identifiers.o init.o lex.o line-map.o macro.o \
|
|
mkdeps.o pch.o symtab.o traditional.o
|
|
|
|
libcpp_a_SOURCES = charset.c directives.c errors.c \
|
|
expr.c files.c identifiers.c init.c lex.c line-map.c macro.c \
|
|
mkdeps.c pch.c symtab.c traditional.c
|
|
|
|
all: libcpp.a $(USED_CATALOGS)
|
|
|
|
.SUFFIXES:
|
|
.SUFFIXES: .c .gmo .o .obj .po .pox
|
|
|
|
libcpp.a: $(libcpp_a_OBJS)
|
|
-rm -f libcpp.a
|
|
$(AR) $(ARFLAGS) libcpp.a $(libcpp_a_OBJS)
|
|
$(RANLIB) libcpp.a
|
|
|
|
# Rules to rebuild the configuration
|
|
|
|
Makefile: $(srcdir)/Makefile.in config.status
|
|
$(SHELL) ./config.status Makefile
|
|
|
|
config.status: $(srcdir)/configure
|
|
$(SHELL) ./config.status --recheck
|
|
|
|
$(srcdir)/configure: @MAINT@ $(srcdir)/aclocal.m4
|
|
cd $(srcdir) && $(AUTOCONF)
|
|
|
|
$(srcdir)/aclocal.m4: @MAINT@ $(srcdir)/../config/acx.m4 \
|
|
$(srcdir)/../config/gettext-sister.m4 $(srcdir)/../config/iconv.m4 \
|
|
$(srcdir)/../config/codeset.m4 $(srcdir)/../config/lib-ld.m4 \
|
|
$(srcdir)/../config/lib-link.m4 $(srcdir)/../config/lib-prefix.m4 \
|
|
$(srcdir)/../config/override.m4 $(srcdir)/../config/proginstall.m4 \
|
|
$(srcdir)/configure.ac
|
|
cd $(srcdir) && $(ACLOCAL) -I ../config
|
|
|
|
config.h: stamp-h1
|
|
test -f config.h || (rm -f stamp-h1 && $(MAKE) stamp-h1)
|
|
|
|
stamp-h1: $(srcdir)/config.in config.status
|
|
-rm -f stamp-h1
|
|
$(SHELL) ./config.status config.h
|
|
|
|
$(srcdir)/config.in: @MAINT@ $(srcdir)/configure.ac
|
|
cd $(srcdir) && $(AUTOHEADER)
|
|
-rm -f stamp-h1
|
|
|
|
# It is not possible to get LOCALEDIR defined in config.h because
|
|
# the value it needs to be defined to is only determined in the
|
|
# Makefile. Hence we do this instead.
|
|
localedir.h: localedir.hs; @true
|
|
localedir.hs: Makefile
|
|
echo "#define LOCALEDIR \"$(localedir)\"" > localedir.new
|
|
$(srcdir)/../move-if-change localedir.new localedir.h
|
|
echo timestamp > localedir.hs
|
|
|
|
# Installation rules and other phony targets
|
|
|
|
# These rule has to look for .gmo modules in both srcdir and
|
|
# the cwd, and has to check that we actually have a catalog
|
|
# for each language, in case they weren't built or included
|
|
# with the distribution.
|
|
installdirs:
|
|
@$(mkinstalldirs) $(DESTDIR)$(datadir); \
|
|
cats="$(CATALOGS)"; for cat in $$cats; do \
|
|
lang=`basename $$cat | sed 's/\.gmo$$//'`; \
|
|
if [ -f $$cat ] || [ -f $(srcdir)/$$cat ]; then \
|
|
dir=$(localedir)/$$lang/LC_MESSAGES; \
|
|
$(mkinstalldirs) $(DESTDIR)$$dir || exit 1; \
|
|
fi; \
|
|
done
|
|
|
|
install-strip install: all installdirs
|
|
cats="$(CATALOGS)"; for cat in $$cats; do \
|
|
lang=`basename $$cat | sed 's/\.gmo$$//'`; \
|
|
if [ -f $$cat ]; then :; \
|
|
elif [ -f $(srcdir)/$$cat ]; then cat=$(srcdir)/$$cat; \
|
|
else continue; \
|
|
fi; \
|
|
dir=$(localedir)/$$lang/LC_MESSAGES; \
|
|
echo $(INSTALL_DATA) $$cat $(DESTDIR)$$dir/$(PACKAGE).mo; \
|
|
$(INSTALL_DATA) $$cat $(DESTDIR)$$dir/$(PACKAGE).mo; \
|
|
done
|
|
|
|
mostlyclean:
|
|
-rm -f *.o
|
|
|
|
clean: mostlyclean
|
|
-rm -rf libcpp.a $(srcdir)/autom4te.cache
|
|
|
|
distclean: clean
|
|
-rm -f config.h stamp-h1 config.status config.cache config.log \
|
|
configure.lineno configure.status.lineno Makefile localedir.h \
|
|
localedir.hs $(DEPDIR)/*.Po
|
|
-rmdir $(DEPDIR)
|
|
|
|
maintainer-clean: distclean
|
|
@echo "This command is intended for maintainers to use"
|
|
@echo "it deletes files that may require special tools to rebuild."
|
|
-rm -f $(srcdir)/configure $(srcdir)/aclocal.m4
|
|
|
|
check:
|
|
installcheck:
|
|
dvi:
|
|
pdf:
|
|
html:
|
|
info:
|
|
install-info:
|
|
install-pdf:
|
|
install-man:
|
|
install-html:
|
|
|
|
update-po: $(CATALOGS:.gmo=.pox)
|
|
|
|
.PHONY: installdirs install install-strip mostlyclean clean distclean \
|
|
maintainer-clean check installcheck dvi pdf html info install-info \
|
|
install-man update-po install-html
|
|
|
|
# Dependency rule.
|
|
COMPILE.base = $(COMPILER) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(COMPILER_FLAGS) -c
|
|
ifeq ($(DEPMODE),depmode=gcc3)
|
|
# Note that we put the dependencies into a .Tpo file, then move them
|
|
# into place if the compile succeeds. We need this because gcc does
|
|
# not atomically write the dependency output file.
|
|
COMPILE = $(COMPILE.base) -o $@ -MT $@ -MMD -MP -MF $(DEPDIR)/$*.Tpo
|
|
POSTCOMPILE = @mv $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
|
|
else
|
|
COMPILE = source='$<' object='$@' libtool=no DEPDIR=$(DEPDIR) $(DEPMODE) \
|
|
$(depcomp) $(COMPILE.base)
|
|
# depcomp handles atomicity for us, so we don't need a postcompile
|
|
# step.
|
|
POSTCOMPILE =
|
|
endif
|
|
|
|
# Implicit rules and I18N
|
|
|
|
.c.o:
|
|
$(COMPILE) $<
|
|
$(POSTCOMPILE)
|
|
|
|
# N.B. We do not attempt to copy these into $(srcdir).
|
|
.po.gmo:
|
|
$(mkinstalldirs) po
|
|
$(GMSGFMT) --statistics -o $@ $<
|
|
|
|
# The new .po has to be gone over by hand, so we deposit it into
|
|
# build/po with a different extension.
|
|
# If build/po/$(PACKAGE).pot exists, use it (it was just created),
|
|
# else use the one in srcdir.
|
|
.po.pox:
|
|
$(mkinstalldirs) po
|
|
$(MSGMERGE) $< `if test -f po/$(PACKAGE).pot; \
|
|
then echo po/$(PACKAGE).pot; \
|
|
else echo $(srcdir)/po/$(PACKAGE).pot; fi` -o $@
|
|
|
|
# Rule for regenerating the message template.
|
|
$(PACKAGE).pot: po/$(PACKAGE).pot
|
|
po/$(PACKAGE).pot: $(libcpp_a_SOURCES)
|
|
$(mkinstalldirs) $(srcdir)/po
|
|
$(XGETTEXT) --default-domain=$(PACKAGE) \
|
|
--keyword=_ --keyword=N_ \
|
|
--keyword=cpp_error:3 \
|
|
--keyword=cpp_warning:3 \
|
|
--keyword=cpp_pedwarning:3 \
|
|
--keyword=cpp_warning_syshdr:3 \
|
|
--keyword=cpp_error_with_line:5 \
|
|
--keyword=cpp_warning_with_line:5 \
|
|
--keyword=cpp_pedwarning_with_line:5 \
|
|
--keyword=cpp_warning_with_line_syshdr:5 \
|
|
--keyword=cpp_errno:3 \
|
|
--keyword=SYNTAX_ERROR --keyword=SYNTAX_ERROR2 \
|
|
--copyright-holder="Free Software Foundation, Inc." \
|
|
--msgid-bugs-address="https://gcc.gnu.org/bugs/" \
|
|
--language=c -o po/$(PACKAGE).pot.tmp $^
|
|
sed 's:$(srcdir)/::g' <po/$(PACKAGE).pot.tmp >po/$(PACKAGE).pot
|
|
rm po/$(PACKAGE).pot.tmp
|
|
|
|
TAGS_SOURCES = $(libcpp_a_SOURCES) internal.h system.h ucnid.h \
|
|
include/cpplib.h include/line-map.h include/mkdeps.h include/symtab.h
|
|
|
|
TAGS: $(TAGS_SOURCES)
|
|
cd $(srcdir) && etags $(TAGS_SOURCES)
|
|
|
|
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
|
# Otherwise a system limit (for SysV at least) may be exceeded.
|
|
.NOEXPORT:
|
|
|
|
# Dependencies
|
|
-include $(patsubst %.o, $(DEPDIR)/%.Po, $(libcpp_a_OBJS))
|
|
|
|
# Dependencies on generated headers have to be explicit.
|
|
init.o: localedir.h
|