[petsc-dev] [PATCH] config: test functions and headers only once

Jed Brown jedbrown at mcs.anl.gov
Tue Apr 30 23:49:20 CDT 2013


Matt, would you like to go about this differently, maybe by preventing
duplicates from appearing in the first place?

Jed Brown <jedbrown at mcs.anl.gov> writes:

> 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.
> ---

[...]

> 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)

Matt, can we avoid visiting here more than once?

>  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

I put in this guard because I thought set() was python-2.5.  Evidently
it is in python-2.4, so we're safe, provided the list contains only
hashable objects.  It should, right?

>      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



More information about the petsc-dev mailing list