From 2d05a6135a0d29a82148f9bfc215b2de5b609dd5 Mon Sep 17 00:00:00 2001 From: Jo-Philipp Wich Date: Wed, 11 Jun 2014 12:02:54 +0000 Subject: [PATCH] build: split into luci and luci-addons packages --- contrib/package/luci-addons/Makefile | 283 +++++++++++++++++++++++++++ contrib/package/luci/Makefile | 187 ------------------ 2 files changed, 283 insertions(+), 187 deletions(-) create mode 100644 contrib/package/luci-addons/Makefile diff --git a/contrib/package/luci-addons/Makefile b/contrib/package/luci-addons/Makefile new file mode 100644 index 0000000000..c1c0992cea --- /dev/null +++ b/contrib/package/luci-addons/Makefile @@ -0,0 +1,283 @@ +include $(TOPDIR)/rules.mk + +LUCI_TOPDIR=../../.. + +PKG_NAME:=luci-addons +PKG_RELEASE:=1 + +PKG_BUILD_PARALLEL:=0 + +PKG_VERSION:=$(shell $(LUCI_TOPDIR)/build/mkrevision.sh 2>/dev/null || echo unknown) + +PKG_BUILD_DEPENDS:=$(if $(STAGING_DIR_ROOT),lua/host) +PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME) +PKG_INSTALL_DIR:=$(PKG_BUILD_DIR)/ipkg-install +PKG_USE_MIPS16:=0 + +LUA_TARGET:=source +LUCI_CFLAGS:= +LUCI_BUILD_PACKAGES:= +LUCI_SELECTED_MODULES:= + + +# 1: luci component +# 2: package names +define add_deps + $(foreach dep,$(2), \ + $(if $(patsubst @%,,$(dep)), \ + $(if $(patsubst luci-%,,$(dep)), \ + +PACKAGE_luci-$(1):$(dep), \ + +$(dep)), \ + $(dep))) +endef + +### Templates ### +define Package/luci-addons/install/template + $(CP) -a $(PKG_BUILD_DIR)/$(2)/dist/* $(1)/ -R + $(CP) -a $(PKG_BUILD_DIR)/$(2)/ipkg/* $(1)/CONTROL/ 2>/dev/null || true +endef + + +### Community Packages ### +define Package/luci-mod-freifunk-community + SECTION:=luci + CATEGORY:=LuCI + TITLE:=LuCI - Lua Configuration Interface + URL:=http://luci.subsignal.org/ + MAINTAINER:=LuCI Development Team + SUBMENU:=9. Freifunk + TITLE:=Freifunk Community Meta-Package + DEPENDS+=$(call add_deps,mod-freifunk-community, \ + iptables-mod-nat-extra iptables-mod-ipopt \ + luci-lib-web luci-app-splash luci-i18n-german \ + olsrd olsrd-mod-dyn-gw-plain \ + olsrd-mod-jsoninfo olsrd-mod-nameservice \ + olsrd-mod-watchdog kmod-tun \ + ip freifunk-watchdog luci-app-olsr \ + luci-app-olsr-services freifunk-gwcheck freifunk-mapupdate \ + ) +endef + +define Package/luci-mod-freifunk-community/install + $(call Package/luci-addons/install/template,$(1),applications/freifunk-community) +endef + +ifneq ($(CONFIG_PACKAGE_luci-mod-freifunk-community),) + LUCI_SELECTED_MODULES+=applications/freifunk-community +endif + +LUCI_BUILD_PACKAGES += luci-mod-freifunk-community + + +### Modules ### +define module + define Package/luci-mod-$(1) + SECTION:=luci + CATEGORY:=LuCI + TITLE:=LuCI - Lua Configuration Interface + URL:=http://luci.subsignal.org/ + MAINTAINER:=LuCI Development Team + SUBMENU:=2. Modules + TITLE:=$(if $(2),$(2),LuCI $(1) module) + $(if $(3),DEPENDS+=$(3)) + endef + + define Package/luci-mod-$(1)/install + $(call Package/luci-addons/install/template,$$(1),modules/$(1)) + $(call Package/luci-mod-$(1)/extra-install) + endef + + ifneq ($(CONFIG_PACKAGE_luci-mod-$(1)),) + LUCI_SELECTED_MODULES+=modules/$(1) + endif + + LUCI_BUILD_PACKAGES += luci-mod-$(1) +endef + + +$(eval $(call module,freifunk,LuCI Freifunk module,+luci-mod-admin-full +luci-lib-json +PACKAGE_luci-mod-freifunk:freifunk-firewall +freifunk-common)) + + +### Applications ### +define application + define Package/luci-app-$(1) + SECTION:=luci + CATEGORY:=LuCI + TITLE:=LuCI - Lua Configuration Interface + URL:=http://luci.subsignal.org/ + MAINTAINER:=LuCI Development Team + SUBMENU:=3. Applications + TITLE:=$(if $(2),$(2),LuCI $(1) application) + DEPENDS:=$(call add_deps,app-$(1),$(3)) + endef + + define Package/luci-app-$(1)/install + $(call Package/luci-addons/install/template,$$(1),applications/luci-$(1)) + endef + + ifneq ($(CONFIG_PACKAGE_luci-app-$(1)),) + LUCI_SELECTED_MODULES+=applications/luci-$(1) + endif + + LUCI_BUILD_PACKAGES += luci-app-$(1) +endef + +define Package/luci-app-splash/conffiles +/etc/config/luci_splash +/usr/lib/luci-splash/splashtext.html +/usr/lib/luci-splash/splashtextinclude.html +endef + +define Package/luci-app-statistics/conffiles +/etc/config/luci_statistics +endef + +define Package/luci-app-diag-devinfo/conffiles +/etc/config/luci_devinfo +endef + + +$(eval $(call application,siitwizard,SIIT IPv4-over-IPv6 configuration wizard,kmod-siit)) +$(eval $(call application,freifunk-policyrouting,Policy routing for mesh traffic,freifunk-policyrouting)) +$(eval $(call application,freifunk-widgets,Widgets for the Freifunk index page,luci-mod-freifunk)) +$(eval $(call application,meshwizard, Shellscript based wizard to setup mesh networks,meshwizard)) +$(eval $(call application,olsr,OLSR configuration and status module,olsrd olsrd-mod-jsoninfo luci-lib-luaneightbl)) +$(eval $(call application,olsr-viz,OLSR Visualisation,luci-app-olsr olsrd-mod-txtinfo)) +$(eval $(call application,freifunk-diagnostics,Tools for network diagnosis like traceroute and ping)) +$(eval $(call application,olsr-services,Show services announced with the nameservice plugin,luci-app-olsr olsrd-mod-nameservice)) +$(eval $(call application,splash,Freifunk DHCP-Splash application,luci-lib-nixio tc kmod-sched iptables-mod-nat-extra iptables-mod-ipopt)) + +$(eval $(call application,statistics,LuCI Statistics Application,\ + collectd \ + rrdtool1 \ + collectd-mod-rrdtool \ + collectd-mod-iwinfo \ + collectd-mod-interface \ + collectd-mod-load \ + collectd-mod-network)) + + +$(eval $(call application,diag-core,LuCI Diagnostics Tools (Core))) + +$(eval $(call application,diag-devinfo,LuCI Diagnostics Tools (Device Info),\ + luci-app-diag-core \ + smap \ + netdiscover \ + mac-to-devinfo \ + httping \ + smap-to-devinfo \ + netdiscover-to-devinfo)) + +$(eval $(call application,voice-core,LuCI Voice Software (Core))) +$(eval $(call application,voice-diag,LuCI Voice Software (Diagnostics),luci-app-diag-devinfo)) + +$(eval $(call application,upnp,Universal Plug & Play configuration module,miniupnpd)) +$(eval $(call application,ntpc,NTP time synchronisation configuration module,ntpclient)) +$(eval $(call application,ddns,Dynamic DNS configuration module,ddns-scripts)) +$(eval $(call application,samba,Network Shares - Samba SMB/CIFS module,samba36-server)) +$(eval $(call application,mmc-over-gpio,MMC-over-GPIO configuration module,kmod-mmc-over-gpio)) +$(eval $(call application,p910nd,p910nd - Printer server module,p910nd)) +$(eval $(call application,ushare,uShare - UPnP A/V & DLNA Media Server,ushare)) +$(eval $(call application,hd-idle,Hard Disk Idle Spin-Down module,hd-idle)) +$(eval $(call application,tinyproxy,Tinyproxy - HTTP(S)-Proxy configuration,tinyproxy)) +$(eval $(call application,polipo,LuCI Support for the Polipo Proxy,polipo)) +$(eval $(call application,openvpn,LuCI Support for OpenVPN,openvpn @BROKEN)) +$(eval $(call application,p2pblock,LuCI Support for the Freifunk P2P-Block addon,luci-app-firewall freifunk-p2pblock)) +$(eval $(call application,multiwan,LuCI Support for the OpenWrt MultiWAN agent,luci-app-firewall multiwan)) +$(eval $(call application,wol,LuCI Support for Wake-on-LAN,etherwake)) +$(eval $(call application,vnstat,LuCI Support for VnStat,vnstat vnstati)) +$(eval $(call application,radvd,LuCI Support for Radvd,radvd)) +$(eval $(call application,ahcp,LuCI Support for AHCPd,ahcpd)) +$(eval $(call application,wshaper,LuCI Support for wshaper,wshaper)) + +$(eval $(call application,pbx,LuCI PBX Administration,\ + asterisk18 \ + asterisk18-app-authenticate \ + asterisk18-app-disa \ + asterisk18-app-setcallerid \ + asterisk18-app-system \ + asterisk18-chan-gtalk \ + asterisk18-codec-a-mu \ + asterisk18-codec-alaw \ + asterisk18-func-cut \ + asterisk18-res-clioriginate \ + asterisk18-func-channel \ + asterisk18-chan-local \ + asterisk18-app-record \ + asterisk18-app-senddtmf \ + asterisk18-res-crypto)) + +$(eval $(call application,pbx-voicemail,LuCI PBX Administration Voicemail Support,luci-app-pbx msmtp coreutils-base64)) +$(eval $(call application,ltqtapi,Lantiq voip)) +$(eval $(call application,minidlna,LuCI Support for miniDLNA,minidlna)) +$(eval $(call application,transmission,LuCI Support for Transmission,transmission-daemon)) +$(eval $(call application,watchcat,LuCI Support for Watchcat,watchcat)) + + +### Themes ### +define theme + define Package/luci-theme-$(1) + SECTION:=luci + CATEGORY:=LuCI + TITLE:=LuCI - Lua Configuration Interface + URL:=http://luci.subsignal.org/ + SUBMENU:=4. Themes + TITLE:=$(if $(2),$(2),LuCI $(1) theme) + MAINTAINER:=$(if $(3),$(3),LuCI Development Team ) + DEPENDS:=$(if $(filter-out base,$(1)),+luci-theme-base) $(4) + $(if $(5),DEFAULT:=PACKAGE_luci-lib-core) + endef + + define Package/luci-theme-$(1)/install + $(call Package/luci-addons/install/template,$$(1),themes/$(1)) + endef + + ifneq ($(CONFIG_PACKAGE_luci-theme-$(1)),) + LUCI_SELECTED_MODULES+=themes/$(1) + endif + + LUCI_BUILD_PACKAGES += luci-theme-$(1) +endef + + +$(eval $(call theme,freifunk-bno,Freifunk Berlin Nordost Theme,\ + Stefan Pirwitz )) + +$(eval $(call theme,freifunk-generic,Freifunk Generic Theme,\ + Manuel Munz )) + + +### Compile ### +PKG_CONFIG_DEPENDS=$(patsubst %,CONFIG_PACKAGE_%,$(LUCI_BUILD_PACKAGES)) + +include $(INCLUDE_DIR)/package.mk + +define Build/Prepare + @if [ ! -x $(LUCI_TOPDIR)/build/mkrevision.sh ]; then \ + echo "*** Repository layout changed!" >&2; \ + echo "*** Please change the LuCI url in feeds.conf to http://svn.luci.subsignal.org/luci/trunk and reinstall the feed with" >&2; \ + echo "*** ./scripts/feeds update luci; ./scripts/feeds install -a -p luci" >&2; \ + exit 1; \ + fi + mkdir -p $(PKG_BUILD_DIR) + $(TAR) c -C $(LUCI_TOPDIR) . \ + --exclude=.pc --exclude=.svn --exclude=.git \ + --exclude='boa-0*' --exclude='*.o' --exclude='*.so' \ + --exclude=dist | \ + tar x -C $(PKG_BUILD_DIR)/ + $(call Build/Prepare/Default) +endef + +define Build/Configure +endef + +MAKE_FLAGS += \ + MODULES="$(LUCI_SELECTED_MODULES)" \ + LUA_TARGET="$(LUA_TARGET)" \ + LUA_SHLIBS="-llua -lm -ldl -lcrypt" \ + CFLAGS="$(TARGET_CFLAGS) $(LUCI_CFLAGS) -I$(STAGING_DIR)/usr/include" \ + LDFLAGS="$(TARGET_LDFLAGS) -L$(STAGING_DIR)/usr/lib" \ + NIXIO_TLS="$(NIXIO_TLS)" OS="Linux" + + +$(foreach b,$(LUCI_BUILD_PACKAGES),$(eval $(call BuildPackage,$(b)))) diff --git a/contrib/package/luci/Makefile b/contrib/package/luci/Makefile index 64abf69ba3..b5a0c1d072 100644 --- a/contrib/package/luci/Makefile +++ b/contrib/package/luci/Makefile @@ -203,35 +203,6 @@ $(eval $(call protocol,3g,Support for 3G,+PACKAGE_luci-proto-3g:comgt)) $(eval $(call protocol,relay,Support for relayd pseudo bridges,+PACKAGE_luci-proto-relay:relayd)) -### Community Packages ### -define Package/luci-mod-freifunk-community - SECTION:=luci - CATEGORY:=LuCI - TITLE:=LuCI - Lua Configuration Interface - URL:=http://luci.subsignal.org/ - MAINTAINER:=LuCI Development Team - SUBMENU:=9. Freifunk - TITLE:=Freifunk Community Meta-Package - DEPENDS+= \ - +luci-lib-web +luci-app-splash +luci-i18n-german \ - +PACKAGE_luci-mod-freifunk-community:olsrd +PACKAGE_luci-mod-freifunk-community:olsrd-mod-dyn-gw-plain \ - +PACKAGE_luci-mod-freifunk-community:olsrd-mod-jsoninfo +PACKAGE_luci-mod-freifunk-community:olsrd-mod-nameservice \ - +PACKAGE_luci-mod-freifunk-community:olsrd-mod-watchdog +PACKAGE_luci-mod-freifunk-community:kmod-tun \ - +PACKAGE_luci-mod-freifunk-community:ip +PACKAGE_luci-mod-freifunk-community:freifunk-watchdog +luci-app-olsr \ - +luci-app-olsr-services +freifunk-gwcheck +freifunk-mapupdate -endef - -define Package/luci-mod-freifunk-community/install - $(call Package/luci/install/template,$(1),applications/freifunk-community) -endef - -ifneq ($(CONFIG_PACKAGE_luci-mod-freifunk-community),) - LUCI_SELECTED_MODULES+=applications/freifunk-community -endif - -LUCI_BUILD_PACKAGES += luci-mod-freifunk-community - - ### Modules ### define module define Package/luci-mod-$(1) @@ -267,7 +238,6 @@ $(eval $(call module,admin-mini,LuCI Essentials - stripped down and user-friendl $(eval $(call module,admin-full,LuCI Administration - full-featured for full control,+luci-mod-admin-core +luci-lib-ipkg)) $(eval $(call module,failsafe,LuCI Fail-Safe - Fail-Safe sysupgrade module,+luci-mod-admin-core)) $(eval $(call module,rpc,LuCI RPC - JSON-RPC API,+luci-lib-json)) -$(eval $(call module,freifunk,LuCI Freifunk module,+luci-mod-admin-full +luci-lib-json +PACKAGE_luci-mod-freifunk:freifunk-firewall +freifunk-common)) $(eval $(call module,niu,NIU - Next Generation Interface,+luci-mod-admin-core @BROKEN)) @@ -295,167 +265,15 @@ define application LUCI_BUILD_PACKAGES += luci-app-$(1) endef -define Package/luci-app-splash/conffiles -/etc/config/luci_splash -/usr/lib/luci-splash/splashtext.html -/usr/lib/luci-splash/splashtextinclude.html -endef - -define Package/luci-app-statistics/conffiles -/etc/config/luci_statistics -endef - -define Package/luci-app-diag-devinfo/conffiles -/etc/config/luci_devinfo -endef - - -$(eval $(call application,siitwizard,SIIT IPv4-over-IPv6 configuration wizard,\ - +PACKAGE_luci-app-siitwizard:kmod-siit)) $(eval $(call application,firewall,Firewall and Portforwarding application,\ +PACKAGE_luci-app-firewall:firewall)) -$(eval $(call application,freifunk-policyrouting,Policy routing for mesh traffic,\ - +PACKAGE_luci-app-freifunk-policyrouting:freifunk-policyrouting)) - -$(eval $(call application,freifunk-widgets,Widgets for the Freifunk index page,\ - +PACKAGE_luci-app-freifunk-widgets:luci-mod-freifunk)) - -$(eval $(call application,meshwizard, Shellscript based wizard to setup mesh networks,\ - +PACKAGE_luci-app-freifunk-meshwizard:meshwizard)) - -$(eval $(call application,olsr,OLSR configuration and status module,\ - +olsrd +olsrd-mod-jsoninfo +luci-lib-luaneightbl)) - -$(eval $(call application,olsr-viz,OLSR Visualisation,\ - luci-app-olsr +olsrd-mod-txtinfo)) - -$(eval $(call application,freifunk-diagnostics,Tools for network diagnosis like traceroute and ping)) - -$(eval $(call application,olsr-services,Show services announced with the nameservice plugin,\ - luci-app-olsr +olsrd-mod-nameservice)) - $(eval $(call application,qos,Quality of Service configuration module,\ +PACKAGE_luci-app-qos:qos-scripts)) -$(eval $(call application,splash,Freifunk DHCP-Splash application,\ - +luci-lib-nixio +tc +kmod-sched +iptables-mod-nat-extra +iptables-mod-ipopt)) - -$(eval $(call application,statistics,LuCI Statistics Application,\ - +PACKAGE_luci-app-statistics:collectd \ - +PACKAGE_luci-app-statistics:rrdtool1 \ - +PACKAGE_luci-app-statistics:collectd-mod-rrdtool \ - +PACKAGE_luci-app-statistics:collectd-mod-iwinfo \ - +PACKAGE_luci-app-statistics:collectd-mod-interface \ - +PACKAGE_luci-app-statistics:collectd-mod-load)) \ - +PACKAGE_luci-app-statistics:collectd-mod-network)) - - -$(eval $(call application,diag-core,LuCI Diagnostics Tools (Core))) - -$(eval $(call application,diag-devinfo,LuCI Diagnostics Tools (Device Info),\ - +luci-app-diag-core \ - +PACKAGE_luci-app-diag-devinfo:smap \ - +PACKAGE_luci-app-diag-devinfo:netdiscover \ - +PACKAGE_luci-app-diag-devinfo:mac-to-devinfo \ - +PACKAGE_luci-app-diag-devinfo:httping \ - +PACKAGE_luci-app-diag-devinfo:smap-to-devinfo \ - +PACKAGE_luci-app-diag-devinfo:netdiscover-to-devinfo)) - -$(eval $(call application,voice-core,LuCI Voice Software (Core))) - -$(eval $(call application,voice-diag,LuCI Voice Software (Diagnostics),\ - luci-app-diag-devinfo)) - $(eval $(call application,commands,LuCI Shell Command Module)) -$(eval $(call application,upnp,Universal Plug & Play configuration module,\ - +PACKAGE_luci-app-upnp:miniupnpd)) - -$(eval $(call application,ntpc,NTP time synchronisation configuration module,\ - +PACKAGE_luci-app-ntpc:ntpclient)) - -$(eval $(call application,ddns,Dynamic DNS configuration module,\ - +PACKAGE_luci-app-ddns:ddns-scripts)) - -$(eval $(call application,samba,Network Shares - Samba SMB/CIFS module,\ - +PACKAGE_luci-app-samba:samba36-server)) - -$(eval $(call application,mmc-over-gpio,MMC-over-GPIO configuration module,\ - +PACKAGE_luci-app-mmc-over-gpio:kmod-mmc-over-gpio)) - -$(eval $(call application,p910nd,p910nd - Printer server module,\ - +PACKAGE_luci-app-p910nd:p910nd)) - -$(eval $(call application,ushare,uShare - UPnP A/V & DLNA Media Server,\ - +PACKAGE_luci-app-ushare:ushare)) - -$(eval $(call application,hd-idle,Hard Disk Idle Spin-Down module,\ - +PACKAGE_luci-app-hd-idle:hd-idle)) - -$(eval $(call application,tinyproxy,Tinyproxy - HTTP(S)-Proxy configuration,\ - +PACKAGE_luci-app-tinyproxy:tinyproxy)) - -$(eval $(call application,polipo,LuCI Support for the Polipo Proxy,\ - +PACKAGE_luci-app-polipo:polipo)) - -$(eval $(call application,openvpn,LuCI Support for OpenVPN,\ - +PACKAGE_luci-app-openvpn:openvpn @BROKEN)) - -$(eval $(call application,p2pblock,LuCI Support for the Freifunk P2P-Block addon,\ - luci-app-firewall +PACKAGE_luci-app-p2pblock:freifunk-p2pblock)) - -$(eval $(call application,multiwan,LuCI Support for the OpenWrt MultiWAN agent,\ - luci-app-firewall +PACKAGE_luci-app-multiwan:multiwan)) - -$(eval $(call application,wol,LuCI Support for Wake-on-LAN,\ - +PACKAGE_luci-app-wol:etherwake)) - -$(eval $(call application,vnstat,LuCI Support for VnStat,\ - +PACKAGE_luci-app-vnstat:vnstat \ - +PACKAGE_luci-app-vnstat:vnstati)) - -$(eval $(call application,radvd,LuCI Support for Radvd,\ - +PACKAGE_luci-app-radvd:radvd)) - -$(eval $(call application,ahcp,LuCI Support for AHCPd,\ - +PACKAGE_luci-app-ahcp:ahcpd)) - -$(eval $(call application,wshaper,LuCI Support for wshaper,\ - +PACKAGE_luci-app-wshaper:wshaper)) - -$(eval $(call application,pbx,LuCI PBX Administration,\ - +PACKAGE_luci-app-pbx:asterisk18 \ - +PACKAGE_luci-app-pbx:asterisk18-app-authenticate \ - +PACKAGE_luci-app-pbx:asterisk18-app-disa \ - +PACKAGE_luci-app-pbx:asterisk18-app-setcallerid \ - +PACKAGE_luci-app-pbx:asterisk18-app-system \ - +PACKAGE_luci-app-pbx:asterisk18-chan-gtalk \ - +PACKAGE_luci-app-pbx:asterisk18-codec-a-mu \ - +PACKAGE_luci-app-pbx:asterisk18-codec-alaw \ - +PACKAGE_luci-app-pbx:asterisk18-func-cut \ - +PACKAGE_luci-app-pbx:asterisk18-res-clioriginate \ - +PACKAGE_luci-app-pbx:asterisk18-func-channel \ - +PACKAGE_luci-app-pbx:asterisk18-chan-local \ - +PACKAGE_luci-app-pbx:asterisk18-app-record \ - +PACKAGE_luci-app-pbx:asterisk18-app-senddtmf \ - +PACKAGE_luci-app-pbx:asterisk18-res-crypto)) - -$(eval $(call application,pbx-voicemail,LuCI PBX Administration Voicemail Support,\ - luci-app-pbx +PACKAGE_luci-app-pbx-voicemail:msmtp \ - +PACKAGE_luci-app-pbx-voicemail:coreutils-base64)) - -$(eval $(call application,ltqtapi,Lantiq voip)) - -$(eval $(call application,minidlna,LuCI Support for miniDLNA,\ - +PACKAGE_luci-app-minidlna:minidlna)) - -$(eval $(call application,transmission,LuCI Support for Transmission,\ - +PACKAGE_luci-app-transmission:transmission-daemon)) - -$(eval $(call application,watchcat,LuCI Support for Watchcat,\ - +PACKAGE_luci-app-watchcat:watchcat)) ### Server Gateway Interfaces ### define sgi @@ -514,11 +332,6 @@ $(eval $(call theme,base,Common base for all themes)) $(eval $(call theme,openwrt,OpenWrt.org)) $(eval $(call theme,bootstrap,Bootstrap Theme (default),,,1)) -$(eval $(call theme,freifunk-bno,Freifunk Berlin Nordost Theme,\ - Stefan Pirwitz )) - -$(eval $(call theme,freifunk-generic,Freifunk Generic Theme,\ - Manuel Munz )) ### Translations ### define translation -- 2.30.2