INSTALL for Lua 5.1

* Building Lua
  ------------
  Lua is built in the src directory, but the build process can be
  controlled from the top-level Makefile.

  Building Lua on Unix systems should be very easy. First do "make" and
  see if your platform is listed. If so, just do "make xxx", where xxx
  is your platform name. The platforms currently supported are:
    aix ansi bsd freebsd generic linux macosx mingw posix solaris

  If your platform is not listed, try the closest one or posix, generic,
  ansi, in this order.

  See below for customization instructions and for instructions on how
  to build with other Windows compilers.

  If you want to check that Lua has been built correctly, do "make test"
  after building Lua. Also, have a look at the example programs in test.

* Installing Lua
  --------------
  Once you have built Lua, you may want to install it in an official
  place in your system. In this case, do "make install". The official
  place and the way to install files are defined in Makefile. You must
  have the right permissions to install files.

  If you want to build and install Lua in one step, do "make xxx install",
  where xxx is your platform name.

  If you want to install Lua locally, then do "make local". This will
  create directories bin, include, lib, man, and install Lua there as
  follows:

    bin:	lua luac
    include:	lua.h luaconf.h lualib.h lauxlib.h lua.hpp
    lib:	liblua.a
    man/man1:	lua.1 luac.1

  These are the only directories you need for development.

  There are man pages for lua and luac, in both nroff and html, and a
  reference manual in html in doc, some sample code in test, and some
  useful stuff in etc. You don't need these directories for development.

  If you want to install Lua locally, but in some other directory, do
  "make install INSTALL_TOP=xxx", where xxx is your chosen directory.

  See below for instructions for Windows and other systems.

* Customization
  -------------
  Three things can be customized by editing a file:
    - Where and how to install Lua -- edit Makefile.
    - How to build Lua -- edit src/Makefile.
    - Lua features -- edit src/luaconf.h.

  You don't actually need to edit the Makefiles because you may set the
  relevant variables when invoking make.

  On the other hand, if you need to select some Lua features, you'll need
  to edit src/luaconf.h. The edited file will be the one installed, and
  it will be used by any Lua clients that you build, to ensure consistency.

  We strongly recommend that you enable dynamic loading. This is done
  automatically for all platforms listed above that have this feature
  (and also Windows). See src/luaconf.h and also src/Makefile.

* Building Lua on Windows and other systems
  -----------------------------------------
  If you're not using the usual Unix tools, then the instructions for
  building Lua depend on the compiler you use. You'll need to create
  projects (or whatever your compiler uses) for building the library,
  the interpreter, and the compiler, as follows:

  library:	lapi.c lcode.c ldebug.c ldo.c ldump.c lfunc.c lgc.c llex.c
		lmem.c lobject.c lopcodes.c lparser.c lstate.c lstring.c
		ltable.c ltm.c lundump.c lvm.c lzio.c
		lauxlib.c lbaselib.c ldblib.c liolib.c lmathlib.c loslib.c
		ltablib.c lstrlib.c loadlib.c linit.c

  interpreter:	library, lua.c

  compiler:	library, luac.c print.c

  If you use Visual Studio .NET, you can use etc/luavs.bat in its
  "Command Prompt".

  If all you want is to build the Lua interpreter, you may put all .c files
  in a single project, except for luac.c and print.c. Or just use etc/all.c.

  To use Lua as a library in your own programs, you'll need to know how to
  create and use libraries with your compiler.

  As mentioned above, you may edit luaconf.h to select some features before
  building Lua.

(end of INSTALL)
