graphviz package: add MacOS fixes and quartz support (#11128)
* Add patch to detect newer versions of MacOS and to fix a typo in configure.ac (AM_LIBTOOLSFLAGS should be AM_LIBTOOLFLAGS) * Remove variant declarations for unsupported languages * Add support for quartz on MacOS * Add optional X Window support * Specifically build against qt@4 when building QT support * Point to appropriate C++ standard libraries when building with Clang on MacOS * Disable parallel build (for all platforms) * Increase verbosity of configure script by adding --disable-silent-rules
This commit is contained in:
parent
66e9b1279a
commit
09d4fcc6ad
@ -0,0 +1,30 @@
|
|||||||
|
--- a/configure.ac 2019-04-08 12:14:26.000000000 -0400
|
||||||
|
+++ b/configure.ac 2019-04-08 12:15:03.000000000 -0400
|
||||||
|
@@ -170,16 +170,8 @@
|
||||||
|
BROWSER="open"
|
||||||
|
JSHEXT=jnilib
|
||||||
|
AC_DEFINE_UNQUOTED(DARWIN_DYLIB,"$DARWIN_DYLIB",[Define for Darwin-style shared library names.])
|
||||||
|
- case "${host_os}" in
|
||||||
|
- *darwin9*)
|
||||||
|
- DARWIN9=yes
|
||||||
|
- ;;
|
||||||
|
- esac
|
||||||
|
- case "${host_os}" in
|
||||||
|
- *darwin9.4* | *darwin9.5* )
|
||||||
|
- EXTRA_SMYRNA_LDFLAGS="-dylib_file /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.dylib:/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.dylib"
|
||||||
|
- ;;
|
||||||
|
- esac
|
||||||
|
+ DARWIN9=yes
|
||||||
|
+ EXTRA_SMYRNA_LDFLAGS="-dylib_file /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.dylib:/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.dylib"
|
||||||
|
;;
|
||||||
|
* ) # This sucks! Whatever happened to standards for file system layout? (Good job its no longer used unless fontconfig is unavailable.)
|
||||||
|
DEFAULT_FONTPATH="/usr/share/fonts/sun/TrueType:/usr/share/fonts/TrueType:/usr/X11/lib/X11/fonts/TrueType:/usr/share/fonts/sun/Type1:/usr/openwin/lib/X11/fonts/Type1:/usr/share/fonts/X11/Type1:/usr/share/fonts/default/Type1:/usr/X11R6/lib/X11/fonts/TrueType:/usr/X11R6/lib/X11/fonts/truetype:/usr/X11R6/lib/X11/fonts/TTF:/usr/share/fonts/truetype:/usr/openwin/lib/X11/fonts/TrueType:/usr/X11R6/lib/X11/fonts/Type1:/usr/common/share/fonts/ttf";
|
||||||
|
--- a/plugin/quartz/Makefile.am 2019-04-06 08:33:24.000000000 -0400
|
||||||
|
+++ b/plugin/quartz/Makefile.am 2019-04-08 12:32:41.000000000 -0400
|
||||||
|
@@ -39,5 +39,5 @@
|
||||||
|
|
||||||
|
if WITH_DARWIN9
|
||||||
|
libgvplugin_quartz_la_LDFLAGS += -Wl,-exported_symbol,_gvplugin_quartz_LTX_library
|
||||||
|
-AM_LIBTOOLSFLAGS = --tag=CC
|
||||||
|
+AM_LIBTOOLFLAGS = --tag=CC
|
||||||
|
endif
|
@ -4,10 +4,15 @@
|
|||||||
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
||||||
|
|
||||||
from spack import *
|
from spack import *
|
||||||
|
from spack.operating_systems.mac_os import macos_version
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
|
|
||||||
|
MACOS_VERSION = macos_version() if sys.platform == 'darwin' else None
|
||||||
|
|
||||||
|
|
||||||
class Graphviz(AutotoolsPackage):
|
class Graphviz(AutotoolsPackage):
|
||||||
"""Graph Visualization Software"""
|
"""Graph Visualization Software"""
|
||||||
|
|
||||||
@ -17,60 +22,38 @@ class Graphviz(AutotoolsPackage):
|
|||||||
# This commit hash is tag='stable_release_2.40.1'
|
# This commit hash is tag='stable_release_2.40.1'
|
||||||
version('2.40.1', commit='67cd2e5121379a38e0801cc05cce5033f8a2a609')
|
version('2.40.1', commit='67cd2e5121379a38e0801cc05cce5033f8a2a609')
|
||||||
|
|
||||||
# We try to leave language bindings enabled if they don't cause
|
# Language bindings
|
||||||
# build issues or add dependencies.
|
language_bindings = ['java']
|
||||||
variant('sharp', default=False,
|
|
||||||
description='Enable for optional sharp language bindings'
|
|
||||||
' (not yet functional)')
|
|
||||||
variant('go', default=False,
|
|
||||||
description='Enable for optional go language bindings'
|
|
||||||
' (not yet functional)')
|
|
||||||
variant('guile', default=False,
|
|
||||||
description='Enable for optional guile language bindings'
|
|
||||||
' (not yet functional)')
|
|
||||||
variant('io', default=False,
|
|
||||||
description='Enable for optional io language bindings'
|
|
||||||
' (not yet functional)')
|
|
||||||
variant('java', default=False, # Spack has no Java support
|
|
||||||
description='Enable for optional java language bindings')
|
|
||||||
variant('lua', default=False,
|
|
||||||
description='Enable for optional lua language bindings'
|
|
||||||
' (not yet functional)')
|
|
||||||
variant('ocaml', default=False,
|
|
||||||
description='Enable for optional ocaml language bindings'
|
|
||||||
' (not yet functional)')
|
|
||||||
variant('perl', default=False, # Spack has no Perl support
|
|
||||||
description='Enable for optional perl language bindings')
|
|
||||||
variant('php', default=False,
|
|
||||||
description='Enable for optional php language bindings'
|
|
||||||
' (not yet functional)')
|
|
||||||
variant('python', default=False, # Build issues with Python 2/3
|
|
||||||
description='Enable for optional python language bindings'
|
|
||||||
' (not yet functional)')
|
|
||||||
variant('r', default=False,
|
|
||||||
description='Enable for optional r language bindings'
|
|
||||||
' (not yet functional)')
|
|
||||||
variant('ruby', default=False,
|
|
||||||
description='Enable for optional ruby language bindings'
|
|
||||||
' (not yet functional)')
|
|
||||||
variant('tcl', default=False,
|
|
||||||
description='Enable for optional tcl language bindings'
|
|
||||||
' (not yet functional)')
|
|
||||||
|
|
||||||
variant('pangocairo', default=False,
|
# Additional language bindings are nominally supported by GraphViz via SWIG
|
||||||
description='Build with pango+cairo support (more output formats)')
|
# but are untested and need the proper dependencies added:
|
||||||
variant('libgd', default=False,
|
# language_bindings += ['sharp', 'go', 'guile', 'io', 'lua', 'ocaml',
|
||||||
description='Build with libgd support (more output formats)')
|
# 'perl', 'php', 'python', 'r', 'ruby', 'tcl']
|
||||||
variant('gts', default=False,
|
|
||||||
description='Build with GNU Triangulated Surface Library')
|
for lang in language_bindings:
|
||||||
|
variant(lang, default=False,
|
||||||
|
description='Enable for optional {0} language '
|
||||||
|
'bindings'.format(lang))
|
||||||
|
|
||||||
|
# Feature variants
|
||||||
variant('expat', default=False,
|
variant('expat', default=False,
|
||||||
description='Build with Expat support (enables HTML-like labels)')
|
description='Build with Expat support (enables HTML-like labels)')
|
||||||
|
variant('gts', default=False,
|
||||||
|
description='Build with GNU Triangulated Surface Library')
|
||||||
variant('ghostscript', default=False,
|
variant('ghostscript', default=False,
|
||||||
description='Build with Ghostscript support')
|
description='Build with Ghostscript support')
|
||||||
variant('qt', default=False,
|
|
||||||
description='Build with Qt support')
|
|
||||||
variant('gtkplus', default=False,
|
variant('gtkplus', default=False,
|
||||||
description='Build with GTK+ support')
|
description='Build with GTK+ support')
|
||||||
|
variant('libgd', default=False,
|
||||||
|
description='Build with libgd support (more output formats)')
|
||||||
|
variant('pangocairo', default=False,
|
||||||
|
description='Build with pango+cairo support (more output formats)')
|
||||||
|
variant('qt', default=False,
|
||||||
|
description='Build with Qt support')
|
||||||
|
variant('quartz', default=(MACOS_VERSION is not None),
|
||||||
|
description='Build with Quartz and PDF support')
|
||||||
|
variant('x', default=False,
|
||||||
|
description='Use the X Window System')
|
||||||
|
|
||||||
patch('http://www.linuxfromscratch.org/patches/blfs/svn/graphviz-2.40.1-qt5-1.patch',
|
patch('http://www.linuxfromscratch.org/patches/blfs/svn/graphviz-2.40.1-qt5-1.patch',
|
||||||
sha256='bd532df325df811713e311d17aaeac3f5d6075ea4fd0eae8d989391e6afba930',
|
sha256='bd532df325df811713e311d17aaeac3f5d6075ea4fd0eae8d989391e6afba930',
|
||||||
@ -83,47 +66,35 @@ class Graphviz(AutotoolsPackage):
|
|||||||
sha256='813e6529e79161a18b0f24a969b7de22f8417b2e942239e658b5402884541bc2',
|
sha256='813e6529e79161a18b0f24a969b7de22f8417b2e942239e658b5402884541bc2',
|
||||||
when='%intel')
|
when='%intel')
|
||||||
|
|
||||||
parallel = False
|
if not MACOS_VERSION:
|
||||||
|
conflicts('+quartz',
|
||||||
# These language bindings have been tested, we know they work.
|
msg="Graphviz can only be build with Quartz on macOS.")
|
||||||
tested_bindings = ('+java', )
|
elif MACOS_VERSION >= Version('10.9'):
|
||||||
|
# Doesn't detect newer mac os systems as being new
|
||||||
# These language bindings have not yet been tested. They
|
patch('fix-quartz-darwin.patch')
|
||||||
# likely need additional dependencies to get working.
|
|
||||||
untested_bindings = (
|
|
||||||
'+perl',
|
|
||||||
'+sharp', '+go', '+guile', '+io',
|
|
||||||
'+lua', '+ocaml', '+php',
|
|
||||||
'+python', '+r', '+ruby', '+tcl')
|
|
||||||
|
|
||||||
for b in tested_bindings + untested_bindings:
|
|
||||||
depends_on('swig', type='build', when=b)
|
|
||||||
|
|
||||||
|
# Language dependencies
|
||||||
depends_on('java', when='+java')
|
depends_on('java', when='+java')
|
||||||
depends_on('python@2:2.8', when='+python')
|
for lang in language_bindings:
|
||||||
|
depends_on('swig', when=('+' + lang))
|
||||||
|
|
||||||
# +pangocairo
|
# Feature dependencies
|
||||||
depends_on('cairo', when='+pangocairo')
|
depends_on('expat', when='+expat')
|
||||||
depends_on('pango', when='+pangocairo')
|
|
||||||
depends_on('freetype', when='+pangocairo')
|
|
||||||
depends_on('glib', when='+pangocairo')
|
|
||||||
depends_on('fontconfig', when='+pangocairo')
|
|
||||||
depends_on('libpng', when='+pangocairo')
|
|
||||||
depends_on('zlib', when='+pangocairo')
|
|
||||||
# +libgd
|
|
||||||
depends_on('libgd', when='+libgd')
|
depends_on('libgd', when='+libgd')
|
||||||
depends_on('fontconfig', when='+libgd')
|
depends_on('fontconfig', when='+libgd')
|
||||||
depends_on('freetype', when='+libgd')
|
depends_on('freetype', when='+libgd')
|
||||||
# +gts
|
|
||||||
depends_on('gts', when='+gts')
|
|
||||||
# +expat
|
|
||||||
depends_on('expat', when='+expat')
|
|
||||||
# +ghostscript
|
|
||||||
depends_on('ghostscript', when='+ghostscript')
|
depends_on('ghostscript', when='+ghostscript')
|
||||||
# +qt
|
|
||||||
depends_on('qt', when='+qt')
|
|
||||||
# +gtkplus
|
|
||||||
depends_on('gtkplus', when='+gtkplus')
|
depends_on('gtkplus', when='+gtkplus')
|
||||||
|
depends_on('gts', when='+gts')
|
||||||
|
depends_on('cairo', when='+pangocairo')
|
||||||
|
depends_on('fontconfig', when='+pangocairo')
|
||||||
|
depends_on('freetype', when='+pangocairo')
|
||||||
|
depends_on('glib', when='+pangocairo')
|
||||||
|
depends_on('libpng', when='+pangocairo')
|
||||||
|
depends_on('pango', when='+pangocairo')
|
||||||
|
depends_on('zlib', when='+pangocairo')
|
||||||
|
depends_on('qt@4', when='+qt')
|
||||||
|
depends_on('libx11', when="+x")
|
||||||
|
|
||||||
# Build dependencies
|
# Build dependencies
|
||||||
depends_on('pkgconfig', type='build')
|
depends_on('pkgconfig', type='build')
|
||||||
@ -134,6 +105,8 @@ class Graphviz(AutotoolsPackage):
|
|||||||
depends_on('flex', type='build')
|
depends_on('flex', type='build')
|
||||||
depends_on('libtool', type='build')
|
depends_on('libtool', type='build')
|
||||||
|
|
||||||
|
parallel = False
|
||||||
|
|
||||||
def autoreconf(self, spec, prefix):
|
def autoreconf(self, spec, prefix):
|
||||||
# We need to generate 'configure' when checking out sources from git
|
# We need to generate 'configure' when checking out sources from git
|
||||||
# If configure exists nothing needs to be done
|
# If configure exists nothing needs to be done
|
||||||
@ -143,54 +116,34 @@ def autoreconf(self, spec, prefix):
|
|||||||
bash = which('bash')
|
bash = which('bash')
|
||||||
bash('./autogen.sh', 'NOCONFIG')
|
bash('./autogen.sh', 'NOCONFIG')
|
||||||
|
|
||||||
|
def setup_environment(self, spack_env, run_env):
|
||||||
|
if '+quartz' in self.spec:
|
||||||
|
spack_env.set('OBJC', self.compiler.cc)
|
||||||
|
|
||||||
|
@when('%clang platform=darwin')
|
||||||
|
def patch(self):
|
||||||
|
# When using Clang, replace GCC's libstdc++ with LLVM's libc++
|
||||||
|
mkdirs = ['cmd/dot', 'cmd/edgepaint', 'cmd/mingle', 'plugin/gdiplus']
|
||||||
|
filter_file(r'-lstdc\+\+', '-lc++', 'configure.ac',
|
||||||
|
*(d + '/Makefile.am' for d in mkdirs))
|
||||||
|
|
||||||
def configure_args(self):
|
def configure_args(self):
|
||||||
spec = self.spec
|
spec = self.spec
|
||||||
options = []
|
args = ['--disable-silent-rules']
|
||||||
|
|
||||||
need_swig = False
|
use_swig = False
|
||||||
|
for lang in self.language_bindings:
|
||||||
|
if '+' + lang in spec:
|
||||||
|
use_swig = True
|
||||||
|
args.append('--enable-' + lang)
|
||||||
|
|
||||||
for var in self.untested_bindings:
|
args.append('--{0}-swig'.format('enable' if use_swig else 'disable'))
|
||||||
if var in spec:
|
|
||||||
raise InstallError(
|
|
||||||
"The variant {0} for language bindings has not been "
|
|
||||||
"tested. It might or might not work. To try it "
|
|
||||||
"out, run `spack edit graphviz`, and then move '{0}' "
|
|
||||||
"from the `untested_bindings` list to the "
|
|
||||||
"`tested_bindings` list. Be prepared to add "
|
|
||||||
"required dependencies. "
|
|
||||||
"Please then submit a pull request to "
|
|
||||||
"http://github.com/spack/spack".format(var))
|
|
||||||
options.append('--disable-%s' % var[1:])
|
|
||||||
|
|
||||||
for var in self.tested_bindings:
|
for var in ["expat", "gts", "ghostscript", "libgd", "pangocairo",
|
||||||
if var in spec:
|
"qt", "quartz", "x"]:
|
||||||
need_swig = True
|
args += self.with_or_without(var)
|
||||||
options.append('--enable-{0}'.format(var[1:]))
|
|
||||||
else:
|
|
||||||
options.append('--disable-{0}'.format(var[1:]))
|
|
||||||
|
|
||||||
if need_swig:
|
args.append('--{0}-gtk'.format(
|
||||||
options.append('--enable-swig=yes')
|
"with" if "+gtkplus" in spec else "without"))
|
||||||
else:
|
|
||||||
options.append('--enable-swig=no')
|
|
||||||
|
|
||||||
for var in ('+pangocairo', '+libgd', '+gts', '+expat', '+ghostscript',
|
return args
|
||||||
'+qt', '+gtkplus'):
|
|
||||||
feature = var[1:]
|
|
||||||
if feature == 'gtkplus':
|
|
||||||
# In spack terms, 'gtk+' is 'gtkplus' while
|
|
||||||
# the relative configure option is 'gtk'
|
|
||||||
feature = 'gtk'
|
|
||||||
if var in spec:
|
|
||||||
options.append('--with-{0}'.format(feature))
|
|
||||||
else:
|
|
||||||
options.append('--without-{0}'.format(feature))
|
|
||||||
|
|
||||||
# On OSX fix the compiler error:
|
|
||||||
# In file included from tkStubLib.c:15:
|
|
||||||
# /usr/include/tk.h:78:11: fatal error: 'X11/Xlib.h' file not found
|
|
||||||
# include <X11/Xlib.h>
|
|
||||||
if sys.platform == 'darwin':
|
|
||||||
options.append('CFLAGS=-I/opt/X11/include')
|
|
||||||
|
|
||||||
return options
|
|
||||||
|
Loading…
Reference in New Issue
Block a user