Unfortunately, the weakest assumption is that each package’s build system is not screwed up…
Blaise > On Nov 29, 2017, at 5:40 PM, Satish Balay <[email protected]> wrote: > > 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 >>>> >>>> >>>> >>>> >>> >> >> -- 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
