From d101bdfa245ed79dd2dabdd1900dbaa9e5d38798 Mon Sep 17 00:00:00 2001 From: Matthias Reichl Date: Tue, 5 Sep 2017 09:17:30 +0200 Subject: [PATCH 01/10] config/functions: add function get_full_module_dir It returns the full module directory path, including /usr/lib/modules. Use that in package.mk files to simply them and get rid of the repeatedly added paths. Signed-off-by: Matthias Reichl --- config/functions | 5 +++++ packages/linux-drivers/RTL8188EU/package.mk | 4 ++-- packages/linux-drivers/RTL8192CU/package.mk | 4 ++-- packages/linux-drivers/RTL8192DU/package.mk | 4 ++-- packages/linux-drivers/RTL8192EU/package.mk | 4 ++-- packages/linux-drivers/RTL8812AU/package.mk | 4 ++-- packages/linux-drivers/bcm_sta/package.mk | 4 ++-- packages/linux-drivers/brcmap6xxx-aml/package.mk | 4 ++-- packages/linux-drivers/dvbhdhomerun/package.mk | 4 ++-- packages/linux-drivers/intel_nuc_led/package.mk | 4 ++-- packages/linux-drivers/media_build/package.mk | 4 ++-- packages/linux-drivers/slice-drivers/package.mk | 4 ++-- packages/linux-drivers/wetekdvb/package.mk | 6 +++--- packages/linux/package.mk | 4 ++-- packages/x11/driver/xf86-video-nvidia-legacy/package.mk | 4 ++-- packages/x11/driver/xf86-video-nvidia/package.mk | 8 ++++---- 16 files changed, 38 insertions(+), 33 deletions(-) diff --git a/config/functions b/config/functions index e02b9be364..8a741c700c 100644 --- a/config/functions +++ b/config/functions @@ -146,6 +146,11 @@ get_module_dir() { basename $(ls -d $(get_build_dir linux)/.install_pkg/usr/lib/modules/*) } +# get full path to kernel module dir +get_full_module_dir() { + echo "/usr/lib/modules/$(get_module_dir)" +} + # get package's build dir get_build_dir() { local _PKG_NAME="$(get_pkg_variable "$1" PKG_NAME)" _PKG_VERSION="$(get_pkg_version "$1")" diff --git a/packages/linux-drivers/RTL8188EU/package.mk b/packages/linux-drivers/RTL8188EU/package.mk index d9ecaad289..9652f95089 100644 --- a/packages/linux-drivers/RTL8188EU/package.mk +++ b/packages/linux-drivers/RTL8188EU/package.mk @@ -48,6 +48,6 @@ make_target() { } makeinstall_target() { - mkdir -p $INSTALL/usr/lib/modules/$(get_module_dir)/$PKG_NAME - cp *.ko $INSTALL/usr/lib/modules/$(get_module_dir)/$PKG_NAME + mkdir -p $INSTALL/$(get_full_module_dir)/$PKG_NAME + cp *.ko $INSTALL/$(get_full_module_dir)/$PKG_NAME } diff --git a/packages/linux-drivers/RTL8192CU/package.mk b/packages/linux-drivers/RTL8192CU/package.mk index 7bdd26cf5e..8ba1a2122f 100644 --- a/packages/linux-drivers/RTL8192CU/package.mk +++ b/packages/linux-drivers/RTL8192CU/package.mk @@ -47,6 +47,6 @@ make_target() { } makeinstall_target() { - mkdir -p $INSTALL/usr/lib/modules/$(get_module_dir)/$PKG_NAME - cp *.ko $INSTALL/usr/lib/modules/$(get_module_dir)/$PKG_NAME + mkdir -p $INSTALL/$(get_full_module_dir)/$PKG_NAME + cp *.ko $INSTALL/$(get_full_module_dir)/$PKG_NAME } diff --git a/packages/linux-drivers/RTL8192DU/package.mk b/packages/linux-drivers/RTL8192DU/package.mk index 09a54d1f50..a02f838171 100644 --- a/packages/linux-drivers/RTL8192DU/package.mk +++ b/packages/linux-drivers/RTL8192DU/package.mk @@ -47,6 +47,6 @@ make_target() { } makeinstall_target() { - mkdir -p $INSTALL/usr/lib/modules/$(get_module_dir)/$PKG_NAME - cp *.ko $INSTALL/usr/lib/modules/$(get_module_dir)/$PKG_NAME + mkdir -p $INSTALL/$(get_full_module_dir)/$PKG_NAME + cp *.ko $INSTALL/$(get_full_module_dir)/$PKG_NAME } diff --git a/packages/linux-drivers/RTL8192EU/package.mk b/packages/linux-drivers/RTL8192EU/package.mk index 2958b076c8..615e4d869c 100644 --- a/packages/linux-drivers/RTL8192EU/package.mk +++ b/packages/linux-drivers/RTL8192EU/package.mk @@ -48,6 +48,6 @@ make_target() { } makeinstall_target() { - mkdir -p $INSTALL/usr/lib/modules/$(get_module_dir)/$PKG_NAME - cp *.ko $INSTALL/usr/lib/modules/$(get_module_dir)/$PKG_NAME + mkdir -p $INSTALL/$(get_full_module_dir)/$PKG_NAME + cp *.ko $INSTALL/$(get_full_module_dir)/$PKG_NAME } diff --git a/packages/linux-drivers/RTL8812AU/package.mk b/packages/linux-drivers/RTL8812AU/package.mk index 4725b346e7..48c6ea2af8 100644 --- a/packages/linux-drivers/RTL8812AU/package.mk +++ b/packages/linux-drivers/RTL8812AU/package.mk @@ -46,6 +46,6 @@ make_target() { } makeinstall_target() { - mkdir -p $INSTALL/usr/lib/modules/$(get_module_dir)/$PKG_NAME - cp *.ko $INSTALL/usr/lib/modules/$(get_module_dir)/$PKG_NAME + mkdir -p $INSTALL/$(get_full_module_dir)/$PKG_NAME + cp *.ko $INSTALL/$(get_full_module_dir)/$PKG_NAME } diff --git a/packages/linux-drivers/bcm_sta/package.mk b/packages/linux-drivers/bcm_sta/package.mk index ac55c6b9c6..3b34f6878b 100644 --- a/packages/linux-drivers/bcm_sta/package.mk +++ b/packages/linux-drivers/bcm_sta/package.mk @@ -42,6 +42,6 @@ make_target() { } makeinstall_target() { - mkdir -p $INSTALL/usr/lib/modules/$(get_module_dir)/bcm_sta - cp *.ko $INSTALL/usr/lib/modules/$(get_module_dir)/$PKG_NAME + mkdir -p $INSTALL/$(get_full_module_dir)/bcm_sta + cp *.ko $INSTALL/$(get_full_module_dir)/$PKG_NAME } diff --git a/packages/linux-drivers/brcmap6xxx-aml/package.mk b/packages/linux-drivers/brcmap6xxx-aml/package.mk index f0af7b4104..97e2cbc343 100644 --- a/packages/linux-drivers/brcmap6xxx-aml/package.mk +++ b/packages/linux-drivers/brcmap6xxx-aml/package.mk @@ -42,8 +42,8 @@ make_target() { } makeinstall_target() { - mkdir -p $INSTALL/usr/lib/modules/$(get_module_dir)/bcmdhd - cp *.ko $INSTALL/usr/lib/modules/$(get_module_dir)/bcmdhd + mkdir -p $INSTALL/$(get_full_module_dir)/bcmdhd + cp *.ko $INSTALL/$(get_full_module_dir)/bcmdhd mkdir -p $INSTALL/usr/lib/firmware/brcm cp $PKG_DIR/config/config.txt $INSTALL/usr/lib/firmware/brcm diff --git a/packages/linux-drivers/dvbhdhomerun/package.mk b/packages/linux-drivers/dvbhdhomerun/package.mk index a1e94e9065..73d39b77eb 100644 --- a/packages/linux-drivers/dvbhdhomerun/package.mk +++ b/packages/linux-drivers/dvbhdhomerun/package.mk @@ -58,8 +58,8 @@ pre_configure_target() { makeinstall_target() { cd $PKG_BUILD - mkdir -p $INSTALL/usr/lib/modules/$(get_module_dir)/hdhomerun - cp kernel/*.ko $INSTALL/usr/lib/modules/$(get_module_dir)/hdhomerun/ + mkdir -p $INSTALL/$(get_full_module_dir)/hdhomerun + cp kernel/*.ko $INSTALL/$(get_full_module_dir)/hdhomerun/ mkdir -p $INSTALL/usr/bin cp -PR .$TARGET_NAME/userhdhomerun $INSTALL/usr/bin diff --git a/packages/linux-drivers/intel_nuc_led/package.mk b/packages/linux-drivers/intel_nuc_led/package.mk index ff302fe446..5512e0f47b 100644 --- a/packages/linux-drivers/intel_nuc_led/package.mk +++ b/packages/linux-drivers/intel_nuc_led/package.mk @@ -42,6 +42,6 @@ make_target() { } makeinstall_target() { - mkdir -p $INSTALL/usr/lib/modules/$(get_module_dir)/$PKG_NAME - cp *.ko $INSTALL/usr/lib/modules/$(get_module_dir)/$PKG_NAME + mkdir -p $INSTALL/$(get_full_module_dir)/$PKG_NAME + cp *.ko $INSTALL/$(get_full_module_dir)/$PKG_NAME } diff --git a/packages/linux-drivers/media_build/package.mk b/packages/linux-drivers/media_build/package.mk index 01676fae91..02dc59ec31 100644 --- a/packages/linux-drivers/media_build/package.mk +++ b/packages/linux-drivers/media_build/package.mk @@ -57,6 +57,6 @@ make_target() { } makeinstall_target() { - mkdir -p $INSTALL/usr/lib/modules/$KERNEL_VER/updates - find $PKG_BUILD/v4l/ -name \*.ko -exec cp {} $INSTALL/usr/lib/modules/$KERNEL_VER/updates \; + mkdir -p $INSTALL/$(get_full_module_dir)/updates + find $PKG_BUILD/v4l/ -name \*.ko -exec cp {} $INSTALL/$(get_full_module_dir)/updates \; } diff --git a/packages/linux-drivers/slice-drivers/package.mk b/packages/linux-drivers/slice-drivers/package.mk index 70e4ef38e3..c703ed9540 100644 --- a/packages/linux-drivers/slice-drivers/package.mk +++ b/packages/linux-drivers/slice-drivers/package.mk @@ -42,6 +42,6 @@ make_target() { } makeinstall_target() { - mkdir -p $INSTALL/usr/lib/modules/$(get_module_dir)/$PKG_NAME - cp *.ko $INSTALL/usr/lib/modules/$(get_module_dir)/$PKG_NAME + mkdir -p $INSTALL/$(get_full_module_dir)/$PKG_NAME + cp *.ko $INSTALL/$(get_full_module_dir)/$PKG_NAME } diff --git a/packages/linux-drivers/wetekdvb/package.mk b/packages/linux-drivers/wetekdvb/package.mk index 18f0c001d5..9232285252 100644 --- a/packages/linux-drivers/wetekdvb/package.mk +++ b/packages/linux-drivers/wetekdvb/package.mk @@ -38,11 +38,11 @@ make_target() { } makeinstall_target() { - mkdir -p $INSTALL/usr/lib/modules/$(get_module_dir)/$PKG_NAME + mkdir -p $INSTALL/$(get_full_module_dir)/$PKG_NAME if [ $PROJECT = "WeTek_Play_2" ]; then - cp driver/wetekdvb_play2.ko $INSTALL/usr/lib/modules/$(get_module_dir)/$PKG_NAME/wetekdvb.ko + cp driver/wetekdvb_play2.ko $INSTALL/$(get_full_module_dir)/$PKG_NAME/wetekdvb.ko else - cp driver/wetekdvb.ko $INSTALL/usr/lib/modules/$(get_module_dir)/$PKG_NAME + cp driver/wetekdvb.ko $INSTALL/$(get_full_module_dir)/$PKG_NAME fi mkdir -p $INSTALL/usr/lib/firmware diff --git a/packages/linux/package.mk b/packages/linux/package.mk index 173afce9a0..3b1b62c493 100644 --- a/packages/linux/package.mk +++ b/packages/linux/package.mk @@ -247,7 +247,7 @@ makeinstall_init() { mkdir -p $INSTALL/usr/lib/modules for i in $INITRAMFS_MODULES; do - module=`find .install_pkg/usr/lib/modules/$(get_module_dir)/kernel -name $i.ko` + module=`find .install_pkg/$(get_full_module_dir)/kernel -name $i.ko` if [ -n "$module" ]; then echo $i >> $INSTALL/etc/modules cp $module $INSTALL/usr/lib/modules/`basename $module` @@ -257,7 +257,7 @@ makeinstall_init() { if [ "$UVESAFB_SUPPORT" = yes ]; then mkdir -p $INSTALL/usr/lib/modules - uvesafb=`find .install_pkg/usr/lib/modules/$(get_module_dir)/kernel -name uvesafb.ko` + uvesafb=`find .install_pkg/$(get_full_module_dir)/kernel -name uvesafb.ko` cp $uvesafb $INSTALL/usr/lib/modules/`basename $uvesafb` fi } diff --git a/packages/x11/driver/xf86-video-nvidia-legacy/package.mk b/packages/x11/driver/xf86-video-nvidia-legacy/package.mk index 6b7512c1cb..00f772f630 100644 --- a/packages/x11/driver/xf86-video-nvidia-legacy/package.mk +++ b/packages/x11/driver/xf86-video-nvidia-legacy/package.mk @@ -67,8 +67,8 @@ makeinstall_target() { # rename to not conflicting with Mesa libGL.so cp -P libGL.so* $INSTALL/usr/lib/libGL_nvidia-legacy.so.1 - mkdir -p $INSTALL/usr/lib/modules/$(get_module_dir)/nvidia - ln -sf /var/lib/nvidia.ko $INSTALL/usr/lib/modules/$(get_module_dir)/nvidia/nvidia.ko + mkdir -p $INSTALL/$(get_full_module_dir)/nvidia + ln -sf /var/lib/nvidia.ko $INSTALL/$(get_full_module_dir)/nvidia/nvidia.ko mkdir -p $INSTALL/usr/lib/nvidia-legacy cp kernel/nvidia.ko $INSTALL/usr/lib/nvidia-legacy diff --git a/packages/x11/driver/xf86-video-nvidia/package.mk b/packages/x11/driver/xf86-video-nvidia/package.mk index 2c222a7023..3085475158 100644 --- a/packages/x11/driver/xf86-video-nvidia/package.mk +++ b/packages/x11/driver/xf86-video-nvidia/package.mk @@ -70,10 +70,10 @@ makeinstall_target() { # rename to not conflicting with Mesa libGL.so cp -P libGL.so.$PKG_VERSION $INSTALL/usr/lib/libGL_nvidia.so.1 - mkdir -p $INSTALL/usr/lib/modules/$(get_module_dir)/nvidia - ln -sf /var/lib/nvidia.ko $INSTALL/usr/lib/modules/$(get_module_dir)/nvidia/nvidia.ko - cp -P kernel/nvidia-uvm.ko $INSTALL/usr/lib/modules/$(get_module_dir)/nvidia - cp -P kernel/nvidia-modeset.ko $INSTALL/usr/lib/modules/$(get_module_dir)/nvidia + mkdir -p $INSTALL/$(get_full_module_dir)/nvidia + ln -sf /var/lib/nvidia.ko $INSTALL/$(get_full_module_dir)/nvidia/nvidia.ko + cp -P kernel/nvidia-uvm.ko $INSTALL/$(get_full_module_dir)/nvidia + cp -P kernel/nvidia-modeset.ko $INSTALL/$(get_full_module_dir)/nvidia mkdir -p $INSTALL/usr/lib/nvidia cp -P kernel/nvidia.ko $INSTALL/usr/lib/nvidia From 2fc261ae8e86e98494ded2b77d65d3ea9af66430 Mon Sep 17 00:00:00 2001 From: Matthias Reichl Date: Tue, 5 Sep 2017 09:17:30 +0200 Subject: [PATCH 02/10] config/functions: add function get_full_firmware_dir Also update package.mk files to replace the hardcoded /usr/lib/firmware paths. Signed-off-by: Matthias Reichl --- config/functions | 5 +++++ .../linux-drivers/brcmap6xxx-aml/package.mk | 4 ++-- packages/linux-drivers/wetekdvb/package.mk | 4 ++-- .../linux-firmware/firmware-imx/package.mk | 6 +++--- .../linux-firmware/kernel-firmware/package.mk | 2 +- .../wlan-firmware-aml/package.mk | 20 +++++++++---------- packages/linux/package.mk | 6 +++--- 7 files changed, 26 insertions(+), 21 deletions(-) diff --git a/config/functions b/config/functions index 8a741c700c..58dee481be 100644 --- a/config/functions +++ b/config/functions @@ -151,6 +151,11 @@ get_full_module_dir() { echo "/usr/lib/modules/$(get_module_dir)" } +# get full path to firmware dir +get_full_firmware_dir() { + echo "/usr/lib/firmware" +} + # get package's build dir get_build_dir() { local _PKG_NAME="$(get_pkg_variable "$1" PKG_NAME)" _PKG_VERSION="$(get_pkg_version "$1")" diff --git a/packages/linux-drivers/brcmap6xxx-aml/package.mk b/packages/linux-drivers/brcmap6xxx-aml/package.mk index 97e2cbc343..5bf544220b 100644 --- a/packages/linux-drivers/brcmap6xxx-aml/package.mk +++ b/packages/linux-drivers/brcmap6xxx-aml/package.mk @@ -45,6 +45,6 @@ makeinstall_target() { mkdir -p $INSTALL/$(get_full_module_dir)/bcmdhd cp *.ko $INSTALL/$(get_full_module_dir)/bcmdhd - mkdir -p $INSTALL/usr/lib/firmware/brcm - cp $PKG_DIR/config/config.txt $INSTALL/usr/lib/firmware/brcm + mkdir -p $INSTALL/$(get_full_firmware_dir)/brcm + cp $PKG_DIR/config/config.txt $INSTALL/$(get_full_firmware_dir)/brcm } diff --git a/packages/linux-drivers/wetekdvb/package.mk b/packages/linux-drivers/wetekdvb/package.mk index 9232285252..c6d263a8ad 100644 --- a/packages/linux-drivers/wetekdvb/package.mk +++ b/packages/linux-drivers/wetekdvb/package.mk @@ -45,6 +45,6 @@ makeinstall_target() { cp driver/wetekdvb.ko $INSTALL/$(get_full_module_dir)/$PKG_NAME fi - mkdir -p $INSTALL/usr/lib/firmware - cp firmware/* $INSTALL/usr/lib/firmware + mkdir -p $INSTALL/$(get_full_firmware_dir) + cp firmware/* $INSTALL/$(get_full_firmware_dir) } diff --git a/packages/linux-firmware/firmware-imx/package.mk b/packages/linux-firmware/firmware-imx/package.mk index 6103ba8dcd..28c4226f19 100644 --- a/packages/linux-firmware/firmware-imx/package.mk +++ b/packages/linux-firmware/firmware-imx/package.mk @@ -42,7 +42,7 @@ make_target() { } makeinstall_target() { - mkdir -p $INSTALL/usr/lib/firmware/vpu - cp -P firmware/vpu/vpu_fw_imx6d.bin $INSTALL/usr/lib/firmware/vpu - cp -P firmware/vpu/vpu_fw_imx6q.bin $INSTALL/usr/lib/firmware/vpu + mkdir -p $INSTALL/$(get_full_firmware_dir)/vpu + cp -P firmware/vpu/vpu_fw_imx6d.bin $INSTALL/$(get_full_firmware_dir)/vpu + cp -P firmware/vpu/vpu_fw_imx6q.bin $INSTALL/$(get_full_firmware_dir)/vpu } diff --git a/packages/linux-firmware/kernel-firmware/package.mk b/packages/linux-firmware/kernel-firmware/package.mk index 12867d06da..43ef8e8aac 100644 --- a/packages/linux-firmware/kernel-firmware/package.mk +++ b/packages/linux-firmware/kernel-firmware/package.mk @@ -42,7 +42,7 @@ make_target() { # Install additional miscellaneous drivers makeinstall_target() { - FW_TARGET_DIR=$INSTALL/usr/lib/firmware + FW_TARGET_DIR=$INSTALL/$(get_full_firmware_dir) FW_LISTS="${PKG_DIR}/firmwares/any.dat ${PKG_DIR}/firmwares/${TARGET_ARCH}.dat" FW_LISTS+=" ${PROJECT_DIR}/${PROJECT}/${PKG_NAME}/firmwares/any.dat" diff --git a/packages/linux-firmware/wlan-firmware-aml/package.mk b/packages/linux-firmware/wlan-firmware-aml/package.mk index 8480ca7cca..eee765454c 100644 --- a/packages/linux-firmware/wlan-firmware-aml/package.mk +++ b/packages/linux-firmware/wlan-firmware-aml/package.mk @@ -36,20 +36,20 @@ make_target() { } makeinstall_target() { - mkdir -p $INSTALL/usr/lib/firmware/brcm + mkdir -p $INSTALL/$(get_full_firmware_dir)/brcm # AP6255 - cp -PR bcm_ampak/config/6255/fw_bcm43455c0_*.bin $INSTALL/usr/lib/firmware/brcm - cp -P bcm_ampak/config/6255/nvram.txt $INSTALL/usr/lib/firmware/brcm/nvram_ap6255.txt - cp -P bcm_ampak/config/6255/BT/BCM4345C0.hcd $INSTALL/usr/lib/firmware/brcm/bcm4345c0.hcd + cp -PR bcm_ampak/config/6255/fw_bcm43455c0_*.bin $INSTALL/$(get_full_firmware_dir)/brcm + cp -P bcm_ampak/config/6255/nvram.txt $INSTALL/$(get_full_firmware_dir)/brcm/nvram_ap6255.txt + cp -P bcm_ampak/config/6255/BT/BCM4345C0.hcd $INSTALL/$(get_full_firmware_dir)/brcm/bcm4345c0.hcd # AP6330 - cp -PR bcm_ampak/config/AP6330/Wi-Fi/fw_bcm40183b2*.bin $INSTALL/usr/lib/firmware/brcm - cp -P bcm_ampak/config/AP6330/Wi-Fi/nvram_ap6330.txt $INSTALL/usr/lib/firmware/brcm - cp -P bcm_ampak/config/AP6330/BT/bcm40183b2.hcd $INSTALL/usr/lib/firmware/brcm + cp -PR bcm_ampak/config/AP6330/Wi-Fi/fw_bcm40183b2*.bin $INSTALL/$(get_full_firmware_dir)/brcm + cp -P bcm_ampak/config/AP6330/Wi-Fi/nvram_ap6330.txt $INSTALL/$(get_full_firmware_dir)/brcm + cp -P bcm_ampak/config/AP6330/BT/bcm40183b2.hcd $INSTALL/$(get_full_firmware_dir)/brcm # AP6335 - cp -PR bcm_ampak/config/6335/fw_bcm4339a0_*.bin $INSTALL/usr/lib/firmware/brcm - cp -P bcm_ampak/config/6335/nvram.txt $INSTALL/usr/lib/firmware/brcm/nvram_ap6335.txt - cp -P bcm_ampak/config/6335/BT/bcm4335c0.hcd $INSTALL/usr/lib/firmware/brcm + cp -PR bcm_ampak/config/6335/fw_bcm4339a0_*.bin $INSTALL/$(get_full_firmware_dir)/brcm + cp -P bcm_ampak/config/6335/nvram.txt $INSTALL/$(get_full_firmware_dir)/brcm/nvram_ap6335.txt + cp -P bcm_ampak/config/6335/BT/bcm4335c0.hcd $INSTALL/$(get_full_firmware_dir)/brcm } diff --git a/packages/linux/package.mk b/packages/linux/package.mk index 3b1b62c493..abedea8388 100644 --- a/packages/linux/package.mk +++ b/packages/linux/package.mk @@ -263,9 +263,9 @@ makeinstall_init() { } post_install() { - mkdir -p $INSTALL/usr/lib/firmware/ - ln -sf /storage/.config/firmware/ $INSTALL/usr/lib/firmware/updates + mkdir -p $INSTALL/$(get_full_firmware_dir)/ + ln -sf /storage/.config/firmware/ $INSTALL/$(get_full_firmware_dir)/updates # bluez looks in /etc/firmware/ - ln -sf /usr/lib/firmware/ $INSTALL/etc/firmware + ln -sf /$(get_full_firmware_dir)/ $INSTALL/etc/firmware } From 4b14c6c946dee2d5073158128f28b8c98e3b693c Mon Sep 17 00:00:00 2001 From: Matthias Reichl Date: Tue, 5 Sep 2017 09:17:30 +0200 Subject: [PATCH 03/10] config/functions: only use PKG_ADDON_ID for install_binary_addon Usage of PKG_NAME was a bug carried over from the original code during refactoring. Since none of the addons set PKG_SECTION, and therefore PKG_NAME and PKG_ADDON_ID were identical, this wasn't noticed before. Drop using PKG_NAME and only use PKG_ADDON_ID to fix this, install_binary_addon can then also be used for addons which set PKG_SECTION. Signed-off-by: Matthias Reichl --- config/functions | 6 +++--- .../kodi-binary-addons/inputstream.adaptive/package.mk | 2 +- .../kodi-binary-addons/screensavers.rsxs/package.mk | 2 +- scripts/create_addon | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/config/functions b/config/functions index 58dee481be..f1d8c7af62 100644 --- a/config/functions +++ b/config/functions @@ -182,14 +182,14 @@ get_pkg_variable() { } install_binary_addon() { - local addon_name="$1" addon_id="$2" addon_so + local addon_id="$1" addon_so mkdir -p $ADDON_BUILD/$addon_id/ - cp -R $PKG_BUILD/.install_pkg/usr/share/$MEDIACENTER/addons/$addon_name/* $ADDON_BUILD/$addon_id/ + cp -R $PKG_BUILD/.install_pkg/usr/share/$MEDIACENTER/addons/$addon_id/* $ADDON_BUILD/$addon_id/ addon_so=$(xmlstarlet sel -t -v "/addon/extension/@library_linux" $ADDON_BUILD/$addon_id/addon.xml) if [ -n "$addon_so" ]; then - cp -L $PKG_BUILD/.install_pkg/usr/lib/$MEDIACENTER/addons/$addon_name/$addon_so $ADDON_BUILD/$addon_id/ + cp -L $PKG_BUILD/.install_pkg/usr/lib/$MEDIACENTER/addons/$addon_id/$addon_so $ADDON_BUILD/$addon_id/ chmod +x $ADDON_BUILD/$addon_id/$addon_so fi } diff --git a/packages/mediacenter/kodi-binary-addons/inputstream.adaptive/package.mk b/packages/mediacenter/kodi-binary-addons/inputstream.adaptive/package.mk index 358285b995..46f60affab 100644 --- a/packages/mediacenter/kodi-binary-addons/inputstream.adaptive/package.mk +++ b/packages/mediacenter/kodi-binary-addons/inputstream.adaptive/package.mk @@ -30,7 +30,7 @@ PKG_LONGDESC="inputstream.adaptive" PKG_IS_ADDON="yes" addon() { - install_binary_addon $PKG_NAME $PKG_ADDON_ID + install_binary_addon $PKG_ADDON_ID mkdir -p $ADDON_BUILD/$PKG_ADDON_ID cp -P $PKG_BUILD/.$TARGET_NAME/wvdecrypter/libssd_wv.so $ADDON_BUILD/$PKG_ADDON_ID diff --git a/packages/mediacenter/kodi-binary-addons/screensavers.rsxs/package.mk b/packages/mediacenter/kodi-binary-addons/screensavers.rsxs/package.mk index 6ab26bf66a..9e66c7ab39 100644 --- a/packages/mediacenter/kodi-binary-addons/screensavers.rsxs/package.mk +++ b/packages/mediacenter/kodi-binary-addons/screensavers.rsxs/package.mk @@ -41,7 +41,7 @@ addon() { for _ADDON in $PKG_BUILD/.install_pkg/usr/share/$MEDIACENTER/addons/* ; do _ADDON_ID=$(basename $_ADDON) - install_binary_addon $_ADDON_ID $_ADDON_ID + install_binary_addon $_ADDON_ID MULTI_ADDONS="$MULTI_ADDONS $_ADDON_ID" done diff --git a/scripts/create_addon b/scripts/create_addon index 777ad76c7a..89131d1e40 100755 --- a/scripts/create_addon +++ b/scripts/create_addon @@ -101,7 +101,7 @@ if [ "$PKG_IS_ADDON" = "yes" ] ; then if [ "$(type -t addon)" = "function" ]; then addon else - install_binary_addon $PKG_NAME $PKG_ADDON_ID + install_binary_addon $PKG_ADDON_ID fi # HACK for packages that provide multiple addons like screensavers.rsxs From 231d62653ca8481403c7342a88b00ced363f9853 Mon Sep 17 00:00:00 2001 From: Matthias Reichl Date: Tue, 5 Sep 2017 09:17:30 +0200 Subject: [PATCH 04/10] config/functions: fix install_binary_addon library handling xmlstarlet uses an exit code of 1 if the value wasn't found. This causes the build to abort as the scripts are running with "set -e". Fix this so the code checking for empty responses can work as intended. Signed-off-by: Matthias Reichl --- config/functions | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/functions b/config/functions index f1d8c7af62..65ef7658bd 100644 --- a/config/functions +++ b/config/functions @@ -187,7 +187,7 @@ install_binary_addon() { mkdir -p $ADDON_BUILD/$addon_id/ cp -R $PKG_BUILD/.install_pkg/usr/share/$MEDIACENTER/addons/$addon_id/* $ADDON_BUILD/$addon_id/ - addon_so=$(xmlstarlet sel -t -v "/addon/extension/@library_linux" $ADDON_BUILD/$addon_id/addon.xml) + addon_so=$(xmlstarlet sel -t -v "/addon/extension/@library_linux" $ADDON_BUILD/$addon_id/addon.xml || :) if [ -n "$addon_so" ]; then cp -L $PKG_BUILD/.install_pkg/usr/lib/$MEDIACENTER/addons/$addon_id/$addon_so $ADDON_BUILD/$addon_id/ chmod +x $ADDON_BUILD/$addon_id/$addon_so From a03bfcbd1a58b5ad49064a1e48fc697b9d2d22d4 Mon Sep 17 00:00:00 2001 From: Matthias Reichl Date: Tue, 5 Sep 2017 09:17:30 +0200 Subject: [PATCH 05/10] addons: allow packages to define the full version number This is intended to disable automatic appending of PKG_REV in case the full version number, including PKG_REV, has already been setup in addon.xml by the package build script. Signed-off-by: Matthias Reichl --- scripts/install_addon | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/install_addon b/scripts/install_addon index 746d753b27..a7ec4b9d81 100755 --- a/scripts/install_addon +++ b/scripts/install_addon @@ -35,13 +35,13 @@ mkdir -p $ADDON_BUILD/$PKG_ADDON_ID if [ ! -f $ADDON_BUILD/$PKG_ADDON_ID/addon.xml ]; then cp config/addon/${PKG_ADDON_TYPE}.xml $ADDON_BUILD/$PKG_ADDON_ID/addon.xml - ADDONVER=$ADDON_VERSION.$PKG_REV + ADDONVER=${PKG_ADDON_VERSION:-${ADDON_VERSION}.${PKG_REV}} else if [ ! $(which xmlstarlet) ]; then echo "*** ERROR: $ADDON has addon.xml shipped, you need 'xmlstarlet' ***" exit 255 fi - ADDONVER="$(xmlstarlet sel -t -v "/addon/@version" $ADDON_BUILD/$PKG_ADDON_ID/addon.xml).$PKG_REV" + ADDONVER="${PKG_ADDON_VERSION:-$(xmlstarlet sel -t -v "/addon/@version" $ADDON_BUILD/$PKG_ADDON_ID/addon.xml).$PKG_REV}" xmlstarlet ed --inplace -u "/addon[@version]/@version" -v "$ADDONVER" $ADDON_BUILD/$PKG_ADDON_ID/addon.xml fi @@ -87,7 +87,7 @@ fi $SED -e "s|@PKG_ADDON_ID@|$PKG_ADDON_ID|g" \ -e "s|@ADDON_NAME@|$ADDON_NAME|g" \ - -e "s|@ADDON_VERSION@|$ADDON_VERSION.$PKG_REV|g" \ + -e "s|@ADDON_VERSION@|$ADDONVER|g" \ -e "s|@REQUIRES@|$REQUIRES|g" \ -e "s|@PKG_SHORTDESC@|$PKG_SHORTDESC|g" \ -e "s|@OS_VERSION@|$OS_VERSION|g" \ From eee1d7ac63d0010e80167475c98a9a3719eb5660 Mon Sep 17 00:00:00 2001 From: Matthias Reichl Date: Tue, 5 Sep 2017 09:17:30 +0200 Subject: [PATCH 06/10] addons: move addon installation functions to config/functions Signed-off-by: Matthias Reichl --- config/functions | 85 +++++++++++++++++++++++++++++++++++++++++++ scripts/install_addon | 79 ++-------------------------------------- 2 files changed, 89 insertions(+), 75 deletions(-) diff --git a/config/functions b/config/functions index 65ef7658bd..956c8f790d 100644 --- a/config/functions +++ b/config/functions @@ -194,6 +194,91 @@ install_binary_addon() { fi } +install_addon_source() { + if [ -d $PKG_DIR/source ]; then + cp -R $PKG_DIR/source/* "$1" + fi +} + +install_addon_images() { + local dest_dir="$1" + + if [ -f "$PKG_DIR/icon/icon.png" ]; then + mkdir -p "$dest_dir/resources" + cp "$PKG_DIR/icon/icon.png" "$dest_dir/resources" + fi + + if [ -f "$DISTRO_DIR/$DISTRO/addons/fanart.png" ]; then + mkdir -p "$dest_dir/resources" + cp "$DISTRO_DIR/$DISTRO/addons/fanart.png" "$dest_dir/resources" + fi +} + +create_addon_xml() { + local addon_xml addon_version addon_name provider_name requires requires_addonname requires_addonversion screenshots + + addon_xml="$1/addon.xml" + + IFS=" " +for i in $PKG_ADDON_REQUIRES; do + requires_addonname=`echo $i | cut -f1 -d ":"` + requires_addonversion=`echo $i | cut -f2 -d ":"` + requires="$requires\n " +done + unset IFS + + if [ ! -f "$addon_xml" ] ; then + cp $ROOT/config/addon/${PKG_ADDON_TYPE}.xml "$addon_xml" + addon_version=${PKG_ADDON_VERSION:-${ADDON_VERSION}.${PKG_REV}} + else + if [ ! $(which xmlstarlet) ]; then + echo "*** ERROR: $ADDON has addon.xml shipped, you need 'xmlstarlet' ***" + exit 255 + fi + addon_version="${PKG_ADDON_VERSION:-$(xmlstarlet sel -t -v "/addon/@version" "$addon_xml").$PKG_REV}" + xmlstarlet ed --inplace -u "/addon[@version]/@version" -v "$addon_version" "$addon_xml" + fi + + if [ -f $PKG_DIR/changelog.txt ]; then + sed -e "/@PKG_ADDON_NEWS@/ \ + { + r $PKG_DIR/changelog.txt + d + }" -i "$addon_xml" + else + sed -e "s|@PKG_ADDON_NEWS@||g" -i "$addon_xml" + fi + + provider_name=${PKG_MAINTAINER:-"Team LibreELEC"} + addon_name=${PKG_ADDON_NAME:-"$PKG_NAME"} + + for f in $PKG_DIR/source/resources/screenshot-*.{jpg,png}; do + if [ -f "$f" ]; then + screenshots+="resources/$(basename $f)\n" + fi + done + + $SED -e "s|@PKG_ADDON_ID@|$PKG_ADDON_ID|g" \ + -e "s|@ADDON_NAME@|$addon_name|g" \ + -e "s|@ADDON_VERSION@|$addon_version|g" \ + -e "s|@REQUIRES@|$requires|g" \ + -e "s|@PKG_SHORTDESC@|$PKG_SHORTDESC|g" \ + -e "s|@OS_VERSION@|$OS_VERSION|g" \ + -e "s|@PKG_LONGDESC@|$PKG_LONGDESC|g" \ + -e "s|@PKG_DISCLAIMER@|$PKG_DISCLAIMER|g" \ + -e "s|@PROVIDER_NAME@|$provider_name|g" \ + -e "s|@PKG_ADDON_PROVIDES@|$PKG_ADDON_PROVIDES|g" \ + -e "s|@PKG_ADDON_SCREENSHOT@|$screenshots|g" \ + -e "s|@PKG_ADDON_BROKEN@|$PKG_ADDON_BROKEN|g" \ + -i "$addon_xml" +} + +install_addon_files() { + install_addon_source "$1" + install_addon_images "$1" + create_addon_xml "$1" +} + tolower() { echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz } diff --git a/scripts/install_addon b/scripts/install_addon index a7ec4b9d81..6f23bad429 100755 --- a/scripts/install_addon +++ b/scripts/install_addon @@ -22,81 +22,10 @@ [ -n "$2" ] && PKG_ADDON_ID=$2 -IFS=" " -for i in $PKG_ADDON_REQUIRES; do - REQUIRES_ADDONNAME=`echo $i | cut -f1 -d ":"` - REQUIRES_ADDONVERSION=`echo $i | cut -f2 -d ":"` - REQUIRES="$REQUIRES\n " -done +ADDON_DIRECTORY="$ADDON_BUILD/$PKG_ADDON_ID" -unset IFS +mkdir -p "$ADDON_DIRECTORY" -mkdir -p $ADDON_BUILD/$PKG_ADDON_ID +install_addon_files "$ADDON_DIRECTORY" -if [ ! -f $ADDON_BUILD/$PKG_ADDON_ID/addon.xml ]; then - cp config/addon/${PKG_ADDON_TYPE}.xml $ADDON_BUILD/$PKG_ADDON_ID/addon.xml - ADDONVER=${PKG_ADDON_VERSION:-${ADDON_VERSION}.${PKG_REV}} -else - if [ ! $(which xmlstarlet) ]; then - echo "*** ERROR: $ADDON has addon.xml shipped, you need 'xmlstarlet' ***" - exit 255 - fi - ADDONVER="${PKG_ADDON_VERSION:-$(xmlstarlet sel -t -v "/addon/@version" $ADDON_BUILD/$PKG_ADDON_ID/addon.xml).$PKG_REV}" - xmlstarlet ed --inplace -u "/addon[@version]/@version" -v "$ADDONVER" $ADDON_BUILD/$PKG_ADDON_ID/addon.xml -fi - -if [ -d $PKG_DIR/source ]; then - cp -R $PKG_DIR/source/* $ADDON_BUILD/$PKG_ADDON_ID -fi - -if [ -f $PKG_DIR/icon/icon.png ]; then - mkdir -p $ADDON_BUILD/$PKG_ADDON_ID/resources - cp $PKG_DIR/icon/icon.png $ADDON_BUILD/$PKG_ADDON_ID/resources -fi - -if [ -f $DISTRO_DIR/$DISTRO/addons/fanart.png ]; then - mkdir -p $ADDON_BUILD/$PKG_ADDON_ID/resources - cp $DISTRO_DIR/$DISTRO/addons/fanart.png $ADDON_BUILD/$PKG_ADDON_ID/resources -fi - -for f in $PKG_DIR/source/resources/screenshot-*.{jpg,png}; do - if [ -f "$f" ]; then - PKG_ADDON_SCREENSHOT+="resources/$(basename $f)\n" - fi -done - -if [ -f $PKG_DIR/changelog.txt ]; then - sed -e "/@PKG_ADDON_NEWS@/ \ - { - r $PKG_DIR/changelog.txt - d - }" -i $ADDON_BUILD/$PKG_ADDON_ID/addon.xml -else - sed -e "s|@PKG_ADDON_NEWS@||g" -i $ADDON_BUILD/$PKG_ADDON_ID/addon.xml -fi - -PROVIDER_NAME="Team LibreELEC" -if [ ! -z "$PKG_MAINTAINER" ] ; then - PROVIDER_NAME="$PKG_MAINTAINER" -fi - -ADDON_NAME="$PKG_NAME" -if [ ! -z "$PKG_ADDON_NAME" ] ; then - ADDON_NAME="$PKG_ADDON_NAME" -fi - -$SED -e "s|@PKG_ADDON_ID@|$PKG_ADDON_ID|g" \ - -e "s|@ADDON_NAME@|$ADDON_NAME|g" \ - -e "s|@ADDON_VERSION@|$ADDONVER|g" \ - -e "s|@REQUIRES@|$REQUIRES|g" \ - -e "s|@PKG_SHORTDESC@|$PKG_SHORTDESC|g" \ - -e "s|@OS_VERSION@|$OS_VERSION|g" \ - -e "s|@PKG_LONGDESC@|$PKG_LONGDESC|g" \ - -e "s|@PKG_DISCLAIMER@|$PKG_DISCLAIMER|g" \ - -e "s|@PROVIDER_NAME@|$PROVIDER_NAME|g" \ - -e "s|@PKG_ADDON_PROVIDES@|$PKG_ADDON_PROVIDES|g" \ - -e "s|@PKG_ADDON_SCREENSHOT@|$PKG_ADDON_SCREENSHOT|g" \ - -e "s|@PKG_ADDON_BROKEN@|$PKG_ADDON_BROKEN|g" \ - -i $ADDON_BUILD/$PKG_ADDON_ID/addon.xml - -debug_strip $ADDON_BUILD/$PKG_ADDON_ID +debug_strip "$ADDON_DIRECTORY" From 89e6d75a409445cc6c3240ea31191317ecf06f8e Mon Sep 17 00:00:00 2001 From: Matthias Reichl Date: Tue, 5 Sep 2017 09:17:30 +0200 Subject: [PATCH 07/10] kodi: refactor service addon wrapper Simplify the kodi addon wrapper patch, pass call hook context and addon path on to wrapper instead of just enable/disable. The logic of what should happen with service addons on enable/disable/install/uninstall is moved out of kodi into the wrapper script. Also add restart and reload contexts so service addons can call the wrapper from python code on settings change instead of having to directly interact with systemctl. Signed-off-by: Matthias Reichl --- packages/mediacenter/kodi/package.mk | 4 +- ...se-a-wrapper-to-setup-service-addons.patch | 89 ++++++++++++++++++ ...-a-wrapper-to-setup-systemd-services.patch | 94 ------------------- .../kodi/scripts/service-addon-wrapper | 66 +++++++++++++ .../kodi/scripts/systemd-addon-wrapper | 35 ------- 5 files changed, 157 insertions(+), 131 deletions(-) create mode 100644 packages/mediacenter/kodi/patches/kodi-100.09-use-a-wrapper-to-setup-service-addons.patch delete mode 100644 packages/mediacenter/kodi/patches/kodi-100.09-use-a-wrapper-to-setup-systemd-services.patch create mode 100755 packages/mediacenter/kodi/scripts/service-addon-wrapper delete mode 100755 packages/mediacenter/kodi/scripts/systemd-addon-wrapper diff --git a/packages/mediacenter/kodi/package.mk b/packages/mediacenter/kodi/package.mk index efa80c96ca..08692726a8 100644 --- a/packages/mediacenter/kodi/package.mk +++ b/packages/mediacenter/kodi/package.mk @@ -271,8 +271,8 @@ post_makeinstall_target() { cp $PKG_DIR/scripts/kodi-config $INSTALL/usr/lib/kodi cp $PKG_DIR/scripts/kodi.sh $INSTALL/usr/lib/kodi - mkdir -p $INSTALL/usr/lib/libreelec - cp $PKG_DIR/scripts/systemd-addon-wrapper $INSTALL/usr/lib/libreelec + mkdir -p $INSTALL/usr/sbin + cp $PKG_DIR/scripts/service-addon-wrapper $INSTALL/usr/sbin mkdir -p $INSTALL/usr/bin cp $PKG_DIR/scripts/cputemp $INSTALL/usr/bin diff --git a/packages/mediacenter/kodi/patches/kodi-100.09-use-a-wrapper-to-setup-service-addons.patch b/packages/mediacenter/kodi/patches/kodi-100.09-use-a-wrapper-to-setup-service-addons.patch new file mode 100644 index 0000000000..84d2f12a01 --- /dev/null +++ b/packages/mediacenter/kodi/patches/kodi-100.09-use-a-wrapper-to-setup-service-addons.patch @@ -0,0 +1,89 @@ +diff --git a/xbmc/addons/Addon.cpp b/xbmc/addons/Addon.cpp +index 45f42ad2e3..ce10080469 100644 +--- a/xbmc/addons/Addon.cpp ++++ b/xbmc/addons/Addon.cpp +@@ -397,13 +397,48 @@ AddonVersion CAddon::GetDependencyVersion(const std::string &dependencyID) const + return AddonVersion("0.0.0"); + } + ++void LEAddonHook(const AddonPtr& addon, const LE_ADDON_CONTEXT context) { ++ ++ if (addon->Type() == ADDON_SERVICE) { ++ std::string contextStr; ++ char cmd[255]; ++ ++ switch (context) { ++ case LE_ADDON_ENABLED: ++ contextStr = "enable"; ++ break; ++ case LE_ADDON_DISABLED: ++ contextStr = "disable"; ++ break; ++ case LE_ADDON_POST_INSTALL: ++ contextStr = "post-install"; ++ break; ++ case LE_ADDON_PRE_UNINSTALL: ++ contextStr = "pre-uninstall"; ++ break; ++ default: ++ contextStr = StringUtils::Format("unknown(%d)", context); ++ break; ++ } ++ ++ snprintf(cmd, sizeof(cmd), "/usr/sbin/service-addon-wrapper %s %s %s", ++ contextStr.c_str(), addon->ID().c_str(), addon->Path().c_str()); ++ ++ system(cmd); ++ } ++} ++ + void OnEnabled(const AddonPtr& addon) + { ++ LEAddonHook(addon, LE_ADDON_ENABLED); ++ + addon->OnEnabled(); + } + + void OnDisabled(const AddonPtr& addon) + { ++ LEAddonHook(addon, LE_ADDON_DISABLED); ++ + addon->OnDisabled(); + } + +@@ -438,11 +476,15 @@ void OnPostInstall(const AddonPtr& addon, bool update, bool modal) + } + // OE + ++ LEAddonHook(addon, LE_ADDON_POST_INSTALL); ++ + addon->OnPostInstall(update, modal); + } + + void OnPreUnInstall(const AddonPtr& addon) + { ++ LEAddonHook(addon, LE_ADDON_PRE_UNINSTALL); ++ + addon->OnPreUnInstall(); + } + +diff --git a/xbmc/addons/Addon.h b/xbmc/addons/Addon.h +index 95f3f23437..23ad39116a 100644 +--- a/xbmc/addons/Addon.h ++++ b/xbmc/addons/Addon.h +@@ -43,6 +43,15 @@ void OnPostInstall(const AddonPtr& addon, bool update, bool modal); + void OnPreUnInstall(const AddonPtr& addon); + void OnPostUnInstall(const AddonPtr& addon); + ++typedef enum { ++ LE_ADDON_ENABLED, ++ LE_ADDON_DISABLED, ++ LE_ADDON_POST_INSTALL, ++ LE_ADDON_PRE_UNINSTALL, ++} LE_ADDON_CONTEXT; ++ ++void LEAddonHook(const AddonPtr& addon, const LE_ADDON_CONTEXT context); ++ + class CAddon : public IAddon + { + public: diff --git a/packages/mediacenter/kodi/patches/kodi-100.09-use-a-wrapper-to-setup-systemd-services.patch b/packages/mediacenter/kodi/patches/kodi-100.09-use-a-wrapper-to-setup-systemd-services.patch deleted file mode 100644 index 8b83bb8bca..0000000000 --- a/packages/mediacenter/kodi/patches/kodi-100.09-use-a-wrapper-to-setup-systemd-services.patch +++ /dev/null @@ -1,94 +0,0 @@ -From 4abf9ef52d9f5cf625e196935683eb35f150e7e9 Mon Sep 17 00:00:00 2001 -From: MilhouseVH -Date: Tue, 11 Jul 2017 17:46:48 +0100 -Subject: [PATCH] use a wrapper to setup systemd services - ---- - xbmc/addons/Addon.cpp | 38 ++++++++++++++++++++++++++++++++++++++ - xbmc/addons/Addon.h | 2 ++ - 2 files changed, 40 insertions(+) - -diff --git a/xbmc/addons/Addon.cpp b/xbmc/addons/Addon.cpp -index 45f42ad..5870328 100644 ---- a/xbmc/addons/Addon.cpp -+++ b/xbmc/addons/Addon.cpp -@@ -397,13 +397,34 @@ AddonVersion CAddon::GetDependencyVersion(const std::string &dependencyID) const - return AddonVersion("0.0.0"); - } - -+void CallOEWrapper(const std::string& ID, bool disable) -+{ -+ char cmd[255]; -+ snprintf(cmd, sizeof(cmd), "/usr/lib/libreelec/systemd-addon-wrapper %s %d", ID.c_str(), disable); -+ system(cmd); -+} -+ - void OnEnabled(const AddonPtr& addon) - { -+ AddonPtr localAddon; -+ -+ // OE: systemctl enable & start on addon enable -+ if (CServiceBroker::GetAddonMgr().GetAddon(addon->ID(), localAddon, ADDON_SERVICE)) -+ CallOEWrapper(addon->ID(), false); -+ // OE -+ - addon->OnEnabled(); - } - - void OnDisabled(const AddonPtr& addon) - { -+ AddonPtr localAddon; -+ -+ // OE: systemctl stop & disable on addon disable -+ if (CServiceBroker::GetAddonMgr().GetAddon(addon->ID(), localAddon, ADDON_SERVICE, false)) -+ CallOEWrapper(addon->ID(), true); -+ // OE -+ - addon->OnDisabled(); - } - -@@ -438,11 +459,28 @@ void OnPostInstall(const AddonPtr& addon, bool update, bool modal) - } - // OE - -+ AddonPtr localAddon; -+ -+ // OE: systemctl stop & disable / enable & start on addon upgrade -+ if (CServiceBroker::GetAddonMgr().GetAddon(addon->ID(), localAddon, ADDON_SERVICE)) -+ { -+ CallOEWrapper(addon->ID(), true); -+ CallOEWrapper(addon->ID(), false); -+ } -+ // OE -+ - addon->OnPostInstall(update, modal); - } - - void OnPreUnInstall(const AddonPtr& addon) - { -+ AddonPtr localAddon; -+ -+ // OE: systemctl stop & disable on addon uninstall -+ if (CServiceBroker::GetAddonMgr().GetAddon(addon->ID(), localAddon, ADDON_SERVICE)) -+ CallOEWrapper(addon->ID(), true); -+ // OE -+ - addon->OnPreUnInstall(); - } - -diff --git a/xbmc/addons/Addon.h b/xbmc/addons/Addon.h -index 95f3f23..5f2223c 100644 ---- a/xbmc/addons/Addon.h -+++ b/xbmc/addons/Addon.h -@@ -77,6 +77,8 @@ public: - const InfoMap& ExtraInfo() const override { return m_addonInfo.ExtraInfo(); } - const ADDONDEPS& GetDeps() const override { return m_addonInfo.GetDeps(); } - -+ void CallOEWrapper(const std::string& ID, bool disable); -+ - std::string FanArt() const override - { - auto it = m_addonInfo.Art().find("fanart"); --- -2.7.4 - diff --git a/packages/mediacenter/kodi/scripts/service-addon-wrapper b/packages/mediacenter/kodi/scripts/service-addon-wrapper new file mode 100755 index 0000000000..ced608c6ba --- /dev/null +++ b/packages/mediacenter/kodi/scripts/service-addon-wrapper @@ -0,0 +1,66 @@ +#!/bin/sh +################################################################################ +# This file is part of LibreELEC - https://www.libreelec.tv +# Copyright (C) 2017-present Team LibreELEC +# +# LibreELEC is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, or +# (at your option) any later version. +# +# LibreELEC is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with LibreELEC. If not, see . +################################################################################ + +if [ $# -ne 3 ] ; then + echo "$0 usage: context addon-id addon-path" + exit 1 +fi + +CONTEXT="$1" +ADDON_ID="$2" +ADDON_PATH="$3" + +if [ ! -d /storage/.config/system.d ] ; then + mkdir -p /storage/.config/system.d +fi + +SERVICE_FILE="${ADDON_PATH}/system.d/${ADDON_ID}.service" + +if [ -f "${SERVICE_FILE}" ] ; then + case "${CONTEXT}" in + enable) + systemctl enable "${SERVICE_FILE}" + chmod +x "${ADDON_PATH}/bin"/* + systemctl start "${ADDON_ID}.service" + ;; + disable | pre-uninstall) + systemctl stop "${ADDON_ID}.service" + systemctl disable "${ADDON_ID}.service" + ;; + post-install) + # post-install is triggered on update as well, + # make sure to stop and re-install service + systemctl stop "${ADDON_ID}.service" + systemctl disable "${ADDON_ID}.service" + systemctl enable "${SERVICE_FILE}" + chmod +x "${ADDON_PATH}/bin"/* + systemctl start "${ADDON_ID}.service" + ;; + restart) + systemctl restart "${ADDON_ID}.service" + ;; + reload) + systemctl reload "${ADDON_ID}.service" + ;; + *) + echo "$0: unknown service context $CONTEXT" + exit 1 + ;; + esac +fi diff --git a/packages/mediacenter/kodi/scripts/systemd-addon-wrapper b/packages/mediacenter/kodi/scripts/systemd-addon-wrapper deleted file mode 100755 index 32630c8ca0..0000000000 --- a/packages/mediacenter/kodi/scripts/systemd-addon-wrapper +++ /dev/null @@ -1,35 +0,0 @@ -#!/bin/sh -################################################################################ -# This file is part of OpenELEC - http://www.openelec.tv -# Copyright (C) 2009-2014 Stephan Raue (stephan@openelec.tv) -# -# OpenELEC is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, or -# (at your option) any later version. -# -# OpenELEC is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with OpenELEC. If not, see . -################################################################################ - -if [ ! -d /storage/.config/system.d ] ; then - mkdir -p /storage/.config/system.d -fi - -if [ -f "/storage/.kodi/addons/$1/system.d/$1.service" ] ; then - if [ "_$2" = "_1" ] ; then - # disable = true: cleanup - systemctl stop "$1.service" - systemctl disable "$1.service" - else - # disable = false: setup - systemctl enable "/storage/.kodi/addons/$1/system.d/$1.service" - chmod +x "/storage/.kodi/addons/$1/bin"/* - systemctl start "$1.service" - fi -fi From d3b73a8320c0ef84180e420249362aed3b92d5d9 Mon Sep 17 00:00:00 2001 From: Matthias Reichl Date: Tue, 5 Sep 2017 09:17:30 +0200 Subject: [PATCH 08/10] kmod: also support depmod on target Signed-off-by: Matthias Reichl --- packages/sysutils/kmod/package.mk | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/sysutils/kmod/package.mk b/packages/sysutils/kmod/package.mk index cb430be3d4..b398646a48 100644 --- a/packages/sysutils/kmod/package.mk +++ b/packages/sysutils/kmod/package.mk @@ -66,6 +66,7 @@ post_makeinstall_target() { ln -sf /usr/bin/kmod $INSTALL/usr/sbin/rmmod ln -sf /usr/bin/kmod $INSTALL/usr/sbin/modinfo ln -sf /usr/bin/kmod $INSTALL/usr/sbin/modprobe + ln -sf /usr/bin/kmod $INSTALL/usr/sbin/depmod mkdir -p $INSTALL/etc ln -sf /storage/.config/modprobe.d $INSTALL/etc/modprobe.d From ad9e8dc372a5048e88e9e941b8948bac7e5a3947 Mon Sep 17 00:00:00 2001 From: Matthias Reichl Date: Tue, 5 Sep 2017 09:17:30 +0200 Subject: [PATCH 09/10] Add support for kernel overlays Core Kernel modules are now installed to /usr/lib/kernel-overlays/base/lib/modules instead of /usr/lib/modules Firmware files are installed to /usr/lib/kernel-overlays/base/lib/firmware instead of /usr/lib/firmware Packages can choose to install their modules and/or firmwareinto a different overlay directory than base so they are not automatically enabled. A new systemd service kernel-overlays, which is run before any modules are loaded, adds overlays enabled via /storage/.cache/kernel-overlays/*.conf These conf files must either contain the name of a system overlay, which will then be searched for in /usr/lib/kernel-overlays/, or an absolute path starting with '/'. Overlaying is implemented by symlinking files from the overlays to /usr/lib/modules and /usr/lib/firmware as not all platforms support overlayfs. This overlaying system can also be used by addons to provide optional kernel modules and/or firmware by storing the absolute path to the addon directory in the conf file and shipping kernel modules in /lib/modules/. To save space only symlinks for modules matching the currently running kernel version are created as addons may want to ship modules for older kernel versions as well to be backward-compatible to older LibreELEC versions. Changes since v1: - fixup kernel-overlays-service: add before kmod-static-nodes.service Fix static device nodes for module autoloading not being created. - fixup kernel-overlays-service: fail if /usr/lib/modules exists - squash kernel overlays: use get_kernel_overlay_dir in linux/package.mk - Add support for firmware files via kernel overlays - config/functions: include kernel overlays in addon installation Signed-off-by: Matthias Reichl --- config/functions | 18 +++- .../brcmfmac_sdio-firmware-rpi/package.mk | 2 +- .../linux-firmware/dvb-firmware/package.mk | 2 +- .../iwlwifi-firmware/package.mk | 2 +- .../linux-firmware/misc-firmware/package.mk | 2 +- .../linux-firmware/wlan-firmware/package.mk | 2 +- packages/linux/package.mk | 6 +- packages/sysutils/busybox/scripts/init | 2 +- packages/sysutils/systemd/package.mk | 5 +- .../systemd/scripts/kernel-overlays-setup | 90 +++++++++++++++++++ .../systemd/system.d/kernel-overlays.service | 12 +++ scripts/image | 19 ++-- 12 files changed, 143 insertions(+), 19 deletions(-) create mode 100755 packages/sysutils/systemd/scripts/kernel-overlays-setup create mode 100644 packages/sysutils/systemd/system.d/kernel-overlays.service diff --git a/config/functions b/config/functions index 956c8f790d..dea1198531 100644 --- a/config/functions +++ b/config/functions @@ -143,17 +143,24 @@ kernel_version() { # get kernel module dir get_module_dir() { - basename $(ls -d $(get_build_dir linux)/.install_pkg/usr/lib/modules/*) + basename $(ls -d $(get_build_dir linux)/.install_pkg/usr/lib/kernel-overlays/base/lib/modules/*) +} + +# get base path to kernel modules and firmware +get_kernel_overlay_dir() { + echo "/usr/lib/kernel-overlays/${1:-base}" } # get full path to kernel module dir +# optional parameter specifies overlay level (default is base) get_full_module_dir() { - echo "/usr/lib/modules/$(get_module_dir)" + echo "$(get_kernel_overlay_dir $1)/lib/modules/$(get_module_dir)" } # get full path to firmware dir +# optional parameter specifies overlay level (default is base) get_full_firmware_dir() { - echo "/usr/lib/firmware" + echo "$(get_kernel_overlay_dir $1)/lib/firmware" } # get package's build dir @@ -192,6 +199,11 @@ install_binary_addon() { cp -L $PKG_BUILD/.install_pkg/usr/lib/$MEDIACENTER/addons/$addon_id/$addon_so $ADDON_BUILD/$addon_id/ chmod +x $ADDON_BUILD/$addon_id/$addon_so fi + + if [ -d $PKG_BUILD/.install_pkg/usr/lib/kernel-overlays/$addon_id ] ; then + mkdir -p $ADDON_BUILD/$addon_id/kernel-overlay + cp -PR $PKG_BUILD/.install_pkg/usr/lib/kernel-overlays/$addon_id/* $ADDON_BUILD/$addon_id/kernel-overlay + fi } install_addon_source() { diff --git a/packages/linux-firmware/brcmfmac_sdio-firmware-rpi/package.mk b/packages/linux-firmware/brcmfmac_sdio-firmware-rpi/package.mk index c11f7b6fd5..c8511dee00 100644 --- a/packages/linux-firmware/brcmfmac_sdio-firmware-rpi/package.mk +++ b/packages/linux-firmware/brcmfmac_sdio-firmware-rpi/package.mk @@ -36,7 +36,7 @@ make_target() { } makeinstall_target() { - DESTDIR=$INSTALL/usr ./install + DESTDIR=$INSTALL/$(get_kernel_overlay_dir) ./install } post_makeinstall_target() { diff --git a/packages/linux-firmware/dvb-firmware/package.mk b/packages/linux-firmware/dvb-firmware/package.mk index 69f623f96e..5ace21de9a 100644 --- a/packages/linux-firmware/dvb-firmware/package.mk +++ b/packages/linux-firmware/dvb-firmware/package.mk @@ -35,5 +35,5 @@ make_target() { } makeinstall_target() { - DESTDIR=$INSTALL/usr ./install + DESTDIR=$INSTALL/$(get_kernel_overlay_dir) ./install } diff --git a/packages/linux-firmware/iwlwifi-firmware/package.mk b/packages/linux-firmware/iwlwifi-firmware/package.mk index da732181f4..26caafbefb 100644 --- a/packages/linux-firmware/iwlwifi-firmware/package.mk +++ b/packages/linux-firmware/iwlwifi-firmware/package.mk @@ -36,5 +36,5 @@ make_target() { } makeinstall_target() { - DESTDIR=$INSTALL/usr ./install + DESTDIR=$INSTALL/$(get_kernel_overlay_dir) ./install } diff --git a/packages/linux-firmware/misc-firmware/package.mk b/packages/linux-firmware/misc-firmware/package.mk index 5bb1b688a8..fc2519be76 100644 --- a/packages/linux-firmware/misc-firmware/package.mk +++ b/packages/linux-firmware/misc-firmware/package.mk @@ -36,5 +36,5 @@ make_target() { } makeinstall_target() { - DESTDIR=$INSTALL/usr ./install + DESTDIR=$INSTALL/$(get_kernel_overlay_dir) ./install } diff --git a/packages/linux-firmware/wlan-firmware/package.mk b/packages/linux-firmware/wlan-firmware/package.mk index 65e2b63f9b..87e8df52f4 100644 --- a/packages/linux-firmware/wlan-firmware/package.mk +++ b/packages/linux-firmware/wlan-firmware/package.mk @@ -36,5 +36,5 @@ make_target() { } makeinstall_target() { - DESTDIR=$INSTALL/usr ./install + DESTDIR=$INSTALL/$(get_kernel_overlay_dir) ./install } diff --git a/packages/linux/package.mk b/packages/linux/package.mk index abedea8388..9bc0e1d766 100644 --- a/packages/linux/package.mk +++ b/packages/linux/package.mk @@ -194,9 +194,9 @@ pre_make_target() { make_target() { LDFLAGS="" make modules - LDFLAGS="" make INSTALL_MOD_PATH=$INSTALL/usr DEPMOD="$TOOLCHAIN/bin/depmod" modules_install - rm -f $INSTALL/usr/lib/modules/*/build - rm -f $INSTALL/usr/lib/modules/*/source + LDFLAGS="" make INSTALL_MOD_PATH=$INSTALL/$(get_kernel_overlay_dir) DEPMOD="$TOOLCHAIN/bin/depmod" modules_install + rm -f $INSTALL/$(get_kernel_overlay_dir)/lib/modules/*/build + rm -f $INSTALL/$(get_kernel_overlay_dir)/lib/modules/*/source ( cd $ROOT rm -rf $BUILD/initramfs diff --git a/packages/sysutils/busybox/scripts/init b/packages/sysutils/busybox/scripts/init index 69170c6986..4f72249796 100755 --- a/packages/sysutils/busybox/scripts/init +++ b/packages/sysutils/busybox/scripts/init @@ -1011,7 +1011,7 @@ mount --move /flash /sysroot/flash mount --move /storage /sysroot/storage - if [ ! -d "/sysroot/usr/lib/modules/$(uname -r)/" -a -f "/sysroot/usr/lib/systemd/systemd" ]; then + if [ ! -d "/sysroot/usr/lib/kernel-overlays/base/lib/modules/$(uname -r)/" -a -f "/sysroot/usr/lib/systemd/systemd" ]; then echo "" echo "NEVER TOUCH boot= in extlinux.conf / cmdline.txt!" echo "If you don't know what you are doing," diff --git a/packages/sysutils/systemd/package.mk b/packages/sysutils/systemd/package.mk index b57864f6e6..c08ac6e746 100644 --- a/packages/sysutils/systemd/package.mk +++ b/packages/sysutils/systemd/package.mk @@ -205,8 +205,10 @@ post_makeinstall_target() { cp $PKG_DIR/scripts/systemd-machine-id-setup $INSTALL/usr/bin cp $PKG_DIR/scripts/userconfig-setup $INSTALL/usr/bin - # provide 'halt', 'shutdown', 'reboot' & co. mkdir -p $INSTALL/usr/sbin + cp $PKG_DIR/scripts/kernel-overlays-setup $INSTALL/usr/sbin + + # provide 'halt', 'shutdown', 'reboot' & co. ln -sf /usr/bin/systemctl $INSTALL/usr/sbin/halt ln -sf /usr/bin/systemctl $INSTALL/usr/sbin/poweroff ln -sf /usr/bin/systemctl $INSTALL/usr/sbin/reboot @@ -255,5 +257,6 @@ post_install() { enable_service machine-id.service enable_service debugconfig.service enable_service userconfig.service + enable_service kernel-overlays.service enable_service hwdb.service } diff --git a/packages/sysutils/systemd/scripts/kernel-overlays-setup b/packages/sysutils/systemd/scripts/kernel-overlays-setup new file mode 100755 index 0000000000..27326a46c7 --- /dev/null +++ b/packages/sysutils/systemd/scripts/kernel-overlays-setup @@ -0,0 +1,90 @@ +#!/bin/sh +################################################################################ +# This file is part of LibreELEC - https://libreelec.tv +# Copyright (C) 2017-present Team LibreELEC +# +# LibreELEC is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, or +# (at your option) any later version. +# +# LibreELEC is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with LibreELEC. If not, see . +################################################################################ + +SYSTEM_OVERLAYS_DIR=/usr/lib/kernel-overlays +OVERLAY_CONFIG_DIR=/storage/.cache/kernel-overlays +KVER=$(uname -r) +MODULES_DIR="/var/lib/modules/${KVER}" +FIRMWARE_DIR="/var/lib/firmware" + +mkdir -p "${MODULES_DIR}" +mkdir -p "${FIRMWARE_DIR}" +mkdir -p "${OVERLAY_CONFIG_DIR}" + +log() { + echo "kernel-overlays-setup: $@" > /dev/kmsg +} + +apply_overlay() { + case "$1" in + /*) + modules_overlay_dir="${1}/lib/modules/${KVER}" + firmware_overlay_dir="${1}/lib/firmware" + ;; + *) + modules_overlay_dir="${SYSTEM_OVERLAYS_DIR}/${1}/lib/modules/${KVER}" + firmware_overlay_dir="${SYSTEM_OVERLAYS_DIR}/${1}/lib/firmware" + ;; + esac + + if [ -d "${modules_overlay_dir}" ] ; then + GOT_MODULE_OVERLAY="yes" + + if cp -rfs "${modules_overlay_dir}"/* "${MODULES_DIR}" ; then + log "added modules from $modules_overlay_dir" + else + log "failed to add modules from $modules_overlay_dir" + fi + fi + + if [ -d "${firmware_overlay_dir}" ] ; then + if cp -rfs "${firmware_overlay_dir}"/* "${FIRMWARE_DIR}" ; then + log "added firmware from $firmware_overlay_dir" + else + log "failed to add firmware from $firmware_overlay_dir" + fi + fi +} + +# setup system base modules + +log "setup base modules" +apply_overlay base + +# apply user-configured module overlays + +if [ -d "${OVERLAY_CONFIG_DIR}" ] ; then + log "adding overlays from ${OVERLAY_CONFIG_DIR}" + GOT_MODULE_OVERLAY="no" + + for conf in "${OVERLAY_CONFIG_DIR}/"*.conf ; do + if [ -e "$conf" ] ; then + log "processing conf $conf" + overlay=$(cat "$conf") + [ -n "$overlay" ] && apply_overlay "$overlay" + fi + done + + if [ "yes" = "$GOT_MODULE_OVERLAY" ] ; then + log "running depmod" + /usr/sbin/depmod -a + fi +fi + +log "done" diff --git a/packages/sysutils/systemd/system.d/kernel-overlays.service b/packages/sysutils/systemd/system.d/kernel-overlays.service new file mode 100644 index 0000000000..5d771ac3a0 --- /dev/null +++ b/packages/sysutils/systemd/system.d/kernel-overlays.service @@ -0,0 +1,12 @@ +[Unit] +Description=Create kernel modules tree from overlays +DefaultDependencies=no +After=var.mount +Before=systemd-udevd.service systemd-udev-trigger.service systemd-modules-load.service systemd-remount-fs.service swap.service machine-id.service kmod-static-nodes.service + +[Service] +Type=oneshot +ExecStart=/usr/sbin/kernel-overlays-setup + +[Install] +WantedBy=local-fs.target diff --git a/scripts/image b/scripts/image index e1674fbbd1..491f38dc72 100755 --- a/scripts/image +++ b/scripts/image @@ -215,20 +215,27 @@ if [ -n "$DEVICE" -a -d "$PROJECT_DIR/$PROJECT/devices/$DEVICE/filesystem" ]; th done fi -# run depmod -MODVER=$(basename $(ls -d $INSTALL/usr/lib/modules/*)) -find $INSTALL/usr/lib/modules/$MODVER/ -name *.ko | \ - sed -e "s,$INSTALL/usr/lib/modules/$MODVER/,," > $INSTALL/usr/lib/modules/$MODVER/modules.order -$TOOLCHAIN/bin/depmod -b $INSTALL/usr -a -e -F "$BUILD/linux-$(kernel_version)/System.map" $MODVER +# run depmod for base overlay modules +MODVER=$(basename $(ls -d $INSTALL/usr/lib/kernel-overlays/base/lib/modules/*)) +find $INSTALL/usr/lib/kernel-overlays/base/lib/modules/$MODVER/ -name *.ko | \ + sed -e "s,$INSTALL/usr/lib/kernel-overlays/base/lib/modules/$MODVER/,," \ + > $INSTALL/usr/lib/kernel-overlays/base/lib/modules/$MODVER/modules.order +$TOOLCHAIN/bin/depmod -b $INSTALL/usr/lib/kernel-overlays/base -a -e -F "$BUILD/linux-$(kernel_version)/System.map" $MODVER # strip kernel modules if [ "$TARGET_KERNEL_ARCH" = "arm64" -a "$TARGET_ARCH" = "arm" ]; then STRIP=$TOOLCHAIN/lib/gcc-linaro-aarch64-elf/bin/aarch64-elf-strip fi -for MOD in `find $INSTALL/usr/lib/modules/ -type f -name *.ko`; do +for MOD in `find $INSTALL/usr/lib/kernel-overlays/ -type f -name *.ko`; do $STRIP --strip-debug $MOD done +# symlink overlayed modules to /usr/lib/modules +ln -sT /var/lib/modules $INSTALL/usr/lib/modules + +# symlink overlayed firmware to /usr/lib/firmware +ln -sT /var/lib/firmware $INSTALL/usr/lib/firmware + # make target dir mkdir -p $TARGET_IMG rm -rf $TARGET_IMG/$IMAGE_NAME.kernel From 95bfafd60d293c8208accf57d01241a94a728349 Mon Sep 17 00:00:00 2001 From: Matthias Reichl Date: Tue, 5 Sep 2017 09:17:30 +0200 Subject: [PATCH 10/10] kodi: support kernel overlays in service addon wrapper update context is intended to be used on settings change. This can later be extended to support selecting between multiple overlays in an addon via config files in the addon userdata dir. Signed-off-by: Matthias Reichl --- .../kodi/scripts/service-addon-wrapper | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/packages/mediacenter/kodi/scripts/service-addon-wrapper b/packages/mediacenter/kodi/scripts/service-addon-wrapper index ced608c6ba..83aca484fa 100755 --- a/packages/mediacenter/kodi/scripts/service-addon-wrapper +++ b/packages/mediacenter/kodi/scripts/service-addon-wrapper @@ -64,3 +64,48 @@ if [ -f "${SERVICE_FILE}" ] ; then ;; esac fi + +if [ ! -d /storage/.cache/kernel-overlays ] ; then + mkdir -p /storage/.cache/kernel-overlays +fi + +# kernel-overlay addons built into the image have their +# files installed in the default /usr/lib/kernel-overlays +# location, not inside the kodi addon dir + +case "${ADDON_PATH}" in + /usr/share/kodi/addons/*) + OVERLAY_PATH="/usr/lib/kernel-overlays/${ADDON_ID}" + ;; + *) + OVERLAY_PATH="${ADDON_PATH}/kernel-overlay" + ;; +esac + +create_overlay_conf() { + rm -f "${OVERLAY_CONF}" + echo "${OVERLAY_PATH}" > "${OVERLAY_CONF}" +} + +if [ -d "${OVERLAY_PATH}" ] ; then + OVERLAY_CONF="/storage/.cache/kernel-overlays/50-${ADDON_ID}.conf" + + case "${CONTEXT}" in + enable | post-install ) + create_overlay_conf + ;; + disable | pre-uninstall ) + rm -f "${OVERLAY_CONF}" + ;; + update ) + if [ -e "${OVERLAY_CONF}" ] ; then + create_overlay_conf + fi + ;; + *) + echo "$0: unknown overlay context $CONTEXT" + exit 1 + ;; + esac + +fi