\documentclass[twoside,11pt,a4paper]{article}\setcounter{secnumdepth}{0}
\setcounter{tocdepth}{2}
\pagestyle{myheadings}
\setlength{\textwidth}{160mm}
\setlength{\textheight}{230mm}
\setlength{\topmargin}{-2mm}
\setlength{\oddsidemargin}{0mm}
\setlength{\evensidemargin}{0mm}
\setlength{\parindent}{0mm}
\setlength{\parskip}{\medskipamount}
\setlength{\unitlength}{1mm}
\newif\ifpdf % initially false
\ifx\pdfoutput\undefined
\else
  \ifx\pdfoutput\relax
  \else
    \ifcase\pdfoutput
    \else
      \pdftrue
    \fi
  \fi
\fi
\makeatletter
\def\p@thdots{\discretionary{.}{}{.}}
\def\p@thslash{\hskip 0pt plus 0.5pt
	\discretionary{/}{}{/}\hskip 0pt plus 0.5pt\relax }
{\catcode`\.=\active \catcode`\/=\active 
\gdef\p@thcats{%
  \catcode`\%=12 \catcode`\~=12 \catcode`\#=12 \catcode`\&=12
  \catcode`\_=12 \catcode`\.=\active \let.\p@thdots
  \catcode`\/=\active        \let/\p@thslash
  }}
\def\p@th#1{\verbatim@font <\nobreak #1\nobreak>\endgroup}
\def\Url{\begingroup\p@thcats\p@th}
\def\verbatim@font{\normalfont\small\ttfamily}
\def\UrlFootnote{\begingroup\p@thcats\@urlfootnote}
\def\@urlfootnote#1{\footnote{\raggedright\verbatim@font #1}\endgroup}
\let\Code\texttt
\let\Kbd\texttt
\newcommand\Quote[1]{`#1'}
\let\Strong\textbf
\let\Cite\textit
\def\SpaceSpaceSkip{\hskip \fontdimen2\font}
{\obeyspaces\global\let =\space}
\def\Verbatimlines{\let\SpaceSkip\SpaceSpaceSkip\Verbatim@lines}
\@namedef{Verbatimlines*}{\let\SpaceSkip\space\Verbatim@lines}
{\obeyspaces\gdef\Verbatim@space{\let =\SpaceSkip}}
\def\Verbatim@lines{\trivlist \item\relax
  \if@minipage\else\vskip\parskip\fi
  \leftskip=4em
  \rightskip\z@skip
  \parindent\z@\parfillskip\@flushglue\parskip\z@skip
  \@@par
  \@tempswafalse
  \def\par{%
    \if@tempswa
      \leavevmode \null \@@par\penalty\interlinepenalty
    \else
      \@tempswatrue
      \ifhmode\@@par\penalty\interlinepenalty\fi
    \fi}%
  
  \obeylines \verbatim@font
  \everypar \expandafter{\the\everypar \unpenalty}%
  \obeyspaces\Verbatim@space%
}
\def\endVerbatimlines{\if@newlist \leavevmode\fi\endtrivlist}
\@namedef{endVerbatimlines*}{\endVerbatimlines}
\def\DTitem#1{\item[#1]}
\let\@Abstract\@empty
\long\def\setAbstract#1{\def\@Abstract{#1}}
\let\@Title\@empty
\def\setTitle#1{\def\@Title{#1}}
\let\@SubTitle\@empty
\def\setSubTitle#1{\def\@SubTitle{#1}}
\let\@DocCode\@empty
\def\setDocCode#1{\def\@DocCode{#1}\markboth{\@DocCode}{\@DocCode}}
\let\@DocRef\@empty
\def\setDocRef#1{\def\@DocRef{#1}}
\let\@Authorlist\@empty
\def\setAuthorlist#1{\def\@Authorlist{#1}}
\let\@Date\@empty
\def\setDate#1{\def\@Date{#1}}
\let\@Copyright\@empty
\long\def\setCopyright#1{\def\@Copyright{#1}}
\let\@Coverimage\@empty
%\long\def\setCoverimage#1{\def\@Coverimage{#1}}
% \setCoverimage* does not put the document in a minipage (use for images)
\def\setCoverimage{\@ifnextchar*\@tempswatrue\@tempswafalse
    \@dosetCoverimage}
\long\def\@dosetCoverimage#1{\if@tempswa \def\@Coverimage{#1}\else
    \def\@Coverimage{\@tempdima\textwidth
        \multiply\@tempdima 9 \divide\@tempdima 10
        \begin{minipage}{\@tempdima}\parskip=\smallskipamount
           \parindent=0pt #1\end{minipage}}\fi}
% Now create the title page
\newenvironment{FrontMatter}{\renewcommand\thepage{\roman{page}}}
  {\cleardoublepage
    \renewcommand\thepage{\arabic{page}}
    \setcounter{page}{1}}
\def\MakeTitle{%
  \thispagestyle{empty}
  \noindent CCLRC / {\scshape Rutherford Appleton Laboratory}
  \ifx\@DocCode\@empty\else		% optional
    \hfill{\bfseries \@DocCode}\fi
  \\
  {\large Particle Physics \& Astronomy Research Council}\\
  {\large Starlink Project}
  \ifx\@DocRef\@empty\else   		% optional
    \\{\large\@DocRef}\fi
  \begin{flushright}
    \@Authorlist
    \@Date
  \end{flushright}
  \vspace{-4mm}\rule{\textwidth}{0.5mm}\vspace{5mm}
  \begin{center}\Huge\bfseries \@Title
    \ifx\@SubTitle\@empty\else
        \vspace{2ex}\\\LARGE\bfseries\@SubTitle\fi
    \end{center}\vspace{4ex}
  \ifx\@Abstract\@empty\else		% optional
    \vspace{10mm}\begin{center}\Large\bfseries Abstract\end{center}
      \begin{flushleft}\@Abstract\end{flushleft}\fi
  \ifx\@Coverimage\@empty\else	% optional
    \vbox to 0pt{\vspace{10mm}	% cram onto page, not onto verso
        \begin{center}\fbox{\@Coverimage}\end{center}\vss}\fi
}
\newenvironment{fmtAuthorlist}{\def\fmtAuthor##1{##1\\}}{}
\newenvironment{fmtOtherAuthors}{Also: }{}
\newenvironment{VersoTitlepage}{\clearpage\hbox{}\vfill}{%
  \ifx\@Copyright\@empty\else
    \par\vspace{2ex}\copyright \@Copyright\fi}
\def\SetCapType#1{\def\@captype{#1}}%
\def\Caption#1#2{\expandafter\def\csname fnum@\@captype\endcsname{#1}%
  \expandafter\def\csname the\@captype\endcsname{#2}%
  \@dblarg{\@caption\@captype}}
\newif\if@SetEqnNum\@SetEqnNumfalse
\def\SetEqnNum#1{\global\def\Eqn@Number{#1}\global\@SetEqnNumtrue}
\def\@eqnnum{{\normalfont \normalcolor (\Eqn@Number)}}
\def\equation{$$}
\def\endequation{\if@SetEqnNum\eqno \hbox{\@eqnnum}\global\@SetEqnNumfalse\fi 
    $$\@ignoretrue}
\def\@@eqncr{\let\reserved@a\relax
    \ifcase\@eqcnt \def\reserved@a{& & &}\or \def\reserved@a{& &}%
     \or \def\reserved@a{&}\else
       \let\reserved@a\@empty
       \@latex@error{Too many columns in eqnarray environment}\@ehc\fi
     \reserved@a \if@SetEqnNum\@eqnnum\global\@SetEqnNumfalse\fi
     \global\@eqcnt\z@\cr}
% Make \nonumber a no-op, so it can't cause confusion
\let\nonumber\relax
\def\CharUnderscore{\ifmmode _\else\texttt{\char"5F}\fi}
\def\CharDquote{\texttt{\char"22}}
\def\CharBackslash{\texttt{\char"5C}}
\def\CharLangle{\texttt{\char"3C}}
\def\CharRangle{\texttt{\char"3E}}
\def\CharVbar{\texttt{\char"7C}}
\def\Eqnref#1{Eqn.~(#1)}
\newdimen\TabMod
\def\hmsangle#1{#1^{\rm h}}
\def\hmsminutes#1{\,#1^{\rm m}}
\def\hmsseconds#1{\,#1}
\def\hmsfraction#1{{}^{\rm s}\!\!.#1}
\def\dmsangle#1{#1^{\circ}}
\def\dmsminutes#1{\,#1\raisebox{-0.5ex}{$^{'}$}}
\def\dmsseconds#1{\,#1}
\def\dmsfraction#1{\hbox to 0pt{${}^{\prime\mskip-1.5mu \prime}\hss$}.#1}
\def\seealso#1#2{\emph{See also:} #1}
\def\TableOfContents{\clearpage\tableofcontents}
%
\newlength{\sstbannerlength}
\newlength{\sstcaptionlength}
\newlength{\sstexampleslength}
\newlength{\sstexampleswidth}
\newfont{\ssttt}{cmtt10 scaled 1095}
\def\routinesubsectlevel{section}  % to be overridden by generated text
\newenvironment{sstroutine}[2]{
   \goodbreak
   \rule{\textwidth}{0.5mm}
   \vspace{-7ex}
   \newline
   \settowidth{\sstbannerlength}{{\Large {\bf #1}}}
   \setlength{\sstcaptionlength}{\textwidth}
   \setlength{\sstexampleslength}{\textwidth}
   \addtolength{\sstbannerlength}{0.5em}
   \addtolength{\sstcaptionlength}{-2.0\sstbannerlength}
   \addtolength{\sstcaptionlength}{-5.0pt}
   \settowidth{\sstexampleswidth}{{\bf Examples:}}
   \addtolength{\sstexampleslength}{-\sstexampleswidth}
   \parbox[t]{\sstbannerlength}{\flushleft{\Large {\bf #1}}}
   \parbox[t]{\sstcaptionlength}{\center{\Large #2\par}}
   \parbox[t]{\sstbannerlength}{\flushright{\Large {\bf #1}}}
   \addcontentsline{toc}\routinesubsectlevel{Routine #1}
   \begin{description}}
  {\end{description}}
\newenvironment{sstdescription}{\item[Description:]}{}
\newenvironment{sstusage}{\item[Usage:] \mbox{} \\[1.3ex] \ssttt}{}
\newenvironment{sstinvocation}{\item[Invocation:]\hspace{0.4em}\tt}{}
\newenvironment{sstarguments}{
   \item[Arguments:] \mbox{} \\
   \vspace{-3.5ex}
   \begin{description}}{\end{description}}
\newenvironment{sstreturnedvalue}{
   \item[Returned Value:] \mbox{} \\
   \vspace{-3.5ex}
   \begin{description}}{\end{description}}
\newenvironment{sstparameters}{
   \item[Parameters:] \mbox{} \\
   \vspace{-3.5ex}
   \begin{description}}{\end{description}}
\newenvironment{sstexamples}{
    \item[Examples:]\mbox{}\\
    \vskip -3ex \@tempcnta 1}{}
\newcommand{\sstsubsection}[1]{ \item[{#1}] \mbox{} \\}
\newenvironment{sstexamplesubsection}{
    \par Example \the\@tempcnta:\par \global\advance\@tempcnta 1}{}
\newcommand{\sstnotes}[1]{\item[Notes:] \mbox{} \\[1.3ex] #1}
\newenvironment{sstdiytopic}[1]{\item[{#1:}]\mbox{}\\}{}
\newenvironment{sstimplementationstatus}{
   \item[{Implementation Status:}] \mbox{} \\[1.3ex]}{}
\newenvironment{sstbugs}{\item[Bugs:]}{}
\newcommand{\sstitemlist}[1]{
  \mbox{} \\
  \vspace{-3.5ex}
  \begin{itemize}
     #1
  \end{itemize}
}
\newcommand{\sstitem}{\item}
\makeatother
\usepackage{graphics}\begin{document}\begin{FrontMatter}\setTitle{Building Starlink Software}\setDate{29 April 2005}\setAuthorlist {\begin{fmtAuthorlist}\fmtAuthor{Norman Gray}\fmtAuthor{Steve Rankin}\fmtAuthor{Peter Draper}\end{fmtAuthorlist}}\setAbstract {This document contains instructions on how to build the Starlink
software from source.  It contains a few platform-specific notes, and
a comparison with the old 'mk-based' build system.  This document is
deliberately terse, since we have invested effort in making the
processes involved as easy as possible.\par This is at present a draft document, and so you should expect it
to change relatively frequently.\par \TabMod \textwidth \divide \TabMod 1 \begin{tabular}{l}\$Revision: 1.1 \$\\\$Date: 2005/04/29 11:44:30 \$\\\end{tabular}\par }\setDocCode{SUN/248.0}\setDocRef{Starlink User Note 248}\setCopyright{Copyright 2005, Council for the Central Laboratory of the Research Councils}\MakeTitle \begin{VersoTitlepage}\begin{tabular}{rl}\multicolumn{2}{l}{}\emph{Document information}\\Document date&29 April 2005\\Version number&0\\\end{tabular}\end{VersoTitlepage}\TableOfContents \end{FrontMatter}\clearpage \section{1 Introduction}Starlink distributes its software products in a variety of ways.\par The project makes periodic binary releases.  These are made every
six months in principle, though the intervals are usually somewhat
longer in fact.  The set of platforms we target is not fixed, but in the
latest release the list was Linux RHEL3, RH9 and Debian3.0, and Sparc
8/9, with a beta release for Mac OS X.  For fuller details, see the
`Software' link on the Starlink home page\UrlFootnote{http://www.starlink.ac.uk}.\par All the software in such a release is also available as source
tarballs, and some components of the software set make interim source
releases, also as source tarballs.  This document is about how to
build, and once built how to link against, these distributed source
tarballs.  It is a short document, since it is our intention that
building and installing our software should be as simple as
\begin{Verbatimlines}
\% ./configure; make; make install
\end{Verbatimlines}
exactly as for the majority of open-source software available now.
Execpt where some technicality prevents it, all the Starlink libraries
are installed as both static and shared libraries, and there should be
no surprises in linking agsinst them.  The only difference from the
standard behaviour is that the default installation prefix for our
software is in either \Code{/star} or \Code{/stardev} (the
latter for interim releases or beta software), rather than
\Code{/usr/local}.  You can confirm this with \Kbd{./configure
-{}-help}.
\par The software should build without problems, as we have invested
considerable effort in making it portable across platforms and
compilers.  As with any other very large software system, however, we
are aware of some wrinkles, and these are discussed in the
platform-specific notes in \textit{Section 2} below.  If you find
any other problems, or have other comments on the build system, please
do get in touch with the project, through the general contact address
\Code{ussc@star.rl.ac.uk}\UrlFootnote{mailto:ussc@star.rl.ac.uk}.\par You may be used to Starlink's earlier build system, based on
\Code{./mk} scripts.  This is now obsolete, and a migration path
is outlined in \textit{Section 3} below\par \subsection{1.1 The Starlink CVS repository}All of Starlink's source code is kept in a CVS repository, which is
publicly available.  The Starlink build system consists of
\begin{itemize}\item the Starlink CVS repository;\par \item build tools, consisting of modified versions of the GNU
autotools \Code{autoconf} \Code{automake}
and \Code{libtool};\par \item configuration and bootstrap code, consisting of the
\Code{starconf} system and the scripts at the top
level of the Starlink source tree.\par \end{itemize}
\par The repository is on the machine \Code{cvs.starlink.ac.uk}.  See
\Url{http://www.starlink.ac.uk/Download/getcvs.html} for details
of checking out the software and building the system.\par The \Code{getcvs.html} web page above says that, after
checking the source tree out of CVS, you should read the
\Code{README} at the top of the tree.  There are
platform-specific notes about this in \textit{Section 2} below.\par The build system as a whole is described in considerable detail in
SSN/78.  This is a large document, but
you probably don't have to read it, if what you want to do with the
Starlink applications and libraries is to build them from distributed
source tarballs, use the applications, and link against the libraries
from your own programs.  You will only need to read SSN/78 if you wish
to
\begin{enumerate}\item build from the up-to-the-minute versions in the CVS repository
(though even in that case, you are probably better with the
up-to-the-day versions available in the nightly build tarballs);\par \item work on the CVS sources themselves, since you are welcome to play
with the versions of the sources available as an anonymous CVS
checkout; or\par \item you wish to add further components to the Starlink CVS repository,
though in this case you should probably talk to the project first, to
coordinate your efforts with others.\par \end{enumerate}
\par \clearpage \section{2 Platform-specific notes}To build the software set, you should follow the
\Code{README} at the top level of the checked-out tree.  You can
examine the current version of this file, and its history, at
\Url{http://cvsweb.starlink.ac.uk/cvsweb.cgi/README}.\par \subsection{2.1 Building on OS X}You need a Fortran compiler: although the system compiler on OS X
is GCC, Apple don't include g77 in their distribution.\par You can get a g77 package from either DarwinPorts or
Fink. Darwinports is (in Norman's experience) rather more fiddly to
set up than Fink, but it is possibly to be preferred, since it has a
certain amount of Apple support and contributions from Apple
employees; it appears to be more deliberately aligned with the GCC
version in the OS X distribution; and there are suggestions that Apple
may at some point `bless' it, and make it more easily integrated with
a standard OS X setup.\par Once you've installed one of the g77 packages, and put the appropriate binary directory in your PATH, you should be ready to go.\par If you want to build and install the documentation then you should
install TeX on Mac OS X (get the \Code{gwTeX} distribution
(good) from \Url{http://www.rna.nl/tex.html}; there are other
notes about TeX on OS X at
\Url{http://www.esm.psu.edu/mac-tex/}). Otherwise use:
\begin{Verbatimlines}
\% ./configure -C -{}-disable-shared -{}-without-stardocs
\end{Verbatimlines}
You might also have to install ghostscript from Darwinports or Fink.\par You should also install the Apple X11 distribution and also the
X11-SDK, this should be included on your Mac OS X distribution media,
but not installed by default. Do not use the Darwinports or Fink
X11.\par If you want to build STARJAVA, then you will need to install the Java
Advanced imaging and 3D support from Apple.\par \subsection{2.2 Building on Tru64}The configure script will choose a Fortran 95 compiler before it
settles for a Fortran 77 one. Some of the code requires a Fortran 77
compiler (at least at present, possibly indefinitely), and so if you
have more than one Fortran compiler installed, you'll have to force
the build system with a command like:
\begin{Verbatimlines}
\% ./configure FC=f77 [other arguments]
\end{Verbatimlines}
where the Tru64 Fortran 77 compiler is called \Code{f77}. You
can give the path to the compiler also, if the f77 you want isn't the
first one in your \Code{PATH}.\par The Tru64 C and C++ compilers should work fine: if you have more
than one compiler installed, you can force them with the configure
arguments \Code{CC=cc} and \Code{CXX=cxx}, but this
shouldn't be necessary.\par \subsection{2.3 Building on Solaris}The configure script will choose a Fortran 95 compiler before it
settles for a Fortran 77 one. Some of the code requires a Fortran 77
compiler, which means that, if you have more than one Fortran compiler
installed, you'll have to force the build system with a command like:
\begin{Verbatimlines}
\% ./configure FC=f77 F77=f77 FPPFLAGS='-P -fixed' [other arguments]
\end{Verbatimlines}
where the Solaris Fortran 77 compiler is called \Code{f77},. You
can give the path to the compiler also, if the f77 you want isn't the
first one in your \Code{PATH}. \par This dependence on a Fortran 77 compiler is true at present, and
may be the case indefinitely; at least part of the problem is libtool,
which appears not to understand f95 on Solaris, so this problem might
go away with a libtool update.  As libtool doesn't understand the
\Code{FC} flag, the \Code{F77} variable has to be set to
match the \Code{FC} one.\par The Solaris C and C++ compilers should work fine: if you have more
than one compiler installed, you can force the choice with the
configure arguments \Code{CC=cc} and \Code{CXX=CC}, but
this shouldn't be necessary. The system works with gcc and g++ on
Solaris, too, and these compilers can be selected using the same
mechanism.\par \subsection{2.4 Building on Cygwin}The configure script fails to identify how to preprocess Fortran,
so it necessary to set environment variables with a command like:
\begin{Verbatimlines}
\% ./configure FPP=g77 FPPFLAGS='-E' [other arguments]
\end{Verbatimlines}
\par \subsection{2.5 Building on x86}There are no known problems building on x86 boxes.\par Whoopee, and all that.\par \subsection{2.6 Building on 64-bit x86}The only known problem on x86\_64 is a distribution-specific one (I
think). On RHEL, the tetex 1.* package installs the kpathsea library
as a static library alone, and not a shared one. This produces an
error message when compiling the \Code{dvi2bitmap} component,
resembling:
\begin{Verbatimlines}
ld: ./libkpathsea.a(tex-file.o): relocation R\_X86\_64\_32 can not be used when making a shared object; recompile with -fPIC
./libkpathsea.a: could not read symbols: Bad value
\end{Verbatimlines}
\par To address this, you can either configure \Code{dvi2bitmap}
using \Code{-{}-without-kpathsea} at some loss in functionality,
or else recompile the kpathsea library yourself. The sources are
available at TUG\UrlFootnote{http://www.tug.org/ftp/tex/web2c.tar.gz} -{}- you need to rebuild only the kpathsea part of this
distribution: to do that:
\begin{enumerate}\item Unpack the distribution, and go to the \Code{web2c-x.x.x}
directory\par \item Configure using \Code{./configure -{}-enable-shared -{}-datadir=XXX
-{}-prefix=PREFIX}, where \Code{XXX} is the location
of teTeX on your local machine (probably \Code{/usr/share} on
RHEL) and \Code{PREFIX} is where you would like the newly-built
library to be installed.\par \item cd to the kpathsea directory, and delete the lines in the
Makefile that refer to (unwritable) \Code{\$(web2cdir)}\par \item \Code{make; make install} to install in
 \Code{PREFIX}.\par \end{enumerate}
The installation directory \Code{PREFIX} will have to be in your
\Code{LD\_LIBRARY\_PATH} when you re-configure
\Code{dvi2bitmap}.\par \clearpage \section{3 Migration from a ./mk based build system}The Starlink code set is now built using the standard (or at least,
conventional) autoconf system, so that you configure the system before
building using the command \Code{./configure}. See the sections above
for more discussion.\par This is rather different from the old Starlink system, which used a
mk script, which set up a number of environment variables to
platform-specific values and then invoked make on your behalf. The
\Code{mk} script consisted of a switch which set appropriate
values for each of the platforms which the project supported (plus
sometimes a few other contributed ones). The configure-based system
should be more portable, and work on a broader range of platforms
without such platform-specific customisation.\par If you have previously built software using the mk-based system, you
will see little difference in the new system, beyond the difference in
procedure described above.\par If, on the other hand, you have previously developed using the
mk-based system, there will be a few more changes:
\begin{enumerate}\item mk scripts will no longer work\par \item The \Code{INSTALL} and \Code{SYSTEM} environment
variables have disappeared.\par \item The \Code{xxx\_dev} scripts have disappeared.\par \item The system now uses shared libraries extensively, and you might
have to indicate where these are.\par \end{enumerate}
\par If you are simply linking against Starlink libraries, you probably
don't have to care about any of this, and the only difference is that
you now have shared libraries and centrally located include files to
make your job easier.  Most of the libraries in the distribution are
built using \Code{libtool}, and the libtool \Code{.la}
`library files' are installed.\par If you are planning to work on applications in the CVS repository,
you should probably take a look at SUN/78, and might want to introduce yourself on
the Starlink developers mailing list, at
\Url{http://www.jiscmail.ac.uk/lists/stardev.html}.\par \subsection{3.1 mk scripts}mk scripts are now obsolete.  If you have made or modified a
\Code{mk} script of your own, you might possibly need to rework
things to fit in with the new system. SUN/78 describes the new build
system in detail, along with introductions to the autotools and
pointers to fuller documentation.\par \subsection{3.2 The INSTALL and SYSTEM variables}The \Code{INSTALL} and \Code{SYSTEM} variables have
disappeared.\par The \Code{SYSTEM} variable used to specify the system on
which the software was being built, and the \Code{mk} script
switched on this value to make its settings, making the assumption
that the platform reliably implied the compilers being used. This is
now redundant, since the autoconf-based system makes its decision, not
on the basis of what platform it discovers it is running on, but on
the basis of the tools and capabilities it dynamically discovers. This
variable is now simply ignored.\par The \Code{INSTALL} variable used to specify the installation
location. This role is now performed by the \Code{-{}-prefix...=}
option to the \Code{./configure} script. This script will,
however, look at the \Code{INSTALL} variable and, if it is set,
expect it to name a program to use instead of the standard
\Code{/usr/bin/install} program, to install the software after
building.  You should almost certainly \emph{not} have this variable
defined, and if it is defined by accident, to anything other than an
installation program, the buildsystem will probably fail messily.\par See the top level \Code{README} file for further details about
environment variables which affect the build.\par \subsection{3.3 The xxx\_dev scripts, and include files}The \Code{xxx\_dev} scripts and include files have changed.\par In the \Code{mk} system, the \Code{xxx\_dev} scripts had
to be used to make soft links to the (Fortran) include files necessary
for working with a library.  In the new system, all such include files
are installed in a standard place, such as /star/include.  All the
Fortran compilers that we are aware of have a \Code{-I} option
to indicate where such include files are to be found.\par Note that the Fortran include files are now consistently upper-case.\par \subsection{3.4 Shared libraries}With only one or two exceptions, all the Starlink libraries are
built and installed as shared libraries, as well as static ones. You
might, therefore, have to do something special to link against
these. On many Unixes, the environment variable \Code{LD\_LIBRARY\_PATH}
specifies a list of directories which are searched for shared
libraries, in addition to a set of system defaults. The analogue on
Mac OS X is \Code{DYLD\_LIBRARY\_PATH}.\par The build system uses libtool\UrlFootnote{http://directory.fsf.org/libtool.html}
extensively, and it installs its `libtool library files',
\Code{wibble.la}, in the library directory alongside the more
usual static \Code{.a} and dynamic \Code{.so} files (as
appropriate for your platform).  If you also use libtool, you can
usefully link against these \Code{.la} files yourself.\par See your system's \Code{ld} man page for more details than
you can shake a stick at.\par \section{Change history}\subsection*{Version 0}Norman Gray, 29 April 2005\par \subsection*{Changes in version 0}Norman Gray, 29 April 2005\par Draft release: \$Revision: 1.1 \$\par \end{document}