prepare for the release of rrdtool-1.3rc3
[rrdtool.git] / doc / rrdbuild.pod
index 00a9162..812ad9b 100644 (file)
@@ -2,9 +2,7 @@
 
 rrdbuild - Instructions for building RRDtool
 
-=head1 DESCRIPTION
-
-=head2 Overview
+=head1 OVERVIEW
 
 If you downloaded the source of rrdtool you have to compile it. This
 document will give some information on how this is done.
@@ -15,7 +13,16 @@ ones before you can build RRDtool.
 
 This document will tell you about all the necessary steps to get going.
 
-=head2 Building
+These instructions assume you are using a B<bash> shell. If you use csh/tcsh,
+then you can either type F<bash> 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 B<tar> and B<make> are actually B<GNU
+tar> and B<GNU make> respectively. It could be that they are installed as
+B<gtar> and B<gmake> on your system.
+
+=head1 OPTIMISTIC BUILD
 
 Before you start to build RRDtool, you have to decide two things:
 
@@ -32,15 +39,13 @@ Where you want to install the software.
 =back
 
 Once you have decided. Save the two locations into environment variables.
-Depending on the shell you are using, you can do either (bash,zsh):
 
  BUILD_DIR=/tmp/rrdbuild
- INSTALL_DIR=/usr/local/rrdtool-1.2.9
+ INSTALL_DIR=/usr/local/rrdtool-1.3rc3
 
-Or if you run tcsh:
 
- set BUILD_DIR=/tmp/rrdbuild
- set INSTALL_DIR=/usr/local/rrdtool-1.2.9
+If your F</tmp> is mounted with the option noexec (RHEL seems todo that) you have to choose
+a different directory!
 
 Now make sure the BUILD_DIR exists and go there:
 
@@ -48,55 +53,136 @@ Now make sure the BUILD_DIR exists and go there:
  cd $BUILD_DIR
 
 Lets first assume you already have all the necessary libraries
-per-installed. Note that these instructions assume that your copies of
-B<tar> and B<make> are actually B<GNU tar> and B<GNU make> respectively. It
-could be that they are installed as B<gtar> and B<gmake> on your system.
+pre-installed. 
 
- wget http://people.ee.ethz.ch/oetiker/webtools/rrdtool/pub/rrdtool-1.2.9.tar.gz
- tar zxf rrdtool-1.2.9.tar.gz
- cd rrdtool-1.2.9
- ./configure --prefix=/path/to/installation && make && make install
+ wget http://oss.oetiker.ch/rrdtool/pub/rrdtool-1.3rc3.tar.gz
+ gunzip -c rrdtool-1.3rc3.tar.gz | tar xf -
+ cd rrdtool-1.3rc3
+ ./configure --prefix=$INSTALL_DIR && make && make install
 
 Ok, this was very optimistic. This try will probably have ended with
-B<configure> complaining about several missing libraries. If you are on a
-Linux or *bsd system you may want to just install the missing bits from your
-software repository. When you do that, make sure you also get the B<-dev>
-package for each library you install. Once you have the missing bits on
-board, just re-run the last line of the instructions above.
+B<configure> complaining about several missing libraries.
+
+=head1 INSTALLING DEPENDENCIES
+
+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 the rrdtool compilation. Additions to
+this list are welcome.
+
+=head2 OpenSolaris 2008.05
+
+Just add a compiler and the gnome development package:
+
+ pkg install sunstudioexpress
+ pkg install SUNWgnome-common-devel
+
+There is a a problem with F<cairo.pc> 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 F<xrender.pc> file. Use perl to
+fix this:
+
+ perl -i~ -p -e 's/(Requires.*?)\s*xrender.*/$1/' /usr/lib/pkgconfig/cairo.pc 
+
+=head2 Debian / Ubuntu
+
+Use apt-get to make sure you have all that is required. A number
+of packages will get added through dependencies.
+
+ apt-get install libpango1.0-dev libxml2-dev
 
-But again this may have been too optimistic, and you actually have to
-compile your own copies of the required libraries. Here is how:
+=head1 BUILDING DEPENDENCIES
+
+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 the
+expectations, so you may want to compile their latest versions.
+
+=head3 Build Tipps for AIX
+
+If you are woking with AIX, you may find the the B<--disable-shared> 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 B<--disable-static>
+instead.
+
+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!)
+
+=head2 Building Libraries
+
+In order to build the libraries you need a compiler on your system.
+Unfortunately compilers are not all alike. This has an effect on the CFLAGS
+you want to set. The examples below are for the popular GCC compiler suite.
+If you have an other compile you have to use the following settings:
 
 =over
 
