From 09d4fcc6ad89695429135479835c4f36853a4c93 Mon Sep 17 00:00:00 2001 From: "Seth R. Johnson" Date: Tue, 6 Aug 2019 19:26:45 -0400 Subject: 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 --- .../packages/graphviz/fix-quartz-darwin.patch | 30 +++ .../repos/builtin/packages/graphviz/package.py | 211 ++++++++------------- 2 files changed, 112 insertions(+), 129 deletions(-) create mode 100644 var/spack/repos/builtin/packages/graphviz/fix-quartz-darwin.patch (limited to 'var') diff --git a/var/spack/repos/builtin/packages/graphviz/fix-quartz-darwin.patch b/var/spack/repos/builtin/packages/graphviz/fix-quartz-darwin.patch new file mode 100644 index 0000000000..f20ade2f95 --- /dev/null +++ b/var/spack/repos/builtin/packages/graphviz/fix-quartz-darwin.patch @@ -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 diff --git a/var/spack/repos/builtin/packages/graphviz/package.py b/var/spack/repos/builtin/packages/graphviz/package.py index 01b2e087c8..78cf3e6db4 100644 --- a/var/spack/repos/builtin/packages/graphviz/package.py +++ b/var/spack/repos/builtin/packages/graphviz/package.py @@ -4,10 +4,15 @@ # SPDX-License-Identifier: (Apache-2.0 OR MIT) from spack import * +from spack.operating_systems.mac_os import macos_version + import os import sys +MACOS_VERSION = macos_version() if sys.platform == 'darwin' else None + + class Graphviz(AutotoolsPackage): """Graph Visualization Software""" @@ -17,60 +22,38 @@ class Graphviz(AutotoolsPackage): # This commit hash is tag='stable_release_2.40.1' version('2.40.1', commit='67cd2e5121379a38e0801cc05cce5033f8a2a609') - # We try to leave language bindings enabled if they don't cause - # build issues or add dependencies. - 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)') + # Language bindings + language_bindings = ['java'] - variant('pangocairo', default=False, - description='Build with pango+cairo support (more output formats)') - variant('libgd', default=False, - description='Build with libgd support (more output formats)') - variant('gts', default=False, - description='Build with GNU Triangulated Surface Library') + # Additional language bindings are nominally supported by GraphViz via SWIG + # but are untested and need the proper dependencies added: + # language_bindings += ['sharp', 'go', 'guile', 'io', 'lua', 'ocaml', + # 'perl', 'php', 'python', 'r', 'ruby', 'tcl'] + + for lang in language_bindings: + variant(lang, default=False, + description='Enable for optional {0} language ' + 'bindings'.format(lang)) + + # Feature variants variant('expat', default=False, description='Build with Expat support (enables HTML-like labels)') + variant('gts', default=False, + description='Build with GNU Triangulated Surface Library') variant('ghostscript', default=False, description='Build with Ghostscript support') - variant('qt', default=False, - description='Build with Qt support') variant('gtkplus', default=False, 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', sha256='bd532df325df811713e311d17aaeac3f5d6075ea4fd0eae8d989391e6afba930', @@ -83,47 +66,35 @@ class Graphviz(AutotoolsPackage): sha256='813e6529e79161a18b0f24a969b7de22f8417b2e942239e658b5402884541bc2', when='%intel') - parallel = False - - # These language bindings have been tested, we know they work. - tested_bindings = ('+java', ) - - # These language bindings have not yet been tested. They - # 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) + if not MACOS_VERSION: + conflicts('+quartz', + msg="Graphviz can only be build with Quartz on macOS.") + elif MACOS_VERSION >= Version('10.9'): + # Doesn't detect newer mac os systems as being new + patch('fix-quartz-darwin.patch') + # Language dependencies depends_on('java', when='+java') - depends_on('python@2:2.8', when='+python') + for lang in language_bindings: + depends_on('swig', when=('+' + lang)) - # +pangocairo - depends_on('cairo', when='+pangocairo') - 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 + # Feature dependencies + depends_on('expat', when='+expat') depends_on('libgd', when='+libgd') depends_on('fontconfig', 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') - # +qt - depends_on('qt', when='+qt') - # +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 depends_on('pkgconfig', type='build') @@ -134,6 +105,8 @@ class Graphviz(AutotoolsPackage): depends_on('flex', type='build') depends_on('libtool', type='build') + parallel = False + def autoreconf(self, spec, prefix): # We need to generate 'configure' when checking out sources from git # If configure exists nothing needs to be done @@ -143,54 +116,34 @@ class Graphviz(AutotoolsPackage): bash = which('bash') 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): spec = self.spec - options = [] - - need_swig = False - - for var in self.untested_bindings: - 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: - if var in spec: - need_swig = True - options.append('--enable-{0}'.format(var[1:])) - else: - options.append('--disable-{0}'.format(var[1:])) - - if need_swig: - options.append('--enable-swig=yes') - else: - options.append('--enable-swig=no') - - for var in ('+pangocairo', '+libgd', '+gts', '+expat', '+ghostscript', - '+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 - if sys.platform == 'darwin': - options.append('CFLAGS=-I/opt/X11/include') - - return options + args = ['--disable-silent-rules'] + + use_swig = False + for lang in self.language_bindings: + if '+' + lang in spec: + use_swig = True + args.append('--enable-' + lang) + + args.append('--{0}-swig'.format('enable' if use_swig else 'disable')) + + for var in ["expat", "gts", "ghostscript", "libgd", "pangocairo", + "qt", "quartz", "x"]: + args += self.with_or_without(var) + + args.append('--{0}-gtk'.format( + "with" if "+gtkplus" in spec else "without")) + + return args -- cgit v1.2.3-70-g09d2