[petsc-dev] BuildSystem: how to prevent 'make clean' before 'make'

Satish Balay balay at mcs.anl.gov
Wed Nov 29 17:29:16 CST 2017


Right now there is no provision for this. The following can add it.


>>>>>>>>
$ git diff
diff --git a/config/BuildSystem/config/package.py b/config/BuildSystem/config/package.py
index 14de19502b..f9a2e68a25 100644
--- a/config/BuildSystem/config/package.py
+++ b/config/BuildSystem/config/package.py
@@ -80,6 +80,7 @@ class Package(config.base.Configure):
     self.makerulename           = '' # some packages do too many things with the make stage; this allows a package to limit to, for example, just building the libraries
     self.installedpetsc         = 0
     self.installwithbatch       = 0  # install the package even though configure is running in the initial batch mode; f2blaslapack and fblaslapack for example
+    self.skipcleanbeforebuild   = 0  # skip running 'make clean' before starting a fresh build of a package
     return
 
   def __str__(self):
@@ -1322,7 +1323,8 @@ class GNUPackage(Package):
       if self.parallelMake: pmake = self.make.make_jnp+' '+self.makerulename+' '
       else: pmake = self.make.make+' '+self.makerulename+' '
 
-      output2,err2,ret2  = config.base.Configure.executeShellCommand('cd '+self.packageDir+' && '+self.make.make+' clean', timeout=200, log = self.log)
+      if not self.skipcleanbeforebuild:
+        output2,err2,ret2  = config.base.Configure.executeShellCommand('cd '+self.packageDir+' && '+self.make.make+' clean', timeout=200, log = self.log)
       output3,err3,ret3  = config.base.Configure.executeShellCommand('cd '+self.packageDir+' && '+pmake, timeout=6000, log = self.log)
       self.logPrintBox('Running make install on '+self.PACKAGE+'; this may take several minutes')
       self.installDirProvider.printSudoPasswordMessage(self.installSudo)
<<<<<<<<

But then - a dirty build dir might break subsequent builds with the same PETSC_ARCH [usually triggered when configure options change]

Satish

On Wed, 29 Nov 2017, Blaise A Bourdin wrote:

> Hi,
> 
> I am trying to get BuildSystem to build pnetcdf (parallel netcdf automatically).
> The build process is very straightforward (configure; make; make install)
> Looking at other packages, I came up with the following for $PETSC_DIR/config/BuildSystem/config/packages/pnetcdf.py
> 
> import config.package
> import os
> 
> class Configure(config.package.GNUPackage):
>   def __init__(self, framework):
>     config.package.Package.__init__(self, framework)
>     self.download          = ['http://cucis.ece.northwestern.edu/projects/PnetCDF/Release/parallel-netcdf-1.8.1.tar.gz']
>     self.functions         = ['ncmpi_create']
>     self.includes          = ['pnetcdf.h']
>     self.liblist           = [['libpnetcdf.a']]
>     self.downloaddirnames  = ['parallel-netcdf-1.8.1']
>     return
> 
>   def setupDependencies(self, framework):
>     config.package.GNUPackage.setupDependencies(self, framework)
>     self.mpi   = framework.require('config.packages.MPI', self)
>     self.deps  = [self.mpi]
>     return
> 
>   def formGNUConfigureArgs(self):
>     args = config.package.GNUPackage.formGNUConfigureArgs(self)
>     args.append('LIBS="'+self.compilers.LIBS+'"')
>     return args
> 
> 
> Looking at configure.log, it looks like BuildSystem does a make clean between configure and make
> Unfortunately, there must be something wrong with the parallel-netcdf makefile, as make clean erases some of the files generated by pkgconfig (?), so that make install later fails...
> 
> Is there an easy way to skip the 'make clean' step? 
> 
> Blaise
> 
> 
> 
> 



More information about the petsc-dev mailing list