-=item Building cgilib
+=item Sun Forte
 
- cd $BUILD_DIR
- wget http://people.ee.ethz.ch/oetiker/webtools/rrdtool/pub/libs/cgilib-0.5.tar.gz
- tar zxf cgilib-0.5.tar.gz
- cd cgilib-0.5
+ CFLAGS="-xO3 -kPIC"
+
+=back
+
+=over 
+
+Some libraries want to know where other libraries are. For this to work,
+set the following environamen variable
 
-If you are on Mac OSX you want to fix a little header problem here by doing
+ export PKG_CONFIG_PATH=${INSTALL_DIR}/lib/pkgconfig
+ export PATH=$INSTALL_DIR/bin:$PATH
 
- touch malloc.h
+Since we are compiling libraries dynamically, you they must further know
+where to find each other. This is done by setting an appropriate LDFLAG.
+Unfortunatly the syntax differs from system to system:
 
-and now you are ready to build
+=over
+
+=item Solaris
+
+ export LDFLAGS=-R${INSTALL_DIR}/lib 
+
+=item Linux
+
+ export LDFLAGS="-Wl,--rpath -Wl,${INSTALL_DIR}/lib" 
+
+=item HPUX
+ export LDFLAGS="+b${INSTALL_DIR}/lib"
+
+=item AIX
 
- make CC=gcc CFLAGS="-O3 -fPIC -I."
- mkdir -p $BUILD_DIR/lb/include
- cp *.h $BUILD_DIR/lb/include
- mkdir -p $BUILD_DIR/lb/lib
- cp libcgi* $BUILD_DIR/lb/lib
+ export LDFLAGS="-Wl,-blibpath:${INSTALL_DIR}/lib"
+
+=back 
+
+If you have GNUmake installed and it is not called 'make',
+then do
+
+ export MAKE=gmake
+ export GNUMAKE=gmake
+
+otherwhise just do
+
+ export MAKE=make
 
 =item Building zlib
 
+Chances are very high that you already have that on your system ... 
+
  cd $BUILD_DIR
- wget http://people.ee.ethz.ch/oetiker/webtools/rrdtool/pub/libs/zlib-1.2.2.tar.gz
- tar  zxf zlib-1.2.2.tar.gz
- cd zlib-1.2.2
- env CFLAGS="-O3 -fPIC" ./configure --prefix=$BUILD_DIR/lb
- make
make install
+ wget http://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"
+ $MAKE
$MAKE install
 
 =item Building libpng
 
@@ -106,74 +192,114 @@ drop the settings of LDFLAGS and CPPFLAGS. Note that the backslash (\) at
 the end of line 4 means that line 4 and line 5 are on one line.
 
  cd $BUILD_DIR
- wget http://people.ee.ethz.ch/oetiker/webtools/rrdtool/pub/libs/libpng-1.2.8-config.tar.gz
- tar zxvf libpng-1.2.8-config.tar.gz
- cd libpng-1.2.8-config
- env CPPFLAGS="-I$BUILD_DIR/lb/include" LDFLAGS="-L$BUILD_DIR/lb/lib" CFLAGS="-O3 -fPIC" \
-     ./configure --disable-shared --prefix=$BUILD_DIR/lb
- make
- make install
+ wget http://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.10
+ env CFLAGS="-O3 -fPIC" ./configure --prefix=$INSTALL_DIR
+ $MAKE
+ $MAKE install
 
 =item Building freetype
 
  cd $BUILD_DIR
- wget http://people.ee.ethz.ch/oetiker/webtools/rrdtool/pub/libs/freetype-2.1.9.tar.gz
- tar zxvf freetype-2.1.9.tar.gz
- cd freetype-2.1.9
- env CPPFLAGS="-I$BUILD_DIR/lb/include" LDFLAGS="-L$BUILD_DIR/lb/lib" CFLAGS="-O3 -fPIC" \
-     ./configure --disable-shared --prefix=$BUILD_DIR/lb
- make
- make install
+ wget http://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
 
-=item Building libart_lgpl
+If you run into problems building freetype on Solaris, you may want to try to
+add the following at the start the configure line:
 
