Accepting request 113914 from Base:System

speed up make globbing, eg for libreoffice

OBS-URL: https://build.opensuse.org/request/show/113914
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/make?expand=0&rev=20
This commit is contained in:
Stephan Kulow 2012-04-17 19:59:43 +00:00 committed by Git OBS Bridge
commit a29c3ad576
3 changed files with 129 additions and 8 deletions

116
make-glob-faster.patch Normal file
View File

@ -0,0 +1,116 @@
Index: read.c
===================================================================
RCS file: /sources/make/make/read.c,v
retrieving revision 1.198
retrieving revision 1.200
diff -u -p -u -r1.198 -r1.200
--- read.c 29 Apr 2011 15:27:39 -0000 1.198
+++ read.c 7 May 2011 14:36:12 -0000 1.200
@@ -2901,6 +2901,7 @@ parse_file_seq (char **stringp, unsigned
const char *name;
const char **nlist = 0;
char *tildep = 0;
+ int globme = 1;
#ifndef NO_ARCHIVES
char *arname = 0;
char *memname = 0;
@@ -3109,32 +3110,40 @@ parse_file_seq (char **stringp, unsigned
}
#endif /* !NO_ARCHIVES */
- switch (glob (name, GLOB_NOSORT|GLOB_ALTDIRFUNC, NULL, &gl))
- {
- case GLOB_NOSPACE:
- fatal (NILF, _("virtual memory exhausted"));
-
- case 0:
- /* Success. */
- i = gl.gl_pathc;
- nlist = (const char **)gl.gl_pathv;
- break;
-
- case GLOB_NOMATCH:
- /* If we want only existing items, skip this one. */
- if (flags & PARSEFS_EXISTS)
- {
- i = 0;
- break;
- }
- /* FALLTHROUGH */
-
- default:
- /* By default keep this name. */
+ /* glob() is expensive: don't call it unless we need to. */
+ if (!(flags & PARSEFS_EXISTS) && strpbrk (name, "?*[") == NULL)
+ {
+ globme = 0;
i = 1;
nlist = &name;
- break;
- }
+ }
+ else
+ switch (glob (name, GLOB_NOSORT|GLOB_ALTDIRFUNC, NULL, &gl))
+ {
+ case GLOB_NOSPACE:
+ fatal (NILF, _("virtual memory exhausted"));
+
+ case 0:
+ /* Success. */
+ i = gl.gl_pathc;
+ nlist = (const char **)gl.gl_pathv;
+ break;
+
+ case GLOB_NOMATCH:
+ /* If we want only existing items, skip this one. */
+ if (flags & PARSEFS_EXISTS)
+ {
+ i = 0;
+ break;
+ }
+ /* FALLTHROUGH */
+
+ default:
+ /* By default keep this name. */
+ i = 1;
+ nlist = &name;
+ break;
+ }
/* For each matched element, add it to the list. */
while (i-- > 0)
@@ -3174,7 +3183,8 @@ parse_file_seq (char **stringp, unsigned
#endif /* !NO_ARCHIVES */
NEWELT (concat (2, prefix, nlist[i]));
- globfree (&gl);
+ if (globme)
+ globfree (&gl);
#ifndef NO_ARCHIVES
if (arname)
Index: tests/scripts/functions/wildcard
===================================================================
RCS file: /sources/make/make/tests/scripts/functions/wildcard,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -p -u -r1.6 -r1.7
--- tests/scripts/functions/wildcard 13 Jun 2009 21:21:49 -0000 1.6
+++ tests/scripts/functions/wildcard 7 May 2011 14:36:11 -0000 1.7
@@ -88,4 +88,16 @@ all: ; @echo $(wildcard xz--y*.7)
!,
'', "\n");
+# TEST #5: wildcard used to verify file existence
+
+touch('xxx.yyy');
+
+run_make_test(q!exists: ; @echo file=$(wildcard xxx.yyy)!,
+ '', "file=xxx.yyy\n");
+
+unlink('xxx.yyy');
+
+run_make_test(q!exists: ; @echo file=$(wildcard xxx.yyy)!,
+ '', "file=\n");
+
1;

View File

@ -1,3 +1,9 @@
-------------------------------------------------------------------
Tue Apr 10 14:26:35 CEST 2012 - meissner@suse.de
- Faster globbing support from upstream to speed up
some large make projects like libreoffice. bnc#753323
-------------------------------------------------------------------
Tue Oct 11 22:37:40 CEST 2011 - mhrusecky@suse.cz

View File

@ -1,7 +1,7 @@
#
# spec file for package make
#
# Copyright (c) 2011 SUSE LINUX Products GmbH, Nuernberg, Germany.
# Copyright (c) 2012 SUSE LINUX Products GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@ -15,25 +15,23 @@
# Please submit bugfixes or comments via http://bugs.opensuse.org/
#
# norootforbuild
Name: make
Url: http://www.gnu.org/software/make/make.html
License: GPL-2.0+
Group: Development/Tools/Building
Provides: gmake
PreReq: %install_info_prereq
AutoReqProv: on
Version: 3.82
Release: 2
Release: 0
Summary: GNU make
License: GPL-2.0+
Group: Development/Tools/Building
Source: make-%version.tar.bz2
Patch2: make-slowdown-parallelism.diff
Patch3: make-disable-broken-tests.diff
Patch4: make-savannah-bug30723-expand_makeflags_before_reexec.diff
Patch5: make-savannah-bug30612-handling_of_archives.diff
Patch6: make-fix_whitespace_tokenization.diff
Patch7: make-glob-faster.patch
Patch64: make-library-search-path.diff
BuildRoot: %{_tmppath}/%{name}-%{version}-build
@ -41,12 +39,13 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-build
The GNU make command with extensive documentation.
%prep
%setup
%setup -q
%patch2
%patch3 -p1
%patch4
%patch5
%patch6 -p1
%patch7 -p0
if [ %_lib == lib64 ]; then
%patch64
fi