Thanks. I understand that it is not optimal. But OTOH, you are also assuming that make clean does what it is supposed to do…
Blaise > On Nov 29, 2017, at 5:29 PM, Satish Balay <[email protected]> wrote: > > 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 >> >> >> >> > -- Department of Mathematics and Center for Computation & Technology Louisiana State University, Baton Rouge, LA 70803, USA Tel. +1 (225) 578 1612, Fax +1 (225) 578 4276 http://www.math.lsu.edu/~bourdin
