OSDN Git Service

* config/i386/cygwin.h: Search target specfic include directory, if
[pf3gnuchains/gcc-fork.git] / gcc / config / i386 / cygwin.h
index 6e538d5..84b0d15 100644 (file)
@@ -1,8 +1,6 @@
 /* Operating system specific defines to be used when targeting GCC for
-   hosting on Windows NT 3.x, using a Unix style C library and tools,
-   as distinct from winnt.h, which is used to build GCC for use with a
-   windows style library and tool set and uses the Microsoft tools.
-   Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000
+   hosting on Windows32, using a Unix style C library and tools.
+   Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001
    Free Software Foundation, Inc.
 
 This file is part of GNU CC.
@@ -28,6 +26,9 @@ Boston, MA 02111-1307, USA. */
 #define SDB_DEBUGGING_INFO 
 #define PREFERRED_DEBUGGING_TYPE DBX_DEBUG
 
+#define TARGET_EXECUTABLE_SUFFIX ".exe"
+
+#include <stdio.h>
 #include "i386/gas.h"
 #include "dbxcoff.h"
 
@@ -51,6 +52,8 @@ Boston, MA 02111-1307, USA. */
 { "no-cygwin",           MASK_WIN32,                                   \
   N_("Use the Mingw32 interface") },                                   \
 { "windows",             MASK_WINDOWS, N_("Create GUI application") }, \
+{ "no-win32",            -MASK_WIN32, N_("Don't set Windows defines") },\
+{ "win32",               0, N_("Set Windows defines") },               \
 { "console",             -MASK_WINDOWS,                                \
   N_("Create console application") },                                  \
 { "dll",                 MASK_DLL, N_("Generate code for a DLL") },    \
@@ -59,6 +62,36 @@ Boston, MA 02111-1307, USA. */
 { "no-nop-fun-dllimport", -MASK_NOP_FUN_DLLIMPORT, "" }, \
 { "threads",             0, N_("Use Mingw-specific thread support") },
 
+#undef CPP_PREDEFINES
+#define CPP_PREDEFINES "-D_X86_=1 -Asystem=winnt"
+
+#ifdef CROSS_COMPILE
+#define CYGWIN_INCLUDES "%{!nostdinc:-idirafter " CYGWIN_CROSS_DIR "/include}"
+#define W32API_INC "%{!nostdinc:-idirafter " CYGWIN_CROSS_DIR "/include/w32api}"
+#define W32API_LIB "-L" CYGWIN_CROSS_DIR "/lib/w32api/"
+#define CYGWIN_LIB CYGWIN_CROSS_DIR "/lib"
+#define MINGW_LIBS "-L" CYGWIN_CROSS_DIR "/lib/mingw"
+#define MINGW_INCLUDES "%{!nostdinc:-isystem " CYGWIN_CROSS_DIR "/include/mingw/g++-3 "\
+                      "-isystem " CYGWIN_CROSS_DIR "/include/mingw/g++ "\
+                      "-idirafter " CYGWIN_CROSS_DIR "/include/mingw}"
+#else
+#define CYGWIN_INCLUDES "%{!nostdinc:-isystem /usr/local/include "\
+                          "-idirafter " CYGWIN_CROSS_DIR "/include "\
+                          "-idirafter /usr/include}"
+#define W32API_INC "%{!nostdinc:-idirafter /usr/include/w32api}"
+#define W32API_LIB "-L/usr/lib/w32api/"
+#define CYGWIN_LIB "/usr/lib"
+#define MINGW_LIBS "-L/usr/local/lib/mingw -L/usr/lib/mingw"
+#define MINGW_INCLUDES "%{!nostdinc:-isystem /usr/include/mingw/g++-3 "\
+                      "-isystem /usr/include/mingw/g++ "\
+                      "-isystem /usr/local/include/mingw "\
+                      "-idirafter " CYGWIN_CROSS_DIR "/include/mingw "\
+                      "-idirafter /usr/include/mingw}"
+#endif
+
+/* Get tree.c to declare a target-specific specialization of
+   merge_decl_attributes.  */
+#define TARGET_DLLIMPORT_DECL_ATTRIBUTES
 
 /* Support the __declspec keyword by turning them into attributes.
    We currently only support: dllimport and dllexport.
@@ -68,31 +101,37 @@ Boston, MA 02111-1307, USA. */
    is that args are not accumulated: each new appearance would clobber any
    existing args.  */
 
