Browse Source

Implement a glob() function for use by win32 configure.

PEAR_1_4DEV
Wez Furlong 23 years ago
parent
commit
475821225d
  1. 98
      win32/build/confutils.js

98
win32/build/confutils.js

@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
// $Id: confutils.js,v 1.27 2003-12-23 00:36:32 fmk Exp $
// $Id: confutils.js,v 1.28 2003-12-23 01:55:33 wez Exp $
var STDOUT = WScript.StdOut;
var STDERR = WScript.StdErr;
@ -28,7 +28,7 @@ var SYSTEM_DRIVE = WshShell.Environment("Process").Item("SystemDrive");
var PROGRAM_FILES = WshShell.Environment("Process").Item("ProgramFiles");
if (PROGRAM_FILES == null) {
PROGRAM_FILES = "C:\\Program Files\\";
PROGRAM_FILES = "C:\\Program Files";
}
if (!FSO.FileExists("README.CVS-RULES")) {
@ -624,7 +624,7 @@ function SAPI(sapiname, file_list, makefiletarget, cflags)
MFO.WriteLine(makefiletarget + ": $(BUILD_DIR)\\" + makefiletarget);
MFO.WriteLine("\t@echo SAPI " + configure_module_dirname + " build complete");
MFO.WriteLine("$(BUILD_DIR)\\" + makefiletarget + ": $(" + SAPI + "_GLOBAL_OBJS) $(BUILD_DIR)\\$(PHPLIB) $(BUILD_DIR)\\" + resname);
MFO.WriteLine("$(BUILD_DIR)\\" + makefiletarget + ": $(DEPS_" + SAPI + ") $(" + SAPI + "_GLOBAL_OBJS) $(BUILD_DIR)\\$(PHPLIB) $(BUILD_DIR)\\" + resname);
if (makefiletarget.match(new RegExp("\\.dll$"))) {
ldflags = "/dll $(LDFLAGS)";
@ -1059,6 +1059,98 @@ function copy_and_subst(srcname, destname, subst_array)
f.Close();
}
// glob using simple filename wildcards
// returns an array of matches that are found
// in the filesystem
function glob(path_pattern)
{
var path_parts = path_pattern.replace(new RegExp("/", "g"), "\\").split("\\");
var p;
var base = "";
var is_pat_re = /\*/;
// first, build as much as possible that doesn't have a pattern
for (p = 0; p < path_parts.length; p++) {
if (path_parts[p].match(is_pat_re))
break;
if (p)
base += "\\";
base += path_parts[p];
}
return _inner_glob(base, p, path_parts);
}
function _inner_glob(base, p, parts)
{
var pat = parts[p];
var full_name = base + "\\" + pat;
var re = null;
var items = null;
//STDOUT.WriteLine("inner: base=" + base + " p=" + p + " pat=" + pat);
if (FSO.FileExists(full_name)) {
if (p < parts.length - 1) {
// we didn't reach the full extent of the pattern
return false;
}
return new Array(full_name);
}
if (FSO.FolderExists(full_name) && p == parts.length - 1) {
// we have reached the end of the pattern; no need to recurse
return new Array(full_name);
}
// Convert the pattern into a regexp
re = new RegExp("^" + pat.replace(/\./g, '\\.').replace(/\*/g, '.*') + "$");
items = new Array();
var folder = FSO.GetFolder(base);
var fc = null;
var subitems = null;
var item_name = null;
var j;
fc = new Enumerator(folder.SubFolders);
for (; !fc.atEnd(); fc.moveNext()) {
item_name = FSO.GetFileName(fc.item());
if (item_name.match(re)) {
// got a match; if we are at the end of the pattern, just add these
// things to the items array
if (p == parts.length - 1) {
items[items.length] = fc.item();
} else {
// we should recurse and do more matches
subitems = _inner_glob(base + "\\" + item_name, p + 1, parts);
if (subitems) {
for (j = 0; j < subitems.length; j++) {
items[items.length] = subitems[j];
}
}
}
}
}
// if we are at the end of the pattern, we should match
// files too
if (p == parts.length - 1) {
fc = new Enumerator(folder.Files);
for (; !fc.atEnd(); fc.moveNext()) {
item_name = FSO.GetFileName(fc.item());
if (item_name.match(re)) {
items[items.length] = fc.item();
}
}
}
return items;
}
// for snapshot builders, this option will attempt to enable everything
// and you can then build everything, ignoring fatal errors within a module
// by running "nmake snap"

Loading…
Cancel
Save