1994-04-22 09:25:56 +02:00
|
|
|
|
# Top level makefile fragment for GNU C++.
|
2000-02-27 01:52:00 +01:00
|
|
|
|
# Copyright (C) 1994, 1995, 1997, 1998, 1999, 2000
|
|
|
|
|
# Free Software Foundation, Inc.
|
1994-04-22 09:25:56 +02:00
|
|
|
|
|
|
|
|
|
#This file is part of GNU CC.
|
|
|
|
|
|
|
|
|
|
#GNU CC 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.
|
|
|
|
|
|
|
|
|
|
#GNU CC 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 GNU CC; see the file COPYING. If not, write to
|
1995-06-15 23:06:59 +02:00
|
|
|
|
#the Free Software Foundation, 59 Temple Place - Suite 330,
|
|
|
|
|
#Boston, MA 02111-1307, USA.
|
1994-04-22 09:25:56 +02:00
|
|
|
|
|
|
|
|
|
# This file provides the language dependent support in the main Makefile.
|
|
|
|
|
# Each language makefile fragment must provide the following targets:
|
|
|
|
|
#
|
|
|
|
|
# foo.all.build, foo.all.cross, foo.start.encap, foo.rest.encap,
|
|
|
|
|
# foo.info, foo.dvi,
|
|
|
|
|
# foo.install-normal, foo.install-common, foo.install-info, foo.install-man,
|
|
|
|
|
# foo.uninstall, foo.distdir,
|
1995-04-26 00:07:11 +02:00
|
|
|
|
# foo.mostlyclean, foo.clean, foo.distclean, foo.extraclean,
|
|
|
|
|
# foo.maintainer-clean, foo.stage1, foo.stage2, foo.stage3, foo.stage4
|
1994-04-22 09:25:56 +02:00
|
|
|
|
#
|
|
|
|
|
# where `foo' is the name of the language.
|
|
|
|
|
#
|
|
|
|
|
# It should also provide rules for:
|
|
|
|
|
#
|
|
|
|
|
# - making any compiler driver (eg: g++)
|
|
|
|
|
# - the compiler proper (eg: cc1plus)
|
|
|
|
|
# - define the names for selecting the language in LANGUAGES.
|
1997-06-18 04:25:37 +02:00
|
|
|
|
#
|
1994-04-22 09:25:56 +02:00
|
|
|
|
# Extra flags to pass to recursive makes.
|
|
|
|
|
CXX_FLAGS_TO_PASS = \
|
|
|
|
|
"CXX_FOR_BUILD=$(CXX_FOR_BUILD)" \
|
|
|
|
|
"CXXFLAGS=$(CXXFLAGS)" \
|
|
|
|
|
"CXX_FOR_TARGET=$(CXX_FOR_TARGET)"
|
|
|
|
|
|
1994-06-03 23:42:31 +02:00
|
|
|
|
# Actual names to use when installing a native compiler.
|
1994-11-18 02:10:14 +01:00
|
|
|
|
CXX_INSTALL_NAME = `t='$(program_transform_name)'; echo c++ | sed $$t`
|
|
|
|
|
GXX_INSTALL_NAME = `t='$(program_transform_name)'; echo g++ | sed $$t`
|
1998-02-14 16:56:38 +01:00
|
|
|
|
DEMANGLER_INSTALL_NAME = `t='$(program_transform_name)'; echo c++filt | sed $$t`
|
1994-06-03 23:42:31 +02:00
|
|
|
|
|
|
|
|
|
# Actual names to use when installing a cross-compiler.
|
1994-11-18 02:10:14 +01:00
|
|
|
|
CXX_CROSS_NAME = `t='$(program_transform_cross_name)'; echo c++ | sed $$t`
|
|
|
|
|
GXX_CROSS_NAME = `t='$(program_transform_cross_name)'; echo g++ | sed $$t`
|
1998-02-14 16:56:38 +01:00
|
|
|
|
DEMANGLER_CROSS_NAME = `t='$(program_transform_cross_name)'; echo c++filt | sed $$t`
|
1994-06-03 23:42:31 +02:00
|
|
|
|
|
1995-05-10 04:58:06 +02:00
|
|
|
|
# The name to use for the demangler program.
|
1998-02-13 01:30:37 +01:00
|
|
|
|
DEMANGLER_PROG = c++filt$(exeext)
|
1996-09-30 23:34:04 +02:00
|
|
|
|
|
|
|
|
|
# Extra code to include in libgcc2.
|
1997-11-21 00:17:48 +01:00
|
|
|
|
CXX_LIB2FUNCS = tinfo.o tinfo2.o new.o opnew.o opnewnt.o opvnew.o opvnewnt.o \
|
2000-08-25 10:01:13 +02:00
|
|
|
|
opdel.o opdelnt.o opvdel.o opvdelnt.o exception.o vec.o
|
1997-02-04 03:31:49 +01:00
|
|
|
|
CXX_LIB2SRCS = $(srcdir)/cp/new.cc $(srcdir)/cp/new1.cc $(srcdir)/cp/new2.cc \
|
|
|
|
|
$(srcdir)/cp/exception.cc $(srcdir)/cp/tinfo.cc \
|
2000-08-25 10:01:13 +02:00
|
|
|
|
$(srcdir)/cp/tinfo2.cc $(srcdir)/cp/tinfo.h
|
1997-06-18 04:25:37 +02:00
|
|
|
|
#
|
1994-04-22 09:25:56 +02:00
|
|
|
|
# Define the names for selecting c++ in LANGUAGES.
|
|
|
|
|
# Note that it would be nice to move the dependency on g++
|
|
|
|
|
# into the C++ rule, but that needs a little bit of work
|
|
|
|
|
# to do the right thing within all.cross.
|
1998-03-22 00:49:35 +01:00
|
|
|
|
C++ c++: cc1plus$(exeext)
|
1994-04-22 09:25:56 +02:00
|
|
|
|
|
1994-12-20 23:14:37 +01:00
|
|
|
|
# Tell GNU make to ignore these if they exist.
|
|
|
|
|
.PHONY: C++ c++
|
|
|
|
|
|
configure (gcc_version): When setting, narrow search to lines containing `version_string'.
* configure (gcc_version): When setting, narrow search to
lines containing `version_string'.
gcc:
* version.c: Include gansidecl.h and version.h.
* version.h: Wrap entire file in macro __GCC_VERSION_H__.
* configure.in (gcc_version): When setting, narrow search to
lines containing `version_string'.
* Makefile.in (mainversion): Likewise.
(GCC_H): New variable.
(gcc.h): Delete target.
(gcc.o, gccspec.o, cppspec.o): Depend on $(GCC_H), not gcc.h.
(version.o): Depend on version.h.
(dbxout.o): Don't depend on gcc.h.
gcc/cp:
* Make-lang.in (g++spec.o): Depend on $(GCC_H), not gcc.h.
gcc/f:
* Make-lang.in (g77spec.o): Depend on $(GCC_H), not gcc.h.
gcc/java:
* Make-lang.in (jvspec.o): Depend on $(GCC_H), not gcc.h.
libf2c:
* configure.in (gcc_version): When setting, narrow search to
lines containing `version_string'.
From-SVN: r32009
2000-02-16 17:22:47 +01:00
|
|
|
|
g++spec.o: $(srcdir)/cp/g++spec.c system.h $(GCC_H)
|
1996-12-27 20:34:34 +01:00
|
|
|
|
$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $(srcdir)/cp/g++spec.c
|
1996-12-18 03:46:25 +01:00
|
|
|
|
|
1999-03-18 23:00:18 +01:00
|
|
|
|
$(INTL_TARGETS): $(srcdir)/cp/parse.c
|
|
|
|
|
$(srcdir)/cp/parse.c: $(srcdir)/cp/parse.y
|
|
|
|
|
@cp_srcdir=`sed -n 's/^srcdir[ ]*=[ ]*//p' cp/Makefile` && \
|
|
|
|
|
echo "cd cp && $(MAKE) $$cp_srcdir/parse.c" && \
|
|
|
|
|
cd cp && \
|
2000-05-04 00:45:31 +02:00
|
|
|
|
$(MAKE) $(LANG_FLAGS_TO_PASS) $(CXX_FLAGS_TO_PASS) \
|
1999-03-18 23:00:18 +01:00
|
|
|
|
$$cp_srcdir/parse.c
|
|
|
|
|
|
1994-04-22 09:25:56 +02:00
|
|
|
|
# Create the compiler driver for g++.
|
1999-03-26 00:36:47 +01:00
|
|
|
|
GXX_OBJS = gcc.o g++spec.o intl.o prefix.o version.o
|
1999-01-27 02:43:17 +01:00
|
|
|
|
g++$(exeext): $(GXX_OBJS) $(EXTRA_GCC_OBJS) $(LIBDEPS)
|
|
|
|
|
$(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ \
|
|
|
|
|
$(GXX_OBJS) $(EXTRA_GCC_OBJS) $(LIBS)
|
1994-04-22 09:25:56 +02:00
|
|
|
|
|
|
|
|
|
# Create a version of the g++ driver which calls the cross-compiler.
|
1996-12-18 03:46:25 +01:00
|
|
|
|
g++-cross$(exeext): g++$(exeext)
|
|
|
|
|
-rm -f g++-cross$(exeext)
|
|
|
|
|
cp g++$(exeext) g++-cross$(exeext)
|
1994-04-22 09:25:56 +02:00
|
|
|
|
|
1998-12-08 10:50:33 +01:00
|
|
|
|
cxxmain.o: $(srcdir)/../libiberty/cplus-dem.c $(DEMANGLE_H)
|
1995-05-10 04:58:06 +02:00
|
|
|
|
rm -f cxxmain.c
|
1998-08-17 13:42:22 +02:00
|
|
|
|
$(LN_S) $(srcdir)/../libiberty/cplus-dem.c cxxmain.c
|
1995-05-10 04:58:06 +02:00
|
|
|
|
$(CC) -c -DMAIN $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
|
1995-05-24 20:40:42 +02:00
|
|
|
|
-DVERSION=\"$(version)\" cxxmain.c
|
1995-05-10 04:58:06 +02:00
|
|
|
|
|
1998-11-24 22:28:47 +01:00
|
|
|
|
# Apparently OpenVM needs the -o to be at the beginning of the link line.
|
1999-02-03 22:56:50 +01:00
|
|
|
|
$(DEMANGLER_PROG): cxxmain.o underscore.o $(LIBDEPS)
|
1998-11-24 22:28:47 +01:00
|
|
|
|
$(CC) -o $@ $(ALL_CFLAGS) $(LDFLAGS) \
|
1999-02-03 22:56:50 +01:00
|
|
|
|
cxxmain.o underscore.o $(LIBS)
|
1995-05-10 04:58:06 +02:00
|
|
|
|
|
2000-02-27 01:52:00 +01:00
|
|
|
|
CXX_SRCS = $(srcdir)/cp/call.c $(srcdir)/cp/class.c $(srcdir)/cp/cp-tree.def \
|
c-common.h (IF_COND): Moved here from cp/cp-tree.h.
* c-common.h (IF_COND): Moved here from cp/cp-tree.h.
(THEN_CLAUSE): Likewise.
(ELSE_CLAUSE): Likewise.
(WHILE_COND): Likewise.
(WHILE_BODY): Likewise.
(DO_COND): Likewise.
(DO_BODY): Likewise.
(RETURN_EXPR): Likewise.
(EXPR_STMT_EXPR): Likewise.
(FOR_INIT_STMT): Likewise.
(FOR_COND): Likewise.
(FOR_EXPR): Likewise.
(FOR_BODY): Likewise.
(SWITCH_COND): Likewise.
(SWITCH_BODY): Likewise.
(CASE_LOW): Likewise.
(CASE_HIGH): Likewise.
(GOTO_DESTINATION): Likewise.
(COMPOUND_BODY): Likewise.
(ASM_CV_QUAL): Likewise.
(ASM_STRING): Likewise.
(ASM_OUTPUTS): Likewise.
(ASM_INPUTS): Likewise.
(ASM_CLOBBERS): Likewise.
(DECL_STMT_DECL): Likewise.
(STMT_EXPR_STMT): Likewise.
(LABEL_STMT_LABEL): Likewise.
(SCOPE_BEGIN_P): Likewise.
(SCOPE_END_P): Likewise.
(SCOPE_STMT_BLOCK): Likewise.
(SCOPE_NULLIFIED_P): Likewise.
(SCOPE_NO_CLEANUPS_P): Likewise.
(SCOPE_PARTIAL_P): Likewise.
(ASM_VOLATILE_P): Likewise.
(STMT_LINENO): Likewise.
(STMT_LINENO_FOR_FN_P): Likewise.
* c-common.def: Added SRCLOC, SIZEOF_EXPR, ARROW_EXPR,
ALIGNOF_EXPR, EXPR_STMT, COMPOUND_STMT, DECL_STMT, IF_STMT,
FOR_STMT, WHILE_STMT, DO_STMT, RETURN_STMT, BREAK_STMT,
CONTINUE_STMT, SWITCH_STMT, GOTO_STMT, LABEL_STMT, ASM_STMT,
SCOPE_STMT, CASE_LABEL, STMT_EXPR.
* gencheck.c (tree_codes[]): Added '#include "c-common.def"'.
* cp/cp-tree.h (IF_COND): Move to c-common.h.
(THEN_CLAUSE): Likewise.
(ELSE_CLAUSE): Likewise.
(WHILE_COND): Likewise.
(WHILE_BODY): Likewise.
(DO_COND): Likewise.
(DO_BODY): Likewise.
(RETURN_EXPR): Likewise.
(EXPR_STMT_EXPR): Likewise.
(FOR_INIT_STMT): Likewise.
(FOR_COND): Likewise.
(FOR_EXPR): Likewise.
(FOR_BODY): Likewise.
(SWITCH_COND): Likewise.
(SWITCH_BODY): Likewise.
(CASE_LOW): Likewise.
(CASE_HIGH): Likewise.
(GOTO_DESTINATION): Likewise.
(COMPOUND_BODY): Likewise.
(ASM_CV_QUAL): Likewise.
(ASM_STRING): Likewise.
(ASM_OUTPUTS): Likewise.
(ASM_INPUTS): Likewise.
(ASM_CLOBBERS): Likewise.
(DECL_STMT_DECL): Likewise.
(STMT_EXPR_STMT): Likewise.
(LABEL_STMT_LABEL): Likewise.
(SCOPE_BEGIN_P): Likewise.
(SCOPE_END_P): Likewise.
(SCOPE_STMT_BLOCK): Likewise.
(SCOPE_NULLIFIED_P): Likewise.
(SCOPE_NO_CLEANUPS_P): Likewise.
(SCOPE_PARTIAL_P): Likewise.
(ASM_VOLATILE_P): Likewise.
(STMT_LINENO): Likewise.
(STMT_LINENO_FOR_FN_P): Likewise.
* cp/cp-tree.def: Removed SRCLOC, SIZEOF_EXPR, ARROW_EXPR,
ALIGNOF_EXPR, EXPR_STMT, COMPOUND_STMT, DECL_STMT, IF_STMT,
FOR_STMT, WHILE_STMT, DO_STMT, RETURN_STMT, BREAK_STMT,
CONTINUE_STMT, SWITCH_STMT, GOTO_STMT, LABEL_STMT, ASM_STMT,
SCOPE_STMT, CASE_LABEL, STMT_EXPR.
* cp/Makefile.in (CXX_TREE_H): Added $(srcdir)/../c-common.def.
* cp/Make-lang.in (CXX_SRCS): Added $(srcdir)/c-common.def.
(cc1plus$(exeext)): Added $(srcdir)/c-common.def.
* cp/lex.c (cplus_tree_code_type[]): Added '#include "c-common.def"'.
(cplus_tree_code_length[]): Added '#include "c-common.def"'.
(cplus_tree_code_name[]): Added '#include "c-common.def"'.
From-SVN: r34552
2000-06-14 19:26:18 +02:00
|
|
|
|
$(srcdir)/c-common.def \
|
2000-02-27 01:52:00 +01:00
|
|
|
|
$(srcdir)/cp/cp-tree.h $(srcdir)/cp/cvt.c $(srcdir)/cp/decl.c \
|
|
|
|
|
$(srcdir)/cp/decl.h $(srcdir)/cp/decl2.c $(srcdir)/cp/dump.c \
|
|
|
|
|
$(srcdir)/cp/errfn.c $(srcdir)/cp/error.c $(srcdir)/cp/except.c \
|
|
|
|
|
$(srcdir)/cp/expr.c $(srcdir)/cp/friend.c $(srcdir)/cp/init.c \
|
Integrated preprocessor.
top level:
* Makefile.in: Remove all references to c-parse.gperf,
c-gperf.h, and c-parse.h. Remove -d from yacc command line
generating c-parse.c. Update dependencies.
* c-parse.gperf, c-gperf.h: Delete.
* c-common.c: Don't define parse_options, cpp_token, yy_cur,
yy_lim, or yy_get_token. Don't define get_directive_line if
USE_CPPLIB.
* c-common.h: Add multiple include guard. Define RID values
for every keyword in C, C++, and Objective C. Put all the
modifiers first.
(struct c_fileinfo, get_fileinfo, dump_time_statistics): New.
* c-decl.c (c_decode_option): Handle -lang-objc here.
(print_lang_identifier): Handle C_IS_RESERVED_WORD case.
(grokdeclarator): Adjust for new RID scheme.
(extract_interface_info): New stub.
* c-lang.c: Don't declare yy_cur or parse_options.
(lang_init_options): Call cpp_init. Don't call
cpp_options_init.
(lang_init): Don't call check_newline if USE_CPPLIB.
* c-lex.c: Don't include c-parse.h. Do include timevar.h.
Elide lots of unnecessary code if USE_CPPLIB. Delete code
rendered unnecessary by new architecture. Move routines not
shared with C++ to c-parse.in. Maintain a local idea of the
line number. Handle C++ as well as C.
[USE_CPPLIB]: Declare and register callbacks for #ident and
for entering/leaving files.
(init_c_lex, c_lex): Are now the entry points to this file.
(check_newline): Break out directive handling to
process_directive.
(read_ucs, is_extended_char, utf8_extend_token): Moved here
from C++ front end.
(readescape, parse_float): Overhaul.
(lex_number, lex_string, lex_charconst): Break out of c_lex
(n'ee yylex).
(get_fileinfo, update_header_times, dump_one_header,
dump_time_statistics): New and/or moved here from C++.
Support per-file data needed by C++ and per-header timing
statistics (C++ only, at the moment).
* c-lex.h: Update prototypes. Add multiple include guard.
* c-tree.h (struct lang_identifier): Add rid_code field.
(C_IS_RESERVED_WORD, C_RID_CODE): New.
* c-parse.in: Include c-pragma.h. Remove unnecesary calls to
reinit_parse_for_function and/or position_after_white_space.
(save_filename, save_lineno): Look ahead before saving.
(label -> identifier ':'): Save file and line before shifting ':'.
(reservedwords): No need to call get_identifier.
(init_parse, finish_parse, yyerror, yylex, yyprint,
make_pointer_declarator): Are now here for C/ObjC.
(rid_to_yy): Conversion table from RID constants to Yacc codes.
* c-pragma.c: Rewrite parsing logic to fit with cpplib's
#pragma registry. Provide dummy implementation of that
interface if !USE_CPPLIB.
* c-pragma.h: Update to match.
* flags.h: Add multiple include guard.
(flag_detailed_statistics): Moved here from C++.
* toplev.c: Define flag_detailed_statistics.
* gcc.c (C specs): Use %(trad_capable_cpp) for -E|-M|-MM case
#if USE_CPPLIB.
* timevar.def (TV_CPP, TV_LEX): New.
* timevar.h: Add multiple include guard.
* objc/lang-specs.h: Use %(trad_capable_cpp) for -E|-M|-MM case
#if USE_CPPLIB.
* objc/objc-act.c: Don't mention yy_cur or parse_options.
Initialize cpplib properly. Force lineno to 0 after first
call to check_newline. Don't handle -lang-objc here.
Move forget_protocol_qualifiers and remember_protocol_qualifiers here.
cp:
* Make-lang.in, Makefile.in: Remove all references to input.c,
gxx.gperf, and hash.h. Add ../c-lex.o to C_OBJS.
* gxx.gperf, hash.h, input.c: Delete.
* lang-specs.h: Pass -lang-c++ to cc1plus so cpplib is
initialized properly.
* class.c (fixup_pending_inline): Take a tree, not a
struct pending_inline *. All callers changed.
(init_class_processing): Set RID_PUBLIC, RID_PRIVATE,
RID_PROTECTED entries in ridpointers[] array here.
* decl.c (duplicate_decls): Do not refer to struct
pending_inline.
(record_builtin_type, init_decl_processing): Use RID_MAX not
CP_RID_MAX.
(grokdeclarator): Use C_IS_RESERVED_WORD.
* decl2.c (lang_decode_option): Ignore -lang-c++ for sake of
cpplib.
(grok_x_components): Do not inspect pending_inlines chain.
* cp-tree.h (struct lang_identifier): Add rid_code entry.
(C_IS_RESERVED_WORD, C_RID_CODE, C_RID_YYCODE): New.
(flag_no_gnu_keywords, flag_operator_names, rid_to_yy): Declare.
(DEFARG_LENGTH, struct pending_inline, TIME_IDENTIFIER_TIME,
TIME_IDENTIFIER_FILEINFO): Kill.
Update prototypes.
* lex.h: Expunge cp_rid. Rewrite RIDBIT macros to use just a
single 32-bit word.
* parse.y: Call do_pending_inlines unconditionally.
reinit_parse_for_method is now snarf_method. fn.defpen is no
longer necessary. Remove unnecessary <itype> annotation on
SCOPE. Do not refer to end_of_file or struct pending_inline.
* semantics.c (begin_inline_definitions): Call
do_pending_inlines unconditionally.
* lex.c: Remove all code now shared with C front end.
Initialize cpplib properly if USE_CPPLIB. Put reserved words
into the get_identifier table. Rewrite pragma handling to
work with the registry. Move code to save tokens for later
processing to spew.c.
* spew.c: Rewrite everything in terms of token streams instead
of text. Move routines here from lex.c / input.c as
appropriate. GC-mark trees hanging off the pending inlines
chain.
testsuite:
* g++.old-deja/g++.benjamin/13478.C: Put meaningful tags on
ERROR markers.
* g++.old-deja/g++.brendan/crash8.C: Move ERROR marker up one line.
* gcc.dg/c99-array-nonobj-1.c: Don't expect func[] cases to fail.
* gcc.dg/wtr-label-1.c: Don't use unconstrained .* in error regexps.
* gcc.dg/wtr-suffix-1.c: Correct error regexps.
* gcc.dg/cpp/unc1.c, gcc.dg/cpp/unc2.c, gcc.dg/cpp/unc3.c:
Preprocess only.
* gcc.dg/cpp/unc4.c: Adjust line number in dg-error line.
* gcc.dg/noncompile/const-ll-1.c: Generalize error regexp.
From-SVN: r36216
2000-09-07 02:37:14 +02:00
|
|
|
|
$(srcdir)/cp/lex.c $(srcdir)/cp/lex.h \
|
2000-06-04 23:12:27 +02:00
|
|
|
|
$(srcdir)/cp/mangle.c $(srcdir)/cp/method.c $(srcdir)/cp/optimize.c \
|
|
|
|
|
$(srcdir)/cp/parse.y $(srcdir)/cp/pt.c $(srcdir)/cp/ptree.c \
|
|
|
|
|
$(srcdir)/cp/repo.c $(srcdir)/cp/rtti.c $(srcdir)/cp/search.c \
|
|
|
|
|
$(srcdir)/cp/semantics.c $(srcdir)/cp/spew.c $(srcdir)/cp/tree.c \
|
|
|
|
|
$(srcdir)/cp/typeck.c $(srcdir)/cp/typeck2.c $(srcdir)/cp/xref.c
|
1994-04-22 09:25:56 +02:00
|
|
|
|
|
[multiple changes]
2000-08-04 Andreas Schwab <schwab@suse.de>
* cppmain.c (cb_def_pragma): Skip the first two tokens from the
token list, which are always `#' and `pragma'.
2000-08-04 Zack Weinberg <zack@wolery.cumb.org>
* tree.c (tree_expr_nonnegative_p): Move to...
* fold-const.c: ... here. Also handle BIND_EXPR and RTL_EXPR.
(rtl_expr_nonnegative_p): New.
* tree.h: Add prototype for rtl_expr_nonnegative_p.
* real.h (CONST_DOUBLE_LOW, CONST_DOUBLE_HIGH, CONST_DOUBLE_MEM,
CONST_DOUBLE_CHAIN: Move to...
* rtl.h: ...here. Use XCINT/XCEXP.
* Makefile.in: Remove toplev.o from OBJS. Add rule to make
libbackend.a; add libbackend.a to STAGESTUFF. Add BACKEND
variable. Use BACKEND when linking cc1, not OBJS. Add BACKEND
to VOL_FILES.
* objc/Make-lang.in (cc1obj): Link with $(BACKEND).
ch:
* Make-lang.in (cc1chill): Depend on $(BACKEND), not stamp-objlist.
* Makefile.in (cc1chill): Link with $(BACKEND). Define BACKEND,
eliminate C_OBJS (was commented out), OBJS, OBJDEPS.
cp:
* Make-lang.in (cc1plus): Depend on $(BACKEND), not stamp-objlist.
* Makefile.in: Add C_OBJS, BACKEND; delete OBJS, OBJDEPS.
(cc1plus): Link with $(BACKEND) and $(C_OBJS).
f:
* Make-lang.in (f771): Depend on $(BACKEND), not stamp-objlist.
* Makefile.in: Add BACKEND; delete OBJS, OBJDEPS.
(f771): Link with $(BACKEND).
java:
* Make-lang.in (jc1, jv-scan): Depend on $(BACKEND), not stamp-objlist.
* Makefile.in: Add BACKEND; delete OBJS, OBJDEPS.
(jc1): Link with $(BACKEND).
(jv-scan): Depend on version.o, not all of $(OBJS) or $(BACKEND).
From-SVN: r35501
2000-08-05 02:50:02 +02:00
|
|
|
|
cc1plus$(exeext): $(P) $(CXX_SRCS) $(LIBDEPS) $(BACKEND) c-common.o \
|
Integrated preprocessor.
top level:
* Makefile.in: Remove all references to c-parse.gperf,
c-gperf.h, and c-parse.h. Remove -d from yacc command line
generating c-parse.c. Update dependencies.
* c-parse.gperf, c-gperf.h: Delete.
* c-common.c: Don't define parse_options, cpp_token, yy_cur,
yy_lim, or yy_get_token. Don't define get_directive_line if
USE_CPPLIB.
* c-common.h: Add multiple include guard. Define RID values
for every keyword in C, C++, and Objective C. Put all the
modifiers first.
(struct c_fileinfo, get_fileinfo, dump_time_statistics): New.
* c-decl.c (c_decode_option): Handle -lang-objc here.
(print_lang_identifier): Handle C_IS_RESERVED_WORD case.
(grokdeclarator): Adjust for new RID scheme.
(extract_interface_info): New stub.
* c-lang.c: Don't declare yy_cur or parse_options.
(lang_init_options): Call cpp_init. Don't call
cpp_options_init.
(lang_init): Don't call check_newline if USE_CPPLIB.
* c-lex.c: Don't include c-parse.h. Do include timevar.h.
Elide lots of unnecessary code if USE_CPPLIB. Delete code
rendered unnecessary by new architecture. Move routines not
shared with C++ to c-parse.in. Maintain a local idea of the
line number. Handle C++ as well as C.
[USE_CPPLIB]: Declare and register callbacks for #ident and
for entering/leaving files.
(init_c_lex, c_lex): Are now the entry points to this file.
(check_newline): Break out directive handling to
process_directive.
(read_ucs, is_extended_char, utf8_extend_token): Moved here
from C++ front end.
(readescape, parse_float): Overhaul.
(lex_number, lex_string, lex_charconst): Break out of c_lex
(n'ee yylex).
(get_fileinfo, update_header_times, dump_one_header,
dump_time_statistics): New and/or moved here from C++.
Support per-file data needed by C++ and per-header timing
statistics (C++ only, at the moment).
* c-lex.h: Update prototypes. Add multiple include guard.
* c-tree.h (struct lang_identifier): Add rid_code field.
(C_IS_RESERVED_WORD, C_RID_CODE): New.
* c-parse.in: Include c-pragma.h. Remove unnecesary calls to
reinit_parse_for_function and/or position_after_white_space.
(save_filename, save_lineno): Look ahead before saving.
(label -> identifier ':'): Save file and line before shifting ':'.
(reservedwords): No need to call get_identifier.
(init_parse, finish_parse, yyerror, yylex, yyprint,
make_pointer_declarator): Are now here for C/ObjC.
(rid_to_yy): Conversion table from RID constants to Yacc codes.
* c-pragma.c: Rewrite parsing logic to fit with cpplib's
#pragma registry. Provide dummy implementation of that
interface if !USE_CPPLIB.
* c-pragma.h: Update to match.
* flags.h: Add multiple include guard.
(flag_detailed_statistics): Moved here from C++.
* toplev.c: Define flag_detailed_statistics.
* gcc.c (C specs): Use %(trad_capable_cpp) for -E|-M|-MM case
#if USE_CPPLIB.
* timevar.def (TV_CPP, TV_LEX): New.
* timevar.h: Add multiple include guard.
* objc/lang-specs.h: Use %(trad_capable_cpp) for -E|-M|-MM case
#if USE_CPPLIB.
* objc/objc-act.c: Don't mention yy_cur or parse_options.
Initialize cpplib properly. Force lineno to 0 after first
call to check_newline. Don't handle -lang-objc here.
Move forget_protocol_qualifiers and remember_protocol_qualifiers here.
cp:
* Make-lang.in, Makefile.in: Remove all references to input.c,
gxx.gperf, and hash.h. Add ../c-lex.o to C_OBJS.
* gxx.gperf, hash.h, input.c: Delete.
* lang-specs.h: Pass -lang-c++ to cc1plus so cpplib is
initialized properly.
* class.c (fixup_pending_inline): Take a tree, not a
struct pending_inline *. All callers changed.
(init_class_processing): Set RID_PUBLIC, RID_PRIVATE,
RID_PROTECTED entries in ridpointers[] array here.
* decl.c (duplicate_decls): Do not refer to struct
pending_inline.
(record_builtin_type, init_decl_processing): Use RID_MAX not
CP_RID_MAX.
(grokdeclarator): Use C_IS_RESERVED_WORD.
* decl2.c (lang_decode_option): Ignore -lang-c++ for sake of
cpplib.
(grok_x_components): Do not inspect pending_inlines chain.
* cp-tree.h (struct lang_identifier): Add rid_code entry.
(C_IS_RESERVED_WORD, C_RID_CODE, C_RID_YYCODE): New.
(flag_no_gnu_keywords, flag_operator_names, rid_to_yy): Declare.
(DEFARG_LENGTH, struct pending_inline, TIME_IDENTIFIER_TIME,
TIME_IDENTIFIER_FILEINFO): Kill.
Update prototypes.
* lex.h: Expunge cp_rid. Rewrite RIDBIT macros to use just a
single 32-bit word.
* parse.y: Call do_pending_inlines unconditionally.
reinit_parse_for_method is now snarf_method. fn.defpen is no
longer necessary. Remove unnecessary <itype> annotation on
SCOPE. Do not refer to end_of_file or struct pending_inline.
* semantics.c (begin_inline_definitions): Call
do_pending_inlines unconditionally.
* lex.c: Remove all code now shared with C front end.
Initialize cpplib properly if USE_CPPLIB. Put reserved words
into the get_identifier table. Rewrite pragma handling to
work with the registry. Move code to save tokens for later
processing to spew.c.
* spew.c: Rewrite everything in terms of token streams instead
of text. Move routines here from lex.c / input.c as
appropriate. GC-mark trees hanging off the pending inlines
chain.
testsuite:
* g++.old-deja/g++.benjamin/13478.C: Put meaningful tags on
ERROR markers.
* g++.old-deja/g++.brendan/crash8.C: Move ERROR marker up one line.
* gcc.dg/c99-array-nonobj-1.c: Don't expect func[] cases to fail.
* gcc.dg/wtr-label-1.c: Don't use unconstrained .* in error regexps.
* gcc.dg/wtr-suffix-1.c: Correct error regexps.
* gcc.dg/cpp/unc1.c, gcc.dg/cpp/unc2.c, gcc.dg/cpp/unc3.c:
Preprocess only.
* gcc.dg/cpp/unc4.c: Adjust line number in dg-error line.
* gcc.dg/noncompile/const-ll-1.c: Generalize error regexp.
From-SVN: r36216
2000-09-07 02:37:14 +02:00
|
|
|
|
c-pragma.o c-semantics.o c-lex.o $(srcdir)/cp/cp-tree.h $(srcdir)/cp/cp-tree.def \
|
|
|
|
|
$(srcdir)/c-common.def $(srcdir)/cp/cfns.gperf hash.o \
|
2000-05-28 04:58:19 +02:00
|
|
|
|
$(srcdir)/cp/operators.def
|
2000-05-04 00:45:31 +02:00
|
|
|
|
cd cp; $(MAKE) $(LANG_FLAGS_TO_PASS) $(CXX_FLAGS_TO_PASS) ../cc1plus$(exeext)
|
1997-06-18 04:25:37 +02:00
|
|
|
|
#
|
1994-04-22 09:25:56 +02:00
|
|
|
|
# Build hooks:
|
|
|
|
|
|
1998-04-17 10:12:14 +02:00
|
|
|
|
c++.all.build: g++$(exeext)
|
1997-02-04 03:31:49 +01:00
|
|
|
|
c++.all.cross: g++-cross$(exeext) $(DEMANGLER_PROG)
|
|
|
|
|
c++.start.encap: g++$(exeext)
|
1995-05-10 04:58:06 +02:00
|
|
|
|
c++.rest.encap: $(DEMANGLER_PROG)
|
1994-04-22 09:25:56 +02:00
|
|
|
|
|
|
|
|
|
c++.info:
|
|
|
|
|
c++.dvi:
|
1997-06-18 04:25:37 +02:00
|
|
|
|
#
|
1994-04-22 09:25:56 +02:00
|
|
|
|
# Install hooks:
|
|
|
|
|
# cc1plus is installed elsewhere as part of $(COMPILERS).
|
|
|
|
|
|
|
|
|
|
# Nothing to do here.
|
|
|
|
|
c++.install-normal:
|
|
|
|
|
|
|
|
|
|
# Install the driver program as $(target)-g++
|
|
|
|
|
# and also as either g++ (if native) or $(tooldir)/bin/g++.
|
|
|
|
|
c++.install-common:
|
1995-02-22 00:38:37 +01:00
|
|
|
|
-if [ -f cc1plus$(exeext) ] ; then \
|
|
|
|
|
if [ -f g++-cross$(exeext) ] ; then \
|
|
|
|
|
rm -f $(bindir)/$(GXX_CROSS_NAME)$(exeext); \
|
|
|
|
|
$(INSTALL_PROGRAM) g++-cross$(exeext) $(bindir)/$(GXX_CROSS_NAME)$(exeext); \
|
|
|
|
|
chmod a+x $(bindir)/$(GXX_CROSS_NAME)$(exeext); \
|
|
|
|
|
rm -f $(bindir)/$(CXX_CROSS_NAME)$(exeext); \
|
1997-09-11 22:39:08 +02:00
|
|
|
|
$(LN) $(bindir)/$(GXX_CROSS_NAME)$(exeext) $(bindir)/$(CXX_CROSS_NAME)$(exeext); \
|
2000-06-13 23:49:33 +02:00
|
|
|
|
if [ -d $(gcc_tooldir)/bin/. ] ; then \
|
|
|
|
|
rm -f $(gcc_tooldir)/bin/g++$(exeext); \
|
|
|
|
|
$(INSTALL_PROGRAM) g++-cross$(exeext) $(gcc_tooldir)/bin/g++$(exeext); \
|
|
|
|
|
rm -f $(gcc_tooldir)/bin/c++$(exeext); \
|
|
|
|
|
$(LN) $(gcc_tooldir)/bin/g++$(exeext) $(gcc_tooldir)/bin/c++$(exeext); \
|
|
|
|
|
else true; fi; \
|
1994-04-22 09:25:56 +02:00
|
|
|
|
else \
|
1995-02-22 00:38:37 +01:00
|
|
|
|
rm -f $(bindir)/$(GXX_INSTALL_NAME)$(exeext); \
|
|
|
|
|
$(INSTALL_PROGRAM) g++$(exeext) $(bindir)/$(GXX_INSTALL_NAME)$(exeext); \
|
|
|
|
|
chmod a+x $(bindir)/$(GXX_INSTALL_NAME)$(exeext); \
|
|
|
|
|
rm -f $(bindir)/$(CXX_INSTALL_NAME)$(exeext); \
|
1997-09-11 22:39:08 +02:00
|
|
|
|
$(LN) $(bindir)/$(GXX_INSTALL_NAME)$(exeext) $(bindir)/$(CXX_INSTALL_NAME)$(exeext); \
|
2000-06-13 23:49:33 +02:00
|
|
|
|
rm -f $(bindir)/$(target_alias)-g++$(exeext); \
|
|
|
|
|
$(LN) $(bindir)/$(GXX_INSTALL_NAME)$(exeext) $(bindir)/$(target_alias)-g++$(exeext); \
|
|
|
|
|
rm -f $(bindir)/$(target_alias)-c++$(exeext); \
|
|
|
|
|
$(LN) $(bindir)/$(CXX_INSTALL_NAME)$(exeext) $(bindir)/$(target_alias)-c++$(exeext); \
|
1994-04-22 09:25:56 +02:00
|
|
|
|
fi ; \
|
1998-02-14 16:56:38 +01:00
|
|
|
|
if [ x$(DEMANGLER_PROG) != x ] && [ -x "$(DEMANGLER_PROG)" ]; then \
|
|
|
|
|
if [ -f g++-cross$(exeext) ] ; then \
|
|
|
|
|
rm -f $(bindir)/$(DEMANGLER_CROSS_NAME)$(exeext); \
|
|
|
|
|
$(INSTALL_PROGRAM) $(DEMANGLER_PROG) $(bindir)/$(DEMANGLER_CROSS_NAME)$(exeext); \
|
|
|
|
|
chmod a+x $(bindir)/$(DEMANGLER_CROSS_NAME)$(exeext); \
|
|
|
|
|
else \
|
|
|
|
|
rm -f $(bindir)/$(DEMANGLER_INSTALL_NAME)$(exeext); \
|
|
|
|
|
$(INSTALL_PROGRAM) $(DEMANGLER_PROG) $(bindir)/$(DEMANGLER_INSTALL_NAME)$(exeext); \
|
|
|
|
|
chmod a+x $(bindir)/$(DEMANGLER_INSTALL_NAME)$(exeext); \
|
|
|
|
|
fi ; \
|
|
|
|
|
fi ; \
|
1994-04-22 09:25:56 +02:00
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
c++.install-info:
|
|
|
|
|
|
|
|
|
|
c++.install-man: $(srcdir)/cp/g++.1
|
1995-02-22 00:38:37 +01:00
|
|
|
|
-if [ -f cc1plus$(exeext) ] ; then \
|
1995-05-22 23:37:40 +02:00
|
|
|
|
if [ -f g++-cross$(exeext) ] ; then \
|
1998-11-19 07:49:46 +01:00
|
|
|
|
rm -f $(man1dir)/$(GXX_CROSS_NAME)$(manext); \
|
|
|
|
|
$(INSTALL_DATA) $(srcdir)/cp/g++.1 $(man1dir)/$(GXX_CROSS_NAME)$(manext); \
|
|
|
|
|
chmod a-x $(man1dir)/$(GXX_CROSS_NAME)$(manext); \
|
1994-11-18 02:32:08 +01:00
|
|
|
|
else \
|
1998-11-19 07:49:46 +01:00
|
|
|
|
rm -f $(man1dir)/$(GXX_INSTALL_NAME)$(manext); \
|
|
|
|
|
$(INSTALL_DATA) $(srcdir)/cp/g++.1 $(man1dir)/$(GXX_INSTALL_NAME)$(manext); \
|
|
|
|
|
chmod a-x $(man1dir)/$(GXX_INSTALL_NAME)$(manext); \
|
1994-11-18 02:32:08 +01:00
|
|
|
|
fi; \
|
1994-04-22 09:25:56 +02:00
|
|
|
|
else true; fi
|
|
|
|
|
|
|
|
|
|
c++.uninstall:
|
1995-02-22 00:38:37 +01:00
|
|
|
|
-rm -rf $(bindir)/$(CXX_INSTALL_NAME)$(exeext)
|
|
|
|
|
-rm -rf $(bindir)/$(CXX_CROSS_NAME)$(exeext)
|
|
|
|
|
-rm -rf $(bindir)/$(GXX_INSTALL_NAME)$(exeext)
|
|
|
|
|
-rm -rf $(bindir)/$(GXX_CROSS_NAME)$(exeext)
|
1998-02-14 16:56:38 +01:00
|
|
|
|
-rm -rf $(bindir)/$(DEMANGLER_INSTALL_NAME)$(exeext)
|
|
|
|
|
-rm -rf $(bindir)/$(DEMANGLER_CROSS_NAME)$(exeext)
|
1998-11-19 07:49:46 +01:00
|
|
|
|
-rm -rf $(man1dir)/$(GXX_INSTALL_NAME)$(manext)
|
|
|
|
|
-rm -rf $(man1dir)/$(GXX_CROSS_NAME)$(manext)
|
1997-06-18 04:25:37 +02:00
|
|
|
|
#
|
1994-04-22 09:25:56 +02:00
|
|
|
|
# Clean hooks:
|
|
|
|
|
# A lot of the ancillary files are deleted by the main makefile.
|
|
|
|
|
# We just have to delete files specific to us.
|
|
|
|
|
|
|
|
|
|
c++.mostlyclean:
|
1995-05-29 18:44:40 +02:00
|
|
|
|
-rm -f cp/*$(objext) $(DEMANGLER_PROG)
|
1994-04-22 09:25:56 +02:00
|
|
|
|
c++.clean:
|
|
|
|
|
c++.distclean:
|
|
|
|
|
-rm -f cp/config.status cp/Makefile
|
|
|
|
|
-rm -f cp/parse.output
|
|
|
|
|
c++.extraclean:
|
1995-04-26 00:07:11 +02:00
|
|
|
|
c++.maintainer-clean:
|
1994-04-22 09:25:56 +02:00
|
|
|
|
-rm -f cp/parse.c cp/parse.h
|
1997-06-18 04:25:37 +02:00
|
|
|
|
#
|
1994-04-22 09:25:56 +02:00
|
|
|
|
# Stage hooks:
|
|
|
|
|
# The main makefile has already created stage?/cp.
|
|
|
|
|
|
1996-12-18 02:44:21 +01:00
|
|
|
|
c++.stage1: stage1-start
|
1995-05-22 23:37:40 +02:00
|
|
|
|
-mv cp/*$(objext) stage1/cp
|
1996-12-18 02:44:21 +01:00
|
|
|
|
c++.stage2: stage2-start
|
1995-05-22 23:37:40 +02:00
|
|
|
|
-mv cp/*$(objext) stage2/cp
|
1996-12-18 02:44:21 +01:00
|
|
|
|
c++.stage3: stage3-start
|
1995-05-22 23:37:40 +02:00
|
|
|
|
-mv cp/*$(objext) stage3/cp
|
1996-12-18 02:44:21 +01:00
|
|
|
|
c++.stage4: stage4-start
|
1995-05-22 23:37:40 +02:00
|
|
|
|
-mv cp/*$(objext) stage4/cp
|
1997-06-18 04:25:37 +02:00
|
|
|
|
#
|
1994-04-22 09:25:56 +02:00
|
|
|
|
# Maintenance hooks:
|
|
|
|
|
|
|
|
|
|
# This target creates the files that can be rebuilt, but go in the
|
|
|
|
|
# distribution anyway. It then copies the files to the distdir directory.
|
|
|
|
|
c++.distdir:
|
1994-04-29 04:14:06 +02:00
|
|
|
|
mkdir tmp/cp
|
1997-11-10 21:03:49 +01:00
|
|
|
|
mkdir tmp/cp/inc
|
2000-05-04 00:45:31 +02:00
|
|
|
|
cd cp ; $(MAKE) $(LANG_FLAGS_TO_PASS) $(CXX_FLAGS_TO_PASS) parse.c hash.h
|
1994-04-22 09:25:56 +02:00
|
|
|
|
cd cp; \
|
|
|
|
|
for file in *[0-9a-zA-Z+]; do \
|
1997-09-11 22:39:08 +02:00
|
|
|
|
$(LN) $$file ../tmp/cp; \
|
1994-04-22 09:25:56 +02:00
|
|
|
|
done
|
1997-11-10 21:03:49 +01:00
|
|
|
|
cd cp/inc; \
|
|
|
|
|
for file in *[0-9a-zA-Z+]; do \
|
|
|
|
|
ln $$file ../../tmp/cp/inc >/dev/null 2>&1 \
|
|
|
|
|
|| cp $$file ../../tmp/cp/inc; \
|
|
|
|
|
done
|