--- lua-5.0.2.orig/doc/lua.1
+++ lua-5.0.2/doc/lua.1
@@ -152,6 +152,16 @@
 .TP
 .B \-v
 show version information.
+.TP
+.B \-C
+load the compatibility library into the interpreter. If you specify
+this, then you will also need to specify the
+.B \-i
+option in order to enter an interactive interpreter.
+.TP
+.B \-P
+suppress the creation of a standard LUA_PATH variable. Use this if
+you need to run scripts which conflict with system-installed libraries.
 .SH "SEE ALSO"
 .BR luac (1)
 .br
@@ -163,5 +173,11 @@
 L. H. de Figueiredo,
 and
 W. Celes
-(lua@tecgraf.puc-rio.br)
+.LP
+.BI <lua@tecgraf.puc-rio.br>
+.LP
+Debian modifications to the manpage by 
+Daniel Silverstone 
+.LP
+.BI <dsilvers@debian.org>
 .\" EOF
--- lua-5.0.2.orig/src/luac/Makefile
+++ lua-5.0.2/src/luac/Makefile
@@ -12,8 +12,8 @@
 
 all:	$T
 
-$T:	$(OBJS) $(LIB)/liblua.a $(LIB)/liblualib.a
-	$(CC) -o $@ $(MYLDFLAGS) $(OBJS) -L$(LIB) -llua -llualib $(EXTRA_LIBS) $(DLLIB)
+$T:	$(OBJS) $(LIB)/liblua.a $(LIB)/liblualib.a
+	$(CC) -o $@ $(MYLDFLAGS) $(OBJS) -L$(LIB) -llua -llualib $(EXTRA_LIBS)
 
 # print.c needs opcode names from lopcodes.c
 lopcodes.o:	../lopcodes.c ../lopcodes.h
--- lua-5.0.2.orig/src/lib/Makefile
+++ lua-5.0.2/src/lib/Makefile
@@ -9,16 +9,18 @@
 OBJS= lauxlib.o lbaselib.o ldblib.o liolib.o lmathlib.o ltablib.o lstrlib.o loadlib.o
 SRCS= lauxlib.c lbaselib.c ldblib.c liolib.c lmathlib.c ltablib.c lstrlib.c loadlib.c
 
-T= $(LIB)/liblualib.a
+SOBJS := $(patsubst %.o,%.os,$(OBJS))
+
+T= $(LIB)/liblualib.a
 
 all:	$T
 
-$T:	$(OBJS)
+$T:	$(OBJS) $(SOBJS)
 	$(AR) $@ $(OBJS)
 	$(RANLIB) $@
 
 clean:
-	rm -f $(OBJS) $T
+	rm -f $(OBJS) $(SOBJS) $T
 
 co:
 	co -q -f -M $(SRCS)
