--- /dev/null
+%%
+%%
+
+\chapter{Bacula Porting Notes}
+\label{_ChapterStart1}
+\index{Notes!Bacula Porting}
+\index{Bacula Porting Notes}
+\addcontentsline{toc}{section}{Bacula Porting Notes}
+
+This document is intended mostly for developers who wish to port Bacula to a
+system that is not {\bf officially} supported.
+
+It is hoped that Bacula clients will eventually run on every imaginable system
+that needs backing up (perhaps even a Palm). It is also hoped that the Bacula
+Directory and Storage daemons will run on every system capable of supporting
+them.
+
+\section{Porting Requirements}
+\index{Requirements!Porting}
+\index{Porting Requirements}
+\addcontentsline{toc}{section}{Porting Requirements}
+
+In General, the following holds true:
+
+\begin{itemize}
+\item {\bf Bacula} has been compiled and run on Linux RedHat, FreeBSD, and
+ Solaris systems.
+\item In addition, clients exist on Win32, and Irix
+\item It requires GNU C++ to compile. You can try with other compilers, but
+ you are on your own. The Irix client is built with the Irix complier, but, in
+ general, you will need GNU.
+\item Your compiler must provide support for 64 bit signed and unsigned
+ integers.
+\item You will need a recent copy of the {\bf autoconf} tools loaded on your
+ system (version 2.13 or later). The {\bf autoconf} tools are used to build
+ the configuration program, but are not part of the Bacula source
+distribution.
+\item There are certain third party packages that Bacula needs. Except for
+ MySQL, they can all be found in the {\bf depkgs} and {\bf depkgs1} releases.
+\item To build the Win32 binaries, we use Microsoft VC++ standard
+ 2003. Please see the instructions in
+ bacula-source/src/win32/README.win32 for more details. If you
+ want to use VC++ Express, please see README.vc8. Our build is
+ done under the most recent version of Cygwin, but Cygwin is
+ not used in the Bacula binaries that are produced.
+ Unfortunately, we do not have the resources to help you build
+ your own version of the Win32 FD, so you are pretty much on
+ your own. You can ask the bacula-devel list for help, but
+ please don't expect much.
+\item {\bf Bacula} requires a good implementation of pthreads to work.
+\item The source code has been written with portability in mind and is mostly
+ POSIX compatible. Thus porting to any POSIX compatible operating system
+ should be relatively easy.
+\end{itemize}
+
+\section{Steps to Take for Porting}
+\index{Porting!Steps to Take for}
+\index{Steps to Take for Porting}
+\addcontentsline{toc}{section}{Steps to Take for Porting}
+
+\begin{itemize}
+\item The first step is to ensure that you have version 2.13 or later of the
+ {\bf autoconf} tools loaded. You can skip this step, but making changes to
+ the configuration program will be difficult or impossible.
+\item The run a {\bf ./configure} command in the main source directory and
+ examine the output. It should look something like the following:
+
+\footnotesize
+\begin{verbatim}
+Configuration on Mon Oct 28 11:42:27 CET 2002:
+ Host: i686-pc-linux-gnu -- redhat 7.3
+ Bacula version: 1.27 (26 October 2002)
+ Source code location: .
+ Install binaries: /sbin
+ Install config files: /etc/bacula
+ C Compiler: gcc
+ C++ Compiler: c++
+ Compiler flags: -g -O2
+ Linker flags:
+ Libraries: -lpthread
+ Statically Linked Tools: no
+ Database found: no
+ Database type: Internal
+ Database lib:
+ Job Output Email: root@localhost
+ Traceback Email: root@localhost
+ SMTP Host Address: localhost
+ Director Port 9101
+ File daemon Port 9102
+ Storage daemon Port 9103
+ Working directory /etc/bacula/working
+ SQL binaries Directory
+ Large file support: yes
+ readline support: yes
+ cweb support: yes /home/kern/bacula/depkgs/cweb
+ TCP Wrappers support: no
+ ZLIB support: yes
+ enable-smartalloc: yes
+ enable-gnome: no
+ gmp support: yes
+\end{verbatim}
+\normalsize
+
+The details depend on your system. The first thing to check is that it
+properly identified your host on the {\bf Host:} line. The first part (added
+in version 1.27) is the GNU four part identification of your system. The part
+after the -- is your system and the system version. Generally, if your system
+is not yet supported, you must correct these.
+\item If the {\bf ./configure} does not function properly, you must determine
+ the cause and fix it. Generally, it will be because some required system
+ routine is not available on your machine.
+\item To correct problems with detection of your system type or with routines
+ and libraries, you must edit the file {\bf
+ \lt{}bacula-src\gt{}/autoconf/configure.in}. This is the ``source'' from
+which {\bf configure} is built. In general, most of the changes for your
+system will be made in {\bf autoconf/aclocal.m4} in the routine {\bf
+BA\_CHECK\_OPSYS} or in the routine {\bf BA\_CHECK\_OPSYS\_DISTNAME}. I have
+already added the necessary code for most systems, but if yours shows up as
+{\bf unknown} you will need to make changes. Then as mentioned above, you
+will need to set a number of system dependent items in {\bf configure.in} in
+the {\bf case} statement at approximately line 1050 (depending on the Bacula
+release).
+\item The items to in the case statement that corresponds to your system are
+ the following:
+
+\begin{itemize}
+\item DISTVER -- set to the version of your operating system. Typically some
+ form of {\bf uname} obtains it.
+\item TAPEDRIVE -- the default tape drive. Not too important as the user can
+ set it as an option.
+\item PSCMD -- set to the {\bf ps} command that will provide the PID in the
+ first field and the program name in the second field. If this is not set
+ properly, the {\bf bacula stop} script will most likely not be able to stop
+Bacula in all cases.
+\item hostname -- command to return the base host name (non-qualified) of
+ your system. This is generally the machine name. Not too important as the
+ user can correct this in his configuration file.
+\item CFLAGS -- set any special compiler flags needed. Many systems need a
+ special flag to make pthreads work. See cygwin for an example.
+\item LDFLAGS -- set any special loader flags. See cygwin for an example.
+\item PTHREAD\_LIB -- set for any special pthreads flags needed during
+ linking. See freebsd as an example.
+\item lld -- set so that a ``long long int'' will be properly edited in a
+ printf() call.
+\item llu -- set so that a ``long long unsigned'' will be properly edited in
+ a printf() call.
+\item PFILES -- set to add any files that you may define is your platform
+ subdirectory. These files are used for installation of automatic system
+ startup of Bacula daemons.
+\end{itemize}
+
+\item To rebuild a new version of {\bf configure} from a changed {\bf
+ autoconf/configure.in} you enter {\bf make configure} in the top level Bacula
+ source directory. You must have done a ./configure prior to trying to rebuild
+ the configure script or it will get into an infinite loop.
+\item If the {\bf make configure} gets into an infinite loop, ctl-c it, then
+ do {\bf ./configure} (no options are necessary) and retry the {\bf make
+ configure}, which should now work.
+\item To rebuild {\bf configure} you will need to have {\bf autoconf} version
+ 2.57-3 or higher loaded. Older versions of autoconf will complain about
+ unknown or bad options, and won't work.
+\item After you have a working {\bf configure} script, you may need to make a
+ few system dependent changes to the way Bacula works. Generally, these are
+ done in {\bf src/baconfig.h}. You can find a few examples of system dependent
+changes toward the end of this file. For example, on Irix systems, there is
+no definition for {\bf socklen\_t}, so it is made in this file. If your
+system has structure alignment requirements, check the definition of BALIGN
+in this file. Currently, all Bacula allocated memory is aligned on a {\bf
+double} boundary.
+\item If you are having problems with Bacula's type definitions, you might
+ look at {\bf src/bc\_types.h} where all the types such as {\bf uint32\_t},
+ {\bf uint64\_t}, etc. that Bacula uses are defined.
+\end{itemize}