mirror of
https://github.com/LibreELEC/LibreELEC.tv
synced 2025-09-24 19:46:01 +07:00
Compare commits
413 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1c135e5303 | ||
|
|
5586394c5d | ||
|
|
664907a263 | ||
|
|
9d5f0a978c | ||
|
|
37eb46b40d | ||
|
|
a27bc5ae79 | ||
|
|
2e6bdbb6ec | ||
|
|
dd8fc8e71b | ||
|
|
8cb3ef1a80 | ||
|
|
09381fc9d7 | ||
|
|
e3dd05ce25 | ||
|
|
a67adaac27 | ||
|
|
38c5dcc56c | ||
|
|
8c355cb452 | ||
|
|
7f8788c706 | ||
|
|
2a3c5fd8a5 | ||
|
|
a5064b2d18 | ||
|
|
aed7171ace | ||
|
|
184b769e4b | ||
|
|
c38540cb5e | ||
|
|
521e56b73c | ||
|
|
ea18b8b85d | ||
|
|
1bf43f8f44 | ||
|
|
0f98749370 | ||
|
|
27543fa547 | ||
|
|
04a6b86c37 | ||
|
|
15efe0470e | ||
|
|
78e23bdee6 | ||
|
|
9ea2e79639 | ||
|
|
ba053bfe26 | ||
|
|
e3ff241929 | ||
|
|
8dca6fefa3 | ||
|
|
d142c8df78 | ||
|
|
02052a9d9f | ||
|
|
0001f8e3a7 | ||
|
|
5075834823 | ||
|
|
6eb56353e1 | ||
|
|
6eb09a0fad | ||
|
|
9d04e03524 | ||
|
|
3d42b3a84c | ||
|
|
39c730cd94 | ||
|
|
545a3c8fef | ||
|
|
4add9c2c4e | ||
|
|
6f5c5ad073 | ||
|
|
b01743b2ea | ||
|
|
afaca60def | ||
|
|
f02c758161 | ||
|
|
8fa0ca9f46 | ||
|
|
be17d1a881 | ||
|
|
aac8699972 | ||
|
|
306f95e759 | ||
|
|
d9d3cc772f | ||
|
|
87f0d3fe32 | ||
|
|
778feb5727 | ||
|
|
fe5fadab7f | ||
|
|
bd5fdddff9 | ||
|
|
2a272e45bb | ||
|
|
1e5a905006 | ||
|
|
ccf5126912 | ||
|
|
ff37e94538 | ||
|
|
6b700cec52 | ||
|
|
fd01286926 | ||
|
|
b5595a3425 | ||
|
|
22e3b2072c | ||
|
|
15b9a35125 | ||
|
|
bcb40164ef | ||
|
|
fba0a0a555 | ||
|
|
a9ba436900 | ||
|
|
62b2f7d853 | ||
|
|
320955e602 | ||
|
|
c4b8e0fba5 | ||
|
|
bcbad5f53f | ||
|
|
e8cbfd8544 | ||
|
|
7eef75bce3 | ||
|
|
156db87de6 | ||
|
|
e564054dd2 | ||
|
|
f54de24693 | ||
|
|
6a668a4d6e | ||
|
|
3471983723 | ||
|
|
84288dfd96 | ||
|
|
c49c61f114 | ||
|
|
9fa76ef360 | ||
|
|
cc3e84c487 | ||
|
|
91854b56c0 | ||
|
|
e952674ef6 | ||
|
|
50d1681bcf | ||
|
|
78c5f3d37e | ||
|
|
42662da0ce | ||
|
|
e2f1868f5d | ||
|
|
5596ef7449 | ||
|
|
5cda64d6a1 | ||
|
|
c7625eb403 | ||
|
|
2d0bc2770d | ||
|
|
d9507c5d1a | ||
|
|
1d7e1cafa7 | ||
|
|
1d5ceba87c | ||
|
|
703c4ddaa0 | ||
|
|
5955423a1b | ||
|
|
7dc2832dfd | ||
|
|
a222d5d8db | ||
|
|
6616e9995a | ||
|
|
05b8058c98 | ||
|
|
3ab9e80fe7 | ||
|
|
d20c7bc0e9 | ||
|
|
e529657f48 | ||
|
|
a1100ce859 | ||
|
|
646e420c94 | ||
|
|
123b5db2ca | ||
|
|
5cba9a8374 | ||
|
|
967bb6328a | ||
|
|
1c61a2c625 | ||
|
|
a80cc28745 | ||
|
|
0e5a2c5f36 | ||
|
|
21c886f95f | ||
|
|
43ba8f3c85 | ||
|
|
4056094b51 | ||
|
|
db212b01df | ||
|
|
40e7ac1d3a | ||
|
|
b3c3f73f6c | ||
|
|
7a29858847 | ||
|
|
30c64498ae | ||
|
|
beafeb58fb | ||
|
|
c13b14ca00 | ||
|
|
ca7f0f6535 | ||
|
|
17f466aaea | ||
|
|
f8b66fc45a | ||
|
|
8199f35673 | ||
|
|
9f5368e6ea | ||
|
|
4aa47ed279 | ||
|
|
ce231f0700 | ||
|
|
cfc89de6a7 | ||
|
|
153f3d3658 | ||
|
|
b17719236c | ||
|
|
e5dc90f3c7 | ||
|
|
d3510b5a96 | ||
|
|
3fefed3376 | ||
|
|
f8c86fe50e | ||
|
|
e2059c7d5a | ||
|
|
6049513bc8 | ||
|
|
10f86efaab | ||
|
|
1eb1667808 | ||
|
|
34bc314c90 | ||
|
|
68d7776712 | ||
|
|
0039390c4c | ||
|
|
cecb05a5d7 | ||
|
|
f54d9091c3 | ||
|
|
645af48ea2 | ||
|
|
e0bf72d476 | ||
|
|
db017e9137 | ||
|
|
3739f6189e | ||
|
|
97a309f14f | ||
|
|
5364e44eec | ||
|
|
989622fe32 | ||
|
|
9f92e69844 | ||
|
|
663ffedb05 | ||
|
|
0d5bde5cb1 | ||
|
|
1fef9f9329 | ||
|
|
4902c19a46 | ||
|
|
04407050ef | ||
|
|
fe446d0370 | ||
|
|
86c09012b9 | ||
|
|
4ff4d2ca74 | ||
|
|
3e890efe59 | ||
|
|
cc1fd2257d | ||
|
|
8a1103d445 | ||
|
|
f68e3e72fa | ||
|
|
cd9403962b | ||
|
|
e05b618ec9 | ||
|
|
03253f885c | ||
|
|
074a450813 | ||
|
|
33dfe1b85f | ||
|
|
25f7154217 | ||
|
|
013b530345 | ||
|
|
a25dd368e4 | ||
|
|
16919f74df | ||
|
|
043b334218 | ||
|
|
2a66340077 | ||
|
|
988af35036 | ||
|
|
e82d2c8db1 | ||
|
|
5cb676e1c6 | ||
|
|
e994d9ca75 | ||
|
|
2a764c82c6 | ||
|
|
01bc69bfd0 | ||
|
|
797bada893 | ||
|
|
0f97dc22f7 | ||
|
|
6738b8a61e | ||
|
|
fceeb1b2e3 | ||
|
|
9d3282937c | ||
|
|
0050462a91 | ||
|
|
209800edee | ||
|
|
0cb36e0ec7 | ||
|
|
ecd7264ea4 | ||
|
|
23d30bbc43 | ||
|
|
5baab17211 | ||
|
|
8bc985b782 | ||
|
|
f3f6aeabd7 | ||
|
|
ecfbc2cbb6 | ||
|
|
48c7fbb928 | ||
|
|
e82aba47d3 | ||
|
|
c96642e72b | ||
|
|
8f1f6dfcfa | ||
|
|
006f797c57 | ||
|
|
98789b4a2f | ||
|
|
870c6050f6 | ||
|
|
5f4a2563be | ||
|
|
fc05726626 | ||
|
|
975b30d64d | ||
|
|
5a0591e51b | ||
|
|
4229e893b4 | ||
|
|
4a2ffb39a0 | ||
|
|
5cccd642e2 | ||
|
|
475e4829dd | ||
|
|
29328988d3 | ||
|
|
4269b7e2ee | ||
|
|
5d916fdd84 | ||
|
|
e3e5770a31 | ||
|
|
235c67ca05 | ||
|
|
e5c6cd69a5 | ||
|
|
5a9c9e2727 | ||
|
|
3a2a735298 | ||
|
|
5101f8090d | ||
|
|
710041d5d9 | ||
|
|
5d2454fe5f | ||
|
|
68f09abc06 | ||
|
|
2438e5a0b7 | ||
|
|
67d9be9c87 | ||
|
|
4b4f842fbd | ||
|
|
667ac4a718 | ||
|
|
db03bf5cf0 | ||
|
|
b75cc324f0 | ||
|
|
24dfda1f7c | ||
|
|
ddd6aea16f | ||
|
|
9cffe263f1 | ||
|
|
64fdc40a21 | ||
|
|
0cd5daa4e3 | ||
|
|
1b5da0f6c1 | ||
|
|
6cc5ae1e17 | ||
|
|
c3776ffb6b | ||
|
|
c85978a499 | ||
|
|
559e717326 | ||
|
|
09a0068c78 | ||
|
|
c9ee8849e9 | ||
|
|
3db71a02f4 | ||
|
|
601c1b43ed | ||
|
|
c8d3bbff46 | ||
|
|
a48aeb0100 | ||
|
|
6f1ff8b102 | ||
|
|
031971bab8 | ||
|
|
5861c69ceb | ||
|
|
fc50866af5 | ||
|
|
c82937d99d | ||
|
|
d4eee23479 | ||
|
|
c1e0fc7fce | ||
|
|
c96d5a4852 | ||
|
|
b7cd7fdfc5 | ||
|
|
e5109c952e | ||
|
|
d74973747a | ||
|
|
4bd7b1527d | ||
|
|
2b3f770e33 | ||
|
|
6536838edc | ||
|
|
001a3fa611 | ||
|
|
cbfdcbca2d | ||
|
|
6b8fe40614 | ||
|
|
0a7bb4ffeb | ||
|
|
6ac10dc4f8 | ||
|
|
701b80f7c5 | ||
|
|
d1640fe4c0 | ||
|
|
79788d560d | ||
|
|
2a7444beca | ||
|
|
a709cbbdac | ||
|
|
000cf1768c | ||
|
|
664eed9977 | ||
|
|
773d76e5aa | ||
|
|
15aebe1e00 | ||
|
|
57dcbbf631 | ||
|
|
b0ccfbc797 | ||
|
|
1719192ee1 | ||
|
|
751f49eec5 | ||
|
|
065799ec68 | ||
|
|
5c83a514f6 | ||
|
|
a8b12b1052 | ||
|
|
175b7ed46e | ||
|
|
cffbf60a6a | ||
|
|
ed4847e430 | ||
|
|
8a76bd17e7 | ||
|
|
03074b2a69 | ||
|
|
08474e7a7d | ||
|
|
e7ac31c253 | ||
|
|
bb6356da78 | ||
|
|
4c37dd51d8 | ||
|
|
f2ff582d14 | ||
|
|
ff7194584f | ||
|
|
6f80a63266 | ||
|
|
8b8fa8b2a1 | ||
|
|
97a6b1e063 | ||
|
|
5ce2a0bf78 | ||
|
|
d5cf40ff13 | ||
|
|
91b9547161 | ||
|
|
2b7d71f18e | ||
|
|
3bfc4fb706 | ||
|
|
1a63f585e1 | ||
|
|
68e4184c9a | ||
|
|
986c4987f1 | ||
|
|
092bd988c2 | ||
|
|
a1fe4c868a | ||
|
|
57f6504a55 | ||
|
|
36a98f18a0 | ||
|
|
64e85d7498 | ||
|
|
fdcd179f81 | ||
|
|
01e975b153 | ||
|
|
5e2bc84e27 | ||
|
|
4a5f3a22c2 | ||
|
|
0ad0fe764f | ||
|
|
1392e81d00 | ||
|
|
8d5111c208 | ||
|
|
cf1a273718 | ||
|
|
f9f53151b5 | ||
|
|
49ebd0f9ab | ||
|
|
54f729222c | ||
|
|
e8c6ad8164 | ||
|
|
7a16627f50 | ||
|
|
ff729852fe | ||
|
|
fa0aca6347 | ||
|
|
07734490f3 | ||
|
|
dcd0bbac62 | ||
|
|
3f0c2ebb56 | ||
|
|
d97ed1c987 | ||
|
|
da2c9c33ae | ||
|
|
bfb998c0f7 | ||
|
|
0cea576b22 | ||
|
|
4947b861ce | ||
|
|
fb123d5dac | ||
|
|
b6abdacf9c | ||
|
|
9004f896ff | ||
|
|
dd8e12d847 | ||
|
|
c43b5f2fbe | ||
|
|
4dd199dff2 | ||
|
|
5d0330e6ad | ||
|
|
84875e4f25 | ||
|
|
176222f38c | ||
|
|
e089b59f30 | ||
|
|
7616baf0e8 | ||
|
|
41bc6862e3 | ||
|
|
6b8a687fca | ||
|
|
17e869e877 | ||
|
|
83234e1b48 | ||
|
|
d9fd376c71 | ||
|
|
2b59e9b214 | ||
|
|
8af7ac11ad | ||
|
|
99cba92719 | ||
|
|
a46fb152a0 | ||
|
|
a83d11491b | ||
|
|
c81b7617c0 | ||
|
|
ab47f0baf7 | ||
|
|
c5d37bf33a | ||
|
|
1fbeb10f5f | ||
|
|
564850c626 | ||
|
|
eb9dcf60de | ||
|
|
8628b74a0e | ||
|
|
7daee4bacd | ||
|
|
63d5d8bfb2 | ||
|
|
0ef8a5b3b0 | ||
|
|
62cf3edf1a | ||
|
|
bc18fe7b3b | ||
|
|
084fcb1c44 | ||
|
|
33449d042f | ||
|
|
c6abc6f9ae | ||
|
|
f6473f65a8 | ||
|
|
a286f2d135 | ||
|
|
607ab8bb31 | ||
|
|
ead39e7478 | ||
|
|
f7ddb3e412 | ||
|
|
29d9d08e49 | ||
|
|
dd6f2cfe5c | ||
|
|
092e574f57 | ||
|
|
97e2c5204c | ||
|
|
4f5fee7653 | ||
|
|
bee4bb3f4a | ||
|
|
4159f97316 | ||
|
|
3be49f5d07 | ||
|
|
66b50feecd | ||
|
|
582e5e4fc7 | ||
|
|
cccd235148 | ||
|
|
847945e219 | ||
|
|
a2e51e3a7a | ||
|
|
abf6dc244f | ||
|
|
821ad52da0 | ||
|
|
779efbc35c | ||
|
|
9ad1a0ade3 | ||
|
|
e9af55d89a | ||
|
|
ddcfc575f6 | ||
|
|
4543ce351c | ||
|
|
09b0403f0e | ||
|
|
fe9b2e812a | ||
|
|
047797822c | ||
|
|
821447c6ee | ||
|
|
a60d05411b | ||
|
|
855ec8710c | ||
|
|
e14652e9db | ||
|
|
260e26ac4b | ||
|
|
8c2dda0d92 | ||
|
|
438266895d | ||
|
|
ff1e4f8565 | ||
|
|
c73614dc3d | ||
|
|
781e637b16 | ||
|
|
b6e9a63684 | ||
|
|
10665ba6b1 | ||
|
|
828ff0a987 | ||
|
|
0321837881 | ||
|
|
13b3252810 | ||
|
|
d2ea00a971 | ||
|
|
d2d351da83 | ||
|
|
22bd6ecacb |
3
.gitignore
vendored
3
.gitignore
vendored
@@ -12,6 +12,9 @@
|
||||
# mkpkg temp
|
||||
mkpkg-temp
|
||||
|
||||
# options
|
||||
/.libreelec
|
||||
|
||||
# private working directory
|
||||
/.work/
|
||||
|
||||
|
||||
@@ -66,33 +66,7 @@ package_worker() {
|
||||
|
||||
if [ "${isaddon}" = "yes" -a "${istarget}" = "yes" ]; then
|
||||
if [ ${result} -eq 0 ]; then
|
||||
(
|
||||
pkg_lock "${pkgname}" "packadd"
|
||||
pkg_lock_status "ACTIVE" "${pkgname}" "packadd"
|
||||
|
||||
# cleanup old install path
|
||||
rm -rf "${ADDON_BUILD}"
|
||||
|
||||
# install addon parts
|
||||
if pkg_call_exists addon; then
|
||||
pkg_call addon
|
||||
else
|
||||
install_binary_addon "${PKG_ADDON_ID}"
|
||||
fi
|
||||
|
||||
# HACK for packages that provide multiple addons like screensavers.rsxs
|
||||
# addon's addon() in package.mk should take care for exporting
|
||||
# MULTI_ADDONS="addon.boo1 addon.boo2 addon.boo3"
|
||||
if [ -n "${MULTI_ADDONS}" ] ; then
|
||||
for addon in ${MULTI_ADDONS}; do
|
||||
${SCRIPTS}/install_addon "${PKG_NAME}" "${addon}"
|
||||
done
|
||||
else
|
||||
${SCRIPTS}/install_addon "${PKG_NAME}" "${PKG_ADDON_ID}"
|
||||
fi
|
||||
|
||||
pkg_lock_status "UNLOCK" "${pkgname}" "packadd" "packed"
|
||||
) 2>&1 || result=1
|
||||
${SCRIPTS}/install_addon ${pkgname} 2>&1 && result=0 || result=1
|
||||
fi
|
||||
|
||||
if [ ${result} -ne 0 ]; then
|
||||
|
||||
@@ -86,7 +86,12 @@ VERBOSE="${VERBOSE:-yes}"
|
||||
# directory.
|
||||
CCACHE_CACHE_SIZE="10G"
|
||||
|
||||
# read options from $HOME if available
|
||||
# read local persistent options from $ROOT if available
|
||||
if [ -f "${ROOT}/.libreelec/options" ]; then
|
||||
. "${ROOT}/.libreelec/options"
|
||||
fi
|
||||
|
||||
# read global persistent options from $HOME if available
|
||||
if [ -f "${HOME}/.libreelec/options" ]; then
|
||||
. "${HOME}/.libreelec/options"
|
||||
fi
|
||||
|
||||
@@ -95,6 +95,7 @@ show_config() {
|
||||
config_message="$config_message\n - SAMBA server support:\t\t $SAMBA_SERVER"
|
||||
config_message="$config_message\n - SFTP server support:\t\t\t $SFTP_SERVER"
|
||||
config_message="$config_message\n - OpenVPN support:\t\t\t $OPENVPN_SUPPORT"
|
||||
config_message="$config_message\n - WireGuard support:\t\t\t $WIREGUARD_SUPPORT"
|
||||
|
||||
# OS configuration
|
||||
|
||||
|
||||
@@ -115,6 +115,9 @@
|
||||
# build and install OpenVPN support (yes / no)
|
||||
OPENVPN_SUPPORT="yes"
|
||||
|
||||
# build and install WireGuard support (yes / no)
|
||||
WIREGUARD_SUPPORT="yes"
|
||||
|
||||
# build and install diskmounter support (udevil)
|
||||
# this service provide auto mounting support for external drives in the
|
||||
# mediacenter also automount internally drives at boottime via udev (yes / no)
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
LIBREELEC_VERSION="devel"
|
||||
|
||||
# OS_VERSION: OS Version
|
||||
OS_VERSION="9.1"
|
||||
OS_VERSION="9.2"
|
||||
|
||||
# ADDON_VERSION: Addon version
|
||||
ADDON_VERSION="9.2.0"
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
# Copyright (C) 2017-present Team LibreELEC (https://libreelec.tv)
|
||||
|
||||
PKG_NAME="comskip"
|
||||
PKG_VERSION="14dffb241fac0126e261d4ff5bf929479e2592b6"
|
||||
PKG_SHA256="025bfd532aa6ccfd513f4d88f34ec95a9b5a34c763ed13c17433b36415e5bfd4"
|
||||
PKG_VERSION="84fcd7388394c95fc8a7e558642bbadb43134507"
|
||||
PKG_SHA256="4d45d30335ce1c28fb4de8865ada57f81de18d83a77950e9ab7c3ea26d24a883"
|
||||
PKG_LICENSE="GPL"
|
||||
PKG_SITE="http://www.kaashoek.com/comskip/"
|
||||
PKG_URL="https://github.com/erikkaashoek/Comskip/archive/${PKG_VERSION}.tar.gz"
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
# Copyright (C) 2018-present Team LibreELEC (https://libreelec.tv)
|
||||
|
||||
PKG_NAME="krb5"
|
||||
PKG_VERSION="1.17-final"
|
||||
PKG_SHA256="bd170f6aadea5d753cc9a93a3a915a5bde07bd3d294a00651ed647dcf964e867"
|
||||
PKG_VERSION="1.18.2-final"
|
||||
PKG_SHA256="3a92fb44d06a60a79c71a031a528246bf4cf3badad150a2b91dfa7c4702c6c19"
|
||||
PKG_LICENSE="MIT"
|
||||
PKG_SITE="http://web.mit.edu/kerberos/"
|
||||
PKG_URL="https://github.com/krb5/krb5/archive/krb5-$PKG_VERSION.tar.gz"
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
# Copyright (C) 2018-present Team LibreELEC (https://libreelec.tv)
|
||||
|
||||
PKG_NAME="lttng-ust"
|
||||
PKG_VERSION="2.10.4"
|
||||
PKG_SHA256="9df458fbfeac5a380672751decbd9b57356075acbfe106cb8820e803a94a0d96"
|
||||
PKG_VERSION="2.12.0"
|
||||
PKG_SHA256="ae9a7c7a9730deabacc6c690dcf1ba1c988f7f474326ba33d30b3f339d27a059"
|
||||
PKG_LICENSE="LGPLv2.1"
|
||||
PKG_SITE="https://lttng.org/"
|
||||
PKG_URL="https://github.com/lttng/lttng-ust/archive/v$PKG_VERSION.tar.gz"
|
||||
@@ -11,7 +11,7 @@ PKG_DEPENDS_TARGET="toolchain userspace-rcu"
|
||||
PKG_LONGDESC="LTTng is an open source tracing framework for Linux"
|
||||
PKG_TOOLCHAIN="autotools"
|
||||
|
||||
PKG_CONFIGURE_OPTS_TARGET="--disable-man-pages"
|
||||
PKG_CONFIGURE_OPTS_TARGET="--disable-man-pages --disable-numa"
|
||||
|
||||
makeinstall_target() {
|
||||
make install DESTDIR=$INSTALL $PKG_MAKEINSTALL_OPTS_TARGET
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
# Copyright (C) 2018-present Team LibreELEC (https://libreelec.tv)
|
||||
|
||||
PKG_NAME="userspace-rcu"
|
||||
PKG_VERSION="0.11.1"
|
||||
PKG_SHA256="a0ed8995edfbeac5f5eb2f152a8f3654040ecfc99a746bfe3da3bccf435b7d5d"
|
||||
PKG_VERSION="0.12.1"
|
||||
PKG_SHA256="19f31563db5078f47cabbb06bd7a3935a0964e31449efedd267f311ae79443c6"
|
||||
PKG_LICENSE="LGPLv2.1"
|
||||
PKG_SITE="http://liburcu.org"
|
||||
PKG_URL="https://github.com/urcu/userspace-rcu/archive/v$PKG_VERSION.tar.gz"
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
# Copyright (C) 2016-present Team LibreELEC (https://libreelec.tv)
|
||||
|
||||
PKG_NAME="imagemagick"
|
||||
PKG_VERSION="7.0.8-60"
|
||||
PKG_SHA256="a0ffa621051aa66b4eec919761d1a741aefea8b993acc2425e3ed5855c540156"
|
||||
PKG_VERSION="7.0.10-23"
|
||||
PKG_SHA256="27f8a24858cc5658aa07a13002a41d342b88e5c4e1917ff4d503dbbf8cbff91c"
|
||||
PKG_LICENSE="http://www.imagemagick.org/script/license.php"
|
||||
PKG_SITE="http://www.imagemagick.org/"
|
||||
PKG_URL="https://github.com/ImageMagick/ImageMagick/archive/$PKG_VERSION.tar.gz"
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
# Copyright (C) 2016-present Team LibreELEC (https://libreelec.tv)
|
||||
|
||||
PKG_NAME="libvpx"
|
||||
PKG_VERSION="1.8.0"
|
||||
PKG_SHA256="86df18c694e1c06cc8f83d2d816e9270747a0ce6abe316e93a4f4095689373f6"
|
||||
PKG_VERSION="1.8.1"
|
||||
PKG_SHA256="df19b8f24758e90640e1ab228ab4a4676ec3df19d23e4593375e6f3847dee03e"
|
||||
PKG_LICENSE="BSD"
|
||||
PKG_SITE="https://www.webmproject.org"
|
||||
PKG_URL="https://github.com/webmproject/libvpx/archive/v${PKG_VERSION}.tar.gz"
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
# Copyright (C) 2017-present Team LibreELEC (https://libreelec.tv)
|
||||
|
||||
PKG_NAME="x265"
|
||||
PKG_VERSION="3.0"
|
||||
PKG_SHA256="c5b9fc260cabbc4a81561a448f4ce9cad7218272b4011feabc3a6b751b2f0662"
|
||||
PKG_VERSION="3.2"
|
||||
PKG_SHA256="364d79bcd56116a9e070fdeb1d9d2aaef1a786b4970163fb56ff0991a183133b"
|
||||
PKG_ARCH="x86_64"
|
||||
PKG_LICENSE="GPL"
|
||||
PKG_SITE="https://www.videolan.org/developers/x265.html"
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
# Copyright (C) 2016-present Team LibreELEC (https://libreelec.tv)
|
||||
|
||||
PKG_NAME="ffmpegx"
|
||||
PKG_VERSION="4.1.4"
|
||||
PKG_SHA256="f1f049a82fcfbf156564e73a3935d7e750891fab2abf302e735104fd4050a7e1"
|
||||
PKG_VERSION="4.2.1"
|
||||
PKG_SHA256="cec7c87e9b60d174509e263ac4011b522385fd0775292e1670ecc1180c9bb6d4"
|
||||
PKG_LICENSE="LGPLv2.1+"
|
||||
PKG_SITE="https://ffmpeg.org"
|
||||
PKG_URL="https://ffmpeg.org/releases/ffmpeg-$PKG_VERSION.tar.xz"
|
||||
@@ -66,14 +66,14 @@ pre_configure_target() {
|
||||
if [[ "$TARGET_ARCH" = "x86_64" ]]; then
|
||||
PKG_FFMPEG_HW_ENCODERS_GENERIC="\
|
||||
`#Video encoders` \
|
||||
--enable-encoder=h264_nvenc \
|
||||
--enable-encoder=h264_vaapi \
|
||||
--enable-encoder=hevc_nvenc \
|
||||
--enable-encoder=hevc_vaapi \
|
||||
--enable-encoder=mjpeg_vaapi \
|
||||
--enable-encoder=mpeg2_vaapi \
|
||||
--enable-encoder=vp8_vaapi \
|
||||
--enable-encoder=vp9_vaapi \
|
||||
--disable-encoder=h264_nvenc \
|
||||
--disable-encoder=hevc_nvenc \
|
||||
\
|
||||
`#Video hwaccel` \
|
||||
--enable-hwaccel=h263_vaapi \
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
# Copyright (C) 2019-present Peter Vicman (peter.vicman@gmail.com)
|
||||
# Copyright (C) 2020-present Team LibreELEC (https://libreelec.tv)
|
||||
|
||||
PKG_NAME="apache-ant"
|
||||
PKG_VERSION="1.10.6"
|
||||
PKG_SHA256="a4adf371696089e1730d4f55fd4d0c6f3784dea1eee402fcc981f2330f8d6fc1"
|
||||
PKG_VERSION="1.10.7"
|
||||
PKG_SHA256="c8d68b396d9e44b49668bafe0c82f8c89497915254b5395d73d6f6e41d7a0e25"
|
||||
PKG_LICENSE="Apache License 2.0"
|
||||
PKG_SITE="https://ant.apache.org/"
|
||||
PKG_URL="https://archive.apache.org/dist/ant/source/${PKG_NAME}-${PKG_VERSION}-src.tar.xz"
|
||||
@@ -18,8 +19,11 @@ make_host() {
|
||||
./bootstrap.sh
|
||||
./bootstrap/bin/ant -f fetch.xml -Ddest=optional
|
||||
./build.sh -Ddist.dir=${PKG_BUILD}/binary dist
|
||||
|
||||
cp binary/bin/ant ${TOOLCHAIN}/bin
|
||||
cp -r binary/lib ${TOOLCHAIN}
|
||||
)
|
||||
}
|
||||
|
||||
makeinstall_host() {
|
||||
mkdir -p ${TOOLCHAIN}/bin
|
||||
cp binary/bin/ant ${TOOLCHAIN}/bin
|
||||
cp -r binary/lib ${TOOLCHAIN}
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
# Copyright (C) 2017-present Team LibreELEC (https://libreelec.tv)
|
||||
|
||||
PKG_NAME="rust"
|
||||
PKG_VERSION="1.36.0"
|
||||
PKG_VERSION="1.44.1"
|
||||
PKG_LICENSE="MIT"
|
||||
PKG_SITE="https://www.rust-lang.org"
|
||||
PKG_DEPENDS_TARGET="toolchain rustup.rs"
|
||||
@@ -10,40 +10,43 @@ PKG_LONGDESC="A systems programming language that prevents segfaults, and guaran
|
||||
PKG_TOOLCHAIN="manual"
|
||||
|
||||
make_target() {
|
||||
export CARGO_HOME="$TOOLCHAIN/.cargo"
|
||||
export CARGO_HOME="$PKG_BUILD/cargo"
|
||||
export RUSTUP_HOME="$CARGO_HOME"
|
||||
export PATH="$CARGO_HOME/bin:$PATH"
|
||||
rm -rf "$CARGO_HOME"
|
||||
$(get_build_dir rustup.rs)/rustup-init.sh --no-modify-path -y
|
||||
rustup default "$PKG_VERSION"
|
||||
case "$TARGET_ARCH" in
|
||||
aarch64)
|
||||
RUST_TRIPLE="aarch64-unknown-linux-gnu"
|
||||
RUST_TARGET_TRIPLE="aarch64-unknown-linux-gnu"
|
||||
;;
|
||||
arm)
|
||||
RUST_TRIPLE="arm-unknown-linux-gnueabihf"
|
||||
RUST_TARGET_TRIPLE="arm-unknown-linux-gnueabihf"
|
||||
;;
|
||||
x86_64)
|
||||
RUST_TRIPLE="x86_64-unknown-linux-gnu"
|
||||
RUST_TARGET_TRIPLE="x86_64-unknown-linux-gnu"
|
||||
;;
|
||||
esac
|
||||
if [ "$TARGET_ARCH" != "x86_64" ]; then
|
||||
rustup target add "$RUST_TRIPLE"
|
||||
fi
|
||||
"$(get_build_dir rustup.rs)/rustup-init.sh" \
|
||||
--default-toolchain "$PKG_VERSION" \
|
||||
--no-modify-path \
|
||||
--profile minimal \
|
||||
--target "$RUST_TARGET_TRIPLE" \
|
||||
-y
|
||||
|
||||
cat <<EOF >"$CARGO_HOME/config"
|
||||
[target.$RUST_TRIPLE]
|
||||
[build]
|
||||
target = "$RUST_TARGET_TRIPLE"
|
||||
|
||||
[target.$RUST_TARGET_TRIPLE]
|
||||
ar = "$AR"
|
||||
linker = "$CC"
|
||||
EOF
|
||||
|
||||
cat <<'EOF' >"$CARGO_HOME/env"
|
||||
export CARGO_HOME="$TOOLCHAIN/.cargo"
|
||||
export CARGO_TARGET_DIR="$PKG_BUILD/.$TARGET_NAME"
|
||||
cat <<EOF >"$CARGO_HOME/env"
|
||||
export CARGO_HOME="$CARGO_HOME"
|
||||
export CARGO_TARGET_DIR="\$PKG_BUILD/.\$TARGET_NAME"
|
||||
export PATH="$CARGO_HOME/bin:$PATH"
|
||||
export PKG_CONFIG_ALLOW_CROSS="1"
|
||||
export PKG_CONFIG_PATH="$PKG_CONFIG_LIBDIR"
|
||||
export RUSTUP_HOME="$CARGO_HOME"
|
||||
mkdir -p "$CARGO_TARGET_DIR"
|
||||
unset CFLAGS
|
||||
EOF
|
||||
|
||||
echo "CARGO_BUILD=\"cargo build --release --target $RUST_TRIPLE\"" \
|
||||
>>"$CARGO_HOME/env"
|
||||
}
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
# Copyright (C) 2018-present Team LibreELEC (https://libreelec.tv)
|
||||
|
||||
PKG_NAME="rustup.rs"
|
||||
PKG_VERSION="1.18.3"
|
||||
PKG_SHA256="9a2ae2c85bbbfc838b25d86d049bc677532950d78765725beabb8a61df1c2710"
|
||||
PKG_VERSION="1.22.1"
|
||||
PKG_SHA256="ad46cc624f318a9493aa62fc9612a450564fe20ba93c689e0ad856bff3c64c5b"
|
||||
PKG_LICENSE="MIT"
|
||||
PKG_SITE="https://www.rust-lang.org"
|
||||
PKG_URL="https://github.com/rust-lang-nursery/rustup.rs/archive/$PKG_VERSION.tar.gz"
|
||||
|
||||
@@ -3,12 +3,12 @@
|
||||
# Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv)
|
||||
|
||||
PKG_NAME="qtbase"
|
||||
PKG_VERSION="5.6.2"
|
||||
PKG_SHA256="2f6eae93c5d982fe0a387a01aeb3435571433e23e9d9d9246741faf51f1ee787"
|
||||
PKG_VERSION="5.14.0"
|
||||
PKG_SHA256="4ef921c0f208a1624439801da8b3f4344a3793b660ce1095f2b7f5c4246b9463"
|
||||
PKG_LICENSE="GPL"
|
||||
PKG_SITE="http://qt-project.org"
|
||||
PKG_URL="http://download.qt.io/official_releases/qt/5.6/$PKG_VERSION/submodules/$PKG_NAME-opensource-src-$PKG_VERSION.tar.xz"
|
||||
PKG_DEPENDS_TARGET="pcre zlib"
|
||||
PKG_URL="http://download.qt.io/archive/qt/${PKG_VERSION%.*}/$PKG_VERSION/submodules/$PKG_NAME-everywhere-src-$PKG_VERSION.tar.xz"
|
||||
PKG_DEPENDS_TARGET="freetype libjpeg-turbo libpng openssl sqlite zlib"
|
||||
PKG_LONGDESC="A cross-platform application and UI framework."
|
||||
|
||||
PKG_CONFIGURE_OPTS_TARGET="-prefix /usr
|
||||
@@ -17,39 +17,50 @@ PKG_CONFIGURE_OPTS_TARGET="-prefix /usr
|
||||
-device linux-libreelec-g++
|
||||
-opensource -confirm-license
|
||||
-release
|
||||
-optimize-size
|
||||
-strip
|
||||
-static
|
||||
-make libs
|
||||
-force-pkg-config
|
||||
-no-accessibility
|
||||
-no-sql-sqlite
|
||||
-no-sql-mysql
|
||||
-no-qml-debug
|
||||
-system-zlib
|
||||
-no-mtdev
|
||||
-no-gif
|
||||
-no-libpng
|
||||
-no-libjpeg
|
||||
-no-harfbuzz
|
||||
-no-openssl
|
||||
-no-libproxy
|
||||
-system-pcre
|
||||
-no-glib
|
||||
-no-pulseaudio
|
||||
-no-alsa
|
||||
-silent
|
||||
-no-cups
|
||||
-no-iconv
|
||||
-no-evdev
|
||||
-no-tslib
|
||||
-no-icu
|
||||
-no-strip
|
||||
-no-fontconfig
|
||||
-force-pkg-config
|
||||
-make libs
|
||||
-no-dbus
|
||||
-no-accessibility
|
||||
-no-glib
|
||||
-no-iconv
|
||||
-no-icu
|
||||
-qt-pcre
|
||||
-system-zlib
|
||||
-openssl-linked
|
||||
-no-libproxy
|
||||
-no-cups
|
||||
-no-fontconfig
|
||||
-system-freetype
|
||||
-no-harfbuzz
|
||||
-no-opengl
|
||||
-no-egl
|
||||
-no-eglfs
|
||||
-no-gbm
|
||||
-no-kms
|
||||
-no-linuxfb
|
||||
-no-xcb
|
||||
-no-feature-vnc
|
||||
-no-feature-sessionmanager
|
||||
-no-feature-easingcurve
|
||||
-no-feature-effects
|
||||
-no-feature-gestures
|
||||
-no-feature-itemmodel
|
||||
-no-libudev
|
||||
-no-evdev
|
||||
-no-libinput
|
||||
-no-gstreamer
|
||||
-no-eglfs"
|
||||
-no-mtdev
|
||||
-no-tslib
|
||||
-no-xkbcommon
|
||||
-no-gif
|
||||
-no-ico
|
||||
-system-libpng
|
||||
-system-libjpeg
|
||||
-no-sql-mysql
|
||||
-system-sqlite"
|
||||
|
||||
configure_target() {
|
||||
QMAKE_CONF_DIR="mkspecs/devices/linux-libreelec-g++"
|
||||
@@ -86,9 +97,3 @@ EOF
|
||||
unset CC CXX LD RANLIB AR AS CPPFLAGS CFLAGS LDFLAGS CXXFLAGS
|
||||
./configure ${PKG_CONFIGURE_OPTS_TARGET}
|
||||
}
|
||||
|
||||
post_makeinstall_target() {
|
||||
# Qt installs directly to $SYSROOT_PREFIX so don't rely on scripts/build fixing this up
|
||||
# PKG_ORIG_SYSROOT_PREFIX will be undefined when performing a legacy build
|
||||
sed -e "s:\(['= ]\)/usr:\\1${PKG_ORIG_SYSROOT_PREFIX:-${SYSROOT_PREFIX}}/usr:g" -i "${PKG_ORIG_SYSROOT_PREFIX:-${SYSROOT_PREFIX}}/usr/lib"/libQt*.la
|
||||
}
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
From 0650bbb7d79c6db34bc54dfb73320303d83a8f56 Mon Sep 17 00:00:00 2001
|
||||
From: Jonas Karlman <jonas@kwiboo.se>
|
||||
Date: Tue, 14 Jan 2020 21:35:57 +0000
|
||||
Subject: [PATCH] use sysroot path for pkgconfig and libtool
|
||||
|
||||
---
|
||||
mkspecs/features/qt_module.prf | 8 ++++----
|
||||
1 file changed, 4 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/mkspecs/features/qt_module.prf b/mkspecs/features/qt_module.prf
|
||||
index 828a9621b9..0f3472fffc 100644
|
||||
--- a/mkspecs/features/qt_module.prf
|
||||
+++ b/mkspecs/features/qt_module.prf
|
||||
@@ -275,12 +275,12 @@ load(qt_targets)
|
||||
host_build: \
|
||||
QMAKE_PKGCONFIG_LIBDIR = $$[QT_HOST_LIBS]
|
||||
else: \
|
||||
- QMAKE_PKGCONFIG_LIBDIR = $$[QT_INSTALL_LIBS/raw]
|
||||
+ QMAKE_PKGCONFIG_LIBDIR = $$[QT_INSTALL_LIBS]
|
||||
lib_bundle {
|
||||
- QMAKE_PKGCONFIG_INCDIR = $$[QT_INSTALL_LIBS/raw]/$${MODULE_INCNAME}.framework/Headers
|
||||
+ QMAKE_PKGCONFIG_INCDIR = $$[QT_INSTALL_LIBS]/$${MODULE_INCNAME}.framework/Headers
|
||||
QMAKE_PKGCONFIG_CFLAGS = -D$$MODULE_DEFINE
|
||||
} else {
|
||||
- QMAKE_PKGCONFIG_INCDIR = $$[QT_INSTALL_HEADERS/raw]
|
||||
+ QMAKE_PKGCONFIG_INCDIR = $$[QT_INSTALL_HEADERS]
|
||||
QMAKE_PKGCONFIG_CFLAGS = -D$$MODULE_DEFINE -I${includedir}/$$MODULE_INCNAME
|
||||
for(inc, MODULE_AUX_INCLUDES): \
|
||||
QMAKE_PKGCONFIG_CFLAGS += -I${includedir}/$$section(inc, /, 1, 1)
|
||||
@@ -308,7 +308,7 @@ load(qt_targets)
|
||||
host_build: \
|
||||
QMAKE_LIBTOOL_LIBDIR = $$[QT_HOST_LIBS]
|
||||
else: \
|
||||
- QMAKE_LIBTOOL_LIBDIR = "=$$[QT_INSTALL_LIBS/raw]"
|
||||
+ QMAKE_LIBTOOL_LIBDIR = "=$$[QT_INSTALL_LIBS]"
|
||||
!isEmpty(lib_replace0.match) {
|
||||
ltlib_replace0.match = $$lib_replace0.match
|
||||
ltlib_replace0.replace = $$QMAKE_LIBTOOL_LIBDIR/
|
||||
--
|
||||
2.17.1
|
||||
|
||||
@@ -1,111 +0,0 @@
|
||||
From 9f3efa796acb97ea4887468f1e8136e2e0711118 Mon Sep 17 00:00:00 2001
|
||||
From: Peter Levine <plevine457@gmail.com>
|
||||
Date: Fri, 13 May 2016 20:04:00 -0400
|
||||
Subject: [PATCH] Remove -isystem from qmake due to QTBUG-53375
|
||||
|
||||
Change-Id: If0595fc2f209a48585e7e9b9a61f11c0d4e0664f
|
||||
---
|
||||
mkspecs/common/clang.conf | 1 -
|
||||
mkspecs/common/gcc-base.conf | 1 -
|
||||
mkspecs/linux-icc/qmake.conf | 1 -
|
||||
qmake/generators/unix/unixmake2.cpp | 14 +++-----------
|
||||
qmake/generators/win32/mingw_make.cpp | 8 +-------
|
||||
5 files changed, 4 insertions(+), 21 deletions(-)
|
||||
|
||||
diff --git a/mkspecs/common/clang.conf b/mkspecs/common/clang.conf
|
||||
index ee9c1b8..fbe370e 100644
|
||||
--- a/mkspecs/common/clang.conf
|
||||
+++ b/mkspecs/common/clang.conf
|
||||
@@ -16,7 +16,6 @@ QMAKE_LINK_SHLIB = $$QMAKE_CXX
|
||||
CONFIG += clang_pch_style
|
||||
QMAKE_PCH_OUTPUT_EXT = .pch
|
||||
|
||||
-QMAKE_CFLAGS_ISYSTEM = -isystem
|
||||
QMAKE_CFLAGS_PRECOMPILE = -x c-header -c ${QMAKE_PCH_INPUT} -o ${QMAKE_PCH_OUTPUT}
|
||||
QMAKE_CFLAGS_USE_PRECOMPILE = -Xclang -include-pch -Xclang ${QMAKE_PCH_OUTPUT}
|
||||
QMAKE_CFLAGS_LTCG = -flto
|
||||
diff --git a/mkspecs/common/gcc-base.conf b/mkspecs/common/gcc-base.conf
|
||||
index 6e043f5..df8d314 100644
|
||||
--- a/mkspecs/common/gcc-base.conf
|
||||
+++ b/mkspecs/common/gcc-base.conf
|
||||
@@ -44,7 +44,6 @@ QMAKE_CFLAGS_DEBUG += -g
|
||||
QMAKE_CFLAGS_SHLIB += -fPIC
|
||||
QMAKE_CFLAGS_STATIC_LIB += -fPIC
|
||||
QMAKE_CFLAGS_APP += -fPIC
|
||||
-QMAKE_CFLAGS_ISYSTEM = -isystem
|
||||
QMAKE_CFLAGS_YACC += -Wno-unused -Wno-parentheses
|
||||
QMAKE_CFLAGS_HIDESYMS += -fvisibility=hidden
|
||||
QMAKE_CFLAGS_EXCEPTIONS_OFF += -fno-exceptions
|
||||
diff --git a/mkspecs/linux-icc/qmake.conf b/mkspecs/linux-icc/qmake.conf
|
||||
index 495fd15..935833b 100644
|
||||
--- a/mkspecs/linux-icc/qmake.conf
|
||||
+++ b/mkspecs/linux-icc/qmake.conf
|
||||
@@ -21,7 +21,6 @@ QMAKE_CFLAGS_DEBUG = -O0 -g
|
||||
QMAKE_CFLAGS_SHLIB = -fPIC
|
||||
QMAKE_CFLAGS_STATIC_LIB = $$QMAKE_CFLAGS_SHLIB
|
||||
QMAKE_CFLAGS_YACC =
|
||||
-QMAKE_CFLAGS_ISYSTEM = -isystem
|
||||
QMAKE_CFLAGS_THREAD = -D_REENTRANT
|
||||
QMAKE_CFLAGS_SPLIT_SECTIONS = -ffunction-sections
|
||||
QMAKE_CFLAGS_LTCG = -ipo -fno-fat-lto-objects
|
||||
diff --git a/qmake/generators/unix/unixmake2.cpp b/qmake/generators/unix/unixmake2.cpp
|
||||
index 9312f19..009a674 100644
|
||||
--- a/qmake/generators/unix/unixmake2.cpp
|
||||
+++ b/qmake/generators/unix/unixmake2.cpp
|
||||
@@ -176,16 +176,10 @@ UnixMakefileGenerator::writeMakeParts(QTextStream &t)
|
||||
t << "CXXFLAGS = " << var("QMAKE_CXXFLAGS") << " $(DEFINES)\n";
|
||||
t << "INCPATH =";
|
||||
{
|
||||
- QString isystem = var("QMAKE_CFLAGS_ISYSTEM");
|
||||
const ProStringList &incs = project->values("INCLUDEPATH");
|
||||
for(int i = 0; i < incs.size(); ++i) {
|
||||
const ProString &inc = incs.at(i);
|
||||
- if (inc.isEmpty())
|
||||
- continue;
|
||||
-
|
||||
- if (!isystem.isEmpty() && isSystemInclude(inc.toQString()))
|
||||
- t << ' ' << isystem << ' ';
|
||||
- else
|
||||
+ if (!inc.isEmpty())
|
||||
t << " -I";
|
||||
t << escapeFilePath(inc);
|
||||
}
|
||||
@@ -1328,10 +1322,8 @@ void UnixMakefileGenerator::init2()
|
||||
}
|
||||
|
||||
if (include_deps && project->isActiveConfig("gcc_MD_depends")) {
|
||||
- // use -MMD if we know about -isystem too
|
||||
- ProString MD_flag(project->values("QMAKE_CFLAGS_ISYSTEM").isEmpty() ? "-MD" : "-MMD");
|
||||
- project->values("QMAKE_CFLAGS") += MD_flag;
|
||||
- project->values("QMAKE_CXXFLAGS") += MD_flag;
|
||||
+ project->values("QMAKE_CFLAGS") += "-MD";
|
||||
+ project->values("QMAKE_CXXFLAGS") += "-MD";
|
||||
}
|
||||
}
|
||||
|
||||
diff --git a/qmake/generators/win32/mingw_make.cpp b/qmake/generators/win32/mingw_make.cpp
|
||||
index 382b10c..c9eebd8 100644
|
||||
--- a/qmake/generators/win32/mingw_make.cpp
|
||||
+++ b/qmake/generators/win32/mingw_make.cpp
|
||||
@@ -249,17 +249,11 @@ void MingwMakefileGenerator::writeIncPart(QTextStream &t)
|
||||
{
|
||||
t << "INCPATH = ";
|
||||
|
||||
- QString isystem = var("QMAKE_CFLAGS_ISYSTEM");
|
||||
const ProStringList &incs = project->values("INCLUDEPATH");
|
||||
for (ProStringList::ConstIterator incit = incs.begin(); incit != incs.end(); ++incit) {
|
||||
QString inc = (*incit).toQString();
|
||||
inc.replace(QRegExp("\\\\$"), "");
|
||||
-
|
||||
- if (!isystem.isEmpty() && isSystemInclude(inc))
|
||||
- t << isystem << ' ';
|
||||
- else
|
||||
- t << "-I";
|
||||
- t << escapeFilePath(inc) << ' ';
|
||||
+ t << "-I" << escapeFilePath(inc) << ' ';
|
||||
}
|
||||
t << endl;
|
||||
}
|
||||
--
|
||||
2.7.4
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
# Copyright (C) 2018-present Team LibreELEC (https://libreelec.tv)
|
||||
|
||||
PKG_NAME="tvh-dtv-scan-tables"
|
||||
PKG_VERSION="68f86b42272fc364cdd53d7cfeaa2a78d676dbfa"
|
||||
PKG_SHA256="2bb102094696bbaf440b9319a9e8a4c93e2ecbcf2d2c556fb719b1febf1a7d3b"
|
||||
PKG_VERSION="6bb0a70a0dcb97d5457c1ef4a7ccce634ea419b0"
|
||||
PKG_SHA256="a5f375d28e52ff3f527fecb7968f3ede6bc2e128d1ad78537ab4f0f7844edb45"
|
||||
PKG_LICENSE="GPL"
|
||||
PKG_SITE="https://github.com/tvheadend"
|
||||
PKG_URL="https://github.com/tvheadend/dtv-scan-tables/archive/$PKG_VERSION.tar.gz"
|
||||
|
||||
@@ -1,3 +1,9 @@
|
||||
103
|
||||
- add flag for dark mode
|
||||
|
||||
102
|
||||
- support for latest Chrome
|
||||
|
||||
101
|
||||
- fix download url
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
PKG_NAME="chrome"
|
||||
PKG_VERSION="1.0"
|
||||
PKG_REV="101"
|
||||
PKG_REV="103"
|
||||
PKG_ARCH="x86_64"
|
||||
PKG_LICENSE="Custom"
|
||||
PKG_SITE="http://www.google.com/chrome"
|
||||
@@ -66,6 +66,7 @@ addon() {
|
||||
|
||||
# libxcb
|
||||
cp -PL $(get_build_dir chrome-libxcb)/.$TARGET_NAME/src/.libs/libxcb.so.1 $ADDON_BUILD/$PKG_ADDON_ID/lib
|
||||
cp -PL $(get_build_dir chrome-libxcb)/.$TARGET_NAME/src/.libs/libxcb-dri3.so.0 $ADDON_BUILD/$PKG_ADDON_ID/lib
|
||||
|
||||
# libXcomposite
|
||||
cp -PL $(get_build_dir chrome-libXcomposite)/.$TARGET_NAME/src/.libs/libXcomposite.so.1 $ADDON_BUILD/$PKG_ADDON_ID/lib
|
||||
@@ -98,5 +99,4 @@ addon() {
|
||||
|
||||
# unclutter
|
||||
cp -P $(get_build_dir unclutter)/.install_pkg/usr/bin/unclutter $ADDON_BUILD/$PKG_ADDON_ID/bin
|
||||
|
||||
}
|
||||
|
||||
@@ -77,6 +77,12 @@ if [ ! -z $ALSA_DEVICE ]; then
|
||||
chrome_OPTS="$chrome_OPTS --alsa-output-device=$ALSA_DEVICE"
|
||||
fi
|
||||
|
||||
# dark mode
|
||||
if [ "$DARK_MODE" == "true" ]
|
||||
then
|
||||
chrome_OPTS="$chrome_OPTS --force-dark-mode"
|
||||
fi
|
||||
|
||||
# HACK!!! to get sound at Chrome stop pulseaudio
|
||||
systemctl stop pulseaudio
|
||||
|
||||
|
||||
@@ -35,6 +35,7 @@ def startchrome(args):
|
||||
new_env['VAAPI_MODE'] = __addon__.getSetting('VAAPI_MODE')
|
||||
new_env['WINDOW_MODE'] = __addon__.getSetting('WINDOW_MODE')
|
||||
new_env['RASTER_MODE'] = __addon__.getSetting('RASTER_MODE')
|
||||
new_env['DARK_MODE'] = __addon__.getSetting('DARK_MODE')
|
||||
|
||||
new_env['ALSA_DEVICE'] = ''
|
||||
if __addon__.getSetting('USE_CUST_AUDIODEVICE') == 'true':
|
||||
|
||||
@@ -44,3 +44,7 @@ msgstr ""
|
||||
msgctxt "#30009"
|
||||
msgid "Hide Cursor"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#30010"
|
||||
msgid "Dark Mode"
|
||||
msgstr ""
|
||||
|
||||
@@ -11,5 +11,6 @@
|
||||
<setting id="USE_CUST_AUDIODEVICE" type="bool" label="30007" default="false" />
|
||||
<setting id="CUST_AUDIODEVICE_STR" type="text" label="30008" visible="eq(-1,true)" subsetting="true" default="" />
|
||||
<setting id="HIDE_CURSOR" type="bool" label="30009" default="false" />
|
||||
<setting id="DARK_MODE" type="bool" label="30010" default="false" />
|
||||
</category>
|
||||
</settings>
|
||||
|
||||
@@ -7,4 +7,5 @@
|
||||
<setting id="USE_CUST_AUDIODEVICE" default="true">false</setting>
|
||||
<setting id="VAAPI_MODE" default="true">intel</setting>
|
||||
<setting id="WINDOW_MODE" default="true">maximized</setting>
|
||||
<setting id="DARK_MODE" default="true">false</setting>
|
||||
</settings>
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
# Copyright (C) 2009-2016 Stephan Raue (stephan@openelec.tv)
|
||||
# Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv)
|
||||
|
||||
PKG_NAME="sundtek-mediatv"
|
||||
PKG_VERSION="7.0"
|
||||
@@ -8,7 +9,7 @@ PKG_ARCH="any"
|
||||
PKG_LICENSE="nonfree"
|
||||
PKG_SITE="http://support.sundtek.com/"
|
||||
PKG_URL=""
|
||||
PKG_DEPENDS_TARGET=""
|
||||
PKG_DEPENDS_TARGET="xmlstarlet:host p7zip:host"
|
||||
PKG_SECTION="driver/dvb"
|
||||
PKG_SHORTDESC="Sundtek MediaTV: a Linux driver to add support for SUNDTEK USB DVB devices"
|
||||
PKG_LONGDESC="Install this to add support for Sundtek USB DVB devices."
|
||||
|
||||
@@ -1,8 +0,0 @@
|
||||
102
|
||||
- rebuild for 8.1
|
||||
|
||||
101
|
||||
- switched to new official Kodinerds repo
|
||||
|
||||
100
|
||||
- initial LibreELEC version
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 68 KiB |
@@ -1,30 +0,0 @@
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
# Copyright (C) 2016-present Team LibreELEC (https://libreelec.tv)
|
||||
|
||||
PKG_NAME="repository.kodinerds"
|
||||
PKG_VERSION="9.0"
|
||||
PKG_REV="103"
|
||||
PKG_ARCH="any"
|
||||
PKG_LICENSE="GPL"
|
||||
PKG_SITE="http://www.kodinerds.net"
|
||||
PKG_URL=""
|
||||
PKG_DEPENDS_TARGET="toolchain"
|
||||
PKG_SECTION=""
|
||||
PKG_SHORTDESC="Kodinerds add-on repository"
|
||||
PKG_LONGDESC="Kodinerds add-on repository"
|
||||
PKG_TOOLCHAIN="manual"
|
||||
|
||||
PKG_IS_ADDON="yes"
|
||||
PKG_ADDON_NAME="Kodinerds Repository"
|
||||
PKG_ADDON_TYPE="xbmc.addon.repository"
|
||||
|
||||
make_target() {
|
||||
sed -e "s|@PKG_VERSION@|$PKG_VERSION|g" \
|
||||
-e "s|@PKG_REV@|$PKG_REV|g" \
|
||||
-i addon.xml
|
||||
}
|
||||
|
||||
addon() {
|
||||
mkdir -p $ADDON_BUILD/$PKG_ADDON_ID
|
||||
cp -R $PKG_BUILD/* $ADDON_BUILD/$PKG_ADDON_ID
|
||||
}
|
||||
@@ -1,26 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<addon id="repository.kodinerds"
|
||||
name="Kodinerds Add-ons"
|
||||
version="@PKG_VERSION@.@PKG_REV@"
|
||||
provider-name="Kodinerds.net">
|
||||
<requires>
|
||||
<import addon="xbmc.addon" version="12.0.0"/>
|
||||
</requires>
|
||||
<extension point="xbmc.addon.repository" name="L0RE">
|
||||
<info compressed="true">https://raw.githubusercontent.com/kodinerds/repo/master/addons.xml</info>
|
||||
<checksum>https://raw.githubusercontent.com/kodinerds/repo/master/addons.xml.md5</checksum>
|
||||
<datadir zip="true">https://raw.githubusercontent.com/kodinerds/repo/master/</datadir>
|
||||
</extension>
|
||||
<extension point="xbmc.addon.metadata">
|
||||
<summary>Install add-ons from Kodinerds</summary>
|
||||
<summary lang="de">Installiere Add-ons von Kodinerds</summary>
|
||||
<description>Download and install add-ons from Kodinerds repository.</description>
|
||||
<description lang="de">Downloade und installiere Add-ons von der Kodinerds Repository.</description>
|
||||
<disclaimer></disclaimer>
|
||||
<platform>all</platform>
|
||||
<assets>
|
||||
<icon>resources/icon.png</icon>
|
||||
<fanart>resources/fanart.png</fanart>
|
||||
</assets>
|
||||
</extension>
|
||||
</addon>
|
||||
@@ -1,5 +1,6 @@
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
# Copyright (C) 2009-2016 Stephan Raue (stephan@openelec.tv)
|
||||
# Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv)
|
||||
|
||||
PKG_NAME="script.config.vdr"
|
||||
PKG_VERSION="0345a2a3b98de48cbbaf77768ca6c9289f531e2b"
|
||||
@@ -9,7 +10,7 @@ PKG_ARCH="any"
|
||||
PKG_LICENSE="OSS"
|
||||
PKG_SITE="https://libreelec.tv"
|
||||
PKG_URL="https://github.com/LibreELEC/script.config.vdr/archive/$PKG_VERSION.tar.gz"
|
||||
PKG_DEPENDS_TARGET=""
|
||||
PKG_DEPENDS_TARGET="xmlstarlet:host p7zip:host"
|
||||
PKG_SECTION=""
|
||||
PKG_SHORTDESC="script.config.vdr"
|
||||
PKG_LONGDESC="script.config.vdr"
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
102
|
||||
- Avoid LibreELEC Settings addon crash
|
||||
|
||||
101
|
||||
- Fix log errors
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
PKG_NAME="bluetooth-audio"
|
||||
PKG_VERSION="0"
|
||||
PKG_REV="101"
|
||||
PKG_REV="102"
|
||||
PKG_ARCH="any"
|
||||
PKG_LICENSE="GPL"
|
||||
PKG_SITE=""
|
||||
|
||||
110
packages/addons/service/bluetooth-audio/source/bin/dbusservice.py
Executable file
110
packages/addons/service/bluetooth-audio/source/bin/dbusservice.py
Executable file
@@ -0,0 +1,110 @@
|
||||
#!/usr/bin/python2
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
# Copyright (C) 2016-present Team LibreELEC (https://libreelec.tv)
|
||||
|
||||
from __future__ import print_function
|
||||
import sys
|
||||
import dbus
|
||||
import dbus.mainloop.glib
|
||||
import gobject
|
||||
import time
|
||||
|
||||
gobject.threads_init()
|
||||
|
||||
class BluetoothAudioClient(object):
|
||||
|
||||
def __init__(self):
|
||||
|
||||
self.devices = {}
|
||||
self.signal_added = None
|
||||
self.signal_removed = None
|
||||
|
||||
self._setup_loop()
|
||||
self._setup_bus()
|
||||
self._setup_signals()
|
||||
|
||||
def quit(self):
|
||||
|
||||
self.signal_added.remove()
|
||||
self.signal_removed.remove()
|
||||
|
||||
self._loop.quit()
|
||||
|
||||
def _setup_loop(self):
|
||||
|
||||
self._loop = gobject.MainLoop()
|
||||
|
||||
def run(self):
|
||||
self._loop.run()
|
||||
|
||||
def _setup_bus(self):
|
||||
|
||||
dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
|
||||
self._bus = dbus.SystemBus()
|
||||
|
||||
def _setup_signals(self):
|
||||
|
||||
self.signal_added = self._bus.add_signal_receiver(handler_function=self.switch_audio,
|
||||
signal_name='InterfacesAdded',
|
||||
dbus_interface='org.freedesktop.DBus.ObjectManager',
|
||||
bus_name='org.bluez',
|
||||
member_keyword='signal')
|
||||
|
||||
self.signal_removed = self._bus.add_signal_receiver(handler_function=self.switch_audio,
|
||||
signal_name='InterfacesRemoved',
|
||||
dbus_interface='org.freedesktop.DBus.ObjectManager',
|
||||
bus_name='org.bluez',
|
||||
member_keyword='signal')
|
||||
|
||||
def switch_audio(self, *args, **kwargs):
|
||||
|
||||
device_path = args[0]
|
||||
|
||||
try:
|
||||
if kwargs['signal'] == 'InterfacesAdded':
|
||||
|
||||
self.devices[device_path] = {
|
||||
'Connected': '',
|
||||
'Device': '',
|
||||
'Class': '',
|
||||
}
|
||||
|
||||
device = self._bus.get_object('org.bluez', device_path)
|
||||
device_iface = dbus.Interface(device, dbus.PROPERTIES_IFACE)
|
||||
self.devices[device_path]['Device'] = device_iface.Get('org.bluez.MediaTransport1', 'Device')
|
||||
|
||||
audio_device_path = self._bus.get_object('org.bluez', self.devices[device_path]['Device'])
|
||||
audio_device_iface = dbus.Interface(audio_device_path, dbus.PROPERTIES_IFACE)
|
||||
self.devices[device_path]['Class'] = audio_device_iface.Get('org.bluez.Device1', 'Class')
|
||||
self.devices[device_path]['Connected'] = audio_device_iface.Get('org.bluez.Device1', 'Connected')
|
||||
|
||||
if self.devices[device_path]['Class'] & (1 << 21):
|
||||
print('bluetooth')
|
||||
sys.stdout.flush()
|
||||
|
||||
elif kwargs['signal'] == 'InterfacesRemoved':
|
||||
if self.devices[device_path]['Device'] is not None and self.devices[device_path]['Class'] & (1 << 21):
|
||||
audio_device_path = self._bus.get_object('org.bluez', self.devices[device_path]['Device'])
|
||||
audio_device_iface = dbus.Interface(audio_device_path, dbus.PROPERTIES_IFACE)
|
||||
self.devices[device_path]['Connected'] = audio_device_iface.Get('org.bluez.Device1', 'Connected')
|
||||
|
||||
while self.devices[device_path]['Connected']:
|
||||
self.devices[device_path]['Connected'] = audio_device_iface.Get('org.bluez.Device1', 'Connected')
|
||||
time.sleep(0.1)
|
||||
|
||||
for path in self.devices:
|
||||
if self.devices[path]['Connected'] and self.devices[path]['Class'] & (1 << 21):
|
||||
return
|
||||
|
||||
print('default')
|
||||
sys.stdout.flush()
|
||||
|
||||
except (TypeError, KeyError, dbus.exceptions.DBusException) as e:
|
||||
print('%s: ' % unicode(e), file=sys.stderr)
|
||||
|
||||
|
||||
client = BluetoothAudioClient()
|
||||
|
||||
client.run()
|
||||
|
||||
del BluetoothAudioClient
|
||||
@@ -1,19 +1,15 @@
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
# Copyright (C) 2016-present Team LibreELEC (https://libreelec.tv)
|
||||
|
||||
import dbus
|
||||
import dbus.mainloop.glib
|
||||
import gobject
|
||||
import json
|
||||
import subprocess
|
||||
import threading
|
||||
import time
|
||||
import xbmc
|
||||
import xbmcaddon
|
||||
|
||||
__addon__ = xbmcaddon.Addon()
|
||||
__addonid__ = __addon__.getAddonInfo('id')
|
||||
|
||||
gobject.threads_init()
|
||||
__addonpath__ = xbmc.translatePath(xbmcaddon.Addon().getAddonInfo('path')).decode('utf-8')
|
||||
|
||||
class KodiFunctions(object):
|
||||
|
||||
@@ -63,103 +59,38 @@ class BluetoothAudioClient(object):
|
||||
|
||||
xbmc.log('%s: starting add-on' % __addonid__, xbmc.LOGNOTICE)
|
||||
|
||||
self.devices = {}
|
||||
self.signal_added = None
|
||||
self.signal_removed = None
|
||||
|
||||
self.kodi = KodiFunctions()
|
||||
self.path = __addonpath__ + '/bin/dbusservice.py'
|
||||
|
||||
self.service = subprocess.Popen([self.path], stdout=subprocess.PIPE)
|
||||
|
||||
self._thread = threading.Thread(target=self.loop)
|
||||
self._thread.start()
|
||||
|
||||
|
||||
def loop(self):
|
||||
|
||||
while True:
|
||||
line = self.service.stdout.readline()
|
||||
if line == '':
|
||||
break
|
||||
if line == 'bluetooth\n':
|
||||
self.kodi.select_pulse()
|
||||
continue
|
||||
if line == 'default\n':
|
||||
self.kodi.select_default()
|
||||
continue
|
||||
xbmc.log('%s: unexpected input: %s' % (__addonid__, line), xbmc.LOGERROR)
|
||||
|
||||
self._setup_loop()
|
||||
self._setup_bus()
|
||||
self._setup_signals()
|
||||
|
||||
def quit(self):
|
||||
|
||||
xbmc.log('%s: stopping add-on' % __addonid__, xbmc.LOGNOTICE)
|
||||
|
||||
self.service.terminate()
|
||||
self._thread.join()
|
||||
self.kodi.select_default()
|
||||
|
||||
self.signal_added.remove()
|
||||
self.signal_removed.remove()
|
||||
|
||||
self._loop.quit()
|
||||
|
||||
def _setup_loop(self):
|
||||
|
||||
self._loop = gobject.MainLoop()
|
||||
|
||||
self._thread = threading.Thread(target=self._loop.run)
|
||||
self._thread.start()
|
||||
|
||||
def _setup_bus(self):
|
||||
|
||||
dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
|
||||
self._bus = dbus.SystemBus()
|
||||
|
||||
def _setup_signals(self):
|
||||
|
||||
self.signal_added = self._bus.add_signal_receiver(handler_function=self.switch_audio,
|
||||
signal_name='InterfacesAdded',
|
||||
dbus_interface='org.freedesktop.DBus.ObjectManager',
|
||||
bus_name='org.bluez',
|
||||
member_keyword='signal')
|
||||
|
||||
self.signal_removed = self._bus.add_signal_receiver(handler_function=self.switch_audio,
|
||||
signal_name='InterfacesRemoved',
|
||||
dbus_interface='org.freedesktop.DBus.ObjectManager',
|
||||
bus_name='org.bluez',
|
||||
member_keyword='signal')
|
||||
|
||||
def switch_audio(self, *args, **kwargs):
|
||||
|
||||
device_path = args[0]
|
||||
|
||||
try:
|
||||
if kwargs['signal'] == 'InterfacesAdded':
|
||||
|
||||
self.devices[device_path] = {
|
||||
'Connected': '',
|
||||
'Device': '',
|
||||
'Class': '',
|
||||
}
|
||||
|
||||
device = self._bus.get_object('org.bluez', device_path)
|
||||
device_iface = dbus.Interface(device, dbus.PROPERTIES_IFACE)
|
||||
self.devices[device_path]['Device'] = device_iface.Get('org.bluez.MediaTransport1', 'Device')
|
||||
|
||||
audio_device_path = self._bus.get_object('org.bluez', self.devices[device_path]['Device'])
|
||||
audio_device_iface = dbus.Interface(audio_device_path, dbus.PROPERTIES_IFACE)
|
||||
self.devices[device_path]['Class'] = audio_device_iface.Get('org.bluez.Device1', 'Class')
|
||||
self.devices[device_path]['Connected'] = audio_device_iface.Get('org.bluez.Device1', 'Connected')
|
||||
|
||||
if self.devices[device_path]['Class'] & (1 << 21):
|
||||
xbmc.log('%s: bluetooth audio device connected' % __addonid__, xbmc.LOGNOTICE)
|
||||
xbmc.log('%s: switching to bluetooth audio device' % __addonid__, xbmc.LOGNOTICE)
|
||||
self.kodi.select_pulse()
|
||||
|
||||
elif kwargs['signal'] == 'InterfacesRemoved':
|
||||
if self.devices[device_path]['Device'] is not None and self.devices[device_path]['Class'] & (1 << 21):
|
||||
audio_device_path = self._bus.get_object('org.bluez', self.devices[device_path]['Device'])
|
||||
audio_device_iface = dbus.Interface(audio_device_path, dbus.PROPERTIES_IFACE)
|
||||
self.devices[device_path]['Connected'] = audio_device_iface.Get('org.bluez.Device1', 'Connected')
|
||||
|
||||
while self.devices[device_path]['Connected']:
|
||||
self.devices[device_path]['Connected'] = audio_device_iface.Get('org.bluez.Device1', 'Connected')
|
||||
time.sleep(0.1)
|
||||
|
||||
xbmc.log('%s: bluetooth audio device disconnected' % __addonid__, xbmc.LOGNOTICE)
|
||||
xbmc.log('%s: checking for other connected devices' % __addonid__, xbmc.LOGNOTICE)
|
||||
|
||||
for path in self.devices:
|
||||
if self.devices[path]['Connected'] and self.devices[path]['Class'] & (1 << 21):
|
||||
xbmc.log('%s: found connected bluetooth audio device' % __addonid__, xbmc.LOGNOTICE)
|
||||
return
|
||||
|
||||
xbmc.log('%s: switching to default audio device' % __addonid__, xbmc.LOGNOTICE)
|
||||
self.kodi.select_default()
|
||||
|
||||
except (TypeError, KeyError, dbus.exceptions.DBusException) as e:
|
||||
xbmc.log('%s: ' % __addonid__ + unicode(e), xbmc.LOGERROR)
|
||||
|
||||
class BluetoothMonitor(xbmc.Monitor):
|
||||
|
||||
|
||||
@@ -1,3 +1,14 @@
|
||||
108
|
||||
- Update to 4.4.2.0
|
||||
- Fix system.d
|
||||
- Update ImageMagick to 7.0.10-23
|
||||
|
||||
107
|
||||
- Update ImageMagick to 7.0.10-9
|
||||
|
||||
106
|
||||
- Update to 4.4.2.0
|
||||
|
||||
105
|
||||
- Update to 4.2.1.0
|
||||
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
# Copyright (C) 2016-present Team LibreELEC (https://libreelec.tv)
|
||||
|
||||
PKG_NAME="emby4"
|
||||
PKG_VERSION="4.2.1.0"
|
||||
PKG_SHA256="684a47c36700063141257c6325bbb2519ba11a7c7711e54e128d96f30adecdff"
|
||||
PKG_REV="105"
|
||||
PKG_VERSION="4.4.3.0"
|
||||
PKG_SHA256="9f14243bdc400ca9da2bb1b3e2ca3755f96293a6016bfbb5689cd7fcbc963f6b"
|
||||
PKG_REV="108"
|
||||
PKG_ARCH="any"
|
||||
PKG_LICENSE="prop."
|
||||
PKG_SITE="http://emby.media"
|
||||
@@ -13,7 +13,7 @@ PKG_SOURCE_DIR="system"
|
||||
PKG_DEPENDS_TARGET="toolchain imagemagick"
|
||||
PKG_SECTION="service"
|
||||
PKG_SHORTDESC="Emby Server: a personal media server"
|
||||
PKG_LONGDESC="Emby Server ($PKG_VERSION) brings your home videos, music, and photos together, automatically converting and streaming your media on-the-fly to any device"
|
||||
PKG_LONGDESC="Emby Server ($PKG_VERSION) brings your home videos, music, and photos together, automatically converting and streaming your media on-the-fly to any device."
|
||||
PKG_TOOLCHAIN="manual"
|
||||
|
||||
PKG_IS_ADDON="yes"
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
. /etc/profile
|
||||
oe_setup_addon service.emby4
|
||||
|
||||
LD_PRELOAD="$ADDON_DIR/lib/libMagickCore-7.Q16HDRI.so.6 \
|
||||
LD_PRELOAD="$ADDON_DIR/lib/libMagickCore-7.Q16HDRI.so.7 \
|
||||
$ADDON_DIR/lib/CORE_RL_Wand_.so" \
|
||||
nice -n "$emby_nice" \
|
||||
le_dotnet $ADDON_DIR/emby/EmbyServer.dll \
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
[Unit]
|
||||
Description=Emby 4 - streaming server
|
||||
Documentation=http://emby.media
|
||||
Wants=kodi.service
|
||||
After=kodi.service
|
||||
Wants=multi-user.target
|
||||
After=multi-user.target
|
||||
Conflicts=service.emby.service
|
||||
|
||||
[Service]
|
||||
@@ -10,4 +10,4 @@ ExecStart=/bin/sh /storage/.kodi/addons/service.emby4/bin/emby4.start
|
||||
Restart=always
|
||||
|
||||
[Install]
|
||||
WantedBy=kodi.service
|
||||
WantedBy=multi-user.target
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
112
|
||||
- update qt to 5.14.0
|
||||
* fixes screenshot not saving png files
|
||||
|
||||
111
|
||||
- Update to version 2019-08-19
|
||||
* Fix resuming from paused in kodi 18
|
||||
|
||||
@@ -6,12 +6,13 @@ PKG_NAME="hyperion"
|
||||
PKG_VERSION="fb413cd7e8825ffc26925013f57ac93a774f12bc"
|
||||
PKG_SHA256="fafa4eeddacb15a8fd96b0e69fac400faa735c6e1ccd78673c9d96b0ac84d7a3"
|
||||
PKG_VERSION_DATE="2019-08-19"
|
||||
PKG_REV="111"
|
||||
PKG_REV="112"
|
||||
PKG_ARCH="any"
|
||||
PKG_LICENSE="GPL"
|
||||
PKG_SITE="https://github.com/hyperion-project/hyperion"
|
||||
PKG_URL="https://github.com/hyperion-project/hyperion/archive/$PKG_VERSION.tar.gz"
|
||||
PKG_DEPENDS_TARGET="toolchain Python2 libusb qtbase protobuf rpi_ws281x"
|
||||
PKG_DEPENDS_UNPACK="rpi_ws281x"
|
||||
PKG_SECTION="service"
|
||||
PKG_SHORTDESC="Hyperion: an AmbiLight controller"
|
||||
PKG_LONGDESC="Hyperion($PKG_VERSION_DATE) is an modern opensource AmbiLight implementation."
|
||||
@@ -20,35 +21,34 @@ PKG_IS_ADDON="yes"
|
||||
PKG_ADDON_NAME="Hyperion"
|
||||
PKG_ADDON_TYPE="xbmc.service"
|
||||
|
||||
PKG_AMLOGIC_SUPPORT="-DENABLE_AMLOGIC=0"
|
||||
PKG_DISPMANX_SUPPORT="-DENABLE_DISPMANX=0"
|
||||
PKG_FB_SUPPORT="-DENABLE_FB=1"
|
||||
PKG_X11_SUPPORT="-DENABLE_X11=0"
|
||||
PKG_DISPMANX_SUPPORT="-DENABLE_DISPMANX=OFF"
|
||||
PKG_FB_SUPPORT="-DENABLE_FB=ON"
|
||||
PKG_X11_SUPPORT="-DENABLE_X11=OFF"
|
||||
|
||||
if [ "$PROJECT" = "RPi" ]; then
|
||||
PKG_DEPENDS_TARGET="$PKG_DEPENDS_TARGET bcm2835-driver"
|
||||
PKG_DISPMANX_SUPPORT="-DENABLE_DISPMANX=1"
|
||||
PKG_FB_SUPPORT="-DENABLE_FB=0"
|
||||
PKG_DEPENDS_TARGET+=" bcm2835-driver"
|
||||
PKG_DISPMANX_SUPPORT="-DENABLE_DISPMANX=ON"
|
||||
PKG_FB_SUPPORT="-DENABLE_FB=OFF"
|
||||
elif [ "$DISPLAYSERVER" = "x11" ]; then
|
||||
PKG_DEPENDS_TARGET="$PKG_DEPENDS_TARGET xorg-server xrandr"
|
||||
PKG_X11_SUPPORT="-DENABLE_X11=1"
|
||||
PKG_DEPENDS_TARGET+=" xorg-server xrandr"
|
||||
PKG_X11_SUPPORT="-DENABLE_X11=ON"
|
||||
fi
|
||||
|
||||
PKG_CMAKE_OPTS_TARGET="-DCMAKE_NO_SYSTEM_FROM_IMPORTED=ON \
|
||||
-DHYPERION_VERSION_ID="$PKG_VERSION" \
|
||||
$PKG_AMLOGIC_SUPPORT \
|
||||
-DENABLE_AMLOGIC=OFF \
|
||||
$PKG_DISPMANX_SUPPORT \
|
||||
$PKG_FB_SUPPORT \
|
||||
-DENABLE_OSX=0 \
|
||||
-DUSE_SYSTEM_PROTO_LIBS=1 \
|
||||
-DENABLE_SPIDEV=1 \
|
||||
-DENABLE_TINKERFORGE=0 \
|
||||
-DENABLE_V4L2=1 \
|
||||
-DENABLE_WS2812BPWM=0 \
|
||||
-DENABLE_WS281XPWM=1 \
|
||||
-DENABLE_OSX=OFF \
|
||||
-DUSE_SYSTEM_PROTO_LIBS=ON \
|
||||
-DENABLE_SPIDEV=ON \
|
||||
-DENABLE_TINKERFORGE=OFF \
|
||||
-DENABLE_V4L2=ON \
|
||||
-DENABLE_WS2812BPWM=OFF \
|
||||
-DENABLE_WS281XPWM=ON \
|
||||
$PKG_X11_SUPPORT \
|
||||
-DENABLE_QT5=1 \
|
||||
-DENABLE_TESTS=0 \
|
||||
-DENABLE_QT5=ON \
|
||||
-DENABLE_TESTS=OFF \
|
||||
-Wno-dev"
|
||||
|
||||
pre_build_target() {
|
||||
|
||||
@@ -1,220 +0,0 @@
|
||||
diff -Naur a/libsrc/boblightserver/CMakeLists.txt b/libsrc/boblightserver/CMakeLists.txt
|
||||
--- a/libsrc/boblightserver/CMakeLists.txt 2016-07-17 23:44:37.000000000 -0700
|
||||
+++ b/libsrc/boblightserver/CMakeLists.txt 2016-10-19 14:11:32.946486260 -0700
|
||||
@@ -37,4 +37,4 @@
|
||||
target_link_libraries(boblightserver
|
||||
hyperion
|
||||
hyperion-utils
|
||||
- ${QT_LIBRARIES})
|
||||
+ ${QT_LIBRARIES} pthread pcre16 dl z)
|
||||
diff -Naur a/libsrc/bonjour/CMakeLists.txt b/libsrc/bonjour/CMakeLists.txt
|
||||
--- a/libsrc/bonjour/CMakeLists.txt 2016-07-17 23:44:37.000000000 -0700
|
||||
+++ b/libsrc/bonjour/CMakeLists.txt 2016-10-19 14:11:32.945486250 -0700
|
||||
@@ -43,7 +43,7 @@
|
||||
target_link_libraries(bonjour
|
||||
hyperion
|
||||
hyperion-utils
|
||||
- ${QT_LIBRARIES})
|
||||
+ ${QT_LIBRARIES} pthread pcre16 dl z)
|
||||
|
||||
set(USE_SHARED_AVAHI_LIBS ${DEFAULT_USE_SHARED_AVAHI_LIBS} CACHE BOOL "use avahi libraries from system")
|
||||
|
||||
diff -Naur a/libsrc/effectengine/CMakeLists.txt b/libsrc/effectengine/CMakeLists.txt
|
||||
--- a/libsrc/effectengine/CMakeLists.txt 2016-07-17 23:44:37.000000000 -0700
|
||||
+++ b/libsrc/effectengine/CMakeLists.txt 2016-10-19 14:11:32.946486260 -0700
|
||||
@@ -51,5 +51,5 @@
|
||||
target_link_libraries(effectengine
|
||||
hyperion
|
||||
jsoncpp
|
||||
- ${QT_LIBRARIES}
|
||||
+ ${QT_LIBRARIES} pthread pcre16 dl z
|
||||
${PYTHON_LIBRARIES})
|
||||
diff -Naur a/libsrc/grabber/amlogic/CMakeLists.txt b/libsrc/grabber/amlogic/CMakeLists.txt
|
||||
--- a/libsrc/grabber/amlogic/CMakeLists.txt 2016-10-19 13:53:03.326320836 -0700
|
||||
+++ b/libsrc/grabber/amlogic/CMakeLists.txt 2016-10-19 14:11:32.947486270 -0700
|
||||
@@ -37,4 +37,4 @@
|
||||
|
||||
target_link_libraries(amlogic-grabber
|
||||
hyperion
|
||||
- ${QT_LIBRARIES})
|
||||
+ ${QT_LIBRARIES} pthread pcre16 dl z)
|
||||
diff -Naur a/libsrc/grabber/dispmanx/CMakeLists.txt b/libsrc/grabber/dispmanx/CMakeLists.txt
|
||||
--- a/libsrc/grabber/dispmanx/CMakeLists.txt 2016-07-17 23:44:37.000000000 -0700
|
||||
+++ b/libsrc/grabber/dispmanx/CMakeLists.txt 2016-10-19 14:11:32.948486280 -0700
|
||||
@@ -36,6 +36,6 @@
|
||||
|
||||
target_link_libraries(dispmanx-grabber
|
||||
hyperion
|
||||
- ${QT_LIBRARIES}
|
||||
+ ${QT_LIBRARIES} pthread pcre16 dl z
|
||||
${BCM_LIBRARIES}
|
||||
)
|
||||
diff -Naur a/libsrc/grabber/framebuffer/CMakeLists.txt b/libsrc/grabber/framebuffer/CMakeLists.txt
|
||||
--- a/libsrc/grabber/framebuffer/CMakeLists.txt 2016-07-17 23:44:37.000000000 -0700
|
||||
+++ b/libsrc/grabber/framebuffer/CMakeLists.txt 2016-10-19 14:11:32.948486280 -0700
|
||||
@@ -36,4 +36,4 @@
|
||||
|
||||
target_link_libraries(framebuffer-grabber
|
||||
hyperion
|
||||
- ${QT_LIBRARIES})
|
||||
+ ${QT_LIBRARIES} pthread pcre16 dl z)
|
||||
diff -Naur a/libsrc/grabber/osx/CMakeLists.txt b/libsrc/grabber/osx/CMakeLists.txt
|
||||
--- a/libsrc/grabber/osx/CMakeLists.txt 2016-07-17 23:44:37.000000000 -0700
|
||||
+++ b/libsrc/grabber/osx/CMakeLists.txt 2016-10-19 14:11:32.949486290 -0700
|
||||
@@ -31,4 +31,4 @@
|
||||
|
||||
target_link_libraries(osx-grabber
|
||||
hyperion
|
||||
- ${QT_LIBRARIES})
|
||||
+ ${QT_LIBRARIES} pthread pcre16 dl z)
|
||||
diff -Naur a/libsrc/grabber/v4l2/CMakeLists.txt b/libsrc/grabber/v4l2/CMakeLists.txt
|
||||
--- a/libsrc/grabber/v4l2/CMakeLists.txt 2016-07-17 23:44:37.000000000 -0700
|
||||
+++ b/libsrc/grabber/v4l2/CMakeLists.txt 2016-10-19 14:11:32.947486270 -0700
|
||||
@@ -35,5 +35,5 @@
|
||||
|
||||
target_link_libraries(v4l2-grabber
|
||||
hyperion
|
||||
- ${QT_LIBRARIES}
|
||||
+ ${QT_LIBRARIES} pthread pcre16 dl z
|
||||
)
|
||||
diff -Naur a/libsrc/grabber/x11/CMakeLists.txt b/libsrc/grabber/x11/CMakeLists.txt
|
||||
--- a/libsrc/grabber/x11/CMakeLists.txt 2016-07-17 23:44:37.000000000 -0700
|
||||
+++ b/libsrc/grabber/x11/CMakeLists.txt 2016-10-19 14:11:32.948486280 -0700
|
||||
@@ -37,5 +37,5 @@
|
||||
|
||||
target_link_libraries(x11-grabber
|
||||
hyperion
|
||||
- ${QT_LIBRARIES}
|
||||
+ ${QT_LIBRARIES} pthread pcre16 dl z
|
||||
)
|
||||
diff -Naur a/libsrc/hyperion/CMakeLists.txt b/libsrc/hyperion/CMakeLists.txt
|
||||
--- a/libsrc/hyperion/CMakeLists.txt 2016-07-17 23:44:37.000000000 -0700
|
||||
+++ b/libsrc/hyperion/CMakeLists.txt 2016-10-19 14:11:32.944486240 -0700
|
||||
@@ -68,5 +68,5 @@
|
||||
leddevice
|
||||
effectengine
|
||||
serialport
|
||||
- ${QT_LIBRARIES}
|
||||
+ ${QT_LIBRARIES} pthread pcre16 dl z
|
||||
)
|
||||
diff -Naur a/libsrc/jsonserver/CMakeLists.txt b/libsrc/jsonserver/CMakeLists.txt
|
||||
--- a/libsrc/jsonserver/CMakeLists.txt 2016-07-17 23:44:37.000000000 -0700
|
||||
+++ b/libsrc/jsonserver/CMakeLists.txt 2016-10-19 14:11:32.946486260 -0700
|
||||
@@ -45,4 +45,4 @@
|
||||
hyperion
|
||||
hyperion-utils
|
||||
jsoncpp
|
||||
- ${QT_LIBRARIES})
|
||||
+ ${QT_LIBRARIES} pthread pcre16 dl z)
|
||||
diff -Naur a/libsrc/leddevice/CMakeLists.txt b/libsrc/leddevice/CMakeLists.txt
|
||||
--- a/libsrc/leddevice/CMakeLists.txt 2016-07-17 23:44:37.000000000 -0700
|
||||
+++ b/libsrc/leddevice/CMakeLists.txt 2016-10-19 14:11:32.947486270 -0700
|
||||
@@ -152,7 +152,7 @@
|
||||
serialport
|
||||
${LIBUSB_1_LIBRARIES} #apt-get install libusb-1.0-0-dev
|
||||
${CMAKE_THREAD_LIBS_INIT}
|
||||
- ${QT_LIBRARIES}
|
||||
+ ${QT_LIBRARIES} pthread pcre16 dl z
|
||||
)
|
||||
|
||||
if(ENABLE_TINKERFORGE)
|
||||
diff -Naur a/libsrc/protoserver/CMakeLists.txt b/libsrc/protoserver/CMakeLists.txt
|
||||
--- a/libsrc/protoserver/CMakeLists.txt 2016-07-17 23:44:37.000000000 -0700
|
||||
+++ b/libsrc/protoserver/CMakeLists.txt 2016-10-19 14:11:32.944486240 -0700
|
||||
@@ -57,5 +57,5 @@
|
||||
hyperion
|
||||
hyperion-utils
|
||||
protobuf
|
||||
- ${QT_LIBRARIES}
|
||||
+ ${QT_LIBRARIES} pthread pcre16 dl z
|
||||
)
|
||||
diff -Naur a/libsrc/utils/CMakeLists.txt b/libsrc/utils/CMakeLists.txt
|
||||
--- a/libsrc/utils/CMakeLists.txt 2016-07-17 23:44:37.000000000 -0700
|
||||
+++ b/libsrc/utils/CMakeLists.txt 2016-10-19 14:11:32.945486250 -0700
|
||||
@@ -55,4 +55,4 @@
|
||||
|
||||
target_link_libraries(hyperion-utils
|
||||
jsoncpp
|
||||
- ${QT_LIBRARIES})
|
||||
+ ${QT_LIBRARIES} pthread pcre16 dl z)
|
||||
diff -Naur a/libsrc/webconfig/CMakeLists.txt b/libsrc/webconfig/CMakeLists.txt
|
||||
--- a/libsrc/webconfig/CMakeLists.txt 2016-07-17 23:44:37.000000000 -0700
|
||||
+++ b/libsrc/webconfig/CMakeLists.txt 2016-10-19 14:11:32.949486290 -0700
|
||||
@@ -49,7 +49,7 @@
|
||||
target_link_libraries(webconfig
|
||||
hyperion
|
||||
hyperion-utils
|
||||
- ${QT_LIBRARIES}
|
||||
+ ${QT_LIBRARIES} pthread pcre16 dl z
|
||||
)
|
||||
|
||||
|
||||
diff -Naur a/libsrc/xbmcvideochecker/CMakeLists.txt b/libsrc/xbmcvideochecker/CMakeLists.txt
|
||||
--- a/libsrc/xbmcvideochecker/CMakeLists.txt 2016-07-17 23:44:37.000000000 -0700
|
||||
+++ b/libsrc/xbmcvideochecker/CMakeLists.txt 2016-10-19 14:11:32.945486250 -0700
|
||||
@@ -34,4 +34,4 @@
|
||||
|
||||
target_link_libraries(xbmcvideochecker
|
||||
hyperion
|
||||
- ${QT_LIBRARIES})
|
||||
+ ${QT_LIBRARIES} pthread pcre16 dl z)
|
||||
diff -Naur a/src/hyperion-remote/CMakeLists.txt b/src/hyperion-remote/CMakeLists.txt
|
||||
--- a/src/hyperion-remote/CMakeLists.txt 2016-07-17 23:44:37.000000000 -0700
|
||||
+++ b/src/hyperion-remote/CMakeLists.txt 2016-10-19 15:05:59.050877759 -0700
|
||||
@@ -34,7 +34,8 @@
|
||||
target_link_libraries(${PROJECT_NAME}
|
||||
jsoncpp
|
||||
getoptPlusPlus
|
||||
- ${QT_LIBRARIES})
|
||||
+ hyperion
|
||||
+ ${QT_LIBRARIES} pthread pcre16 dl z)
|
||||
|
||||
if(ENABLE_QT5)
|
||||
qt5_use_modules(${PROJECT_NAME} Widgets Core Network)
|
||||
diff -Naur a/src/hyperion-v4l2/CMakeLists.txt b/src/hyperion-v4l2/CMakeLists.txt
|
||||
--- a/src/hyperion-v4l2/CMakeLists.txt 2016-07-17 23:44:37.000000000 -0700
|
||||
+++ b/src/hyperion-v4l2/CMakeLists.txt 2016-10-19 14:11:32.950486300 -0700
|
||||
@@ -51,7 +51,7 @@
|
||||
hyperion-utils
|
||||
protoserver
|
||||
pthread
|
||||
- ${QT_LIBRARIES}
|
||||
+ ${QT_LIBRARIES} pthread pcre16 dl z
|
||||
)
|
||||
|
||||
if(ENABLE_QT5)
|
||||
diff -Naur a/test/CMakeLists.txt b/test/CMakeLists.txt
|
||||
--- a/test/CMakeLists.txt 2016-07-17 23:44:37.000000000 -0700
|
||||
+++ b/test/CMakeLists.txt 2016-10-19 14:11:32.955486350 -0700
|
||||
@@ -47,11 +47,11 @@
|
||||
|
||||
add_executable(test_qregexp TestQRegExp.cpp)
|
||||
target_link_libraries(test_qregexp
|
||||
- ${QT_LIBRARIES})
|
||||
+ ${QT_LIBRARIES} pthread pcre16 dl z)
|
||||
|
||||
add_executable(test_qtscreenshot TestQtScreenshot.cpp)
|
||||
target_link_libraries(test_qtscreenshot
|
||||
- ${QT_LIBRARIES})
|
||||
+ ${QT_LIBRARIES} pthread pcre16 dl z)
|
||||
|
||||
if(ENABLE_QT5)
|
||||
qt5_use_modules(test_qregexp Widgets)
|
||||
@@ -63,7 +63,7 @@
|
||||
find_package(X11 REQUIRED)
|
||||
|
||||
add_executable(test_x11performance TestX11Performance.cpp)
|
||||
- target_link_libraries(test_x11performance ${X11_LIBRARIES} ${QT_LIBRARIES})
|
||||
+ target_link_libraries(test_x11performance ${X11_LIBRARIES} ${QT_LIBRARIES} pthread pcre16 dl z)
|
||||
if(ENABLE_QT5)
|
||||
qt5_use_modules(test_x11performance Widgets)
|
||||
endif(ENABLE_QT5)
|
||||
diff -Naur a/test/dispmanx2png/CMakeLists.txt b/test/dispmanx2png/CMakeLists.txt
|
||||
--- a/test/dispmanx2png/CMakeLists.txt 2016-07-17 23:44:37.000000000 -0700
|
||||
+++ b/test/dispmanx2png/CMakeLists.txt 2016-10-19 14:11:32.955486350 -0700
|
||||
@@ -16,4 +16,4 @@
|
||||
target_link_libraries(dispmanx2png
|
||||
dispmanx-grabber
|
||||
getoptPlusPlus
|
||||
- ${QT_LIBRARIES})
|
||||
+ ${QT_LIBRARIES} pthread pcre16 dl z)
|
||||
@@ -1,3 +1,32 @@
|
||||
124
|
||||
- Update to 9f3a02e (2020-06-22)
|
||||
- Fix switching playback with Android
|
||||
|
||||
123
|
||||
- Handle non ascii track information
|
||||
|
||||
122
|
||||
- Improve track information: fanart, podcast
|
||||
- Improve settings: autoplay, name, RTP port
|
||||
- Drop system.d
|
||||
|
||||
121
|
||||
- Update to 66f8a98 (2020-02-26)
|
||||
- Gapless playback
|
||||
|
||||
120
|
||||
- Update to 0.1.1
|
||||
|
||||
119
|
||||
- Update to f610436 (2020-01-02)
|
||||
- Hook audiotype
|
||||
- Use vorbis, which is more responsive than lewton
|
||||
- Build alsa backend and provide sample alsa service
|
||||
- Python 3 compliance
|
||||
|
||||
118
|
||||
- Update to 0.1.0
|
||||
|
||||
117
|
||||
- Update to 51a634d (2019-07-23)
|
||||
- Set bit rate to 320 kpbs
|
||||
|
||||
@@ -3,15 +3,15 @@
|
||||
# Copyright (C) 2017-present Team LibreELEC (https://libreelec.tv)
|
||||
|
||||
PKG_NAME="librespot"
|
||||
PKG_VERSION="51a634dc33233ca85a92db3e723d19550b548593"
|
||||
PKG_SHA256="581727e560c81cafbfeaf611b51f0a6987a48d348795785b3b6c0a304656a731"
|
||||
PKG_VERSION_DATE="2019-07-23"
|
||||
PKG_REV="117"
|
||||
PKG_VERSION="9f3a02ee8f62f8e178f714c3c63132388d90af64"
|
||||
PKG_SHA256="5b2d3c0a250fbd171ea86303b213dafc035bf32b5c6fb2e7e98d61d9140168a9"
|
||||
PKG_VERSION_DATE="2020-06-22"
|
||||
PKG_REV="124"
|
||||
PKG_ARCH="any"
|
||||
PKG_LICENSE="MIT"
|
||||
PKG_SITE="https://github.com/librespot-org/librespot/"
|
||||
PKG_URL="https://github.com/librespot-org/librespot/archive/$PKG_VERSION.zip"
|
||||
PKG_DEPENDS_TARGET="toolchain avahi pulseaudio rust"
|
||||
PKG_URL="https://github.com/librespot-org/librespot/archive/$PKG_VERSION.tar.gz"
|
||||
PKG_DEPENDS_TARGET="toolchain alsa-lib libvorbis pulseaudio rust"
|
||||
PKG_SECTION="service"
|
||||
PKG_SHORTDESC="Librespot: play Spotify through Kodi using a Spotify app as a remote"
|
||||
PKG_LONGDESC="Librespot ($PKG_VERSION_DATE) lets you play Spotify through Kodi using a Spotify app as a remote."
|
||||
@@ -20,26 +20,20 @@ PKG_TOOLCHAIN="manual"
|
||||
PKG_IS_ADDON="yes"
|
||||
PKG_ADDON_NAME="Librespot"
|
||||
PKG_ADDON_TYPE="xbmc.service"
|
||||
PKG_ADDON_REQUIRES="script.module.requests:0.0.0"
|
||||
PKG_MAINTAINER="Anton Voyl (awiouy)"
|
||||
|
||||
configure_target() {
|
||||
. "$TOOLCHAIN/.cargo/env"
|
||||
export PKG_CONFIG_ALLOW_CROSS=0
|
||||
}
|
||||
|
||||
make_target() {
|
||||
cd src
|
||||
$CARGO_BUILD --no-default-features --features "pulseaudio-backend with-dns-sd"
|
||||
cd "$PKG_BUILD/.$TARGET_NAME"/*/release
|
||||
$STRIP librespot
|
||||
. $(get_build_dir rust)/cargo/env
|
||||
cargo build \
|
||||
--release \
|
||||
--no-default-features \
|
||||
--features "alsa-backend pulseaudio-backend with-vorbis"
|
||||
$STRIP $PKG_BUILD/.$TARGET_NAME/*/release/librespot
|
||||
}
|
||||
|
||||
addon() {
|
||||
mkdir -p "$ADDON_BUILD/$PKG_ADDON_ID/bin"
|
||||
cp "$PKG_BUILD/.$TARGET_NAME"/*/release/librespot \
|
||||
"$ADDON_BUILD/$PKG_ADDON_ID/bin"
|
||||
|
||||
mkdir -p "$ADDON_BUILD/$PKG_ADDON_ID/lib"
|
||||
cp "$(get_build_dir avahi)/avahi-compat-libdns_sd/.libs/libdns_sd.so.1" \
|
||||
"$ADDON_BUILD/$PKG_ADDON_ID/lib"
|
||||
mkdir -p $ADDON_BUILD/$PKG_ADDON_ID/bin
|
||||
cp $PKG_BUILD/.$TARGET_NAME/*/release/librespot \
|
||||
$ADDON_BUILD/$PKG_ADDON_ID/bin
|
||||
}
|
||||
|
||||
@@ -1,126 +1,83 @@
|
||||
commit 10489ef0b9de4241eb8e007596f3d62616120545
|
||||
Author: awiouy <awiouy@gmail.com>
|
||||
Date: Fri May 29 07:40:19 2020 +0200
|
||||
|
||||
Notify Kodi
|
||||
|
||||
diff --git a/core/src/spotify_id.rs b/core/src/spotify_id.rs
|
||||
index 1a5fcd2..c670977 100644
|
||||
--- a/core/src/spotify_id.rs
|
||||
+++ b/core/src/spotify_id.rs
|
||||
@@ -8,6 +8,12 @@ pub enum SpotifyAudioType {
|
||||
NonPlayable,
|
||||
}
|
||||
|
||||
+impl fmt::Display for SpotifyAudioType {
|
||||
+ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||
+ write!(f, "{:?}", self)
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
|
||||
pub struct SpotifyId {
|
||||
pub id: u128,
|
||||
diff --git a/playback/src/config.rs b/playback/src/config.rs
|
||||
index 0f71110..931167d 100644
|
||||
index 9d65042..6d098db 100644
|
||||
--- a/playback/src/config.rs
|
||||
+++ b/playback/src/config.rs
|
||||
@@ -30,6 +30,7 @@ pub struct PlayerConfig {
|
||||
pub bitrate: Bitrate,
|
||||
@@ -31,6 +31,7 @@ pub struct PlayerConfig {
|
||||
pub normalisation: bool,
|
||||
pub normalisation_pregain: f32,
|
||||
pub gapless: bool,
|
||||
+ pub notify_kodi: bool,
|
||||
}
|
||||
|
||||
impl Default for PlayerConfig {
|
||||
@@ -38,6 +39,7 @@ impl Default for PlayerConfig {
|
||||
bitrate: Bitrate::default(),
|
||||
@@ -40,6 +41,7 @@ impl Default for PlayerConfig {
|
||||
normalisation: false,
|
||||
normalisation_pregain: 0.0,
|
||||
gapless: true,
|
||||
+ notify_kodi: false,
|
||||
}
|
||||
}
|
||||
}
|
||||
diff --git a/playback/src/player.rs b/playback/src/player.rs
|
||||
index ab1a8ab..19d6394 100644
|
||||
index 2dd8f3b..67b3b28 100644
|
||||
--- a/playback/src/player.rs
|
||||
+++ b/playback/src/player.rs
|
||||
@@ -4,7 +4,8 @@ use futures::sync::oneshot;
|
||||
use futures::{future, Future};
|
||||
use std;
|
||||
use std::borrow::Cow;
|
||||
-use std::io::{Read, Result, Seek, SeekFrom};
|
||||
+use std::fs::OpenOptions;
|
||||
+use std::io::{Read, Result, Seek, SeekFrom, Write};
|
||||
use std::mem;
|
||||
use std::sync::mpsc::{RecvError, RecvTimeoutError, TryRecvError};
|
||||
use std::thread;
|
||||
@@ -394,6 +395,14 @@ impl PlayerInternal {
|
||||
@@ -1442,6 +1442,10 @@ impl PlayerInternal {
|
||||
}
|
||||
}
|
||||
|
||||
+ fn notify_kodi(&mut self, id: &str, track_id: &SpotifyId) {
|
||||
+ // println!("fifo = {} {}", id, track_id.to_base62());
|
||||
+ if self.config.notify_kodi {
|
||||
+ let mut file = OpenOptions::new().write(true).open("/tmp/librespot").unwrap();
|
||||
+ writeln!(&mut file, "{}\n{}", id, track_id.to_base62()).unwrap();
|
||||
+ }
|
||||
+ fn notify_kodi(&mut self, event: String) {
|
||||
+ eprintln!("@{}", event);
|
||||
+ }
|
||||
+
|
||||
fn handle_command(&mut self, cmd: PlayerCommand) {
|
||||
debug!("command={:?}", cmd);
|
||||
match cmd {
|
||||
@@ -413,11 +422,17 @@ impl PlayerInternal {
|
||||
| PlayerState::EndOfTrack {
|
||||
track_id: old_track_id,
|
||||
..
|
||||
- } => self.send_event(PlayerEvent::Changed {
|
||||
- old_track_id: old_track_id,
|
||||
- new_track_id: track_id,
|
||||
- }),
|
||||
- _ => self.send_event(PlayerEvent::Started { track_id }),
|
||||
+ } => {
|
||||
+ self.send_event(PlayerEvent::Changed {
|
||||
+ old_track_id: old_track_id,
|
||||
+ new_track_id: track_id,
|
||||
+ });
|
||||
+ self.notify_kodi("1", &track_id)
|
||||
fn send_event(&mut self, event: PlayerEvent) {
|
||||
let mut index = 0;
|
||||
while index < self.event_senders.len() {
|
||||
@@ -1452,6 +1456,16 @@ impl PlayerInternal {
|
||||
}
|
||||
}
|
||||
}
|
||||
+ if self.config.notify_kodi {
|
||||
+ use PlayerEvent::*;
|
||||
+ match event {
|
||||
+ Playing {track_id, .. } => self.notify_kodi(["Playing",
|
||||
+ &track_id.audio_type.to_string(),
|
||||
+ &track_id.to_base62()].join(" ")),
|
||||
+ Stopped { .. } => self.notify_kodi("Stopped".to_string()),
|
||||
+ _ => ()
|
||||
+ }
|
||||
+ _ => {
|
||||
+ self.send_event(PlayerEvent::Started { track_id });
|
||||
+ self.notify_kodi("2", &track_id)
|
||||
+ }
|
||||
}
|
||||
|
||||
self.start_sink();
|
||||
@@ -443,13 +458,17 @@ impl PlayerInternal {
|
||||
| PlayerState::EndOfTrack {
|
||||
track_id: old_track_id,
|
||||
..
|
||||
- } => self.send_event(PlayerEvent::Changed {
|
||||
- old_track_id: old_track_id,
|
||||
- new_track_id: track_id,
|
||||
- }),
|
||||
+ } => {
|
||||
+ self.send_event(PlayerEvent::Changed {
|
||||
+ old_track_id: old_track_id,
|
||||
+ new_track_id: track_id,
|
||||
+ });
|
||||
+ self.notify_kodi("3", &track_id)
|
||||
+ }
|
||||
_ => (),
|
||||
}
|
||||
self.send_event(PlayerEvent::Stopped { track_id });
|
||||
+ self.notify_kodi("4", &track_id)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -476,6 +495,7 @@ impl PlayerInternal {
|
||||
|
||||
self.send_event(PlayerEvent::Started { track_id });
|
||||
self.start_sink();
|
||||
+ self.notify_kodi("5", &track_id)
|
||||
} else {
|
||||
warn!("Player::play called from invalid state");
|
||||
}
|
||||
@@ -487,6 +507,7 @@ impl PlayerInternal {
|
||||
|
||||
self.stop_sink_if_running();
|
||||
self.send_event(PlayerEvent::Stopped { track_id });
|
||||
+ self.notify_kodi("6", &track_id)
|
||||
} else {
|
||||
warn!("Player::pause called from invalid state");
|
||||
}
|
||||
@@ -499,6 +520,7 @@ impl PlayerInternal {
|
||||
self.stop_sink_if_running();
|
||||
self.send_event(PlayerEvent::Stopped { track_id });
|
||||
self.state = PlayerState::Stopped;
|
||||
+ self.notify_kodi("7", &track_id)
|
||||
}
|
||||
PlayerState::Stopped => {
|
||||
warn!("Player::stop called from invalid state");
|
||||
fn load_track(
|
||||
diff --git a/src/main.rs b/src/main.rs
|
||||
index 36cd1b5..502cac8 100644
|
||||
index 2efd62b..ecee2ff 100644
|
||||
--- a/src/main.rs
|
||||
+++ b/src/main.rs
|
||||
@@ -168,6 +168,11 @@ fn setup(args: &[String]) -> Setup {
|
||||
@@ -171,6 +171,11 @@ fn setup(args: &[String]) -> Setup {
|
||||
"Pregain (dB) applied by volume normalisation",
|
||||
"PREGAIN",
|
||||
)
|
||||
@@ -132,7 +89,7 @@ index 36cd1b5..502cac8 100644
|
||||
.optflag(
|
||||
"",
|
||||
"linear-volume",
|
||||
@@ -248,6 +253,8 @@ fn setup(args: &[String]) -> Setup {
|
||||
@@ -282,6 +287,8 @@ fn setup(args: &[String]) -> Setup {
|
||||
)
|
||||
};
|
||||
|
||||
@@ -141,7 +98,7 @@ index 36cd1b5..502cac8 100644
|
||||
let session_config = {
|
||||
let device_id = device_id(&name);
|
||||
|
||||
@@ -291,6 +298,7 @@ fn setup(args: &[String]) -> Setup {
|
||||
@@ -325,6 +332,7 @@ fn setup(args: &[String]) -> Setup {
|
||||
.opt_str("normalisation-pregain")
|
||||
.map(|pregain| pregain.parse::<f32>().expect("Invalid pregain float value"))
|
||||
.unwrap_or(PlayerConfig::default().normalisation_pregain),
|
||||
|
||||
@@ -0,0 +1,50 @@
|
||||
From 16b83b38c1b77b34c64ad3f567e5f43bb1dc5ef0 Mon Sep 17 00:00:00 2001
|
||||
From: Anthony Green <anthony@home.coolsoft.co.uk>
|
||||
Date: Tue, 7 Jul 2020 16:23:20 +0100
|
||||
Subject: [PATCH 1/2] Issue #497 - Playing songs from android app
|
||||
|
||||
Implement the fix suggested by @Johannesd3
|
||||
---
|
||||
connect/src/spirc.rs | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/connect/src/spirc.rs b/connect/src/spirc.rs
|
||||
index b4c657f7..88d377df 100644
|
||||
--- a/connect/src/spirc.rs
|
||||
+++ b/connect/src/spirc.rs
|
||||
@@ -790,7 +790,7 @@ impl SpircTask {
|
||||
}
|
||||
|
||||
MessageType::kMessageTypeNotify => {
|
||||
- if self.device.get_is_active() && frame.get_device_state().get_is_active() {
|
||||
+ if self.device.get_is_active() && frame.get_device_state().get_is_active() && self.device.get_became_active_at() <= frame.get_device_state().get_became_active_at() {
|
||||
self.device.set_is_active(false);
|
||||
self.state.set_status(PlayStatus::kPlayStatusStop);
|
||||
self.player.stop();
|
||||
|
||||
From 9565e4392ab6ba8d39b7714395ce3b8a58048fb6 Mon Sep 17 00:00:00 2001
|
||||
From: Anthony Green <anthony@home.coolsoft.co.uk>
|
||||
Date: Fri, 10 Jul 2020 21:17:01 +0100
|
||||
Subject: [PATCH 2/2] Fix formatting
|
||||
|
||||
---
|
||||
connect/src/spirc.rs | 6 +++++-
|
||||
1 file changed, 5 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/connect/src/spirc.rs b/connect/src/spirc.rs
|
||||
index 88d377df..0dd67093 100644
|
||||
--- a/connect/src/spirc.rs
|
||||
+++ b/connect/src/spirc.rs
|
||||
@@ -790,7 +790,11 @@ impl SpircTask {
|
||||
}
|
||||
|
||||
MessageType::kMessageTypeNotify => {
|
||||
- if self.device.get_is_active() && frame.get_device_state().get_is_active() && self.device.get_became_active_at() <= frame.get_device_state().get_became_active_at() {
|
||||
+ if self.device.get_is_active()
|
||||
+ && frame.get_device_state().get_is_active()
|
||||
+ && self.device.get_became_active_at()
|
||||
+ <= frame.get_device_state().get_became_active_at()
|
||||
+ {
|
||||
self.device.set_is_active(false);
|
||||
self.state.set_status(PlayStatus::kPlayStatusStop);
|
||||
self.player.stop();
|
||||
@@ -1,30 +0,0 @@
|
||||
From b87d18c6513cebc31118ffb447e2b7ae9255e6bd Mon Sep 17 00:00:00 2001
|
||||
From: awiouy <awiouy@gmail.com>
|
||||
Date: Wed, 7 Nov 2018 07:51:46 +0100
|
||||
Subject: [PATCH] libreelec: pulseaudio sink
|
||||
|
||||
---
|
||||
playback/src/audio_backend/pulseaudio.rs | 3 ++-
|
||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/playback/src/audio_backend/pulseaudio.rs b/playback/src/audio_backend/pulseaudio.rs
|
||||
index 88f6280..4e7186b 100644
|
||||
--- a/playback/src/audio_backend/pulseaudio.rs
|
||||
+++ b/playback/src/audio_backend/pulseaudio.rs
|
||||
@@ -76,6 +76,7 @@ impl Open for PulseAudioSink {
|
||||
|
||||
impl Sink for PulseAudioSink {
|
||||
fn start(&mut self) -> io::Result<()> {
|
||||
+ let sink = CString::new("librespot_sink").unwrap();
|
||||
if self.s == null_mut() {
|
||||
self.s = call_pulseaudio(
|
||||
|err| unsafe {
|
||||
@@ -83,7 +84,7 @@ impl Sink for PulseAudioSink {
|
||||
null(), // Use the default server.
|
||||
self.name.as_ptr(), // Our application's name.
|
||||
PA_STREAM_PLAYBACK,
|
||||
- null(), // Use the default device.
|
||||
+ sink.as_ptr(), // Our sink.
|
||||
self.desc.as_ptr(), // desc of our stream.
|
||||
&self.ss, // Our sample format.
|
||||
null(), // Use default channel map
|
||||
@@ -1,37 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
# Copyright (C) 2017-present Team LibreELEC (https://libreelec.tv)
|
||||
|
||||
. /etc/profile
|
||||
oe_setup_addon service.librespot
|
||||
|
||||
PORT="6666"
|
||||
SINK_NAME="librespot_sink"
|
||||
|
||||
if ! pactl list modules short | grep "sink_name=$SINK_NAME"; then
|
||||
pactl load-module module-null-sink sink_name="$SINK_NAME" > /dev/null
|
||||
fi
|
||||
if ! pactl list modules short | grep "source=$SINK_NAME"; then
|
||||
pactl load-module module-rtp-send source="$SINK_NAME.monitor" \
|
||||
destination_ip=127.0.0.1 port="$PORT" source_ip=127.0.0.1 > /dev/null
|
||||
fi
|
||||
pactl suspend-sink "$SINK_NAME" 1
|
||||
|
||||
LIBRESPOT="librespot \
|
||||
--backend pulseaudio \
|
||||
--bitrate 320 \
|
||||
--cache \"$ADDON_HOME/cache\" \
|
||||
--device-type TV \
|
||||
--disable-audio-cache \
|
||||
--name \"Kodi ($HOSTNAME)\" \
|
||||
--notify-kodi"
|
||||
|
||||
if [ "$ls_a" = "true" -a -n "$ls_p" -a -n "$ls_u" ]; then
|
||||
LIBRESPOT="$LIBRESPOT \
|
||||
--disable-discovery \
|
||||
--password \"$ls_p\" \
|
||||
--username \"$ls_u\""
|
||||
fi
|
||||
|
||||
eval $LIBRESPOT
|
||||
@@ -1,224 +1,8 @@
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
# Copyright (C) 2017-present Team LibreELEC (https://libreelec.tv)
|
||||
|
||||
import base64
|
||||
import json
|
||||
import os
|
||||
import stat
|
||||
import subprocess
|
||||
import threading
|
||||
import time
|
||||
import urllib
|
||||
import urllib2
|
||||
import xbmc
|
||||
import xbmcaddon
|
||||
import xbmcgui
|
||||
import sys
|
||||
|
||||
ADDON = xbmcaddon.Addon()
|
||||
ADDON_ID = ADDON.getAddonInfo('id')
|
||||
ADDON_NAME = ADDON.getAddonInfo('name')
|
||||
FIFO = '/tmp/librespot'
|
||||
LOG_LEVEL = xbmc.LOGNOTICE
|
||||
LOG_MESSAGE = ADDON.getAddonInfo('name') + ': {}'
|
||||
SINK_NAME = "librespot_sink"
|
||||
SPOTIFY_ID = '169df5532dee47a59913f8528e83ae71'
|
||||
SPOTIFY_SECRET = '1f3d8b507bbe4f68beb3a4472e8ad411'
|
||||
STREAM_CODEC = 'pcm_s16be'
|
||||
STREAM_PORT = '6666'
|
||||
STREAM_URL = 'rtp://127.0.0.1:{}'.format(STREAM_PORT)
|
||||
sys.path.append(os.path.join(os.path.dirname(__file__), 'resources', 'lib'))
|
||||
|
||||
from ls_monitor import Monitor as Monitor
|
||||
|
||||
def log(message):
|
||||
xbmc.log(LOG_MESSAGE.format(message), LOG_LEVEL)
|
||||
|
||||
|
||||
class Monitor(xbmc.Monitor):
|
||||
|
||||
def __init__(self):
|
||||
log('monitor started')
|
||||
self.player = Player()
|
||||
|
||||
def onSettingsChanged(self):
|
||||
log('settings changed')
|
||||
self.player.update()
|
||||
|
||||
def waitForAbort(self):
|
||||
super(Monitor, self).waitForAbort()
|
||||
log('abort requested')
|
||||
self.player.abort()
|
||||
|
||||
|
||||
class Player(threading.Thread, xbmc.Player):
|
||||
|
||||
def __init__(self):
|
||||
log('player started')
|
||||
super(Player, self).__init__()
|
||||
self.isLibrespotStarted = True
|
||||
self.listitem = xbmcgui.ListItem()
|
||||
self.listitem.addStreamInfo('audio', {'codec': STREAM_CODEC})
|
||||
self.listitem.setPath(STREAM_URL)
|
||||
self.spotify = Spotify()
|
||||
if self.isPlaying():
|
||||
self.onAVStarted()
|
||||
else:
|
||||
self.playingFile = ''
|
||||
self.onPlayBackStopped()
|
||||
self.start()
|
||||
|
||||
def abort(self):
|
||||
log('aborting player')
|
||||
with open(FIFO, 'w') as fifo:
|
||||
fifo.close()
|
||||
self.join()
|
||||
|
||||
def onAVChange(self):
|
||||
self.onAVStarted()
|
||||
|
||||
def onAVStarted(self):
|
||||
log('playback started')
|
||||
self.playingFile = self.getPlayingFile()
|
||||
if self.isLibrespotStarted and (self.playingFile != STREAM_URL):
|
||||
self.isLibrespotStarted = False
|
||||
self.systemctl('stop')
|
||||
|
||||
def onPlayBackEnded(self):
|
||||
self.onPlayBackStopped()
|
||||
|
||||
def onPlayBackError(self):
|
||||
self.onPlayBackStopped()
|
||||
|
||||
def onPlayBackStopped(self):
|
||||
log('playback stopped')
|
||||
if self.playingFile == STREAM_URL:
|
||||
self.systemctl('restart')
|
||||
elif not self.isLibrespotStarted:
|
||||
self.systemctl('start')
|
||||
self.isLibrespotStarted = True
|
||||
|
||||
def pauseLibrespot(self):
|
||||
if self.isPlaying() and (self.getPlayingFile() == STREAM_URL):
|
||||
log('pausing librespot playback')
|
||||
self.pause()
|
||||
|
||||
def playLibrespot(self, track_id):
|
||||
track = self.spotify.getTrack(track_id)
|
||||
self.listitem.setArt(track.getArt())
|
||||
self.listitem.setInfo('music', track.getInfo())
|
||||
if not self.isPlaying():
|
||||
subprocess.call(['pactl', 'suspend-sink', SINK_NAME, '0'])
|
||||
log('starting librespot playback')
|
||||
self.play(STREAM_URL, self.listitem)
|
||||
elif self.getPlayingFile() == STREAM_URL:
|
||||
log('updating librespot playback')
|
||||
self.updateInfoTag(self.listitem)
|
||||
|
||||
def run(self):
|
||||
log('control pipe started')
|
||||
try:
|
||||
os.unlink(FIFO)
|
||||
except OSError:
|
||||
pass
|
||||
os.mkfifo(FIFO)
|
||||
while (os.path.exists(FIFO) and
|
||||
stat.S_ISFIFO(os.stat(FIFO).st_mode)):
|
||||
with open(FIFO, 'r') as fifo:
|
||||
command = fifo.read().splitlines()
|
||||
log('control pipe {}'.format(str(command)))
|
||||
if len(command) == 0:
|
||||
break
|
||||
elif command[0] in ['3', '5', '6']:
|
||||
self.pauseLibrespot()
|
||||
elif command[0] in ['1', '2', '4']:
|
||||
self.playLibrespot(command[1])
|
||||
elif command[0] in ['7']:
|
||||
self.stopLibrespot()
|
||||
try:
|
||||
os.unlink(FIFO)
|
||||
except OSError:
|
||||
pass
|
||||
log('control pipe stopped')
|
||||
|
||||
def stopLibrespot(self):
|
||||
if self.isPlaying() and (self.getPlayingFile() == STREAM_URL):
|
||||
log('stopping librespot playback')
|
||||
self.stop()
|
||||
|
||||
def systemctl(self, command):
|
||||
log('{} librespot'.format(command))
|
||||
subprocess.call(['systemctl', command, ADDON_ID])
|
||||
|
||||
def update(self):
|
||||
log('updating player')
|
||||
if self.isLibrespotStarted:
|
||||
self.systemctl('restart')
|
||||
|
||||
|
||||
class Spotify():
|
||||
|
||||
def __init__(self):
|
||||
self.headers = None
|
||||
self.expiration = time.time()
|
||||
self.request = [
|
||||
'https://accounts.spotify.com/api/token',
|
||||
urllib.urlencode({'grant_type': 'client_credentials'}),
|
||||
{'Authorization': 'Basic {}'.format(base64.b64encode(
|
||||
'{}:{}'.format(SPOTIFY_ID, SPOTIFY_SECRET)))}
|
||||
]
|
||||
|
||||
def getHeaders(self):
|
||||
if time.time() > self.expiration:
|
||||
log('token expired')
|
||||
token = json.loads(urllib2.urlopen(
|
||||
urllib2.Request(*self.request)).read())
|
||||
log('new token expires in {} seconds'.format(token['expires_in']))
|
||||
self.expiration = time.time() + float(token['expires_in']) - 60
|
||||
self.headers = {
|
||||
'Accept': 'application/json',
|
||||
'Content-Type': 'application/json',
|
||||
'Authorization': 'Bearer {}'.format(token['access_token'])
|
||||
}
|
||||
|
||||
def getTrack(self, track_id):
|
||||
log('getting track')
|
||||
try:
|
||||
self.getHeaders()
|
||||
track = json.loads(urllib2.urlopen(urllib2.Request(
|
||||
'https://api.spotify.com/v1/tracks/{}'.format(track_id), None,
|
||||
self.headers)).read())
|
||||
except Exception as e:
|
||||
log('failed to get track from Spotify: {}'.format(e))
|
||||
track = dict()
|
||||
return Track(track)
|
||||
|
||||
|
||||
class Track():
|
||||
|
||||
def __init__(self, track):
|
||||
self.track = track
|
||||
|
||||
def get(self, default, *indices):
|
||||
tree = self.track
|
||||
try:
|
||||
for index in indices:
|
||||
tree = tree[index]
|
||||
except LookupError:
|
||||
tree = default
|
||||
return tree
|
||||
|
||||
def getArt(self):
|
||||
return {
|
||||
'thumb': self.get('', 'album', 'images', 0, 'url')
|
||||
}
|
||||
|
||||
def getInfo(self):
|
||||
return {
|
||||
'album': self.get('', 'album', 'name'),
|
||||
'artist': self.get('', 'artists', 0, 'name'),
|
||||
'title': self.get('', 'name'),
|
||||
}
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
log('service started')
|
||||
Monitor().waitForAbort()
|
||||
log('service stopped')
|
||||
Monitor().run()
|
||||
|
||||
@@ -1,5 +0,0 @@
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
# Copyright (C) 2017-present Team LibreELEC (https://libreelec.tv)
|
||||
|
||||
PORT="6666"
|
||||
SINK_NAME="librespot_sink"
|
||||
@@ -0,0 +1,30 @@
|
||||
# Librespot for ALSA
|
||||
# Copy this file to '/storage/.config/system.d/service.librespot-alsa.service' and adapt it to your needs
|
||||
# Enable the service with 'systemctl enable /storage/.config/system.d/service.librespot-alsa.service'
|
||||
# Start the service with 'systemctl start service.librespot-alsa.service'
|
||||
# If you update the file, reload units with 'systemctl daemon-reload' and restart the service
|
||||
|
||||
[Unit]
|
||||
Description=librespot alsa backend
|
||||
After=network-online.target
|
||||
Wants=network-online.target
|
||||
|
||||
[Service]
|
||||
Environment=LD_LIBRARY_PATH=/storage/.kodi/addons/service.librespot/lib
|
||||
#Enable Raspberry Pi onboard audio
|
||||
#ExecStartPre=-dtparam audio=on
|
||||
#Set Raspberry Pi playback route
|
||||
#ExecStartPre=-amixer -c 0 cset name="PCM Playback Route" 1
|
||||
ExecStart=/storage/.kodi/addons/service.librespot/bin/librespot \
|
||||
--backend alsa \
|
||||
--bitrate 320 \
|
||||
--cache "/storage/.config/lsa_cache" \
|
||||
# Use 'aplay -L' to list available devices
|
||||
# --device "default:CARD=ALSA" \
|
||||
--device-type computer \
|
||||
--disable-audio-cache \
|
||||
--name "Librespot ALSA" \
|
||||
Restart=always
|
||||
|
||||
[Install]
|
||||
WantedBy=network-online.target
|
||||
@@ -8,13 +8,25 @@ msgid "Configuration"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#30101"
|
||||
msgid "User mode"
|
||||
msgid "Autoplay"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#30102"
|
||||
msgid "Username"
|
||||
msgid "Discovery"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#30103"
|
||||
msgid "Username"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#30104"
|
||||
msgid "Password"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#30105"
|
||||
msgid "Name"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#30106"
|
||||
msgid "RTP Port"
|
||||
msgstr ""
|
||||
|
||||
@@ -0,0 +1,45 @@
|
||||
import os
|
||||
import socket
|
||||
import xbmc
|
||||
import xbmcaddon
|
||||
import xbmcgui
|
||||
|
||||
|
||||
DEFAULTS = dict(
|
||||
autoplay='true',
|
||||
bitrate='320',
|
||||
device='librespot',
|
||||
discovery='true',
|
||||
name='Librespot@{}',
|
||||
password='',
|
||||
rtp_dest='127.0.0.1',
|
||||
rtp_port='24642',
|
||||
username='',
|
||||
)
|
||||
|
||||
ADDON = xbmcaddon.Addon()
|
||||
ADDON_HOME = xbmc.translatePath(ADDON.getAddonInfo('profile'))
|
||||
ADDON_ICON = ADDON.getAddonInfo('icon')
|
||||
ADDON_NAME = ADDON.getAddonInfo('name')
|
||||
ADDON_PATH = ADDON.getAddonInfo('path')
|
||||
ADDON_ENVT = dict(PATH=os.path.join(ADDON_PATH, 'bin'))
|
||||
DIALOG = xbmcgui.Dialog()
|
||||
|
||||
|
||||
def get_settings():
|
||||
if not os.path.exists(ADDON_HOME):
|
||||
os.makedirs(ADDON_HOME)
|
||||
settings = dict()
|
||||
for id in DEFAULTS.keys():
|
||||
value = ADDON.getSetting(id)
|
||||
settings[id] = DEFAULTS[id] if value == '' else value
|
||||
settings['name'] = settings['name'].format(socket.gethostname())
|
||||
return settings
|
||||
|
||||
|
||||
def log(message):
|
||||
xbmc.log('{}: {}'.format(ADDON_NAME, message), xbmc.LOGNOTICE)
|
||||
|
||||
|
||||
def notification(message):
|
||||
DIALOG.notification(ADDON_NAME, message, ADDON_ICON)
|
||||
@@ -0,0 +1,164 @@
|
||||
import pipes
|
||||
import shlex
|
||||
import subprocess
|
||||
import threading
|
||||
import xbmc
|
||||
import xbmcgui
|
||||
|
||||
from ls_addon import ADDON_ENVT as ADDON_ENVT
|
||||
from ls_addon import ADDON_HOME as ADDON_HOME
|
||||
from ls_addon import get_settings as get_settings
|
||||
from ls_addon import log as log
|
||||
from ls_pulseaudio import Pulseaudio as Pulseaudio
|
||||
from ls_spotify import SPOTIFY as SPOTIFY
|
||||
|
||||
|
||||
LIBRESPOT = 'librespot' \
|
||||
' --backend pulseaudio' \
|
||||
' --bitrate {bitrate}' \
|
||||
' --cache cache' \
|
||||
' --device {device}' \
|
||||
' --device-type TV' \
|
||||
' --disable-audio-cache' \
|
||||
' --name {name}' \
|
||||
' --notify-kodi'
|
||||
LIBRESPOT_AUTOPLAY = ' --autoplay'
|
||||
LIBRESPOT_AUTHENTICATE = ' --disable-discovery' \
|
||||
' --password {password}' \
|
||||
' --username {username}'
|
||||
|
||||
CODEC = 'pcm_s16be'
|
||||
MAX_PANICS = 3
|
||||
|
||||
|
||||
class Librespot(xbmc.Player):
|
||||
|
||||
def __init__(self):
|
||||
super(Librespot, self).__init__()
|
||||
settings = get_settings()
|
||||
quoted = {k: pipes.quote(v) for (k, v) in settings.items()}
|
||||
command = LIBRESPOT
|
||||
if settings['autoplay'] == 'true':
|
||||
command += LIBRESPOT_AUTOPLAY
|
||||
if (settings['discovery'] == 'false' and
|
||||
settings['password'] != '' and
|
||||
settings['username'] != ''):
|
||||
command += LIBRESPOT_AUTHENTICATE
|
||||
self.command = shlex.split(command.format(**quoted))
|
||||
log(shlex.split(command.format(**dict(quoted, password='*obfuscated*'))))
|
||||
self.is_aborted = False
|
||||
self.is_dead = False
|
||||
self.pulseaudio = Pulseaudio(settings)
|
||||
self.listitem = xbmcgui.ListItem()
|
||||
self.listitem.addStreamInfo('audio', {'codec': CODEC})
|
||||
self.listitem.setPath(path=self.pulseaudio.url)
|
||||
|
||||
def __enter__(self):
|
||||
self.pulseaudio.load_modules()
|
||||
self.panics = 0
|
||||
self.librespot = None
|
||||
self.is_playing_librespot = False
|
||||
if not self.isPlaying():
|
||||
self.start_librespot()
|
||||
|
||||
def __exit__(self, *args):
|
||||
self.stop_librespot()
|
||||
self.pulseaudio.unload_modules()
|
||||
|
||||
def on_event_panic(self):
|
||||
self.pulseaudio.suspend_sink(1)
|
||||
self.panics += 1
|
||||
log('event panic {}/{}'.format(self.panics, MAX_PANICS))
|
||||
self.is_dead = self.panics >= MAX_PANICS
|
||||
self.stop_librespot(True)
|
||||
|
||||
def on_event_playing(self, type, id):
|
||||
log('event playing')
|
||||
SPOTIFY.update_listitem(self.listitem, type, id, self.country)
|
||||
if not self.isPlaying():
|
||||
log('starting librespot playback')
|
||||
self.pulseaudio.suspend_sink(0)
|
||||
self.play(self.pulseaudio.url, self.listitem)
|
||||
elif self.is_playing_librespot:
|
||||
log('updating librespot playback')
|
||||
self.updateInfoTag(self.listitem)
|
||||
|
||||
def on_event_stopped(self):
|
||||
self.pulseaudio.suspend_sink(1)
|
||||
log('event stopped')
|
||||
self.panics = 0
|
||||
self.stop()
|
||||
|
||||
def onPlayBackEnded(self):
|
||||
self.onPlayBackStopped()
|
||||
|
||||
def onPlayBackError(self):
|
||||
self.onPlayBackStopped()
|
||||
|
||||
def onPlayBackStarted(self):
|
||||
log('Kodi playback started')
|
||||
self.is_playing_librespot = self.getPlayingFile() == self.pulseaudio.url
|
||||
if not self.is_playing_librespot:
|
||||
self.stop_librespot()
|
||||
|
||||
def onPlayBackStopped(self):
|
||||
if self.is_playing_librespot:
|
||||
log('librespot playback stopped')
|
||||
self.is_playing_librespot = False
|
||||
self.stop_librespot(True)
|
||||
else:
|
||||
log('Kodi playback stopped')
|
||||
self.start_librespot()
|
||||
|
||||
def run_librespot(self):
|
||||
log('librespot thread started')
|
||||
self.restart = True
|
||||
while self.restart and not self.is_dead:
|
||||
self.librespot = subprocess.Popen(
|
||||
self.command,
|
||||
cwd=ADDON_HOME,
|
||||
env=ADDON_ENVT,
|
||||
stderr=subprocess.STDOUT,
|
||||
stdout=subprocess.PIPE)
|
||||
log('librespot started')
|
||||
with self.librespot.stdout:
|
||||
while True:
|
||||
line = self.librespot.stdout.readline()
|
||||
if line == '':
|
||||
break
|
||||
words = line.split()
|
||||
if words[0] == '@Playing':
|
||||
self.on_event_playing(words[1], words[2])
|
||||
elif words[0] == '@Stopped':
|
||||
self.on_event_stopped()
|
||||
elif words[0] == 'stack':
|
||||
self.on_event_panic()
|
||||
else:
|
||||
log(line.rstrip())
|
||||
if 'Country:' in line:
|
||||
self.country = words[-1].strip('"')
|
||||
log('country={}'.format(self.country))
|
||||
self.pulseaudio.suspend_sink(1)
|
||||
self.stop()
|
||||
self.librespot.wait()
|
||||
log('librespot stopped')
|
||||
self.librespot = None
|
||||
log('librespot thread stopped')
|
||||
|
||||
def start_librespot(self):
|
||||
if self.librespot is None:
|
||||
self.thread = threading.Thread(target=self.run_librespot)
|
||||
self.thread.start()
|
||||
|
||||
def stop(self):
|
||||
if self.is_playing_librespot and not self.is_aborted:
|
||||
log('stopping librespot playback')
|
||||
self.is_playing_librespot = False
|
||||
super(Librespot, self).stop()
|
||||
|
||||
def stop_librespot(self, restart=False):
|
||||
self.restart = restart
|
||||
if self.librespot is not None:
|
||||
self.librespot.terminate()
|
||||
if not restart:
|
||||
self.thread.join()
|
||||
@@ -0,0 +1,35 @@
|
||||
import xbmc
|
||||
|
||||
from ls_addon import log as log
|
||||
from ls_addon import notification as notification
|
||||
from ls_librespot import Librespot as Librespot
|
||||
|
||||
|
||||
class Monitor(xbmc.Monitor):
|
||||
|
||||
def onSettingsChanged(self):
|
||||
self.is_changed = True
|
||||
|
||||
def run(self):
|
||||
log('monitor started')
|
||||
is_aborted = False
|
||||
is_dead = False
|
||||
while not (is_aborted or is_dead):
|
||||
self.is_changed = False
|
||||
librespot = Librespot()
|
||||
with librespot:
|
||||
while True:
|
||||
is_aborted = self.waitForAbort(1)
|
||||
if is_aborted:
|
||||
log('monitor aborted')
|
||||
librespot.is_aborted = True
|
||||
break
|
||||
is_dead = librespot.is_dead
|
||||
if is_dead:
|
||||
log('librespot died')
|
||||
notification('Too many errors')
|
||||
break
|
||||
if self.is_changed:
|
||||
log('settings changed')
|
||||
break
|
||||
log('monitor stopped')
|
||||
@@ -0,0 +1,46 @@
|
||||
import subprocess
|
||||
|
||||
from ls_addon import log as log
|
||||
|
||||
|
||||
def run(command):
|
||||
return subprocess.check_output(command.split())
|
||||
|
||||
|
||||
class Pulseaudio:
|
||||
|
||||
def __init__(self, settings):
|
||||
self.null_sink = dict(
|
||||
module='module-null-sink',
|
||||
args='sink_name={device}'.format(**settings)
|
||||
)
|
||||
self.rtp_send = dict(
|
||||
module='module-rtp-send',
|
||||
args='destination_ip={rtp_dest} port={rtp_port}'
|
||||
' source={device}.monitor'.format(**settings)
|
||||
)
|
||||
self.suspend = 'pactl suspend-sink {device} {{}}'.format(**settings)
|
||||
self.url = 'rtp://{rtp_dest}:{rtp_port}'.format(**settings)
|
||||
|
||||
def list_modules(self):
|
||||
return [module.split('\t')
|
||||
for module in run('pactl list modules short').splitlines()[::-1]]
|
||||
|
||||
def load_modules(self):
|
||||
args = [module[2] for module in self.list_modules()]
|
||||
for module in [self.null_sink, self.rtp_send]:
|
||||
if module['args'] not in args:
|
||||
run('pactl load-module {} {}'.format(
|
||||
module['module'], module['args']))
|
||||
log('loaded {} {}'.format(module['module'], module['args']))
|
||||
self.suspend_sink(1)
|
||||
|
||||
def suspend_sink(self, bit):
|
||||
run(self.suspend.format(bit))
|
||||
log('suspended sink {}'.format(bit))
|
||||
|
||||
def unload_modules(self):
|
||||
for module in self.list_modules():
|
||||
if module[2] in [self.null_sink['args'], self.rtp_send['args']]:
|
||||
run('pactl unload-module {}'.format(module[0]))
|
||||
log('unloaded {} {}'.format(module[1], module[2]))
|
||||
@@ -0,0 +1,80 @@
|
||||
import requests
|
||||
import time
|
||||
|
||||
|
||||
from ls_addon import ADDON_ICON as ADDON_ICON
|
||||
from ls_addon import log as log
|
||||
|
||||
|
||||
SPOTIFY_ENDPOINT_EPISODES = 'https://api.spotify.com/v1/episodes/'
|
||||
SPOTIFY_ENDPOINT_TRACKS = 'https://api.spotify.com/v1/tracks/'
|
||||
SPOTIFY_HEADERS = {
|
||||
'Accept': 'application/json',
|
||||
'Content-Type': 'application/json',
|
||||
}
|
||||
SPOTIFY_REQUEST_TOKEN = {
|
||||
'url': 'https://accounts.spotify.com/api/token',
|
||||
'data': {'grant_type': 'client_credentials'},
|
||||
'headers': {'Authorization': 'Basic MTY5ZGY1NTMyZGVlNDdhNTk5MTNmODUyOGU4M2FlNzE6MWYzZDhiNTA3YmJlNGY2OGJlYjNhNDQ3MmU4YWQ0MTE='}
|
||||
}
|
||||
|
||||
|
||||
def get(info, indices, default):
|
||||
try:
|
||||
for index in indices:
|
||||
info = info[index]
|
||||
return info.encode('utf-8')
|
||||
except LookupError:
|
||||
return default
|
||||
|
||||
|
||||
class Spotify:
|
||||
|
||||
def __init__(self):
|
||||
self.headers = SPOTIFY_HEADERS
|
||||
self.expiration = time.time()
|
||||
|
||||
def get_headers(self):
|
||||
if time.time() > self.expiration:
|
||||
log('token expired')
|
||||
token = requests.post(**SPOTIFY_REQUEST_TOKEN).json()
|
||||
log(token)
|
||||
self.expiration = time.time() + float(token['expires_in']) - 5
|
||||
self.headers['Authorization'] = 'Bearer {}'.format(
|
||||
token['access_token'])
|
||||
|
||||
def get_endpoint(self, endpoint, id, market):
|
||||
try:
|
||||
self.get_headers()
|
||||
return requests.get(url=endpoint + id,
|
||||
headers=self.headers,
|
||||
params=dict(market=market)).json()
|
||||
except Exception as e:
|
||||
log('failed to get {} from Spotify {}'.format(endpoint, e))
|
||||
return {}
|
||||
|
||||
def update_listitem(self, listitem, type, id, market='SE'):
|
||||
if type == 'Podcast':
|
||||
info = self.get_endpoint(SPOTIFY_ENDPOINT_EPISODES, id, market)
|
||||
album = get(info, ['show', 'name'], 'unknown show',)
|
||||
artist = get(info, ['show', 'publisher'], 'unknown publisher')
|
||||
thumb = get(info, ['images', 0, 'url'], ADDON_ICON)
|
||||
title = get(info, ['name'], 'unknown episode')
|
||||
elif type == 'Track':
|
||||
info = self.get_endpoint(SPOTIFY_ENDPOINT_TRACKS, id, market)
|
||||
album = get(info, ['album', 'name'], 'unknown album')
|
||||
artist = get(info, ['artists', 0, 'name'], 'unknown artist')
|
||||
thumb = get(info, ['album', 'images', 0, 'url'], ADDON_ICON)
|
||||
title = get(info, ['name'], 'unknown title')
|
||||
else:
|
||||
album = ''
|
||||
artist = 'Unknown Media Type'
|
||||
thumb = ADDON_ICON
|
||||
title = ''
|
||||
listitem.setArt(dict(fanart=thumb, thumb=thumb))
|
||||
listitem.setInfo('music', dict(
|
||||
album=album, artist=artist, title=title))
|
||||
log('{}#{}#{}#{}'.format(title, artist, album, thumb))
|
||||
|
||||
|
||||
SPOTIFY = Spotify()
|
||||
@@ -1,8 +1,11 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<settings>
|
||||
<category label="30100">
|
||||
<setting label="30101" id="ls_a" type="bool" default="false" />
|
||||
<setting label="30102" id="ls_u" type="text" default="" subsetting="true" visible="eq(-1,true)" />
|
||||
<setting label="30103" id="ls_p" type="text" default="" subsetting="true" visible="eq(-2,true)" option="hidden" />
|
||||
<setting label="30101" id="autoplay" type="bool" default="true" />
|
||||
<setting label="30102" id="discovery" type="bool" default="true" />
|
||||
<setting label="30103" id="username" type="text" default="" subsetting="true" visible="eq(-1,false)" />
|
||||
<setting label="30104" id="password" type="text" default="" subsetting="true" visible="eq(-2,false)" option="hidden" />
|
||||
<setting label="30105" id="name" type="text" default="Librespot@{}" />
|
||||
<setting label="30106" id="rtp_port" type="number" default="24642" />
|
||||
</category>
|
||||
</settings>
|
||||
|
||||
@@ -1,5 +0,0 @@
|
||||
<settings version="2">
|
||||
<setting id="ls_a" default="true">false</setting>
|
||||
<setting id="ls_p" default="true"></setting>
|
||||
<setting id="ls_u" default="true"></setting>
|
||||
</settings>
|
||||
@@ -1,13 +0,0 @@
|
||||
[Unit]
|
||||
Description=librespot
|
||||
Wants=kodi.service
|
||||
After=kodi.service
|
||||
|
||||
[Service]
|
||||
EnvironmentFile=/storage/.kodi/addons/service.librespot/ls_env.py
|
||||
ExecStart=/bin/sh /storage/.kodi/addons/service.librespot/bin/librespot.start
|
||||
ExecStopPost=-/usr/bin/pactl suspend-sink librespot_sink 1
|
||||
Restart=always
|
||||
|
||||
[Install]
|
||||
WantedBy=kodi.service
|
||||
@@ -1,3 +1,6 @@
|
||||
109
|
||||
- Update to 1.4.2
|
||||
|
||||
108
|
||||
- Update to 1.2.0
|
||||
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
# Copyright (C) 2016-present Team LibreELEC (https://libreelec.tv)
|
||||
|
||||
PKG_NAME="syncthing"
|
||||
PKG_VERSION="1.2.0"
|
||||
PKG_SHA256="0339877effdcf3bf8aa7d4d1e50b878992792e4752ff778f27788bf71eccecd0"
|
||||
PKG_REV="108"
|
||||
PKG_VERSION="1.4.2"
|
||||
PKG_SHA256="061af43c1bbfcdf949499cdc50a325fff7cd67fb48f9d270adb52b4decbab899"
|
||||
PKG_REV="109"
|
||||
PKG_ARCH="any"
|
||||
PKG_LICENSE="MPLv2"
|
||||
PKG_SITE="https://syncthing.net/"
|
||||
@@ -21,19 +21,15 @@ PKG_ADDON_TYPE="xbmc.service"
|
||||
PKG_MAINTAINER="Anton Voyl (awiouy)"
|
||||
|
||||
configure_target() {
|
||||
export GOLANG=$TOOLCHAIN/lib/golang/bin/go
|
||||
|
||||
cd $PKG_BUILD
|
||||
$GOLANG generate -v ./lib/auto ./cmd/strelaypoolsrv/auto
|
||||
|
||||
export GOOS=linux
|
||||
export CGO_CFLAGS=${CFLAGS}
|
||||
export CGO_ENABLED=1
|
||||
export CGO_NO_EMULATION=1
|
||||
export CGO_CFLAGS=$CFLAGS
|
||||
export LDFLAGS="-w -linkmode external -extldflags -Wl,--unresolved-symbols=ignore-in-shared-libs -extld $CC -X main.Version=v$PKG_VERSION"
|
||||
export GOPATH=$PKG_BUILD:$PKG_BUILD/Godeps/_workspace
|
||||
export GOROOT=$TOOLCHAIN/lib/golang
|
||||
export PATH=$PATH:$GOROOT/bin
|
||||
export GOLANG=${TOOLCHAIN}/lib/golang/bin/go
|
||||
export GOOS=linux
|
||||
export GOROOT=${TOOLCHAIN}/lib/golang
|
||||
export LDFLAGS="-w -linkmode external -extldflags -Wl,--unresolved-symbols=ignore-in-shared-libs -extld ${CC} \
|
||||
-X github.com/syncthing/syncthing/lib/build.Version=v${PKG_VERSION}"
|
||||
export PATH=${PATH}:${GOROOT}/bin
|
||||
|
||||
case $TARGET_ARCH in
|
||||
x86_64)
|
||||
@@ -57,14 +53,10 @@ configure_target() {
|
||||
}
|
||||
|
||||
make_target() {
|
||||
mkdir -p $PKG_BUILD/src/github.com/syncthing
|
||||
ln -sf $PKG_BUILD $PKG_BUILD/src/github.com/syncthing/syncthing
|
||||
cd $PKG_BUILD/src/github.com/syncthing/syncthing
|
||||
mkdir bin
|
||||
$GOLANG build -v -o bin/syncthing -a -ldflags "$LDFLAGS" ./cmd/syncthing
|
||||
${GOLANG} build -v -o bin/syncthing -a -ldflags "${LDFLAGS}" ./cmd/syncthing
|
||||
}
|
||||
|
||||
addon() {
|
||||
mkdir -p $ADDON_BUILD/$PKG_ADDON_ID/bin
|
||||
cp -P $PKG_BUILD/bin/syncthing $ADDON_BUILD/$PKG_ADDON_ID/bin
|
||||
mkdir -p ${ADDON_BUILD}/${PKG_ADDON_ID}/bin
|
||||
cp -P ${PKG_BUILD}/bin/syncthing ${ADDON_BUILD}/${PKG_ADDON_ID}/bin
|
||||
}
|
||||
|
||||
@@ -6,8 +6,6 @@
|
||||
. /etc/profile
|
||||
oe_setup_addon service.system.syncthing
|
||||
|
||||
chmod +x $ADDON_DIR/bin/*
|
||||
|
||||
STNODEFAULTFOLDER="y" syncthing -home=$ADDON_HOME \
|
||||
-gui-address="$gui_address" \
|
||||
-logflags=0 \
|
||||
|
||||
@@ -16,5 +16,5 @@ class Monitor(xbmc.Monitor):
|
||||
subprocess.call(['systemctl', 'restart', self.id])
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
if __name__ == '__main__':
|
||||
Monitor().waitForAbort()
|
||||
|
||||
@@ -1,3 +1,11 @@
|
||||
122
|
||||
- update gnutls to 3.6.13
|
||||
|
||||
121
|
||||
- update to 4.2.8-36
|
||||
- update comskip to 2019-11-03
|
||||
- fixed default recording path
|
||||
|
||||
120
|
||||
- update to 4.2.8-27
|
||||
- update comskip to 2019-03-30
|
||||
|
||||
@@ -2,10 +2,10 @@
|
||||
# Copyright (C) 2016-present Team LibreELEC (https://libreelec.tv)
|
||||
|
||||
PKG_NAME="tvheadend42"
|
||||
PKG_VERSION="5c1b37b50e99f9bf91d38f08f7bd358ee270660f"
|
||||
PKG_SHA256="cfce42a6534eec1728b4e84906f845d4805618e584624d1777d038f9377eed98"
|
||||
PKG_VERSION_NUMBER="4.2.8-27"
|
||||
PKG_REV="120"
|
||||
PKG_VERSION="5bdcfd8ac97b3337e1c7911ae24127df76fa693a"
|
||||
PKG_SHA256="b562a26248cdc02dc94cc62038deea172668fa4c079b2ea4e1b4220f3b1d34f5"
|
||||
PKG_VERSION_NUMBER="4.2.8-36"
|
||||
PKG_REV="122"
|
||||
PKG_ARCH="any"
|
||||
PKG_LICENSE="GPL"
|
||||
PKG_SITE="http://www.tvheadend.org"
|
||||
|
||||
@@ -37,6 +37,11 @@ if [ -f "$ADDON_HOME/dvr/config/dvr-config" ]; then
|
||||
rm $ADDON_HOME/dvr/config/dvr-config
|
||||
fi
|
||||
|
||||
# workaround to create default Tvh directories without entering samba share
|
||||
if [ ! -d "/storage/recordings" ]; then
|
||||
mkdir -p /storage/recordings /storage/picons/tvh /storage/picons/vdr
|
||||
fi
|
||||
|
||||
if [ -f "$ADDON_HOME/channel/config/config.tmp" ]; then
|
||||
rm $ADDON_HOME/channel/config/config.tmp
|
||||
fi
|
||||
|
||||
@@ -1,3 +1,12 @@
|
||||
110
|
||||
- Update to 3.1.5
|
||||
|
||||
109
|
||||
- Fix x86_64 url
|
||||
|
||||
108
|
||||
- Update to 3.1.3
|
||||
|
||||
107
|
||||
- Update to 2.2.6
|
||||
|
||||
|
||||
@@ -4,24 +4,24 @@
|
||||
case "$ARCH" in
|
||||
"aarch64")
|
||||
PKG_NC_ARCH="arm64"
|
||||
PKG_SHA256="48d58ac6ff958ec7155befe76f83e276aceff50c4a7d1f578444a9a40720e412"
|
||||
PKG_URL="https://download.visualstudio.microsoft.com/download/pr/f5e04830-50fc-435c-8bb5-fcd4629da944/8aa7cce5c3fcb6a7db180b923d3574ef/dotnet-runtime-2.2.6-linux-arm64.tar.gz"
|
||||
PKG_SHA256="05875790fbfc487cefb04fc6ff6d9a3ade147f1ae554e859dca60ea6a3c232aa"
|
||||
PKG_URL="https://download.visualstudio.microsoft.com/download/pr/65291ed8-e931-4605-9d5a-265928a835d0/1a15d18655c8b260170117e9bd1a1cb7/dotnet-runtime-3.1.5-linux-arm64.tar.gz"
|
||||
;;
|
||||
"arm")
|
||||
PKG_NC_ARCH="arm"
|
||||
PKG_SHA256="a4f2e63471c296b7b173105a2c1d5feb95b81e0a8131f73aeecc00440fa5f544"
|
||||
PKG_URL="https://download.visualstudio.microsoft.com/download/pr/428aaa32-f66c-4847-b845-aa21f90504e4/1cf033db866414997140c2672bd75069/dotnet-runtime-2.2.6-linux-arm.tar.gz"
|
||||
PKG_SHA256="5728786f517410f25c59799f443d0336129d6b1680fd40cb5b40202407949008"
|
||||
PKG_URL="https://download.visualstudio.microsoft.com/download/pr/15132a5c-f0f4-4373-8b8b-b7e70834d899/cad479dda52359ad43956471274ec932/dotnet-runtime-3.1.5-linux-arm.tar.gz"
|
||||
;;
|
||||
"x86_64")
|
||||
PKG_NC_ARCH="x64"
|
||||
PKG_SHA256="e30d4568c62d747b030e3c74f3d528ecb8d5c90e844e506bc0e3fcbce52b8cb1"
|
||||
PKG_URL="https://download.visualstudio.microsoft.com/download/pr/9f21e352-9d2c-4e3b-af45-915da89158db/0e8a7ea83cc08d4bcf417a927a36ed6f/dotnet-runtime-2.2.6-linux-x64.tar.gz"
|
||||
PKG_SHA256="ae0a4e9a1e875b46d3201cdad2779572de1c12c0aae36688ae3c3978db319ff5"
|
||||
PKG_URL="https://download.visualstudio.microsoft.com/download/pr/d00eaeea-6d7b-4e73-9d96-c0234ed3b665/0d25d9d1aeaebdeef01d15370d5cd22b/dotnet-runtime-3.1.5-linux-x64.tar.gz"
|
||||
;;
|
||||
esac
|
||||
|
||||
PKG_NAME="dotnet-runtime"
|
||||
PKG_VERSION="2.2.6"
|
||||
PKG_REV="107"
|
||||
PKG_VERSION="3.1.5"
|
||||
PKG_REV="110"
|
||||
PKG_ARCH="any"
|
||||
PKG_LICENSE="MIT"
|
||||
PKG_SITE="https://dotnet.github.io/"
|
||||
|
||||
@@ -1,10 +1,19 @@
|
||||
110
|
||||
- Update gnutls to 3.6.13
|
||||
|
||||
109
|
||||
- Update AV1 to 2019-11-15
|
||||
- Update FFmpeg to 4.2.1
|
||||
- Update VPX to 1.8.1
|
||||
- Update x265 to 3.2
|
||||
|
||||
108
|
||||
- Update FFmpeg to 4.1.4
|
||||
- Update libopus to 1.3.1
|
||||
- Update gnutls to 3.6.10
|
||||
|
||||
107
|
||||
- Update aom to 2019-03-05
|
||||
- Update AV1 to 2019-03-05
|
||||
- Update FFmpeg to 4.1.3
|
||||
- Update x264 to 2019-03-06
|
||||
- Update x265 to 3.0
|
||||
@@ -18,7 +27,7 @@
|
||||
- Update AV1 to 2019-01-09
|
||||
|
||||
104
|
||||
- Update aom to d2a592e
|
||||
- Update AV1 to d2a592e
|
||||
- Update FFmpeg to 4.1
|
||||
- Update opus to 1.3
|
||||
- Update x264 to 2018-11-16
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
PKG_NAME="ffmpeg-tools"
|
||||
PKG_VERSION="1.0"
|
||||
PKG_REV="108"
|
||||
PKG_REV="110"
|
||||
PKG_ARCH="any"
|
||||
PKG_LICENSE="GPL"
|
||||
PKG_SITE="https://libreelec.tv"
|
||||
@@ -23,8 +23,8 @@ addon() {
|
||||
|
||||
# copy gnutls lib that is needed for ffmpeg
|
||||
mkdir -p $ADDON_BUILD/$PKG_ADDON_ID/lib
|
||||
cp -PL $(get_build_dir gmp)/.install_pkg/usr/lib/libgmp.so.10 $ADDON_BUILD/$PKG_ADDON_ID/lib
|
||||
cp -PL $(get_build_dir gnutls)/.INSTALL_PKG/usr/lib/libgnutls.so.30 $ADDON_BUILD/$PKG_ADDON_ID/lib
|
||||
cp -PL $(get_build_dir nettle)/.install_pkg/usr/lib/libhogweed.so.4 $ADDON_BUILD/$PKG_ADDON_ID/lib
|
||||
cp -PL $(get_build_dir nettle)/.install_pkg/usr/lib/libnettle.so.6 $ADDON_BUILD/$PKG_ADDON_ID/lib
|
||||
cp -PL $(get_build_dir gmp)/.install_pkg/usr/lib/libgmp.so.10 \
|
||||
$(get_build_dir gnutls)/.INSTALL_PKG/usr/lib/libgnutls.so.30 \
|
||||
$(get_build_dir nettle)/.install_pkg/usr/lib/{libhogweed.so.4,libnettle.so.6} \
|
||||
$ADDON_BUILD/$PKG_ADDON_ID/lib
|
||||
}
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
104
|
||||
- drop iw
|
||||
|
||||
103
|
||||
- added rar2fs
|
||||
- updated iperf to 3.6
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
PKG_NAME="network-tools"
|
||||
PKG_VERSION="1.0"
|
||||
PKG_REV="103"
|
||||
PKG_REV="104"
|
||||
PKG_ARCH="any"
|
||||
PKG_LICENSE="GPL"
|
||||
PKG_SITE="https://libreelec.tv"
|
||||
@@ -11,7 +11,7 @@ PKG_URL=""
|
||||
PKG_DEPENDS_TARGET="toolchain"
|
||||
PKG_SECTION="virtual"
|
||||
PKG_SHORTDESC="A bundle of network tools and programs"
|
||||
PKG_LONGDESC="This bundle currently includes bwm-ng, iftop, iperf, irssi, iw, lftp, ncftp, ngrep, nmap, rar2fs, rsync, sshfs, tcpdump, udpxy and wireless_tools."
|
||||
PKG_LONGDESC="This bundle currently includes bwm-ng, iftop, iperf, irssi, lftp, ncftp, ngrep, nmap, rar2fs, rsync, sshfs, tcpdump, udpxy and wireless_tools."
|
||||
|
||||
PKG_IS_ADDON="yes"
|
||||
PKG_ADDON_NAME="Network Tools"
|
||||
@@ -22,7 +22,6 @@ PKG_DEPENDS_TARGET="toolchain \
|
||||
iftop \
|
||||
iperf \
|
||||
irssi \
|
||||
iw \
|
||||
lftp \
|
||||
ncftp \
|
||||
ngrep \
|
||||
@@ -49,9 +48,6 @@ addon() {
|
||||
# irssi
|
||||
cp -P $(get_build_dir irssi)/.$TARGET_NAME/src/fe-text/irssi $ADDON_BUILD/$PKG_ADDON_ID/bin
|
||||
|
||||
# iw
|
||||
cp -P $(get_build_dir iw)/iw $ADDON_BUILD/$PKG_ADDON_ID/bin
|
||||
|
||||
# lftp
|
||||
cp -P $(get_build_dir lftp)/.$TARGET_NAME/src/lftp $ADDON_BUILD/$PKG_ADDON_ID/bin
|
||||
|
||||
|
||||
2
packages/audio/alsa-lib/modprobe.d/intel-audio.conf
Normal file
2
packages/audio/alsa-lib/modprobe.d/intel-audio.conf
Normal file
@@ -0,0 +1,2 @@
|
||||
# work around no audio issue on Intel NUCs
|
||||
blacklist snd_soc_skl
|
||||
@@ -9,7 +9,7 @@ PKG_LICENSE="GPL"
|
||||
PKG_SITE="http://www.gnu.org/software/binutils/"
|
||||
PKG_URL="http://ftpmirror.gnu.org/binutils/$PKG_NAME-$PKG_VERSION.tar.gz"
|
||||
PKG_DEPENDS_HOST="ccache:host bison:host flex:host linux:host"
|
||||
PKG_DEPENDS_TARGET="toolchain binutils:host"
|
||||
PKG_DEPENDS_TARGET="toolchain zlib binutils:host"
|
||||
PKG_LONGDESC="A GNU collection of binary utilities."
|
||||
|
||||
PKG_CONFIGURE_OPTS_HOST="--target=$TARGET_NAME \
|
||||
@@ -31,6 +31,7 @@ PKG_CONFIGURE_OPTS_HOST="--target=$TARGET_NAME \
|
||||
PKG_CONFIGURE_OPTS_TARGET="--target=$TARGET_NAME \
|
||||
--with-sysroot=$SYSROOT_PREFIX \
|
||||
--with-lib-path=$SYSROOT_PREFIX/lib:$SYSROOT_PREFIX/usr/lib \
|
||||
--with-system-zlib \
|
||||
--without-ppl \
|
||||
--without-cloog \
|
||||
--enable-static \
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
# Copyright (C) 2016-present Team LibreELEC (https://libreelec.tv)
|
||||
|
||||
PKG_NAME="libretro-2048"
|
||||
PKG_VERSION="54d3ddd3c9f81d7bbd5714a670913e46301781c7"
|
||||
PKG_SHA256="cb5616e0984bdf364c7537c998e7341d95f00616aacf23cf8b3a59e6bb1352ba"
|
||||
PKG_VERSION="74d10e41b86111d42309103d3bd7e8910263b1d1"
|
||||
PKG_SHA256="56cb85b12f8050dff1bf4331dee7a18dcc7b532dea0ec6c9125d9e75e133596e"
|
||||
PKG_LICENSE="Public domain"
|
||||
PKG_SITE="https://github.com/libretro/libretro-2048"
|
||||
PKG_URL="https://github.com/libretro/libretro-2048/archive/$PKG_VERSION.tar.gz"
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
# Copyright (C) 2016-present Team LibreELEC (https://libreelec.tv)
|
||||
|
||||
PKG_NAME="libretro-4do"
|
||||
PKG_VERSION="1fa503598323f7c573deca8dfef44f3b465c8074"
|
||||
PKG_SHA256="28d8a084fc67d29b27f837800e87307a2365637d92994b9edb2660fade7cfce7"
|
||||
PKG_VERSION="da814a868c41fb47f265e04e5f95756cda62e5c2"
|
||||
PKG_SHA256="6a3ec326d35ae55fa4e749c600d9eb538fb7c1c3b9ffd1fa1ac6064f4bf5e7b4"
|
||||
PKG_LICENSE="LGPL"
|
||||
PKG_SITE="https://github.com/libretro/4do-libretro"
|
||||
PKG_URL="https://github.com/libretro/4do-libretro/archive/$PKG_VERSION.tar.gz"
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
# Copyright (C) 2016-present Team LibreELEC (https://libreelec.tv)
|
||||
|
||||
PKG_NAME="libretro-beetle-bsnes"
|
||||
PKG_VERSION="b40adc710bd14684bbb53102a7e42267a8dea9cb"
|
||||
PKG_SHA256="21c39d3557e89b2ae1f1397a996e49f5f73c1e7767d505faff8d1b4fe84357ff"
|
||||
PKG_VERSION="de22d8420ea606f1b2f72afd4dda34619cf2cc20"
|
||||
PKG_SHA256="d55d677a03b48861e34e5ff30402d82024ec6ed7c267e825741d134c4092dd3d"
|
||||
PKG_LICENSE="GPLv2"
|
||||
PKG_SITE="https://github.com/libretro/beetle-bsnes-libretro"
|
||||
PKG_URL="https://github.com/libretro/beetle-bsnes-libretro/archive/$PKG_VERSION.tar.gz"
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
# Copyright (C) 2016-present Team LibreELEC (https://libreelec.tv)
|
||||
|
||||
PKG_NAME="libretro-beetle-gba"
|
||||
PKG_VERSION="654ded0ff7d4c257424891b8b6601b09aa22d003"
|
||||
PKG_SHA256="46256f7cae839f0fa863127b2b30d1475d189210a869d317d70134460d1c4706"
|
||||
PKG_VERSION="135afdbb9591655a3e016b75abba07e481f6d406"
|
||||
PKG_SHA256="5adab5108fb8a703414e9090c12e44e7dc7d09dba4d08e1da798a36a64a88f51"
|
||||
PKG_LICENSE="GPLv2"
|
||||
PKG_SITE="https://github.com/libretro/beetle-gba-libretro"
|
||||
PKG_URL="https://github.com/libretro/beetle-gba-libretro/archive/$PKG_VERSION.tar.gz"
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
# Copyright (C) 2016-present Team LibreELEC (https://libreelec.tv)
|
||||
|
||||
PKG_NAME="libretro-beetle-lynx"
|
||||
PKG_VERSION="9e1de59736b28c8f0cbfe759e0480b19c3dc7bcb"
|
||||
PKG_SHA256="9d769dcd98e82091c3a92f5fd3372cc3ac9ad16b2df796c221b8c445cc277c14"
|
||||
PKG_VERSION="74dde204c0ec6c4bc4cd7821c14548387fbd9ce8"
|
||||
PKG_SHA256="2cf62c74d5fbfd6ead0a83a6778b932a18d5ab6957b5603b56539fefd819e820"
|
||||
PKG_LICENSE="GPLv2"
|
||||
PKG_SITE="https://github.com/libretro/beetle-lynx-libretro"
|
||||
PKG_URL="https://github.com/libretro/beetle-lynx-libretro/archive/$PKG_VERSION.tar.gz"
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
# Copyright (C) 2016-present Team LibreELEC (https://libreelec.tv)
|
||||
|
||||
PKG_NAME="libretro-beetle-ngp"
|
||||
PKG_VERSION="a9699f06f98be27b942e55a18e128d9a90f532a1"
|
||||
PKG_SHA256="caacdff636c504cb4777c39c90e0ecfead1c835480f4a1ac8e5bab59aaf089cc"
|
||||
PKG_VERSION="6f15532b6ad17a2d5eb9dc8241d6af62416e796b"
|
||||
PKG_SHA256="4b88ab57bac0d5d61a24c7f9d5aa193cd21a6feb3a95b2c54611b165b79f8c19"
|
||||
PKG_LICENSE="GPLv2"
|
||||
PKG_SITE="https://github.com/libretro/beetle-ngp-libretro"
|
||||
PKG_URL="https://github.com/libretro/beetle-ngp-libretro/archive/$PKG_VERSION.tar.gz"
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
# Copyright (C) 2016-present Team LibreELEC (https://libreelec.tv)
|
||||
|
||||
PKG_NAME="libretro-beetle-pce-fast"
|
||||
PKG_VERSION="942568f3a72d612ff514226c9eb54b82393d14b2"
|
||||
PKG_SHA256="983ffd3edbf74c44a2caa5ee0d9fecf165dece3de0128acdcfd9ee2566e0313c"
|
||||
PKG_VERSION="019179ce335b68a22dcba94ae6c51cad8135ee16"
|
||||
PKG_SHA256="0304948b3a5300e16d14907d6c19ce21a353f25f46e77648d3ce8244c89ccabf"
|
||||
PKG_LICENSE="GPLv2"
|
||||
PKG_SITE="https://github.com/libretro/beetle-pce-fast-libretro"
|
||||
PKG_URL="https://github.com/libretro/beetle-pce-fast-libretro/archive/$PKG_VERSION.tar.gz"
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
# Copyright (C) 2016-present Team LibreELEC (https://libreelec.tv)
|
||||
|
||||
PKG_NAME="libretro-beetle-pcfx"
|
||||
PKG_VERSION="41c76e6ddaf7e0a622408da26377ee9ba92f3785"
|
||||
PKG_SHA256="3e87228ed61e204a4b717ae064b317fe305622bcb1ae144038f6098e8e135d21"
|
||||
PKG_VERSION="7bba6699d6f903bd701b0aa525d845de8427fee6"
|
||||
PKG_SHA256="484d5f757e21c95f574365e7b1bf1ee41e574662396d469eff44ed08d20d4123"
|
||||
PKG_LICENSE="GPLv2"
|
||||
PKG_SITE="https://github.com/libretro/beetle-pcfx-libretro"
|
||||
PKG_URL="https://github.com/libretro/beetle-pcfx-libretro/archive/$PKG_VERSION.tar.gz"
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
# Copyright (C) 2016-present Team LibreELEC (https://libreelec.tv)
|
||||
|
||||
PKG_NAME="libretro-beetle-psx"
|
||||
PKG_VERSION="fc06bbefaf1324b2ab2f77c518f986a0573d8a5b"
|
||||
PKG_SHA256="7bfe52163a3048a3d9aa6caae295f57a6532485bfb676258d295f9d7dd1daa1c"
|
||||
PKG_VERSION="c7c8ffd3d2cf1c780ccf98417e60908f9adf970d"
|
||||
PKG_SHA256="61e1495f49a6584038c19bcd797668a430bc74fd94cd7be24fbd9ce31158dfa4"
|
||||
PKG_LICENSE="GPLv2"
|
||||
PKG_SITE="https://github.com/libretro/beetle-psx-libretro"
|
||||
PKG_URL="https://github.com/libretro/beetle-psx-libretro/archive/$PKG_VERSION.tar.gz"
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
# Copyright (C) 2016-present Team LibreELEC (https://libreelec.tv)
|
||||
|
||||
PKG_NAME="libretro-beetle-saturn"
|
||||
PKG_VERSION="35e8cd757fde92dea66a42583961bf3e6deb24b8"
|
||||
PKG_SHA256="fe9605fee04afae3b54de31dad0135a5bd253744488fa6455811a6eb28d88c3b"
|
||||
PKG_VERSION="8a65943bb7bbc3183eeb0d57c4ac3e663f1bcc11"
|
||||
PKG_SHA256="91b33a5bd42c954ea2c5a4d2d529580f7f457c08a2a6353fd5c295591aadb64b"
|
||||
PKG_LICENSE="GPLv3"
|
||||
PKG_SITE="https://github.com/libretro/beetle-saturn-libretro"
|
||||
PKG_URL="https://github.com/libretro/beetle-saturn-libretro/archive/$PKG_VERSION.tar.gz"
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
# Copyright (C) 2016-present Team LibreELEC (https://libreelec.tv)
|
||||
|
||||
PKG_NAME="libretro-beetle-supergrafx"
|
||||
PKG_VERSION="326eaafd1a866ada2560056309ec69b31b0208fe"
|
||||
PKG_SHA256="8310746377c2f4c6c62d43ec59a0fe9c6f33c645ce9099f839d1de3c0f5786de"
|
||||
PKG_VERSION="fadef23d59fa5ec17bc99e1e722cfd9e10535695"
|
||||
PKG_SHA256="2059ab1e76b9bf22224683cc33205d81b7ec0edfdd8487ac431c2bbfbdf3e9dd"
|
||||
PKG_LICENSE="GPLv2"
|
||||
PKG_SITE="https://github.com/libretro/beetle-supergrafx-libretro"
|
||||
PKG_URL="https://github.com/libretro/beetle-supergrafx-libretro/archive/$PKG_VERSION.tar.gz"
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
# Copyright (C) 2016-present Team LibreELEC (https://libreelec.tv)
|
||||
|
||||
PKG_NAME="libretro-beetle-vb"
|
||||
PKG_VERSION="bf0d8ef224b268040888a929b1003e25dfbb493d"
|
||||
PKG_SHA256="ae5cafd7049d1be57a8b3ca3914edf4afa834e0026d01f1862911157028f127f"
|
||||
PKG_VERSION="9a4e604a7320a3c6ed30601989fe0bc417fa9ad3"
|
||||
PKG_SHA256="25a53560105b71797fd5172834b3f5a792962c26af876ab3821924bfa71b2ce2"
|
||||
PKG_LICENSE="GPLv2"
|
||||
PKG_SITE="https://github.com/libretro/beetle-vb-libretro"
|
||||
PKG_URL="https://github.com/libretro/beetle-vb-libretro/archive/$PKG_VERSION.tar.gz"
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
# Copyright (C) 2016-present Team LibreELEC (https://libreelec.tv)
|
||||
|
||||
PKG_NAME="libretro-beetle-wswan"
|
||||
PKG_VERSION="826f91f2e0960b2b68a27de7ad70a5d57043ebe7"
|
||||
PKG_SHA256="4db2f601ee62fa38dc05702c6b3bbb0def89acd42c5b140879beabaaa98b9ad4"
|
||||
PKG_VERSION="5b03d1b09f70dc208387d3c8b59e12e1f0d2692f"
|
||||
PKG_SHA256="1053e1a6f78aea569d2fb89a86df5f0df7463cb3f32312ee910a5227419c60e2"
|
||||
PKG_LICENSE="GPLv2"
|
||||
PKG_SITE="https://github.com/libretro/beetle-wswan-libretro"
|
||||
PKG_URL="https://github.com/libretro/beetle-wswan-libretro/archive/$PKG_VERSION.tar.gz"
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
# Copyright (C) 2016-present Team LibreELEC (https://libreelec.tv)
|
||||
|
||||
PKG_NAME="libretro-bluemsx"
|
||||
PKG_VERSION="65a9f35867f70d211ea7873b24727088378b9cc2"
|
||||
PKG_SHA256="4f9361eb3a201cc625a294844e85912cd767a85c61bd8d3c3d7f643dae628252"
|
||||
PKG_VERSION="7a1d40e750860580ab7cc21fbc244b5bc6db6586"
|
||||
PKG_SHA256="b6b97088339da982b9a8f2de2c4a4bf0a62ee91e611942b8e5b36ebff7fe7918"
|
||||
PKG_LICENSE="GPLv2"
|
||||
PKG_SITE="https://github.com/libretro/blueMSX-libretro"
|
||||
PKG_URL="https://github.com/libretro/blueMSX-libretro/archive/$PKG_VERSION.tar.gz"
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
# Copyright (C) 2016-present Team LibreELEC (https://libreelec.tv)
|
||||
|
||||
PKG_NAME="libretro-bnes"
|
||||
PKG_VERSION="f088d8d668ccfea1b03e4395f71774d719672d44"
|
||||
PKG_SHA256="54bc189d351197bdcbd3546942b69240a158af6e660bfb7472b7dd71c1a95444"
|
||||
PKG_VERSION="8e26e89a93bef8eb8992d1921b539dce1792660a"
|
||||
PKG_SHA256="c151e1296b8f6c035014dc62919692097feeebb19ae73294f1b9781edf1921b1"
|
||||
PKG_LICENSE="GPLv3"
|
||||
PKG_SITE="https://github.com/libretro/bnes-libretro"
|
||||
PKG_URL="https://github.com/libretro/bnes-libretro/archive/$PKG_VERSION.tar.gz"
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
# Copyright (C) 2016-present Team LibreELEC (https://libreelec.tv)
|
||||
|
||||
PKG_NAME="libretro-cap32"
|
||||
PKG_VERSION="23a8b5d3f664148660f759d1463c36fef7a79019"
|
||||
PKG_SHA256="0f6e13bae1ac65e9853dfdacf62b90fdf525421ac728a5d71d3b6b159c4b95b7"
|
||||
PKG_VERSION="8681fbdc5623830078b38d713935caf4682e5295"
|
||||
PKG_SHA256="32080778b0a9d1796091263eba33143ae147f298127dfb2c36f1a97cce00c788"
|
||||
PKG_LICENSE="GPLv3"
|
||||
PKG_SITE="https://github.com/libretro/libretro-cap32"
|
||||
PKG_URL="https://github.com/libretro/libretro-cap32/archive/$PKG_VERSION.tar.gz"
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
# Copyright (C) 2016-present Team LibreELEC (https://libreelec.tv)
|
||||
|
||||
PKG_NAME="libretro-desmume"
|
||||
PKG_VERSION="ae862a835bb508f685ae916d463f00624483b569"
|
||||
PKG_SHA256="13713a32e2e797308f6a677a0a8e65c628339519bd9a8a10b8a495c5120aa1d6"
|
||||
PKG_VERSION="e8cf461f83eebb195f09e70090f57b07d1bcdd9f"
|
||||
PKG_SHA256="71b3fe478d5773f16a9c1a52787c89535eec7b565479f58dd4de8ae8162dd456"
|
||||
PKG_LICENSE="GPLv2"
|
||||
PKG_SITE="https://github.com/libretro/desmume"
|
||||
PKG_URL="https://github.com/libretro/desmume/archive/$PKG_VERSION.tar.gz"
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
# Copyright (C) 2016-present Team LibreELEC (https://libreelec.tv)
|
||||
|
||||
PKG_NAME="libretro-dinothawr"
|
||||
PKG_VERSION="4dc35ebf937da42d98a1e1358c752f065858e6ca"
|
||||
PKG_SHA256="76514c865f4174391c40ae220768721ae3463f57173c19acba802dd48166337c"
|
||||
PKG_VERSION="18118f66f4a04897fd1cbbfa87cd8957f5bd22ad"
|
||||
PKG_SHA256="1363f2a6c6cfaaf3bce5933072ebfcd54fc9f3ce4050cf72a88cde607b4846ff"
|
||||
PKG_LICENSE="GPLv3"
|
||||
PKG_SITE="https://github.com/libretro/Dinothawr"
|
||||
PKG_URL="https://github.com/libretro/Dinothawr/archive/$PKG_VERSION.tar.gz"
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
# Copyright (C) 2016-present Team LibreELEC (https://libreelec.tv)
|
||||
|
||||
PKG_NAME="libretro-dosbox"
|
||||
PKG_VERSION="410746e07668314b880098b4dc8808a7855d02f3"
|
||||
PKG_SHA256="c52f195a46fa47e0536809f4745fb8f9c3dff2ecf19097342fc3cae9b423135b"
|
||||
PKG_VERSION="e4ed503b14ed59d5d745396ef1cc7d52cf912328"
|
||||
PKG_SHA256="f13b4235762db542a2ab0ae62a048d30ef71062af5dea1662864e27956eea2c9"
|
||||
PKG_LICENSE="GPLv2"
|
||||
PKG_SITE="https://github.com/libretro/dosbox-libretro"
|
||||
PKG_URL="https://github.com/libretro/dosbox-libretro/archive/$PKG_VERSION.tar.gz"
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
# Copyright (C) 2016-present Team LibreELEC (https://libreelec.tv)
|
||||
|
||||
PKG_NAME="libretro-fceumm"
|
||||
PKG_VERSION="81776d97c7644d745847e9bfabcde7f656036836"
|
||||
PKG_SHA256="492aa5d97bb6472667dced431c6015b25052fe9f8dc0bdd276c92b44f4214ac4"
|
||||
PKG_VERSION="0d569e9bab054f215f828184c1d63fa69f8abd0c"
|
||||
PKG_SHA256="1aae47c75abaf3d5a8e1250498956abc484cfcfbfec111ebadb46cbec63df36e"
|
||||
PKG_LICENSE="GPLv2"
|
||||
PKG_SITE="https://github.com/libretro/libretro-fceumm"
|
||||
PKG_URL="https://github.com/libretro/libretro-fceumm/archive/$PKG_VERSION.tar.gz"
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
# Copyright (C) 2016-present Team LibreELEC (https://libreelec.tv)
|
||||
|
||||
PKG_NAME="libretro-fmsx"
|
||||
PKG_VERSION="6b241974ffb4d2a3fc681b65a8ff6b717501cb67"
|
||||
PKG_SHA256="16d5fbdc0e5fcb0c7954fa531f8014ca251404c67975654e7b77c582d3b7d0fa"
|
||||
PKG_VERSION="3de916bbf15062de1ab322432d38a1fee29d5e68"
|
||||
PKG_SHA256="3947737df79a97be2dd156420a3951f4424d7a51e68a7cacc661ee3e2fa1d767"
|
||||
PKG_LICENSE="GPLv3"
|
||||
PKG_SITE="https://github.com/libretro/fmsx-libretro"
|
||||
PKG_URL="https://github.com/libretro/fmsx-libretro/archive/$PKG_VERSION.tar.gz"
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
# Copyright (C) 2016-present Team LibreELEC (https://libreelec.tv)
|
||||
|
||||
PKG_NAME="libretro-fuse"
|
||||
PKG_VERSION="8184756a5ee4b97e0f47281d44db4ca076a2671b"
|
||||
PKG_SHA256="2d419e423c448c036b07f5e2be6310cf2c27b750387cf4f511c3cbb27de9950b"
|
||||
PKG_VERSION="ef603d165914afc3f54971d082e69adea187c8ec"
|
||||
PKG_SHA256="a9e70f5413eca8f3e277fba1ed9076197b2b03e81abb0350c667fc6bfcdfd8eb"
|
||||
PKG_LICENSE="GPLv3"
|
||||
PKG_SITE="https://github.com/libretro/fuse-libretro"
|
||||
PKG_URL="https://github.com/libretro/fuse-libretro/archive/$PKG_VERSION.tar.gz"
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user