_R_R_D_B_U_I_L_D(1)                          rrdtool                         _R_R_D_B_U_I_L_D(1)

NNAAMMEE
     rrdbuild - Instructions for building RRDtool

OOVVEERRVVIIEEWW
     If  you downloaded the source of RRDtool you have to compile it. This docu‐
     ment will give some information on how this is done.

     RRDtool relies on services of third part libraries. Some of these libraries
     may already be installed on your system. You have to compile copies of  the
     other ones before you can build RRDtool.

     This document will tell you about all the necessary steps to get going.

     These  instructions assume you are using a bbaasshh shell. If you use csh/tcsh,
     then you can either type _b_a_s_h to switch to bash for the compilation  or  if
     you know what you are doing just replace the export bits with setenv.

     We further assume that your copies of ttaarr and mmaakkee are actually GGNNUU ttaarr and
     GGNNUU  mmaakkee  respectively.  It  could  be that they are installed as ggttaarr and
     ggmmaakkee on your system.

OOPPTTIIMMIISSTTIICC BBUUIILLDD
     Before you start to build RRDtool, you have to decide two things:

     1.  In which directory you want to build the software.

     2.  Where you want to install the software.

     Once you have decided. Save the two locations into environment variables.

      BUILD_DIR=/tmp/rrdbuild
      INSTALL_DIR=/opt/rrdtool-1.11.0

     If your _/_t_m_p is mounted with the option noexec (RHEL seems to do that)  you
     have to choose a different directory!

     Now make sure the BUILD_DIR exists and go there:

      mkdir -p $BUILD_DIR
      cd $BUILD_DIR

     Lets  first  assume  you  already  have all the necessary libraries pre-in‐
     stalled.

      wget https://github.com/oetiker/rrdtool-1.x/releases/download/v1.11.0/rrdtool-1.11.0.tar.gz
      gunzip -c rrdtool-1.11.0.tar.gz | tar xf -
      cd rrdtool-1.11.0
      ./configure --prefix=$INSTALL_DIR && make && make install

     Ok, this was very optimistic. This try will probably have ended  with  ccoonn‐‐
     ffiigguurree complaining about several missing libraries.

IINNSSTTAALLLLIINNGG DDEEPPEENNDDEENNCCIIEESS
     If your OS lets you install additional packages from a software repository,
     you  may  get  away with installing the missing packages. When the packages
     are installed, run configure again and try to compile again. Below you find
     some hints on getting your OS ready for compiling RRDtool.

     Additions to this list are welcome. In general RRDtool should work with the
     latest versions of the libraries. The versions listed here  are  just  what
     was current when I tested this.

   OOppeennSSoollaarriiss 22000088..0055
     Just add a compiler and the gnome development package:

      pkg install sunstudioexpress
      pkg install SUNWgnome-common-devel

     There  is  a problem with _c_a_i_r_o_._p_c on OpenSolaris. It suggests that xrender
     is required for compilation with cairo. This is not true and also bad since
     OpenSolaris does not include an _x_r_e_n_d_e_r_._p_c file. Use Perl to fix this:

      perl -i~ -p -e 's/(Requires.*?)\s*xrender.*/$1/' /usr/lib/pkgconfig/cairo.pc

     Make sure the RRDtool build system finds your new compiler

      export PATH=/opt/SunStudioExpress/bin

   DDeebbiiaann // UUbbuunnttuu
     Use apt-get to make sure you have all that is required. A number  of  pack‐
     ages will get added through dependencies.

      apt-get install autoconf autopoint build-essential dc
      apt-get install groff-base libtool libpango1.0-dev libxml2-dev
      apt-get install python3-dev python3-setuptools

   GGeennttoooo
     In  Gentoo installing RRDtool is really simple you just need to eemmeerrggee rrrrdd‐‐
     ttooooll. All dependencies will be handled automatically by the portage system.
     The only thing you should care about are USE flags, which  allow  you  fine
     tune features RRDtool will be built with. Currently the following USE flags
     are available:

      doc    - install .html and .txt documentation
               into /usr/share/doc/rrdtool-1.x.xx/
      perl   - build and install perl language bindings
      python - build and install python language bindings
      ruby   - build and install ruby language bindings
      tcl    - build and install tcl language bindings
      rrdcgi - build and install rrdcgi

     After you've decided which USE flags you need, set them either in _m_a_k_e_._c_o_n_f
     or _/_e_t_c_/_p_o_r_t_a_g_e_/_p_a_c_k_a_g_e_._u_s_e and finally run:

      # emerge -va rrdtool

     Take  a  look  at  Gentoo handbook for further details on how to manage USE
     flags: http://www.gentoo.org/doc/en/handbook/handbook-x86.xml?part=2

