Merge pull request #1835 from HiassofT/le9-module-overlays

add support for optional kernel modules in image and from addons
This commit is contained in:
MilhouseVH 2017-10-12 20:04:22 +01:00 committed by GitHub
commit cda34c50c3
39 changed files with 504 additions and 284 deletions

View File

@ -143,7 +143,24 @@ kernel_version() {
# get kernel module dir # get kernel module dir
get_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 "$(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 "$(get_kernel_overlay_dir $1)/lib/firmware"
} }
# get package's build dir # get package's build dir
@ -172,16 +189,106 @@ get_pkg_variable() {
} }
install_binary_addon() { install_binary_addon() {
local addon_name="$1" addon_id="$2" addon_so local addon_id="$1" addon_so
mkdir -p $ADDON_BUILD/$addon_id/ 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) addon_so=$(xmlstarlet sel -t -v "/addon/extension/@library_linux" $ADDON_BUILD/$addon_id/addon.xml || :)
if [ -n "$addon_so" ]; then 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 chmod +x $ADDON_BUILD/$addon_id/$addon_so
fi 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() {
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 <import addon=\"$requires_addonname\" version=\"$requires_addonversion\" />"
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+="<screenshot>resources/$(basename $f)</screenshot>\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() { tolower() {

View File

@ -48,6 +48,6 @@ make_target() {
} }
makeinstall_target() { makeinstall_target() {
mkdir -p $INSTALL/usr/lib/modules/$(get_module_dir)/$PKG_NAME mkdir -p $INSTALL/$(get_full_module_dir)/$PKG_NAME
cp *.ko $INSTALL/usr/lib/modules/$(get_module_dir)/$PKG_NAME cp *.ko $INSTALL/$(get_full_module_dir)/$PKG_NAME
} }

View File

@ -47,6 +47,6 @@ make_target() {
} }
makeinstall_target() { makeinstall_target() {
mkdir -p $INSTALL/usr/lib/modules/$(get_module_dir)/$PKG_NAME mkdir -p $INSTALL/$(get_full_module_dir)/$PKG_NAME
cp *.ko $INSTALL/usr/lib/modules/$(get_module_dir)/$PKG_NAME cp *.ko $INSTALL/$(get_full_module_dir)/$PKG_NAME
} }

View File

@ -47,6 +47,6 @@ make_target() {
} }
makeinstall_target() { makeinstall_target() {
mkdir -p $INSTALL/usr/lib/modules/$(get_module_dir)/$PKG_NAME mkdir -p $INSTALL/$(get_full_module_dir)/$PKG_NAME
cp *.ko $INSTALL/usr/lib/modules/$(get_module_dir)/$PKG_NAME cp *.ko $INSTALL/$(get_full_module_dir)/$PKG_NAME
} }

View File

@ -48,6 +48,6 @@ make_target() {
} }
makeinstall_target() { makeinstall_target() {
mkdir -p $INSTALL/usr/lib/modules/$(get_module_dir)/$PKG_NAME mkdir -p $INSTALL/$(get_full_module_dir)/$PKG_NAME
cp *.ko $INSTALL/usr/lib/modules/$(get_module_dir)/$PKG_NAME cp *.ko $INSTALL/$(get_full_module_dir)/$PKG_NAME
} }

View File

@ -46,6 +46,6 @@ make_target() {
} }
makeinstall_target() { makeinstall_target() {
mkdir -p $INSTALL/usr/lib/modules/$(get_module_dir)/$PKG_NAME mkdir -p $INSTALL/$(get_full_module_dir)/$PKG_NAME
cp *.ko $INSTALL/usr/lib/modules/$(get_module_dir)/$PKG_NAME cp *.ko $INSTALL/$(get_full_module_dir)/$PKG_NAME
} }

View File

@ -42,6 +42,6 @@ make_target() {
} }
makeinstall_target() { makeinstall_target() {
mkdir -p $INSTALL/usr/lib/modules/$(get_module_dir)/bcm_sta mkdir -p $INSTALL/$(get_full_module_dir)/bcm_sta
cp *.ko $INSTALL/usr/lib/modules/$(get_module_dir)/$PKG_NAME cp *.ko $INSTALL/$(get_full_module_dir)/$PKG_NAME
} }

View File

