# # 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 %bcond_without python2 Name: graphviz%{psuffix} Version: 2.46.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/2.46.1/graphviz-%{version}.tar.gz Source1: graphviz-rpmlintrc #PATCH-FIX-UPSTREAM add flags to also link against libGLU and libGL Patch1: graphviz-smyrna-link_against_glu.patch Patch2: graphviz-fix-pkgIndex.patch #PATCH-FIX-UPSTREAM Off-by-one bug Patch3: graphviz-array_overflow.patch Patch6: graphviz-2.20.2-interpreter_names.patch #PATCH-FIX-UPSTREAM Don't warn about harmless issues with swig generated code Patch7: graphviz-useless_warnings.patch Patch8: graphviz-no_strict_aliasing.patch Patch9: graphviz-no_php_extra_libs.patch Patch10: graphviz-2.46-fix-shebang.patch BuildRequires: autoconf BuildRequires: automake BuildRequires: bison BuildRequires: fdupes BuildRequires: flex BuildRequires: gcc-c++ BuildRequires: ghostscript-mini 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: 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) %if %{with python2} BuildRequires: pkgconfig(python) %endif 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 %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 python2-gv Summary: Python Extension for Graphviz Group: Productivity/Graphics/Visualization/Graph Requires: graphviz = %{version} %description -n python2-gv The package contains the Python 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 %description -n %{libname} Library for the manipulation of layout of graphs (as in nodes and edges, not as in bar charts). %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} %patch1 %patch2 %patch3 %patch6 %patch7 %patch8 -p1 %patch9 %patch10 -p1 # 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" %if %{with python2} --enable-python2 \ %else --disable-python \ --disable-python2 \ %endif --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 COPYING %{_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 %if %{with python2} %files -n python2-gv %dir %{_libdir}/graphviz/python2 %{python_sitearch}/_gv.so %{python_sitearch}/gv.py %{_libdir}/graphviz/python2/_gv.so %{_libdir}/graphviz/python2/gv.py %{_libdir}/graphviz/python2/libgv_python2.so %endif %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 COPYING %{_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} %{_libdir}/*.so.* %config %{_sysconfdir}/ld.so.conf.d/graphviz.conf %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