# 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))