[PATCH v3] make: add INSTALL_STRIP option variable

Subsystems: kernel build + files below scripts/ (unless maintained elsewhere), the rest

STALE1835d

4 messages, 2 authors, 2021-09-18 · open the first message on its own page

[PATCH v3] make: add INSTALL_STRIP option variable

From: Bagas Sanjaya <hidden>
Date: 2021-09-02 12:14:50

From: Junio C Hamano <redacted>

Add $(INSTALL_STRIP), which allows passing stripping options to
$(INSTALL).

For this to work, installing executables must be split to installing
compiled binaries and scripts portions, since $(INSTALL_STRIP) is only
meaningful to the former.

Users can set this variable depending on their system. For example,
Linux users can use `-s --strip-program=strip`, while FreeBSD users can
simply set to `-s` and choose strip program with $STRIPBIN.

Signed-off-by: Bagas Sanjaya <redacted>
---

 Changes from v3 [1]:
   - Squash suggestion patch from Junio, which suggests dropping
     install-stripped target and rename $(INSTALL_OPTS) to
     $(INSTALL_STRIP).
   - Describe $(INSTALL_STRIP) usage on the top of Makefile

 Note: In the future, we may add global $(INSTALL_OPTS), which applies
 to both compiled binaries and scripts. When such happens, we should
 rename $(INSTALL_STRIP) to $(INSTALL_STRIP_OPTS).

 [1]: https://lore.kernel.org/git/xmqqo89cqkt9.fsf@gitster.g/T/#t

 Makefile | 15 ++++++++++++---
 1 file changed, 12 insertions(+), 3 deletions(-)
diff --git a/Makefile b/Makefile
index d1feab008f..ebef4da50c 100644
--- a/Makefile
+++ b/Makefile
@@ -465,6 +465,9 @@ all::
 # the global variable _wpgmptr containing the absolute path of the current
 # executable (this is the case on Windows).
 #
+# INSTALL_STRIP can be set to "-s" to strip binaries during installation,
+# if your $(INSTALL) command supports the option.
+#
 # Define GENERATE_COMPILATION_DATABASE to "yes" to generate JSON compilation
 # database entries during compilation if your compiler supports it, using the
 # `-MJ` flag. The JSON entries will be placed in the `compile_commands/`
@@ -3004,7 +3007,8 @@ mergetools_instdir = $(prefix)/$(mergetoolsdir)
 endif
 mergetools_instdir_SQ = $(subst ','\'',$(mergetools_instdir))
 
-install_bindir_programs := $(patsubst %,%$X,$(BINDIR_PROGRAMS_NEED_X)) $(BINDIR_PROGRAMS_NO_X)
+install_bindir_xprograms := $(patsubst %,%$X,$(BINDIR_PROGRAMS_NEED_X))
+install_bindir_programs := $(install_bindir_xprograms) $(BINDIR_PROGRAMS_NO_X)
 
 .PHONY: profile-install profile-fast-install
 profile-install: profile
@@ -3013,12 +3017,17 @@ profile-install: profile
 profile-fast-install: profile-fast
 	$(MAKE) install
 
+INSTALL_STRIP =
+
 install: all
 	$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(bindir_SQ)'
 	$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(gitexec_instdir_SQ)'
-	$(INSTALL) $(ALL_PROGRAMS) '$(DESTDIR_SQ)$(gitexec_instdir_SQ)'
+	$(INSTALL) $(INSTALL_STRIP) $(PROGRAMS) '$(DESTDIR_SQ)$(gitexec_instdir_SQ)'
+	$(INSTALL) $(SCRIPTS) '$(DESTDIR_SQ)$(gitexec_instdir_SQ)'
 	$(INSTALL) -m 644 $(SCRIPT_LIB) '$(DESTDIR_SQ)$(gitexec_instdir_SQ)'
-	$(INSTALL) $(install_bindir_programs) '$(DESTDIR_SQ)$(bindir_SQ)'
+	$(INSTALL) $(INSTALL_STRIP) $(install_bindir_xprograms) '$(DESTDIR_SQ)$(bindir_SQ)'
+	$(INSTALL) $(BINDIR_PROGRAMS_NO_X) '$(DESTDIR_SQ)$(bindir_SQ)'
+
 ifdef MSVC
 	# We DO NOT install the individual foo.o.pdb files because they
 	# have already been rolled up into the exe's pdb file.
