build: opkg: enable presence of uci
[openwrt/staging/yousong.git] / include / rootfs.mk
index ac8f04da9cfa2500dff7f712c5f1acf3a3669638..46ccce49eb5c62b1b9d8401e573467ad250d5e44 100644 (file)
@@ -34,22 +34,29 @@ ifdef CONFIG_USE_MKLIBS
 endif
 
 # where to build (and put) .ipk packages
-OPKG:= \
+opkg = \
   IPKG_NO_SCRIPT=1 \
-  IPKG_TMP=$(TMP_DIR)/ipkg \
-  IPKG_INSTROOT=$(TARGET_DIR) \
-  IPKG_CONF_DIR=$(STAGING_DIR)/etc \
-  IPKG_OFFLINE_ROOT=$(TARGET_DIR) \
-  $(XARGS) $(STAGING_DIR_HOST)/bin/opkg \
-       --offline-root $(TARGET_DIR) \
-       --force-depends \
-       --force-overwrite \
+  IPKG_INSTROOT=$(1) \
+  UCI=$(STAGING_DIR_HOST)/sbin/uci \
+  UCI_CONFDIR=$(1)/etc/config \
+  UCI_SAVEDIR=$(1)/tmp/.uci \
+  TMPDIR=$(1)/tmp \
+  $(STAGING_DIR_HOST)/bin/opkg \
+       --offline-root $(1) \
        --force-postinstall \
-       --force-maintainer \
        --add-dest root:/ \
        --add-arch all:100 \
        --add-arch $(if $(ARCH_PACKAGES),$(ARCH_PACKAGES),$(BOARD)):200
 
+TARGET_DIR_ORIG := $(TARGET_ROOTFS_DIR)/root.orig-$(BOARD)
+
+ifdef CONFIG_CLEAN_IPKG
+  define clean_ipkg
+       -find $(1)/usr/lib/opkg -type f -and -not -name '*.control' | $(XARGS) rm -rf
+       -sed -i -ne '/^Require-User: /p' $(1)/usr/lib/opkg/info/*.control
+       -find $(1)/usr/lib/opkg -empty | $(XARGS) rm -rf
+  endef
+endif
 
 define prepare_rootfs
        @if [ -d $(TOPDIR)/files ]; then \
@@ -57,13 +64,27 @@ define prepare_rootfs
        fi
        @mkdir -p $(1)/etc/rc.d
        @( \
-               cd $(1); \
+               cd $(1); shell=$$(which bash); \
+               mkdir -p $(1)/tmp/.uci/;  \
                for script in ./usr/lib/opkg/info/*.postinst; do \
-                       IPKG_INSTROOT=$(1) $$(which bash) $$script; \
+                       IPKG_INSTROOT=$(1) \
+                       UCI=$(STAGING_DIR_HOST)/sbin/uci \
+                       UCI_CONFDIR=$(1)/etc/config \
+                       UCI_SAVEDIR=$(1)/tmp/.uci \
+                               $$shell $$script; \
+                       ret=$$?; \
+                       if [ $$ret -ne 0 ]; then \
+                               echo "postinst script $$script has failed with exit code $$ret" >&2; \
+                               exit 1; \
+                       fi; \
                done; \
                for script in ./etc/init.d/*; do \
                        grep '#!/bin/sh /etc/rc.common' $$script >/dev/null || continue; \
-                       IPKG_INSTROOT=$(1) $$(which bash) ./etc/rc.common $$script enable; \
+                       IPKG_INSTROOT=$(1) \
+                       UCI=$(STAGING_DIR_HOST)/sbin/uci \
+                       UCI_CONFDIR=$(1)/etc/config \
+                       UCI_SAVEDIR=$(1)/tmp/.uci \
+                               $$shell ./etc/rc.common $$script enable; \
                done || true \
        )
        $(if $(SOURCE_DATE_EPOCH),sed -i "s/Installed-Time: .*/Installed-Time: $(SOURCE_DATE_EPOCH)/" $(1)/usr/lib/opkg/status)
@@ -71,8 +92,9 @@ define prepare_rootfs
        @-find $(1) -name .svn  | $(XARGS) rm -rf
        @-find $(1) -name .git  | $(XARGS) rm -rf
        @-find $(1) -name '.#*' | $(XARGS) rm -f
+       rm -rf $(1)/tmp/*
+       rm -f $(1)/usr/lib/opkg/lists/*
        rm -f $(1)/usr/lib/opkg/info/*.postinst*
-       rm -f $(1)/usr/lib/opkg/info/*.prerm*
-       $(if $(CONFIG_CLEAN_IPKG),rm -rf $(1)/usr/lib/opkg)
+       $(call clean_ipkg,$(1))
        $(call mklibs,$(1))
 endef