-#undef CPP_PREDEFINES
-#define CPP_PREDEFINES "-D_WIN32 \
-  -DWINNT  -D_X86_=1 \
-  -Asystem(winnt)"
-
-/* Normally, -lgcc is not needed since everything in it is in the DLL, but we
-   want to allow things to be added to it when installing new versions of
-   GCC without making a new CYGWIN.DLL, so we leave it.  Profiling is handled
-   by calling the init function from the prologue. */
-
-#undef STARTFILE_SPEC
-#define STARTFILE_SPEC "%{mdll: %{mno-cygwin:dllcrt1%O%s}} \
-                        %{!mdll: %{!mno-cygwin:crt0%O%s} \
-                                 %{mno-cygwin:crt1%O%s} %{pg:gcrt0%O%s}}"
-
 #undef CPP_SPEC
-#define CPP_SPEC "-remap %(cpp_cpu) %{posix:-D_POSIX_SOURCE} \
+#define CPP_SPEC "%(cpp_cpu) %{posix:-D_POSIX_SOURCE} \
   -D__stdcall=__attribute__((__stdcall__)) \
   -D__cdecl=__attribute__((__cdecl__)) \
   %{!ansi:-D_stdcall=__attribute__((__stdcall__)) \
     -D_cdecl=__attribute__((__cdecl__))} \
   -D__declspec(x)=__attribute__((x)) \
-  %{!mno-cygwin:-D__CYGWIN32__ -D__CYGWIN__} \
-  %{mno-cygwin:-iwithprefixbefore \
-    ../../../../%(mingw_include_path)/include/mingw32 -D__MINGW32__=0.2}"
+  -D__i386__ -D__i386 \
+  %{mno-win32:%{mno-cygwin: %emno-cygwin and mno-win32 are not compatible}} \
+  %{mno-cygwin:-D__MSVCRT__ -D__MINGW32__ %{mthreads:-D_MT} "\
+    MINGW_INCLUDES "} \
+  %{!mno-cygwin:-D__CYGWIN32__ -D__CYGWIN__ %{!ansi:-Dunix} -D__unix__ -D__unix "\
+    CYGWIN_INCLUDES "}\
+  %{mwin32|mno-cygwin:-DWIN32 -D_WIN32 -D__WIN32 -D__WIN32__ %{!ansi:-DWINNT}}\
+  %{!mno-win32:" W32API_INC "}\
+"
+
+#undef STARTFILE_SPEC
+#define STARTFILE_SPEC "\
+  %{shared|mdll: %{mno-cygwin:" MINGW_LIBS " dllcrt2%O%s}}\
+  %{!shared: %{!mdll: %{!mno-cygwin:crt0%O%s} %{mno-cygwin:" MINGW_LIBS " crt2%O%s}\
+  %{pg:gcrt0%O%s}}}\
+"
+
+/* Normally, -lgcc is not needed since everything in it is in the DLL, but we
+   want to allow things to be added to it when installing new versions of
+   GCC without making a new CYGWIN.DLL, so we leave it.  Profiling is handled
+   by calling the init function from the prologue. */
+
+#undef LIBGCC_SPEC
+#define LIBGCC_SPEC "%{mno-cygwin: %{mthreads:-lmingwthrd} -lmingw32} -lgcc %{mno-cygwin:-lmoldname -lmsvcrt}"
 
 /* This macro defines names of additional specifications to put in the specs
    that can be used in various specifications like CC1_SPEC.  Its definition
@@ -115,16 +154,26 @@ Boston, MA 02111-1307, USA. */
    ld, but that doesn't work just yet.  */
 
 #undef LIB_SPEC