base-commit: 6c40894d2466d4e7fddc047a05116aa9d14712ee
-- 
2.25.1

Re: [PATCH v3] make: add INSTALL_STRIP option variable

From: Ævar Arnfjörð Bjarmason <hidden>
Date: 2021-09-16 10:13:20

On Thu, Sep 02 2021, Bagas Sanjaya wrote:
From: Junio C Hamano <redacted>

Add $(INSTALL_STRIP), which allows passing stripping options to
$(INSTALL).

For this to work, installing executables must be split to installing
compiled binaries and scripts portions, since $(INSTALL_STRIP) is only
meaningful to the former.

Users can set this variable depending on their system. For example,
Linux users can use `-s --strip-program=strip`, while FreeBSD users can
simply set to `-s` and choose strip program with $STRIPBIN.

Signed-off-by: Bagas Sanjaya <redacted>
---

 Changes from v3 [1]:
   - Squash suggestion patch from Junio, which suggests dropping
     install-stripped target and rename $(INSTALL_OPTS) to
     $(INSTALL_STRIP).
   - Describe $(INSTALL_STRIP) usage on the top of Makefile

 Note: In the future, we may add global $(INSTALL_OPTS), which applies
 to both compiled binaries and scripts. When such happens, we should
 rename $(INSTALL_STRIP) to $(INSTALL_STRIP_OPTS).
I see this landed on "master" already, but in case you're interested on
follow-ing up:

I think the suggestion in
https://lore.kernel.org/git/xmqqo89cqkt9.fsf@gitster.g/ is to make this
a boolean variable, and in any case I think that makes more sense here,
since....
quoted hunk
 [1]: https://lore.kernel.org/git/xmqqo89cqkt9.fsf@gitster.g/T/#t

 Makefile | 15 ++++++++++++---
 1 file changed, 12 insertions(+), 3 deletions(-)
diff --git a/Makefile b/Makefile
index d1feab008f..ebef4da50c 100644
--- a/Makefile
+++ b/Makefile
@@ -465,6 +465,9 @@ all::
 # the global variable _wpgmptr containing the absolute path of the current
 # executable (this is the case on Windows).
 #
+# INSTALL_STRIP can be set to "-s" to strip binaries during installation,
+# if your $(INSTALL) command supports the option.
+#
 # Define GENERATE_COMPILATION_DATABASE to "yes" to generate JSON compilation
 # database entries during compilation if your compiler supports it, using the
 # `-MJ` flag. The JSON entries will be placed in the `compile_commands/`
@@ -3004,7 +3007,8 @@ mergetools_instdir = $(prefix)/$(mergetoolsdir)
 endif
 mergetools_instdir_SQ = $(subst ','\'',$(mergetools_instdir))
 
-install_bindir_programs := $(patsubst %,%$X,$(BINDIR_PROGRAMS_NEED_X)) $(BINDIR_PROGRAMS_NO_X)
+install_bindir_xprograms := $(patsubst %,%$X,$(BINDIR_PROGRAMS_NEED_X))
+install_bindir_programs := $(install_bindir_xprograms) $(BINDIR_PROGRAMS_NO_X)
 
 .PHONY: profile-install profile-fast-install
 profile-install: profile
@@ -3013,12 +3017,17 @@ profile-install: profile
 profile-fast-install: profile-fast
 	$(MAKE) install
 
+INSTALL_STRIP =
+
 install: all
 	$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(bindir_SQ)'
 	$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(gitexec_instdir_SQ)'
-	$(INSTALL) $(ALL_PROGRAMS) '$(DESTDIR_SQ)$(gitexec_instdir_SQ)'
+	$(INSTALL) $(INSTALL_STRIP) $(PROGRAMS) '$(DESTDIR_SQ)$(gitexec_instdir_SQ)'
+	$(INSTALL) $(SCRIPTS) '$(DESTDIR_SQ)$(gitexec_instdir_SQ)'
 	$(INSTALL) -m 644 $(SCRIPT_LIB) '$(DESTDIR_SQ)$(gitexec_instdir_SQ)'
-	$(INSTALL) $(install_bindir_programs) '$(DESTDIR_SQ)$(bindir_SQ)'
+	$(INSTALL) $(INSTALL_STRIP) $(install_bindir_xprograms) '$(DESTDIR_SQ)$(bindir_SQ)'
+	$(INSTALL) $(BINDIR_PROGRAMS_NO_X) '$(DESTDIR_SQ)$(bindir_SQ)'
+
 ifdef MSVC
 	# We DO NOT install the individual foo.o.pdb files because they
 	# have already been rolled up into the exe's pdb file.
