Patchwork make install-strip with binutils

login
register
mail settings
Submitter Ralf Wildenhues
Date Nov. 20, 2010, 7:38 p.m.
Message ID <20101120193829.GC24876@gmx.de>
Download mbox | patch
Permalink /patch/72361/
State New
Headers show

Comments

Ralf Wildenhues - Nov. 20, 2010, 7:38 p.m.
* Gerald Pfeifer wrote on Sat, Nov 20, 2010 at 01:24:13AM CET:
> On Wed, 17 Nov 2010, Ralf Wildenhues wrote:
> > Now, as GCC build maintainer, it seems most of this patch is free to
> > proceed on (still, I'd welcome any review!), and the src bits are
> > trivial.  The web update has been OKed off-list by Gerald, so the only
> > remaining bits are in gcc/doc/install.texi.  Is that part of the build
> > maintainer role too, or OK to go ahead with?
> 
> I can approve that one, too. :-)
> 
> There is one thing there that may confuse our users a bit and that is
> the following:

Fixed according to your suggestion.  Thanks for the review!

I noticed one more problem: target-specific exports are supported since
GNU make 3.81 only, but GCC only requires 3.80.  Luckily nothing besides
install-sh uses STRIPPROG, and install-sh tests for non-empty rather
than unset variable for its semantics, so we can export the variable
from gcc/Makefile.in.  The gcc/ part of the final patch is shown below,
the rest as in <http://gcc.gnu.org/ml/gcc-patches/2010-11/msg00192.html>.

I've committed the whole patch to GCC and src now.

Cheers,
Ralf

PR other/46202: implement install-strip.

gcc/:
	PR other/46202
	* Makefile.in (install_sh, INSTALL_STRIP_PROGRAM): New
	variables.
	(AR_FOR_TARGET, RANLIB_FOR_TARGET, STRIP_FOR_TARGET): Fix
	shell quoting.
	(STRIP_FOR_TARGET): Look for in-tree strip under name strip-new.
	(install-strip): New target.
	(STRIPPROG): New variable, exported if STRIP is set.
	* doc/install.texi (Final install): Minor markup and code style
	fixes.  Document install-strip target.
NightStrike - Nov. 20, 2010, 7:42 p.m.
On Sat, Nov 20, 2010 at 2:38 PM, Ralf Wildenhues <Ralf.Wildenhues@gmx.de> wrote:
> * Gerald Pfeifer wrote on Sat, Nov 20, 2010 at 01:24:13AM CET:
>> On Wed, 17 Nov 2010, Ralf Wildenhues wrote:
>> > Now, as GCC build maintainer, it seems most of this patch is free to
>> > proceed on (still, I'd welcome any review!), and the src bits are
>> > trivial.  The web update has been OKed off-list by Gerald, so the only
>> > remaining bits are in gcc/doc/install.texi.  Is that part of the build
>> > maintainer role too, or OK to go ahead with?
>>
>> I can approve that one, too. :-)
>>
>> There is one thing there that may confuse our users a bit and that is
>> the following:
>
> Fixed according to your suggestion.  Thanks for the review!

This applies to anything in top level configure, right?  So we can
install-strip GCC, binutils, gdb, etc?
Ralf Wildenhues - Nov. 20, 2010, 7:45 p.m.
* NightStrike wrote on Sat, Nov 20, 2010 at 08:42:51PM CET:
> This applies to anything in top level configure, right?  So we can
> install-strip GCC, binutils, gdb, etc?

Yes.  :-)
Ralf Wildenhues - Nov. 20, 2010, 7:51 p.m.
[ dropping gdb-patches and binutils ]

* Ralf Wildenhues wrote on Sat, Nov 20, 2010 at 08:38:29PM CET:
> I've committed the whole patch to GCC and src now.

So I managed to botch up regenerated files, as git was carrying over the
diffs for me, but that failed to take the Go-related changes in the
meantime into account.  Fixed now by rerunning 'autogen Makefile.def' in
the GCC tree (the src tree was correct).

Sorry for the blunder,
Ralf

2010-11-20  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>

        * Makefile.in: Regenerate.
NightStrike - Nov. 21, 2010, 1:28 a.m.
On Sat, Nov 20, 2010 at 2:45 PM, Ralf Wildenhues <Ralf.Wildenhues@gmx.de> wrote:
> * NightStrike wrote on Sat, Nov 20, 2010 at 08:42:51PM CET:
>> This applies to anything in top level configure, right?  So we can
>> install-strip GCC, binutils, gdb, etc?
>
> Yes.  :-)
>

You are quite awesome :)

Patch

diff --git a/gcc/Makefile.in b/gcc/Makefile.in
index 5491aeaf..98f06e9 100644
--- a/gcc/Makefile.in
+++ b/gcc/Makefile.in
@@ -22,7 +22,7 @@ 
 #<http://www.gnu.org/licenses/>.
 
 # The targets for external use include:
-# all, doc, install, install-cross, install-cross-rest,
+# all, doc, install, install-cross, install-cross-rest, install-strip,
 # uninstall, TAGS, mostlyclean, clean, distclean, maintainer-clean.
 
 # This is the default target.
@@ -255,6 +255,8 @@  LN_S=@LN_S@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_SCRIPT = @INSTALL@
+install_sh = $(SHELL) $(srcdir)/../install-sh
+INSTALL_STRIP_PROGRAM = $(install_sh) -c -s
 MAKEINFO = @MAKEINFO@
 MAKEINFOFLAGS = --no-split
 TEXI2DVI = texi2dvi
