summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark W. Krentel <krentel@rice.edu>2018-10-09 17:12:34 -0500
committerPeter Scheibel <scheibel1@llnl.gov>2018-10-09 15:12:34 -0700
commit54bd049d9944a1b9751a378d47aa0e59e58d2552 (patch)
treeb954054605cc24037c2bba6a405cba7fa0c6fb0d
parent5cafe1b4e8099c386ad4bd3adc4a9658f1958426 (diff)
downloadspack-54bd049d9944a1b9751a378d47aa0e59e58d2552.tar.gz
spack-54bd049d9944a1b9751a378d47aa0e59e58d2552.tar.bz2
spack-54bd049d9944a1b9751a378d47aa0e59e58d2552.tar.xz
spack-54bd049d9944a1b9751a378d47aa0e59e58d2552.zip
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
-rw-r--r--var/spack/repos/builtin/packages/icu4c/package.py9
-rw-r--r--var/spack/repos/builtin/packages/xerces-c/package.py52
2 files changed, 56 insertions, 5 deletions
diff --git a/var/spack/repos/builtin/packages/icu4c/package.py b/var/spack/repos/builtin/packages/icu4c/package.py
index 39523b1563..e6a3df465d 100644
--- a/var/spack/repos/builtin/packages/icu4c/package.py
+++ b/var/spack/repos/builtin/packages/icu4c/package.py
@@ -46,4 +46,11 @@ class Icu4c(AutotoolsPackage):
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
diff --git a/var/spack/repos/builtin/packages/xerces-c/package.py b/var/spack/repos/builtin/packages/xerces-c/package.py
index 8733289069..7b321f61bd 100644
--- a/var/spack/repos/builtin/packages/xerces-c/package.py
+++ b/var/spack/repos/builtin/packages/xerces-c/package.py
@@ -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