base-commit: 6c40894d2466d4e7fddc047a05116aa9d14712ee
...this really is not an INSTALL_STRIP but (using some combination of
your own naming) a "INSTALL_XPROGRAMS_OPTS" or "INSTALL_XOPTS". I.e. you
can supply arbitrary options to "install" with this, but only for
binaries.

Also doesn't this misbehave under MSVC when combined with *.pdb files?
See dce7d295514 (msvc: support building Git using MS Visual C++,
2019-06-25) and a8b5355d808 (msvc: copy the correct `.pdb` files in the
Makefile target `install`, 2020-09-21) , i.e. the code at the start of
your diff context.

Does stripping the main binary while having a *.pdb file error or MSCV,
or make the *.pdb file useless, or is *.pdb an unconditional equivalent
of INSTALL_STRIP=-s on MSCV that we should disable if this
hopefully-then-boolean INSTALL_STRIP option is enabled?

Re: [PATCH v3] make: add INSTALL_STRIP option variable

From: Bagas Sanjaya <hidden>
Date: 2021-09-16 10:36:26

On 16/09/21 16.50, Ævar Arnfjörð Bjarmason wrote:
...this really is not an INSTALL_STRIP but (using some combination of
your own naming) a "INSTALL_XPROGRAMS_OPTS" or "INSTALL_XOPTS". I.e. you
can supply arbitrary options to "install" with this, but only for
binaries.
I think it should have been "INSTALL_STRIP_OPTS". This could haven't 
been issue if we add global (applicable tobinaries and scripts) 
"INSTALL_OPTS".
Also doesn't this misbehave under MSVC when combined with *.pdb files?
See dce7d295514 (msvc: support building Git using MS Visual C++,
2019-06-25) and a8b5355d808 (msvc: copy the correct `.pdb` files in the
Makefile target `install`, 2020-09-21) , i.e. the code at the start of
your diff context.

Does stripping the main binary while having a *.pdb file error or MSCV,
or make the *.pdb file useless, or is *.pdb an unconditional equivalent
of INSTALL_STRIP=-s on MSCV that we should disable if this
hopefully-then-boolean INSTALL_STRIP option is enabled?
I'm not familiar with MSVC, so I can't tell further except you can pass 
null ("") to INSTALL_STRIP.

-- 
An old man doll... just what I always wanted! - Clara

Re: [PATCH v3] make: add INSTALL_STRIP option variable

From: Ævar Arnfjörð Bjarmason <hidden>
Date: 2021-09-18 07:49:49

On Thu, Sep 16 2021, Bagas Sanjaya wrote:
On 16/09/21 16.50, Ævar Arnfjörð Bjarmason wrote:
quoted
...this really is not an INSTALL_STRIP but (using some combination of
your own naming) a "INSTALL_XPROGRAMS_OPTS" or "INSTALL_XOPTS". I.e. you
can supply arbitrary options to "install" with this, but only for
binaries.
I think it should have been "INSTALL_STRIP_OPTS". This could haven't
been issue if we add global (applicable tobinaries and scripts) 
"INSTALL_OPTS".
Isn't the reason to have that split-up because it would break if you try
to strip(1) a Perl or shellscript?
quoted
Also doesn't this misbehave under MSVC when combined with *.pdb files?
See dce7d295514 (msvc: support building Git using MS Visual C++,
2019-06-25) and a8b5355d808 (msvc: copy the correct `.pdb` files in the
Makefile target `install`, 2020-09-21) , i.e. the code at the start of
your diff context.
Does stripping the main binary while having a *.pdb file error or
MSCV,
or make the *.pdb file useless, or is *.pdb an unconditional equivalent
of INSTALL_STRIP=-s on MSCV that we should disable if this
hopefully-then-boolean INSTALL_STRIP option is enabled?
I'm not familiar with MSVC, so I can't tell further except you can
pass null ("") to INSTALL_STRIP.
Yes, to be clear I'm not asking for practical assistance in building git
with MSVC.

I'm pointing out that it seems that the option you added introduces an
edge case in how we combine with an existing option/ifdef that may not
be desirable, and that you might be interested in looking at
it/submitting a follow-up patch if it does turn out that the interaction
is undesirable.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help