INDEX build optimizations - please review
Alex Kozlov
spam at rm-rf.kiev.ua
Tue Jun 10 21:41:21 UTC 2008
On Tue, Jun 10, 2008 at 06:45:32PM +0200, Kris Kennaway wrote:
> Please review and test the following patches that optimize port INDEX
> builds (and as a side-effect, other recursive tree traversals). I am
> particularly interested in a comparison between old and new indexes
> built locally: the only diff should be in audio/festvox-hvs [1].
Work on RELENG_6 only after this patch (maybe good candidate for MFC):
Index: usr.bin/make/var.c
@@ -1232,6 +1232,41 @@
}
/**
+ * Remove adjacent duplicate words.
+ *
+ * Results:
+ * A string containing the resulting words.
+ */
+static char *
+VarUniq(const char *str)
+{
+ ArgArray aa;
+ Buffer *buf; /* Buffer for new string */
+ int i, j;
+
+ buf = Buf_Init(0);
+ brk_string(&aa, str, FALSE);
+
+ if (aa.argc > 2) {
+ for (j = 1, i = 2; i < aa.argc; i++) {
+ if (strcmp(aa.argv[i], aa.argv[j]) != 0 && (++j != i))
+ aa.argv[j] = aa.argv[i];
+ }
+ aa.argc = j + 1;
+ }
+
+ for (i = 1; i < aa.argc; i++) {
+ Buf_AddBytes(buf, strlen(aa.argv[i]), (Byte *)aa.argv[i]);
+ if (i != aa.argc - 1)
+ Buf_AddByte(buf, ' ');
+ }
+ Buf_AddByte(buf, '\0');
+
+ ArgArray_Done(&aa);
+ return (Buf_Peel(buf));
+}
+
+/**
* Pass through the tstr looking for 1) escaped delimiters,
* '$'s and backslashes (place the escaped character in
* uninterpreted) and 2) unescaped $'s that aren't before
@@ -1681,6 +1716,7 @@
* the invocation.
* :U Converts variable to upper-case.
* :L Converts variable to lower-case.
+ * :u ("uniq") Remove adjacent duplicate words.
*
* XXXHB update this comment or remove it and point to the man page.
*/
@@ -1793,6 +1829,10 @@
newStr = VarModify(value, VarRoot, NULL);
vp->ptr++;
break;
+ case 'u':
+ newStr = VarUniq(value);
+ vp->ptr++;
+ break;
default:
newStr = sysVvarsub(vp, startc, v, value);
break;
--
Adios
More information about the freebsd-ports
mailing list