1import config.package 2import os 3 4class Configure(config.package.GNUPackage): 5 def __init__(self, framework): 6 config.package.GNUPackage.__init__(self, framework) 7 self.gitcommit = '11501e852fd2b647c0788bc12f7a42ce9e427934' 8 self.download = ['git://https://github.com/bldenton/EGADSlite.git'] 9 self.functions = ['EG_open'] 10 self.includes = ['egads.h'] 11 self.hastests = 1 12 return 13 14 def setupDependencies(self, framework): 15 config.package.GNUPackage.setupDependencies(self, framework) 16 self.pthread = self.framework.require('config.packages.pthread',self) 17 self.deps = [self.pthread] 18 return 19 20 def createMakefile(self): 21 makeinc = os.path.join(self.packageDir, 'make.inc') 22 g = open(makeinc,'w') 23 g.write(''' 24include $(PETSC_DIR)/lib/petsc/conf/variables 25 26CFLAGS = -DLITE -Iinclude 27 28INCDIR = include 29SRCDIR = src 30LIBBASE = libegadslite 31LIBNAME = ${LIBBASE}.${AR_LIB_SUFFIX} 32LIBSRC.h = $(INCDIR)/egads.h $(INCDIR)/egadsErrors.h $(INCDIR)/egadsInternals.h $(INCDIR)/egadsTris.h \ 33 $(INCDIR)/egadsTypes.h $(INCDIR)/emp.h $(INCDIR)/liteClasses.h $(INCDIR)/regQuads.h 34LIBSRC.c = $(SRCDIR)/liteAttrs.c $(SRCDIR)/liteBase.c $(SRCDIR)/liteGeom.c $(SRCDIR)/liteImport.c \ 35 $(SRCDIR)/liteMemory.c $(SRCDIR)/liteTopo.c $(SRCDIR)/egadsTess.c $(SRCDIR)/egadsTris.c \ 36 $(SRCDIR)/egadsQuads.c $(SRCDIR)/egadsTessInp.c $(SRCDIR)/egadsRobust.c \ 37 $(SRCDIR)/emp.c $(SRCDIR)/evaluate.c $(SRCDIR)/rational.c $(SRCDIR)/regQuads.c 38LIBSRC.o = $(LIBSRC.c:%.c=%.o) 39 40lib : $(LIBNAME) ; 41 42$(LIBSRC.o) : $(LIBSRC.h) 43 44define ARCHIVE_RECIPE_WIN32FE_LIB 45 @$(RM) $@ $@.args 46 @cygpath -w $^ > $@.args 47 $(AR) $(AR_FLAGS) $@ @$@.args 48 @$(RM) $@.args 49endef 50 51define ARCHIVE_RECIPE_DEFAULT 52 @$(RM) $@ 53 $(AR) $(AR_FLAGS) $@ $^ 54 $(RANLIB) $@ 55endef 56 57$(LIBNAME) : $(LIBSRC.o) 58 $(if $(findstring win32fe lib,$(AR)),$(ARCHIVE_RECIPE_WIN32FE_LIB),$(ARCHIVE_RECIPE_DEFAULT)) 59 60COMPILE.c = $(CC) $(PCC_FLAGS) $(CFLAGS) $(CCPPFLAGS) $(TARGET_ARCH) -c 61 62# This is unusual; usually prefix would default to /usr/local 63prefix ?= $(PETSC_DIR)/$(PETSC_ARCH) 64libdir = $(prefix)/lib 65includedir = $(prefix)/include 66INSTALL = install 67INSTALL_DATA = $(INSTALL) -m644 68MKDIR_P = mkdir -p 69 70install-egads: $(LIBNAME) 71 $(MKDIR_P) "$(DESTDIR)$(includedir)" "$(DESTDIR)$(libdir)" 72 $(INSTALL_DATA) $(LIBSRC.h) "$(DESTDIR)$(includedir)/" 73 $(INSTALL_DATA) $(LIBNAME) "$(DESTDIR)$(libdir)/" 74 75clean: 76 $(RM) $(LIBNAME) $(LIBSRC.o) 77 78.PHONY: lib clean install-egads 79 ''') 80 g.close() 81 return 82 83 # the install is delayed until postProcess() since egads install requires PETSc to have created its build/makefiles before installing 84 # note that egads can (and is) built before PETSc is built. 85 def Install(self): 86 self.createMakefile() 87 return self.installDir 88 89 def configureLibrary(self): 90 ''' Since egads cannot be built until after PETSc configure is complete we need to just assume the downloaded library will work''' 91 if 'with-egads' in self.framework.clArgDB: 92 raise RuntimeError('egads does not support --with-egads; only --download-egads') 93 if 'with-egads-dir' in self.framework.clArgDB: 94 self.egadsDir = self.framework.argDB['with-egads-dir'] 95 if 'with-egads-include' in self.framework.clArgDB: 96 raise RuntimeError('egads does not support --with-egads-include; only --download-egads') 97 if 'with-egads-lib' in self.framework.clArgDB: 98 raise RuntimeError('egads does not support --with-egads-lib; only --download-egads') 99 if 'with-egads-shared' in self.framework.clArgDB: 100 raise RuntimeError('egads does not support --with-egads-shared') 101 102 if not hasattr(self,'egadsDir'): 103 self.checkDownload() 104 self.egadsDir = self.installDir 105 self.include = [os.path.join(self.egadsDir,'include')] 106 self.lib = [os.path.join(self.egadsDir,'lib','libegadslite.a')] 107 self.found = 1 108 self.dlib = self.lib 109 if not hasattr(self.framework, 'packages'): 110 self.framework.packages = [] 111 self.framework.packages.append(self) 112 113 def postProcess(self): 114 if not hasattr(self,'installDir'): 115 return 116 try: 117 self.logPrintBox('Compiling egads; this may take several minutes') 118 # uses the regular PETSc library builder and then moves result 119 # turn off any compiler optimizations as they may break egads 120 self.pushLanguage('C') 121 cflags = self.checkNoOptFlag()+' '+self.getSharedFlag(self.getCompilerFlags())+' '+self.getPointerSizeFlag(self.getCompilerFlags())+' '+self.getWindowsNonOptFlags(self.getCompilerFlags())+' '+self.getDebugFlags(self.getCompilerFlags()) 122 self.popLanguage() 123 output,err,ret = config.package.GNUPackage.executeShellCommand(self.make.make+' -f make.inc PETSC_DIR=' + self.petscdir.dir + ' clean lib PCC_FLAGS="' + cflags + '"', timeout=1000, log = self.log, cwd=self.packageDir) 124 self.log.write(output+err) 125 self.logPrintBox('Installing egads; this may take several minutes') 126 # TODO: This message should not be printed if egads is install in PETSc arch directory; need self.printSudoPasswordMessage() defined in package.py 127 self.installDirProvider.printSudoPasswordMessage(1) 128 output,err,ret = config.package.GNUPackage.executeShellCommand(self.installSudo+self.make.make+' -f make.inc PETSC_DIR='+self.petscdir.dir+' prefix='+self.installDir+' install-egads',timeout=1000, log = self.log, cwd=self.packageDir) 129 self.log.write(output+err) 130 except RuntimeError as e: 131 raise RuntimeError('Error running make on egads: '+str(e)) 132