def checkClassify(self, libName, funcs, libDir=None, otherLibs=[], prototype='', call='', fortranMangle=0, cxxMangle=0, cxxLink=0): '''Recursive decompose to rapidly classify functions as found or missing''' import config def functional(funcs): named = config.NamedInStderr(funcs) if self.check(libName, funcs, libDir, otherLibs, prototype, call, fortranMangle, cxxMangle, cxxLink): return True else: return named.named found, missing = config.classify(funcs, functional) return found, missing
def checkClassify(self, funcs, libraries = None): '''Recursive decompose to rapidly classify functions as found or missing To confirm that a function is missing, we require a compile/link failure with only that function in a compilation unit. In contrast, we can confirm that many functions are present by compiling them all together in a large compilation unit. We optimistically compile everything together, then trim all functions that were named in the error message and bisect the result. The trimming is only an optimization to increase the likelihood of a big-batch compile succeeding; we do not rely on the compiler naming missing functions. ''' def functional(funcs): named = config.NamedInStderr(funcs) if self.check(funcs, libraries, named.examineStderr): return True else: return named.named import config found, missing = config.classify(funcs, functional) return found, missing