# # spec file for package graphviz # # Copyright (c) 2021 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed # upon. The license for this file, and modifications and additions to the # file, is the same license as for the pristine package itself (unless the # license for the pristine package is not an Open Source License, in which # case the license is the MIT License). An "Open Source License" is a # license that conforms to the Open Source Definition (Version 1.9) # published by the Open Source Initiative. # Please submit bugfixes or comments via https://bugs.opensuse.org/ # %global flavor @BUILD_FLAVOR@%{nil} %if "%{flavor}" == "addons" %define psuffix -%{flavor} %else %define psuffix %{nil} %endif #fixes build failure caused by new .debug files, not sure how to fix correctly %define mname graphviz %define libname libgraphviz6 # name of the plugin config file that dot creates %define config_file config6 # Java and ocaml are not in ring1, thus this gets overriden in staging %bcond_without java %bcond_with ocaml %if "%{flavor}" == "addons" # PHP7 requires swig >= 3.0.11, not available on Leap 42.x %if 0%{?suse_version} >= 1500 %define php_version 7 %else %define php_version 5 %endif %define phpconf_dir %{_sysconfdir}/php%{php_version}/conf.d %define phpext_dir %(%{__php_config} --extension-dir) %endif %define ruby_version $(pkg-config --variable=RUBY_API_VERSION %{_libdir}/pkgconfig/ruby-*.pc) # No pkgconfig(gts) in sle12 GA or SPx, but in sle15 %if 0%{?suse_version} == 1315 && !0%{?is_opensuse} %define sle12 1 %else %define sle12 0 %endif Name: graphviz%{psuffix} Version: 2.49.1 Release: 0 Summary: Graph Visualization Tools License: EPL-1.0 Group: Productivity/Graphics/Visualization/Graph URL: https://www.graphviz.org/ Source0: https://gitlab.com/graphviz/graphviz/-/archive/%version/graphviz-%{version}.tar.bz2 Source1: graphviz-rpmlintrc #PATCH-FIX-UPSTREAM add flags to also link against libGLU and libGL Patch0: graphviz-smyrna-link_against_glu.patch Patch1: graphviz-fix-pkgIndex.patch #PATCH-FIX-UPSTREAM Off-by-one bug Patch2: graphviz-array_overflow.patch Patch3: graphviz-2.20.2-interpreter_names.patch #PATCH-FIX-UPSTREAM Don't warn about harmless issues with swig generated code Patch4: graphviz-useless_warnings.patch Patch5: graphviz-no_strict_aliasing.patch Patch6: graphviz-no_php_extra_libs.patch BuildRequires: autoconf BuildRequires: automake BuildRequires: bison BuildRequires: fdupes BuildRequires: flex BuildRequires: gcc-c++ BuildRequires: groff BuildRequires: guile-devel BuildRequires: libstdc++-devel BuildRequires: libtool BuildRequires: pkgconfig BuildRequires: pkgconfig(expat) %if 0%{sle12} != 1 BuildRequires: pkgconfig(gts) %endif BuildRequires: pkgconfig(zlib) Requires: graphviz-plugins-core = %{version} Recommends: graphviz-gd = %{version} %if "%{flavor}" == "addons" BuildRequires: freeglut-devel BuildRequires: ghostscript BuildRequires: libjpeg-devel BuildRequires: libpng-devel BuildRequires: libwebp-devel BuildRequires: perl %if 0%{?suse_version} >= 1500 BuildRequires: php7-devel BuildRequires: swig >= 3.0.11 %else BuildRequires: php5-devel BuildRequires: swig %endif BuildRequires: ruby-devel BuildRequires: pkgconfig(Qt5Core) BuildRequires: pkgconfig(Qt5PrintSupport) BuildRequires: pkgconfig(Qt5Widgets) BuildRequires: pkgconfig(cairo) BuildRequires: pkgconfig(fontconfig) BuildRequires: pkgconfig(freetype2) >= 2 BuildRequires: pkgconfig(gdlib) BuildRequires: pkgconfig(glib-2.0) BuildRequires: pkgconfig(glu) BuildRequires: pkgconfig(gtkglext-1.0) BuildRequires: pkgconfig(ice) BuildRequires: pkgconfig(ijs) BuildRequires: pkgconfig(libglade-2.0) BuildRequires: pkgconfig(librsvg-2.0) BuildRequires: pkgconfig(lua) BuildRequires: pkgconfig(pango) BuildRequires: pkgconfig(python3) BuildRequires: pkgconfig(sm) BuildRequires: pkgconfig(tcl) BuildRequires: pkgconfig(x11) BuildRequires: pkgconfig(xaw7) BuildRequires: pkgconfig(xext) %if %{with java} BuildRequires: java-devel >= 1.6.0 %endif %if %{with ocaml} BuildRequires: ocaml %endif %else BuildRequires: ghostscript_any %endif %description A collection of tools and tcl packages for the manipulation and layout of graphs (as in nodes and edges, not as in bar charts). %package -n graphviz-gvedit Summary: Graph editor based on Qt Group: Productivity/Graphics/Visualization/Graph Requires: graphviz %description -n graphviz-gvedit The Qt5 graph editor included with graphviz, packaged separately to avoid cycles in the build of the graphviz package. %package -n graphviz-smyrna Summary: Large graph viewer Group: Productivity/Graphics/Visualization/Graph Requires: graphviz %description -n graphviz-smyrna Experimental large graph viewer using graphviz %package -n graphviz-gnome Summary: Graphviz plugins that use gtk/GNOME Group: Productivity/Graphics/Visualization/Graph Recommends: plugin-core = %{version} Requires(post): graphviz = %{version} Supplements: packageand(graphviz:xorg-x11-fonts-core) %description -n graphviz-gnome Graphviz plugins that use gtk/GNOME. %package -n graphviz-gd Summary: Graphviz plugin for renderers based on gd Group: Productivity/Graphics/Visualization/Graph Requires(post): graphviz >= %{version} %description -n graphviz-gd The graphviz-gd package contains the gd extensions for the graphviz tools. %package -n graphviz-guile Summary: Graph Visualization Tools Group: Productivity/Graphics/Visualization/Graph Requires: graphviz = %{version} Requires: guile %description -n graphviz-guile A collection of tools and tcl packages for the manipulation and layout of graphs (as in nodes and edges, not as in bar charts). %package -n graphviz-java Summary: Graph Visualization Tools Group: Productivity/Graphics/Visualization/Graph Requires: graphviz = %{version} Requires: java %description -n graphviz-java A collection of tools and tcl packages for the manipulation and layout of graphs (as in nodes and edges, not as in bar charts). %package -n graphviz-x11 Summary: Graph editors based on X11 Group: Productivity/Graphics/Visualization/Graph Requires: graphviz %description -n graphviz-x11 The lefty/dotty/lneato X11 graph editors included with graphviz, packaged separately to reduce build dependencies. %package -n graphviz-lua Summary: Lua extension for graphviz Group: Productivity/Graphics/Visualization/Graph Requires: graphviz = %{version} Requires: lua %description -n graphviz-lua The graphviz-lua package contains the lua extension for the graphviz tools. %package -n graphviz-ocaml Summary: OCAML extension for graphviz Group: Productivity/Graphics/Visualization/Graph Requires: graphviz = %{version} Requires: ocaml %description -n graphviz-ocaml The graphviz-ocaml package contains the Objective Caml extension for the graphviz tools. %package -n graphviz-perl Summary: Perl extension for Graphviz Group: Productivity/Graphics/Visualization/Graph Requires: graphviz = %{version} Requires: perl = %{perl_version} %description -n graphviz-perl The graphviz-perl package contains the Perl extension for the graphviz tools. %package -n graphviz-php Summary: PHP Extension for Graphviz Group: Productivity/Graphics/Visualization/Graph Requires: graphviz = %{version} Requires: php%{php_version} Requires: php(api) = %{php_core_api} Requires: php(zend-abi) = %{php_zend_api} %description -n graphviz-php The graphviz-php package contains the PHP extension for the graphviz tools. %package -n python3-gv Summary: Python 3 Extension for Graphviz Group: Productivity/Graphics/Visualization/Graph Requires: graphviz = %{version} Provides: graphviz-python Obsoletes: graphviz-python %description -n python3-gv The package contains the Python extension for the graphviz tools. %package -n graphviz-ruby Summary: Ruby Extension for Graphviz Group: Productivity/Graphics/Visualization/Graph Requires: graphviz = %{version} Requires: ruby %description -n graphviz-ruby The graphviz-ruby package contains the ruby extension for the graphviz tools. %package -n graphviz-tcl Summary: Tcl extension tools for graphviz Group: Development/Libraries/Tcl Requires: graphviz = %{version} Requires: tcl >= 8.3 Requires: tk %description -n graphviz-tcl The graphviz-tcl package contains the various tcl packages (extensions) for the graphviz tools. %package -n graphviz-webp Summary: WebP support for graphviz Group: Productivity/Graphics/Visualization/Graph Requires: graphviz = %{version} Requires: graphviz-gnome = %{version} Requires: libwebp7 %description -n graphviz-webp The graphviz-webp package contains files needed for the support of WebP images %package -n graphviz-doc Summary: Documentation for graphviz Group: Documentation/Howto %description -n graphviz-doc Provides some additional PDF and HTML documentation for graphviz. %package -n %{libname} Summary: Library for the manipulation of layout of graphs Group: System/Libraries Recommends: graphviz-plugins-core Requires: libcdt5 %description -n %{libname} Library for the manipulation of layout of graphs (as in nodes and edges, not as in bar charts). This is a meta package. %package -n libcdt5 Summary: Container data types for Graphviz Group: System/Libraries %description -n libcdt5 Library providing container data types for Graphviz. This is part of the %{libname} meta package %package -n libcgraph6 Summary: Library for graph programming Group: System/Libraries Requires: %{libname} %description -n libcgraph6 Libcgraph supports graph programming by maintaining graphs in memory and reading and writing graph files. Graphs are composed of nodes, edges, and nested subgraphs. These graph objects may be attributed with string name-value pairs and programmer-defined records. This package is part of the %{libname} meta package. %package -n libgvc6 Summary: Graphviz context library Group: System/Libraries Requires: %{libname} = %{version} %description -n libgvc6 libgvc provides a context for applications wishing to manipulate and render graphs. It provides a command line parsing, common rendering code, and a plugin mechanism for renderers. This package is part of the %{libname} meta package. %package -n libgvpr2 Summary: Library for graph filtering Group: System/Libraries Requires: %{libname} = %{version} %description -n libgvpr2 The gvpr library allows an application to perform general-purpose graph manipulation and filtering based on an awk-like language %package -n libpathplan4 Summary: Library for finding smooth shortest paths Group: System/Libraries Requires: %{libname} = %{version} %description -n libpathplan4 The pathplan library contains functions for finding shortest paths in polygons in fitting bezier curves to those paths. This package is part of the %{libname} meta package. %package -n libxdot4 Summary: Library for parsing and deparsing of xdot operations Group: System/Libraries Requires: %{libname} = %{version} %description -n libxdot4 The libxdot library provides support for parsing and deparsing graphical operations specificed by the xdot language. This package is part of the %{libname} meta package. %package -n liblab_gamut1 Summary: Library containing a rich set of graph drawing tools Group: System/Libraries Requires: %{libname} = %{version} %description -n liblab_gamut1 The lab_gamut library contains a rich set of graph drawing tools. This package is part of the %{libname} meta package. %package plugins-core Summary: Core plugins for graphviz # Needed for dot binary Group: Productivity/Graphics/Visualization/Graph Requires(post): %{mname} %description plugins-core Core plugins for graphviz: * libgvplugin_core * libgvplugin_dot_layout * libgvplugin_neato_layout %package devel Summary: Graphviz development package Group: Development/Libraries/C and C++ Requires: %{libname} = %{version} Requires: %{mname} = %{version} %description devel The graphviz-devel package contains all that's necessary for developing programs that use the graphviz libraries including man3 pages. #autosetup breaks graphviz-addons %prep %setup -q -n %{mname}-%{version} %patch0 %patch1 %patch2 %patch3 %patch4 %patch5 -p1 %patch6 # pkg-config returns 0 (TRUE) when guile-2.2 is present if pkg-config --atleast-version=2.2 guile-2.2; then sed "s/guile-2.0/guile-2.2/" -i configure.ac fi rm -f contrib/gprof2dot.awk # Fix path for lua/php install sed -i \ -e 's@LUA_INSTALL_DIR="/usr.*@LUA_INSTALL_DIR=%{lua_archdir}@' \ -e 's@\(PHP_INSTALL_DIR=.*\)/php/modules@\1/php%{php_version}/extensions@' \ -e 's@\(PHP_INSTALL_DATADIR=.*\)/php@\1/php%{php_version}@' \ configure.ac %build ./autogen.sh RUBY_VER=%{ruby_version} CFLAGS="%{optflags} -ffast-math -fno-strict-aliasing -fno-strict-overflow -fPIC" %if "%{flavor}" == "addons" CFLAGS="$CFLAGS -I/usr/include/ruby-%{ruby_version}.0" #seems to be broken? gives -I/usr/lib64/ruby/2.6.0/x86_64-linux-gnu, ruby.h is in /usr/lib64/ruby/2.6.0 #CFLAGS="$CFLAGS $(pkg-config --cflags ruby-$(echo {rb_ver} | sed 's|\.[^.]*$||'))" %endif export CFLAGS="$CFLAGS" export CPPFLAGS="$CFLAGS" export LDFLAGS="-pie" %configure \ --disable-static \ --without-included-ltdl \ --disable-ltdl-install \ --with-ipsepcola \ --without-ming \ --disable-io \ --without-visio \ %if "%{flavor}" == "addons" --with-x \ --with-qt \ --with-smyrna \ RUBY_VER=%{ruby_version} \ %else --without-mylibgd \ --without-libgd \ %endif --disable-silent-rules make %{?_smp_mflags} %install make install \ DESTDIR=%{buildroot} \ docdir=%{buildroot}%{_docdir}/%{mname} \ pkgconfigdir=%{_libdir}/pkgconfig find %{buildroot} -type f -name "*.la" -delete -print mkdir -p %{buildroot}/%{_docdir} mkdir -p %{buildroot}%{_datadir}/%{nmame} rm -f %{buildroot}/%{_libdir}/%{mname}/pkgIndex.tcl chmod -x %{buildroot}%{_datadir}/%{mname}/lefty/* mkdir -p %{buildroot}%{_libdir}/graphviz touch %{buildroot}%{_libdir}/graphviz/%{config_file} mkdir -p %{buildroot}%{_sysconfdir}/ld.so.conf.d/ cat <%{buildroot}%{_sysconfdir}/ld.so.conf.d/%{mname}.conf %{_libdir}/%{mname} %{_libdir}/%{mname}/sharp %{_libdir}/%{mname}/java %{_libdir}/%{mname}/perl %{_libdir}/%{mname}/php %{_libdir}/%{mname}/ocaml %{_libdir}/%{mname}/python %{_libdir}/%{mname}/lua %{_libdir}/%{mname}/tcl %{_libdir}/%{mname}/guile %{_libdir}/%{mname}/ruby EOF #Correct the path to the shared library for manfile in $(find %{buildroot} -name \*.man); do sed -i \ -e 's$%{_prefix}/lib/graphviz$%{_libdir}/%{mname}$g' \ $manfile done # There are no such binaries distributed by us rm -f %{buildroot}%{_mandir}/man1/mingle.1 %if "%{flavor}" == "addons" mkdir -p %{buildroot}/%{phpconf_dir} cat > %{buildroot}%{phpconf_dir}/gv.ini </dev/null %post -n graphviz-gnome %{_bindir}/dot -c %postun -n graphviz-gnome %{_bindir}/dot -c 2>/dev/null %files -n graphviz-gnome %{_libdir}/graphviz/libgvplugin_gs* %{_libdir}/graphviz/libgvplugin_rsvg* %{_libdir}/graphviz/libgvplugin_pango* %{_libdir}/graphviz/libgvplugin_gtk* %{_libdir}/graphviz/libgvplugin_xlib* %{_libdir}/graphviz/libgvplugin_gdk* %post -n graphviz-tcl -p /sbin/ldconfig %postun -n graphviz-tcl -p /sbin/ldconfig %post -n graphviz-webp %{_bindir}/dot -c %postun -n graphviz-webp %{_bindir}/dot -c 2>/dev/null %files -n graphviz-guile %{_libdir}/graphviz/guile %{_mandir}/man3/gv.3guile%{ext_man} %if %{with java} %files -n graphviz-java %{_libdir}/graphviz/java %{_mandir}/man3/gv.3java%{ext_man} %endif %files -n graphviz-lua %{lua_archdir}/gv.so %{_mandir}/man3/gv.3lua%{ext_man} %files -n graphviz-x11 %license epl-v10.txt %{_bindir}/dotty %{_bindir}/lefty %{_bindir}/lneato %{_datadir}/%{mname}/lefty %{_mandir}/man1/dotty.1%{ext_man} %{_mandir}/man1/lefty.1%{ext_man} %{_mandir}/man1/lneato.1%{ext_man} %if %{with ocaml} %files -n graphviz-ocaml %{_libdir}/graphviz/ocaml %{_mandir}/man3/gv.3ocaml%{ext_man} %endif %files -n graphviz-perl %{perl_vendorarch}/gv.pm %{perl_vendorarch}/gv.so %{_mandir}/man3/gv.3perl%{ext_man} %files -n graphviz-php %{phpext_dir}/gv.so %{_datadir}/php%{php_version}/gv.php %{_mandir}/man3/gv.3php%{ext_man} %config(noreplace) %{phpconf_dir}/gv.ini %files -n python3-gv %dir %{_libdir}/graphviz/python3 %{python3_sitearch}/_gv.so %{python3_sitearch}/gv.py %{_libdir}/graphviz/python3/_gv.so %{_libdir}/graphviz/python3/gv.py %{_libdir}/graphviz/python3/libgv_python3.so %{_mandir}/man3/gv.3python%{ext_man} %files -n graphviz-ruby %{rb_vendorarchdir}/gv.so %{_mandir}/man3/gv.3ruby%{ext_man} %files -n graphviz-tcl %dir %{_datadir}/tcl/%{mname} %{_libdir}/tcl[0-9].[0-9] %{_libdir}/libgdtclft* %{_libdir}/libgv_tcl.so %{_libdir}/libtcldot* %{_libdir}/libtclplan* %{_datadir}/tcl/%{mname}/pkgIndex.tcl %{_mandir}/man3/*.3tcl* %files -n graphviz-webp %{_libdir}/graphviz/libgvplugin_webp.so* %files -n graphviz-doc %docdir %{_defaultdocdir}/%{mname}-doc %{_defaultdocdir}/%{mname}-doc %{_datadir}/graphviz/demo %else %files %doc doc/FAQ.html AUTHORS README NEWS ChangeLog %license epl-v10.txt %{_bindir}/acyclic %{_bindir}/bcomps %{_bindir}/ccomps %{_bindir}/circo %{_bindir}/cluster %{_bindir}/dijkstra %{_bindir}/dot %{_bindir}/dot2gxl %{_bindir}/dot_builtins %{_bindir}/edgepaint %{_bindir}/fdp %{_bindir}/gc %{_bindir}/gml2gv %{_bindir}/graphml2gv %{_bindir}/gv2gml %{_bindir}/gv2gxl %{_bindir}/gvcolor %{_bindir}/gvgen %{_bindir}/gvmap %{_bindir}/gvmap.sh %{_bindir}/gvpack %{_bindir}/gvpr %{_bindir}/gxl2dot %{_bindir}/gxl2gv %{_bindir}/mm2gv %{_bindir}/neato %{_bindir}/nop %{_bindir}/osage %{_bindir}/patchwork %{_bindir}/prune %{_bindir}/sccmap %{_bindir}/sfdp %{_bindir}/tred %{_bindir}/twopi %{_bindir}/unflatten %dir %{_datadir}/%{mname} %{_datadir}/%{mname}/graphs %dir %{_datadir}/%{mname}/gvpr %{_datadir}/%{mname}/gvpr/addranks %{_datadir}/%{mname}/gvpr/addrings %{_datadir}/%{mname}/gvpr/anon %{_datadir}/%{mname}/gvpr/attr %{_datadir}/%{mname}/gvpr/bb %{_datadir}/%{mname}/gvpr/bbox %{_datadir}/%{mname}/gvpr/cliptree %{_datadir}/%{mname}/gvpr/col %{_datadir}/%{mname}/gvpr/collapse %{_datadir}/%{mname}/gvpr/color %{_datadir}/%{mname}/gvpr/dechain %{_datadir}/%{mname}/gvpr/deghist %{_datadir}/%{mname}/gvpr/deledges %{_datadir}/%{mname}/gvpr/delmulti %{_datadir}/%{mname}/gvpr/delnodes %{_datadir}/%{mname}/gvpr/depath %{_datadir}/%{mname}/gvpr/dijkstra %{_datadir}/%{mname}/gvpr/flatten %{_datadir}/%{mname}/gvpr/get-layers-list %{_datadir}/%{mname}/gvpr/group %{_datadir}/%{mname}/gvpr/indent %{_datadir}/%{mname}/gvpr/knbhd %{_datadir}/%{mname}/gvpr/maxdeg %{_datadir}/%{mname}/gvpr/path %{_datadir}/%{mname}/gvpr/rotate %{_datadir}/%{mname}/gvpr/scale %{_datadir}/%{mname}/gvpr/scalexy %{_datadir}/%{mname}/gvpr/span %{_datadir}/%{mname}/gvpr/topon %{_datadir}/%{mname}/gvpr/treetoclust %{_datadir}/%{mname}/gvpr/chkclusters %{_datadir}/%{mname}/gvpr/cycle %{_datadir}/%{mname}/gvpr/addedges %{_datadir}/%{mname}/gvpr/binduce %{_datadir}/%{mname}/gvpr/bipart %{_datadir}/%{mname}/gvpr/chkedges %{_datadir}/%{mname}/gvpr/histogram %{_mandir}/man1/*.1%{ext_man} %{_mandir}/man7/*.7%{ext_man} %exclude %{_mandir}/man1/smyrna.1%{ext_man} %files -n %{libname} %config %{_sysconfdir}/ld.so.conf.d/graphviz.conf %files -n libcdt5 %{_libdir}/libcdt.so.5* %files -n libcgraph6 %{_libdir}/libcgraph.so.6* %files -n libgvc6 %{_libdir}/libgvc.so.6* %files -n libgvpr2 %{_libdir}/libgvpr.so.2* %files -n libpathplan4 %{_libdir}/libpathplan.so.4* %files -n libxdot4 %{_libdir}/libxdot.so.4* %files -n liblab_gamut1 %{_libdir}/liblab_gamut.so.1* %files plugins-core %dir %{_libdir}/%{name} %ghost %{_libdir}/%{name}/%{config_file} %{_libdir}/%{name}/*.so* %files devel %{_includedir}/graphviz %{_libdir}/*.so %{_libdir}/pkgconfig/*.pc %{_mandir}/man3/*.3%{ext_man} %endif %changelog