This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Split out bits of cppinit.c


This patch splits out some pieces of cppinit.c which I need to be able
to get at separately.

zw

	* cppinit.c: Include cppdefault.h.  Refer to
	cpp_GCC_INCLUDE_DIR and cpp_GCC_INCLUDE_DIR_len, not directly
	to GCC_INCLUDE_DIR and its length.
	(SIZE_TYPE, PTRDIFF_TYPE, WCHAR_TYPE,
	USER_LABEL_PREFIX, REGISTER_PREFIX, struct default_include,
	STANDARD_INCLUDE_DIR, STANDARD_INCLUDE_COMPONENT):  Move to
	cppdefault.h.
	(include_defaults_array): Move to cppdefault.c.

	* cppdefault.h: New file.
	* cppdefault.c: New file.

	* Makefile.in (LIBCPP_OBJS): Add cppdefault.o.
	(cppinit.o): Don't apply $(PREPROCESSOR_DEFINES) to this file.
	(cppdefault.o): New rule; apply $(PREPROCESSOR_DEFINES) to
	this file.

===================================================================
Index: cppinit.c
--- cppinit.c	2000/07/05 05:33:56	1.87
+++ cppinit.c	2000/07/06 22:38:29
@@ -28,6 +28,7 @@ Foundation, 59 Temple Place - Suite 330,
 #include "intl.h"
 #include "version.h"
 #include "mkdeps.h"
+#include "cppdefault.h"
 
 /* Predefined symbols, built-in macros, and the default include path. */
 
@@ -46,116 +47,6 @@ Foundation, 59 Temple Place - Suite 330,
 #define INO_T_EQ(a, b) ((a) == (b))
 #endif
 
-#ifndef STANDARD_INCLUDE_DIR
-#define STANDARD_INCLUDE_DIR "/usr/include"
-#endif
-
-/* We let tm.h override the types used here, to handle trivial differences
-   such as the choice of unsigned int or long unsigned int for size_t.
-   When machines start needing nontrivial differences in the size type,
-   it would be best to do something here to figure out automatically
-   from other information what type to use.  */
-
-/* The string value for __SIZE_TYPE__.  */
-
-#ifndef SIZE_TYPE
-#define SIZE_TYPE "long unsigned int"
-#endif
-
-/* The string value for __PTRDIFF_TYPE__.  */
-
-#ifndef PTRDIFF_TYPE
-#define PTRDIFF_TYPE "long int"
-#endif
-
-/* The string value for __WCHAR_TYPE__.  */
-
-#ifndef WCHAR_TYPE
-#define WCHAR_TYPE "int"
-#endif
-
-/* The string value for __USER_LABEL_PREFIX__ */
-
-#ifndef USER_LABEL_PREFIX
-#define USER_LABEL_PREFIX ""
-#endif
-
-/* The string value for __REGISTER_PREFIX__ */
-
-#ifndef REGISTER_PREFIX
-#define REGISTER_PREFIX ""
-#endif
-
-/* This is the default list of directories to search for include files.
-   It may be overridden by the various -I and -ixxx options.
-
-   #include "file" looks in the same directory as the current file,
-   then this list.
-   #include <file> just looks in this list.
-
-   All these directories are treated as `system' include directories
-   (they are not subject to pedantic warnings in some cases).  */
-
-struct default_include
-{
-  const char *fname;		/* The name of the directory.  */
-  const char *component;	/* The component containing the directory
-				   (see update_path in prefix.c) */
-  int cplusplus;		/* Only look here if we're compiling C++.  */
-  int cxx_aware;		/* Includes in this directory don't need to
-				   be wrapped in extern "C" when compiling
-				   C++.  */
-};
-
-#ifndef STANDARD_INCLUDE_COMPONENT
-#define STANDARD_INCLUDE_COMPONENT 0
-#endif
-
-#ifdef CROSS_COMPILE
-#undef LOCAL_INCLUDE_DIR
-#undef SYSTEM_INCLUDE_DIR
-#undef STANDARD_INCLUDE_DIR
-#else
-#undef CROSS_INCLUDE_DIR
-#endif
-
-static const struct default_include include_defaults_array[]
-#ifdef INCLUDE_DEFAULTS
-= INCLUDE_DEFAULTS;
-#else
-= {
-#ifdef GPLUSPLUS_INCLUDE_DIR
-    /* Pick up GNU C++ specific include files.  */
-    { GPLUSPLUS_INCLUDE_DIR, "G++", 1, 1 },
-#endif
-#ifdef LOCAL_INCLUDE_DIR
-    /* /usr/local/include comes before the fixincluded header files.  */
-    { LOCAL_INCLUDE_DIR, 0, 0, 1 },
-#endif
-#ifdef GCC_INCLUDE_DIR
-    /* This is the dir for fixincludes and for gcc's private headers.  */
-    { GCC_INCLUDE_DIR, "GCC", 0, 0 },
-#endif
-#ifdef CROSS_INCLUDE_DIR
-    /* One place the target system's headers might be.  */
-    { CROSS_INCLUDE_DIR, "GCC", 0, 0 },
-#endif
-#ifdef TOOL_INCLUDE_DIR
-    /* Another place the target system's headers might be.  */
-    { TOOL_INCLUDE_DIR, "BINUTILS", 0, 1 },
-#endif
-#ifdef SYSTEM_INCLUDE_DIR
-    /* Some systems have an extra dir of include files.  */
-    { SYSTEM_INCLUDE_DIR, 0, 0, 0 },
-#endif
-#ifdef STANDARD_INCLUDE_DIR
-    /* /usr/include comes dead last.  */
-    { STANDARD_INCLUDE_DIR, STANDARD_INCLUDE_COMPONENT, 0, 0 },
-#endif
-    { 0, 0, 0, 0 }
-  };
-#endif /* no INCLUDE_DEFAULTS */
-
 /* Internal structures and prototypes. */
 
 /* A `struct pending_option' remembers one -D, -A, -U, -include, or -imacros
@@ -785,18 +676,18 @@ initialize_standard_includes (pfile)
 
   /* Search "translated" versions of GNU directories.
      These have /usr/local/lib/gcc... replaced by specd_prefix.  */
