* Reworked host-Target for global Makefile
authorSteven Barth <steven@midlink.org>
Mon, 26 May 2008 12:16:16 +0000 (12:16 +0000)
committerSteven Barth <steven@midlink.org>
Mon, 26 May 2008 12:16:16 +0000 (12:16 +0000)
* Fixed dispatcher to correctly support fastindex

Makefile
applications/sgi-haserl/root/www/cgi-bin/luci
build/module.mk
core/src/dispatcher.lua

index 32ef02d..5dd89c0 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -15,8 +15,9 @@ clean:
        for i in $(MODULES); do make -C$$i clean; done
 
 host: build
        for i in $(MODULES); do make -C$$i clean; done
 
 host: build
-       mkdir -p host/luci
-       for i in $(MODULES); do cp $$i/dist$(LUCI_INSTALLDIR) host/ -R 2>/dev/null || true; done
+       mkdir -p host
+       for i in $(MODULES); do cp $$i/dist/* host/ -R 2>/dev/null || true; done
+       ln -sf .$(LUCI_INSTALLDIR) host/luci
        
 hostclean: clean
        rm host -rf
        
 hostclean: clean
        rm host -rf
index 8b06527..13fec75 100755 (executable)
@@ -1,3 +1,2 @@
 #!/usr/bin/haserl --shell=luac
 #!/usr/bin/haserl --shell=luac
-require("luci.dispatcher").createindex()
-luci.dispatcher.httpdispatch()
\ No newline at end of file
+require("luci.dispatcher").httpdispatch()
\ No newline at end of file
index 52c0e52..9c17df1 100644 (file)
@@ -9,7 +9,7 @@ source:
        for i in $$(find dist -name .svn); do rm $$i -rf; done  
        
 compile: source
        for i in $$(find dist -name .svn); do rm $$i -rf; done  
        
 compile: source
-       for i in $$(find dist -name *.lua); do $(LUAC) $(LUAC_OPTIONS) -o $$i $$i; done
+       for i in $$(find dist -name *.lua -not -name debug.lua); do $(LUAC) $(LUAC_OPTIONS) -o $$i $$i; done
        
 clean:
        rm dist -rf
        
 clean:
        rm dist -rf
index d69045c..103260c 100644 (file)
@@ -31,12 +31,19 @@ require("luci.fs")
 -- Local dispatch database
 local tree = {nodes={}}
 
 -- Local dispatch database
 local tree = {nodes={}}
 
+-- Index table
+local index = {}
+
 -- Global request object
 request = {}
 
 -- Active dispatched node
 dispatched = nil
 
 -- Global request object
 request = {}
 
 -- Active dispatched node
 dispatched = nil
 
+-- Status fields
+built_index = false
+built_tree  = false
+
 
 -- Builds a URL
 function build_url(...)
 
 -- Builds a URL
 function build_url(...)
@@ -68,7 +75,7 @@ function error500(message)
        return false
 end
 
        return false
 end
 
--- Dispatches a request depending on the PATH_INFO variable
+-- Creates a request object for dispatching
 function httpdispatch()
        local pathinfo = luci.http.env.PATH_INFO or ""
        local c = tree
 function httpdispatch()
        local pathinfo = luci.http.env.PATH_INFO or ""
        local c = tree
@@ -80,7 +87,12 @@ function httpdispatch()
        dispatch()
 end
 
        dispatch()
 end
 
+-- Dispatches a request
 function dispatch()
 function dispatch()
+       if not built_tree then
+               createtree()
+       end
+
        local c = tree
        local track = {}
 
        local c = tree
        local track = {}
 
@@ -131,6 +143,7 @@ end
 
 -- Generates the dispatching tree
 function createindex()
 
 -- Generates the dispatching tree
 function createindex()
+       index = {}
        local path = luci.sys.libpath() .. "/controller/"
        local suff = ".lua"
        
        local path = luci.sys.libpath() .. "/controller/"
        local suff = ".lua"
        
@@ -139,6 +152,8 @@ function createindex()
        else
                createindex_plain(path, suff)
        end
        else
                createindex_plain(path, suff)
        end
+       
+       built_index = true
 end
 
 -- Uses fastindex to create the dispatching tree
 end
 
 -- Uses fastindex to create the dispatching tree
@@ -149,10 +164,7 @@ function createindex_fastindex(path, suffix)
        fi.scan()
        
        for k, v in pairs(fi.indexes) do
        fi.scan()
        
        for k, v in pairs(fi.indexes) do
-               local stat, mod = pcall(require, v[2])
-               
-               luci.util.updfenv(v[1], luci.dispatcher)
-               pcall(v[1])
+               index[v[2]] = v[1]
        end
 end
 
        end
 end
 
@@ -168,12 +180,31 @@ function createindex_plain(path, suffix)
                stat, mod = pcall(require, c)
 
                if stat and mod and type(mod.index) == "function" then
                stat, mod = pcall(require, c)
 
                if stat and mod and type(mod.index) == "function" then
-                       luci.util.updfenv(mod.index, luci.dispatcher)
-                       pcall(mod.index)
+                       index[c] = mod.index
                end
        end
 end
 
                end
        end
 end
 
+-- Creates the dispatching tree from the index
+function createtree()
+       if not built_index then
+               createindex()
+       end
+
+       for k, v in pairs(index) do
+               luci.util.updfenv(v, _M)
+               
+               local stat, mod = pcall(require, k)
+               if stat then            
+                       luci.util.updfenv(v, mod)
+               end
+               
+               pcall(v)
+       end
+       
+       built_tree = true
+end
+
 -- Shortcut for creating a dispatching node
 function entry(path, target, title, order, add)
        add = add or {}
 -- Shortcut for creating a dispatching node
 function entry(path, target, title, order, add)
        add = add or {}