Skip to content

Instantly share code, notes, and snippets.

@emarsk
Last active March 8, 2021 11:28
Show Gist options
  • Save emarsk/7cd1d17b77ac6a0015b6 to your computer and use it in GitHub Desktop.
Save emarsk/7cd1d17b77ac6a0015b6 to your computer and use it in GitHub Desktop.
Xorg graphviz dependency graph, as in BLFS book. To generate the image: "dot -Tpng xorg_depgraph.dot >xorg_depgraph.png".
// Xorg dependency graph (dot)
// BLFS 7.8
//
// style=solid : required
// style=dashed : recommended
// style=dotted : optional
// style=solid arrowhead=dot color=grey : required at runtime
strict digraph xorg {
label="Xorg dependencies
required + recommended
as per BLFS 7.8
" labelloc=t
node [style=filled fillcolor=snow]
// Xorg stuff: {{{1=============================================================
"util-macros"
"xorg protocol headers" -> "util-macros" [style=solid]
"xorg protocol headers" -> {sudo wget} [style=dashed]
/* "xorg protocol headers" -> {fop libxslt xmlto asciidoc} [style=dotted] */ // to build additional documentation
libxau -> "xorg protocol headers" [style=solid]
libxdmcp -> "xorg protocol headers" [style=solid]
"xcb-proto" -> "python 2 or 3" [style=solid]
/* "xcb-proto" -> libxml2 [style=dotted] */ // required to run the tests
libxcb -> {libxau "xcb-proto"} [style=solid]
libxcb -> libxdmcp [style=dashed]
/* libxcb -> doxygen [style=dotted] */ // to generate API documentation
/* libxcb -> check [style=dotted] */ // to run tests
/* libxcb -> libxslt [style=dotted] */
"xorg libs" -> {fontconfig libxcb} [style=solid]
/* "xorg libs" -> {"xmlto with …"} [style=dotted] */ // to generate additional PDF or text documentation for the libXfont package
"xcb-util" -> libxcb [style=solid]
"xcb-util-image" -> "xcb-util" [style=solid]
"xcb-util-keysyms" -> libxcb [style=solid]
"xcb-util-renderutil" -> libxcb [style=solid]
"xcb-util-wm" -> libxcb [style=solid]
/* "xcb-util-wm" -> doxygen [style=dotted] */
mesalib -> {"xorg libs" libdrm} [style=solid]
mesalib -> elfutils [style=dashed] // required for Gallium3D radeonsi driver
mesalib -> libvdpau [style=dashed] // to build VDPAU drivers
mesalib -> llvm [style=dashed] // required for Gallium3D r300, r600 and radeonsi drivers
// and for llvmpipe which is intended to be the fastest of the three sw rasterizers
// see http://www.mesa3d.org/faq.html#part3
/* mesalib -> {"mesa-demos"} [style=dotted] */ // provides more than 300 extra demos to test MesaLib; this includes the same programs added by the patch above
/* mesalib -> {"Bellagio OpenMAX Integration Layer"} [style=dotted] */ // for mobile platforms
/* mesalib -> {wayland} [style=dotted] */
xbitmaps -> "util-macros" [style=solid]
"xorg apps" -> {libpng mesalib xbitmaps "xcb-util"} [style=solid]
/* "xorg apps" -> OPTIONAL {"linux-pam" "cairo-5c" nickle} [style=dotted] */ // to run the undocumented xkeyhost script
"xcursor-themes" -> "xorg apps" [style=solid]
"xorg fonts" -> "xcursor-themes" [style=solid]
"xkeyboard-config" -> "xorg libs" [style=solid]
"xorg-server" -> {"libgcrypt or nettle or openssl" pixman "xorg fonts" "xkeyboard-config"} [style=solid]
"xorg-server" -> libepoxy [style=dashed] // required for glamor
"xorg-server" -> "xcb-util-keysyms" [style=dashed] // used by xnest
/* "xorg-server" -> acpid [style=dotted color=grey arrowhead=dot] */ // runtime
/* "xorg-server" -> {"xcb-util-image" "xcb-util-renderutil" "xcb-util-wm"} [style=dotted] */ // to build Xephyr
/* "xorg-server" -> {doxygen fop ghostscript xmlto} [style=dotted] */ // to build documentation
twm -> "xorg-server" [style=solid]
xterm -> "xorg apps" [style=solid]
/* xterm -> {valgrind man2html} [style=dotted] */
xclock -> "xorg libs" [style=solid]
xinit -> {twm xterm xclock} [style=solid arrowhead=dot color=grey] // required at runtime
// }}}--------------------------------------------------------------------------
// Xorg Drivers: {{{1===========================================================
"xorg evdev driver" -> {libevdev "xorg-server"} [style=solid]
"xorg evdev driver" -> mtdev [style=dashed]
"xorg synaptics driver" -> {libevdev "xorg-server"} [style=solid]
xorg_drivers -> "xorg-server" [style=solid] // ATI: recommended to be built with glamor enabled
xorg_drivers [label=
"xorg ati driver
xorg fbdev driver
xorg nouveau driver
xorg vmware driver
xorg vmmouse driver
xorg wacom driver
" shape=box]
/* "xorg wacom driver" -> {doxygen graphviz} [style=dotted] */
"xorg intel driver" -> {"xcb-util" "xorg-server"} [style=solid]
libva -> mesalib [style=solid]
/* libva -> {doxygen wayland} [style=dotted] */
libvdpau -> "xorg libs" [style=solid]
/* libvdpau -> {doxygen graphviz "texlive or install-tl-unx"} [style=dotted] */
libvdpau -> mesalib [style=solid arrowhead=dot color=grey] // required at runtime
// }}}--------------------------------------------------------------------------
// Non-Xorg stuff: {{{1=========================================================
"desktop-file-utils" [style=filled fillcolor=ghostwhite]
elfutils [style=filled fillcolor=ghostwhite]
fontconfig [style=filled fillcolor=ghostwhite]
freetype [style=filled fillcolor=ghostwhite]
glib [style=filled fillcolor=ghostwhite]
"gnutls or openssl" [style=filled fillcolor=ghostwhite]
"libgcrypt or nettle or openssl" [style=filled fillcolor=ghostwhite]
harfbuzz [style=filled fillcolor=ghostwhite]
icu [style=filled fillcolor=ghostwhite]
libdrm [style=filled fillcolor=ghostwhite]
libepoxy [style=filled fillcolor=ghostwhite]
libffi [style=filled fillcolor=ghostwhite]
libgcrypt [style=filled fillcolor=ghostwhite]
"libgpg-error" [style=filled fillcolor=ghostwhite]
libpng [style=filled fillcolor=ghostwhite]
llvm [style=filled fillcolor=ghostwhite]
mtdev [style=filled fillcolor=ghostwhite]
nettle [style=filled fillcolor=ghostwhite]
openssl [style=filled fillcolor=ghostwhite]
pcre [style=filled fillcolor=ghostwhite]
pixman [style=filled fillcolor=ghostwhite]
"python 2 or 3" [style=filled fillcolor=ghostwhite]
"python-2" [style=filled fillcolor=ghostwhite]
"python-3" [style=filled fillcolor=ghostwhite]
"shared-mime-info" [style=filled fillcolor=ghostwhite]
sudo [style=filled fillcolor=ghostwhite]
wget [style=filled fillcolor=ghostwhite]
which [style=filled fillcolor=ghostwhite]
freetype -> {harfbuzz libpng which} [style=dashed]
fontconfig -> freetype [style=solid]
/* fontconfig -> {"docbook-utils and libxml2 "texlive or install-tl-unx"}[style=dotted] */
glib -> {libffi "python 2 or 3"} [style=solid]
glib -> pcre [style=dashed]
/* glib -> { "d-bus" elfutils "gtk-doc" "fam library"} [style=dotted] */
glib -> {"shared-mime-info" "desktop-file-utils"} [style=solid color=grey arrowhead=dot]
harfbuzz -> {glib icu freetype} [style=dashed]
/* harfbuzz -> { cairo "gobject-introspection" "gtk-doc" graphite2}[style=dotted] */
libdrm -> "xorg libs" [style=dashed] // for Intel KMS API support required by Mesa
/* libdrm -> {"docbook-xml" "docbook-xsl" libxslt} [style=dotted] */ // to build manual pages
/* libdrm -> valgrind [style=dotted] */
libepoxy -> mesalib [style=solid]
llvm -> {libffi "python-2"} [style=dashed]
/* llvm -> { cmake doxygen graphviz libxml2 "texlive or install-tl-unx" valgrind zip ocaml sphinx} [style=dotted] */
libevdev -> "python 2 or 3" [style=solid]
/* libevdev -> check [style=dotted] */ // required for tests
/* libevdev -> {doxygen valgrind} [style=dotted] */ // optional for tests
/* libffi -> dejagnu [style=dotted] */ // to run the testsuite
"libgcrypt or nettle or openssl" [shape=box]
"libgcrypt or nettle or openssl" -> {libgcrypt nettle openssl} [style=solid]
libgcrypt -> "libgpg-error" [style=solid]
/* libgcrypt -> {"libcap with PAM and Pth" "texlive (or install-tl-unx)"} [style=dotted] */
/* nettle -> openssl [style=dotted] */ // for examples
/* openssl -> "MIT Kerberos V5" [style=dotted] */
/* pcre -> valgrind [style=dotted] */
/* pixman -> {"gtk+2" libpng} [style=dotted] */ // for tests and demos
"python 2 or 3" [shape=box]
"python 2 or 3" -> {"python-2" "python-3"} [style=solid]
"python-2" -> libffi [style=dashed]
/* "python-2" -> {bluez valgrind} [style=dotted] */
/* "python-2" -> {openssl sqlite tk} [style=dotted] */ // for additional modules
"python-3" -> libffi [style=dashed]
/* "python-3" -> {bluez gdb} [style=dotted] */ // required for some tests
/* "python-3" -> {"berkeley-db" openssl sqlite tk} [style=dotted] */ // for additional modules
/* sudo -> { "linux-pam" "mit kerberos v5" "openldap" MTA afs fwtk opie} [style=dotted] */
wget -> "gnutls or openssl" [style=dashed] // since gnutls is recommended, openssl should, too
// openssl has fewer dependencies and is required by others
/* wget -> {libidn PCRE libpsl} [style=dotted] */
/* wget -> {"libwww-perl with IO::Socket::SSL"} [style=dotted] */ // required for the test suite
/* wget -> {valgrind} [style=dotted] */ // optional for the test suite
"gnutls or openssl" [shape=box]
/* "gnutls or openssl" -> {gnutls openssl} [style=solid] */ // OMITTED for clarity
/* gnutls -> nettle [style=solid] */ // OMITTED for clarity
/* gnutls -> {"CA certificates" libtasn1 "p11-kit"} */ // OMITTED for clarity
/* gnutls -> { doxygen "gtk-doc" guile libidn "texlive or install-tl-unx" unbound valgrind autogen trousers} [style=dotted] */
// }}}--------------------------------------------------------------------------
}
// vi:ft=dot
// Xorg dependency graph (dot)
// BLFS 7.8
// Required only
//
// style=solid : required
// style=solid arrowhead=dot color=grey : required at runtime
strict digraph xorg {
label="Xorg dependencies
required only
as per BLFS 7.8
" labelloc=t
node [style=filled fillcolor=snow]
// Xorg stuff: {{{1=============================================================
"util-macros"
"xorg protocol headers" -> "util-macros" [style=solid]
libxau -> "xorg protocol headers" [style=solid]
"xcb-proto" -> "python 2 or 3" [style=solid]
libxcb -> {libxau "xcb-proto"} [style=solid]
"xorg libs" -> {fontconfig libxcb} [style=solid]
"xcb-util" -> libxcb [style=solid]
"xcb-util-image" -> "xcb-util" [style=solid]
"xcb-util-keysyms" -> libxcb [style=solid]
"xcb-util-renderutil" -> libxcb [style=solid]
"xcb-util-wm" -> libxcb [style=solid]
mesalib -> {"xorg libs" libdrm} [style=solid]
xbitmaps -> "util-macros" [style=solid]
"xorg apps" -> {libpng mesalib xbitmaps "xcb-util"} [style=solid]
"xcursor-themes" -> "xorg apps" [style=solid]
"xorg fonts" -> "xcursor-themes" [style=solid]
"xkeyboard-config" -> "xorg libs" [style=solid]
"xorg-server" -> {"libgcrypt or nettle or openssl" pixman "xorg fonts" "xkeyboard-config"} [style=solid]
twm -> "xorg-server" [style=solid]
xterm -> "xorg apps" [style=solid]
xclock -> "xorg libs" [style=solid]
xinit -> {twm xterm xclock} [style=solid arrowhead=dot color=grey] // required at runtime
// }}}--------------------------------------------------------------------------
// Xorg Drivers: {{{1===========================================================
libevdev -> "python 2 or 3" [style=solid]
"xorg evdev driver" -> {libevdev "xorg-server"} [style=solid]
"xorg synaptics driver" -> {libevdev "xorg-server"} [style=solid]
xorg_drivers -> "xorg-server" [style=solid] // ATI: recommended to be built with glamor enabled
xorg_drivers [label=
"xorg ati driver
xorg fbdev driver
xorg nouveau driver
xorg vmware driver
xorg vmmouse driver
xorg wacom driver
" shape=box]
"xorg intel driver" -> {"xcb-util" "xorg-server"} [style=solid]
// }}}--------------------------------------------------------------------------
// Non-Xorg stuff: {{{1=========================================================
fontconfig [style=filled fillcolor=ghostwhite]
freetype [style=filled fillcolor=ghostwhite]
libdrm [style=filled fillcolor=ghostwhite]
"libgcrypt or nettle or openssl" [style=filled fillcolor=ghostwhite]
libgcrypt [style=filled fillcolor=ghostwhite]
"libgpg-error" [style=filled fillcolor=ghostwhite]
libpng [style=filled fillcolor=ghostwhite]
nettle [style=filled fillcolor=ghostwhite]
openssl [style=filled fillcolor=ghostwhite]
pixman [style=filled fillcolor=ghostwhite]
"python 2 or 3" [style=filled fillcolor=ghostwhite]
"python-2" [style=filled fillcolor=ghostwhite]
"python-3" [style=filled fillcolor=ghostwhite]
fontconfig -> freetype [style=solid]
"libgcrypt or nettle or openssl" [shape=box]
"libgcrypt or nettle or openssl" -> {libgcrypt nettle openssl} [style=solid]
libgcrypt -> "libgpg-error" [style=solid]
"python 2 or 3" [shape=box]
"python 2 or 3" -> {"python-2" "python-3"} [style=solid]
// }}}--------------------------------------------------------------------------
}
// vi:ft=dot
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment