[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