-#define LIB_SPEC "%{pg:-lgmon} \
-                  %{!mno-cygwin:-lcygwin} \
-                  %{mno-cygwin:-lmingw32 -lmoldname -lcrtdll} \
-                  %{mwindows:-lgdi32 -lcomdlg32} \
-                 -luser32 -lkernel32 -ladvapi32 -lshell32"
-
-#define LINK_SPEC "%{mwindows:--subsystem windows} \
-                   %{mconsole:--subsystem console} \
-                   %{mdll:--dll -e _DllMainCRTStartup@12}"
-
+#define LIB_SPEC "\
+  %{pg:-lgmon} \
+  %{!mno-cygwin:-lcygwin} \
+  %{mno-cygwin:%{mthreads:-lmingwthrd} -lmingw32} \
+  %{mwindows:-lgdi32 -lcomdlg32} \
+  -luser32 -lkernel32 -ladvapi32 -lshell32"
+
+#define LINK_SPEC W32API_LIB "\
+  %{mwindows:--subsystem windows} \
+  %{mconsole:--subsystem console} \
+  %{shared: %{mdll: %eshared and mdll are not compatible}} \
+  %{shared: --shared} %{mdll:--dll} \
+  %{static:-Bstatic} %{!static:-Bdynamic} \
+  %{shared|mdll: -e \
+    %{mno-cygwin:_DllMainCRTStartup@12} \
+    %{!mno-cygwin:__cygwin_dll_entry@12}}\
+  --dll-search-prefix=cyg"
+
+#undef MATH_LIBRARY
+#define MATH_LIBRARY ""
 
 #define SIZE_TYPE "unsigned int"
 #define PTRDIFF_TYPE "int"
@@ -136,27 +185,8 @@ Boston, MA 02111-1307, USA. */
 /* Enable parsing of #pragma pack(push,<n>) and #pragma pack(pop).  */
 #define HANDLE_PRAGMA_PACK_PUSH_POP 1
 
-/* A C expression whose value is nonzero if IDENTIFIER with arguments ARGS
-   is a valid machine specific attribute for DECL.
-   The attributes in ATTRIBUTES have previously been assigned to DECL.  */
-extern int i386_pe_valid_decl_attribute_p ();
-
-#undef VALID_MACHINE_DECL_ATTRIBUTE
-#define VALID_MACHINE_DECL_ATTRIBUTE(DECL, ATTRIBUTES, IDENTIFIER, ARGS) \
-  i386_pe_valid_decl_attribute_p (DECL, ATTRIBUTES, IDENTIFIER, ARGS)
-
-/* A C expression whose value is nonzero if IDENTIFIER with arguments ARGS
-   is a valid machine specific attribute for TYPE.
-   The attributes in ATTRIBUTES have previously been assigned to TYPE.  */
-
-#undef VALID_MACHINE_TYPE_ATTRIBUTE
-#define VALID_MACHINE_TYPE_ATTRIBUTE(TYPE, ATTRIBUTES, IDENTIFIER, ARGS) \
-  i386_pe_valid_type_attribute_p (TYPE, ATTRIBUTES, IDENTIFIER, ARGS)
-extern int i386_pe_valid_type_attribute_p ();
-
-extern union tree_node *i386_pe_merge_decl_attributes ();
-#define MERGE_MACHINE_DECL_ATTRIBUTES(OLD, NEW) \
-  i386_pe_merge_decl_attributes ((OLD), (NEW))
+union tree_node;
+#define TREE union tree_node *
 
 /* Used to implement dllexport overriding dllimport semantics.  It's also used
    to handle vtables - the first pass won't do anything because
@@ -164,7 +194,7 @@ extern union tree_node *i386_pe_merge_decl_attributes ();
    It's also used to handle dllimport override semantics.  */
 #if 0
 #define REDO_SECTION_INFO_P(DECL) \
-  ((DECL_MACHINE_ATTRIBUTES (DECL) != NULL_TREE) \
+  ((DECL_ATTRIBUTES (DECL) != NULL_TREE) \
    || (TREE_CODE (DECL) == VAR_DECL && DECL_VIRTUAL_P (DECL)))
 #else
 #define REDO_SECTION_INFO_P(DECL) 1
@@ -172,37 +202,13 @@ extern union tree_node *i386_pe_merge_decl_attributes ();
 
 \f
 #undef EXTRA_SECTIONS
-#define EXTRA_SECTIONS in_ctor, in_dtor, in_drectve
+#define EXTRA_SECTIONS in_drectve
 
 #undef EXTRA_SECTION_FUNCTIONS
 #define EXTRA_SECTION_FUNCTIONS                                        \
-  CTOR_SECTION_FUNCTION                                                \
-  DTOR_SECTION_FUNCTION                                                \
   DRECTVE_SECTION_FUNCTION                                     \
   SWITCH_TO_SECTION_FUNCTION
 
-#define CTOR_SECTION_FUNCTION                                  \
-void                                                           \
-ctor_section ()                                                        \
-{                                                              \
-  if (in_section != in_ctor)                                   \
-    {                                                          \
-      fprintf (asm_out_file, "\t.section .ctor\n");            \
-      in_section = in_ctor;                                    \
-    }                                                          \
-}
-
-#define DTOR_SECTION_FUNCTION                                  \
-void                                                           \
-dtor_section ()                                                        \
-{                                                              \
-  if (in_section != in_dtor)                                   \
-    {                                                          \
-      fprintf (asm_out_file, "\t.section .dtor\n");            \
-      in_section = in_dtor;                                    \
-    }                                                          \
-}
-
 #define DRECTVE_SECTION_FUNCTION \
 void                                                                   \
 drectve_section ()                                                     \
@@ -213,6 +219,7 @@ drectve_section ()                                                  \
       in_section = in_drectve;                                         \
     }                                                                  \
 }
