Lynx Installation Guide This file describes how to compile and install Lynx. A description of Lynx can be found in the README file. Lynx has been ported to UN*X, VMS, Win32 and 386DOS. The procedures for compiling these ports are quite divergent and are detailed respectively in Sections II, III, IV and V. General installation, problem solving and environment variables are covered in Sections VI and VII. There is also a PROBLEMS file in the same directory as INSTALLATION which contains advice for special problems people have encountered, especially for particular machines and operating systems. If you still have difficulties, send an e-mail message to the Lynx-Dev mailing list (see the README file). Try to include information about your system, the name and version of your compiler, which curses library you are using and the compile-time errors. Be sure to say what version and image-number of Lynx you are trying to build (alternately the top date of the CHANGES file). If you don't understand what one of the defines means, try the README.defines and *.announce files in the docs subdirectory. The docs/CHANGES* files record the entire development history of Lynx and are an invaluable resource for understanding how Lynx should perform. First, you must configure Lynx for your system regardless of the port you use. Follow the instructions given immediately below to configure for your system, and then go to the respective section concerning the port you wish to compile. I. General configuration instructions (all ports). Step 1. Compile-time Variables. There are a few variables that MUST be defined if Lynx is to build and there are others you may want to change. Lynx MUST be able to find lynx.cfg at start-up: using configure (e.g. with UNIX or Cygwin), its location is best set with --libdir ; you can check in lynx_cfg.h after configure has run, if you wish. otherwise, you can use LYNX_CFG_FILE in userdefs.h , environment variable LYNX_CFG or the -cfg command-line option. If you are using configure, you need not make any changes in userdefs.h . There are a few variables you can't define with configure --options but can define in userdefs.h , e.g. numbering fields as well as links. Many variables which can be defined with configure or userdefs.h can also be defined in lynx.cfg or via the Options Menu. Lynx implements Native Language Support. Read "ABOUT-NLS", if you want to build an international version of Lynx or tailor status-line prompts, messages and warnings to the requirements of your site. Step 2. Run-time Variables. Read lynx.cfg thoroughly, as many Lynx features and how to use them are explained there, in some cases ONLY there. Set up local printers, downloaders, assumed character set, key mapping and colors in lynx.cfg . Also see the sample mime.types, mailcap and jumps files in the samples subdirectory. Step 3. Alternative Character Sets. You may skip this, if you are not interested in special characters and all local files or WWW pages you will view will use the ISO-8859-1 "ISO Latin 1" Western European character set. If you will be running Lynx in an environment with different incompatible character sets, configure CHARACTER_SET (the Display character set) and ASSUME_LOCAL_CHARSET to work correctly before creating bookmark files and other such items: read lynx.cfg for detailed instructions. Additional character sets and their properties may be defined with tables in the src/chrtrans directory: see the README.* files therein. Step 4. News. Set NNTPSERVER in lynx.cfg to your site's NNTP server or set the environment variable externally. For posting to be enabled, NEWS_POSTING must be TRUE in userdefs.h or lynx.cfg. Also define LYNX_SIG_FILE in userdefs.h or lynx.cfg , so that it points to users' signature files for appending to messages. Step 5. Anonymous Accounts *** VERY IMPORTANT!!!!! *** If you are building Lynx for personal use only, you can skip this. If you are setting up anonymous accounts to use Lynx captively, i.e. making Web access publicly available to users who should not be allowed any other type of access to your system, you are STRONGLY advised to use the -anonymous command-line option: if you do not use this option, users may be able to gain access to all readable files on your machine! Many implementations of telnetd allow passing of environment variables, which might be used to modify the environment in anonymous accounts, allowing mischief or damage by malicious users, so make sure the wrapper uses the -cfg and -homepage switches to specify lynx.cfg and start-file, rather than relying on variables LYNX_CFG, LYNX_CFG_FILE and WWW_HOME. II. Compile instructions -- UNIX 1a. Auto-configure. The auto-configure script uses autoconf2.13 to generate a Bourne shell script, configure, which creates "makefile" and "lynx_cfg.h". If you are on a UNIX platform, the easiest way to build Lynx is to type: ./configure and make NOTE: Configure has a number of useful options. Please see below. NOTE: The 'configure' script generates auxiliary files "config.status" "config.cache" and "config.log". Normally you will not notice these; they are created automatically and removed by a "make distclean". + If you wish to rebuild Lynx with a new host, or change ANY of the parameters which are stored in config.cache, you MUST first remove the config.cache file before running configure; its options do NOT override the settings in that file. + The config.status file is a script which creates (or regenerates) the files created by the configure script. Please report problems in the configure/make process by including a copy of config.status, config.cache and config.log, as well as the pertinent compiler diagnostics. See the note in aclocal.m4 for special instructions if you must modify the configure script. NOTE: Lynx is a curses-based application, so you must have a curses library available to link to. Native curses (on the system when it was installed) are often broken, so you may get superior performance if you have either "ncurses" ("ftp://invisible-island.net/ncurses") or "slang" ("ftp://space.mit.edu/pub/davis/slang"). If you install these libraries in your home directory or a non-default location, you may need to set the CPPFLAGS (full path to include files) and LIBS (full path to library files) environment variables BEFORE running configure. See "1d. Environment". Use the "--with-screen=ncurses" or "--with-screen=slang" option. Note that while lynx will build with a variety of versions of curses and ncurses, some will be less satisfactory. Versions of ncurses before 1.9.9g will not render color properly. Some other versions of curses do not display color at all. Likewise, lynx may not build with old versions of slang, e.g., before 0.99-38, because slang's interfaces change periodically. Note compiler/system specific problems below. See also: http://invisible-island.net/ncurses/ncurses.faq.html 1b. Platforms. Configure should work properly on any Unix-style system. It has been tested on the following platforms. AIX 3.2.5 (cc w/ curses) BeOS 4.5 (gcc w/ ncurses) CLIX (cc w/ curses & ncurses) DGUX Digital Unix 3.2C and 4.0 (gcc & cc w/ curses, ncurses & slang) FreeBSD 2.1.5, 3.1 (gcc 2.6.3 w/ curses & ncurses) HP-UX (K&R and ANSI cc, gcc w/ curses, ncurses & slang) IRIX 5.2 and 6.2 (cc & gcc w/ curses, ncurses & slang) Linux 2.0.0 (gcc 2.7.2 w/ curses, ncurses & slang) MkLinux 2.1.5 (gcc 2.7.2.1) NetBSD NEXTSTEP 3.3 (gcc 2.7.2.3 w/ curses) OS/2 EMX 0.9c (ncurses) SCO OpenServer (cc w/ curses) Solaris 2.5, 2.6 & 2.7 (cc & gcc w/ curses, ncurses & slang) SunOS 4.1 (cc w/ curses, gcc w/ ncurses & slang) OS390 and BS2000. NOTE: SunOS and HP-UX come with a bundled K&R compiler, which is only useful for compiling with the bundled curses. Both ncurses and slang require a compiler that recognizes prototypes. 1c. Options To get a list of the configure script's options, type "./configure --help". Below is an alphabetical listing of the Lynx-specific options. The actual order shown by the -help option is different. See "docs/README.defines" for information on defines for which there are no option switches. --disable-alt-bindings (prevent defining EXP_ALT_BINDINGS) Compiles-in an alternative set of line-edit bindings, in addition to the default bindings. --disable-bibp-urls (define DISABLE_BIBP) Disable (do not compile code) support for bibp: URLs. --disable-config-info (define NO_CONFIG_INFO) Use this option to disable extended browsable configuration information (a screen that shows the result of the configuration script, as well as extended lynx.cfg viewing with a pointer to the lynx.cfg file and additional functionality). --disable-dired (prevent defining DIRED_SUPPORT) Use this option to disable the optional directory-editor. Lynx supports directory editing (DirEd) for local directories. This allows users to do things like view, copy and remove files using a tabular display of the directory and single-keystroke commands instead of using the command line. From inside Lynx, the keystroke sequence "g." switches Lynx to DirEd mode on the current directory. If you're building a Lynx that is to be used as a kind of restricted shell for users who do not have access to the command line and should not have access to equivalent capabilities, you probably want to disable DirEd with this option. You can also disable some DirEd functions while allowing others. If you have disabled DirEd completely, you can ignore all the more specific DirEd options. All DirEd menu functions that were enabled on compilation can be disabled or modified at run time via DIRED_MENU symbols in lynx.cfg. --disable-dired-dearchive (define ARCHIVE_ONLY) Use this option to prevent DirEd from extracting files from an archive file. --disable-dired-gzip (prevent defining OK_GZIP) Use this option to prevent DirEd from using gzip and gunzip. --disable-dired-override (prevent defining OK_OVERRIDE) Normally, in DirEd directory viewing mode some key mappings are overridden. Use this option to disable DirEd keymap overriding. --disable-dired-permit (prevent defining OK_PERMIT) Use this option to prevent DirEd from changing the permissions on directories or files (i.e., from doing what the Unix chmod command or the DOS attrib command does). --disable-dired-tar (prevent defining OK_TAR) Use this option to prevent DirEd from using the tar program. --disable-dired-uudecode (prevent defining OK_UUDECODE) Use this option to prevent DirEd from using uudecode. --disable-dired-xpermit (define NO_CHANGE_EXECUTE_PERMS) Use this option if you do not disable out the dired-permit option, but want to restrict changes of the eXecute permission to directories (i.e., not allow it to be changed for files). If you don't do this, you can still block changes of the eXecute permission for files but not directories via the "change_exec_perms" command line restriction. --disable-dired-zip (prevent defining OK_ZIP) Use this option to prevent DirEd from using zip and unzip. --disable-echo Use this option to suppress the "compiling" commands during a build. Doing this makes it easier to find and read warning messages. --disable-extended-dtd (define NO_EXTENDED_HTMLDTD) disable extended HTML DTD logic. This should revert to old-style (2.7.1/2.7.2) behavior, but is not well-tested. --disable-file-upload (define USE_FILE_UPLOAD) Compile-in support for form-based file-upload. --disable-finger (define DISABLE_FINGER) Do not compile-in code used to connect to "finger" URLs. --disable-ftp (define DISABLE_FTP) Do not compile-in code used to connect to FTP servers. --disable-forms-options (define NO_OPTION_FORMS) Disable the Form-based Options Menu (see --disable-menu-options). The default is to compile key-based & form-based Options Menu code, allowing users the final choice via FORMS_OPTIONS in lynx.cfg or the -forms_options command-line switch. --disable-gopher (define DISABLE_GOPHER) Do not compile-in code used to connect to GOPHER servers. --disable-full-paths Use this option to control whether full pathnames are compiled in for various utilities invoked by lynx as external commands. By default, full pathnames are compiled in for the the locations where configure finds these commands at configure time. Affected commands are chmod, compress, cp, gzip, install, mkdir, mv, rm, tar, touch, gunzip, unzip, bzip2, uudecode, zcat, zip, telnet, tn3270, rlogin. (Not all of them are used on all systems or in all configurations.) This option makes Lynx simpler to install, but potentially less secure, since the commands are then set in the user's $PATH. All of these commands may also be overridden individually by setting environment variables before configuring. For example, you can disable the telnet command by doing this: setenv TELNET /bin/false --disable-included-msgs Do not use included messages, for i18n support. If NLS support is requested, the configure script will otherwise use the messages in the ./po subdirectory. --disable-long-list (prevent defining LONG_LIST) Use this option to disable long "ls -l" directory listings (when enabled, the actual directory style is configurable from lynx.cfg). --disable-menu-options (define NO_OPTION_MENU) Disable the Key-based Options Menu. See --disable-forms-options (above) for further details. --disable-news (define DISABLE_NEWS) Do not compile-in code used to connect to NNTP (netnews) servers. --disable-parent-dir-refs (define NO_PARENT_DIR_REFERENCE) Use this option to disable "Up-to" parent-links in directory listings. --disable-partial (prevent defining DISP_PARTIAL) Turn off code that lets Lynx display parts of a long page while loading it. --disable-persistent-cookies (prevent defining USE_PERSISTENT_COOKIES) Use this option to tell configure whether to compile-in support for saving cookies to a file, for subsequent reuse. Persistent cookie support will use (or create) the file specified by the 'COOKIE_FILE' option, or default to ".lynx_cookies" in the home directory. (Currently there is no protection against conflict if several lynx sessions are active from the same account). --disable-prettysrc (define USE_PRETTYSRC) Use this option to compile-in support for colorizing the source view of HTML pages. If compiled-in, new source view mode is available with -prettysrc command line option. --disable-read-eta (define USE_READPROGRESS) Enhance the read-progress message to show ETA (estimated time to completion), as well as the amount of time stalled without any data transferred. --disable-source-cache (define USE_SOURCE_CACHE) Use this option to compile-in support for caching HTML pages locally, in files or in memory. Configurable from lynx.cfg --disable-trace (define NO_LYNX_TRACE) Turn off code that lets you trace internal details of Lynx's operation. We recommend that you leave this enabled, since we need this information to diagnose problems with either Lynx or the sites to which you connect. --enable-addrlist-page (define EXP_ADDRLIST_PAGE) Compiles-in an alternative list-page, bound to 'A' rather than 'l', which always lists URLs rather than titles. --enable-change-exec (define ENABLE_OPTS_CHANGE_EXEC) Allow users to change the execution status within the options screen. See EXEC_LINKS and EXEC_SCRIPTS. --enable-cgi-links (define LYNXCGI_LINKS) Allows lynx to access a cgi script directly without the need for a http daemon. --enable-charset-choice (define EXP_CHARSET_CHOICE) Add logic for ASSUMED_DOC_CHARSET_CHOICE and DISPLAY_CHARSET_CHOICE in lynx.cfg, allowing user to configure a subset of the compiled-in charsets for normal use. --enable-cjk (define CJK_EX) Add experimental logic for supporting CJK documents. (This is not necessary for CJK support and may go away in a future release.) --enable-color-style (define USE_COLOR_STYLE) Use this option to enable optional and *experimental* color style. This is implemented for curses (if it supports color), ncurses and PDCurses, but not slang. --enable-debug (The symbol DEBUG is always defined.) Use this option to compile-in support for debugging. Note that this flag is ignored if the CFLAGS environment variable is set, in that case "-g" (or whatever) has to be included in the CFLAGS value to get debugging. Autoconf normally adds -g and -O options to CFLAGS if CFLAGS was not set, and if the compiler supports those options. --enable-default-colors (define USE_DEFAULT_COLORS) Enable use of default-color background (ncurses/slang). Either configuration supports the use of 'default' for colors even without this option. That is, 'default' is interpreted as white (foreground) or black (background) according to the context. When the default colors configuration is built, the actual values for foreground and background colors are determined by the terminal. --enable-exec-links (define EXEC_LINKS) Allows lynx to execute programs by accessing a link. --enable-exec-scripts (define EXEC_SCRIPTS) Allows lynx to execute programs inferred from a link. --enable-externs (define USE_EXTERNALS) Use this option to enable external application support. (See lynx.cfg.) --enable-find-leaks (define LY_FIND_LEAKS) Use this option to compile-in logic for testing memory leaks. --enable-font-switch (define EXP_CHARTRANS_AUTOSWITCH) Allow Lynx to automatically change the Linux console state (switch fonts) according to the current Display Character Set. (Linux console only. *Use with discretion.* See docs/README.chartrans.) --enable-gzip-help Install the lynx help files in gzip'd format [*.gz] to save space. --enable-htmlized-cfg generate an HTMLized copy of lynx.cfg which will be installed with the other help files. --enable-ipv6 (define ENABLE_IPV6) use experimental IPV6 (with IPV4) logic. --enable-justify-elts (define EXP_JUSTIFY_ELTS) use experimental element-justification logic. --enable-internal-links (prevent defining DONT_TRACK_INTERNAL_LINKS) With `internal links' (links within a document to a location within the same document) enabled, Lynx will distinguish between, for example, `' and `' within a document whose URL is `foo'. It may handle such links differently, although practical differences would appear only if the document containing them resulted from a POST request or had a no-cache flag set. This feature attempts to interpret URL-references as suggested by RFC 2396, and to prevent mistaken resubmissions of form content with the POST method. An alternate opinion asserts that the feature could actually result in inappropriate resubmission of form content. --enable-kbd-layout (define EXP_KEYBOARD_LAYOUT) Disabled by default, this option allows you to use translation tables on the input keystrokes. Current tables include ROT13'd keyboard layout JCUKEN Cyrillic, for AT 101-key kbd YAWERTY Cyrillic, for DEC LK201 kbd --enable-libjs (define EXP_LIBJS) Disabled by default; used for ifdef'ing JavaScript interface. Currently dummy: no JavaScript support implemented in Lynx yet. --enable-locale-charset (define EXP_LOCALE_CHARSET) Use nl_langinfo(CODESET) to determine initial value for display charset, overrides character_set value in .lynxrc file. --enable-nested-tables Extends TRST to format nested tables, as well as be smarter about
and