@ -42,9 +42,9 @@ make_target() {
} }
makeinstall_target() { makeinstall_target() {
mkdir -p $INSTALL/usr/lib/modules/$(get_module_dir)/bcmdhd mkdir -p $INSTALL/$(get_full_module_dir)/bcmdhd
cp *.ko $INSTALL/usr/lib/modules/$(get_module_dir)/bcmdhd cp *.ko $INSTALL/$(get_full_module_dir)/bcmdhd
mkdir -p $INSTALL/usr/lib/firmware/brcm mkdir -p $INSTALL/$(get_full_firmware_dir)/brcm
cp $PKG_DIR/config/config.txt $INSTALL/usr/lib/firmware/brcm cp $PKG_DIR/config/config.txt $INSTALL/$(get_full_firmware_dir)/brcm
} }

View File

@ -58,8 +58,8 @@ pre_configure_target() {
makeinstall_target() { makeinstall_target() {
cd $PKG_BUILD cd $PKG_BUILD
mkdir -p $INSTALL/usr/lib/modules/$(get_module_dir)/hdhomerun mkdir -p $INSTALL/$(get_full_module_dir)/hdhomerun
cp kernel/*.ko $INSTALL/usr/lib/modules/$(get_module_dir)/hdhomerun/ cp kernel/*.ko $INSTALL/$(get_full_module_dir)/hdhomerun/
mkdir -p $INSTALL/usr/bin mkdir -p $INSTALL/usr/bin
cp -PR .$TARGET_NAME/userhdhomerun $INSTALL/usr/bin cp -PR .$TARGET_NAME/userhdhomerun $INSTALL/usr/bin

View File

@ -42,6 +42,6 @@ make_target() {
} }
makeinstall_target() { makeinstall_target() {
mkdir -p $INSTALL/usr/lib/modules/$(get_module_dir)/$PKG_NAME mkdir -p $INSTALL/$(get_full_module_dir)/$PKG_NAME
cp *.ko $INSTALL/usr/lib/modules/$(get_module_dir)/$PKG_NAME cp *.ko $INSTALL/$(get_full_module_dir)/$PKG_NAME
} }

View File

@ -57,6 +57,6 @@ make_target() {
} }
makeinstall_target() { makeinstall_target() {
mkdir -p $INSTALL/usr/lib/modules/$KERNEL_VER/updates mkdir -p $INSTALL/$(get_full_module_dir)/updates
find $PKG_BUILD/v4l/ -name \*.ko -exec cp {} $INSTALL/usr/lib/modules/$KERNEL_VER/updates \; find $PKG_BUILD/v4l/ -name \*.ko -exec cp {} $INSTALL/$(get_full_module_dir)/updates \;
} }

View File

@ -42,6 +42,6 @@ make_target() {
} }
makeinstall_target() { makeinstall_target() {
mkdir -p $INSTALL/usr/lib/modules/$(get_module_dir)/$PKG_NAME mkdir -p $INSTALL/$(get_full_module_dir)/$PKG_NAME
cp *.ko $INSTALL/usr/lib/modules/$(get_module_dir)/$PKG_NAME cp *.ko $INSTALL/$(get_full_module_dir)/$PKG_NAME
} }

View File

@ -38,13 +38,13 @@ make_target() {
} }
makeinstall_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 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 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 fi
mkdir -p $INSTALL/usr/lib/firmware mkdir -p $INSTALL/$(get_full_firmware_dir)
cp firmware/* $INSTALL/usr/lib/firmware cp firmware/* $INSTALL/$(get_full_firmware_dir)
} }

View File

@ -36,7 +36,7 @@ make_target() {
} }
makeinstall_target() { makeinstall_target() {
DESTDIR=$INSTALL/usr ./install DESTDIR=$INSTALL/$(get_kernel_overlay_dir) ./install
} }
post_makeinstall_target() { post_makeinstall_target() {

View File

@ -35,5 +35,5 @@ make_target() {
} }
makeinstall_target() { makeinstall_target() {
DESTDIR=$INSTALL/usr ./install DESTDIR=$INSTALL/$(get_kernel_overlay_dir) ./install
} }

View File

@ -42,7 +42,7 @@ make_target() {
} }
makeinstall_target() { makeinstall_target() {
mkdir -p $INSTALL/usr/lib/firmware/vpu mkdir -p $INSTALL/$(get_full_firmware_dir)/vpu
cp -P firmware/vpu/vpu_fw_imx6d.bin $INSTALL/usr/lib/firmware/vpu cp -P firmware/vpu/vpu_fw_imx6d.bin $INSTALL/$(get_full_firmware_dir)/vpu
cp -P firmware/vpu/vpu_fw_imx6q.bin $INSTALL/usr/lib/firmware/vpu cp -P firmware/vpu/vpu_fw_imx6q.bin $INSTALL/$(get_full_firmware_dir)/vpu
} }

View File

@ -36,5 +36,5 @@ make_target() {
} }
makeinstall_target() { makeinstall_target() {
DESTDIR=$INSTALL/usr ./install DESTDIR=$INSTALL/$(get_kernel_overlay_dir) ./install
} }

View File

@ -42,7 +42,7 @@ make_target() {
# Install additional miscellaneous drivers # Install additional miscellaneous drivers
makeinstall_target() { 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="${PKG_DIR}/firmwares/any.dat ${PKG_DIR}/firmwares/${TARGET_ARCH}.dat"
FW_LISTS+=" ${PROJECT_DIR}/${PROJECT}/${PKG_NAME}/firmwares/any.dat" FW_LISTS+=" ${PROJECT_DIR}/${PROJECT}/${PKG_NAME}/firmwares/any.dat"

View File

@ -36,5 +36,5 @@ make_target() {
} }
makeinstall_target() { makeinstall_target() {
DESTDIR=$INSTALL/usr ./install DESTDIR=$INSTALL/$(get_kernel_overlay_dir) ./install
} }

View File

@ -36,20 +36,20 @@ make_target() {
} }
makeinstall_target() { makeinstall_target() {
mkdir -p $INSTALL/usr/lib/firmware/brcm mkdir -p $INSTALL/$(get_full_firmware_dir)/brcm
# AP6255 # AP6255
cp -PR bcm_ampak/config/6255/fw_bcm43455c0_*.bin $INSTALL/usr/lib/firmware/brcm cp -PR bcm_ampak/config/6255/fw_bcm43455c0_*.bin $INSTALL/$(get_full_firmware_dir)/brcm
cp -P bcm_ampak/config/6255/nvram.txt $INSTALL/usr/lib/firmware/brcm/nvram_ap6255.txt 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/usr/lib/firmware/brcm/bcm4345c0.hcd cp -P bcm_ampak/config/6255/BT/BCM4345C0.hcd $INSTALL/$(get_full_firmware_dir)/brcm/bcm4345c0.hcd
# AP6330 # AP6330
cp -PR bcm_ampak/config/AP6330/Wi-Fi/fw_bcm40183b2*.bin $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/usr/lib/firmware/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/usr/lib/firmware/brcm cp -P bcm_ampak/config/AP6330/BT/bcm40183b2.hcd $INSTALL/$(get_full_firmware_dir)/brcm
# AP6335 # AP6335
cp -PR bcm_ampak/config/6335/fw_bcm4339a0_*.bin $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/usr/lib/firmware/brcm/nvram_ap6335.txt 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/usr/lib/firmware/brcm cp -P bcm_ampak/config/6335/BT/bcm4335c0.hcd $INSTALL/$(get_full_firmware_dir)/brcm
} }

View File

@ -36,5 +36,5 @@ make_target() {
} }
makeinstall_target() { makeinstall_target() {
DESTDIR=$INSTALL/usr ./install DESTDIR=$INSTALL/$(get_kernel_overlay_dir) ./install
} }

View File

@ -194,9 +194,9 @@ pre_make_target() {
make_target() { make_target() {
LDFLAGS="" make modules LDFLAGS="" make modules
LDFLAGS="" make INSTALL_MOD_PATH=$INSTALL/usr DEPMOD="$TOOLCHAIN/bin/depmod" modules_install LDFLAGS="" make INSTALL_MOD_PATH=$INSTALL/$(get_kernel_overlay_dir) DEPMOD="$TOOLCHAIN/bin/depmod" modules_install
rm -f $INSTALL/usr/lib/modules/*/build rm -f $INSTALL/$(get_kernel_overlay_dir)/lib/modules/*/build
rm -f $INSTALL/usr/lib/modules/*/source rm -f $INSTALL/$(get_kernel_overlay_dir)/lib/modules/*/source
( cd $ROOT ( cd $ROOT
rm -rf $BUILD/initramfs rm -rf $BUILD/initramfs
@ -247,7 +247,7 @@ makeinstall_init() {
mkdir -p $INSTALL/usr/lib/modules mkdir -p $INSTALL/usr/lib/modules
for i in $INITRAMFS_MODULES; do 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 if [ -n "$module" ]; then
echo $i >> $INSTALL/etc/modules echo $i >> $INSTALL/etc/modules
cp $module $INSTALL/usr/lib/modules/`basename $module` cp $module $INSTALL/usr/lib/modules/`basename $module`
@ -257,15 +257,15 @@ makeinstall_init() {
if [ "$UVESAFB_SUPPORT" = yes ]; then if [ "$UVESAFB_SUPPORT" = yes ]; then
mkdir -p $INSTALL/usr/lib/modules 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` cp $uvesafb $INSTALL/usr/lib/modules/`basename $uvesafb`
fi fi
} }
post_install() { post_install() {
mkdir -p $INSTALL/usr/lib/firmware/ mkdir -p $INSTALL/$(get_full_firmware_dir)/
ln -sf /storage/.config/firmware/ $INSTALL/usr/lib/firmware/updates ln -sf /storage/.config/firmware/ $INSTALL/$(get_full_firmware_dir)/updates
# bluez looks in /etc/firmware/ # bluez looks in /etc/firmware/
ln -sf /usr/lib/firmware/ $INSTALL/etc/firmware ln -sf /$(get_full_firmware_dir)/ $INSTALL/etc/firmware
} }

View File

@ -30,7 +30,7 @@ PKG_LONGDESC="inputstream.adaptive"
PKG_IS_ADDON="yes" PKG_IS_ADDON="yes"
addon() { addon() {
install_binary_addon $PKG_NAME $PKG_ADDON_ID install_binary_addon $PKG_ADDON_ID
mkdir -p $ADDON_BUILD/$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 cp -P $PKG_BUILD/.$TARGET_NAME/wvdecrypter/libssd_wv.so $ADDON_BUILD/$PKG_ADDON_ID

View File

@ -41,7 +41,7 @@ addon() {
for _ADDON in $PKG_BUILD/.install_pkg/usr/share/$MEDIACENTER/addons/* ; do for _ADDON in $PKG_BUILD/.install_pkg/usr/share/$MEDIACENTER/addons/* ; do
_ADDON_ID=$(basename $_ADDON) _ADDON_ID=$(basename $_ADDON)
install_binary_addon $_ADDON_ID $_ADDON_ID install_binary_addon $_ADDON_ID
MULTI_ADDONS="$MULTI_ADDONS $_ADDON_ID" MULTI_ADDONS="$MULTI_ADDONS $_ADDON_ID"
done done

View File

@ -271,8 +271,8 @@ post_makeinstall_target() {
cp $PKG_DIR/scripts/kodi-config $INSTALL/usr/lib/kodi cp $PKG_DIR/scripts/kodi-config $INSTALL/usr/lib/kodi
cp $PKG_DIR/scripts/kodi.sh $INSTALL/usr/lib/kodi cp $PKG_DIR/scripts/kodi.sh $INSTALL/usr/lib/kodi
mkdir -p $INSTALL/usr/lib/libreelec mkdir -p $INSTALL/usr/sbin
cp $PKG_DIR/scripts/systemd-addon-wrapper $INSTALL/usr/lib/libreelec cp $PKG_DIR/scripts/service-addon-wrapper $INSTALL/usr/sbin
mkdir -p $INSTALL/usr/bin mkdir -p $INSTALL/usr/bin
cp $PKG_DIR/scripts/cputemp $INSTALL/usr/bin cp $PKG_DIR/scripts/cputemp $INSTALL/usr/bin

View File

@ -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:

View File

@ -1,94 +0,0 @@
From 4abf9ef52d9f5cf625e196935683eb35f150e7e9 Mon Sep 17 00:00:00 2001
From: MilhouseVH <milhouseVH.github@nmacleod.com>
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

View File

@ -0,0 +1,111 @@
#!/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 <http://www.gnu.org/licenses/>.
################################################################################
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
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

View File

@ -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 <http://www.gnu.org/licenses/>.
################################################################################
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

View File

@ -1011,7 +1011,7 @@
mount --move /flash /sysroot/flash mount --move /flash /sysroot/flash
mount --move /storage /sysroot/storage 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 ""
echo "NEVER TOUCH boot= in extlinux.conf / cmdline.txt!" echo "NEVER TOUCH boot= in extlinux.conf / cmdline.txt!"
echo "If you don't know what you are doing," echo "If you don't know what you are doing,"

View File

@ -66,6 +66,7 @@ post_makeinstall_target() {
ln -sf /usr/bin/kmod $INSTALL/usr/sbin/rmmod 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/modinfo
ln -sf /usr/bin/kmod $INSTALL/usr/sbin/modprobe ln -sf /usr/bin/kmod $INSTALL/usr/sbin/modprobe
ln -sf /usr/bin/kmod $INSTALL/usr/sbin/depmod
mkdir -p $INSTALL/etc mkdir -p $INSTALL/etc
ln -sf /storage/.config/modprobe.d $INSTALL/etc/modprobe.d ln -sf /storage/.config/modprobe.d $INSTALL/etc/modprobe.d

View File

@ -205,8 +205,10 @@ post_makeinstall_target() {
cp $PKG_DIR/scripts/systemd-machine-id-setup $INSTALL/usr/bin cp $PKG_DIR/scripts/systemd-machine-id-setup $INSTALL/usr/bin
cp $PKG_DIR/scripts/userconfig-setup $INSTALL/usr/bin cp $PKG_DIR/scripts/userconfig-setup $INSTALL/usr/bin
# provide 'halt', 'shutdown', 'reboot' & co.
mkdir -p $INSTALL/usr/sbin 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/halt
ln -sf /usr/bin/systemctl $INSTALL/usr/sbin/poweroff ln -sf /usr/bin/systemctl $INSTALL/usr/sbin/poweroff
ln -sf /usr/bin/systemctl $INSTALL/usr/sbin/reboot ln -sf /usr/bin/systemctl $INSTALL/usr/sbin/reboot
@ -255,5 +257,6 @@ post_install() {
enable_service machine-id.service enable_service machine-id.service
enable_service debugconfig.service enable_service debugconfig.service
enable_service userconfig.service enable_service userconfig.service
enable_service kernel-overlays.service
enable_service hwdb.service enable_service hwdb.service
} }

View File

@ -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 <http://www.gnu.org/licenses/>.
################################################################################
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"

View File

@ -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

View File

@ -67,8 +67,8 @@ makeinstall_target() {
# rename to not conflicting with Mesa libGL.so # rename to not conflicting with Mesa libGL.so
cp -P libGL.so* $INSTALL/usr/lib/libGL_nvidia-legacy.so.1 cp -P libGL.so* $INSTALL/usr/lib/libGL_nvidia-legacy.so.1
mkdir -p $INSTALL/usr/lib/modules/$(get_module_dir)/nvidia mkdir -p $INSTALL/$(get_full_module_dir)/nvidia
ln -sf /var/lib/nvidia.ko $INSTALL/usr/lib/modules/$(get_module_dir)/nvidia/nvidia.ko ln -sf /var/lib/nvidia.ko $INSTALL/$(get_full_module_dir)/nvidia/nvidia.ko
mkdir -p $INSTALL/usr/lib/nvidia-legacy mkdir -p $INSTALL/usr/lib/nvidia-legacy
cp kernel/nvidia.ko $INSTALL/usr/lib/nvidia-legacy cp kernel/nvidia.ko $INSTALL/usr/lib/nvidia-legacy

View File

@ -70,10 +70,10 @@ makeinstall_target() {
# rename to not conflicting with Mesa libGL.so # rename to not conflicting with Mesa libGL.so
cp -P libGL.so.$PKG_VERSION $INSTALL/usr/lib/libGL_nvidia.so.1 cp -P libGL.so.$PKG_VERSION $INSTALL/usr/lib/libGL_nvidia.so.1
mkdir -p $INSTALL/usr/lib/modules/$(get_module_dir)/nvidia mkdir -p $INSTALL/$(get_full_module_dir)/nvidia
ln -sf /var/lib/nvidia.ko $INSTALL/usr/lib/modules/$(get_module_dir)/nvidia/nvidia.ko ln -sf /var/lib/nvidia.ko $INSTALL/$(get_full_module_dir)/nvidia/nvidia.ko
cp -P kernel/nvidia-uvm.ko $INSTALL/usr/lib/modules/$(get_module_dir)/nvidia cp -P kernel/nvidia-uvm.ko $INSTALL/$(get_full_module_dir)/nvidia
cp -P kernel/nvidia-modeset.ko $INSTALL/usr/lib/modules/$(get_module_dir)/nvidia cp -P kernel/nvidia-modeset.ko $INSTALL/$(get_full_module_dir)/nvidia
mkdir -p $INSTALL/usr/lib/nvidia mkdir -p $INSTALL/usr/lib/nvidia
cp -P kernel/nvidia.ko $INSTALL/usr/lib/nvidia cp -P kernel/nvidia.ko $INSTALL/usr/lib/nvidia

View File

@ -101,7 +101,7 @@ if [ "$PKG_IS_ADDON" = "yes" ] ; then
if [ "$(type -t addon)" = "function" ]; then if [ "$(type -t addon)" = "function" ]; then
addon addon
else else
install_binary_addon $PKG_NAME $PKG_ADDON_ID install_binary_addon $PKG_ADDON_ID
fi fi
# HACK for packages that provide multiple addons like screensavers.rsxs # HACK for packages that provide multiple addons like screensavers.rsxs

View File

@ -215,20 +215,27 @@ if [ -n "$DEVICE" -a -d "$PROJECT_DIR/$PROJECT/devices/$DEVICE/filesystem" ]; th
done done
fi fi
# run depmod # run depmod for base overlay modules
MODVER=$(basename $(ls -d $INSTALL/usr/lib/modules/*)) MODVER=$(basename $(ls -d $INSTALL/usr/lib/kernel-overlays/base/lib/modules/*))
find $INSTALL/usr/lib/modules/$MODVER/ -name *.ko | \ find $INSTALL/usr/lib/kernel-overlays/base/lib/modules/$MODVER/ -name *.ko | \
sed -e "s,$INSTALL/usr/lib/modules/$MODVER/,," > $INSTALL/usr/lib/modules/$MODVER/modules.order sed -e "s,$INSTALL/usr/lib/kernel-overlays/base/lib/modules/$MODVER/,," \
$TOOLCHAIN/bin/depmod -b $INSTALL/usr -a -e -F "$BUILD/linux-$(kernel_version)/System.map" $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 # strip kernel modules
if [ "$TARGET_KERNEL_ARCH" = "arm64" -a "$TARGET_ARCH" = "arm" ]; then if [ "$TARGET_KERNEL_ARCH" = "arm64" -a "$TARGET_ARCH" = "arm" ]; then
STRIP=$TOOLCHAIN/lib/gcc-linaro-aarch64-elf/bin/aarch64-elf-strip STRIP=$TOOLCHAIN/lib/gcc-linaro-aarch64-elf/bin/aarch64-elf-strip
fi 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 $STRIP --strip-debug $MOD
done 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 # make target dir
mkdir -p $TARGET_IMG mkdir -p $TARGET_IMG
rm -rf $TARGET_IMG/$IMAGE_NAME.kernel rm -rf $TARGET_IMG/$IMAGE_NAME.kernel

View File

@ -22,81 +22,10 @@
[ -n "$2" ] && PKG_ADDON_ID=$2 [ -n "$2" ] && PKG_ADDON_ID=$2
IFS=" " ADDON_DIRECTORY="$ADDON_BUILD/$PKG_ADDON_ID"
for i in $PKG_ADDON_REQUIRES; do
REQUIRES_ADDONNAME=`echo $i | cut -f1 -d ":"`
REQUIRES_ADDONVERSION=`echo $i | cut -f2 -d ":"`
REQUIRES="$REQUIRES\n <import addon=\"$REQUIRES_ADDONNAME\" version=\"$REQUIRES_ADDONVERSION\" />"
done
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 debug_strip "$ADDON_DIRECTORY"
cp config/addon/${PKG_ADDON_TYPE}.xml $ADDON_BUILD/$PKG_ADDON_ID/addon.xml
ADDONVER=$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"
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+="<screenshot>resources/$(basename $f)</screenshot>\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@|$ADDON_VERSION.$PKG_REV|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