# # spec file for package graphviz # # Copyright (c) 2017 SUSE LINUX GmbH, Nuernberg, Germany. # # 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 http://bugs.opensuse.org/ # %define mname graphviz %define libname libgraphviz6 # name of the plugin config file that dot creates %define config_file config6 # Build with extras or not, determines pulling additional dependencies # and breaks build cycle %bcond_with extras # Java and ocaml are not in ring1, thus this gets overriden in staging %bcond_without java %bcond_without ocaml Name: graphviz Version: 2.40.1 Release: 0 Summary: Graph Visualization Tools License: EPL-1.0 Group: Productivity/Graphics/Visualization/Graph Url: http://www.graphviz.org/ Source: http://graphviz.org/pub/graphviz/stable/SOURCES/graphviz-%{version}.tar.gz Source2: graphviz-rpmlintrc #PATCH-FIX-UPSTREAM Build qith Qt5 rather than with qt4 Patch0: graphviz-qt5.patch #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 #PATCH-FIX-UPSTREAM Make build reproducible - merged in next release Patch4: reproducible.patch Patch5: graphviz-plugins-fix_install_dirs.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 BuildRequires: autoconf BuildRequires: automake BuildRequires: bison BuildRequires: fdupes BuildRequires: flex BuildRequires: gcc-c++ BuildRequires: libjpeg-devel BuildRequires: libpng-devel BuildRequires: libstdc++-devel BuildRequires: libtool BuildRequires: pkgconfig BuildRequires: pkgconfig(expat) BuildRequires: pkgconfig(fontconfig) BuildRequires: pkgconfig(freetype2) >= 2 BuildRequires: pkgconfig(glib-2.0) BuildRequires: pkgconfig(ice) BuildRequires: pkgconfig(sm) BuildRequires: pkgconfig(x11) BuildRequires: pkgconfig(xaw6) BuildRequires: pkgconfig(xaw7) BuildRequires: pkgconfig(xext) BuildRequires: pkgconfig(zlib) Requires: graphviz-plugins-core = %{version} Recommends: graphviz-gd = %{version} %if %{with extras} BuildRequires: freeglut-devel BuildRequires: perl BuildRequires: php7-devel BuildRequires: ruby-devel BuildRequires: swig BuildRequires: pkgconfig(Qt5Core) BuildRequires: pkgconfig(Qt5PrintSupport) BuildRequires: pkgconfig(Qt5Widgets) BuildRequires: pkgconfig(cairo) BuildRequires: pkgconfig(gdlib) BuildRequires: pkgconfig(glib-2.0) BuildRequires: pkgconfig(glu) BuildRequires: pkgconfig(gtkglext-1.0) BuildRequires: pkgconfig(gts) BuildRequires: pkgconfig(guile-2.0) BuildRequires: pkgconfig(ijs) BuildRequires: pkgconfig(libglade-2.0) BuildRequires: pkgconfig(librsvg-2.0) BuildRequires: pkgconfig(lua) BuildRequires: pkgconfig(pango) BuildRequires: pkgconfig(python) BuildRequires: pkgconfig(tcl) %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 Requires(post): graphviz = %{version} Recommends: xorg-x11-fonts Supplements: graphviz-plugins-core 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-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: php7 %description -n graphviz-php The graphviz-php package contains the PHP extension for the graphviz tools. %package -n graphviz-python Summary: Python Extension for Graphviz Group: Productivity/Graphics/Visualization/Graph Requires: graphviz = %{version} Requires: python %description -n graphviz-python The graphviz-python 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-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. %prep %setup -q -n %{mname}-%{version} %patch0 -p1 %patch1 %patch2 %patch3 %patch4 -p1 %patch5 %patch6 %patch7 %patch8 rm -f contrib/gprof2dot.awk # Fix path in generated man pages sed -i \ -e 's$@LIB_DIR@$%{_libdir}$g' \ tclpkg/gv/gv_doc_langs.tcl # Fix path for lua install sed -i \ -e 's@LUA_INSTALL_DIR="/usr.*@LUA_INSTALL_DIR=%{lua_archdir}@' \ configure.ac %build autoreconf -fvi CFLAGS="%{optflags} -ffast-math -fno-strict-aliasing -fno-strict-overflow -fPIC" %if %{with extras} CFLAGS="$CFLAGS $(pkg-config --cflags ruby-$(echo %{rb_ver} | sed 's|\.[^.]*$||'))" %endif export CFLAGS="$CFLAGS" export CPPFLAGS="$CFLAGS" export LDFLAGS="-pie" %configure \ --with-x \ --disable-static \ --without-included-ltdl \ --disable-ltdl-install \ --with-ipsepcola \ --without-ming \ --disable-io \ %if %{with extras} --with-qt \ --with-smyrna \ %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 %{with extras} # Fix doc location cp -a %{buildroot}%{_datadir}/%{mname}/doc %{buildroot}%{_defaultdocdir}/%{mname}-doc %fdupes -s %{buildroot}%{_defaultdocdir}/%{mname}-doc # Prune all the content of the base graphviz package rm -rf %{buildroot}%{_libdir}/pkgconfig rm -rf %{buildroot}%{_includedir} rm -rf %{buildroot}%{_datadir}/graphviz/examples rm -rf %{buildroot}%{_datadir}/graphviz/graphs rm -rf %{buildroot}%{_datadir}/graphviz/lefty rm -rf %{buildroot}%{_datadir}/graphviz/gvpr rm -f %{buildroot}%{_mandir}/man3/*.3 rm -f %{buildroot}%{_mandir}/man7/*.7 rm -f %{buildroot}%{_libdir}/graphviz/%{config_file} rm -f %{buildroot}%{_libdir}/graphviz/libgvplugin_core* rm -f %{buildroot}%{_libdir}/graphviz/libgvplugin_dot_layout* rm -f %{buildroot}%{_libdir}/graphviz/libgvplugin_neato_layout* # binaries removal for i in acyclic bcomps ccomps circo cluster dijkstra dot dot2gxl dot_builtins dotty edgepaint fdp gc gml2gv graphml2gv gv2gml gv2gxl gvcolor gvgen gvmap gvmap.sh gvpack gvpr gxl2dot gxl2gv lefty lneato mm2gv neato nop osage patchwork prune sccmap sfdp tred twopi unflatten vimdot; do rm -f %{buildroot}%{_bindir}/$i rm -f %{buildroot}%{_mandir}/man1/$i.1 done # libraries removal rm -f %{buildroot}%{_sysconfdir}/ld.so.conf.d/graphviz.conf rm -f %{buildroot}%{_libdir}/lib{cdt,cgraph,gvc,gvpr,pathplan,xdot,lab_gamut}.so* # Fix tcl locations for lib in libgdtclft* libgv_tcl.so libtcldot* libtclplan* ; do mv %{buildroot}%{_libdir}/%{mname}/tcl/${lib} %{buildroot}%{_libdir} done # remove duplicated tcl files for i in libgdtclft.so.0.0.0 libgv_tcl.so libtcldot.so.0.0.0 libtcldot_builtin.so.0.0.0 libtclplan.so.0.0.0; do rm -f %{buildroot}%{_libdir}/tcl8.6/graphviz/$i ln -s %{_libdir}/$i %{buildroot}%{_libdir}/tcl8.6/graphviz/$i done mkdir -p %{buildroot}%{_datadir}/tcl/%{mname}/ mv %{buildroot}%{_libdir}/%{mname}/tcl/pkgIndex.tcl %{buildroot}%{_datadir}/tcl/%{mname}/pkgIndex.tcl # remove graphviz bindings from graphviz dir, these are installed into the language specific directories rm -rf %{buildroot}%{_libdir}/graphviz/lua rm -rf %{buildroot}%{_libdir}/graphviz/perl rm -rf %{buildroot}%{_libdir}/graphviz/php rm -rf %{buildroot}%{_libdir}/graphviz/python rm -rf %{buildroot}%{_libdir}/graphviz/ruby %else # These are part of gnome subpkg rm -f %{buildroot}%{_libdir}/graphviz/libgvplugin_pango* rm -f %{buildroot}%{_libdir}/graphviz/libgvplugin_xlib* # This is part of the gd subpkg only rm -f %{buildroot}%{_mandir}/man1/diffimg.1 %endif # Remove wrongly located docs rm -rf %{buildroot}%{_datadir}/%{mname}/doc %post plugins-core # run "dot -c" to generate plugin config %%{_libdir}/graphviz/config dot -c test -s %{_libdir}/graphviz/%{config_file} || echo "%{_libdir}/graphviz/%{config_file} doesn't exist! Check installation." %postun plugins-core if ! test -x %{_bindir}/dot; then rm -f %{_libdir}/%{mname}/%{config_file} fi %post -n %{libname} -p /sbin/ldconfig %postun -n %{libname} -p /sbin/ldconfig %if %{with extras} %files -n graphviz-gvedit %doc COPYING %{_bindir}/gvedit %dir %{_datadir}/%{mname}/gvedit %{_datadir}/%{mname}/gvedit/attrs.txt %{_mandir}/man1/gvedit.1%{ext_man} %files -n graphviz-smyrna %doc COPYING %{_bindir}/smyrna %{_datadir}/%{mname}/smyrna %{_mandir}/man1/smyrna.1%{ext_man} %files -n graphviz-gd %{_bindir}/diffimg %{_mandir}/man1/diffimg.1%{ext_man} %{_libdir}/graphviz/libgvplugin_gd.so* %post -n graphviz-gd %{_bindir}/dot -c %postun -n graphviz-gd %{_bindir}/dot -c 2>/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 %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} %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 %{_libdir}/php7/extensions/gv.so %{_datadir}/php7/gv.php %{_mandir}/man3/gv.3php%{ext_man} %files -n graphviz-python %{python_sitearch}/_gv.so %{python_sitearch}/gv.py %{_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-doc %docdir %{_defaultdocdir}/%{mname}-doc %{_defaultdocdir}/%{mname}-doc %{_datadir}/graphviz/demo %else %files %doc doc/FAQ.html AUTHORS COPYING README NEWS ChangeLog %{_bindir}/acyclic %{_bindir}/bcomps %{_bindir}/ccomps %{_bindir}/circo %{_bindir}/cluster %{_bindir}/dijkstra %{_bindir}/dot %{_bindir}/dot2gxl %{_bindir}/dot_builtins %{_bindir}/dotty %{_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}/lefty %{_bindir}/lneato %{_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}/lefty %{_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