+void drectve_section PARAMS ((void));
 
 /* Switch to SECTION (an `enum in_section').
 
@@ -221,6 +228,7 @@ drectve_section ()                                                  \
    ASM_DECLARE_OBJECT_NAME and then switch back to the original section
    afterwards.  */
 #define SWITCH_TO_SECTION_FUNCTION                             \
+void switch_to_section PARAMS ((enum in_section, tree));        \
 void                                                           \
 switch_to_section (section, decl)                              \
      enum in_section section;                                  \
@@ -231,29 +239,11 @@ switch_to_section (section, decl)                                 \
       case in_text: text_section (); break;                    \
       case in_data: data_section (); break;                    \
       case in_named: named_section (decl, NULL, 0); break;     \
-      case in_ctor: ctor_section (); break;                    \
-      case in_dtor: dtor_section (); break;                    \
       case in_drectve: drectve_section (); break;              \
       default: abort (); break;                                \
     }                                                          \
 }
 
-#define ASM_OUTPUT_CONSTRUCTOR(FILE,NAME)      \
-  do {                                         \
-    ctor_section ();                           \
-    fprintf (FILE, "%s\t", ASM_LONG);          \
-    assemble_name (FILE, NAME);                        \
-    fprintf (FILE, "\n");                      \
-  } while (0)
-
-#define ASM_OUTPUT_DESTRUCTOR(FILE,NAME)               \
-  do {                                         \
-    dtor_section ();                                   \
-    fprintf (FILE, "%s\t", ASM_LONG);          \
-    assemble_name (FILE, NAME);                        \
-    fprintf (FILE, "\n");                      \
-  } while (0)
-
 /* Don't allow flag_pic to propagate since gas may produce invalid code
    otherwise. */
 
