OSDN Git Service

Build include files in build directory when doing make all.
authorian <ian@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 14 Jan 1993 20:10:31 +0000 (20:10 +0000)
committerian <ian@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 14 Jan 1993 20:10:31 +0000 (20:10 +0000)
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@3242 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/Makefile.in
gcc/cross-make

index 725ad71..840af2f 100644 (file)
@@ -88,6 +88,10 @@ CCLIBFLAGS = -O
 # Version of ar to use when compiling libgcc1.a.
 OLDAR = ar
 
+# Target to use when installing include directory.  Either
+# install-headers-tar or install-headers-cpio.
+INSTALL_HEADERS_DIR = install-headers-tar
+
 # The GCC to use for compiling libgcc2.a, enquire, and cross-test.
 # Usually the one we just built.
 # Don't use this as a dependency--use $(GCC_PASSES) or $(GCC_PARTS).
@@ -209,12 +213,13 @@ LIB1FUNCS_EXTRA =
 # Assembler files should have names ending in `.asm'.
 LIB2FUNCS_EXTRA = 
 
+# Default float.h source to use for cross-compiler.
+CROSS_FLOAT_H=float.h-cross
+
 # Program to convert libraries.
 LIBCONVERT = 
 
 # Control whether header files are installed.
-# We will change this to install-fixincludes eventually.
-# It would be useful for people to try this now.
 INSTALL_HEADERS=install-headers
 
 # Select which version of fixincludes to use (I.E. regular versus SVR4)
@@ -257,7 +262,10 @@ HOST_OBSTACK=$(OBSTACK)
 ALL=all.internal
 
 # Choose the real install target.
-INSTALL_TARGET=install-native
+INSTALL_TARGET=install-normal
+
+# Source for float.h.  Overridden by cross-make.
+FLOAT_H=float.h-nat
 
 # End of variables for you to override.
 
@@ -404,10 +412,6 @@ LIB2FUNCS = _muldi3 _divdi3 _moddi3 _udivdi3 _umoddi3 _negdi2 \
 USER_H = va-alpha.h va-i860.h va-i960.h va-mips.h va-m88k.h \
     va-pa.h va-pyr.h va-sparc.h va-spur.h proto.h $(EXTRA_HEADERS)
 
-# All the header files that are installed for users from GCC itself.
-INSTALLED_H = float.h stddef.h stdarg.h varargs.h $(USER_H) limits.h \
-    syslimits.h
-
 # The files that "belong" in CONFIG_H are deliberately omitted
 # because having them there would not be useful in actual practice.
 # All they would do is cause complete recompilation every time
@@ -429,7 +433,7 @@ Makefile: $(srcdir)/Makefile.in $(srcdir)/configure $(srcdir)/version.c \
 
 all.internal: start.encap rest.encap
 # This is what to compile if making a cross-compiler.
-all.cross: native gcc-cross specs libgcc.a cross-test $(EXTRA_PARTS)
+all.cross: native gcc-cross specs libgcc.a stmp-headers cross-test $(EXTRA_PARTS)
 # This is what to compile if making gcc with a cross-compiler.
 all.build: native xgcc $(EXTRA_PARTS)
 # This is what must be made before installing GCC and converting libraries.
@@ -437,7 +441,7 @@ start.encap: native xgcc specs $(LIBGCC1) xlimits.h
 # Use this to make a GCC that will be used only to recompile GCC.
 for-bootstrap: start.encap libgcc.a
 # These can't be made, with COFF encapsulation, until after GCC can run.
-rest.encap: libgcc.a float.h  $(EXTRA_PARTS)
+rest.encap: libgcc.a stmp-headers $(EXTRA_PARTS)
 # This is what is made with the host's compiler
 # whether making a cross compiler or not.
 native: config.status cpp $(LANGUAGES) $(EXTRA_PASSES) $(EXTRA_PROGRAMS) $(USE_COLLECT2)
@@ -500,9 +504,17 @@ cc1plus:$(P) $(CPLUS_OBJS) $(OBJS) $(LIBDEPS)
 cc1obj:$(P) $(OBJC_OBJS) $(OBJS) $(LIBDEPS)
        $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o cc1obj $(OBJC_OBJS) $(OBJS) $(LIBS)
 
