* [Buildroot] [PATCH 0 of 2 v3-resend] Add find utility functions / exclude files from strip
@ 2012-02-09 20:09 Thomas De Schampheleire
2012-02-09 20:09 ` [Buildroot] [PATCH 1 of 2 v3-resend] Makefile.package.in: add utility functions find*clauses and notfirstword Thomas De Schampheleire
2012-02-09 20:09 ` [Buildroot] [PATCH 2 of 2 v3-resend] build: add option to exclude executables/dirs from being stripped Thomas De Schampheleire
0 siblings, 2 replies; 6+ messages in thread
From: Thomas De Schampheleire @ 2012-02-09 20:09 UTC (permalink / raw)
To: buildroot
This patch series adds a few utility functions to Makefile.package.in that
help in composing find commands, and uses these functions to exclude
user-configured files and directories from being stripped in target-finalize.
The previous version of this series also modified the Python configuration to
allow for a 'reduced Python'. These patches were left out for now, as Thomas
Petazzoni raised some objections regarding the two-faced configuration. I hope
we can continue the discussion about this topic in that thread.
Thomas, you also had comments on the complexity of the find*clauses functions.
If you have alternative suggestions, please let me know. Thanks.
Signed-off-by: Thomas De Schampheleire <thomas.de.schampheleire@gmail.com>
---
v3: update based on review comments, remove Python changes for now
v2: simplify find utilities
Config.in | 19 +++++++++++++++++++
Makefile | 9 +++++++--
package/Makefile.package.in | 11 +++++++++++
3 files changed, 37 insertions(+), 2 deletions(-)
^ permalink raw reply [flat|nested] 6+ messages in thread
* [Buildroot] [PATCH 1 of 2 v3-resend] Makefile.package.in: add utility functions find*clauses and notfirstword
2012-02-09 20:09 [Buildroot] [PATCH 0 of 2 v3-resend] Add find utility functions / exclude files from strip Thomas De Schampheleire
@ 2012-02-09 20:09 ` Thomas De Schampheleire
2012-02-11 16:57 ` Arnout Vandecappelle
2012-02-09 20:09 ` [Buildroot] [PATCH 2 of 2 v3-resend] build: add option to exclude executables/dirs from being stripped Thomas De Schampheleire
1 sibling, 1 reply; 6+ messages in thread
From: Thomas De Schampheleire @ 2012-02-09 20:09 UTC (permalink / raw)
To: buildroot
This patch adds a few utility functions to Makefile.package.in.
Functions finddirclauses and findfileclauses help in building a find command
that skips a set of directories and performs operations on a set of files.
This pattern can for example be used to keep certain files or directories from
being stripped, or to remove certain files from a package installation.
The notfirstword function is the inverse of the 'firstword' function in make:
it returns all but the first word.
Signed-off-by: Thomas De Schampheleire <thomas.de.schampheleire@gmail.com>
Reviewed-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>
---
v3: use -path instead of -wholename; fix a bug in finddirclauses. Thanks, Cam.
v2: integrate _cont variants in main find*clauses functions. Thanks, Arnout.
package/Makefile.package.in | 11 +++++++++++
1 files changed, 11 insertions(+), 0 deletions(-)
diff --git a/package/Makefile.package.in b/package/Makefile.package.in
--- a/package/Makefile.package.in
+++ b/package/Makefile.package.in
@@ -87,6 +87,17 @@ MESSAGE = echo "$(TERM_BOLD)>>> $($(PKG)
TERM_BOLD := $(shell tput smso)
TERM_RESET := $(shell tput rmso)
+# Utility functions for 'find'
+# findfileclauses: creates "-name 'X' -o -name 'Y'"
+# [1:namelist]
+findfileclauses=-name '$(firstword $(1))' $(patsubst %,-o -name '%',$(call notfirstword,$(1)))
+# finddirclauses: creates "-path 'basedir/dirX' -o -path 'basedir/dirY'"
+# [1:basedir, 2:namelist]
+finddirclauses=-path '$(1)/$(firstword $(2))' $(patsubst %,-o -path '$(1)/%',$(call notfirstword,$(2)))
+
+# Miscellaneous utility functions
+notfirstword=$(wordlist 2,$(words $(1)),$(1))
+
# Download method commands
WGET:=$(call qstrip,$(BR2_WGET)) $(QUIET)
SVN:=$(call qstrip,$(BR2_SVN))
^ permalink raw reply [flat|nested] 6+ messages in thread
* [Buildroot] [PATCH 2 of 2 v3-resend] build: add option to exclude executables/dirs from being stripped
2012-02-09 20:09 [Buildroot] [PATCH 0 of 2 v3-resend] Add find utility functions / exclude files from strip Thomas De Schampheleire
2012-02-09 20:09 ` [Buildroot] [PATCH 1 of 2 v3-resend] Makefile.package.in: add utility functions find*clauses and notfirstword Thomas De Schampheleire
@ 2012-02-09 20:09 ` Thomas De Schampheleire
2012-02-11 17:05 ` Arnout Vandecappelle
1 sibling, 1 reply; 6+ messages in thread
From: Thomas De Schampheleire @ 2012-02-09 20:09 UTC (permalink / raw)
To: buildroot
Sometimes it may be desirable to keep debug symbols for some binaries and
libraries on the target. This commit introduces the config option
BR2_STRIP_EXCLUDE_FILES, which is interpreted as a list of such binaries
and libraries, and the option BR2_STRIP_EXCLUDE_DIRS, which indicates
directories excluded from stripping entirely.
These exclusions are passed to the find command in the target-finalize step.
Signed-off-by: Sven Neumann <s.neumann@raumfeld.com>
Signed-off-by: Thomas De Schampheleire <thomas.de.schampheleire@gmail.com>
---
v3: merge with redundant patch 'stripping: use findfileclauses utility function'
v2: add the possibility to exclude entire directories
Config.in | 19 +++++++++++++++++++
Makefile | 9 +++++++--
2 files changed, 26 insertions(+), 2 deletions(-)
diff --git a/Config.in b/Config.in
--- a/Config.in
+++ b/Config.in
@@ -262,6 +262,25 @@ config BR2_STRIP_none
none do not strip (only for debugging!)
endchoice
+config BR2_STRIP_EXCLUDE_FILES
+ string "executables that should not be stripped"
+ depends on !BR2_STRIP_none
+ default ""
+ help
+ You may specify a space-separated list of binaries and libraries
+ here that should not be stripped on the target.
+
+config BR2_STRIP_EXCLUDE_DIRS
+ string "directories that should be skipped when stripping"
+ depends on !BR2_STRIP_none
+ default ""
+ help
+ You may specify a space-separated list of directories that should
+ be skipped when stripping. Binaries and libraries in these
+ directories will not be touched.
+ The directories should be specified relative to the target directory,
+ without leading slash.
+
choice
prompt "gcc optimization level"
default BR2_OPTIMIZE_S
diff --git a/Makefile b/Makefile
--- a/Makefile
+++ b/Makefile
@@ -429,6 +429,12 @@ endif
erase-fakeroots:
rm -f $(BUILD_DIR)/.fakeroot*
+STRIP_FIND_CMD=find $(TARGET_DIR)
+ifneq (,$(call qstrip,$(BR2_STRIP_EXCLUDE_DIRS)))
+STRIP_FIND_CMD+=\( $(call finddirclauses,$(TARGET_DIR),$(call qstrip,$(BR2_STRIP_EXCLUDE_DIRS))) \) -prune -o
+endif
+STRIP_FIND_CMD+=-type f -perm +111 -not \( $(call findfileclauses,libthread_db*.so* $(call qstrip,$(BR2_STRIP_EXCLUDE_FILES))) \) -print
+
target-finalize:
ifeq ($(BR2_HAVE_DEVFILES),y)
( support/scripts/copy.sh $(STAGING_DIR) $(TARGET_DIR) )
@@ -453,8 +459,7 @@ endif
ifeq ($(BR2_PACKAGE_PYTHON_PYC_ONLY),y)
find $(TARGET_DIR)/usr/lib/ -name '*.py' -print0 | xargs -0 rm -f
endif
- find $(TARGET_DIR) -type f -perm +111 '!' -name 'libthread_db*.so*' | \
- xargs $(STRIPCMD) 2>/dev/null || true
+ $(STRIP_FIND_CMD) | xargs $(STRIPCMD) 2>/dev/null || true
find $(TARGET_DIR)/lib/modules -type f -name '*.ko' | \
xargs -r $(KSTRIPCMD) || true
^ permalink raw reply [flat|nested] 6+ messages in thread
* [Buildroot] [PATCH 1 of 2 v3-resend] Makefile.package.in: add utility functions find*clauses and notfirstword
2012-02-09 20:09 ` [Buildroot] [PATCH 1 of 2 v3-resend] Makefile.package.in: add utility functions find*clauses and notfirstword Thomas De Schampheleire
@ 2012-02-11 16:57 ` Arnout Vandecappelle
2012-02-15 8:10 ` Thomas De Schampheleire
0 siblings, 1 reply; 6+ messages in thread
From: Arnout Vandecappelle @ 2012-02-11 16:57 UTC (permalink / raw)
To: buildroot
On Thursday 09 February 2012 21:09:29 Thomas De Schampheleire wrote:
> +# Utility functions for 'find'
> +# findfileclauses: creates "-name 'X' -o -name 'Y'"
> +# [1:namelist]
> +findfileclauses=-name '$(firstword $(1))' $(patsubst %,-o -name '%',$(call notfirstword,$(1)))
> +# finddirclauses: creates "-path 'basedir/dirX' -o -path 'basedir/dirY'"
> +# [1:basedir, 2:namelist]
> +finddirclauses=-path '$(1)/$(firstword $(2))' $(patsubst %,-o -path '$(1)/%',$(call notfirstword,$(2)))
> +
> +# Miscellaneous utility functions
> +notfirstword=$(wordlist 2,$(words $(1)),$(1))
>
You asked for inspiration on how to simplify this; here are two (untested) ideas:
- a function 'join':
# join,<joinstr>,<wordlist>: puts <joinstr> between the words of <wordlist>
# e.g.: $(call join,+,a b c) -> a + b + c
join = $(firstword $(2)) $(addprefix $(1) ,$(call notfirstword,$(2))
findfileclauses = $(call join,-o,$(patsubst %,-name '%',$(1))
- strip the first -o after joining:
findfileclauses = $(call notfirstword,$(patsubst %, -o -name '%',$(1)))
finddirclauses = $(call notfirstword,$(patsubst %, -o -path '$(1)/%',$(2)))
Regards,
Arnout
--
Arnout Vandecappelle arnout at mind be
Senior Embedded Software Architect +32-16-286540
Essensium/Mind http://www.mind.be
G.Geenslaan 9, 3001 Leuven, Belgium BE 872 984 063 RPR Leuven
LinkedIn profile: http://www.linkedin.com/in/arnoutvandecappelle
GPG fingerprint: 7CB5 E4CC 6C2E EFD4 6E3D A754 F963 ECAB 2450 2F1F
^ permalink raw reply [flat|nested] 6+ messages in thread
* [Buildroot] [PATCH 2 of 2 v3-resend] build: add option to exclude executables/dirs from being stripped
2012-02-09 20:09 ` [Buildroot] [PATCH 2 of 2 v3-resend] build: add option to exclude executables/dirs from being stripped Thomas De Schampheleire
@ 2012-02-11 17:05 ` Arnout Vandecappelle
0 siblings, 0 replies; 6+ messages in thread
From: Arnout Vandecappelle @ 2012-02-11 17:05 UTC (permalink / raw)
To: buildroot
On Thursday 09 February 2012 21:09:30 Thomas De Schampheleire wrote:
> Sometimes it may be desirable to keep debug symbols for some binaries and
> libraries on the target. This commit introduces the config option
> BR2_STRIP_EXCLUDE_FILES, which is interpreted as a list of such binaries
> and libraries, and the option BR2_STRIP_EXCLUDE_DIRS, which indicates
> directories excluded from stripping entirely.
> These exclusions are passed to the find command in the target-finalize step.
>
> Signed-off-by: Sven Neumann <s.neumann@raumfeld.com>
> Signed-off-by: Thomas De Schampheleire <thomas.de.schampheleire@gmail.com>
Acked-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>
[snip]
> +STRIP_FIND_CMD=find $(TARGET_DIR)
> +ifneq (,$(call qstrip,$(BR2_STRIP_EXCLUDE_DIRS)))
> +STRIP_FIND_CMD+=\( $(call finddirclauses,$(TARGET_DIR),$(call qstrip,$(BR2_STRIP_EXCLUDE_DIRS))) \) -prune -o
> +endif
> +STRIP_FIND_CMD+=-type f -perm +111 -not \( $(call findfileclauses,libthread_db*.so* $(call qstrip,$(BR2_STRIP_EXCLUDE_FILES))) \) -print
If for whatever reason this patch has to go through another cycle, I'd
like the following whitespace changes:
- space before and after the =
- split up the last line in two, e.g.
STRIP_FIND_CMD += -type f -perm +111
STRIP_FIND_CMD += -not \( $(call findfileclauses,libthread_db*.so* $(call qstrip,$(BR2_STRIP_EXCLUDE_FILES))) \) -print
(still 120 columns wide, but better already).
Regards,
Arnout
--
Arnout Vandecappelle arnout at mind be
Senior Embedded Software Architect +32-16-286540
Essensium/Mind http://www.mind.be
G.Geenslaan 9, 3001 Leuven, Belgium BE 872 984 063 RPR Leuven
LinkedIn profile: http://www.linkedin.com/in/arnoutvandecappelle
GPG fingerprint: 7CB5 E4CC 6C2E EFD4 6E3D A754 F963 ECAB 2450 2F1F
^ permalink raw reply [flat|nested] 6+ messages in thread
* [Buildroot] [PATCH 1 of 2 v3-resend] Makefile.package.in: add utility functions find*clauses and notfirstword
2012-02-11 16:57 ` Arnout Vandecappelle
@ 2012-02-15 8:10 ` Thomas De Schampheleire
0 siblings, 0 replies; 6+ messages in thread
From: Thomas De Schampheleire @ 2012-02-15 8:10 UTC (permalink / raw)
To: buildroot
Hi Arnout,
On Sat, Feb 11, 2012 at 5:57 PM, Arnout Vandecappelle <arnout@mind.be> wrote:
> On Thursday 09 February 2012 21:09:29 Thomas De Schampheleire wrote:
>> +# Utility functions for 'find'
>> +# findfileclauses: creates "-name 'X' -o -name 'Y'"
>> +# [1:namelist]
>> +findfileclauses=-name '$(firstword $(1))' $(patsubst %,-o -name '%',$(call notfirstword,$(1)))
>> +# finddirclauses: creates "-path 'basedir/dirX' -o -path 'basedir/dirY'"
>> +# [1:basedir, 2:namelist]
>> +finddirclauses=-path '$(1)/$(firstword $(2))' $(patsubst %,-o -path '$(1)/%',$(call notfirstword,$(2)))
>> +
>> +# Miscellaneous utility functions
>> +notfirstword=$(wordlist 2,$(words $(1)),$(1))
>>
>
> ?You asked for inspiration on how to simplify this; here are two (untested) ideas:
>
> - a function 'join':
>
> # join,<joinstr>,<wordlist>: puts <joinstr> between the words of <wordlist>
> # e.g.: $(call join,+,a b c) -> a + b + c
> join = $(firstword $(2)) $(addprefix $(1) ,$(call notfirstword,$(2))
>
> findfileclauses = $(call join,-o,$(patsubst %,-name '%',$(1))
>
> - strip the first -o after joining:
> findfileclauses = $(call notfirstword,$(patsubst %, -o -name '%',$(1)))
> finddirclauses = $(call notfirstword,$(patsubst %, -o -path '$(1)/%',$(2)))
Thanks for these suggestions. I eventually used the second one.
I tried the first one, because the join function could have been
useful in other situations. However, there were two issues.
1. 'join' already is a make function (of course another name would suffice).
2. Because make uses whitespace to separate words, join cannot be used
here: the words are in fact groups of words: '-name X'. As a result,
'firstword $(2)' would be '-name' and 'notfirstword $(2)' would be
'X'. This conflicts with our purpose.
The second suggestion is also very nice and easily understandable, so
I took that as alternative.
Best regards,
Thomas
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2012-02-15 8:10 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-02-09 20:09 [Buildroot] [PATCH 0 of 2 v3-resend] Add find utility functions / exclude files from strip Thomas De Schampheleire
2012-02-09 20:09 ` [Buildroot] [PATCH 1 of 2 v3-resend] Makefile.package.in: add utility functions find*clauses and notfirstword Thomas De Schampheleire
2012-02-11 16:57 ` Arnout Vandecappelle
2012-02-15 8:10 ` Thomas De Schampheleire
2012-02-09 20:09 ` [Buildroot] [PATCH 2 of 2 v3-resend] build: add option to exclude executables/dirs from being stripped Thomas De Schampheleire
2012-02-11 17:05 ` Arnout Vandecappelle
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.