BBUUIILLDDIINNGG DDEEPPEENNDDEENNCCIIEESS
     But again this may have been too optimistic still, and you actually have to
     compile your own copies of some of  the  required  libraries.  Things  like
     libpng  and zlib are pretty standard so you will probably have them on your
     system anyway. Freetype, Fontinst, Cairo, Pango may be installed, but it is
     possible that they are pretty old and thus don't live up  to  our  expecta‐
     tions, so you may want to compile their latest versions.

   GGeenneerraall bbuuiilldd ttiippss ffoorr AAIIXX
     If  you are working with AIX, you may find the ----ddiissaabbllee--sshhaarreedd option will
     cause things to break for you. In that case you may  have  to  install  the
     shared libraries into the RRDtool PREFIX and work with ----ddiissaabbllee--ssttaattiicc in‐
     stead.

     Another hint to get RRDtool working on AIX is to use the IBM XL C Compiler:

      export CC=/usr/vac/bin/cc
      export PERLCC=$CC

     (Better instructions for AIX welcome!)

   BBuuiilldd IInnssttrruuccttiioonnss
     Some  libraries  want  to know where other libraries are. For this to work,
     set the following environment variable

      export PKG_CONFIG_PATH=${INSTALL_DIR}/lib/pkgconfig
      export PATH=$INSTALL_DIR/bin:$PATH

     The above relies on the presence of the _p_k_g_c_o_n_f_i_g program. Below  you  find
     instructions on how to compile pkgconfig.

     Since  we are compiling libraries dynamically, they must know where to find
     each other. This is done by setting an appropriate LDFLAGS.  Unfortunately,
     the syntax again differs from system to system:

     Solaris
          export LDFLAGS=-R${INSTALL_DIR}/lib

         if  you  are  using the Sun Studio/Forte compiler, you may also want to
         set

          CFLAGS="-xO3 -xcode=pic13"   (SPARC)
          CFLAGS="-xO3 -Kpic"          (x86)

     Linux
          export LDFLAGS="-Wl,--rpath -Wl,${INSTALL_DIR}/lib"

     HPUX
          export LDFLAGS="+b${INSTALL_DIR}/lib"

     AIX
          export LDFLAGS="-Wl,-blibpath:${INSTALL_DIR}/lib"

     If you have GNU make installed and it is not called 'make', then do

      export MAKE=gmake
      export GNUMAKE=gmake

     otherwise just do

      export MAKE=make

     _B_u_i_l_d_i_n_g _p_k_g_c_o_n_f_i_g

     As mentioned above, without pkgconfig the whole build process will be  lots
     of  pain  and suffering, so make sure you have a copy on your system. If it
     is not available natively, here is how to compile it.

      wget http://pkgconfig.freedesktop.org/releases/pkg-config-0.23.tar.gz
      gunzip -c pkg-config-0.23.tar.gz | tar xf -
      cd pkg-config-0.23
      ./configure --prefix=$INSTALL_DIR CFLAGS="-O3 -fPIC"
      $MAKE
      $MAKE install

     After installing pkgconfig in a custom directory,  setting  up  the  corre‐
     sponding environment variable will be helpful.

      export PKG_CONFIG=$INSTALL_DIR/bin/pkg-config

     _B_u_i_l_d_i_n_g _z_l_i_b

     Chances are very high that you already have that on your system ...

      cd $BUILD_DIR
      wget https://oss.oetiker.ch/rrdtool/pub/libs/zlib-1.2.3.tar.gz
      gunzip -c zlib-1.2.3.tar.gz | tar xf -
      cd zlib-1.2.3
      ./configure --prefix=$INSTALL_DIR CFLAGS="-O3 -fPIC" --shared
      $MAKE
      $MAKE install

     _B_u_i_l_d_i_n_g _l_i_b_p_n_g

     Libpng  itself requires zlib to build, so we need to help a bit. If you al‐
     ready have a copy of zlib on your system (which is  very  likely)  you  can
     drop  the  settings of LDFLAGS and CPPFLAGS. Note that the backslash (\) at
     the end of lines means that the command is split over multiple lines.

      cd $BUILD_DIR
      wget https://oss.oetiker.ch/rrdtool/pub/libs/libpng-1.2.18.tar.gz
      gunzip -c libpng-1.2.18.tar.gz | tar xf -
      cd libpng-1.2.18
      env CFLAGS="-O3 -fPIC" ./configure --prefix=$INSTALL_DIR
      $MAKE
      $MAKE install

     _B_u_i_l_d_i_n_g _f_r_e_e_t_y_p_e

      cd $BUILD_DIR
      wget https://oss.oetiker.ch/rrdtool/pub/libs/freetype-2.3.5.tar.gz
      gunzip -c freetype-2.3.5.tar.gz | tar xf -
      cd freetype-2.3.5
      ./configure --prefix=$INSTALL_DIR CFLAGS="-O3 -fPIC"
      $MAKE
      $MAKE install

     If you run into problems building freetype on Solaris, you may want to  try
     to add the following at the start the configure line:

      env EGREP=egrep

     _B_u_i_l_d_i_n_g _L_i_b_X_M_L_2

      cd $BUILD_DIR
      wget https://oss.oetiker.ch/rrdtool/pub/libs/libxml2-2.6.32.tar.gz
      gunzip -c libxml2-2.6.32.tar.gz | tar xf -
      cd libxml2-2.6.32
      ./configure --prefix=$INSTALL_DIR CFLAGS="-O3 -fPIC"
      $MAKE
      $MAKE install

     _B_u_i_l_d_i_n_g _f_o_n_t_c_o_n_f_i_g

     Note  that  fontconfig has a run time configuration file in INSTALL_DIR/etc
     you may want to adjust that so that fontconfig finds the fonts on your sys‐
     tem.  Run the fc-cache program to build the fontconfig cache after changing
     the config file.

      cd $BUILD_DIR
      wget https://oss.oetiker.ch/rrdtool/pub/libs/fontconfig-2.4.2.tar.gz
      gunzip -c fontconfig-2.4.2.tar.gz   | tar xf -
      cd fontconfig-2.4.2
      ./configure --prefix=$INSTALL_DIR CFLAGS="-O3 -fPIC" --with-freetype-config=$INSTALL_DIR/bin/freetype-config
      $MAKE
      $MAKE install

     _B_u_i_l_d_i_n_g _P_i_x_m_a_n

      cd $BUILD_DIR
      wget https://oss.oetiker.ch/rrdtool/pub/libs/pixman-0.10.0.tar.gz
      gunzip -c pixman-0.10.0.tar.gz  | tar xf -
      cd pixman-0.10.0
      ./configure --prefix=$INSTALL_DIR CFLAGS="-O3 -fPIC"
      $MAKE
      $MAKE install

     _B_u_i_l_d_i_n_g _C_a_i_r_o

      cd $BUILD_DIR
      wget https://oss.oetiker.ch/rrdtool/pub/libs/cairo-1.6.4.tar.gz
      gunzip -c cairo-1.6.4.tar.gz   | tar xf -
      cd cairo-1.6.4
      ./configure --prefix=$INSTALL_DIR \
         --enable-xlib=no \
         --enable-xlib-render=no \
         --enable-win32=no \
         CFLAGS="-O3 -fPIC"
      $MAKE
      $MAKE install

     When building on Solaris you may want to do

      ./configure --prefix=$INSTALL_DIR \
         --enable-xlib=no \
         --enable-xlib-render=no \
         --enable-win32=no \
         CFLAGS="-O3 -fPIC -D_POSIX_PTHREAD_SEMANTICS"

     _B_u_i_l_d_i_n_g _G_l_i_b

      cd $BUILD_DIR
      wget https://oss.oetiker.ch/rrdtool/pub/libs/glib-2.15.4.tar.gz
      gunzip -c glib-2.15.4.tar.gz  | tar xf -
      cd glib-2.15.4
      ./configure --prefix=$INSTALL_DIR CFLAGS="-O3 -fPIC"
      $MAKE
      $MAKE install

     _B_u_i_l_d_i_n_g _P_a_n_g_o

      cd $BUILD_DIR
      wget https://oss.oetiker.ch/rrdtool/pub/libs/pango-1.21.1.tar.bz2
      bunzip2 -c pango-1.21.1.tar.bz2 | tar xf -
      cd pango-1.21.1
      ./configure --prefix=$INSTALL_DIR CFLAGS="-O3 -fPIC" --without-x
      $MAKE
      $MAKE install

   BBuuiillddiinngg rrrrddttooooll ((sseeccoonndd ttrryy))
     Now all the dependent libraries are built and you can try again. This  time
     you  tell  configure  where  it should be looking for libraries and include
     files. This is done via environment variables. Depending on the  shell  you
     are running, the syntax for setting environment variables is different.

     And  finally try building again. We disable the python and tcl bindings be‐
     cause it seems that a fair number of people have ill configured python  and
     tcl setups that would prevent RRDtool from building if they are included in
     their current state.

      cd $BUILD_DIR/rrdtool-1.11.0
      ./configure --prefix=$INSTALL_DIR --disable-tcl --disable-python
      $MAKE clean
      $MAKE
      $MAKE install

     SOLARIS  HINT:  if  you  want to build  the Perl module for the native Perl
     (the one shipping with Solaris) you will need the Sun  Forte  compiler  in‐
     stalled  on your box or you have to hand-tune bindings/perl-shared/Makefile
     while building!

     Now go to _$_I_N_S_T_A_L_L___D_I_R//sshhaarree//rrrrddttooooll//eexxaammpplleess// and run them to see if  your
     build has been successful.

AAUUTTHHOORR
     Tobias Oetiker <tobi@oetiker.ch>

1.11.0                             2026-08-08                        _R_R_D_B_U_I_L_D(1)
