credit where credit is due
[openwrt.git] / include / kernel-build.mk
index 706764d..6fae4ac 100644 (file)
@@ -1,3 +1,9 @@
+# 
+# Copyright (C) 2006 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
 -include $(INCLUDE_DIR)/modules-$(KERNEL).mk
 
 LINUX_SOURCE:=linux-$(LINUX_VERSION).tar.bz2
@@ -127,3 +133,93 @@ clean: FORCE
        rm -f $(STAMP_DIR)/.linux-compile
        rm -rf $(KERNEL_BUILD_DIR)
        rm -f $(TARGETS)
+
+
+define AutoLoad
+add_module $(1) "$(2)";
+endef
+
+define KernelPackage/Defaults
+  VERSION:=$(LINUX_VERSION)-$(BOARD)-$(LINUX_RELEASE)
+  DEPENDS:=
+  MAINTAINER:=OpenWrt Developers Team <openwrt-devel@openwrt.org>
+  SOURCE:=$(patsubst $(TOPDIR)/%,%,${shell pwd})
+  PKGARCH:=$(ARCH)
+  PRIORITY:=optional
+  KCONFIG:=
+  FILES:=
+  BUILD:=
+  MODULES:=
+  TITLE:=
+  DESCRIPTION:=
+endef
+
+define KernelPackage
+  NAME:=$(1)
+  $(eval $(call KernelPackage/Defaults))
+  $(eval $(call KernelPackage/$(1)))
+  $(eval $(call KernelPackage/$(1)/$(KERNEL)))
+  
+  PKG_$(1) := $(PACKAGE_DIR)/kmod-$(1)_$(LINUX_VERSION)-$(BOARD)-$(LINUX_RELEASE)_$(ARCH).ipk
+  I_$(1) := $(KMOD_BUILD_DIR)/ipkg/$(1)
+  
+  IDEPEND_$(1):='kernel ($(LINUX_VERSION)-$(BOARD)-$(LINUX_RELEASE))' $(DEPENDS)
+  
+  ifeq ($$(strip $(KCONFIG)),)
+    KDEPEND_$(1):=m
+  else
+    KDEPEND_$(1):=$($(KCONFIG))
+  endif
+  ifeq ($$(KDEPEND_$(1)),m)
+    ifneq ($(CONFIG_PACKAGE_kmod-$(1)),)
+      packages: $$(PKG_$(1))
+    endif
+    ifeq ($(CONFIG_PACKAGE_kmod-$(1)),y)
+      install-kmod-$(1): FORCE
+               $(IPKG) install $$(PKG_$(1))
+      pkg-install: install-kmod-$(1)
+    endif
+  endif
+
+  $$(PKG_$(1)): $(LINUX_DIR)/.modules_done
+       rm -rf $$(I_$(1))
+       install -d -m0755 $$(I_$(1))/CONTROL
+       echo "Package: kmod-$(1)" > $$(I_$(1))/CONTROL/control
+       echo "Version: $(VERSION)" >> $$(I_$(1))/CONTROL/control
+       ( \
+               DEPENDS=; \
+               for depend in $$(filter-out @%,$$(IDEPEND_$(1))); do \
+                       DEPENDS=$$$${DEPENDS:+$$$$DEPENDS, }$$$${depend##+}; \
+               done; \
+               echo "Depends: $$$$DEPENDS" >> $$(I_$(1))/CONTROL/control; \
+       )
+       echo "Source: $(SOURCE)" >> $$(I_$(1))/CONTROL/control
+       echo "Section: kernel" >> $$(I_$(1))/CONTROL/control
+       echo "Priority: $(PRIORITY)" >> $$(I_$(1))/CONTROL/control
+       echo "Maintainer: $(MAINTAINER)" >> $$(I_$(1))/CONTROL/control
+       echo "Architecture: $(PKGARCH)" >> $$(I_$(1))/CONTROL/control
+       echo "Description: $(DESCRIPTION)" | sed -e 's,\\,\n ,g' >> $$(I_$(1))/CONTROL/control
+  ifneq ($(strip $(FILES)),)
+       mkdir -p $$(I_$(1))/lib/modules/$(LINUX_VERSION)
+       $(CP) $(FILES) $$(I_$(1))/lib/modules/$(LINUX_VERSION)/
+  endif
+  ifneq ($(MODULES),)
+       export modules=; \
+       add_module() { \
+               mkdir -p $$(I_$(1))/etc/modules.d; \
+               echo "$$$$2" > $$(I_$(1))/etc/modules.d/$$$$1-$(1); \
+               modules="$$$${modules:+$$$$modules }$$$$1-$(1)"; \
+       }; \
+       $(MODULES) \
+       mkdir -p $$(I_$(1))/etc/modules.d; \
+       echo "#!/bin/sh" >> $$(I_$(1))/CONTROL/postinst; \
+       echo "[ -z \"\$$$$IPKG_INSTROOT\" ] || exit" >> $$(I_$(1))/CONTROL/postinst; \
+       echo ". /etc/functions.sh" >> $$(I_$(1))/CONTROL/postinst; \
+       echo "load_modules $$$$modules" >> $$(I_$(1))/CONTROL/postinst; \
+       chmod 0755 $$(I_$(1))/CONTROL/postinst;
+  endif
+       $(IPKG_BUILD) $$(I_$(1)) $(PACKAGE_DIR)
+endef
+
+-include $(INCLUDE_DIR)/modules.mk
+