tags in table cells. --enable-nls (several definitions) use Native Language Support (i.e., gettext). --enable-nsl-fork (define NSL_FORK) Disabled by default, this allows interruption of NSL requests, so that `z' will stop the `look-up' phase of a connection. --enable-scrollbar (define USE_SCROLLBAR) Compile-in experimental support for scrollbar on the right-margin of the screen. If you configure with ncurses, this works with the mouse on xterm, etc. --enable-syslog (define SYSLOG_REQUESTED_URLS) Use this option to log NSL requests via syslog(). --enable-underlines (define UNDERLINE_LINKS) Use this option to underline links rather than using boldface. --enable-vertrace (define LY_TRACELINE) Turn on code that prefixes trace output lines with source filename and line number. --enable-warnings Use this option to turn on GCC compiler warnings. --libdir (affect LYNX_CFG_FILE) Defines the location where you want the lynx.cfg file installed. The configure script defines the symbol LYNX_CFG_FILE to correspond with the $libdir environment variable. (For platforms which do not support a configure script, such as MS-DOS, Win32 and VMS, you must edit userdefs.h if you wish to specify the location of lynx.cfg). --with-charsets=list (define ALL_CHARSETS) Limit the number of charsets that are compiled-in to the specified list of comma-separated MIME names. --with-curses-dir Specify directory under which curses/ncurses is installed. This assumes a standard install, e.g., with an include and lib subdirectory. --with-dbmalloc use Conor Cahill's dbmalloc library --with-dmalloc use Gray Watson's dmalloc library --with-gnutls[=XXX] (define USE_SSL) Use this option to configure with the GNU TLS library. See docs/README.ssl for additional information. The optional value XXX specifies the directory in which the library can be found, and may be either the path of the "lib" directory, or one level above. In either case, the corresponding header files are assumed to be in the parallel "include" directory. The default is /usr/local/gnutls. --with-included-gettext not supported in this package. The configure script uses macros which are bundled together with more useful features. See the "--enable-nls" option. --with-libiconv-prefix=DIR search for libiconv in DIR/include and DIR/lib --with-nls-datadir=DIR Use this option to override the configure script's NLS data directory, under which the locale (i.e., language) files are installed. The default value is derived at configure time, and depends on whether GNU or native gettext is used. --with-screen=XXX Use this option to select the screen type. The option value, XXX must be one of curses (the default), ncurses, ncursesw, pdcurses or slang. Specifying a screen type causes the configure script to look in standard locations for the associated header and library files, unless you have preset the $CFLAGS and $LIBS variables. --with-screen=ncursesw (define NCURSES, WIDEC_CURSES) --with-screen=ncurses (define NCURSES) --with-screen=pdcurses (define PDCURSES) --with-screen=slang (define USE_SLANG) Note that some systems may have a default curses library which does not support color, while on others, ncurses is installed as the curses library. The variant ncursesw is the wide-character version of ncurses. The pdcurses selection supported by the configure script is a UNIX-only library which uses X11. If you are configuring with DJGPP, the likely choice is "curses", since that is how PDCurses is normally installed. --with-socks[=XXX] (define SOCKS) Use this option to configure with the socks library. The optional value XXX specifies the directory in which the library can be found, and may be either the path of the "lib" directory, or one level above. In either case, the corresponding header files are assumed to be in the parallel "include" directory. --with-socks5[=XXX] (define USE_SOCKS5, SOCKS) Use this option to configure with the socks5 library. The optional value XXX specifies the directory in which the library can be found, and may be either the path of the "lib" directory, or one level above. In either case, the corresponding header files are assumed to be in the parallel "include" directory. If you make a SOCKSified lynx, you may have trouble accessing FTP servers. Also, instead of SOCKSifying lynx for use behind a firewall, you are better off if you make it normally, and set it up to use a proxy server. You can SOCKSify the proxy server, and it will handle all clients, not just Lynx. If your SOCKS server was compiled to use the short version of Rbind, also include -DSHORTENED_RBIND in your SITE_LYDEFS and SITE_DEFS. If you do SOCKSify lynx, you can turn off SOCKS proxy usage via a -nosocks command line switch. --with-ssl[=XXX] (define USE_SSL) Use this option to configure with the OpenSSL library, or SSLeay. See docs/README.ssl for additional information. The optional value XXX specifies the directory in which the library can be found, and may be either the path of the "lib" directory, or one level above. In either case, the corresponding header files are assumed to be in the parallel "include" directory. --with-bzlib (define USE_BZLIB) Use libbz2 for decompression of some bzip2 files. --with-zlib (define USE_ZLIB) Use zlib for decompression of some gzip files. 1d. Environment variables The configure script looks for programs and libraries in known/standard locations. You can override the behavior of the script by presetting environment variables. If they are set, the script will try to use these values rather than computing new ones. Useful variables include: CC - the C compiler. If you do not override this, configure will try to use gcc. For instance, setting CC=cc and exporting this value will cause configure to use cc instead. CFLAGS - the C compiler options. These also include C preprocessor options (such as -I), since the $CFLAGS and $CPPFLAGS variables are maintained separately. CPPFLAGS - the C preprocessor options. For some configuration tests, you may need to set both $CFLAGS and $CPPFLAGS if you are compiling against header files in nonstandard locations. LDFLAGS - linker/loader options. LIBS - the libraries to be linked, with -L and -l options. If you are linking against libraries in nonstandard locations unrelated to the install prefix (that you can specify in the configure script) you may have to specify these via the $LIBS variable. Lynx has compiled-in the pathnames of various programs which it executes. Normally the full pathnames are given, rather than the program name alone. These may be preset in the environment by the capitalized version, e.g., INSTALL for "install". The corresponding internal definitions are suffixed "_PATH", e.g., "INSTALL_PATH". -- 1997/7/27 - T. Dickey 1e. Examples If you are compiling Lynx for your personal use and are restricted to your home directory, a simple method for building would be to choose some directory, say ".lynx", and then type: ./configure --prefix=~/.lynx --exec-prefix=~/.lynx and make install Now you only need to add "~/.lynx/bin" to your PATH and edit "~/.lynx/lib/ lynx.cfg" as described above. I personally use the following csh shell script to set environment variables and configure options rather than type them each time. #!/bin/csh -f setenv CPPFLAGS "-I$HOME/slang -I$HOME/.usr/include" setenv LIBS "-L$HOME/.slang/lib -L$HOME/.usr/lib" ./configure --exec-prefix=$HOME --bindir=$HOME/.lynx \ --mandir=$HOME/.usr/man --libdir=$HOME/.usr/lib \ --with-screen=slang --with-zlib CPPFLAGS in this example defines the full path to the slang and zlib header files, which are not kept in standard directories. Likewise, LIBS defines the nonstandard locations of libslang.a and libz.a. Setting the option --bindir tells the configure script where I want to install the lynx binary; setting --mandir tells it where to put the lynx.1 man page, and setting --libdir tells it (while at the same time defining LYNX_CFG_FILE) where to put the configuration file "lynx.cfg", when I type "make install". The --with-screen=slang and --with-zlib options are explained above. 2. Wais support (optional) To add direct WAIS support, get the freeWAIS distribution from "ftp://ftp.cnidr.org/pub/NIDR.tools/freewais", and compile it. The compile process will create the libraries you will need, wais.a and client.a. Edit the Makefile in the top level directory and add the library locations under the DIRECT WAIS ACCESS heading. Edit the Makefile for the WWW Library in "WWW/Library/Implementation/makefile" to point to the include directory for the freewais distribution. Precompiled libraries are available for many platforms if you don't wish to compile one yourself. III. Compile instructions -- VMS Step 1. Downloading binary files. Lynx must handle all IO as streams, and on VMS, output files are always created with Stream_LF format via the C RTL's fopen(). The file headers indicate Implied Carriage Control, even when the transfer was in binary mode, which can confuse downloading software and cause corruption of the file contents. To deal with this, you should define the symbol USE_FIXED_RECORDS as TRUE in userdefs.h and/or lynx.cfg. This will instruct Lynx to correct the header information to indicate FIXED 512 records, with No Implied Carriage Control. If Lynx fails to do the conversion (because the file wasn't mapped to a binary MIME type) you can execute FIXED512.COM externally to correct the header information. The command file uses Joe Meadow's FILE utility, or the SET FILE/ATTRIBUTES command on current versions of VMS, to modify the headers. See the comments in FIXED512.COM, userdefs.h and lynx.cfg for more information. Step 2. Passive FTP If your system requires the PASV FTP code instead of the standard PORT FTP code (e.g., to deal with a firewall) then set the FTP_PASSIVE option in lynx.cfg Step 3a. Lynx uses the VMS port of gzip for uncompressing streams which have Content-Encoding headers indicated compression with gzip or the Unix compress. If you do not have gzip installed on your system you can get it from "ftp://ftp.wku.edu/" in the fileserv directory. The command Lynx uses to uncompress on VMS is "gzip -d". If you are using the SOCKETSHR library, read SOCKETSHR.announce and make sure you have defined SOCKETSHR and SOCKETSHR_LIBRARY as explained therein. A "build.com" and "build-slang.com" script for building Lynx with curses or slang is in the top level directory. All you have to do is type "@build" or "@build-slang" and answer its prompt for your system's TCP-IP software. Current choices are: MULTINET (default) UCX WIN_TCP CMU_TCP SOCKETSHR_TCP TCPWARE It will autosense whether you have VAXC, DECC or GNUC on VAX or AXP and build appropriately. If a WWWLib already exists for that TCP-IP software, it will prompt you for whether you want to rebuild it. If you want to build a WWWLib separately, you can type "@libmake.com" with your default directory set to [.WWW.Library.vms] instead doing it via "build.com" in the top directory. You may need to modify "build-slang.com", as described in its header, so that it can find slang.olb on your system. If you have both DECC and VAXC, it will use DECC to benefit from the newer and more efficient memory management functions. Step 3b. (optional compilation method) If you have and want to use MMS, read the header of descrip.mms in the top directory and be sure you include the appropriate macro definitions when you invoke it: $ MMS /Macro = (MULTINET=1) for VAXC - MultiNet $ MMS /Macro = (WIN_TCP=1) for VAXC - Wollongong TCP/IP $ MMS /Macro = (UCX=1) for VAXC - UCX $ MMS /Macro = (CMU_TCP=1) for VAXC - OpenCMU TCP/IP $ MMS /Macro = (SOCKETSHR_TCP=1) for VAXC - SOCKETSHR/NETLIB $ MMS /Macro = (TCPWARE=1) for VAXC - TCPWare TCP/IP $ MMS /Macro = (MULTINET=1, DEC_C=1) for DECC - MultiNet $ MMS /Macro = (WIN_TCP=1, DEC_C=1) for DECC - Wollongong TCP/IP $ MMS /Macro = (UCX=1, DEC_C=1) for DECC - UCX $ MMS /Macro = (CMU_TCP=1, DEC_C=1) for DECC - OpenCMU TCP/IP $ MMS /Macro = (SOCKETSHR_TCP=1,DEC_C=1) for DECC - SOCKETSHR/NETLIB $ MMS /Macro = (TCPWARE=1, DEC_C=1) for DECC - TCPWare TCP/IP $ MMS /Macro = (MULTINET=1, GNU_C=1) for GNUC - MultiNet $ MMS /Macro = (WIN_TCP=1, GNU_C=1) for GNUC - Wollongong TCP/IP $ MMS /Macro = (UCX=1, GNU_C=1) for GNUC - UCX $ MMS /Macro = (CMU_TCP=1, GNU_C=1) for GNUC - OpenCMU TCP/IP $ MMS /Macro = (SOCKETSHR_TCP=1,GNU_C=1) for GNUC - SOCKETSHR/NETLIB $ MMS /Macro = (TCPWARE=1, GNU_C=1) for GNUC - TCPWare TCP/IP If you just type "MMS" it will default to the MULTINET and VAXC configuration. MMS will build the WWW library and Lynx sources, and link the executable. However, not all of the header dependencies are specified. If you are not a developer, and need a clean build, you should use build.com instead of the MMS utility. If you want SOCKS support on VMS, you must add SOCKS as a compilation definition, and the SOCKS library to the link command. However, instead of SOCKSifying Lynx for use behind a firewall, you are better off if you build Lynx normally, and set up Lynx to use a proxy server (see below). You instead can SOCKSify the proxy server, and it will handle all clients, not just Lynx. IV. Compile instructions -- Win32 (Windows95/98/NT) Borland C: The original Win32 port was built with Borland C++ 4.52, but later versions reportedly can be used. Before compiling the Lynx sources, you need a curses library, and it is recommended that you have the zlib library. Get pdcurses2.3 from "http://www.lightlink.com/hessling/". I have modified it so that mouse support is no longer broken for Lynx (see "http://www.fdisk.com/doslynx/"). You will want to get zlib from "http://www.gzip.org/zlib/ ". Compile these libraries, and put them in a convenient place (pdcurses inside the Lynx directory). Unpack the latest Lynx source distribution, and make an obj directory under the source root to contain the compile output. Copy in your IDE file. A sample IDE file and helper libraries are available at "http://www.fdisk.com/doslynx/wlynx/source/". First build the .h files in src\chrtrans using "makew32.bat". Double check for new .tbl files; hand edit in any new ones, and then do "makew32". Jump into Borland C++, load the project (IDE file) and compile Lynx. Alternately, after compiling the chartrans tables, you can come back to the top directory and compile manually, i.e., do "make -f makefile.bcb". I also have a binary available at "http://www.fdisk.com/doslynx/". This binary was compiled with pdcurses 2.3, hacked so win32 mouse support works, and with zlib, so Lynx can do gzip routines internally. More hints and information can be found in "http://www.fdisk.com/doslynx/lynxport.htm". -- 1997/10/12 - W. Buttles Cygwin: It is possible to compile under the cygwin system, which will allow you to use the configure script described above for Unix. Type, for example, "./configure --with-screen=ncurses --with-libz" in a Dos window running the cygwin bash$ shell. You also have the choice of using either pdcurses or slang. You will need a launch program such as sh.exe to call helper applications. Paths may need to be in cygwin style, rather than Windows style (e.g., TMPDIR=/cygdrive/d/cygwin/tmp, rather than TMPDIR=d:\cygwin\tmp). Visual C++: You must have compiled zlib and PDCurses with the -MT (threaded code) option. This is not the default with zlib (see Makefile.msc). Copy into lib the following zconf.h zlib.h zlib.lib from the zlib build-tree, and curses.h pdcurses.lib from the PDCurses build-tree. Then make-msc to build lynx. V. Compile instructions -- 386 DOS Compiling for DOS with DJGPP has traditionally been a multistep procedure. Now, if you have a full installation of DJGPP you can also install using the configure script, just as in the UNIX section. This needs to be done under a BASH shell. Use a shell script to run configure as in the example at the end of this section. Otherwise you can follow the below instructions. The multistep procedure for DOS may not be supported in the future and use of the configure script is recommended. The information about required libraries and unpacking applies to both methods of compiling. First install the C compiler and its libraries (see readme.1st from DJGPP distribution). Originally, lynx makefiles come with the initial -O2 optimization level. If you experience compilation process too slow due to paging to the disk (DPMI server provide virtual memory, when in lack of RAM), you may change optimization to -O1 or turn the optimization off entirely. If using optimization level -O2 or -O3 with older versions of DJGPP and GCC, you may need to "stubedit" your "cc1.exe" file to enlarge compiler stack size. For instance, if using DJGPP 2.02 and GCC 2.8.1, to compile with -O3 optimization, the stub needs to be edited to give a larger stack. To do this go into djgpp\lib\gcc-lib\djgpp\2.81 and either type the command: "stubedit cc1.exe bufsize=63k minstack=2M", or edit interactively with: "stubedit cc1.exe". Current versions of DJGPP and GCC generally work with the standard stack. Unpack the source code using a DOS program like UNZIP386. If you are using PKUNZIP to unpack the .zip archive, you must use the -d command line switch to restore the directory structure contained in the archive, i.e., do "pkunzip -d lynx-cur.zip". No switch is required if you use unzip386 or unzip. If you are trying to compile the 386DOS port under a WinNT DOS shell, be sure to unpack the source with a DOS program so that all directories will be adjusted to the DOS 8.3 file format necessary for compiling with DJGPP. Do NOT use Winzip, because that will create long filenames that will not be recognized by DJGPP tools. If you wish to compile with "USE_ZLIB" (recommended), you must have the zlib library. Get the source from http://www.gzip.org/zlib/ and compile it. Put libz.a in the lib subdirectory of DJGPP, and put zlib.h and zconf.h in the include subdirectory. In addition to the files in the Lynx distribution, you will need a curses package and a TCP package. You can use PDCurses (available at "http://pdcurses.sourceforge.net/") and the DJGPP port of WATTCP. The updated version of WATTCP is known as WATT-32, and is available at "http://www.bgnett.no/~giva/". You can also use slang (available at "http://www.s-lang.org/") as your screen library. You must compile these before you go any further. If you wish to use PDCurses 2.6, you need to first apply the following patch: --- dos/gccdos.mak.ori 2002-01-11 20:11:18.000000000 -0800 +++ dos/gccdos.mak 2003-12-13 21:29:28.000000000 -0800 @@ -40,11 +40,11 @@ CFLAGS = -c -g -Wall -DPDCDEBUG LDFLAGS = -g else - CFLAGS = -c -O -Wall + CFLAGS = -c -O2 -Wall LDFLAGS = endif -CPPFLAGS = -I$(PDCURSES_HOME) -I$(CCINCDIR) -D_NAIVE_DOS_REGS +CPPFLAGS = -I$(PDCURSES_HOME) -I$(CCINCDIR) -D_NAIVE_DOS_REGS -DHAVE_STRING_H CCFLAGS = $(CFLAGS) $(CPPFLAGS) @@ -64,10 +64,10 @@ all: $(PDCLIBS) $(DEMOS) clean: -del *.o - -del curses.lib - -del panel.lib + -del pdcurses.a + -del panel.a demos: $(DEMOS) @@ -287,33 +287,27 @@ #------------------------------------------------------------------------ firework.exe: firework.o $(LIBCURSES) - $(LINK) $(LDFLAGS) -o firework firework.o $(LIBCURSES) - $(COFF2EXE) firework + $(LINK) $(LDFLAGS) -o firework.exe firework.o $(LIBCURSES) strip $@ newdemo.exe: newdemo.o $(LIBCURSES) - $(LINK) $(LDFLAGS) -o newdemo newdemo.o $(LIBCURSES) - $(COFF2EXE) newdemo + $(LINK) $(LDFLAGS) -o newdemo.exe newdemo.o $(LIBCURSES) strip $@ ptest.exe: ptest.o $(LIBCURSES) $(LIBPANEL) - $(LINK) $(LDFLAGS) -o ptest ptest.o $(LIBCURSES) $(LIBPANEL) - $(COFF2EXE) ptest + $(LINK) $(LDFLAGS) -o ptest.exe ptest.o $(LIBCURSES) $(LIBPANEL) strip $@ testcurs.exe: testcurs.o $(LIBCURSES) - $(LINK) $(LDFLAGS) -o testcurs testcurs.o $(LIBCURSES) - $(COFF2EXE) testcurs + $(LINK) $(LDFLAGS) -o testcurs.exe testcurs.o $(LIBCURSES) strip $@ tuidemo.exe: tuidemo.o tui.o $(LIBCURSES) - $(LINK) $(LDFLAGS) -o tuidemo tuidemo.o tui.o $(LIBCURSES) - $(COFF2EXE) tuidemo + $(LINK) $(LDFLAGS) -o tuidemo.exe tuidemo.o tui.o $(LIBCURSES) strip $@ xmas.exe: xmas.o $(LIBCURSES) - $(LINK) $(LDFLAGS) -o xmas xmas.o $(LIBCURSES) - $(COFF2EXE) xmas + $(LINK) $(LDFLAGS) -o xmas.exe xmas.o $(LIBCURSES) strip $@ --- dos/pdckbd.c.ori 2002-09-01 00:13:30.000000000 -0800 +++ dos/pdckbd.c 2004-01-19 20:30:02.000000000 -0800 @@ -362,7 +362,7 @@ return ((int) (0xb8 << 8)); if (ascii == 0xe0 && scan == 0x53 && pdc_key_modifiers & PDC_KEY_MODIFIER_SHIFT) /* Shift Del */ return ((int) (0xb9 << 8)); - if (ascii == 0x00 || ascii == 0xe0) + if (ascii == 0x00 || (ascii == 0xe0 && scan != 0x00)) return ((int) (scan << 8)); return ((int) (ascii)); } @@ -522,7 +522,7 @@ _watch_breaks(); #else # ifdef GO32 - (void*)signal(SIGINT,(setting ? SIG_DFL : SIG_IGN)); +/* (void*)signal(SIGINT,(setting ? SIG_DFL : SIG_IGN)); */ /* __djgpp_set_ctrl_c(setting);*/ setcbrk(setting); # else --- pdcurses/kernel.c.ori 2002-11-27 03:24:32.000000000 -0800 +++ pdcurses/kernel.c 2003-12-13 21:22:38.000000000 -0800 @@ -27,6 +27,10 @@ #include #endif +#ifdef HAVE_STRING_H +#include +#endif + #ifdef UNIX #include #include --- pdcurses/pdcutil.c.ori 2001-01-10 00:27:22.000000000 -0800 +++ pdcurses/pdcutil.c 2003-12-13 21:24:58.000000000 -0800 @@ -49,7 +49,7 @@ # include #endif -#ifdef STDC_HEADERS +#if defined(STDC_HEADERS) || defined(HAVE_STRING_H) # include #endif --- pdcurses/pdcwin.c.ori 2002-05-25 17:13:32.000000000 -0800 +++ pdcurses/pdcwin.c 2003-12-13 21:26:02.000000000 -0800 @@ -27,6 +27,10 @@ # include #endif +#ifdef HAVE_STRING_H +#include +#endif + #ifndef HAVE_MEMMOVE # define memmove PDC_memmove #endif If you wish to compile with SSL enabled, you need to get and compile OpenSSL. The DJGPP port has been successfully compiled with the 0.9.7 stable series of OpenSSL. DJGPP can compile OpenSSL from the standard source distribution (http://www.openssl.org/). See the file "INSTALL.DJGPP" in the OpenSSL distribution. If you have trouble applying the patches, try using the "patch" program, ("http://www.delorie.com/pub/djgpp/current/v2gnu/pat253b.zip"). To read the Unix man style documentation, use, for example, "less" ("http://www.delorie.com/pub/djgpp/current/v2gnu/lss374b.zip"). Compile or place your compiled PDCurses library in /djgpp/pdcur26, and compile or place your compiled WATT-32 library in /djgpp/watt32. If using the SLANG library, put libslang.a in your DJGPP/lib directory and put slang.h and slcurses.h in your DJGPP/include directory, or in the appropriate directories specified by LIBRARY_PATH and INCLUDE_PATH in your DJGPP.ENV file. Move to the "lynx2-*/WWW/Library/djgpp" directory. If compiling with PDCurses, do "make". If using SLANG, do "make -f makefile.sla". This should compile libwww.a. Next move to the "lynx2-*/src/chrtrans" directory and do "make -f makefile.dos" to compile the character tables. Then move to the "lynx2-*/src" directory. There are three choices for compiling at this point. You can do "make -f makefile.dos" to compile with PDCurses, "make -f makefile.wsl" to compile with SLANG, or "make -f makefile.dsl" to compile with SLANG and the DJGPP keyhandler. At the time of this writing, it is not clear what the advantages and disadvantages of each version are. The PDCurses version has the most experience and allows remapping of ALT and Function keys. The SLANG version seems to have better screen handling. It allows mapping of function keys, but not ALT keys. The SLANG with DJGPP keyhandler allows mapping of ALT and Function keys, but has the risk of incompatibilities from mixing different programs. If you wish to compile with support for internationalization of messages, you first need to install the DOS ports of the GNU gettext and libiconv packages, available from any DJGPP mirror site. Then uncomment the lines for INTLFLAGS in src/makefile.dsl and in WWW/Library/djgpp/makefile.sla, and remove the "#" from the LIBS line in src/makefile.dsl. Make similar changes if using one of the other DOS makefiles. See the gettext documentation for information on creating and using message files for different languages. If all goes well, you will have a lynx.exe file. If you have trouble, check to be sure djgpp.env is the way it came in the original package. To test Lynx_386 you must have a packet driver installed. The simplest method is to use a null packet driver that just allows Lynx to start up, but doesn't do anything else. One such executable driver has been posted, uuencoded, to the lynx-dev mailing list: "http://www.flora.org/lynx-dev/html/month011998/msg00057.html". Start the dummy packet driver with "nullpkt 0x60", and take it out of memory with "nullpkt -u". You can also use slip8250.com. See the CRYNWR package "ftp://ftp.simtel.net/pub/simtelnet/msdos/pktdrvr/pktd11.zip". Usage is "slip8250 0x60", but you may have to invoke it as, for example, "slip8250 0x60 6 3 0x2F8" so that it uses COM2 and IRQ 3, in order to avoid an IRQ conflict with a mouse or some other device. Another packet driver is slipper.exe, which is available from many sites, including "ftp://ftp.trumpet.com.au/slipper". To remove it from memory use termin.com (usage "termin 0x60"), available in the CRYNWR package. To connect over a dialup PPP connection you need dosppp or klos' pppshare. (Find at: "http://www.ibiblio.org/pub/micro/pc-stuff/freedos/files/net/dosppp/dosppp06.zip" "http://www.ncf.carleton.ca/ncf/pda/computer/dos/net/dosppp06.zip" "http://mvmpc200.ciw.uni-karlsruhe.de/~mvmpc9/user/TONI/dosppp/dosppp06.zip" "ftp://ftp.oldskool.org/pub/tvdog/internet/dosppp06.zip"; "ftp://ftp.klos.com/pub/demo/pppshare.exe") File access looks like this: file:///c:/ file:///c:/dos file:///c:/dos/command.com file://localhost/c:/ file://localhost/c:/dos file://localhost/c:/dos/command.com See "http://www.fdisk.com/doslynx/lynxport.htm" for more hints and some precompiled libraries. One problem you can encounter is editing userdefs.h and lynx.cfg, which have unix-style end of lines. You would be well advised to use an editor that can handle end of lines terminated with a single LF character. You can also unpack the source code using unzip386 or unzip with the -a or -aa switch to convert unix LF to dos CRLF. That will make texts more readable under DOS. If you compile lynx regularly, you may automate the procedure by creating a batch file such as the following. cd djgpp\watt32\src configur djgpp make -f djgpp.mak cd ..\..\..\www\library\djgpp make cd ..\..\..\src\chrtrans make -f makefile.dos cd ..\..\src make -f makefile.dos strip lynx.exe cd .. This batch file expects the DJGPP port of WATT-32 to be installed in the lynx2-* directory. Place a copy of this batch file, named "djgpp.bat", in the lynx2-* directory, move to that directory and type "djgpp". A more complete batch file with error checking and annotation can be found at: "http://www.flora.org/lynx-dev/html/month111997/msg00250.html". If you use the configure method, remember that if you configure with the option "--enable-nls", you also need to set LIBS="-liconv". A sample shell script to run configure using PDCurses follows. If you compile to use SLANG, note that the DJGPP keyhandler will be used instead of the SLANG keyhandler unless you define "NO_DJ_KEYHANDLER". #!/bin/sh CFLAGS="-O2 -I/djgpp/pdcur26 -I/djgpp/watt32/inc" \ LIBS="-L/djgpp/pdcur26/lib -L/djgpp/watt32/lib -liconv" \ ./configure --prefix=d:/djgpp/lynx-rel/lynx-cnf \ --with-screen=curses \ --disable-full-paths \ --enable-addrlist-page \ --enable-change-exec \ --enable-cgi-links \ --enable-charset-choice \ --enable-color-style \ --enable-exec-links \ --enable-externs \ --enable-file-upload \ --enable-nested-tables \ --enable-nls \ --libdir=d:/djgpp/lynx-rel/lynx-cnf \ --with-bzlib \ --with-zlib \ --with-ssl -- 1997/9/29 - D. Kaufman -- 1997/10/3 - B. Schiavo -- Last update - 2004/01/19 VI. General installation instructions Once you have compiled Lynx, test it out first on a local file. Be sure Lynx can find lynx.cfg. A _sample_ test command line would be: 'lynx -cfg=/usr/local/lib/lynx.cfg .'. Once you are satisfied that Lynx works, go ahead and install it. For Unix, type "make install". For VMS, you need to have the executable in a public place, make it accessible, define it as a foreign command, and copy lynx.cfg to "Lynx_Dir". Look at lynx.com in the samples directory as a model for installing Lynx. To include lynx.hlp in the system HELP library, use the command: "$ library/replace sys$help:helplib.hlb lynx.hlp". Local copies of the Lynx online help should be made accessible in response to the Lynx 'h'elp command by defining HELPFILE in userdefs.h and/or lynx.cfg to an appropriate file://localhost/path URL. On Unix, all you need to do is type "make install-help." If you are installing manually, copy the files "COPYHEADER" and "COPYING" into the lynx_help directory BEFORE moving the lynx_help tree to its final location. These files are referenced hypertextually from help documents. If you have old, pre-existing bookmark files from earlier versions of Lynx, those files may have to be updated. Conversion may just consist of adding one META line near the top, or may require creating new book- mark files and editing in bookmarks from outdated files. IMPORTANT! Be sure you have read the warnings about setting up an anonymous account with Lynx if you plan to give public access to Lynx. After applying patches or editing files to correct for an unsuccessful build, be certain to do a "make clean" (or "make distclean" for those using auto-configure) before attempting to compile again. VII. Setting environment variables before running Lynx (optional) 1. All ports The Lynx Users Guide describes all of the environment variables used by Lynx. This should be checked later along with reading lynx.cfg after you have installed Lynx. 2. Win32 (95/98/NT) and 386 DOS These ports cannot start before setting certain environment variables. Here are some environment variables that should be set, usually in a batch file that runs the lynx executable. Make sure that you have enough room left in your environment. You may need to change your "SHELL=" setting in config.sys. In addition, lynx looks for a "SHELL" environment variable when shelling to DOS. If you wish to preserve the environment space when shelling, put a line like this in your AUTOEXEC.BAT file also "SET SHELL=C:\COMMAND.COM /E:4096". It should match CONFIG.SYS. HOME Where to keep the bookmark file and personal config files. TEMP or TMP Bookmarks are kept here with no HOME. Temp files here. USER Set to your login name (optional) LYNX_CFG Set to the full path and filename for lynx.cfg LYNX_LSS Set to the full path and filename for lynx.lss LYNX_SAVE_SPACE The (modifiable) location for downloaded file storage. SSL_CERT_FILE Set to the full path and filename for your file of trusted certificates 386 version only: WATTCP.CFG Set to the full path for the WATTCP.CFG directory RL_CLCOPY_CMD Command to copy a URL to a "clipboard" file RL_PASTE_CMD Command to go to a URL in your "clipboard" file Define these in your batch file for running Lynx. For example, if your application line is "D:\win32\lynx.bat", lynx.bat for Win32 may look like: @ECHO OFF set home=d:\win32 set temp=d:\tmp set lynx_cfg=d:\win32\lynx.cfg set lynx_save_space=d:\download d:\win32\lynx.exe %1 %2 %3 %4 %5 For lynx_386, a typical batch file might look like: @echo off set HOME=f:/lynx2-8 set USER=your_login_name set LYNX_CFG=%HOME%/lynx.cfg set WATTCP.CFG=%HOME% f:\lynx2-8\lynx %1 %2 %3 %4 %5 %6 %7 %8 %9 You need to make sure that the WATTCP.CFG file has the correct information for IP number, Gateway, Netmask, and Domain Name Server. This can also be automated in the batch file. Adapted from "readme.txt" by Wayne Buttles and "readme.dos" by Doug Kaufman. VIII. Acknowledgment Thanks to the many volunteers who offered suggestions for making this installation manual as accurate and complete as possible. -- 1999/04/24 - H. Nelson