--- lua-5.0.2.orig/src/lib/liolib.c
+++ lua-5.0.2/src/lib/liolib.c
@@ -149,7 +149,14 @@
   if (f == stdin || f == stdout || f == stderr)
     return 0;  /* file cannot be closed */
   else {
-    int ok = (pclose(f) != -1) || (fclose(f) == 0);
+    int ok;
+    errno = 0;
+    ok = (pclose(f) != -1);
+    if (!ok) {
+      if (errno == ECHILD) ok = 1; /* pclose worked, but could reap child */
+      else ok = (fclose(f) == 0);
+    }
+    
     if (ok)
       *(FILE **)lua_touserdata(L, 1) = NULL;  /* mark file as closed */
     return ok;
--- lua-5.0.2.orig/src/lua/Makefile
+++ lua-5.0.2/src/lua/Makefile
@@ -12,8 +12,8 @@
 
 all:	$T
 
-$T:	$(OBJS) $(LIB)/liblua.a $(LIB)/liblualib.a
-	$(CC) -o $@ $(MYLDFLAGS) $(OBJS) -L$(LIB) -llua -llualib $(EXTRA_LIBS) $(DLLIB)
+$T:	$(OBJS) $(LIB)/liblua.a $(LIB)/liblualib.a
+	$(CC) -o $@ $(MYLDFLAGS) $(OBJS) -L$(LIB) -llua -llualib $(EXTRA_LIBS) $(DLLIB)
 
 $(LIB)/liblua.a:
 	cd ..; $(MAKE)
--- lua-5.0.2.orig/src/lua/lua.c
+++ lua-5.0.2/src/lua/lua.c
@@ -65,7 +65,57 @@
 
 static const char *progname = PROGNAME;
 
+/* These bits are added for Debian's -P functionality */
 
+static int done_path = 0;
+static int suppress_path = 0;
+
+static const char* paths[] = {
+  "~/.lua",
+  "~/share/lua",
+  "/usr/share/lua",
+  "/usr/local/share/lua",
+  NULL
+};
+
+static void do_path()
+{
+  const char** p = paths;
+  int any;
+  if( done_path || suppress_path ) return;
+  if( ! L ) return;
+  done_path = 1;
+  lua_pushliteral(L,"LUA_PATH");
+  lua_pushliteral(L,"");
+  while( *p ) {
+    any = 0;
+    if( **p == '~' ) {
+      const char* home = getenv("HOME");
+      if( home ) {
+        lua_pushstring(L,home);
+        lua_pushstring(L,*p+1);
+        lua_pushliteral(L,"/?.lua;");
+        lua_pushstring(L,home);
+        lua_pushstring(L,*p+1);
+        lua_pushliteral(L,"/?;");
+        any = 6;
+      }
+    } else {
+      lua_pushstring(L,*p);
+      lua_pushliteral(L,"/?.lua;");
+      lua_pushstring(L,*p);
+      lua_pushliteral(L,"/?;");
+      any = 4;
+    }
+    if( any ) {
+      lua_concat(L,any+1);
+    }
+    p++;
+  }
+  lua_pushliteral(L, "?.lua;?");
+  lua_concat(L,2);
+  lua_settable(L, LUA_GLOBALSINDEX);
+}
 
 static const luaL_reg lualibs[] = {
   {"base", luaopen_base},
@@ -85,13 +135,12 @@
 static void lstop (lua_State *l, lua_Debug *ar) {
   (void)ar;  /* unused arg. */
   lua_sethook(l, NULL, 0, 0);
-  luaL_error(l, "interrupted!");
+  lua_pushnil(l);
+  lua_error(l);
 }
 
 
 static void laction (int i) {
-  signal(i, SIG_DFL); /* if another SIGINT happens before lstop,
-                              terminate process (default action) */
   lua_sethook(L, lstop, LUA_MASKCALL | LUA_MASKRET | LUA_MASKCOUNT, 1);
 }
 
@@ -105,6 +154,9 @@
   "  -i       enter interactive mode after executing `script'\n"
   "  -l name  load and run library `name'\n"
   "  -v       show version information\n"
+  "  -C       load the compatibility library before startup\n"
+  "  -P       suppress the setting of LUA_PATH. If not specified\n"
+  "           very early, this setting may not take effect.\n"
   "  --       stop handling options\n" ,
   progname);
 }
@@ -120,23 +172,42 @@
   const char *msg;
   if (status) {
     msg = lua_tostring(L, -1);
-    if (msg == NULL) msg = "(error with no message)";
-    l_message(progname, msg);
+    if (msg == NULL) {
+      const char *str;
+      lua_getglobal(L, "LUA_DEFAULT_ERROR");  /* try global variable */
+      str = lua_tostring(L, -1);
+      lua_pop(L, 1);
+      if (str) {
+        if (*str != '\0') msg = str;
+      } else msg = "(error with no message)";
+    }
+    if (msg) l_message(progname, msg);
     lua_pop(L, 1);
   }
   return status;
 }
 
