Mercurial > hg > octave-lyh
diff doc/interpreter/install.txi @ 3294:bfe1573bd2ae
[project @ 1999-10-19 10:06:07 by jwe]
author | jwe |
---|---|
date | Tue, 19 Oct 1999 10:08:42 +0000 |
parents | |
children | ab5ae0aca0f1 |
line wrap: on
line diff
new file mode 100644 --- /dev/null +++ b/doc/interpreter/install.txi @@ -0,0 +1,566 @@ +@c Copyright (C) 1996, 1997 John W. Eaton +@c This is part of the Octave manual. +@c For copying conditions, see the file gpl.texi. + +@c The text of this file will eventually appear in the file INSTALL +@c in the Octave distribution, as well as in the Octave manual. + +@ifclear INSTALLONLY +@node Installation, Emacs, Trouble, Top +@appendix Installing Octave +@end ifclear + +@ifset INSTALLONLY +@include conf.texi + +This file documents the installation of Octave. + +Octave is free software; you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the +Free Software Foundation. + +@node Installation, , Installation +@chapter Installing Octave +@end ifset + +@cindex installing Octave + +Here is the procedure for installing Octave from scratch on a Unix +system. For instructions on how to install the binary distributions of +Octave, see @ref{Binary Distributions}. + +@itemize @bullet +@item +Run the shell script @file{configure}. This will determine the features +your system has (or doesn't have) and create a file named +@file{Makefile} from each of the files named @file{Makefile.in}. + +Here is a summary of the configure options that are most frequently used +when building Octave: + +@table @code +@item --prefix=@var{prefix} +Install Octave in subdirectories below @var{prefix}. The default value +of @var{prefix} is @file{/usr/local}. + +@item --srcdir=@var{dir} +Look for Octave sources in the directory @var{dir}. + +@item --with-f2c +Use @code{f2c} even if a Fortran compiler is available. + +@item --with-g77 +Use @code{g77} to compile Fortran code. + +@item --enable-shared +Create shared libraries. If you are planning to use +@code{--enable-lite-kernelel} or the dynamic loading features, you will +probably want to use this option. It will make your @file{.oct} files +much smaller and on some systems it may be necessary to build shared +libraries in order to use dynamically linked functions. + +You may also want to build a shared version of @code{libstdc++}, if your +system doesn't already have one. Note that a patch is needed to build +shared versions of version 2.7.2 of @code{libstdc++} on the HP-PA +architecture. You can find the patch at +@url{ftp://ftp.cygnus.com/pub/g++/libg++-2.7.2-hppa-gcc-fix}. + +@item --enable-dl +Use @code{dlopen} and friends to make Octave capable of dynamically +linking externally compiled functions. This only works on systems that +actually have these functions. If you plan on using this feature, you +should probably also use @code{--enable-shared} to reduce the size of +your @file{.oct} files. + +@item --enable-shl +Use @code{shl_load} and friends to make Octave capable of dynamically +linking externally compiled functions. This only works on systems that +actually have these functions (only HP-UX systems). If you plan on +using this feature, you should probably also use @code{--enable-shared} +to reduce the size of your @file{.oct} files. + +@item --enable-lite-kernel +Compile smaller kernel. This currently requires the dynamic linking +functions @code{dlopen} or @code{shl_load} and friends so that Octave +can load functions at run time that are not loaded at compile time. + +@item --help +Print a summary of the options recognized by the configure script. +@end table + +See the file @file{INSTALL} for more information about the command line +options used by configure. That file also contains instructions for +compiling in a directory other than where the source is located. + +@item +Run make. + +You will need a recent version of GNU Make. Modifying Octave's +makefiles to work with other make programs is probably not worth +your time. We recommend you get and compile GNU Make instead. + +For plotting, you will need to have gnuplot installed on your system. +Gnuplot is a command-driven interactive function plotting program. +Gnuplot is copyrighted, but freely distributable. The `gnu' in gnuplot +is a coincidence---it is not related to the GNU project or the FSF in +any but the most peripheral sense. + +To compile Octave, you will need a recent version of GNU Make. You +will also need @code{g++} 2.7.2 or later. Version 2.8.0 or @code{egcs} +1.0.x should work. Later versions may work, but C++ is still evolving, +so don't be too surprised if you run into some trouble. + +It is no longer necessary to have @code{libg++}, but you do need to have +the GNU implementation of @code{libstdc++}. If you are using @code{g++} +2.7.2, @code{libstdc++} is distributed along with @code{libg++}, but for +later versions, @code{libstdc++} is distributed separately. For +@code{egcs}, @code{libstdc++} is included with the compiler +distribution. + +If you plan to modify the parser you will also need GNU @code{bison} and +@code{flex}. If you modify the documentation, you will need GNU +Texinfo, along with the patch for the @code{makeinfo} program that is +distributed with Octave. + +GNU Make, @code{gcc}, and @code{libstdc++}, @code{gnuplot}, +@code{bison}, @code{flex}, and Texinfo are all available from many +anonymous ftp archives. The primary site is @url{ftp.gnu.org}, but it +is often very busy. A list of sites that mirror the software on +@url{ftp.gnu.org} is available by anonymous ftp from +@url{ftp://ftp.gnu.org/pub/gnu/GNUinfo/FTP}. + +If you don't have a Fortran compiler, or if your Fortran compiler +doesn't work like the traditional Unix f77, you will need to have the +Fortran to C translator @code{f2c}. You can get @code{f2c} from any +number of anonymous ftp archives. The most recent version of @code{f2c} +is always available from @url{netlib.att.com}. + +On an otherwise idle Pentium 133 running Linux, it will take somewhere +between 1-1/2 to 3 hours to compile everything, depending on whether you +are building shared libraries. You will need about 100 megabytes of disk +storage to work with (considerably less if you don't compile with debugging +symbols). To do that, use the command + +@example +make CFLAGS=-O CXXFLAGS=-O LDFLAGS= +@end example + +@noindent +instead of just @samp{make}. + +@item +If you encounter errors while compiling Octave, first check the list of +known problems below to see if there is a workaround or solution for +your problem. If not, +@ifclear INSTALLONLY +see @ref{Trouble}, +@end ifclear +@ifset INSTALLONLY +see the file BUGS +@end ifset +for information about how to report bugs. + +@item +Once you have successfully compiled Octave, run @samp{make install}. + +This will install a copy of octave, its libraries, and its documentation +in the destination directory. As distributed, Octave is installed in +the following directories. In the table below, @var{prefix} defaults to +@file{/usr/local}, @var{version} stands for the current version number +of the interpreter, and @var{arch} is the type of computer on which +Octave is installed (for example, @samp{i586-unknown-gnu}). + +@table @file +@item @var{prefix}/bin +Octave and other binaries that people will want to run directly. + +@item @var{prefix}/lib +Libraries like libcruft.a and liboctave.a. + +@item @var{prefix}/share +Architecture-independent data files. + +@item @var{prefix}/include/octave +Include files distributed with Octave. + +@item @var{prefix}/man/man1 +Unix-style man pages describing Octave. + +@item @var{prefix}/info +Info files describing Octave. + +@item @var{prefix}/share/octave/@var{version}/m +Function files distributed with Octave. This includes the Octave +version, so that multiple versions of Octave may be installed at the +same time. + +@item @var{prefix}/lib/octave/@var{version}/exec/@var{arch} +Executables to be run by Octave rather than the user. + +@item @var{prefix}/lib/octave/@var{version}/oct/@var{arch} +Object files that will be dynamically loaded. + +@item @var{prefix}/share/octave/@var{version}/imagelib +Image files that are distributed with Octave. +@end table +@end itemize + +@menu +* Installation Problems:: +* Binary Distributions:: +@end menu + +@node Installation Problems, Binary Distributions, Installation, Installation +@appendixsec Installation Problems + +This section contains a list of problems (and some apparent problems +that don't really mean anything is wrong) that may show up during +installation of Octave. + +@itemize @bullet +@item +On some SCO systems, @code{info} fails to compile if +@code{HAVE_TERMIOS_H} is defined int @file{config.h}. Simply removing +the definition from @file{info/config.h} should allow it to compile. + +@item +If @code{configure} finds @code{dlopen}, @code{dlsym}, @code{dlclose}, +and @code{dlerror}, but not the header file @file{dlfcn.h}, you need to +find the source for the header file and install it in the directory +@file{usr/include}. This is reportedly a problem with Slackware 3.1. +For Linux/GNU systems, the source for @file{dlfcn.h} is in the +@code{ldso} package. + +@item +Building @file{.oct} files doesn't work. + +You should probably have a shared version of @code{libstdc++}. A patch +is needed to build shared versions of version 2.7.2 of @code{libstdc++} +on the HP-PA architecture. You can find the patch at +@url{ftp://ftp.cygnus.com/pub/g++/libg++-2.7.2-hppa-gcc-fix}. + +@item +On FreeBSD systems Octave may hang while initializing some internal +constants. The fix appears to be to use + +@example +options GPL_MATH_EMULATE +@end example + +@noindent +rather than + +@example +options MATH_EMULATE +@end example + +@noindent +in the kernel configuration files (typically found in the directory +@file{/sys/i386/conf}. After making this change, you'll need to rebuild +the kernel, install it, and reboot. + +@item +If you encounter errors like + +@smallexample +@group +passing `void (*)()' as argument 2 of + `octave_set_signal_handler(int, void (*)(int))' +@end group +@end smallexample + +@noindent +or + +@smallexample +warning: ANSI C++ prohibits conversion from `(int)' to `(...)' +@end smallexample + +@noindent +while compiling @file{sighandlers.cc}, you may need to edit some files +in the @code{gcc} include subdirectory to add proper prototypes for functions +there. For example, Ultrix 4.2 needs proper declarations for the +@code{signal} function and the @code{SIG_IGN} macro in the file +@file{signal.h}. + +On some systems the @code{SIG_IGN} macro is defined to be something like +this: + +@example +#define SIG_IGN (void (*)())1 +@end example + +@noindent +when it should really be something like: + +@example +#define SIG_IGN (void (*)(int))1 +@end example + +@noindent +to match the prototype declaration for the @code{signal} function. This +change should also be made for the @code{SIG_DFL} and @code{SIG_ERR} +symbols. It may be necessary to change the definitions in +@file{sys/signal.h} as well. + +The @code{gcc} @code{fixincludes} and @code{fixproto} scripts should +probably fix these problems when @code{gcc} installs its modified set of +header files, but I don't think that's been done yet. + +@strong{You should not change the files in @file{/usr/include}}. You +can find the @code{gcc} include directory tree by running the command + +@example +gcc -print-libgcc-file-name +@end example + +@noindent +The directory of @code{gcc} include files normally begins in the same directory +that contains the file @file{libgcc.a}. + +@item +Some of the Fortran subroutines may fail to compile with older versions +of the Sun Fortran compiler. If you get errors like + +@smallexample +zgemm.f: + zgemm: +warning: unexpected parent of complex expression subtree +zgemm.f, line 245: warning: unexpected parent of complex + expression subtree +warning: unexpected parent of complex expression subtree +zgemm.f, line 304: warning: unexpected parent of complex + expression subtree +warning: unexpected parent of complex expression subtree +zgemm.f, line 327: warning: unexpected parent of complex + expression subtree +pcc_binval: missing IR_CONV in complex op +make[2]: *** [zgemm.o] Error 1 +@end smallexample + +@noindent +when compiling the Fortran subroutines in the @file{libcruft} +subdirectory, you should either upgrade your compiler or try compiling +with optimization turned off. + +@item +On NeXT systems, if you get errors like this: + +@example +/usr/tmp/cc007458.s:unknown:Undefined local symbol LBB7656 +/usr/tmp/cc007458.s:unknown:Undefined local symbol LBE7656 +@end example + +@noindent +when compiling @file{Array.cc} and @file{Matrix.cc}, try recompiling +these files without @code{-g}. + +@item +Some people have reported that calls to shell_cmd and the pager do not +work on SunOS systems. This is apparently due to having +@code{G_HAVE_SYS_WAIT} defined to be 0 instead of 1 when compiling +@code{libg++}. + +@item +On NeXT systems, linking to @file{libsys_s.a} may fail to resolve the +following functions + +@example +_tcgetattr +_tcsetattr +_tcflow +@end example + +@noindent +which are part of @file{libposix.a}. Unfortunately, linking Octave with +@code{-posix} results in the following undefined symbols. + +@example +.destructors_used +.constructors_used +_objc_msgSend +_NXGetDefaultValue +_NXRegisterDefaults +.objc_class_name_NXStringTable +.objc_class_name_NXBundle +@end example + +One kluge around this problem is to extract @file{termios.o} from +@file{libposix.a}, put it in Octave's @file{src} directory, and add it +to the list of files to link together in the makefile. Suggestions for +better ways to solve this problem are welcome! + +@item +If Octave crashes immediately with a floating point exception, it is +likely that it is failing to initialize the IEEE floating point values +for infinity and NaN. + +If your system actually does support IEEE arithmetic, you should be able +to fix this problem by modifying the function @code{octave_ieee_init} in +the file @file{lo-ieee.cc} to correctly initialize Octave's internal +infinity and NaN variables. + +If your system does not support IEEE arithmetic but Octave's configure +script incorrectly determined that it does, you can work around the +problem by editing the file @file{config.h} to not define +@code{HAVE_ISINF}, @code{HAVE_FINITE}, and @code{HAVE_ISNAN}. + +In any case, please report this as a bug since it might be possible to +modify Octave's configuration script to automatically determine the +proper thing to do. + +@item +After installing the binary distribution of Octave in an alternate +directory, the Emacs command @code{run-octave} doesn't work. Emacs +hangs in @code{accept-process-output} in @code{inferior-octave-startup}. + +This seems to be a problem with executing a shell script using the +comint package. You can avoid the problem by changing the way Octave is +installed to eliminate the need for the shell script. You can either +compile and install Octave using the source distribution, reinstall the +binary distribution in the default directory, or copy the commands in +the octave shell script wrapper to your shell startup files (and the +shell startup files for anyone else who is using Octave) and then +rename the file @file{octave.bin} to be @file{octave}. +@end itemize + +@node Binary Distributions, , Installation Problems, Installation +@appendixsec Binary Distributions + +Although Octave is not very difficult to build from its sources, it is a +relatively large program that does require a significant amount of time +and disk space to compile and install. Because of this, many people +want to be able to obtain binary distributions so they can start using +Octave immediately, without having to bother with the details of +compiling it first. This is understandable, so I try to maintain a +current collection of binary distributions at +@url{ftp://ftp.che.wisc.edu/pub/octave/BINARIES}. + +Please understand, however, that there is only a limited amount of time +available to devote to making binaries, so binaries may not be +immediately available for some platforms. (Please contact +@email{bug-octave@@bevo.che.wisc.edu} if you are interested in helping +make a binary distribution available for your system.) + +@menu +* Installing Octave from a Binary Distribution:: +* Creating a Binary Distribution:: +@end menu + +@node Installing Octave from a Binary Distribution, Creating a Binary Distribution, Binary Distributions, Binary Distributions +@appendixsubsec Installing Octave from a Binary Distribution + +To install Octave from a binary distribution, execute the command + +@example +sh ./install-octave +@end example + +@noindent +in the top level directory of the distribution. + +Binary distributions are normally compiled assuming that Octave will be +installed in the following subdirectories of @file{/usr/local}. + +@table @file +@item bin +Octave and other binaries that people will want to run directly. + +@item lib +Shared libraries that Octave needs in order to run. These files are +not included if you are installing a statically linked version of +Octave. + +@item man/man1 +Unix-style man pages describing Octave. + +@item info +Info files describing Octave. + +@item share/octave/@var{version}/m +Function files distributed with Octave. This includes the Octave +version, so that multiple versions of Octave may be installed at the +same time. + +@item libexec/octave/@var{version}/exec/@var{arch} +Executables to be run by Octave rather than the user. + +@item libexec/octave/@var{version}/oct/@var{arch} +Object files that will be dynamically loaded. + +@item share/octave/@var{version}/imagelib +Image files that are distributed with Octave. +@end table + +@noindent +where @var{version} stands for the current version number of the +interpreter, and @var{arch} is the type of computer on which Octave +is installed (for example, @samp{@value{TARGETHOSTTYPE}}). + +If these directories don't exist, the script @code{install-octave} will +create them for you. The installation script also creates the following +subdirectories of @file{/usr/local} that are intended for locally +installed functions: + +@table @file +@item share/octave/site/m +Locally installed M-files. + +@item libexec/octave/site/exec/@var{arch} +Locally installed binaries intended to be run by Octave rather than by +the user. + +@item libexec/octave/site/octave/@var{arch} +Local object files that will be dynamically linked. +@end table + +If it is not possible for you to install Octave in @file{/usr/local}, or +if you would prefer to install it in a different directory, you can +specify the name of the top level directory as an argument to the +@file{install-octave} script. For example: + +@example +sh ./install-octave /some/other/directory +@end example + +@noindent +will install Octave in subdirectories of the directory +@file{/some/other/directory}. + +@node Creating a Binary Distribution, , Installing Octave from a Binary Distribution, Binary Distributions +@appendixsubsec Creating a Binary Distribution + +Here is how to build a binary distribution for others to use. If you +want to make a binary distribution for your system available along with +the Octave sources and binaries on @url{ftp.che.wisc.edu}, please follow +this procedure. For directions explaining how to make the binary +available on the ftp site, please contact +@email{bug-octave@@bevo.che.wisc.edu}. + +@itemize @bullet +@item +Unpack the source distribution: + +@example +gunzip -c octave-@value{VERSION}.tar.gz | tar xf - +@end example + +@item +Change your current directory to the top-level directory of the source +distribution: + +@example +cd octave-@value{VERSION} +@end example + +@item +Make the binary distribution: + +@example +make binary-dist +@end example + +This will create a compressed tar file ready for distribution. +It will have a name like +@file{octave-@value{VERSION}-@value{TARGETHOSTTYPE}.tar.gz} +@end itemize