Change to yaz-asncomp
[yaz-moved-to-github.git] / doc / installation.xml
1 <!-- $Id: installation.xml,v 1.18 2003-05-27 21:44:10 adam Exp $ -->
2  <chapter id="installation"><title>Compilation and Installation</title>
3   
4   <sect1><title>Introduction</title>
5    <para>
6     The latest version of the software will generally be found at:
7    </para>
8    <para>
9     <ulink url="http://ftp.indexdata.dk/pub/yaz/">
10      http://ftp.indexdata.dk/pub/yaz/</ulink>
11    </para>
12    <para>
13     We have tried our best to keep the software portable, and on many
14     platforms, you should be able to compile everything with little or
15     no changes. 
16    </para>
17
18    <para>
19     The software is regularly tested on
20     <ulink url="http://www.debian.org/">Debian GNU/Linux</ulink>,
21     <ulink url="http://www.redhat.com/">Redhat Linux</ulink>,
22     <ulink url="http://www.gentoo.org/">Gentoo Linux</ulink>,
23     <ulink url="http://www.netbsd.org/Ports/cobalt/">
24      NetBSD (Cobalt MIPS)</ulink>,
25     <ulink url="http://www.freebsd.org/">FreeBSD (i386)</ulink>,
26     <ulink url="http://www.apple.com/macosx/">MAC OSX</ulink>,
27     <ulink url="http://wwws.sun.com/software/solaris/">
28      SunOS 5.8 (sparc)</ulink>,
29     <ulink url="http://www.microsoft.com/windows2000/">
30      Windows 2000 SP3</ulink>.
31    </para>
32    
33    <para>
34     Some versions have be known to work on HP/UX,
35     DEC Unix, OpenBSD, IBM AIX, Data General DG/UX (with some CFLAGS tinkering),
36     SGI/IRIX, DDE Supermax, Apple Macintosh (using the Codewarrior programming
37     environment and the GUSI socket libraries), IBM AS/400 .
38    </para>
39
40    <para>
41     If you move the software to other platforms, we'd be grateful if you'd
42     let us know about it. If you run into difficulties, we will try to help
43     if we can, and if you solve the problems, we would be happy to include
44     your fixes in the next release. So far, we have mostly avoided
45     <literal>&num;ifdefs</literal> for individual platforms, and we'd
46     like to keep it that way as far as it makes sense.
47    </para>
48    
49    <para>
50     We maintain a mailing-list for the purpose of announcing new releases and
51     bug-fixes, as well as general discussion. Subscribe by sending mail to
52     <ulink url="mailto:yaz-request@indexdata.dk">
53      yaz-request@indexdata.dk
54     </ulink> or fill-in the form
55     <ulink url="http://www.indexdata.dk/mailman/listinfo/yazlist">
56      here</ulink>.
57     General questions and problems can be directed at 
58     <ulink url="mailto:yaz-help@indexdata.dk">
59      yaz-help@indexdata.dk
60     </ulink>, or the address given at the top of this document.
61    </para>
62    
63   </sect1>
64   <sect1 id="installation.unix"><title>UNIX</title>
65
66    <para>
67     We provide 
68     <ulink url="http://www.debian.org/">Debian GNU/Linux</ulink>
69     and 
70     <ulink url="http://www.redhat.com/">Redhat</ulink> packages for &yaz;. 
71     Only i386 binary packages are available. You should be able to
72     create packages for other CPU's by building them from the source
73     package.
74    </para>
75    
76    <sect2 id="installation.source.unix">
77     <title>Compiling from source on Unix</title>
78     
79     <para>
80      Note that if your system doesn't have a native ANSI C compiler, you may
81      have to acquire one separately. We recommend
82      <ulink url="http://gcc.gnu.org/">GCC</ulink>.
83     </para>
84
85     <para>
86      If you wish to use character set conversion facilities in &yaz; or if you
87      are compiling &yaz; for use with Zebra it is a good idea to ensure that
88      the iconv library is installed. Some Unixes today already have it
89      - if not, we suggest 
90      <ulink url="http://www.gnu.org/software/libiconv/">GNU iconv</ulink>.
91     </para>
92
93     <para>
94      The XML C library <ulink url="http://www.xmlsoft.org/">libxml2</ulink>
95      is required if &yaz; is to support SRW (and SOAP).
96      This library is very portable and should compile out-of-the
97      box on virtually all Unix platforms. It is available in binary
98      forms for Linux and others.
99     </para>
100
101     <para>
102      The GNU tools
103      <ulink url="http://www.gnu.org/software/autoconf/">Autoconf</ulink>,
104      <ulink url="http://www.gnu.org/software/automake/">Automake</ulink> and
105      <ulink url="http://www.gnu.org/software/libtool/">Libtool</ulink>
106      are used to generate Makefiles and configure &yaz; for the system.
107      You do <emphasis>not</emphasis> these tools unless you're using the
108      CVS version of &yaz;.
109     </para>
110
111     <para>
112      The CQL parser for &yaz; is built using
113      GNU <ulink url="http://www.gnu.org/software/bison/">Bison</ulink>.
114      This tool is only needed if you're using the CVS version of &yaz;.
115     </para>
116         
117     <para>
118      &yaz; includes a tiny ASN.1 compiler. This compiler is
119      written in <ulink url="http://www.tcl.tk/">Tcl</ulink>.
120      But as for Bison you do not need it unless you're using CVS
121      version of &yaz; or you're using the compiler to built own codecs
122      for private ASN.1. 
123     </para>
124      
125     <para>
126      Generally it should be sufficient to run configure without options,
127      like this:
128     </para>
129     
130     <screen>
131      ./configure
132     </screen>
133     
134     <para>
135      The configure script attempts to use use the C compiler specified by
136      the <literal>CC</literal> environment variable. If not set, GNU C will be
137      used if it is available. The <literal>CFLAGS</literal> environment
138      variable holds options to be passed to the C compiler. If you're using
139      Bourne-compatible shell you may pass something like this to use a
140      particular C compiler with optimization enabled:
141     </para>
142     
143     <screen>
144      CC=/opt/ccs/bin/cc CFLAGS=-O ./configure
145     </screen>
146     
147     <para>
148      To customize &yaz;, the configure script also accepts a set of options.
149      The most important are:
150      
151      <variablelist>
152       <varlistentry><term>
153         <literal>--prefix</literal>=<replaceable>prefix</replaceable></term>
154        <listitem><para>Specifies installation prefix for &yaz;. This is
155          only needed if you run <literal>make install</literal> later to
156          perform a "system" installation. The prefix is
157          <literal>/usr/local</literal> if not specified.
158         </para></listitem>
159       </varlistentry>
160       <varlistentry><term><literal>--enable-tcpd</literal></term>
161        <listitem><para>The front end server will be built using Wietse's
162          <ulink url="ftp://ftp.porcupine.org/pub/security/index.html">
163           TCP wrapper library</ulink>. It allows you to allow/deny
164          clients depending on IP number. The TCP wrapper library is
165          often used in Linux/BSD distributions.
166          See
167          <citerefentry>
168           <refentrytitle>hosts_access</refentrytitle>
169           <manvolnum>5</manvolnum>
170          </citerefentry>
171          and 
172          <citerefentry>
173           <refentrytitle>tcpd</refentrytitle>
174           <manvolnum>8</manvolnum>
175          </citerefentry>.
176         </para></listitem>
177       </varlistentry>
178
179       <varlistentry><term><literal>--enable-threads</literal></term>
180        <listitem><para>&yaz; will be built using POSIX threads.
181         Specifically, <constant>_REENTRANT</constant> will be defined during
182          compilation.
183         </para></listitem>
184       </varlistentry>
185
186       <varlistentry><term><literal>--enable-shared</literal></term>
187        <listitem><para>The make process will create shared
188          libraries (also known as shared objects <filename>.so</filename>).
189          By default, no shared libraries are created -
190          equivalent to <literal>--disable-shared</literal>.
191         </para></listitem>
192       </varlistentry>
193
194       <varlistentry><term><literal>--disable-shared</literal></term>
195        <listitem><para>The make process will not create
196          static libraries (<filename>.a</filename>).
197          By default, static libraries are created -
198          equivalent to <literal>--enable-static</literal>.
199         </para></listitem>
200       </varlistentry>
201       
202       <varlistentry><term>
203         <literal>--with-iconv</literal>[=<replaceable>prefix</replaceable>]
204        </term>
205        <listitem><para>Compile &yaz; with iconv library in directory
206          <replaceable>prefix</replaceable>. By default configure will
207          search for iconv on your system. Use this option if it
208          doesn't find iconv. Alternatively you can use 
209          <literal>--without-iconv</literal> to force &yaz; not to use
210          iconv.
211         </para></listitem>
212       </varlistentry>
213
214       <varlistentry><term>
215         <literal>--with-xml2</literal>[=<replaceable>prefix</replaceable>]
216        </term>
217        <listitem><para>Compile &yaz; with 
218          <ulink url="http://www.xmlsoft.org/">libxml2</ulink> in directory
219          <replaceable>prefix</replaceable>. 
220          Use this option if you want SOAP support.
221          By default configure will
222          search for libxml2 on your system. Use this option if it
223          doesn't find libxml2. Alternatively you can use 
224          <literal>--without-xml2</literal> to force &yaz; not to use
225          libxml2.
226         </para></listitem>
227       </varlistentry>
228
229       <varlistentry><term>
230         <literal>--with-openssl</literal>[=<replaceable>prefix</replaceable>]
231        </term>
232        <listitem><para>&yaz; will be linked with the OpenSSL libraries and
233          an SSL COMSTACK will be provided. Note that SSL support is still
234          experimental.
235         </para></listitem>
236       </varlistentry>
237       
238      </variablelist>
239      
240     </para>
241     <para>
242      When configured, build the software by typing:
243      <screen>
244       make
245      </screen>
246     </para>
247     
248     <para>
249      The following files are generated by the make process:
250      <variablelist>
251       <varlistentry><term><filename>lib/libyaz.la</filename></term>
252        <listitem><para>
253          Main &yaz; library. This is no ordinary library. It's
254          a Libtool archive.
255          By default, &yaz; creates a static library in 
256          <filename>lib/.libs/libyaz.a</filename>.
257         </para></listitem></varlistentry>
258       
259       <varlistentry><term><filename>lib/libyazthread.la</filename></term>
260        <listitem><para>
261          When threading is supported/enabled by configure this Libtool
262          library is created. It includes functions that allows &yaz;
263          to use threads.
264         </para></listitem></varlistentry>
265       
266       <varlistentry><term><filename>ztest/yaz-ztest</filename></term>
267        <listitem><para>Test Z39.50 server. 
268         </para></listitem></varlistentry>
269       
270       <varlistentry><term><filename>client/yaz-client</filename></term>
271        <listitem><para>Z39.50 client for testing the protocol.
272          See chapter <link linkend="client">
273           YAZ client</link> for more information.
274         </para></listitem></varlistentry>
275       
276       <varlistentry><term><filename>yaz-config</filename></term>
277        <listitem><para>A Bourne-shell script, generated by configure, that
278          specifies how external applications should compile - and link with
279          &yaz;.
280         </para></listitem></varlistentry>
281       
282       <varlistentry><term><filename>yaz-asncomp</filename></term>
283        <listitem><para>The ASN.1 compiler for &yaz;. Requires the
284          Tcl Shell, <application>tclsh</application>, in
285          <literal>PATH</literal> to operate.
286         </para></listitem></varlistentry>
287       
288       <varlistentry><term><filename>zoom/zoomsh</filename></term>
289        <listitem><para>
290          A simple shell implemented on top of the 
291          <link linkend="zoom">ZOOM</link> functions.
292          The shell is a command line application that allows you to enter
293          simple commands to perform ZOOM operations.
294         </para></listitem></varlistentry>
295       
296       <varlistentry><term><filename>zoom/zoomtst1</filename>, 
297         <filename>zoom/zoomtst2</filename>, ..</term>
298        <listitem><para>
299          Several small applications that demonstrates the ZOOM API.
300         </para></listitem></varlistentry>
301      </variablelist>
302      
303     </para>
304     
305     <para>
306      If you wish to install &yaz; in system directories  
307      <filename>/usr/local/bin</filename>,
308      <filename>/usr/local/lib</filename> .. etc, you can type:
309     </para>
310     
311     <screen>
312      make install
313     </screen>
314    
315     <para>
316      You probably need to have root access in order to perform this.
317      You must specify the <literal>--prefix</literal> option for configure if
318      you wish to install &yaz; in other directories than the default 
319      <filename>/usr/local/</filename>.
320     </para>
321     
322     <para>
323      If you wish to perform an un-installation of &yaz;, use:
324     </para>
325     
326     <screen>
327      make uninstall
328     </screen>
329     
330     <para>
331      This will only work if you haven't reconfigured &yaz; (and therefore
332      changed installation prefix). Note that uninstall will not
333      remove directories created by make install, e.g.
334      <filename>/usr/local/include/yaz</filename>.
335     </para>
336    </sect2>
337
338    <sect2><title>How to make apps using YAZ on UNIX</title>
339     <para>
340      This section describes how to compile - and link your own
341      applications using the &yaz; toolkit.
342      If you're used to Makefiles this shouldn't be hard. As for
343      other libraries you have used before, you have to set a proper include
344      path for your C/C++ compiler and specify the location of
345      &yaz; libraries. You can do it by hand, but generally we suggest
346      you use the <filename>yaz-config</filename> that is generated
347      by <filename>configure</filename>. This is especially
348      important if you're using the threaded version of &yaz; which
349      require you to pass more options to your linker/compiler.
350     </para>
351     <para>
352      The <filename>yaz-config</filename> script accepts command line
353      options that makes the <filename>yaz-config</filename> script print
354      options that you should use in your make process.
355      The most important ones are:
356      <literal>--cflags</literal>, <literal>--libs</literal>
357      which prints C compiler flags, and linker flags respectively.
358      </para>
359     <para>
360      A small and complete <literal>Makefile</literal> for a C
361      application consisting of one source file,
362      <filename>myprog.c</filename>, may look like this:
363      <screen>
364       YAZCONFIG=/usr/local/bin/yaz-config
365       CFLAGS=`$(YAZCONFIG) --cflags`
366       LIBS=`$(YAZCONFIG) --libs`
367       myprog: myprog.o
368          $(CC) $(CFLAGS) -o myprog myprog.o $(LIBS)
369       </screen>
370      </para>
371     <para>
372      The CFLAGS variable consists of a C compiler directive that will set
373      the include path to the <emphasis>parent</emphasis> directory
374      of <filename>yaz</filename>. That is, if &yaz; header files were
375      installed in <filename>/usr/local/include/yaz</filename>,
376      then include path is set to <filename>/usr/local/include</filename>.
377      Therefore, in your applications you should use
378      <screen>
379       #include &lt;yaz/proto.h>
380      </screen>
381      and <emphasis>not</emphasis>
382      <screen>
383       #include &lt;proto.h>
384      </screen>
385     </para> 
386     <para>
387      For Libtool users, the <filename>yaz-config</filename> script provides
388      a different variant of option <literal>--libs</literal>, called
389      <literal>--lalibs</literal> that returns the name of the
390      Libtool acrhive(s) for &yaz; rather than the ordinary ones.
391     </para>
392     <para>
393      For applications using the threaded version of &yaz;,
394      specify <literal>threads</literal> after the
395      other options. When <literal>threads</literal> is given,
396      more flags and linker flags will be printed by
397      <filename>yaz-config</filename>. If our previous example was
398       using threads, you'd have to modify the lines that set
399      <literal>CFLAGS</literal> and <literal>LIBS</literal> as
400      follows:
401      <screen>
402       CFLAGS=`$(YAZCONFIG) --cflags threads`
403       LIBS=`$(YAZCONFIG) --libs threads`
404      </screen>
405      There is no need specify POSIX thread libraries in your Makefile.
406      The <literal>LIBS</literal> variable includes that as well.
407     </para>
408    </sect2>
409   </sect1>
410   <sect1 id="installation.win32"><title>WIN32</title>
411    
412    <para>The easiest way to install YAZ on Windows is by downloading
413     an installer from 
414     <ulink url="http://ftp.indexdata.dk/pub/yaz/win32">here</ulink>.
415     The installer comes with source too - in case you wish to
416     compile YAZ with different Compiler options etc. 
417    </para>
418    
419    <sect2 id="installation.win32.source">
420     <title>Compiling from Source on WIN32</title>
421     <para>
422      &yaz; is shipped with "makefiles" for the NMAKE tool that comes
423      with <ulink url="http://msdn.microsoft.com/vstudio/">
424       Microsoft Visual C++</ulink>.
425      Version 6 has been tested. We expect that &yaz; compiles
426      with version 5 as well.
427     </para>
428     <para>
429      Start a command prompt and switch the sub directory
430      <filename>WIN</filename> where the file <filename>makefile</filename>
431      is located. Customize the installation by editing the
432      <filename>makefile</filename> file (for example by using notepad).
433      
434      The following summarizes the most important settings in that file:
435      
436      <variablelist>
437       <varlistentry><term><literal>DEBUG</literal></term>
438        <listitem><para>
439          If set to 1, the software is
440          compiled with debugging libraries (code generation is
441          multi-threaded debug DLL).
442          If set to 0, the software is compiled with release libraries
443          (code generation is multi-threaded DLL).
444         </para></listitem>
445       </varlistentry>
446       <varlistentry>
447        <term><literal>HAVE_TCL</literal>, <literal>TCL</literal></term>
448        <listitem><para>
449          If <literal>HAVE_TCL</literal> is set to 1, nmake will
450          use the ASN.1 compiler (Tcl based). You must set
451          <literal>TCL</literal> to the full path of the Tcl
452          interpreter.
453         </para>
454         <para>
455          If you do not have Tcl installed, set
456          <literal>HAVE_TCL</literal> to 0.
457         </para></listitem>
458       </varlistentry>
459
460       <varlistentry>
461        <term><literal>HAVE_BISON</literal>,
462         <literal>BISON</literal></term>
463        <listitem><para>
464          If GNU Bison is present, you might set <literal>HAVE_ICONV</literal>
465          to 1 and specify the Bison executable in <literal>BISON</literal>.
466          Bison is only required if you use the CVS version of
467          YAZ or if you modify the grammar for CQL
468          (<filename>cql.y</filename>).
469         </para>
470         <para>
471          GNU Bison for Windows is part of 
472          <ulink url="http://unxutils.sourceforge.net/">unxutils</ulink>.
473         </para></listitem>
474       </varlistentry>
475
476       <varlistentry>
477        <term><literal>HAVE_ICONV</literal>,
478         <literal>ICONV_DIR</literal></term>
479        <listitem><para>
480          If <literal>HAVE_ICONV</literal> is set to 1, YAZ is compiled
481          with iconv support. In this configuration, set 
482          <literal>ICONV_DIR</literal> to the iconv source directory.
483         </para></listitem>
484       </varlistentry>
485       
486       <varlistentry>
487        <term><literal>HAVE_LIBXML2</literal>,
488         <literal>LIBXML2_DIR</literal></term>
489        <listitem>
490         <para>
491          If <literal>HAVE_LIBXML2</literal> is set to 1, YAZ is compiled
492          with SRW (and SOAP) support. In this configuration, set 
493          <literal>LIBXML2_DIR</literal> to the 
494          <ulink url="http://www.xmlsoft.org/">libxml2</ulink> source directory.
495         </para>
496
497         <para>
498          Windows versions of libxml2 and iconv can be found
499          <ulink url="http://www.zlatkovic.com/projects/libxml/binaries.html">
500           here</ulink>.
501         </para>
502        </listitem>
503       </varlistentry>
504
505      </variablelist>
506     </para>
507     <para>
508      When satisfied with the settings in the makefile, type
509      <screen>
510       nmake
511      </screen>
512     </para>
513     <note>
514      <para>
515       If the <filename>nmake</filename> command is not found on your system
516       you probably haven't defined the environment variables required to
517       use that tool. To fix that, find and run the batch file
518       <filename>vcvars32.bat</filename>. You need to run it from within
519       the command prompt or set the environment variables "globally";
520       otherwise it doesn't work.
521      </para>
522     </note>
523     <para>
524      If you wish to recompile &yaz; - for example if you modify
525      settings in the <filename>makefile</filename> you can delete
526      object files, etc by running.
527      <screen>
528       nmake clean
529      </screen>
530     </para>
531     <para>
532      The following files are generated upon successful compilation:
533      
534      <variablelist>
535       <varlistentry><term><filename>bin/yaz.dll</filename></term>
536        <listitem><para>
537          &yaz; multi-threaded Dynamic Link Library.
538         </para></listitem></varlistentry>
539       
540       <varlistentry><term><filename>lib/yaz.lib</filename></term>
541        <listitem><para>
542          Import library for <filename>yaz.dll</filename>.
543         </para></listitem></varlistentry>
544       
545       <varlistentry><term><filename>bin/yaz-client.exe</filename></term>
546        <listitem><para>
547          &yaz; Z39.50 client application. It's a WIN32 console application.
548          See chapter <link linkend="client">YAZ client</link> for more
549          information.
550         </para></listitem></varlistentry>
551       
552       <varlistentry><term><filename>bin/yaz-ztest.exe</filename></term>
553        <listitem><para>
554          Z39.50 multi-threaded test/example server. It's a WIN32
555          console application.
556         </para></listitem></varlistentry>
557       
558       <varlistentry><term><filename>bin/zoomsh.exe</filename></term>
559        <listitem><para>
560          Simple console application implemented on top of the
561          <link linkend="zoom">ZOOM</link> functions.
562          The application is a command line shell that allows you to enter
563          simple commands to perform ZOOM operations.
564         </para></listitem></varlistentry>
565       
566       <varlistentry><term><filename>bin/zoomtst1.exe</filename>, 
567         <filename>bin/zoomtst2.exe</filename>, ..</term>
568        <listitem><para>
569          Several small applications that demonstrates the ZOOM API.
570         </para></listitem></varlistentry>
571       
572      </variablelist>
573      
574     </para>
575    </sect2>
576
577    <sect2><title>How to make apps using YAZ on WIN32</title>
578     <para>
579      This section will go though the process of linking your WIN32
580      applications with &yaz;.
581     </para>
582     <para>
583      Some people are confused by the fact that we use the nmake
584      tool to build &yaz;. They think they have to do that too - in order
585      to make their WIN32 applications work with &yaz;. The good news is that
586      you don't have to. You can use the integrated environment of
587      Visual Studio if desired for your own application.
588     </para>
589     <para>
590      When setting up a project or Makefile you have to set the following:
591      <variablelist>
592       <varlistentry><term>include path</term><listitem><para>
593          Set it to the <filename>include</filename> directory of &yaz;.
594         </para></listitem></varlistentry>
595       <varlistentry><term>import library <filename>yaz.lib</filename>
596        </term><listitem><para>
597          You must link with this library. It's located in the 
598          sub directory <filename>lib</filename> of &yaz;.
599         </para></listitem></varlistentry>
600       <varlistentry><term>dynamic link library <filename>yaz.dll</filename>
601        </term><listitem><para>
602          This DLL must be in your execution path when you invoke
603          your application. Specifically, you should distribute this
604          DLL with your application.
605         </para></listitem></varlistentry>
606      </variablelist>
607     </para>
608    </sect2>
609   </sect1>
610  </chapter>
611  
612  <!-- Keep this comment at the end of the file
613  Local variables:
614  mode: sgml
615  sgml-omittag:t
616  sgml-shorttag:t
617  sgml-minimize-attributes:nil
618  sgml-always-quote-attributes:t
619  sgml-indent-step:1
620  sgml-indent-data:t
621  sgml-parent-document: "yaz.xml"
622  sgml-local-catalogs: nil
623  sgml-namecase-general:t
624  End:
625  -->
626