[petsc] 01/03: patch: enable soname extension

Drew Parsons dparsons at moszumanska.debian.org
Thu Oct 8 18:53:21 UTC 2015


This is an automated email from the git hooks/post-receive script.

dparsons pushed a commit to branch master
in repository petsc.

commit 92c712f812413422560fbb670a50d96c116032f0
Author: Drew Parsons <dparsons at debian.org>
Date:   Thu Oct 8 20:23:45 2015 +0800

    patch: enable soname extension
    
    Allows different configurations to be build with different shared
    libraries (different sonames)
    
    Activate with configure option
      --shared-library-extension=<string>
    
    e.g. build with complex numbers to
    libpetsc_complex.so.3.6.2 (soname libpetsc_complex.so.3.6)
    rather than libpetsc.so.3.6.2  (soname libpetsc.so.3.6)
---
 debian/patches/series           |   1 +
 debian/patches/soname_extension | 190 ++++++++++++++++++++++++++++++++++++++++
 debian/rules                    |   4 +-
 3 files changed, 193 insertions(+), 2 deletions(-)

diff --git a/debian/patches/series b/debian/patches/series
index 22ae27c..b7b37ab 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -12,3 +12,4 @@ hypre.patch
 nocleanup.patch
 g++-4.8.patch
 python_header
