Sure - there are lots of assumptions in GNUPackage and CMAKEPackage [they assume most packages behave similarly wrt these types of builds]
And one can also override these default routines provided. Some pacakges might provide a different 'clean' target. And some might prefer VPATH? builds? [i.e mkdir objdir && cd objdir && ../configure && make]. The CMAKE packages default to this mode. Perhaps we need to add this for gnupackages aswell.. Satish On Wed, 29 Nov 2017, Blaise A Bourdin wrote: > 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 > >> > >> > >> > >> > > > >
