xerces-c: add variant for transcoder, rework config flags. (#9393)

* xerces-c: Add variant for choice of transcoder (gnuiconv, iconv, icu,
  macos, windows).  It's important to specify a --enable-transcoder
  option on the configure line or else xerces may make a different
  choice when multiple transcoders are available.
* Pass the compile flags to configure.  For cflags and cxxflags, this is
  necessary to respect the value from the spack install line.
  Otherwise, xerces (and any autotools package) will choose a default
  value that overrides the spack compiler wrapper.
* Add xerces version 3.2.2.
* icu4c needs the --enable-rpath configure option on Darwin
This commit is contained in:
Mark W. Krentel 2018-10-09 17:12:34 -05:00 committed by Peter Scheibel
parent 5cafe1b4e8
commit 54bd049d99
2 changed files with 56 additions and 5 deletions

View file

@ -46,4 +46,11 @@ def url_for_version(self, version):
return url.format(version.dotted, version.underscored)
def configure_args(self):
return ['--enable-rpath']
args = []
# The --enable-rpath option is only needed on MacOS, and it
# breaks the build for xerces-c on Linux.
if 'platform=darwin' in self.spec:
args.append('--enable-rpath')
return args

View file

@ -23,6 +23,7 @@
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
from spack import *
import sys
class XercesC(AutotoolsPackage):
@ -35,13 +36,56 @@ class XercesC(AutotoolsPackage):
homepage = "https://xerces.apache.org/xerces-c"
url = "https://archive.apache.org/dist/xerces/c/3/sources/xerces-c-3.2.1.tar.bz2"
version('3.2.2', '4c395216ecbef3c88a756ff4090e6f7e')
version('3.2.1', '8f98a81a3589bbc2dad9837452f7d319')
version('3.1.4', 'd04ae9d8b2dee2157c6db95fa908abfd')
depends_on('libiconv')
# It's best to be explicit about the transcoder or else xerces may
# choose another value.
if sys.platform == 'darwin':
default_transcoder = 'macos'
elif sys.platform.startswith('win') or sys.platform == 'cygwin':
default_transcoder = 'windows'
else:
default_transcoder = 'gnuiconv'
def setup_environment(self, spack_env, run_env):
spack_env.append_flags('LDFLAGS', self.spec['libiconv'].libs.ld_flags)
variant('transcoder', default=default_transcoder,
values=('gnuiconv', 'iconv', 'icu', 'macos', 'windows'),
multi=False,
description='Use the specified transcoder')
depends_on('libiconv', type='link', when='transcoder=gnuiconv')
depends_on('icu4c', type='link', when='transcoder=icu')
# Pass flags to configure. This is necessary for CXXFLAGS or else
# the xerces default will override the spack wrapper.
def flag_handler(self, name, flags):
spec = self.spec
# There is no --with-pkg for gnuiconv.
if name == 'ldflags' and 'transcoder=gnuiconv' in spec:
flags.append(spec['libiconv'].libs.ld_flags)
return (None, None, flags)
def configure_args(self):
return ['--disable-network']
spec = self.spec
args = ['--disable-network']
if 'transcoder=gnuiconv' in spec:
args.append('--enable-transcoder-gnuiconv')
if 'transcoder=iconv' in spec:
args.append('--enable-transcoder-iconv')
if 'transcoder=icu' in spec:
args.append('--enable-transcoder-icu')
args.append('--with-icu=%s' % spec['icu4c'].prefix)
if 'transcoder=macos' in spec:
args.append('--enable-transcoder-macosunicodeconverter')
if 'transcoder=windows' in spec:
args.append('--enable-transcoder-windows')
return args