-float.h: enquire
-       -./enquire -f > tmp-float.h
-       mv tmp-float.h float.h
+# Copy float.h from its source.
+float.h: $(FLOAT_H)
+       cp $(FLOAT_H) float.h
+
+# Create float.h source for the native machine.
+float.h-nat: enquire
+       -./enquire -f > float.h-nat
+
+# Create a dummy float.h source for a cross-compiler.
+float.h-cross:
+       echo "#error float.h values not known for cross-compiler" > float.h-cross
 
 # Used to compile enquire with standard cc, but have forgotten why.
 # Let's try with GCC.
@@ -1240,6 +1252,57 @@ test-protoize-simple: ./protoize ./unprotoize $(GCC_PASSES)
        diff $(srcdir)/protoize.c tmp-proto.c | cat
        -rm -f tmp-proto.[cso]
 \f
+# Build the include directory.  The stamp files are stmp-* rather than
+# stamp-* so that mostlyclean does not force the include directory to
+# be rebuilt.
+
+stmp-headers: stmp-fixincludes $(USER_H) gvarargs.h gstdarg.h gstddef.h gsyslimits.h xlimits.h float.h
+# Copy in the headers provided with gcc.
+# The sed command gets just the last file name component;
+# this is necessary because VPATH could add a dirname.
+# Using basename would be simpler, but some systems don't have it.
+       objdir=`pwd`; \
+       cd $(srcdir); \
+       for file in $(USER_H); do \
+         realfile=`echo $$file | sed -e 's|.*/\([^/]*\)$$|\1|'`; \
+         cp $$realfile $$objdir/include; \
+         chmod a+r $$objdir/include/$$realfile; \
+       done
+       -cd include; \
+       if [ -f limits.h ]; then \
+         rm -f syslimits.h; \
+         mv limits.h syslimits.h; \
+       else \
+         cp $(srcdir)/gsyslimits.h syslimits.h; \
+       fi
+       chmod a+r include/syslimits.h
+       cp $(srcdir)/gvarargs.h include/varargs.h
+       chmod a+r include/varargs.h
+       cp $(srcdir)/gstdarg.h include/stdarg.h
+       chmod a+r include/stdarg.h
+       cp $(srcdir)/gstddef.h include/stddef.h
+       chmod a+r include/stddef.h
+       cp xlimits.h include/limits.h
+       chmod a+r include/limits.h
+       cp float.h include/float.h
+       chmod a+r include/float.h
+# Install the README
+       cp $(srcdir)/README-fixinc include/README
+       chmod a+r include/README
+       touch stmp-headers
+
+# Build fixed copies of system files.
+stmp-fixincludes: $(srcdir)/$(FIXINCLUDES)
+       rm -rf include
+       mkdir include
+       for dir in $(SYSTEM_HEADER_DIR) $(OTHER_FIXINCLUDES_DIRS); do \
+         if [ -d $$dir ]; \
+         then \
+           $(srcdir)/$(FIXINCLUDES) include $$dir $(srcdir); \
+         else true; fi; \
+       done
+       touch stmp-fixincludes
+\f
 # Remake the info files.
 
 doc: $(srcdir)/cpp.info $(srcdir)/gcc.info
@@ -1317,6 +1380,8 @@ clean: mostlyclean
 # but what better way is there?
        -rm -f libgcc.a libgcc1.a libgcc2.a libgcc2.ready libgcc1.null
        -rm -f *.dvi
+# Delete the include directory.
+       -rm -rf stmp-* include
 
 # Delete all files that users would normally create
 # while building and installing GCC.
@@ -1347,20 +1412,14 @@ realclean: distclean
        -rm -f gplus.info* gplus.??s gplus.*aux
 \f
 # Entry points `install' and `uninstall'.
-# Also temporarily `install-fixincludes' could replace `install-headers'.
 # Also use `install-collect2' to install collect2 when the config files don't.
 
 # The semicolon is to prevent the install.sh -> install default rule
 # from doing anything.
 install: $(INSTALL_TARGET) ;
 
-# Copy the files of native compiler into directories where they will be run.
-install-native: install-common install-libgcc $(INSTALL_HEADERS) \
-   install-man
-
-# Copy the files of cross compiler into directories where they will be run.
-install-cross: install-common install-common-headers \
-   install-man install-libgcc
+# Copy the compiler files into directories where they will be run.
+install-normal: install-common install-libgcc $(INSTALL_HEADERS) install-man
 
 # Do nothing while making gcc with a cross-compiler. The person who
 # makes gcc for the target machine has to know how to put a complete