-  if (specd_prefix != 0)
+  if (specd_prefix != 0 && cpp_GCC_INCLUDE_DIR_len)
     {
-      char *default_prefix = (char *) alloca (sizeof GCC_INCLUDE_DIR - 7);
       /* Remove the `include' from /usr/local/lib/gcc.../include.
 	 GCC_INCLUDE_DIR will always end in /include. */
-      int default_len = sizeof GCC_INCLUDE_DIR - 8;
+      int default_len = cpp_GCC_INCLUDE_DIR_len;
+      char *default_prefix = (char *) alloca (default_len + 1);
       int specd_len = strlen (specd_prefix);
 
-      memcpy (default_prefix, GCC_INCLUDE_DIR, default_len);
+      memcpy (default_prefix, cpp_GCC_INCLUDE_DIR, default_len);
       default_prefix[default_len] = '\0';
 
-      for (p = include_defaults_array; p->fname; p++)
+      for (p = cpp_include_defaults; p->fname; p++)
 	{
 	  /* Some standard dirs are only for C++.  */
 	  if (!p->cplusplus
@@ -823,7 +714,7 @@ initialize_standard_includes (pfile)
     }
 
   /* Search ordinary names for GNU include directories.  */
-  for (p = include_defaults_array; p->fname; p++)
+  for (p = cpp_include_defaults; p->fname; p++)
     {
       /* Some standard dirs are only for C++.  */
       if (!p->cplusplus
@@ -1697,12 +1588,14 @@ handle_option (pfile, argc, argv)
 		memcpy (fname, CPP_OPTION (pfile, include_prefix), ipl);
 		memcpy (fname + ipl, arg, len + 1);
 	      }
-	    else
+	    else if (cpp_GCC_INCLUDE_DIR_len)
 	      {
-		fname = xmalloc (sizeof GCC_INCLUDE_DIR - 8 + len);
-		memcpy (fname, GCC_INCLUDE_DIR, sizeof GCC_INCLUDE_DIR - 9);
-		memcpy (fname + sizeof GCC_INCLUDE_DIR - 9, arg, len + 1);
+		fname = xmalloc (cpp_GCC_INCLUDE_DIR_len + len + 1);
+		memcpy (fname, cpp_GCC_INCLUDE_DIR, cpp_GCC_INCLUDE_DIR_len);
+		memcpy (fname + cpp_GCC_INCLUDE_DIR_len, arg, len + 1);
 	      }
+	    else
+	      fname = xstrdup (arg);
 
 	    append_include_chain (pfile, CPP_OPTION (pfile, pending), fname,
 			  opt_code == OPT_iwithprefix ? SYSTEM: BRACKET, 0);
===================================================================
Index: cppdefault.c
--- cppdefault.c	Tue May  5 13:32:27 1998
+++ cppdefault.c	Thu Jul  6 15:38:29 2000
@@ -0,0 +1,72 @@
+/* CPP Library.
+   Copyright (C) 1986, 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
+   1999, 2000 Free Software Foundation, Inc.
+   Contributed by Per Bothner, 1994-95.
+   Based on CCCP program by Paul Rubin, June 1986
+   Adapted to ANSI C, Richard Stallman, Jan 1987
+
+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.  */
+
+/* This file contains data definitions shared between cpplib and
+   tradcpp.  */
+
+#include "config.h"
+#include "system.h"
+#include "cppdefault.h"
+
+const struct default_include cpp_include_defaults[]
+#ifdef INCLUDE_DEFAULTS
+= INCLUDE_DEFAULTS;
+#else
+= {
+#ifdef GPLUSPLUS_INCLUDE_DIR
+    /* Pick up GNU C++ specific include files.  */
+    { GPLUSPLUS_INCLUDE_DIR, "G++", 1, 1 },
+#endif
+#ifdef LOCAL_INCLUDE_DIR
+    /* /usr/local/include comes before the fixincluded header files.  */
+    { LOCAL_INCLUDE_DIR, 0, 0, 1 },
+#endif
+#ifdef GCC_INCLUDE_DIR
+    /* This is the dir for fixincludes and for gcc's private headers.  */
+    { GCC_INCLUDE_DIR, "GCC", 0, 0 },
+#endif
+#ifdef CROSS_INCLUDE_DIR
+    /* One place the target system's headers might be.  */
+    { CROSS_INCLUDE_DIR, "GCC", 0, 0 },
+#endif
+#ifdef TOOL_INCLUDE_DIR
+    /* Another place the target system's headers might be.  */
+    { TOOL_INCLUDE_DIR, "BINUTILS", 0, 1 },
+#endif
+#ifdef SYSTEM_INCLUDE_DIR
+    /* Some systems have an extra dir of include files.  */
+    { SYSTEM_INCLUDE_DIR, 0, 0, 0 },
+#endif
+#ifdef STANDARD_INCLUDE_DIR
+    /* /usr/include comes dead last.  */
+    { STANDARD_INCLUDE_DIR, STANDARD_INCLUDE_COMPONENT, 0, 0 },
+#endif
+    { 0, 0, 0, 0 }
+  };
+#endif /* no INCLUDE_DEFAULTS */
+
+#ifdef GCC_INCLUDE_DIR
+const char cpp_GCC_INCLUDE_DIR[] = GCC_INCLUDE_DIR;
+const size_t cpp_GCC_INCLUDE_DIR_len = sizeof GCC_INCLUDE_DIR - 8;
+#else
+const char cpp_GCC_INCLUDE_DIR[] = "";
+const size_t cpp_GCC_INCLUDE_DIR_len = 0;
+#endif
===================================================================
Index: cppdefault.h
--- cppdefault.h	Tue May  5 13:32:27 1998
+++ cppdefault.h	Thu Jul  6 15:38:29 2000
@@ -0,0 +1,106 @@
+/* CPP Library.
+   Copyright (C) 1986, 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
+   1999, 2000 Free Software Foundation, Inc.
+   Contributed by Per Bothner, 1994-95.
+   Based on CCCP program by Paul Rubin, June 1986
+   Adapted to ANSI C, Richard Stallman, Jan 1987
+
+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.  */
+
+#ifndef __GCC_CPPDEFAULT__
+#define __GCC_CPPDEFAULT__
+
+/* This header contains declarations and/or #defines for all the
+   hard-wired defaults in cpp.  Note it's used by both cpplib and
+   tradcpp.  */
+
+#ifndef STANDARD_INCLUDE_DIR
+#define STANDARD_INCLUDE_DIR "/usr/include"
+#endif
+
+#ifndef STANDARD_INCLUDE_COMPONENT
+#define STANDARD_INCLUDE_COMPONENT 0
+#endif
+
+#ifdef CROSS_COMPILE
+#undef LOCAL_INCLUDE_DIR
+#undef SYSTEM_INCLUDE_DIR
+#undef STANDARD_INCLUDE_DIR
+#else
+#undef CROSS_INCLUDE_DIR
+#endif
+
+/* We let tm.h override the types used here, to handle trivial differences
+   such as the choice of unsigned int or long unsigned int for size_t.
+   When machines start needing nontrivial differences in the size type,
+   it would be best to do something here to figure out automatically
+   from other information what type to use.  */
+
+/* The string value for __SIZE_TYPE__.  */
+
+#ifndef SIZE_TYPE
+#define SIZE_TYPE "long unsigned int"
+#endif
+
+/* The string value for __PTRDIFF_TYPE__.  */
+
+#ifndef PTRDIFF_TYPE
+#define PTRDIFF_TYPE "long int"
+#endif
+
+/* The string value for __WCHAR_TYPE__.  */
+
+#ifndef WCHAR_TYPE
+#define WCHAR_TYPE "int"
+#endif
+
+/* The string value for __USER_LABEL_PREFIX__ */
+
+#ifndef USER_LABEL_PREFIX
+#define USER_LABEL_PREFIX ""
+#endif
+
+/* The string value for __REGISTER_PREFIX__ */
+
+#ifndef REGISTER_PREFIX
+#define REGISTER_PREFIX ""
+#endif
+
+/* This is the default list of directories to search for include files.
+   It may be overridden by the various -I and -ixxx options.
+
+   #include "file" looks in the same directory as the current file,
+   then this list.
+   #include <file> just looks in this list.
+
+   All these directories are treated as `system' include directories
+   (they are not subject to pedantic warnings in some cases).  */
+
+struct default_include
+{
+  const char *fname;		/* The name of the directory.  */
+  const char *component;	/* The component containing the directory
+				   (see update_path in prefix.c) */
+  int cplusplus;		/* Only look here if we're compiling C++.  */
+  int cxx_aware;		/* Includes in this directory don't need to
+				   be wrapped in extern "C" when compiling
+				   C++.  */
+};
+
+extern const struct default_include cpp_include_defaults[];
+extern const char cpp_GCC_INCLUDE_DIR[];
+extern const size_t cpp_GCC_INCLUDE_DIR_len;
+
+#endif /* cppdefault.h */
===================================================================
Index: Makefile.in
--- Makefile.in	2000/07/05 05:33:55	1.474
+++ Makefile.in	2000/07/06 22:48:47
@@ -1778,7 +1778,7 @@ PREPROCESSOR_DEFINES = \
   -DTOOL_INCLUDE_DIR=\"$(gcc_tooldir)/include\"
 
 LIBCPP_OBJS =	cpplib.o cpphash.o cpperror.o cppexp.o cppfiles.o \
-		cppinit.o cppulp.o cpplex.o mkdeps.o \
+		cppinit.o cppulp.o cpplex.o cppdefault.o mkdeps.o \
 		prefix.o version.o mbchar.o @extra_cpp_objs@
 
 LIBCPP_DEPS =	cpplib.h cpphash.h intl.h system.h
@@ -1804,12 +1804,13 @@ cpplex.o:   cpplex.c   $(CONFIG_H) $(LIB
 cpplib.o:   cpplib.c   $(CONFIG_H) $(LIBCPP_DEPS) $(OBSTACK_H)
 cpphash.o:  cpphash.c  $(CONFIG_H) $(LIBCPP_DEPS) $(OBSTACK_H) $(HASHTAB_H)
 cppfiles.o: cppfiles.c $(CONFIG_H) $(LIBCPP_DEPS) $(SPLAY_TREE_H) mkdeps.h
+cppinit.o:  cppinit.c  $(CONFIG_H) $(LIBCPP_DEPS) cppdefault.h \
+		mkdeps.h prefix.h output.h version.h
 
-cppinit.o: cppinit.c $(CONFIG_H) $(LIBCPP_DEPS) \
-		mkdeps.h prefix.h output.h Makefile version.h
+cppdefault.o: cppdefault.c $(CONFIG_H) system.h cppdefault.h Makefile
 	$(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
 	  $(PREPROCESSOR_DEFINES) \
-	  -c `echo $(srcdir)/cppinit.c | sed 's,^\./,,'`
+	  -c `echo $(srcdir)/cppdefault.c | sed 's,^\./,,'`
 
 mkdeps.o: mkdeps.c $(CONFIG_H) system.h mkdeps.h
 

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]