summaryrefslogtreecommitdiffhomepage
path: root/documentation/Modules.md
diff options
context:
space:
mode:
Diffstat (limited to 'documentation/Modules.md')
-rw-r--r--documentation/Modules.md94
1 files changed, 94 insertions, 0 deletions
diff --git a/documentation/Modules.md b/documentation/Modules.md
new file mode 100644
index 000000000..2897df948
--- /dev/null
+++ b/documentation/Modules.md
@@ -0,0 +1,94 @@
+# Categories
+
+The LuCI modules are divided into several category directories, namely:
+* applications (Single applications or plugins for other modules or applications)
+* i18n (Translation files)
+* libs (Independent libraries)
+* modules (Collections of applications)
+* themes (Frontend themes)
+
+Each module goes into a subdirectory of any of this category-directories.
+
+# Module directory
+The contents of a module directory are as follows:
+
+## Makefile
+This is the module's makefile. If the module just contains Lua sourcecode or resources then the following Makefile should suffice.
+
+ include ../../build/config.mk
+ include ../../build/module.mk
+
+
+If you have C(++) code in your module your Makefile should at least contain the following things.
+
+ include ../../build/config.mk
+ include ../../build/gccconfig.mk
+ include ../../build/module.mk
+
+ compile:
+ # Commands to compile and link your C-code
+ # and to install them under the dist/ hierarchy
+
+ clean: luaclean
+ # Commands to clean your compiled objects
+
+
+
+## src
+The *src* directory is reserved for C sourcecode.
+
+## luasrc
+*luasrc* contains all Lua sourcecode files. These will automatically be stripped or compiled depending on the Make target and are installed in the LuCI installation directory.
+
+## lua
+*lua* is equivalent to _luasrc_ but containing Lua files will be installed in the Lua document root.
+
+## htdocs
+All files under *htdocs* will be copied to the document root of the target webserver.
+
+## root
+All directories and files under *root* will be copied to the installation target as they are.
+
+## dist
+*dist* is reserved for the builder to create a working installation tree that will represent the filesystem on the target machine.
+*DO NOT* put any files there as they will get deleted.
+
+## ipkg
+*ipkg* contains IPKG package control files, like _preinst'', ''posinst'', ''prerm'', ''postrm''. ''conffiles_.
+See IPKG documentation for details.
+
+
+# OpenWRT feed integration
+If you want to add your module to the LuCI OpenWRT feed you have to add several sections to the contrib/package/luci/Makefile.
+
+For a Web UI applications this is:
+
+A package description:
+
+ define Package/luci-app-YOURMODULE
+ $(call Package/luci/webtemplate)
+ DEPENDS+=+some-package +some-other-package
+ TITLE:=SHORT DESCRIPTION OF YOURMODULE
+ endef
+
+
+
+A package installation target:
+
+ define Package/luci-app-YOURMODULE/install
+ $(call Package/luci/install/template,$(1),applications/YOURMODULE)
+ endef
+
+
+A module build instruction:
+
+ ifneq ($(CONFIG_PACKAGE_luci-app-YOURMODULE),)
+ PKG_SELECTED_MODULES+=applications/YOURMODULE
+ endif
+
+
+
+A build package call:
+
+ $(eval $(call BuildPackage,luci-app-YOURMODULE))
+