public void visitLibraries( final Project project, final Linker linker, final File[] libpath, final FileVisitor visitor) throws BuildException { if (isReference()) { final LibrarySet master = (LibrarySet) getCheckedRef(LibrarySet.class, "LibrarySet"); master.visitLibraries(project, linker, libpath, visitor); } // // if there was a libs attribute then // add the corresponding patterns to the FileSet // if (this.libnames != null) { for (final String libname : this.libnames) { final String[] patterns = linker.getLibraryPatterns(new String[] {libname}, this.libraryType); if (patterns.length > 0) { final FileSet localSet = (FileSet) this.set.clone(); // // unless explicitly set // will default to the linker case sensitivity // if (!this.explicitCaseSensitive) { final boolean linkerCaseSensitive = linker.isCaseSensitive(); localSet.setCaseSensitive(linkerCaseSensitive); } // // add all the patterns for this libname // for (final String pattern : patterns) { final PatternSet.NameEntry entry = localSet.createInclude(); entry.setName(pattern); } int matches = 0; // // if there was no specified directory then // run through the libpath backwards // if (localSet.getDir(project) == null) { // // scan libpath in reverse order // to give earlier entries priority // for (int j = libpath.length - 1; j >= 0; j--) { final FileSet clone = (FileSet) localSet.clone(); clone.setDir(libpath[j]); final DirectoryScanner scanner = clone.getDirectoryScanner(project); final File basedir = scanner.getBasedir(); final String[] files = scanner.getIncludedFiles(); matches += files.length; for (final String file : files) { visitor.visit(basedir, file); } } } else { final DirectoryScanner scanner = localSet.getDirectoryScanner(project); final File basedir = scanner.getBasedir(); final String[] files = scanner.getIncludedFiles(); matches += files.length; for (final String file : files) { visitor.visit(basedir, file); } } // // TODO: following section works well for Windows // style linkers but unnecessary fails // Unix style linkers. Will need to revisit. // if (matches == 0) { final StringBuffer msg = new StringBuffer("No file matching "); if (patterns.length == 1) { msg.append("pattern ("); msg.append(patterns[0]); msg.append(")"); } else { msg.append("patterns (\""); msg.append(patterns[0]); for (int k = 1; k < patterns.length; k++) { msg.append(", "); msg.append(patterns[k]); } msg.append(")"); } msg.append(" for library name \""); msg.append(libname); msg.append("\" was found."); // TODO: raising the message in the log rather // throw new BuildException(msg.toString()); project.log(msg.toString(), Project.MSG_WARN); } } } } }