Many functions and headers are mentioned in both BuildSystem and PETSc,
thus being tested more than once. Removing this redundancy speeds up my
configure from 125 seconds to 110 seconds.
---
The full list of redundant configure tests is shown below.
HAVE_LIBLAPACK is anomalous because it is actually testing for different
functions.
$ grep 'Defined .HAVE_' mpich-basic/conf/configure.log | sed 's,^ \+,,' | sort
| uniq -cd
2 Defined "HAVE_ACCESS" to "1"
2 Defined "HAVE_BZERO" to "1"
2 Defined "HAVE_CLOCK" to "1"
2 Defined "HAVE_DLCLOSE" to "1"
2 Defined "HAVE_DLERROR" to "1"
2 Defined "HAVE_DLOPEN" to "1"
2 Defined "HAVE_DLSYM" to "1"
2 Defined "HAVE_DRAND48" to "1"
2 Defined "HAVE_ENDIAN_H" to "1"
2 Defined "HAVE_FCNTL_H" to "1"
2 Defined "HAVE_FENV_H" to "1"
4 Defined "HAVE_FLOAT_H" to "1"
2 Defined "HAVE_FORK" to "1"
2 Defined "HAVE_GETCWD" to "1"
2 Defined "HAVE_GETDOMAINNAME" to "1"
2 Defined "HAVE_GETHOSTBYNAME" to "1"
2 Defined "HAVE_GETHOSTNAME" to "1"
2 Defined "HAVE_GET_NPROCS" to "1"
4 Defined "HAVE_GETPAGESIZE" to "1"
2 Defined "HAVE_GETPWUID" to "1"
2 Defined "HAVE_GETRUSAGE" to "1"
2 Defined "HAVE_GETTIMEOFDAY" to "1"
2 Defined "HAVE_GETWD" to "1"
2 Defined "HAVE_LIBBLAS" to "1"
3 Defined "HAVE_LIBDL" to "1"
27 Defined "HAVE_LIBLAPACK" to "1"
5 Defined "HAVE_LIBM" to "1"
2 Defined "HAVE_LIBZ" to "1"
2 Defined "HAVE_LIMITS_H" to "1"
2 Defined "HAVE_LSEEK" to "1"
2 Defined "HAVE_MALLOC_H" to "1"
2 Defined "HAVE_MEMALIGN" to "1"
2 Defined "HAVE_MEMMOVE" to "1"
2 Defined "HAVE_MEMORY_H" to "1"
2 Defined "HAVE_MKSTEMP" to "1"
2 Defined "HAVE_MPI_FINALIZED" to "1"
2 Defined "HAVE_NETDB_H" to "1"
2 Defined "HAVE_NETINET_IN_H" to "1"
2 Defined "HAVE_POPEN" to "1"
2 Defined "HAVE_PTHREAD_H" to "1"
2 Defined "HAVE_PWD_H" to "1"
2 Defined "HAVE_RAND" to "1"
2 Defined "HAVE_READLINK" to "1"
2 Defined "HAVE_REALPATH" to "1"
2 Defined "HAVE_SCHED_H" to "1"
2 Defined "HAVE_SEARCH_H" to "1"
2 Defined "HAVE_SETJMP_H" to "1"
2 Defined "HAVE_SIGACTION" to "1"
2 Defined "HAVE_SIGNAL" to "1"
2 Defined "HAVE_SIGSET" to "1"
2 Defined "HAVE_SLEEP" to "1"
2 Defined "HAVE_SNPRINTF" to "1"
2 Defined "HAVE_SOCKET" to "1"
2 Defined "HAVE_STDINT_H" to "1"
2 Defined "HAVE_STDLIB_H" to "1"
2 Defined "HAVE_STRCASECMP" to "1"
2 Defined "HAVE_STRING_H" to "1"
2 Defined "HAVE_STRINGS_H" to "1"
2 Defined "HAVE_SYS_PARAM_H" to "1"
2 Defined "HAVE_SYS_PROCFS_H" to "1"
2 Defined "HAVE_SYS_RESOURCE_H" to "1"
2 Defined "HAVE_SYS_SOCKET_H" to "1"
3 Defined "HAVE_SYS_SYSINFO_H" to "1"
2 Defined "HAVE_SYS_TIMES_H" to "1"
2 Defined "HAVE_SYS_TYPES_H" to "1"
2 Defined "HAVE_SYS_UTSNAME_H" to "1"
3 Defined "HAVE_SYS_WAIT_H" to "1"
3 Defined "HAVE_TIME_H" to "1"
2 Defined "HAVE_TIMES" to "1"
2 Defined "HAVE_TIME" to "1"
2 Defined "HAVE_UNAME" to "1"
2 Defined "HAVE_UNISTD_H" to "1"
2 Defined "HAVE_USLEEP" to "1"
After this patch, we have a few "redundant" tests left.
2 Defined "HAVE_LIBBLAS" to "1"
3 Defined "HAVE_LIBDL" to "1"
27 Defined "HAVE_LIBLAPACK" to "1"
5 Defined "HAVE_LIBM" to "1"
2 Defined "HAVE_LIBZ" to "1"
2 Defined "HAVE_MPI_FINALIZED" to "1"
2 Defined "HAVE_SYS_SYSINFO_H" to "1"
2 Defined "HAVE_SYS_WAIT_H" to "1"
2 Defined "HAVE_TIME_H" to "1"
I have not de-duplicated libraries.py yet because it passes in more
structured arguments. It only runs a few tests multiple times:
[(['socket', 'nsl'], 'socket'), (['fpe'], 'handle_sigfpes'), (['socket',
'nsl'], 'socket'), (['fpe'], 'handle_sigfpes')]
These are actually all defined in one place, but it is visited multiple
times:
/home/jed/petsc/mpich-basic/conf/reconfigure-mpich-basic.py(12)<module>()
-> configure.petsc_configure(configure_options)
/home/jed/petsc/config/configure.py(290)petsc_configure()
-> framework =
config.framework.Framework(['--configModules=PETSc.Configure','--optionsModule=PETSc.compilerOptions']+sys.argv[1:],
loadArgDB = 0)
/home/jed/petsc/config/BuildSystem/config/framework.py(110)__init__()
-> self.createChildren()
/home/jed/petsc/config/BuildSystem/config/framework.py(319)createChildren()
-> self.getChild(moduleName)
/home/jed/petsc/config/BuildSystem/config/framework.py(304)getChild()
-> config.setupDependencies(self)
> /home/jed/petsc/config/PETSc/Configure.py(105)setupDependencies()
-> self.libraries.libraries.extend(libraries1)
/home/jed/petsc/mpich-basic/conf/reconfigure-mpich-basic.py(12)<module>()
-> configure.petsc_configure(configure_options)
/home/jed/petsc/config/configure.py(293)petsc_configure()
-> framework.configure(out = sys.stdout)
/home/jed/petsc/config/BuildSystem/config/framework.py(929)configure()
-> self.updateDependencies()
/home/jed/petsc/config/BuildSystem/config/framework.py(385)updateDependencies()
-> child.setupDependencies(self)
> /home/jed/petsc/config/PETSc/Configure.py(105)setupDependencies()
-> self.libraries.libraries.extend(libraries1)
config/BuildSystem/config/functions.py | 4 ++++
config/BuildSystem/config/headers.py | 4 ++++
2 files changed, 8 insertions(+)
diff --git a/config/BuildSystem/config/functions.py
b/config/BuildSystem/config/functions.py
index 30da45e..7b700cb 100644
--- a/config/BuildSystem/config/functions.py
+++ b/config/BuildSystem/config/functions.py
@@ -197,5 +197,9 @@ choke me
self.executeTest(self.checkSignalHandlerType)
self.executeTest(self.checkFreeReturnType)
self.executeTest(self.checkVariableArgumentLists)
+ try:
+ self.functions = list(set(self.functions))
+ except:
+ pass
map(lambda function: self.executeTest(self.check, function),
self.functions)
return
diff --git a/config/BuildSystem/config/headers.py
b/config/BuildSystem/config/headers.py
index e180eaa..f3da45c 100644
--- a/config/BuildSystem/config/headers.py
+++ b/config/BuildSystem/config/headers.py
@@ -230,6 +230,10 @@ class Configure(config.base.Configure):
self.executeTest(self.checkSysWait)
self.executeTest(self.checkTime)
self.executeTest(self.checkMath)
+ try:
+ self.headers = list(set(self.headers))
+ except:
+ pass
map(lambda header: self.executeTest(self.check, header), self.headers)
self.executeTest(self.checkRecursiveMacros)
return
--
1.8.2.1