=head1 NAME package - module support (standard library) =head1 OVERVIEW The package library provides basic facilities for loading and building modules in Lua. It exports two of its functions directly in the global environment: L and L. Everything else is exported in a table C. =head2 C module (name [, ...]) Creates a module. If there is a table in C, this table is the module. Otherwise, if there is a global table C with the given name, this table is the module. Otherwise creates a new table C and sets it as the value of the global C and the value of LC<[name]>. This function also initializes C with the given name, C with the module (C itself), and C with the package name (the full module name minus last component; see below). Finally, L sets C as the new environment of the current function and the new value of LC<[name]>, so that L returns C. If C is a compound name (that is, one with components separated by dots), L creates (or reuses, if they already exist) tables for each component. For instance, if C is C, then L stores the module table in field C of field C of global C. This function may receive optional I after the module name, where each option is a function to be applied over the module. =head2 C require (modname) Loads the given module. The function starts by looking into the table L to determine whether C is already loaded. If it is, then C returns the value stored at LC<[modname]>. Otherwise, it tries to find a I for the module. To find a loader, first L queries LC<[modname]>. If it has a value, this value (which should be a function) is the loader. Otherwise L searches for a Lua loader using the path stored in L. If that also fails, it searches for a C loader using the path stored in L. If that also fails, it tries an I loader (see below). When loading a C library, L first uses a dynamic link facility to link the application with the library. Then it tries to find a C function inside this library to be used as the loader. The name of this C function is the string "C" concatenated with a copy of the module name where each dot is replaced by an underscore. Moreover, if the module name has a hyphen, its prefix up to (and including) the first hyphen is removed. For instance, if the module name is C, the function name will be C. If L finds neither a Lua library nor a C library for a module, it calls the I. This loader searches the C path for a library for the root name of the given module. For instance, when requiring C, it will search for a C library for C. If found, it looks into it for an open function for the submodule; in our example, that would be C. With this facility, a package can pack several C submodules into one single library, with each submodule keeping its original open function. Once a loader is found, L calls the loader with a single argument, C. If the loader returns any value, C assigns it to LC<[modname]>. If the loader returns no value and has not assigned any value to LC<[modname]>, then L assigns C to this entry. In any case, L returns the final value of C. If there is any error loading or running the module, or if it cannot find any loader for the module, then L signals an error. =head2 C package.cpath The path used by C to search for a C loader. Lua initializes the C path C in the same way it initializes the Lua path L, using the environment variable C (plus another default path defined in C). =head2 C package.loaded A table used by L to control which modules are already loaded. When you require a module C and C is not false, L simply returns the value stored there. =head2 C package.loadlib (libname, funcname) Dynamically links the host program with the C library C. Inside this library, looks for a function C and returns this function as a C function. (So, C must follow the protocol (see C)). This is a low-level function. It completely bypasses the package and module system. Unlike L, it does not perform any path searching and does not automatically adds extensions. C must be the complete file name of the C library, including if necessary a path and extension. C must be the exact name exported by the C library (which may depend on the C compiler and linker used). This function is not supported by ANSI C. As such, it is only available on some platforms (Windows, Linux, Mac OS X, Solaris, BSD, plus other Unix systems that support the C standard). =head2 C package.path The path used by L to search for a Lua loader. At start-up, Lua initializes this variable with the value of the environment variable C or with a default path defined in C, if the environment variable is not defined. Any "C<;;>" in the value of the environment variable is replaced by the default path. A path is a sequence of I separated by semicolons. For each template, L will change each interrogation mark in the template by C, which is C with each dot replaced by a "directory separator" (such as "C" in Unix); then it will try to load the resulting file name. So, for instance, if the Lua path is "./?.lua;./?.lc;/usr/local/?/init.lua" the search for a Lua loader for module C will try to load the files C<./foo.lua>, C<./foo.lc>, and C, in that order. =head2 C package.preload A table to store loaders for specific modules (see L). =head2 C package.seeall (module) Sets a metatable for C with its C<__index> field referring to the global environment, so that this module inherits values from the global environment. To be used as an option to function C. =head1 VERSION This is Lua version 5.1.1. =head1 CREDITS Lua is developed at Lua.org, a laboratory of the Department of Computer Science of PUC-Rio (the Pontifical Catholic University of Rio de Janeiro in Brazil). For more information about the authors, see http://www.lua.org/authors.html . =head1 LICENSE Lua is licensed under the terms of the MIT license reproduced below. This means that Lua is free software and can be used for both academic and commercial purposes at absolutely no cost. For details and rationale, see http://www.lua.org/license.html . ~~~~~ Copyright (C) 1994-2006 Lua.org, PUC-Rio. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ~~~~~