+soname_extension
diff --git a/debian/patches/soname_extension b/debian/patches/soname_extension
new file mode 100644
index 0000000..ae998df
--- /dev/null
+++ b/debian/patches/soname_extension
@@ -0,0 +1,190 @@
+Index: petsc/config/PETSc/options/sharedLibraries.py
+===================================================================
+--- petsc.orig/config/PETSc/options/sharedLibraries.py
++++ petsc/config/PETSc/options/sharedLibraries.py
+@@ -9,6 +9,7 @@ class Configure(config.base.Configure):
+     self.headerPrefix = ''
+     self.substPrefix  = ''
+     self.useShared    = 0
++    self.petsclibExt  = ''
+     return
+ 
+   def __str1__(self):
+@@ -19,12 +20,15 @@ class Configure(config.base.Configure):
+       txt += '  shared libraries: enabled\n'
+     else:
+       txt += '  shared libraries: disabled\n'
++    if self.petsclibExt:
++      txt += '  shared library extension: ' + self.petsclibExt + '\n'
+     return txt
+ 
+   def setupHelp(self, help):
+     import nargs
+     help.addArgument('PETSc', '-with-shared-libraries=<bool>', nargs.ArgBool(None, 1, 'Make PETSc libraries shared -- libpetsc.so (Unix/Linux) or libpetsc.dylib (Mac)'))
+     help.addArgument('PETSc', '-with-serialize-functions=<bool>', nargs.ArgBool(None, 0, 'Allows function pointers to be serialized to binary files with string representations'))
++    help.addArgument('PETSc', '-shared-library-extension=<string>', nargs.Arg(None, None, 'Extension to name of shared library'))
+     return
+ 
+   def setupDependencies(self, framework):
+@@ -67,6 +71,12 @@ class Configure(config.base.Configure):
+       #else:
+       #  self.addMakeRule('shared_arch','shared_'+self.arch.hostOsBase)
+ 
++      # define library extension at configure time with --shared-library-extension=<ext>
++      # This is added the shared library name and soname to allow for installation multiple configurations
++      # e.g. --shared-library-extension=Complex generates libpetscComplex.so instead of libpetsc.so
++      if 'shared-library-extension' in self.framework.argDB:
++        self.petsclibExt=self.framework.argDB['shared-library-extension']
++
+       # Linux is the default
+       if hasattr(self.debuggers, 'dsymutil'):
+         # Check for Mac OSX by the presence of dsymutil
+Index: petsc/lib/petsc/conf/variables
+===================================================================
+--- petsc.orig/lib/petsc/conf/variables
++++ petsc/lib/petsc/conf/variables
+@@ -60,7 +60,7 @@ OBJSCU       = $(SOURCECU:.cu=.o)
+ # SOURCEALL  - sources and includes
+ # SOURCED    - sources/includes [but not fortran - for doc parsing?]
+ #
+-LIBNAME    = ${INSTALL_LIB_DIR}/${LIBBASE}.${AR_LIB_SUFFIX}
++LIBNAME    = ${INSTALL_LIB_DIR}/${LIBBASE}${PETSC_LIB_EXT}.${AR_LIB_SUFFIX}
+ SOURCE     = ${SOURCECU} ${SOURCEC} ${SOURCECXX} ${SOURCEF}
+ OBJS       = ${OBJSCU} ${OBJSC} ${OBJSF}
+ SOURCEALL  = ${SOURCECU} ${SOURCEC} ${SOURCECXX} ${SOURCEF} ${SOURCEH}
+Index: petsc/gmakefile
+===================================================================
+--- petsc.orig/gmakefile
++++ petsc/gmakefile
+@@ -30,14 +30,14 @@ libname_function = $(call SONAME_FUNCTIO
+ basename_all = $(basename $(basename $(basename $(basename $(1)))))
+ sl_linker_args = $(call SL_LINKER_FUNCTION,$(call basename_all,$@),$(libpetsc_abi_version),$(libpetsc_lib_version))
+ 
+-libpetsc_shared  := $(LIBDIR)/libpetsc.$(SL_LINKER_SUFFIX)
+-libpetsc_soname  := $(call soname_function,$(LIBDIR)/libpetsc)
+-libpetsc_libname := $(call libname_function,$(LIBDIR)/libpetsc)
+-libpetsc_static  := $(LIBDIR)/libpetsc.$(AR_LIB_SUFFIX)
+-libpetscpkgs_shared  := $(foreach pkg, $(pkgs), $(LIBDIR)/libpetsc$(pkg).$(SL_LINKER_SUFFIX))
+-libpetscpkgs_soname  := $(foreach pkg, $(pkgs), $(call soname_function,$(LIBDIR)/libpetsc$(pkg)))
+-libpetscpkgs_libname := $(foreach pkg, $(pkgs), $(call libname_function,$(LIBDIR)/libpetsc$(pkg)))
+-libpetscpkgs_static  := $(foreach pkg, $(pkgs), $(LIBDIR)/libpetsc$(pkg).$(AR_LIB_SUFFIX))
++libpetsc_shared  := $(LIBDIR)/libpetsc$(PETSC_LIB_EXT).$(SL_LINKER_SUFFIX)
++libpetsc_soname  := $(call soname_function,$(LIBDIR)/libpetsc$(PETSC_LIB_EXT))
++libpetsc_libname := $(call libname_function,$(LIBDIR)/libpetsc$(PETSC_LIB_EXT))
++libpetsc_static  := $(LIBDIR)/libpetsc$(PETSC_LIB_EXT).$(AR_LIB_SUFFIX)
++libpetscpkgs_shared  := $(foreach pkg, $(pkgs), $(LIBDIR)/libpetsc$(pkg)$(PETSC_LIB_EXT).$(SL_LINKER_SUFFIX))
++libpetscpkgs_soname  := $(foreach pkg, $(pkgs), $(call soname_function,$(LIBDIR)/libpetsc$(pkg)$(PETSC_LIB_EXT)))
++libpetscpkgs_libname := $(foreach pkg, $(pkgs), $(call libname_function,$(LIBDIR)/libpetsc$(pkg)$(PETSC_LIB_EXT)))
++libpetscpkgs_static  := $(foreach pkg, $(pkgs), $(LIBDIR)/libpetsc$(pkg)$(PETSC_LIB_EXT).$(AR_LIB_SUFFIX))
+ 
+ ifeq ($(PETSC_WITH_EXTERNAL_LIB),)
+   libpetscall_shared  := $(libpetscpkgs_shared)
+@@ -120,7 +120,7 @@ endef
+ 	$(if $(findstring win32fe lib,$(AR)),$(ARCHIVE_RECIPE_WIN32FE_LIB),$(ARCHIVE_RECIPE_DEFAULT))
+ 
+ # with-single-library=0
+-libpkg = $(foreach pkg, $1, $(LIBDIR)/libpetsc$(pkg).$(SL_LINKER_SUFFIX))
++libpkg = $(foreach pkg, $1, $(LIBDIR)/libpetsc$(pkg)$(PETSC_LIB_EXT).$(SL_LINKER_SUFFIX))
+ define pkg_template
+   $(LIBDIR)/libpetsc$(1).$(AR_LIB_SUFFIX)  : $(call concatlang,$(1))
+   $(call libname_function,$(LIBDIR)/libpetsc$(1)) : $(call concatlang,$(1))
+Index: petsc/config/PETSc/Configure.py
+===================================================================
+--- petsc.orig/config/PETSc/Configure.py
++++ petsc/config/PETSc/Configure.py
+@@ -53,6 +53,7 @@ class Configure(config.base.Configure):
+     self.languages     = framework.require('PETSc.options.languages',   self.setCompilers)
+     self.debugging     = framework.require('PETSc.options.debugging',   self.compilers)
+     self.indexTypes    = framework.require('PETSc.options.indexTypes',  self.compilers)
++    self.sharedLibraries = framework.require('PETSc.options.sharedLibraries',  self)
+     self.compilers     = framework.require('config.compilers',          self)
+     self.types         = framework.require('config.types',              self)
+     self.headers       = framework.require('config.headers',            self)
+@@ -65,6 +66,10 @@ class Configure(config.base.Configure):
+     self.externalpackagesdir = framework.require('PETSc.options.externalpackagesdir',self)
+     self.mpi           = framework.require('config.packages.MPI',self)
+ 
++    self.petsclibExt=''
++    if self.sharedLibraries.petsclibExt:
++      self.petsclibExt=self.sharedLibraries.petsclibExt
++
+     for utility in os.listdir(os.path.join('config','PETSc','options')):
+       (utilityName, ext) = os.path.splitext(utility)
+       if not utilityName.startswith('.') and not utilityName.startswith('#') and ext == '.py' and not utilityName == '__init__':
+@@ -135,6 +140,10 @@ class Configure(config.base.Configure):
+ 
+   def DumpPkgconfig(self):
+     ''' Create a pkg-config file '''
++
++    if self.sharedLibraries.petsclibExt:
++      self.petsclibExt=self.sharedLibraries.petsclibExt
++
+     if not os.path.exists(os.path.join(self.petscdir.dir,self.arch.arch,'lib','pkgconfig')):
+       os.makedirs(os.path.join(self.petscdir.dir,self.arch.arch,'lib','pkgconfig'))
+     fd = open(os.path.join(self.petscdir.dir,self.arch.arch,'lib','pkgconfig','PETSc.pc'),'w')
+@@ -168,7 +177,7 @@ class Configure(config.base.Configure):
+ 
+     fd.write('Cflags: '+self.allincludes+'\n')
+ 
+-    plibs = self.libraries.toStringNoDupes(['-L'+os.path.join(self.petscdir.dir,self.arch.arch,'lib'),' -lpetsc'])
++    plibs = self.libraries.toStringNoDupes(['-L'+os.path.join(self.petscdir.dir,self.arch.arch,'lib'),' -lpetsc'+self.petsclibExt])
+     if self.framework.argDB['prefix']:
+       fd.write('Libs: '+plibs.replace(os.path.join(self.petscdir.dir,self.arch.arch),self.framework.argDB['prefix'])+'\n')
+     else:
+@@ -355,11 +364,15 @@ prepend-path PATH %s
+         includes.extend(i.include)
+         self.addMakeMacro(i.PACKAGE.replace('-','_')+'_INCLUDE',self.headers.toStringNoDupes(i.include))
+     self.packagelibs = libs
++
++    if self.sharedLibraries.petsclibExt:
++      self.petsclibExt=self.sharedLibraries.petsclibExt
++
+     if self.framework.argDB['with-single-library']:
+-      self.alllibs = self.libraries.toStringNoDupes(['-L'+os.path.join(self.petscdir.dir,self.arch.arch,'lib'),' -lpetsc']+libs+self.libraries.math+self.compilers.flibs+self.compilers.cxxlibs)+' '+self.compilers.LIBS
++      self.alllibs = self.libraries.toStringNoDupes(['-L'+os.path.join(self.petscdir.dir,self.arch.arch,'lib'),' -lpetsc'+self.petsclibExt]+libs+self.libraries.math+self.compilers.flibs+self.compilers.cxxlibs)+' '+self.compilers.LIBS
+       self.addMakeMacro('PETSC_WITH_EXTERNAL_LIB',self.alllibs)
+     else:
+-      self.alllibs = self.libraries.toStringNoDupes(['-L'+os.path.join(self.petscdir.dir,self.arch.arch,'lib'),'-lpetscts -lpetscsnes -lpetscksp -lpetscdm -lpetscmat -lpetscvec -lpetscsys']+libs+self.libraries.math+self.compilers.flibs+self.compilers.cxxlibs)+' '+self.compilers.LIBS
++      self.alllibs = self.libraries.toStringNoDupes(['-L'+os.path.join(self.petscdir.dir,self.arch.arch,'lib'),'-lpetscts'+self.petsclibExt+' -lpetscsnes'+self.petsclibExt+' -lpetscksp'+self.petsclibExt+' -lpetscdm'+self.petsclibExt+' -lpetscmat'+self.petsclibExt+' -lpetscvec'+self.petsclibExt+' -lpetscsys'+self.petsclibExt]+libs+self.libraries.math+self.compilers.flibs+self.compilers.cxxlibs)+' '+self.compilers.LIBS
+     self.PETSC_EXTERNAL_LIB_BASIC = self.libraries.toStringNoDupes(libs+self.libraries.math+self.compilers.flibs+self.compilers.cxxlibs)+' '+self.compilers.LIBS
+     if self.framework.argDB['prefix'] and self.setCompilers.CSharedLinkerFlag not in ['-L']:
+       lib_basic = self.PETSC_EXTERNAL_LIB_BASIC.replace(self.setCompilers.CSharedLinkerFlag+os.path.join(self.petscdir.dir,self.arch.arch,'lib'),self.setCompilers.CSharedLinkerFlag+os.path.join(self.installdir.dir,'lib'))
+@@ -378,14 +391,17 @@ prepend-path PATH %s
+     self.addMakeMacro('DESTDIR',self.installdir.dir)
+     self.addDefine('LIB_DIR','"'+os.path.join(self.installdir.dir,'lib')+'"')
+ 
++    if self.petsclibExt:
++      self.addMakeMacro('PETSC_LIB_EXT',self.petsclibExt)
++
+     if self.framework.argDB['with-single-library']:
+       # overrides the values set in conf/variables
+-      self.addMakeMacro('LIBNAME','${INSTALL_LIB_DIR}/libpetsc.${AR_LIB_SUFFIX}')
+-      self.addMakeMacro('SHLIBS','libpetsc')
+-      self.addMakeMacro('PETSC_LIB_BASIC','-lpetsc')
+-      self.addMakeMacro('PETSC_KSP_LIB_BASIC','-lpetsc')
+-      self.addMakeMacro('PETSC_TS_LIB_BASIC','-lpetsc')
+-      self.addMakeMacro('PETSC_TAO_LIB_BASIC','-lpetsc')
++      self.addMakeMacro('LIBNAME','${INSTALL_LIB_DIR}/libpetsc'+self.petsclibExt+'.${AR_LIB_SUFFIX}')
++      self.addMakeMacro('SHLIBS','libpetsc'+self.petsclibExt)
++      self.addMakeMacro('PETSC_LIB_BASIC','-lpetsc'+self.petsclibExt)
++      self.addMakeMacro('PETSC_KSP_LIB_BASIC','-lpetsc'+self.petsclibExt)
++      self.addMakeMacro('PETSC_TS_LIB_BASIC','-lpetsc'+self.petsclibExt)
++      self.addMakeMacro('PETSC_TAO_LIB_BASIC','-lpetsc'+self.petsclibExt)
+       self.addDefine('USE_SINGLE_LIBRARY', '1')
+       if self.sharedlibraries.useShared:
+         self.addMakeMacro('PETSC_SYS_LIB','${C_SH_LIB_PATH} ${PETSC_WITH_EXTERNAL_LIB}')
+@@ -460,10 +476,12 @@ prepend-path PATH %s
+       self.setCompilers.pushLanguage('FC')
+       fd.write('\"Using Fortran linker: %s\\n\"\n' % (escape(self.setCompilers.getLinker())))
+       self.setCompilers.popLanguage()
++    if self.sharedLibraries.petsclibExt:
++      self.petsclibExt=self.sharedLibraries.petsclibExt
+     if self.framework.argDB['with-single-library']:
+-      petsclib = '-lpetsc'
++      petsclib = '-lpetsc'+self.petsclibExt
+     else:
+-      petsclib = '-lpetscts -lpetscsnes -lpetscksp -lpetscdm -lpetscmat -lpetscvec -lpetscsys'
++      petsclib = '-lpetscts'+self.petsclibExt+' -lpetscsnes'+self.petsclibExt+' -lpetscksp'+self.petsclibExt+' -lpetscdm'+self.petsclibExt+' -lpetscmat'+self.petsclibExt+' -lpetscvec'+self.petsclibExt+' -lpetscsys'+self.petsclibExt
+     fd.write('\"Using libraries: %s%s -L%s %s %s\\n\"\n' % (escape(self.setCompilers.CSharedLinkerFlag), escape(os.path.join(self.petscdir.dir, self.arch.arch, 'lib')), escape(os.path.join(self.petscdir.dir, self.arch.arch, 'lib')), escape(petsclib), escape(self.PETSC_EXTERNAL_LIB_BASIC)))
+     fd.write('\"-----------------------------------------\\n\";\n')
+     fd.close()
diff --git a/debian/rules b/debian/rules
index d0cade6..3f40b3b 100755
--- a/debian/rules
+++ b/debian/rules
@@ -133,13 +133,13 @@ override_dh_auto_configure:
             FCFLAGS="$(FCFLAGS)"  FFLAGS="$(FFLAGS)"  \
             CPPFLAGS="$(CPPFLAGS)" LDFLAGS="$(LDFLAGS)" MAKEFLAGS="$(MAKEFLAGS)"
 	dh_auto_configure -p$(PETSC_COMPLEX_VERSIONED_DEV_PACKAGE) --  \
-          --with-debugging=0  --with-scalar-type=complex \
+          --with-debugging=0  --with-scalar-type=complex --shared-library-extension=_complex \
           $(CONFIGURATION_OPTIONS)  \
           --prefix=$(PETSC_COMPLEX_DIR_PREFIX)  \
           PETSC_DIR=$(CURDIR) --PETSC_ARCH=$(PETSC_COMPLEX_BUILD_DIR) \
             CFLAGS="$(CFLAGS)" CXXFLAGS="$(CXXFLAGS)" \
             FCFLAGS="$(FCFLAGS)"  FFLAGS="$(FFLAGS)"  \
-            CPPFLAGS="$(CPPFLAGS)" LDFLAGS="$(LDFLAGS) -Wl,-soname,petsc-complex.so.$(PETSC_SONAME_VERSION)" MAKEFLAGS="$(MAKEFLAGS)"
+            CPPFLAGS="$(CPPFLAGS)" LDFLAGS="$(LDFLAGS)" MAKEFLAGS="$(MAKEFLAGS)"
 
 
 override_dh_auto_build:

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-science/packages/petsc.git



More information about the debian-science-commits mailing list