@@ -1496,37 +1555,41 @@ install-libobjc: libobjc.a install-dir
          chmod a-x $(libsubdir)/libobjc.a; \
        else true; fi
 
-# Install all the header files for native compiler.
-install-headers: install-common-headers install-float-h install-limits-h
+# Install all the header files built in the include subdirectory.
+install-headers: install-include-dir $(INSTALL_HEADERS_DIR) install-assert-h
+# Fix symlinks to absolute paths in the installed include directory to
+# point to the installed directory, not the build directory.
+       -files=`cd $(libsubdir)/include; find . -type l -print 2>/dev/null`; \
+       if [ $$? -eq 0 ]; then \
+         dir=`cd include; pwd`; \
+         for i in $$files; do \
+           dest=`ls -ld $(libsubdir)/include/$$i | sed -n 's/.*-> //p'`; \
+           if expr "$$dest" : "$$dir.*" > /dev/null; then \
+             rm -f $(libsubdir)/include/$$i; \
+             ln -s $(libsubdir)/include`echo "$$dest" | sed "s|$$dir||"` $(libsubdir)/include/$$i; \
+           fi; \
+         done; \
+       fi
 
-# Install float.h for native compiler.
-install-float-h: float.h install-dir
-       -rm -f $(libsubdir)/include/float.h
-       $(INSTALL_DATA) float.h $(libsubdir)/include/float.h
-       chmod a-x $(libsubdir)/include/float.h
+# Create or recreate the gcc private include file directory.
+install-include-dir:
+       -rm -rf $(libsubdir)/include
+       mkdir $(libsubdir)/include
+       -chmod a+rx $(libsubdir)/include
+
+# Install the include directory using tar.
+install-headers-tar: stmp-headers install-include-dir
+       ( cd include; tar cf - . ) | (cd $(libsubdir)/include; tar xpBf - )
+
+# Install the include directory using cpio.
+install-headers-cpio: stmp-headers install-include-dir
+       ( cd include; find . -print | cpio -pdum $(libsubdir)/include )
 
-# Install limits.h.
-install-limits-h: xlimits.h install-dir
-       -rm -f $(libsubdir)/include/limits.h
-       $(INSTALL_DATA) xlimits.h $(libsubdir)/include/limits.h
-       chmod a-x $(libsubdir)/include/limits.h
-
-# Install the fixed headers that are the same for all machines.
-install-common-headers: install-dir $(USER_H) gvarargs.h gstdarg.h gstddef.h gsyslimits.h assert.h
-       -if [ -d $(libsubdir)/include ] ; then true ; else mkdir $(libsubdir)/include ; fi
-       -chmod ugo+rx $(libsubdir)/include
-# Must compute $(libsubdir) before the cd; the awk script won't work after.
-       shelllibsubdir=$(libsubdir); \
-       cd $(srcdir); \
-       for file in $(USER_H); do \
-          rm -f $$shelllibsubdir/include/`basename $$file`; \
-          $(INSTALL_DATA) `basename $$file` $$shelllibsubdir/include/`basename $$file`; \
-          chmod a-x $$shelllibsubdir/include/`basename $$file`; \
-       done
 # Put assert.h in /usr/local/include, so it won't override GNU libc's assert.h.
 # Don't replace the assert.h already there if it is not from GCC.
 # This code would be simpler if it tested for -f ... && ! grep ...
 # but supposedly the ! operator is missing in sh on some systems.
+install-assert-h: assert.h install-dir
        if [ -f $(assertdir)/assert.h ]; \
        then \
          if grep "__eprintf" $(assertdir)/assert.h >/dev/null; \
@@ -1541,67 +1604,6 @@ install-common-headers: install-dir $(USER_H) gvarargs.h gstdarg.h gstddef.h gsy
          $(INSTALL_DATA) $(srcdir)/assert.h $(assertdir)/assert.h; \
          chmod a-x $(assertdir)/assert.h; \
        fi