+static void sig_catch(int sig, void (*handler)(int))
+{
+  struct sigaction sa;
+  sa.sa_handler = handler;
+  sa.sa_flags = 0;
+  sigemptyset(&sa.sa_mask);
+  sigaction(sig, &sa, 0);         /* XXX ignores errors */
+}
+
 
 static int lcall (int narg, int clear) {
   int status;
   int base = lua_gettop(L) - narg;  /* function index */
+  do_path();
+  lua_settop(L,base);
   lua_pushliteral(L, "_TRACEBACK");
   lua_rawget(L, LUA_GLOBALSINDEX);  /* get traceback function */
   lua_insert(L, base);  /* put it under chunk and args */
-  signal(SIGINT, laction);
+  sig_catch(SIGINT, laction);
   status = lua_pcall(L, narg, (clear ? 0 : LUA_MULTRET), base);
-  signal(SIGINT, SIG_DFL);
+  sig_catch(SIGINT, SIG_DFL);
   lua_remove(L, base);  /* remove traceback function */
   return status;
 }
@@ -179,6 +250,7 @@
 
 
 static int load_file (const char *name) {
+  do_path();
   lua_pushliteral(L, "require");
   lua_rawget(L, LUA_GLOBALSINDEX);
   if (!lua_isfunction(L, -1)) {  /* no `require' defined? */
@@ -279,6 +351,7 @@
   int status;
   const char *oldprogname = progname;
   progname = NULL;
+  do_path();
   while ((status = load_string()) != -1) {
     if (status == 0) status = lcall(0, 0);
     report(status);
@@ -352,6 +425,18 @@
             return 1;  /* stop if file fails */
           break;
         }
+        case 'C': {
+          const char *filename = "compat.lua";
+          if (load_file(filename))
+            return 1;  /* stop if file fails */
+          break;
+        }      
+        case 'P': {
+          if( done_path )
+            l_message(progname, "option `-P' is too late, ignored");
+          suppress_path = 1;
+          break;
+        }
         case 'c': {
           l_message(progname, "option `-c' is deprecated");
           break;
@@ -413,6 +498,7 @@
   status = handle_luainit();
   if (status == 0) {
     status = handle_argv(s->argv, &interactive);
+    do_path();
     if (status == 0 && interactive) manual_input();
   }
   s->status = status;
--- lua-5.0.2.orig/src/Makefile
+++ lua-5.0.2/src/Makefile
@@ -67,16 +67,19 @@
 	lvm.h \
 	lzio.h
 
-T= $(LIB)/liblua.a
+T= $(LIB)/liblua.a
+
+SOBJS := $(patsubst %.o,%.os,$(OBJS))
 
 all:	$T
 
-$T:	$(OBJS)
+$T:	$(OBJS) $(SOBJS)
 	$(AR) $@ $(OBJS)
 	$(RANLIB) $@
 
+
 clean:
-	rm -f $(OBJS) $T
+	rm -f $(OBJS) $(SOBJS) $T
 
 co:
 	co -q -f -M $(SRCS)
--- lua-5.0.2.orig/lua-config
+++ lua-5.0.2/lua-config
@@ -0,0 +1,165 @@
+#!/usr/bin/lua
+-- -*- Lua -*-
+
+-- This file is under the terms of the MIT licence. Do as you will.
+
+-- Process the arg table
+function usage()
+   info();
+   io.stderr:write([[Usage: lua-config <options>
+
+  Valid options are:
+
+  --include      Outputs the -I switches needed to find <lua.h> etc.
+
+  --static       Outputs the full path to the static libraries
+
+  --libs         Outputs the -L and -l switches needed to find the library
+  --libs-only-L  Outputs only the -L switches
+  --libs-only-l  Outputs only the -l switches
+
+  --extralibs    Outputs the -l switches appropriate to the extra libs needed by lua
+
+  Note that --static is mututally exclusive with the --libs* options
+
+  Also, you can specify the following
+
+  --vmonly       Outputs only the switches for finding the VM libraries
+  --libonly      Outputs only the switches for finding the standard libraries
+  --both         Outputs the switches for both [The default]
+
+  Example:
+
+  gcc `lua-config --include` my_prog.c -o my_prog `lua-config --libs`
+
+]] );
+   os.exit(1);
+end
+
+function version()
+   io.stdout:write( [[5.0.0
+]] );
+   os.exit(0);
+end
+
+function info()
+   io.stdout:write( [[lua-config version 1.10 (c) Daniel Silverstone 2002
+
+lua-config was written for the Debian GNU/Linux project. This version
+of lua-config will provide switches appropriate to Lua 5.0
+
+]] );
+end
+
+if( table.getn(arg) == 0 ) then
+   usage()
+end
+
+output_vm      = 1
+output_lib     = 1
+
+output_static  = 0
+output_libs_l  = 0
+output_libs_L  = 0
+output_include = 0
+output_extras  = 0
+
+table.foreachi( arg, 
+	 function(n,param)
+	    if( param == '--version' ) then
+	       version()
+	    end
+	    if( param == '--help' ) then
+	       usage()
+	    end
+	    if( param == '--include' ) then
+	       output_include = 1;
+	       return
+	    end
+	    if( param == '--libs' ) then
+	       output_libs_l = 1;
+	       output_libs_L = 1;
+	       return
+	    end
+	    if( param == '--libs-only-L' ) then
+	       output_libs_L = 1;
+	       return
+	    end
+	    if( param == '--libs-only-l' ) then
+	       output_libs_l = 1;
+	       return
+	    end
+	    if( param == '--extralibs' ) then
+	       output_extras = 1;
+	       return
+	    end
+	    if( param == '--static' ) then
+	       output_static = 1;
+	       return
+	    end
+	    if( param == '--vmonly' ) then
+	       output_vm = 1;
+	       output_lib = 0;
+	       return
+	    end
+	    if( param == '--libonly' ) then
+	       output_lib = 1;
+	       output_vm = 0;
+	       return
+	    end
+	    if( param == '--both' ) then
+	       output_lib = 1;
+	       output_vm = 1;
+	       return
+	    end
+	    io.stderr:write( "Unknown argument ", param );
+	    usage();
+	 end );
+
+if( (output_extras + output_libs_l + output_libs_L + output_include + output_static) == 0 ) then
+   usage()
+end
+
+if( (output_static + (output_libs_l or output_libs_L)) > 1 ) then
+   usage();
+end
+
+outargs = {}
+
+if( output_include == 1 ) then
+   table.insert( outargs, "-I/usr/include/lua" );
+end
+
+if( output_libs_L == 1 ) then
+   table.insert( outargs, "-L/usr/include" );
+end
+
+if( output_libs_l == 1 ) then
+   if( output_lib == 1 ) then
+      table.insert( outargs, "-llualib" );
+   end
+   if( output_vm == 1 ) then
+      table.insert( outargs, "-llua" );
+   end
+end
+
+if( output_static == 1 ) then
+   if( output_lib == 1 ) then
+      table.insert( outargs, "/usr/lib/liblualib.a" );
+   end
+   if( output_vm == 1 ) then
+      table.insert( outargs, "/usr/lib/liblua.a" );
+   end
+end
+
+if( output_extras == 1 ) then
+   table.insert( outargs, "-lm" );
+end
+
+io.stdout:write( outargs[1] );
+
+for i=2,table.getn(outargs) do
+   io.stdout:write( " ", outargs[i] );
+end
+
+io.stdout:write( "\n" );
--- lua-5.0.2.orig/config
+++ lua-5.0.2/config
@@ -25,15 +25,15 @@
 # interface (e.g., Linux, Solaris, IRIX, BSD, AIX, HPUX, and probably others),
 # uncomment the next two lines.
 #
-#LOADLIB= -DUSE_DLOPEN=1
-#DLLIB= -ldl
+LOADLIB= -DUSE_DLOPEN=1
+DLLIB= -ldl
 #
 # In Linux with gcc, you should also uncomment the next definition for
 # MYLDFLAGS, which passes -E (= -export-dynamic) to the linker. This option
 # allows dynamic libraries to link back to the `lua' program, so that they do
 # not need the Lua libraries. (Other systems may have an equivalent facility.)
 #
-#MYLDFLAGS= -Wl,-E
+MYLDFLAGS= -Wl,-E
 #
 # On Windows systems. support for dynamic loading is enabled by default.
 # To disable this support, uncomment the next line.
@@ -92,7 +92,7 @@
 # or if you are using a modified interpreter that does not need them,
 # then comment the following line or add the appropriates libraries.
 #
-EXTRA_LIBS= -lm
+#EXTRA_LIBS= -lm
 
 # If you want to customize the stand-alone Lua interpreter, uncomment and
 # edit the following two lines; also edit etc/saconfig.c to suit your needs.
@@ -100,8 +100,8 @@
 # to add -lreadline (and perhaps also -lhistory and -lcurses or -lncurses)
 # to EXTRA_LIBS.
 #
-#USERCONF=-DLUA_USERCONFIG='"$(LUA)/etc/saconfig.c"' -DUSE_READLINE
-#EXTRA_LIBS= -lm -ldl -lreadline # -lhistory -lcurses -lncurses
+USERCONF=-DLUA_USERCONFIG='"$(LUA)/etc/saconfig.c"' -DUSE_READLINE
+EXTRA_LIBS= -lreadline -lm -ldl # -lhistory -lcurses -lncurses
 
 # ------------------------------------------------------------------ C compiler
 
@@ -119,7 +119,7 @@
 # debug information. If you only want the shared libraries, you may want to
 # add -fPIC to MYCFLAGS.
 #
-MYCFLAGS= -O2
+MYCFLAGS= -O3 -g
 #MYCFLAGS= -O3 -fomit-frame-pointer # -fPIC
 
 # Write here any options you may need for your C linker.
@@ -148,19 +148,20 @@
 
 # Locations for "make install". You may need to be root do "make install".
 #
-INSTALL_ROOT= /usr/local
+INSTALL_ROOT= $(PREFIX)/usr/
 INSTALL_BIN= $(INSTALL_ROOT)/bin
-INSTALL_INC= $(INSTALL_ROOT)/include
+INSTALL_INC= $(INSTALL_ROOT)/include/lua
 INSTALL_LIB= $(INSTALL_ROOT)/lib
-INSTALL_MAN= $(INSTALL_ROOT)/man/man1
+INSTALL_MAN= $(INSTALL_ROOT)/share/man/man1
+INSTALL_SHARE= $(INSTALL_ROOT)/share/lua
 
 # You may prefer to use "install" instead of "cp" if you have it.
 # If you use "install", you may also want to change the permissions after -m.
 #
-INSTALL_EXEC= cp
-INSTALL_DATA= cp
-#INSTALL_EXEC= install -m 0755
-#INSTALL_DATA= install -m 0644
+#INSTALL_EXEC= cp
+#INSTALL_DATA= cp
+INSTALL_EXEC= install -m 0755
+INSTALL_DATA= install -m 0644
 
 # == END OF USER SETTINGS. NO NEED TO CHANGE ANYTHING BELOW THIS LINE =========
 
@@ -173,6 +174,10 @@
 INCS= -I$(INC) $(EXTRA_INCS)
 DEFS= $(NUMBER) $(EXTRA_DEFS)
 
-CFLAGS= $(MYCFLAGS) $(WARN) $(INCS) $(DEFS)
+CFLAGS= $(MYCFLAGS) $(WARN) $(INCS) $(DEFS) -DINSTALL_SHARE=\"$(INSTALL_SHARE)\"
+
+# Extra rule for .os files
+%.os: %.c
+	$(CC) $(CFLAGS) -fPIC -DPIC -o $@ -c $<
 
 # (end of config)
--- lua-5.0.2.orig/Makefile
+++ lua-5.0.2/Makefile
@@ -38,9 +38,13 @@
 
 # shared libraries (for Linux)
 so:
-	ld -o lib/liblua.so.$V -shared src/*.o
-	ld -o lib/liblualib.so.$V -shared src/lib/*.o
-	cd lib; ln -fs liblua.so.$V liblua.so; ln -fs liblualib.so.$V liblualib.so
+	gcc -o lib/liblua.so.$V -shared -Wl,-soname,liblua.so.$V \
+               src/*.os -lc
+	ln -fs liblua.so.$V lib/liblua-build.so
+	gcc -o lib/liblualib.so.$V -shared -Wl,-soname,liblualib.so.$V \
+               src/lib/*.os -Llib -llua-build -lm -ldl -lc
+	cd lib; ln -fs liblua.so.$V liblua.so; \
+                ln -fs liblualib.so.$V liblualib.so
 
 # binaries using shared libraries
 sobin:
--- lua-5.0.2.orig/lua.pc
+++ lua-5.0.2/lua.pc
@@ -0,0 +1,11 @@
+prefix=/usr
+exec_prefix=/usr
+libdir=/usr/lib
+includedir=/usr/include/
+
+Name: lua
+Description: The Lua 5.0 programming language
+Version: 5.0.0
+Libs: -L${libdir} -llua
+Cflags: -I${includedir}/lua
+
--- lua-5.0.2.orig/lualib.pc
+++ lua-5.0.2/lualib.pc
@@ -0,0 +1,12 @@
+prefix=/usr
+exec_prefix=/usr
+libdir=/usr/lib
+includedir=/usr/include/
+
+Name: lua
+Description: The Lua 5.0 programming language addon libraries
+Version: 5.0.0
+Requires: lua
+Libs: -L${libdir} -llualib
+Cflags: -I${includedir}/lua
+
--- lua-5.0.2.orig/lua-config.1
+++ lua-5.0.2/lua-config.1
@@ -0,0 +1,64 @@
+.\" Manual page for lua-config
+.\" Written by Daniel Silverstone <dsilvers@debian.org>
+.\" For the Debian GNU/Linux system
+
+.TH lua-config 1
+.SH NAME
+lua-config \- Lua configuration information
+.SH SYNOPSIS
+Basic usage
+.PP
+.B gcc
+`
+.B lua-config
+.I \-\-include
+`
+my_prog.c
+.B \-o
+my_prog
+`
+.B lua-config
+.I \-\-libs
+`
+
+.SH DESCRIPTION
+The lua-config script allows you to determine useful information
+about the chosen version of lua running on the Debian GNU/Linux
+system in use.
+More information can be found by running
+.B lua-config
+without any arguments.
+.SH CAVEATS
+This script is unique to Debian and as such you shouldn't rely
+on its presence on every system. Lua is an embedded language
+by default and different Linux distributions each take a different
+approach to making it possible to compile with Lua. The 
+.B pkg-config
+system also provides a way to look for libraries and is more likely
+to be supported across different Linux distributions. Debian's
+.B pkg-config
+name for Lua 5.0 is
+.I lua
+and the libraries are in
+.I lualib.
+These
+.B pkg-config
+files can be found in the 
+.I liblua-dev 
+and 
+.I liblualib-dev 
+packages.
+.SH AUTHOR
+lua-config was written by 
+.B Daniel Silverstone
+.BI <dsilvers@debian.org>.
+
+This manual page was written by
+.B Daniel Silverstone
+.BI <dsilvers@debian.org>.
+For the Debian project. It may be used without restriction in any
+other system.
+.SH "SEE ALSO"
+.IR lua (1)
+.IR pkg-config (1)
+