- cd $BUILD_DIR
- wget http://people.ee.ethz.ch/oetiker/webtools/rrdtool/pub/libs/libart_lgpl-2.3.17.tar.gz
- tar zxvf libart_lgpl-2.3.17.tar.gz
- cd libart_lgpl-2.3.17
- env CFLAGS="-O3 -fPIC" ./configure --disable-shared --prefix=$BUILD_DIR/lb
- make
- make install
+ env EGREP=egrep
 
-=back
+=item Building fontconfig
 
-Now all the dependent libraries are built and you can try again. Since these
-are static libraries, you may have to use F<ranlib> to make them accessible.
-Especially BSD systems like Mac OS X may require this, Linux and Solaris
-will do just fine without since their F<ar> command does ranlibs job as well.
+Note that fontconfig has a runtime configuration file in INSTALL_DIR/etc you
+may want to adjust that so that fontconfig finds the fonts on your system.
+Run the fc-cache program to build the fontconfig cache after changeing the
+config file.
 
- ranlib $BUILD_DIR/lb/lib/*.a
+ cd $BUILD_DIR
+ wget http://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"
+ $MAKE
+ $MAKE install
 
-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. Under csh/tcsh you use:
+=item Building Cairo
 
- set IR=-I$BUILD_DIR/lb/include
- setenv CPPFLAGS "$IR $IR/libart-2.0 $IR/freetype2 $IR/libpng"
- setenv LDFLAGS  -L$BUILD_DIR/lb/lib
- setenv CFLAGS -O3
+ cd $BUILD_DIR
+ wget http://oss.oetiker.ch/rrdtool/pub/libs/cairo-1.4.10.tar.gz
+ gunzip -c cairo-1.4.10.tar.gz   | tar xf -
+ cd cairo-1.4.10
+ ./configure --prefix=$INSTALL_DIR \
+    --enable-xlib=no \
+    --enable-xlib-render=no \
+    --enable-win32=no \
+    CFLAGS="-O3 -fPIC"
+ $MAKE
+ $MAKE install
+
+=item Building Glib
 
-If you are running bash/sh/ash/ksh/zsh use this:
+ cd $BUILD_DIR
+ wget http://oss.oetiker.ch/rrdtool/pub/libs/glib-2.12.13.tar.gz
+ gunzip -c glib-2.12.13.tar.gz  | tar xf -
+ cd glib-2.12.13
+ ./configure --prefix=$INSTALL_DIR CFLAGS="-O3 -fPIC"
+ $MAKE
+ $MAKE install
+
+=item Building Pango
 
- IR=-I$BUILD_DIR/lb/include
- CPPFLAGS="$IR $IR/libart-2.0 $IR/freetype2 $IR/libpng"
- LDFLAGS="-L$BUILD_DIR/lb/lib"
- CFLAGS=-O3
- export CPPFLAGS LDFLAGS CFLAGS
+ cd $BUILD_DIR
+ wget http://oss.oetiker.ch/rrdtool/pub/libs/pango-1.17.5.tar.gz
+ gunzip -c pango-1.17.5.tar.gz  | tar xf -
+ cd pango-1.17.5
+ ./configure --prefix=$INSTALL_DIR CFLAGS="-O3 -fPIC"
+ $MAKE
+ $MAKE install
 
-And finally try building again. We disable the python bindings because it
-seems that a fair number of people have ill configured python setups that
-would prevent rrdtool from building if they are included in their current
-state.
+=item Building LibXML2
 
  cd $BUILD_DIR
- ./configure --prefix=$INSTALL_DIR --disable-python && make && make install
+ wget http://oss.oetiker.ch/rrdtool/pub/libs/libxml2-sources-2.6.31.tar.gz
+ gunzip -c libxml2-sources-2.6.31.tar.gz | tar xf -
+ cd libxml2-sources-2.6.31
+ ./configure --prefix=$INSTALL_DIR CFLAGS="-O3 -fPIC"
+ $MAKE
+ $MAKE install
+
+=back
+
+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
+because 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.3rc3
+ ./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 installed on
+your box or you have to hand-tune bindings/perl-shared/Makefile while
+building!
 
-Now go to I<$INSTALL_DIR>B</examples> and run them to see if your
-build has been successful.
+Now go to I<$INSTALL_DIR>B</share/rrdtool/examples/> and run them to see if
+your build has been successful.
 
 =head1 AUTHOR
 
-Tobias Oetiker E<lt>oetiker@ee.ethz.chE<gt>
+Tobias Oetiker E<lt>tobi@oetiker.chE<gt>