@@ -387,7 +389,7 @@  AR_FOR_TARGET := $(shell \
     if [ "$(host)" = "$(target)" ] ; then \
       echo $(AR); \
     else \
-       t='$(program_transform_name)'; echo ar | sed -e $$t ; \
+       t='$(program_transform_name)'; echo ar | sed -e "$$t" ; \
     fi; \
   fi)
 AR_FLAGS_FOR_TARGET =
@@ -402,20 +404,20 @@  RANLIB_FOR_TARGET := $(shell \
     if [ "$(host)" = "$(target)" ] ; then \
       echo $(RANLIB); \
     else \
-       t='$(program_transform_name)'; echo ranlib | sed -e $$t ; \
+       t='$(program_transform_name)'; echo ranlib | sed -e "$$t" ; \
     fi; \
   fi)
 ORIGINAL_LD_FOR_TARGET = @ORIGINAL_LD_FOR_TARGET@
 ORIGINAL_NM_FOR_TARGET = @ORIGINAL_NM_FOR_TARGET@
 NM_FOR_TARGET = ./nm
 STRIP_FOR_TARGET := $(shell \
-  if [ -f $(objdir)/../binutils/strip ] ; then \
-    echo $(objdir)/../binutils/strip ; \
+  if [ -f $(objdir)/../binutils/strip-new ] ; then \
+    echo $(objdir)/../binutils/strip-new ; \
   else \
     if [ "$(host)" = "$(target)" ] ; then \
       echo strip; \
     else \
-       t='$(program_transform_name)'; echo strip | sed -e $$t ; \
+       t='$(program_transform_name)'; echo strip | sed -e "$$t" ; \
     fi; \
   fi)
 
@@ -4488,7 +4490,7 @@  maintainer-clean:
 	-rm -f gcc.??s gcc.*aux
 	-rm -f $(gcc_docdir)/*.info $(gcc_docdir)/*.1 $(gcc_docdir)/*.7 $(gcc_docdir)/*.dvi $(gcc_docdir)/*.pdf
 #
-# Entry points `install' and `uninstall'.
+# Entry points `install', `install-strip', and `uninstall'.
 # Also use `install-collect2' to install collect2 when the config files don't.
 
 # Copy the compiler files into directories where they will be run.
@@ -4502,6 +4504,13 @@  ifeq ($(enable_plugin),yes)
 install: install-plugin
 endif
 
+install-strip: override INSTALL_PROGRAM = $(INSTALL_STRIP_PROGRAM)
+ifneq ($(STRIP),)
+install-strip: STRIPPROG = $(STRIP)
+export STRIPPROG
+endif
+install-strip: install
+
 # Handle cpp installation.
 install-cpp: installdirs cpp$(exeext)
 	-rm -f $(DESTDIR)$(bindir)/$(CPP_INSTALL_NAME)$(exeext)
diff --git a/gcc/config/i386/t-cygming b/gcc/config/i386/t-cygming
index 183e545..6395ff9 100644
--- a/gcc/config/i386/t-cygming
+++ b/gcc/config/i386/t-cygming
@@ -92,7 +92,7 @@  SHLIB_LINK = $(LN_S) -f $(SHLIB_MAP) $(SHLIB_MAP).def && \
 # libgcc.mk.  We want this delayed until actual install time.
 SHLIB_INSTALL = \
 	$$(mkinstalldirs) $$(DESTDIR)$$(slibdir)$(SHLIB_SLIBDIR_QUAL); \
-	$(INSTALL_PROGRAM) $(SHLIB_DIR)/$(SHLIB_SONAME) \
+	$(INSTALL) $(SHLIB_DIR)/$(SHLIB_SONAME) \
 	  $$(DESTDIR)$$(bindir)/$(SHLIB_SONAME); \
 	$(INSTALL_DATA) $(SHLIB_DIR)/$(SHLIB_IMPLIB) \
 	  $$(DESTDIR)$$(slibdir)$(SHLIB_SLIBDIR_QUAL)/$(SHLIB_IMPLIB)
diff --git a/gcc/doc/install.texi b/gcc/doc/install.texi
index 1c9d463..e67793a 100644
--- a/gcc/doc/install.texi
+++ b/gcc/doc/install.texi
@@ -2617,7 +2617,7 @@  messages may be automatically processed.
 
 Now that GCC has been built (and optionally tested), you can install it with
 @smallexample
-cd @var{objdir}; make install
+cd @var{objdir} && make install
 @end smallexample
 
 We strongly recommend to install into a target directory where there is
@@ -2653,7 +2653,8 @@  jail can be achieved with the command
 make DESTDIR=@var{path-to-rootdir} install
 @end smallexample
 
-@noindent where @var{path-to-rootdir} is the absolute path of
+@noindent
+where @var{path-to-rootdir} is the absolute path of
 a directory relative to which all installation paths will be
 interpreted.  Note that the directory specified by @code{DESTDIR}
 need not exist yet; it will be created if necessary.
@@ -2667,6 +2668,12 @@  it will not be created otherwise.  This is regarded as a feature,
 not as a bug, because it gives slightly more control to the packagers
 using the @code{DESTDIR} feature.
 
+You can install stripped programs and libraries with
+
+@smallexample
+make install-strip
+@end smallexample
+
 If you are bootstrapping a released version of GCC then please
 quickly review the build status page for your release, available from
 @uref{http://gcc.gnu.org/buildstat.html}.