@@ -285,7 +275,7 @@ do {                                                                        \
    section and we need to set DECL_SECTION_NAME so we do that here.
    Note that we can be called twice on the same decl.  */
 
-extern void i386_pe_encode_section_info ();
+extern void i386_pe_encode_section_info PARAMS ((TREE));
 
 #ifdef ENCODE_SECTION_INFO
 #undef ENCODE_SECTION_INFO
@@ -323,7 +313,7 @@ do {                                                                        \
 #undef ASM_OUTPUT_LABELREF
 #define ASM_OUTPUT_LABELREF(STREAM, NAME)              \
   fprintf (STREAM, "%s%s", USER_LABEL_PREFIX,          \
-           I386_PE_STRIP_ENCODING (NAME))              \
+          I386_PE_STRIP_ENCODING (NAME))               \
 
 /* Output a common block.  */
 #undef ASM_OUTPUT_COMMON
@@ -357,9 +347,9 @@ do {                                                        \
 
 /* By default, target has a 80387, uses IEEE compatible arithmetic,
    and returns float values in the 387 and needs stack probes */
-#undef TARGET_DEFAULT
+#undef TARGET_SUBTARGET_DEFAULT
 
-#define TARGET_DEFAULT \
+#define TARGET_SUBTARGET_DEFAULT \
    (MASK_80387 | MASK_IEEE_FP | MASK_FLOAT_RETURNS | MASK_STACK_PROBE) 
 
 /* This is how to output an assembler line
@@ -376,69 +366,16 @@ do {                                                      \
    symbols must be explicitly imported from shared libraries (DLLs).  */
 #define MULTIPLE_SYMBOL_SPACES
 
-#define UNIQUE_SECTION_P(DECL) DECL_ONE_ONLY (DECL)
-extern void i386_pe_unique_section ();
+extern void i386_pe_unique_section PARAMS ((TREE, int));
 #define UNIQUE_SECTION(DECL,RELOC) i386_pe_unique_section (DECL, RELOC)
 
 #define SUPPORTS_ONE_ONLY 1
 
-/* A C statement to output something to the assembler file to switch to section
-   NAME for object DECL which is either a FUNCTION_DECL, a VAR_DECL or
-   NULL_TREE.  Some target formats do not support arbitrary sections.  Do not
-   define this macro in such cases.  */
-#undef ASM_OUTPUT_SECTION_NAME
-#define ASM_OUTPUT_SECTION_NAME(STREAM, DECL, NAME, RELOC)             \
-do {                                                                   \
-  static struct section_info                                           \
-    {                                                                  \
-      struct section_info *next;                                       \
-      char *name;                                                      \
-      enum sect_enum {SECT_RW, SECT_RO, SECT_EXEC} type;               \
-    } *sections;                                                       \
-  struct section_info *s;                                              \
-  const char *mode;                                                    \
-  enum sect_enum type;                                                 \
-                                                                       \
-  for (s = sections; s; s = s->next)                                   \
-    if (!strcmp (NAME, s->name))                                       \
-      break;                                                           \
-                                                                       \
-  if (DECL && TREE_CODE (DECL) == FUNCTION_DECL)                       \
-    type = SECT_EXEC, mode = "x";                                      \
-  else if (DECL && DECL_READONLY_SECTION (DECL, RELOC))                        \
-    type = SECT_RO, mode = "";                                         \
-  else                                                                 \
-    {                                                                  \
-      type = SECT_RW;                                                  \
-      if (TREE_CODE (DECL) == VAR_DECL                                 \
-          && lookup_attribute ("shared", DECL_MACHINE_ATTRIBUTES (DECL))) \
-        mode = "ws";                                                   \
-      else                                                             \
-        mode = "w";                                                    \
-    }                                                                  \
-                                                                       \
-  if (s == 0)                                                          \
-    {                                                                  \
-      s = (struct section_info *) xmalloc (sizeof (struct section_info)); \
-      s->name = xmalloc ((strlen (NAME) + 1) * sizeof (*NAME));                \
-      strcpy (s->name, NAME);                                          \
-      s->type = type;                                                  \
-      s->next = sections;                                              \
-      sections = s;                                                    \
-      fprintf (STREAM, ".section\t%s,\"%s\"\n", NAME, mode);           \
-      /* Functions may have been compiled at various levels of         \
-         optimization so we can't use `same_size' here.  Instead,      \
-         have the linker pick one.  */                                 \
-      if ((DECL) && DECL_ONE_ONLY (DECL))                              \
-        fprintf (STREAM, "\t.linkonce %s\n",                           \
-                TREE_CODE (DECL) == FUNCTION_DECL                      \
-                ? "discard" : "same_size");                            \
-    }                                                                  \
-  else                                                                 \
-    {                                                                  \
-      fprintf (STREAM, ".section\t%s,\"%s\"\n", NAME, mode);           \
-    }                                                                  \
-} while (0)
+/* Switch into a generic section.  */
+#define TARGET_ASM_NAMED_SECTION  i386_pe_asm_named_section
+
+/* Select attributes for named sections.  */
+#define TARGET_SECTION_TYPE_FLAGS  i386_pe_section_type_flags
 
 /* Write the extra assembler code needed to declare a function
    properly.  If we are generating SDB debugging information, this
@@ -475,49 +412,34 @@ do {                                                                      \
   asm_output_aligned_bss ((FILE), (DECL), (NAME), (SIZE), (ALIGN))
 
 /* Output function declarations at the end of the file.  */
+#undef ASM_FILE_END
 #define ASM_FILE_END(FILE) \
   i386_pe_asm_file_end (FILE)
 
 #undef ASM_COMMENT_START
 #define ASM_COMMENT_START " #"
 
-/* DWARF2 Unwinding doesn't work with exception handling yet. */
-#define DWARF2_UNWIND_INFO 0
-
 /* Don't assume anything about the header files. */
 #define NO_IMPLICIT_EXTERN_C
 
 #define SUBTARGET_PROLOGUE                                             \
   if (profile_flag                                                     \
-      && strcmp (IDENTIFIER_POINTER (DECL_NAME (current_function_decl)),\
-                "main") == 0)                                          \
+      && MAIN_NAME_P (DECL_NAME (current_function_decl)))              \
      {                                                                 \
       emit_call_insn (gen_rtx (CALL, VOIDmode,                                 \
-        gen_rtx_MEM (FUNCTION_MODE,                                    \
+       gen_rtx_MEM (FUNCTION_MODE,                                     \
                     gen_rtx_SYMBOL_REF (Pmode, "_monstartup")),        \
        const0_rtx));                                                   \
      }
 
 /* External function declarations.  */
 
-#ifndef PARAMS
-#if defined (USE_PROTOTYPES) ? USE_PROTOTYPES : defined (__STDC__)
-#define PARAMS(ARGS) ARGS
-#else
-#define PARAMS(ARGS) ()
-#endif
-#endif
-
-#ifdef BUFSIZ          /* stdio.h has been included, ok to use FILE * */
-#define STDIO_PARAMS(ARGS) PARAMS(ARGS)
-#else
-#define STDIO_PARAMS(ARGS) ()
-#endif
-
-extern void i386_pe_record_external_function PARAMS ((char *));
-extern void i386_pe_declare_function_type STDIO_PARAMS ((FILE *, char *, int));
-extern void i386_pe_record_exported_symbol PARAMS ((char *, int));
-extern void i386_pe_asm_file_end STDIO_PARAMS ((FILE *));
+extern void i386_pe_record_external_function PARAMS ((const char *));
+extern void i386_pe_declare_function_type PARAMS ((FILE *, const char *, int));
+extern void i386_pe_record_exported_symbol PARAMS ((const char *, int));
+extern void i386_pe_asm_file_end PARAMS ((FILE *));
+extern int i386_pe_dllexport_name_p PARAMS ((const char *));
+extern int i386_pe_dllimport_name_p PARAMS ((const char *));
 
 /* For Win32 ABI compatibility */
 #undef DEFAULT_PCC_STRUCT_RETURN
@@ -527,16 +449,41 @@ extern void i386_pe_asm_file_end STDIO_PARAMS ((FILE *));
 #undef BIGGEST_ALIGNMENT
 #define BIGGEST_ALIGNMENT 128
 
+/* Native complier aligns internal doubles in structures on dword boundaries.  */
+#undef BIGGEST_FIELD_ALIGNMENT
+#define BIGGEST_FIELD_ALIGNMENT 64
+
 /* A bitfield declared as `int' forces `int' alignment for the struct.  */
 #undef PCC_BITFIELDS_TYPE_MATTERS
-#define PCC_BITFIELDS_TYPE_MATTERS 0
+#define PCC_BITFIELDS_TYPE_MATTERS 1
+#define GROUP_BITFIELDS_BY_ALIGN TYPE_NATIVE(rec)
+
 
 /* Enable alias attribute support.  */
 #ifndef SET_ASM_OP
-#define SET_ASM_OP "\t.set"
+#define SET_ASM_OP "\t.set\t"
 #endif
 
-#ifndef INT_ASM_OP
-#define INT_ASM_OP ".long"
-#endif
+/* Override GCC's relative pathname lookup (ie., relocatability) unless
+   otherwise told by other subtargets.  */
+#ifndef WIN32_NO_ABSOLUTE_INST_DIRS
+#undef MD_STARTFILE_PREFIX
+#define MD_STARTFILE_PREFIX     "/usr/lib/"
+
+#undef STANDARD_STARTFILE_PREFIX
+#define STANDARD_STARTFILE_PREFIX     "/usr/lib/mingw/"
 
+#ifndef CROSS_COMPILE
+#undef LOCAL_INCLUDE_DIR
+#undef TOOL_INCLUDE_DIR
+#undef SYSTEM_INCLUDE_DIR
+#undef STANDARD_INCLUDE_DIR
+#define STANDARD_INCLUDE_DIR 0
+#endif /* not CROSS_COMPILE */
+#endif /* not WIN32_NO_ABSOLUTE_INST_DIRS */
+
+#undef TREE
+
+#ifndef BUFSIZ
+# undef FILE
+#endif