-       -rm -f $(libsubdir)/include/syslimits.h
-       $(INSTALL_DATA) $(srcdir)/gsyslimits.h $(libsubdir)/include/syslimits.h
-       chmod a-x $(libsubdir)/include/syslimits.h
-       -rm -f $(libsubdir)/include/varargs.h
-       $(INSTALL_DATA) $(srcdir)/gvarargs.h $(libsubdir)/include/varargs.h
-       chmod a-x $(libsubdir)/include/varargs.h
-       -rm -f $(libsubdir)/include/stdarg.h
-       $(INSTALL_DATA) $(srcdir)/gstdarg.h $(libsubdir)/include/stdarg.h
-       chmod a-x $(libsubdir)/include/stdarg.h
-       -rm -f $(libsubdir)/include/stddef.h
-       $(INSTALL_DATA) $(srcdir)/gstddef.h $(libsubdir)/include/stddef.h
-       chmod a-x $(libsubdir)/include/stddef.h
-# This is turned off because fixinc.svr4 can now get it directly from srcdir.
-## Copy byteorder.h into the object file directory 
-## so that fixinc.svr4 can get at it if necessary.
-## If the dirs are the same, this won't do anything.
-## Delete file first in case it is read-only
-#      -if [ x`cd $(srcdir);pwd` != x`pwd` ]; then rm -f byteorder.h; else true; fi
-#      -cp $(srcdir)/byteorder.h . > /dev/null 2>&1
-
-# $(libsubdir)/include:
-#      -if [ -d $(libsubdir)/include ] ; then true ; else mkdir $(libsubdir)/include ; fi
-#      -chmod ugo+rx $(libsubdir)/include
-
-# This appears not to work.  It isn't clear how to fix it.
-# $(libsubdir)/include/README: $(libsubdir)/include $(srcdir)/$(FIXINCLUDES)
-#      LIB=$(libsubdir)/include $(srcdir)/$(FIXINCLUDES)
-#      $(INSTALL_DATA) $(srcdir)/fixincludes-README $@
-#      chmod a-x $@
-
-# Run fixincludes in the proper directory.
-install-fixincludes: install-headers
-       rm -rf $(libsubdir)/tmp
-       mkdir $(libsubdir)/tmp
-# Move aside the headers that come from GCC; delete all else.
-# The sed command gets just the last file name component;
-# this is necessary because VPATH could add a dirname.
-# Using basename would be simpler, but some systems don't have it.
-       cd $(libsubdir)/include; \
-       for file in $(INSTALLED_H); do \
-         realfile=`echo $$file | sed -e 's|.*/\([^/]*\)$$|\1|'`; \
-         mv $$realfile ../tmp; \
-       done; \
-       rm -rf *
-# Install fixed copies of system files.
-       for dir in $(SYSTEM_HEADER_DIR) $(OTHER_FIXINCLUDES_DIRS); do \
-         if [ -d $$dir ]; \
-         then \
-           $(srcdir)/$(FIXINCLUDES) $(libsubdir)/include $$dir $(srcdir); \
-         else true; fi; \
-       done
-       -cd $(libsubdir)/include; \
-       if [ -f limits.h ]; then \
-         rm -f ../tmp/syslimits.h; \
-         cp limits.h ../tmp/syslimits.h; \
-       else true; fi
-# Bring back gcc's header files.
-       cd $(libsubdir)/include; mv ../tmp/* .; rmdir ../tmp
-# Install the README
-       $(INSTALL_DATA) $(srcdir)/README-fixinc $(libsubdir)/include/README
-       chmod a-x $(libsubdir)/include/README
 
 # Use this target to install the program `collect2' under the name `ld'.
 install-collect2: collect2
index 5af66f0..80bcbcf 100644 (file)
@@ -13,11 +13,11 @@ RANLIB_TEST = $(RANLIB_TEST_FOR_TARGET)
 # Dir to search for system headers.  Normally /usr/include.
 SYSTEM_HEADER_DIR = $(tooldir)/include
 
-# Cause installation using install-cross.
-INSTALL_TARGET = install-cross
-
 # Don't try to compile the things we can't compile.
 ALL = all.cross
 
+# Use cross-compiler version of float.h.
+FLOAT_H = $(CROSS_FLOAT_H)
+
 # Don't install assert.h in /usr/local/include.
 assertdir = $(tooldir)/include