Makefile.am: Add makedepend.
libcpp: * Makefile.am: Add makedepend. * Makefile.in, aclocal.m4: Regenerate. * charset.c: Insert a space to avoid a warning. * directives.c: Include mkdeps.h. (_cpp_handle_directive): Reenable macro expander if appropriate. (undefine_macros): Inline body of _cpp_free_definition for speed. Do not call undef callback or _cpp_warn_if_unused_macro. (cpp_get_deps): New interface. * files.c (search_cache): Add pfile argument. Check for file that would be found by "" or <> search here... (_cpp_find_file): ...not here. Correct recorded start_dir of files found by directory-of-current-file search that would be found by "" or <> search. * init.c (cpp_add_dependency_target): Delete. * internal.h (struct lexer_state): Add discarding_output flag. * lex.c (lex_identifier): Compute hash function while scanning. * macro.c (cpp_scan_nooutput): Disable macro expansion outside directives. * makedepend.c: New file. * mkdeps.c (struct deps): Add vpath vector. (apply_vpath, deps_add_vpath): New function. (deps_free): Free vpath vector. (deps_add_dep, deps_add_target): Use apply_vpath. * symtab.c (calc_hash): Use HT_HASHSTEP and HT_FINISH. (ht_lookup_with_hash): New function. * cpplib.h, mkdeps.h: Update prototypes. * symtab.h: Update prototypes. (HT_HASHSTEP, HT_FINISH): New macros. gcc: * Makefile.in (MKDEPS_H): New shorthand. (c-opts.o): Update dependencies. * c-opts.c: Include mkdeps.h. (handle_deferred_opts): Use cpp_get_deps and deps_add_target, not cpp_add_dependency_target. From-SVN: r82654
This commit is contained in:
parent
dbeff3e56d
commit
c6e8380069
20 changed files with 531 additions and 120 deletions
|
@ -1,3 +1,11 @@
|
||||||
|
2004-06-05 Zack Weinberg <zack@codesourcery.com>
|
||||||
|
|
||||||
|
* Makefile.in (MKDEPS_H): New shorthand.
|
||||||
|
(c-opts.o): Update dependencies.
|
||||||
|
* c-opts.c: Include mkdeps.h.
|
||||||
|
(handle_deferred_opts): Use cpp_get_deps and deps_add_target,
|
||||||
|
not cpp_add_dependency_target.
|
||||||
|
|
||||||
2004-06-05 Steven Bosscher <stevenb@suse.de>
|
2004-06-05 Steven Bosscher <stevenb@suse.de>
|
||||||
|
|
||||||
* config/v850/v850.c (v850_use_dfa_pipeline_interface): New.
|
* config/v850/v850.c (v850_use_dfa_pipeline_interface): New.
|
||||||
|
@ -9,7 +17,7 @@
|
||||||
* doc/install.texi: Document GMP as prerequisite. Document
|
* doc/install.texi: Document GMP as prerequisite. Document
|
||||||
--with-gmp and --with-gmp-dir configure options.
|
--with-gmp and --with-gmp-dir configure options.
|
||||||
* fortran/gfortran.texi: Remove section "Compiling and testing",
|
* fortran/gfortran.texi: Remove section "Compiling and testing",
|
||||||
remove TOC reference to it.
|
remove TOC reference to it.
|
||||||
|
|
||||||
2004-06-05 Graham Stott <graham.stott@btinternet.com>
|
2004-06-05 Graham Stott <graham.stott@btinternet.com>
|
||||||
|
|
||||||
|
@ -19,15 +27,15 @@
|
||||||
2004-06-05 Danny Smith <dannysmith@users.sourceforge.net>
|
2004-06-05 Danny Smith <dannysmith@users.sourceforge.net>
|
||||||
|
|
||||||
* toplev.c (init_asm_output): Add explicit 'b' to mode when
|
* toplev.c (init_asm_output): Add explicit 'b' to mode when
|
||||||
opening asm_out_file.
|
opening asm_out_file.
|
||||||
* c-pch.c (c_common_write_pch): Remove unnecessary fflush before
|
* c-pch.c (c_common_write_pch): Remove unnecessary fflush before
|
||||||
reading asm_out_file. Replace fflush after reading asm_out_file
|
reading asm_out_file. Replace fflush after reading asm_out_file
|
||||||
with fseek.
|
with fseek.
|
||||||
* hosthooks-def.h (HOST_HOOKS_GT_PCH_ALLOC_GRANULARITY): Define
|
* hosthooks-def.h (HOST_HOOKS_GT_PCH_ALLOC_GRANULARITY): Define
|
||||||
default and add to HOST_HOOKS_INITIALIZER.
|
default and add to HOST_HOOKS_INITIALIZER.
|
||||||
* hosthooks.h (gt_pch_alloc_granularity): Declare hook function.
|
* hosthooks.h (gt_pch_alloc_granularity): Declare hook function.
|
||||||
* ggc-common.c (default_gt_pch_alloc_granularity): New function.
|
* ggc-common.c (default_gt_pch_alloc_granularity): New function.
|
||||||
(gt_pch_save): Use host_hooks.gt_pch_alloc_granularity
|
(gt_pch_save): Use host_hooks.gt_pch_alloc_granularity
|
||||||
to set mmi.offset padding.
|
to set mmi.offset padding.
|
||||||
* config.gcc (i[34567]86-*-mingw32*): Set target_gtfiles to
|
* config.gcc (i[34567]86-*-mingw32*): Set target_gtfiles to
|
||||||
$(srcdir)/config/i386/winnt.c.
|
$(srcdir)/config/i386/winnt.c.
|
||||||
|
@ -109,9 +117,9 @@
|
||||||
for TARGET_EXPLICIT_INSTANTIATIONS_ONE_ONLY, with reversed sense.
|
for TARGET_EXPLICIT_INSTANTIATIONS_ONE_ONLY, with reversed sense.
|
||||||
* config/darwin.h (TARGET_WEAK_NOT_IN_ARCHIVE_TOC): Likewise.
|
* config/darwin.h (TARGET_WEAK_NOT_IN_ARCHIVE_TOC): Likewise.
|
||||||
* doc/tm.texi (TARGET_WEAK_NOT_IN_ARCHIVE_TOC): Rewrite
|
* doc/tm.texi (TARGET_WEAK_NOT_IN_ARCHIVE_TOC): Rewrite
|
||||||
documentation to reflect the new macro name and to clarify its
|
documentation to reflect the new macro name and to clarify its
|
||||||
meaning.
|
meaning.
|
||||||
|
|
||||||
2004-06-03 Steven Bosscher <stevenb@suse.de>
|
2004-06-03 Steven Bosscher <stevenb@suse.de>
|
||||||
|
|
||||||
* rtl.def (VAR_LOCATION): Make RTX_EXTRA.
|
* rtl.def (VAR_LOCATION): Make RTX_EXTRA.
|
||||||
|
@ -182,7 +190,7 @@
|
||||||
Update callers.
|
Update callers.
|
||||||
Use new worklist.
|
Use new worklist.
|
||||||
(process_ssa_edge_worklist): New function.
|
(process_ssa_edge_worklist): New function.
|
||||||
(tree_ssa_ccp): Move worklist processing core to
|
(tree_ssa_ccp): Move worklist processing core to
|
||||||
process_ssa_edge_worklist, and just call that for the two worklists.
|
process_ssa_edge_worklist, and just call that for the two worklists.
|
||||||
|
|
||||||
2004-06-03 Steven Bosscher <stevenb@suse.de>
|
2004-06-03 Steven Bosscher <stevenb@suse.de>
|
||||||
|
|
|
@ -714,6 +714,7 @@ SYSTEM_H = system.h hwint.h $(srcdir)/../include/libiberty.h
|
||||||
PREDICT_H = predict.h predict.def
|
PREDICT_H = predict.h predict.def
|
||||||
CPPLIB_H = $(srcdir)/../libcpp/include/cpplib.h \
|
CPPLIB_H = $(srcdir)/../libcpp/include/cpplib.h \
|
||||||
$(srcdir)/../libcpp/include/line-map.h
|
$(srcdir)/../libcpp/include/line-map.h
|
||||||
|
MKDEPS_H = $(srcdir)/../libcpp/include/mkdeps.h
|
||||||
SYMTAB_H = $(srcdir)/../libcpp/include/symtab.h
|
SYMTAB_H = $(srcdir)/../libcpp/include/symtab.h
|
||||||
TREE_DUMP_H = tree-dump.h $(SPLAY_TREE_H)
|
TREE_DUMP_H = tree-dump.h $(SPLAY_TREE_H)
|
||||||
TREE_GIMPLE_H = tree-gimple.h tree-iterator.h
|
TREE_GIMPLE_H = tree-gimple.h tree-iterator.h
|
||||||
|
@ -1416,7 +1417,7 @@ c-pretty-print.o : c-pretty-print.c $(C_PRETTY_PRINT_H) \
|
||||||
c-opts.o : c-opts.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
|
c-opts.o : c-opts.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
|
||||||
$(TREE_H) c-pragma.h flags.h toplev.h langhooks.h \
|
$(TREE_H) c-pragma.h flags.h toplev.h langhooks.h \
|
||||||
tree-inline.h $(DIAGNOSTIC_H) intl.h debug.h $(C_COMMON_H) \
|
tree-inline.h $(DIAGNOSTIC_H) intl.h debug.h $(C_COMMON_H) \
|
||||||
opts.h options.h $(PARAMS_H)
|
opts.h options.h $(PARAMS_H) $(MKDEPS_H)
|
||||||
$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
|
$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
|
||||||
$< $(OUTPUT_OPTION) @TARGET_SYSTEM_ROOT_DEFINE@
|
$< $(OUTPUT_OPTION) @TARGET_SYSTEM_ROOT_DEFINE@
|
||||||
|
|
||||||
|
|
12
gcc/c-opts.c
12
gcc/c-opts.c
|
@ -37,6 +37,7 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
|
||||||
#include "debug.h" /* For debug_hooks. */
|
#include "debug.h" /* For debug_hooks. */
|
||||||
#include "opts.h"
|
#include "opts.h"
|
||||||
#include "options.h"
|
#include "options.h"
|
||||||
|
#include "mkdeps.h"
|
||||||
|
|
||||||
#ifndef DOLLARS_IN_IDENTIFIERS
|
#ifndef DOLLARS_IN_IDENTIFIERS
|
||||||
# define DOLLARS_IN_IDENTIFIERS true
|
# define DOLLARS_IN_IDENTIFIERS true
|
||||||
|
@ -1322,13 +1323,22 @@ static void
|
||||||
handle_deferred_opts (void)
|
handle_deferred_opts (void)
|
||||||
{
|
{
|
||||||
size_t i;
|
size_t i;
|
||||||
|
struct deps *deps;
|
||||||
|
|
||||||
|
/* Avoid allocating the deps buffer if we don't need it.
|
||||||
|
(This flag may be true without there having been -MT or -MQ
|
||||||
|
options, but we'll still need the deps buffer.) */
|
||||||
|
if (!deps_seen)
|
||||||
|
return;
|
||||||
|
|
||||||
|
deps = cpp_get_deps (parse_in);
|
||||||
|
|
||||||
for (i = 0; i < deferred_count; i++)
|
for (i = 0; i < deferred_count; i++)
|
||||||
{
|
{
|
||||||
struct deferred_opt *opt = &deferred_opts[i];
|
struct deferred_opt *opt = &deferred_opts[i];
|
||||||
|
|
||||||
if (opt->code == OPT_MT || opt->code == OPT_MQ)
|
if (opt->code == OPT_MT || opt->code == OPT_MQ)
|
||||||
cpp_add_dependency_target (parse_in, opt->arg, opt->code == OPT_MQ);
|
deps_add_target (deps, opt->arg, opt->code == OPT_MQ);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,34 @@
|
||||||
|
2004-06-05 Zack Weinberg <zack@codesourcery.com>
|
||||||
|
|
||||||
|
* Makefile.am: Add makedepend.
|
||||||
|
* Makefile.in, aclocal.m4: Regenerate.
|
||||||
|
* charset.c: Insert a space to avoid a warning.
|
||||||
|
* directives.c: Include mkdeps.h.
|
||||||
|
(_cpp_handle_directive): Reenable macro expander if appropriate.
|
||||||
|
(undefine_macros): Inline body of _cpp_free_definition for speed.
|
||||||
|
Do not call undef callback or _cpp_warn_if_unused_macro.
|
||||||
|
(cpp_get_deps): New interface.
|
||||||
|
* files.c (search_cache): Add pfile argument. Check for file
|
||||||
|
that would be found by "" or <> search here...
|
||||||
|
(_cpp_find_file): ...not here. Correct recorded start_dir of
|
||||||
|
files found by directory-of-current-file search that would be
|
||||||
|
found by "" or <> search.
|
||||||
|
* init.c (cpp_add_dependency_target): Delete.
|
||||||
|
* internal.h (struct lexer_state): Add discarding_output flag.
|
||||||
|
* lex.c (lex_identifier): Compute hash function while scanning.
|
||||||
|
* macro.c (cpp_scan_nooutput): Disable macro expansion outside
|
||||||
|
directives.
|
||||||
|
* makedepend.c: New file.
|
||||||
|
* mkdeps.c (struct deps): Add vpath vector.
|
||||||
|
(apply_vpath, deps_add_vpath): New function.
|
||||||
|
(deps_free): Free vpath vector.
|
||||||
|
(deps_add_dep, deps_add_target): Use apply_vpath.
|
||||||
|
* symtab.c (calc_hash): Use HT_HASHSTEP and HT_FINISH.
|
||||||
|
(ht_lookup_with_hash): New function.
|
||||||
|
* cpplib.h, mkdeps.h: Update prototypes.
|
||||||
|
* symtab.h: Update prototypes.
|
||||||
|
(HT_HASHSTEP, HT_FINISH): New macros.
|
||||||
|
|
||||||
2004-05-29 Geoffrey Keating <geoffk@apple.com>
|
2004-05-29 Geoffrey Keating <geoffk@apple.com>
|
||||||
|
|
||||||
* symtab.c (ht_create): Set entries_owned.
|
* symtab.c (ht_create): Set entries_owned.
|
||||||
|
|
|
@ -13,6 +13,9 @@ noinst_HEADERS = \
|
||||||
include/cpplib.h include/line-map.h include/mkdeps.h \
|
include/cpplib.h include/line-map.h include/mkdeps.h \
|
||||||
include/symtab.h internal.h system.h ucnid.h
|
include/symtab.h internal.h system.h ucnid.h
|
||||||
|
|
||||||
|
noinst_PROGRAMS = makedepend
|
||||||
|
makedepend_LDADD = libcpp.a ../libiberty/libiberty.a
|
||||||
|
|
||||||
XGETTEXT = @XGETTEXT@
|
XGETTEXT = @XGETTEXT@
|
||||||
GMSGFMT = @GMSGFMT@
|
GMSGFMT = @GMSGFMT@
|
||||||
MSGMERGE = msgmerge
|
MSGMERGE = msgmerge
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# Makefile.in generated by automake 1.8.4 from Makefile.am.
|
# Makefile.in generated by automake 1.8.5 from Makefile.am.
|
||||||
# @configure_input@
|
# @configure_input@
|
||||||
|
|
||||||
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
|
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
|
||||||
|
@ -15,7 +15,8 @@
|
||||||
@SET_MAKE@
|
@SET_MAKE@
|
||||||
|
|
||||||
|
|
||||||
SOURCES = $(libcpp_a_SOURCES)
|
|
||||||
|
SOURCES = $(libcpp_a_SOURCES) makedepend.c
|
||||||
|
|
||||||
srcdir = @srcdir@
|
srcdir = @srcdir@
|
||||||
top_srcdir = @top_srcdir@
|
top_srcdir = @top_srcdir@
|
||||||
|
@ -40,6 +41,7 @@ POST_UNINSTALL = :
|
||||||
build_triplet = @build@
|
build_triplet = @build@
|
||||||
host_triplet = @host@
|
host_triplet = @host@
|
||||||
target_triplet = @target@
|
target_triplet = @target@
|
||||||
|
noinst_PROGRAMS = makedepend$(EXEEXT)
|
||||||
DIST_COMMON = $(am__configure_deps) $(noinst_HEADERS) \
|
DIST_COMMON = $(am__configure_deps) $(noinst_HEADERS) \
|
||||||
$(srcdir)/../config.guess $(srcdir)/../config.sub \
|
$(srcdir)/../config.guess $(srcdir)/../config.sub \
|
||||||
$(srcdir)/../depcomp $(srcdir)/../install-sh \
|
$(srcdir)/../depcomp $(srcdir)/../install-sh \
|
||||||
|
@ -57,9 +59,9 @@ am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
|
||||||
mkinstalldirs = $(SHELL) $(top_srcdir)/../mkinstalldirs
|
mkinstalldirs = $(SHELL) $(top_srcdir)/../mkinstalldirs
|
||||||
CONFIG_HEADER = config.h
|
CONFIG_HEADER = config.h
|
||||||
CONFIG_CLEAN_FILES =
|
CONFIG_CLEAN_FILES =
|
||||||
|
LIBRARIES = $(noinst_LIBRARIES)
|
||||||
AR = ar
|
AR = ar
|
||||||
ARFLAGS = cru
|
ARFLAGS = cru
|
||||||
LIBRARIES = $(noinst_LIBRARIES)
|
|
||||||
libcpp_a_AR = $(AR) $(ARFLAGS)
|
libcpp_a_AR = $(AR) $(ARFLAGS)
|
||||||
libcpp_a_LIBADD =
|
libcpp_a_LIBADD =
|
||||||
am_libcpp_a_OBJECTS = charset.$(OBJEXT) directives.$(OBJEXT) \
|
am_libcpp_a_OBJECTS = charset.$(OBJEXT) directives.$(OBJEXT) \
|
||||||
|
@ -68,6 +70,10 @@ am_libcpp_a_OBJECTS = charset.$(OBJEXT) directives.$(OBJEXT) \
|
||||||
line-map.$(OBJEXT) macro.$(OBJEXT) mkdeps.$(OBJEXT) \
|
line-map.$(OBJEXT) macro.$(OBJEXT) mkdeps.$(OBJEXT) \
|
||||||
pch.$(OBJEXT) symtab.$(OBJEXT) traditional.$(OBJEXT)
|
pch.$(OBJEXT) symtab.$(OBJEXT) traditional.$(OBJEXT)
|
||||||
libcpp_a_OBJECTS = $(am_libcpp_a_OBJECTS)
|
libcpp_a_OBJECTS = $(am_libcpp_a_OBJECTS)
|
||||||
|
PROGRAMS = $(noinst_PROGRAMS)
|
||||||
|
makedepend_SOURCES = makedepend.c
|
||||||
|
makedepend_OBJECTS = makedepend.$(OBJEXT)
|
||||||
|
makedepend_DEPENDENCIES = libcpp.a ../libiberty/libiberty.a
|
||||||
DEFAULT_INCLUDES = -I. -I$(srcdir) -I.
|
DEFAULT_INCLUDES = -I. -I$(srcdir) -I.
|
||||||
depcomp = $(SHELL) $(top_srcdir)/../depcomp
|
depcomp = $(SHELL) $(top_srcdir)/../depcomp
|
||||||
am__depfiles_maybe = depfiles
|
am__depfiles_maybe = depfiles
|
||||||
|
@ -76,15 +82,15 @@ am__depfiles_maybe = depfiles
|
||||||
@AMDEP_TRUE@ ./$(DEPDIR)/expr.Po ./$(DEPDIR)/files.Po \
|
@AMDEP_TRUE@ ./$(DEPDIR)/expr.Po ./$(DEPDIR)/files.Po \
|
||||||
@AMDEP_TRUE@ ./$(DEPDIR)/identifiers.Po ./$(DEPDIR)/init.Po \
|
@AMDEP_TRUE@ ./$(DEPDIR)/identifiers.Po ./$(DEPDIR)/init.Po \
|
||||||
@AMDEP_TRUE@ ./$(DEPDIR)/lex.Po ./$(DEPDIR)/line-map.Po \
|
@AMDEP_TRUE@ ./$(DEPDIR)/lex.Po ./$(DEPDIR)/line-map.Po \
|
||||||
@AMDEP_TRUE@ ./$(DEPDIR)/macro.Po ./$(DEPDIR)/mkdeps.Po \
|
@AMDEP_TRUE@ ./$(DEPDIR)/macro.Po ./$(DEPDIR)/makedepend.Po \
|
||||||
@AMDEP_TRUE@ ./$(DEPDIR)/pch.Po ./$(DEPDIR)/symtab.Po \
|
@AMDEP_TRUE@ ./$(DEPDIR)/mkdeps.Po ./$(DEPDIR)/pch.Po \
|
||||||
@AMDEP_TRUE@ ./$(DEPDIR)/traditional.Po
|
@AMDEP_TRUE@ ./$(DEPDIR)/symtab.Po ./$(DEPDIR)/traditional.Po
|
||||||
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
|
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
|
||||||
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
|
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
|
||||||
CCLD = $(CC)
|
CCLD = $(CC)
|
||||||
LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
|
LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
|
||||||
SOURCES = $(libcpp_a_SOURCES)
|
SOURCES = $(libcpp_a_SOURCES) makedepend.c
|
||||||
DIST_SOURCES = $(libcpp_a_SOURCES)
|
DIST_SOURCES = $(libcpp_a_SOURCES) makedepend.c
|
||||||
HEADERS = $(noinst_HEADERS)
|
HEADERS = $(noinst_HEADERS)
|
||||||
ETAGS = etags
|
ETAGS = etags
|
||||||
CTAGS = ctags
|
CTAGS = ctags
|
||||||
|
@ -213,6 +219,7 @@ noinst_HEADERS = \
|
||||||
include/cpplib.h include/line-map.h include/mkdeps.h \
|
include/cpplib.h include/line-map.h include/mkdeps.h \
|
||||||
include/symtab.h internal.h system.h ucnid.h
|
include/symtab.h internal.h system.h ucnid.h
|
||||||
|
|
||||||
|
makedepend_LDADD = libcpp.a ../libiberty/libiberty.a
|
||||||
MSGMERGE = msgmerge
|
MSGMERGE = msgmerge
|
||||||
all: config.h
|
all: config.h
|
||||||
$(MAKE) $(AM_MAKEFLAGS) all-am
|
$(MAKE) $(AM_MAKEFLAGS) all-am
|
||||||
|
@ -277,6 +284,12 @@ libcpp.a: $(libcpp_a_OBJECTS) $(libcpp_a_DEPENDENCIES)
|
||||||
$(libcpp_a_AR) libcpp.a $(libcpp_a_OBJECTS) $(libcpp_a_LIBADD)
|
$(libcpp_a_AR) libcpp.a $(libcpp_a_OBJECTS) $(libcpp_a_LIBADD)
|
||||||
$(RANLIB) libcpp.a
|
$(RANLIB) libcpp.a
|
||||||
|
|
||||||
|
clean-noinstPROGRAMS:
|
||||||
|
-test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS)
|
||||||
|
makedepend$(EXEEXT): $(makedepend_OBJECTS) $(makedepend_DEPENDENCIES)
|
||||||
|
@rm -f makedepend$(EXEEXT)
|
||||||
|
$(LINK) $(makedepend_LDFLAGS) $(makedepend_OBJECTS) $(makedepend_LDADD) $(LIBS)
|
||||||
|
|
||||||
mostlyclean-compile:
|
mostlyclean-compile:
|
||||||
-rm -f *.$(OBJEXT)
|
-rm -f *.$(OBJEXT)
|
||||||
|
|
||||||
|
@ -293,6 +306,7 @@ distclean-compile:
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lex.Po@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lex.Po@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/line-map.Po@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/line-map.Po@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/macro.Po@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/macro.Po@am__quote@
|
||||||
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/makedepend.Po@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mkdeps.Po@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mkdeps.Po@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pch.Po@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pch.Po@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/symtab.Po@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/symtab.Po@am__quote@
|
||||||
|
@ -336,7 +350,7 @@ TAGS: $(HEADERS) $(SOURCES) config.in $(TAGS_DEPENDENCIES) \
|
||||||
$(AWK) ' { files[$$0] = 1; } \
|
$(AWK) ' { files[$$0] = 1; } \
|
||||||
END { for (i in files) print i; }'`; \
|
END { for (i in files) print i; }'`; \
|
||||||
if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
|
if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
|
||||||
test -z "$$unique" && unique=$$empty_fix; \
|
test -n "$$unique" || unique=$$empty_fix; \
|
||||||
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
||||||
$$tags $$unique; \
|
$$tags $$unique; \
|
||||||
fi
|
fi
|
||||||
|
@ -492,7 +506,7 @@ distcleancheck: distclean
|
||||||
exit 1; } >&2
|
exit 1; } >&2
|
||||||
check-am: all-am
|
check-am: all-am
|
||||||
check: check-am
|
check: check-am
|
||||||
all-am: Makefile $(LIBRARIES) $(HEADERS) config.h
|
all-am: Makefile $(LIBRARIES) $(PROGRAMS) $(HEADERS) config.h
|
||||||
installdirs:
|
installdirs:
|
||||||
install: install-am
|
install: install-am
|
||||||
install-exec: install-exec-am
|
install-exec: install-exec-am
|
||||||
|
@ -520,7 +534,8 @@ maintainer-clean-generic:
|
||||||
@echo "it deletes files that may require special tools to rebuild."
|
@echo "it deletes files that may require special tools to rebuild."
|
||||||
clean: clean-am
|
clean: clean-am
|
||||||
|
|
||||||
clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am
|
clean-am: clean-generic clean-noinstLIBRARIES clean-noinstPROGRAMS \
|
||||||
|
mostlyclean-am
|
||||||
|
|
||||||
distclean: distclean-am
|
distclean: distclean-am
|
||||||
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
|
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
|
||||||
|
@ -571,17 +586,18 @@ ps-am:
|
||||||
uninstall-am: uninstall-info-am
|
uninstall-am: uninstall-info-am
|
||||||
|
|
||||||
.PHONY: CTAGS GTAGS all all-am am--refresh check check-am clean \
|
.PHONY: CTAGS GTAGS all all-am am--refresh check check-am clean \
|
||||||
clean-generic clean-noinstLIBRARIES ctags dist dist-all \
|
clean-generic clean-noinstLIBRARIES clean-noinstPROGRAMS ctags \
|
||||||
dist-bzip2 dist-gzip dist-shar dist-tarZ dist-zip distcheck \
|
dist dist-all dist-bzip2 dist-gzip dist-shar dist-tarZ \
|
||||||
distclean distclean-compile distclean-generic distclean-hdr \
|
dist-zip distcheck distclean distclean-compile \
|
||||||
distclean-tags distcleancheck distdir distuninstallcheck dvi \
|
distclean-generic distclean-hdr distclean-tags distcleancheck \
|
||||||
dvi-am html html-am info info-am install install-am \
|
distdir distuninstallcheck dvi dvi-am html html-am info \
|
||||||
install-data install-data-am install-data-local install-exec \
|
info-am install install-am install-data install-data-am \
|
||||||
install-exec-am install-info install-info-am install-man \
|
install-data-local install-exec install-exec-am install-info \
|
||||||
install-strip installcheck installcheck-am installdirs \
|
install-info-am install-man install-strip installcheck \
|
||||||
maintainer-clean maintainer-clean-generic mostlyclean \
|
installcheck-am installdirs maintainer-clean \
|
||||||
mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \
|
maintainer-clean-generic mostlyclean mostlyclean-compile \
|
||||||
tags uninstall uninstall-am uninstall-info-am
|
mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \
|
||||||
|
uninstall-am uninstall-info-am
|
||||||
|
|
||||||
|
|
||||||
@ENABLE_NLS_TRUE@build-po: $(CATALOGS)
|
@ENABLE_NLS_TRUE@build-po: $(CATALOGS)
|
||||||
|
|
4
libcpp/aclocal.m4
vendored
4
libcpp/aclocal.m4
vendored
|
@ -1,4 +1,4 @@
|
||||||
# generated automatically by aclocal 1.8.4 -*- Autoconf -*-
|
# generated automatically by aclocal 1.8.5 -*- Autoconf -*-
|
||||||
|
|
||||||
# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
|
# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
|
||||||
# Free Software Foundation, Inc.
|
# Free Software Foundation, Inc.
|
||||||
|
@ -989,7 +989,7 @@ AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version="1.8"])
|
||||||
# Call AM_AUTOMAKE_VERSION so it can be traced.
|
# Call AM_AUTOMAKE_VERSION so it can be traced.
|
||||||
# This function is AC_REQUIREd by AC_INIT_AUTOMAKE.
|
# This function is AC_REQUIREd by AC_INIT_AUTOMAKE.
|
||||||
AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
|
AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
|
||||||
[AM_AUTOMAKE_VERSION([1.8.4])])
|
[AM_AUTOMAKE_VERSION([1.8.5])])
|
||||||
|
|
||||||
# AM_AUX_DIR_EXPAND
|
# AM_AUX_DIR_EXPAND
|
||||||
|
|
||||||
|
|
|
@ -1409,7 +1409,7 @@ _cpp_default_encoding (void)
|
||||||
- the appropriate Unicode byte-order mark (FE FF) to recognize
|
- the appropriate Unicode byte-order mark (FE FF) to recognize
|
||||||
UTF16 and UCS4 (in both big-endian and little-endian flavors)
|
UTF16 and UCS4 (in both big-endian and little-endian flavors)
|
||||||
and UTF8
|
and UTF8
|
||||||
- a "#i", "#d", "/*", "//", " #p" or "#p" (for #pragma) to
|
- a "#i", "#d", "/ *", "//", " #p" or "#p" (for #pragma) to
|
||||||
distinguish ASCII and EBCDIC.
|
distinguish ASCII and EBCDIC.
|
||||||
- now we can parse something like "#pragma GCC encoding <xyz>
|
- now we can parse something like "#pragma GCC encoding <xyz>
|
||||||
on the first line, or even Emacs/VIM's mode line tags (there's
|
on the first line, or even Emacs/VIM's mode line tags (there's
|
||||||
|
|
|
@ -23,6 +23,7 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||||
#include "system.h"
|
#include "system.h"
|
||||||
#include "cpplib.h"
|
#include "cpplib.h"
|
||||||
#include "internal.h"
|
#include "internal.h"
|
||||||
|
#include "mkdeps.h"
|
||||||
#include "obstack.h"
|
#include "obstack.h"
|
||||||
|
|
||||||
/* Chained list of answers to an assertion. */
|
/* Chained list of answers to an assertion. */
|
||||||
|
@ -336,8 +337,12 @@ _cpp_handle_directive (cpp_reader *pfile, int indented)
|
||||||
const directive *dir = 0;
|
const directive *dir = 0;
|
||||||
const cpp_token *dname;
|
const cpp_token *dname;
|
||||||
bool was_parsing_args = pfile->state.parsing_args;
|
bool was_parsing_args = pfile->state.parsing_args;
|
||||||
|
bool was_discarding_output = pfile->state.discarding_output;
|
||||||
int skip = 1;
|
int skip = 1;
|
||||||
|
|
||||||
|
if (was_discarding_output)
|
||||||
|
pfile->state.prevent_expansion = 0;
|
||||||
|
|
||||||
if (was_parsing_args)
|
if (was_parsing_args)
|
||||||
{
|
{
|
||||||
if (CPP_OPTION (pfile, pedantic))
|
if (CPP_OPTION (pfile, pedantic))
|
||||||
|
@ -432,6 +437,8 @@ _cpp_handle_directive (cpp_reader *pfile, int indented)
|
||||||
pfile->state.parsing_args = 2;
|
pfile->state.parsing_args = 2;
|
||||||
pfile->state.prevent_expansion = 1;
|
pfile->state.prevent_expansion = 1;
|
||||||
}
|
}
|
||||||
|
if (was_discarding_output)
|
||||||
|
pfile->state.prevent_expansion = 1;
|
||||||
return skip;
|
return skip;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -549,30 +556,13 @@ do_undef (cpp_reader *pfile)
|
||||||
/* Undefine a single macro/assertion/whatever. */
|
/* Undefine a single macro/assertion/whatever. */
|
||||||
|
|
||||||
static int
|
static int
|
||||||
undefine_macros (cpp_reader *pfile, cpp_hashnode *h,
|
undefine_macros (cpp_reader *pfile ATTRIBUTE_UNUSED, cpp_hashnode *h,
|
||||||
void *data_p ATTRIBUTE_UNUSED)
|
void *data_p ATTRIBUTE_UNUSED)
|
||||||
{
|
{
|
||||||
switch (h->type)
|
/* Body of _cpp_free_definition inlined here for speed.
|
||||||
{
|
Macros and assertions no longer have anything to free. */
|
||||||
case NT_VOID:
|
h->type = NT_VOID;
|
||||||
break;
|
h->flags &= ~(NODE_POISONED|NODE_BUILTIN|NODE_DISABLED);
|
||||||
|
|
||||||
case NT_MACRO:
|
|
||||||
if (pfile->cb.undef)
|
|
||||||
(*pfile->cb.undef) (pfile, pfile->directive_line, h);
|
|
||||||
|
|
||||||
if (CPP_OPTION (pfile, warn_unused_macros))
|
|
||||||
_cpp_warn_if_unused_macro (pfile, h, NULL);
|
|
||||||
|
|
||||||
/* And fall through.... */
|
|
||||||
case NT_ASSERTION:
|
|
||||||
_cpp_free_definition (h);
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
abort ();
|
|
||||||
}
|
|
||||||
h->flags &= ~NODE_POISONED;
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1913,6 +1903,15 @@ cpp_set_callbacks (cpp_reader *pfile, cpp_callbacks *cb)
|
||||||
pfile->cb = *cb;
|
pfile->cb = *cb;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* The dependencies structure. (Creates one if it hasn't already been.) */
|
||||||
|
struct deps *
|
||||||
|
cpp_get_deps (cpp_reader *pfile)
|
||||||
|
{
|
||||||
|
if (!pfile->deps)
|
||||||
|
pfile->deps = deps_init ();
|
||||||
|
return pfile->deps;
|
||||||
|
}
|
||||||
|
|
||||||
/* Push a new buffer on the buffer stack. Returns the new buffer; it
|
/* Push a new buffer on the buffer stack. Returns the new buffer; it
|
||||||
doesn't fail. It does not generate a file change call back; that
|
doesn't fail. It does not generate a file change call back; that
|
||||||
is the responsibility of the caller. */
|
is the responsibility of the caller. */
|
||||||
|
|
|
@ -158,7 +158,8 @@ static struct cpp_dir *search_path_head (cpp_reader *, const char *fname,
|
||||||
int angle_brackets, enum include_type);
|
int angle_brackets, enum include_type);
|
||||||
static const char *dir_name_of_file (_cpp_file *file);
|
static const char *dir_name_of_file (_cpp_file *file);
|
||||||
static void open_file_failed (cpp_reader *pfile, _cpp_file *file);
|
static void open_file_failed (cpp_reader *pfile, _cpp_file *file);
|
||||||
static struct file_hash_entry *search_cache (struct file_hash_entry *head,
|
static struct file_hash_entry *search_cache (cpp_reader *pfile,
|
||||||
|
struct file_hash_entry *head,
|
||||||
const cpp_dir *start_dir);
|
const cpp_dir *start_dir);
|
||||||
static _cpp_file *make_cpp_file (cpp_reader *, cpp_dir *, const char *fname);
|
static _cpp_file *make_cpp_file (cpp_reader *, cpp_dir *, const char *fname);
|
||||||
static cpp_dir *make_cpp_dir (cpp_reader *, const char *dir_name, int sysp);
|
static cpp_dir *make_cpp_dir (cpp_reader *, const char *dir_name, int sysp);
|
||||||
|
@ -406,7 +407,7 @@ _cpp_find_file (cpp_reader *pfile, const char *fname, cpp_dir *start_dir, bool f
|
||||||
INSERT);
|
INSERT);
|
||||||
|
|
||||||
/* First check the cache before we resort to memory allocation. */
|
/* First check the cache before we resort to memory allocation. */
|
||||||
entry = search_cache (*hash_slot, start_dir);
|
entry = search_cache (pfile, *hash_slot, start_dir);
|
||||||
if (entry)
|
if (entry)
|
||||||
return entry->u.file;
|
return entry->u.file;
|
||||||
|
|
||||||
|
@ -435,17 +436,6 @@ _cpp_find_file (cpp_reader *pfile, const char *fname, cpp_dir *start_dir, bool f
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Only check the cache for the starting location (done above)
|
|
||||||
and the quote and bracket chain heads because there are no
|
|
||||||
other possible starting points for searches. */
|
|
||||||
if (file->dir != pfile->bracket_include
|
|
||||||
&& file->dir != pfile->quote_include)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
entry = search_cache (*hash_slot, file->dir);
|
|
||||||
if (entry)
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (entry)
|
if (entry)
|
||||||
|
@ -462,6 +452,33 @@ _cpp_find_file (cpp_reader *pfile, const char *fname, cpp_dir *start_dir, bool f
|
||||||
pfile->all_files = file;
|
pfile->all_files = file;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* If this file was found in the directory-of-the-current-file,
|
||||||
|
check whether that directory is reachable via one of the normal
|
||||||
|
search paths. If so, we must record this entry as being
|
||||||
|
reachable that way, otherwise we will mistakenly reprocess this
|
||||||
|
file if it is included later from the normal search path. */
|
||||||
|
if (file->dir && start_dir->next == pfile->quote_include)
|
||||||
|
{
|
||||||
|
cpp_dir *d;
|
||||||
|
cpp_dir *proper_start_dir = pfile->quote_include;
|
||||||
|
|
||||||
|
for (d = proper_start_dir;; d = d->next)
|
||||||
|
{
|
||||||
|
if (d == pfile->bracket_include)
|
||||||
|
proper_start_dir = d;
|
||||||
|
if (d == 0)
|
||||||
|
{
|
||||||
|
proper_start_dir = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
/* file->dir->name will have a trailing slash. */
|
||||||
|
if (!strncmp (d->name, file->dir->name, file->dir->len - 1))
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (proper_start_dir)
|
||||||
|
start_dir = proper_start_dir;
|
||||||
|
}
|
||||||
|
|
||||||
/* Store this new result in the hash table. */
|
/* Store this new result in the hash table. */
|
||||||
entry = new_file_hash_entry (pfile);
|
entry = new_file_hash_entry (pfile);
|
||||||
entry->next = *hash_slot;
|
entry->next = *hash_slot;
|
||||||
|
@ -821,12 +838,40 @@ open_file_failed (cpp_reader *pfile, _cpp_file *file)
|
||||||
/* Search in the chain beginning at HEAD for a file whose search path
|
/* Search in the chain beginning at HEAD for a file whose search path
|
||||||
started at START_DIR != NULL. */
|
started at START_DIR != NULL. */
|
||||||
static struct file_hash_entry *
|
static struct file_hash_entry *
|
||||||
search_cache (struct file_hash_entry *head, const cpp_dir *start_dir)
|
search_cache (cpp_reader *pfile, struct file_hash_entry *head,
|
||||||
|
const cpp_dir *start_dir)
|
||||||
{
|
{
|
||||||
while (head && head->start_dir != start_dir)
|
struct file_hash_entry *p;
|
||||||
head = head->next;
|
|
||||||
|
|
||||||
return head;
|
/* Look for a file that was found from a search starting at the
|
||||||
|
given location. */
|
||||||
|
for (p = head; p; p = p->next)
|
||||||
|
if (p->start_dir == start_dir)
|
||||||
|
return p;
|
||||||
|
|
||||||
|
/* If the given location is for a search of the directory containing
|
||||||
|
the current file, check for a match starting at the base of the
|
||||||
|
quoted include chain. */
|
||||||
|
if (start_dir->next == pfile->quote_include)
|
||||||
|
{
|
||||||
|
start_dir = pfile->quote_include;
|
||||||
|
for (p = head; p; p = p->next)
|
||||||
|
if (p->start_dir == start_dir)
|
||||||
|
return p;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* If the given location is for a search from the base of the quoted
|
||||||
|
include chain, check for a match starting at the base of the
|
||||||
|
bracket include chain. */
|
||||||
|
if (start_dir == pfile->quote_include)
|
||||||
|
{
|
||||||
|
start_dir = pfile->bracket_include;
|
||||||
|
for (p = head; p; p = p->next)
|
||||||
|
if (p->start_dir == start_dir)
|
||||||
|
return p;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Allocate a new _cpp_file structure. */
|
/* Allocate a new _cpp_file structure. */
|
||||||
|
|
|
@ -538,23 +538,18 @@ extern cpp_reader *cpp_create_reader (enum c_lang, struct ht *,
|
||||||
command line options). */
|
command line options). */
|
||||||
extern void cpp_set_lang (cpp_reader *, enum c_lang);
|
extern void cpp_set_lang (cpp_reader *, enum c_lang);
|
||||||
|
|
||||||
/* Add a dependency TARGET. Quote it for "make" if QUOTE. Can be
|
|
||||||
called any number of times before cpp_read_main_file(). If no
|
|
||||||
targets have been added before cpp_read_main_file(), then the
|
|
||||||
default target is used. */
|
|
||||||
extern void cpp_add_dependency_target (cpp_reader *, const char *, int);
|
|
||||||
|
|
||||||
/* Set the include paths. */
|
/* Set the include paths. */
|
||||||
extern void cpp_set_include_chains (cpp_reader *, cpp_dir *, cpp_dir *, int);
|
extern void cpp_set_include_chains (cpp_reader *, cpp_dir *, cpp_dir *, int);
|
||||||
|
|
||||||
/* Call these to get pointers to the options and callback structures
|
/* Call these to get pointers to the options, callback, and deps
|
||||||
for a given reader. These pointers are good until you call
|
structures for a given reader. These pointers are good until you
|
||||||
cpp_finish on that reader. You can either edit the callbacks
|
call cpp_finish on that reader. You can either edit the callbacks
|
||||||
through the pointer returned from cpp_get_callbacks, or set them
|
through the pointer returned from cpp_get_callbacks, or set them
|
||||||
with cpp_set_callbacks. */
|
with cpp_set_callbacks. */
|
||||||
extern cpp_options *cpp_get_options (cpp_reader *);
|
extern cpp_options *cpp_get_options (cpp_reader *);
|
||||||
extern cpp_callbacks *cpp_get_callbacks (cpp_reader *);
|
extern cpp_callbacks *cpp_get_callbacks (cpp_reader *);
|
||||||
extern void cpp_set_callbacks (cpp_reader *, cpp_callbacks *);
|
extern void cpp_set_callbacks (cpp_reader *, cpp_callbacks *);
|
||||||
|
extern struct deps *cpp_get_deps (cpp_reader *);
|
||||||
|
|
||||||
/* This function reads the file, but does not start preprocessing. It
|
/* This function reads the file, but does not start preprocessing. It
|
||||||
returns the name of the original file; this is the same as the
|
returns the name of the original file; this is the same as the
|
||||||
|
|
|
@ -34,6 +34,13 @@ extern struct deps *deps_init (void);
|
||||||
/* Destroy a deps buffer. */
|
/* Destroy a deps buffer. */
|
||||||
extern void deps_free (struct deps *);
|
extern void deps_free (struct deps *);
|
||||||
|
|
||||||
|
/* Add a set of "vpath" directories. The second argument is a colon-
|
||||||
|
separated list of pathnames, like you would set Make's VPATH
|
||||||
|
variable to. If a dependency or target name begins with any of
|
||||||
|
these pathnames (and the next path element is not "..") that
|
||||||
|
pathname is stripped off. */
|
||||||
|
extern void deps_add_vpath (struct deps *, const char *);
|
||||||
|
|
||||||
/* Add a target (appears on left side of the colon) to the deps list. Takes
|
/* Add a target (appears on left side of the colon) to the deps list. Takes
|
||||||
a boolean indicating whether to quote the target for MAKE. */
|
a boolean indicating whether to quote the target for MAKE. */
|
||||||
extern void deps_add_target (struct deps *, const char *, int);
|
extern void deps_add_target (struct deps *, const char *, int);
|
||||||
|
|
|
@ -71,6 +71,11 @@ extern void ht_destroy (hash_table *);
|
||||||
|
|
||||||
extern hashnode ht_lookup (hash_table *, const unsigned char *,
|
extern hashnode ht_lookup (hash_table *, const unsigned char *,
|
||||||
size_t, enum ht_lookup_option);
|
size_t, enum ht_lookup_option);
|
||||||
|
extern hashnode ht_lookup_with_hash (hash_table *, const unsigned char *,
|
||||||
|
size_t, unsigned int,
|
||||||
|
enum ht_lookup_option);
|
||||||
|
#define HT_HASHSTEP(r, c) ((r) * 67 + ((c) - 113));
|
||||||
|
#define HT_HASHFINISH(r, len) ((r) + (len))
|
||||||
|
|
||||||
/* For all nodes in TABLE, make a callback. The callback takes
|
/* For all nodes in TABLE, make a callback. The callback takes
|
||||||
TABLE->PFILE, the node, and a PTR, and the callback sequence stops
|
TABLE->PFILE, the node, and a PTR, and the callback sequence stops
|
||||||
|
|
|
@ -429,18 +429,6 @@ static void sanity_checks (cpp_reader *pfile)
|
||||||
# define sanity_checks(PFILE)
|
# define sanity_checks(PFILE)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Add a dependency target. Can be called any number of times before
|
|
||||||
cpp_read_main_file(). If no targets have been added before
|
|
||||||
cpp_read_main_file(), then the default target is used. */
|
|
||||||
void
|
|
||||||
cpp_add_dependency_target (cpp_reader *pfile, const char *target, int quote)
|
|
||||||
{
|
|
||||||
if (!pfile->deps)
|
|
||||||
pfile->deps = deps_init ();
|
|
||||||
|
|
||||||
deps_add_target (pfile->deps, target, quote);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* This is called after options have been parsed, and partially
|
/* This is called after options have been parsed, and partially
|
||||||
processed. */
|
processed. */
|
||||||
void
|
void
|
||||||
|
|
|
@ -246,6 +246,10 @@ struct lexer_state
|
||||||
/* Nonzero when parsing arguments to a function-like macro. */
|
/* Nonzero when parsing arguments to a function-like macro. */
|
||||||
unsigned char parsing_args;
|
unsigned char parsing_args;
|
||||||
|
|
||||||
|
/* Nonzero if prevent_expansion is true only because output is
|
||||||
|
being discarded. */
|
||||||
|
unsigned char discarding_output;
|
||||||
|
|
||||||
/* Nonzero to skip evaluating part of an expression. */
|
/* Nonzero to skip evaluating part of an expression. */
|
||||||
unsigned int skip_eval;
|
unsigned int skip_eval;
|
||||||
};
|
};
|
||||||
|
|
28
libcpp/lex.c
28
libcpp/lex.c
|
@ -470,22 +470,36 @@ static cpp_hashnode *
|
||||||
lex_identifier (cpp_reader *pfile, const uchar *base)
|
lex_identifier (cpp_reader *pfile, const uchar *base)
|
||||||
{
|
{
|
||||||
cpp_hashnode *result;
|
cpp_hashnode *result;
|
||||||
const uchar *cur;
|
const uchar *cur, *limit;
|
||||||
|
unsigned int len;
|
||||||
|
unsigned int hash = HT_HASHSTEP (0, *base);
|
||||||
|
|
||||||
do
|
cur = pfile->buffer->cur;
|
||||||
|
for (;;)
|
||||||
{
|
{
|
||||||
cur = pfile->buffer->cur;
|
|
||||||
|
|
||||||
/* N.B. ISIDNUM does not include $. */
|
/* N.B. ISIDNUM does not include $. */
|
||||||
while (ISIDNUM (*cur))
|
while (ISIDNUM (*cur))
|
||||||
cur++;
|
{
|
||||||
|
hash = HT_HASHSTEP (hash, *cur);
|
||||||
|
cur++;
|
||||||
|
}
|
||||||
|
|
||||||
pfile->buffer->cur = cur;
|
pfile->buffer->cur = cur;
|
||||||
|
if (!forms_identifier_p (pfile, false))
|
||||||
|
break;
|
||||||
|
|
||||||
|
limit = pfile->buffer->cur;
|
||||||
|
while (cur < limit)
|
||||||
|
{
|
||||||
|
hash = HT_HASHSTEP (hash, *cur);
|
||||||
|
cur++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
while (forms_identifier_p (pfile, false));
|
len = cur - base;
|
||||||
|
hash = HT_HASHFINISH (hash, len);
|
||||||
|
|
||||||
result = (cpp_hashnode *)
|
result = (cpp_hashnode *)
|
||||||
ht_lookup (pfile->hash_table, base, cur - base, HT_ALLOC);
|
ht_lookup_with_hash (pfile->hash_table, base, len, hash, HT_ALLOC);
|
||||||
|
|
||||||
/* Rarely, identifiers require diagnostics when lexed. */
|
/* Rarely, identifiers require diagnostics when lexed. */
|
||||||
if (__builtin_expect ((result->flags & NODE_DIAGNOSTIC)
|
if (__builtin_expect ((result->flags & NODE_DIAGNOSTIC)
|
||||||
|
|
|
@ -1142,12 +1142,18 @@ cpp_scan_nooutput (cpp_reader *pfile)
|
||||||
transparently continuing with the including file. */
|
transparently continuing with the including file. */
|
||||||
pfile->buffer->return_at_eof = true;
|
pfile->buffer->return_at_eof = true;
|
||||||
|
|
||||||
|
pfile->state.discarding_output++;
|
||||||
|
pfile->state.prevent_expansion++;
|
||||||
|
|
||||||
if (CPP_OPTION (pfile, traditional))
|
if (CPP_OPTION (pfile, traditional))
|
||||||
while (_cpp_read_logical_line_trad (pfile))
|
while (_cpp_read_logical_line_trad (pfile))
|
||||||
;
|
;
|
||||||
else
|
else
|
||||||
while (cpp_get_token (pfile)->type != CPP_EOF)
|
while (cpp_get_token (pfile)->type != CPP_EOF)
|
||||||
;
|
;
|
||||||
|
|
||||||
|
pfile->state.discarding_output--;
|
||||||
|
pfile->state.prevent_expansion--;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Step back one (or more) tokens. Can only step mack more than 1 if
|
/* Step back one (or more) tokens. Can only step mack more than 1 if
|
||||||
|
|
205
libcpp/makedepend.c
Normal file
205
libcpp/makedepend.c
Normal file
|
@ -0,0 +1,205 @@
|
||||||
|
/* Dependency generator utility.
|
||||||
|
Copyright (C) 2004 Free Software Foundation, Inc.
|
||||||
|
Contributed by Zack Weinberg, May 2004
|
||||||
|
|
||||||
|
This program 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 2, or (at your option) any
|
||||||
|
later version.
|
||||||
|
|
||||||
|
This program 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 this program; if not, write to the Free Software
|
||||||
|
Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
|
|
||||||
|
In other words, you are welcome to use, share and improve this program.
|
||||||
|
You are forbidden to forbid anyone else to use, share and improve
|
||||||
|
what you give them. Help stamp out software-hoarding! */
|
||||||
|
|
||||||
|
#include "config.h"
|
||||||
|
#include "system.h"
|
||||||
|
#include "line-map.h"
|
||||||
|
#include "cpplib.h"
|
||||||
|
#include "getopt.h"
|
||||||
|
|
||||||
|
const char *progname;
|
||||||
|
const char *vpath;
|
||||||
|
|
||||||
|
static const char *output_file;
|
||||||
|
static bool had_errors;
|
||||||
|
|
||||||
|
/* Option lists, to give to cpplib before each input file. */
|
||||||
|
struct cmd_line_macro
|
||||||
|
{
|
||||||
|
struct cmd_line_macro *next;
|
||||||
|
bool is_undef;
|
||||||
|
const char *macro;
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct cmd_line_macro *cmd_line_macros;
|
||||||
|
static cpp_dir *cmd_line_searchpath;
|
||||||
|
|
||||||
|
static void
|
||||||
|
add_clm (const char *macro, bool is_undef)
|
||||||
|
{
|
||||||
|
struct cmd_line_macro *clm = xmalloc (sizeof (struct cmd_line_macro));
|
||||||
|
clm->next = cmd_line_macros;
|
||||||
|
clm->is_undef = is_undef;
|
||||||
|
clm->macro = macro;
|
||||||
|
cmd_line_macros = clm;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
add_dir (char *name, bool sysp)
|
||||||
|
{
|
||||||
|
cpp_dir *dir = xmalloc (sizeof (cpp_dir));
|
||||||
|
dir->next = cmd_line_searchpath;
|
||||||
|
dir->name = name;
|
||||||
|
dir->sysp = sysp;
|
||||||
|
dir->construct = 0;
|
||||||
|
dir->user_supplied_p = 1;
|
||||||
|
cmd_line_searchpath = dir;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Command line processing. */
|
||||||
|
|
||||||
|
static void ATTRIBUTE_NORETURN
|
||||||
|
usage (int errcode)
|
||||||
|
{
|
||||||
|
fprintf (stderr,
|
||||||
|
"usage: %s [-vh] [-V vpath] [-Dname[=def]...] [-Uname] [-Idir...] [-o file] sources...\n",
|
||||||
|
progname);
|
||||||
|
exit (errcode);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
parse_options (int argc, char **argv)
|
||||||
|
{
|
||||||
|
static const struct option longopts[] = {
|
||||||
|
{ "--help", no_argument, 0, 'h' },
|
||||||
|
{ 0, 0, 0, 0 }
|
||||||
|
};
|
||||||
|
|
||||||
|
for (;;)
|
||||||
|
switch (getopt_long (argc, argv, "hD:U:I:J:o:V:", longopts, 0))
|
||||||
|
{
|
||||||
|
case 'h': usage (0);
|
||||||
|
case 'D': add_clm (optarg, false); break;
|
||||||
|
case 'U': add_clm (optarg, true); break;
|
||||||
|
case 'I': add_dir (optarg, false); break;
|
||||||
|
case 'J': add_dir (optarg, true); break;
|
||||||
|
case 'o':
|
||||||
|
if (output_file)
|
||||||
|
{
|
||||||
|
fprintf (stderr, "%s: too many output files\n", progname);
|
||||||
|
usage (2);
|
||||||
|
}
|
||||||
|
output_file = optarg;
|
||||||
|
break;
|
||||||
|
case 'V':
|
||||||
|
if (vpath)
|
||||||
|
{
|
||||||
|
fprintf (stderr, "%s: too many vpaths\n", progname);
|
||||||
|
usage (2);
|
||||||
|
}
|
||||||
|
vpath = optarg;
|
||||||
|
break;
|
||||||
|
case '?':
|
||||||
|
usage (2); /* getopt has issued the error message. */
|
||||||
|
|
||||||
|
case -1: /* end of options */
|
||||||
|
if (optind == argc)
|
||||||
|
{
|
||||||
|
fprintf (stderr, "%s: no input files\n", progname);
|
||||||
|
usage (2);
|
||||||
|
}
|
||||||
|
return optind;
|
||||||
|
|
||||||
|
default:
|
||||||
|
abort ();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Set up cpplib from command line options. */
|
||||||
|
static cpp_reader *
|
||||||
|
reader_init (struct line_maps *line_table)
|
||||||
|
{
|
||||||
|
cpp_reader *reader;
|
||||||
|
cpp_options *options;
|
||||||
|
|
||||||
|
linemap_init (line_table);
|
||||||
|
reader = cpp_create_reader (CLK_GNUC89, 0, line_table);
|
||||||
|
|
||||||
|
/* Ignore warnings and errors (we don't have access to system
|
||||||
|
headers). Request dependency output. */
|
||||||
|
options = cpp_get_options (reader);
|
||||||
|
options->inhibit_warnings = 1;
|
||||||
|
options->inhibit_errors = 1;
|
||||||
|
options->deps.style = DEPS_USER;
|
||||||
|
|
||||||
|
/* Further initialization. */
|
||||||
|
cpp_post_options (reader);
|
||||||
|
cpp_init_iconv (reader);
|
||||||
|
cpp_set_include_chains (reader, cmd_line_searchpath, cmd_line_searchpath,
|
||||||
|
false);
|
||||||
|
if (vpath)
|
||||||
|
{
|
||||||
|
struct deps *deps = cpp_get_deps (reader);
|
||||||
|
deps_add_vpath (deps, vpath);
|
||||||
|
}
|
||||||
|
|
||||||
|
return reader;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Process one input source file. */
|
||||||
|
static void
|
||||||
|
process_file (const char *file)
|
||||||
|
{
|
||||||
|
struct line_maps line_table;
|
||||||
|
cpp_reader *reader = reader_init (&line_table);
|
||||||
|
|
||||||
|
if (!cpp_read_main_file (reader, file))
|
||||||
|
had_errors = true;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
struct cmd_line_macro *clm;
|
||||||
|
|
||||||
|
cpp_init_builtins (reader, true);
|
||||||
|
for (clm = cmd_line_macros; clm; clm = clm->next)
|
||||||
|
(clm->is_undef ? cpp_undef : cpp_define) (reader, clm->macro);
|
||||||
|
|
||||||
|
cpp_scan_nooutput (reader);
|
||||||
|
if (cpp_finish (reader, stdout))
|
||||||
|
had_errors = true;
|
||||||
|
}
|
||||||
|
cpp_destroy (reader);
|
||||||
|
linemap_free (&line_table);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Master control. */
|
||||||
|
|
||||||
|
int
|
||||||
|
main(int argc, char **argv)
|
||||||
|
{
|
||||||
|
int first_input, i;
|
||||||
|
|
||||||
|
progname = argv[0];
|
||||||
|
xmalloc_set_program_name (progname);
|
||||||
|
|
||||||
|
first_input = parse_options (argc, argv);
|
||||||
|
if (output_file)
|
||||||
|
if (!freopen (output_file, "w", stdout))
|
||||||
|
{
|
||||||
|
perror (output_file);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = first_input; i < argc; i++)
|
||||||
|
process_file (argv[i]);
|
||||||
|
|
||||||
|
return had_errors;
|
||||||
|
}
|
|
@ -35,6 +35,11 @@ struct deps
|
||||||
const char **depv;
|
const char **depv;
|
||||||
unsigned int ndeps;
|
unsigned int ndeps;
|
||||||
unsigned int deps_size;
|
unsigned int deps_size;
|
||||||
|
|
||||||
|
const char **vpathv;
|
||||||
|
size_t *vpathlv;
|
||||||
|
unsigned int nvpaths;
|
||||||
|
unsigned int vpaths_size;
|
||||||
};
|
};
|
||||||
|
|
||||||
static const char *munge (const char *);
|
static const char *munge (const char *);
|
||||||
|
@ -105,24 +110,48 @@ munge (const char *filename)
|
||||||
return buffer;
|
return buffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* If T begins with any of the partial pathnames listed in d->vpathv,
|
||||||
|
then advance T to point beyond that pathname. */
|
||||||
|
static const char *
|
||||||
|
apply_vpath (struct deps *d, const char *t)
|
||||||
|
{
|
||||||
|
if (d->vpathv)
|
||||||
|
{
|
||||||
|
unsigned int i;
|
||||||
|
for (i = 0; i < d->nvpaths; i++)
|
||||||
|
{
|
||||||
|
if (!strncmp (d->vpathv[i], t, d->vpathlv[i]))
|
||||||
|
{
|
||||||
|
const char *p = t + d->vpathlv[i];
|
||||||
|
if (!IS_DIR_SEPARATOR (*p))
|
||||||
|
goto not_this_one;
|
||||||
|
|
||||||
|
/* Do not simplify $(vpath)/../whatever. ??? Might not
|
||||||
|
be necessary. */
|
||||||
|
if (p[1] == '.' && p[2] == '.' && IS_DIR_SEPARATOR (p[3]))
|
||||||
|
goto not_this_one;
|
||||||
|
|
||||||
|
/* found a match */
|
||||||
|
t = t + d->vpathlv[i] + 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
not_this_one:;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Remove leading ./ in any case. */
|
||||||
|
while (t[0] == '.' && IS_DIR_SEPARATOR (t[1]))
|
||||||
|
t += 2;
|
||||||
|
|
||||||
|
return t;
|
||||||
|
}
|
||||||
|
|
||||||
/* Public routines. */
|
/* Public routines. */
|
||||||
|
|
||||||
struct deps *
|
struct deps *
|
||||||
deps_init (void)
|
deps_init (void)
|
||||||
{
|
{
|
||||||
struct deps *d = xmalloc (sizeof (struct deps));
|
return xcalloc (sizeof (struct deps), 1);
|
||||||
|
|
||||||
/* Allocate space for the vectors only if we need it. */
|
|
||||||
|
|
||||||
d->targetv = 0;
|
|
||||||
d->depv = 0;
|
|
||||||
|
|
||||||
d->ntargets = 0;
|
|
||||||
d->targets_size = 0;
|
|
||||||
d->ndeps = 0;
|
|
||||||
d->deps_size = 0;
|
|
||||||
|
|
||||||
return d;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -144,6 +173,14 @@ deps_free (struct deps *d)
|
||||||
free (d->depv);
|
free (d->depv);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (d->vpathv)
|
||||||
|
{
|
||||||
|
for (i = 0; i < d->nvpaths; i++)
|
||||||
|
free ((void *) d->vpathv[i]);
|
||||||
|
free (d->vpathv);
|
||||||
|
free (d->vpathlv);
|
||||||
|
}
|
||||||
|
|
||||||
free (d);
|
free (d);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -159,6 +196,7 @@ deps_add_target (struct deps *d, const char *t, int quote)
|
||||||
d->targets_size * sizeof (const char *));
|
d->targets_size * sizeof (const char *));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
t = apply_vpath (d, t);
|
||||||
if (quote)
|
if (quote)
|
||||||
t = munge (t); /* Also makes permanent copy. */
|
t = munge (t); /* Also makes permanent copy. */
|
||||||
else
|
else
|
||||||
|
@ -202,7 +240,7 @@ deps_add_default_target (struct deps *d, const char *tgt)
|
||||||
void
|
void
|
||||||
deps_add_dep (struct deps *d, const char *t)
|
deps_add_dep (struct deps *d, const char *t)
|
||||||
{
|
{
|
||||||
t = munge (t); /* Also makes permanent copy. */
|
t = munge (apply_vpath (d, t)); /* Also makes permanent copy. */
|
||||||
|
|
||||||
if (d->ndeps == d->deps_size)
|
if (d->ndeps == d->deps_size)
|
||||||
{
|
{
|
||||||
|
@ -212,6 +250,36 @@ deps_add_dep (struct deps *d, const char *t)
|
||||||
d->depv[d->ndeps++] = t;
|
d->depv[d->ndeps++] = t;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
deps_add_vpath (struct deps *d, const char *vpath)
|
||||||
|
{
|
||||||
|
const char *elem, *p;
|
||||||
|
char *copy;
|
||||||
|
size_t len;
|
||||||
|
|
||||||
|
for (elem = vpath; *elem; elem = p)
|
||||||
|
{
|
||||||
|
for (p = elem; *p && *p != ':'; p++);
|
||||||
|
len = p - elem;
|
||||||
|
copy = xmalloc (len + 1);
|
||||||
|
memcpy (copy, elem, len);
|
||||||
|
copy[len] = '\0';
|
||||||
|
if (*p == ':')
|
||||||
|
p++;
|
||||||
|
|
||||||
|
if (d->nvpaths == d->vpaths_size)
|
||||||
|
{
|
||||||
|
d->vpaths_size = d->vpaths_size * 2 + 8;
|
||||||
|
d->vpathv = xrealloc (d->vpathv,
|
||||||
|
d->vpaths_size * sizeof (const char *));
|
||||||
|
d->vpathlv = xrealloc (d->vpathlv, d->vpaths_size * sizeof (size_t));
|
||||||
|
}
|
||||||
|
d->vpathv[d->nvpaths] = copy;
|
||||||
|
d->vpathlv[d->nvpaths] = len;
|
||||||
|
d->nvpaths++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
deps_write (const struct deps *d, FILE *fp, unsigned int colmax)
|
deps_write (const struct deps *d, FILE *fp, unsigned int colmax)
|
||||||
{
|
{
|
||||||
|
|
|
@ -41,13 +41,11 @@ calc_hash (const unsigned char *str, size_t len)
|
||||||
{
|
{
|
||||||
size_t n = len;
|
size_t n = len;
|
||||||
unsigned int r = 0;
|
unsigned int r = 0;
|
||||||
#define HASHSTEP(r, c) ((r) * 67 + ((c) - 113));
|
|
||||||
|
|
||||||
while (n--)
|
while (n--)
|
||||||
r = HASHSTEP (r, *str++);
|
r = HT_HASHSTEP (r, *str++);
|
||||||
|
|
||||||
return r + len;
|
return HT_HASHFINISH (r, len);
|
||||||
#undef HASHSTEP
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Initialize an identifier hashtable. */
|
/* Initialize an identifier hashtable. */
|
||||||
|
@ -96,7 +94,15 @@ hashnode
|
||||||
ht_lookup (hash_table *table, const unsigned char *str, size_t len,
|
ht_lookup (hash_table *table, const unsigned char *str, size_t len,
|
||||||
enum ht_lookup_option insert)
|
enum ht_lookup_option insert)
|
||||||
{
|
{
|
||||||
unsigned int hash = calc_hash (str, len);
|
return ht_lookup_with_hash (table, str, len, calc_hash (str, len),
|
||||||
|
insert);
|
||||||
|
}
|
||||||
|
|
||||||
|
hashnode
|
||||||
|
ht_lookup_with_hash (hash_table *table, const unsigned char *str,
|
||||||
|
size_t len, unsigned int hash,
|
||||||
|
enum ht_lookup_option insert)
|
||||||
|
{
|
||||||
unsigned int hash2;
|
unsigned int hash2;
|
||||||
unsigned int index;
|
unsigned int index;
|
||||||
size_t sizemask;
|
size_t sizemask;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue