tvheadend: require GNU libiconv and drop the iconv self-test patch

tvheadend has no transliteration of its own.  It asks iconv for
"<charset>//TRANSLIT//IGNORE", a GNU extension that musl does not
implement.  Converting "ŽluťoučkýKůň" to ASCII on mpc85xx/p2020
(Turris 1.x), musl 1.2.6:

    charset                   musl             GNU libiconv
    ASCII//TRANSLIT//IGNORE   EINVAL           "Zlutouck'yKun"
    ASCII//TRANSLIT           EINVAL           "Zlutouck'yKun"
    ASCII                     "*lu*ou*k*K**"   EILSEQ

050-iconv-test-continue.patch removed the abort() from the startup
self-test that reports this, so the package could be built against
musl's iconv.  That silenced the check without fixing anything:
intlconv_utf8() still returns -EIO, so cleanup_filename() in
src/dvr/dvr_rec.c cannot build a recording file name and
pvr_generate_filename() fails.  The charset cannot be avoided either,
because intlconv_filesystem_charset() returns "ASCII" unless $LANG
names a UTF-8 locale, which OpenWrt does not set by default.

Depend on libiconv-full instead of $(ICONV_DEPENDS), which pulls it in
only when BUILD_NLS is set, and point the compiler at its staging prefix
when nls.mk has not already done so.  The binary then links against
libiconv.so.2, the self-test passes and the patch can be dropped.

Signed-off-by: Josef Schlehofer <pepe.schlehofer@gmail.com>
(cherry picked from commit f2c8300e25)
This commit is contained in:
Josef Schlehofer committed 2026-09-10 09:55:52 +02:00
1 parent 3599a82683
commit 57f095a9bc
2 files changed
+10 -14

No files matched your search

+10 -1
View File
@@ -20,6 +20,15 @@ PKG_BUILD_DEPENDS:=gettext-full/host
include $(INCLUDE_DIR)/package.mk
include $(INCLUDE_DIR)/nls.mk
# tvheadend needs iconv //TRANSLIT to build recording file names, which musl
# does not implement, so always build against GNU libiconv.
# With BUILD_NLS set, nls.mk already adds these for the same prefix.
ifneq ($(CONFIG_BUILD_NLS),y)
ICONV_FULL_PREFIX:=$(STAGING_DIR)/usr/lib/libiconv-full
TARGET_CFLAGS += -I$(ICONV_FULL_PREFIX)/include
TARGET_LDFLAGS += -L$(ICONV_FULL_PREFIX)/lib -Wl,-rpath-link=$(ICONV_FULL_PREFIX)/lib
endif
define Package/tvheadend
SECTION:=multimedia
CATEGORY:=Multimedia
@@ -32,7 +41,7 @@ define Package/tvheadend
+librt \
+libffi \
+libopenssl \
$(ICONV_DEPENDS) \
+libiconv-full \
+zlib \
+TVHEADEND_AVAHI_SUPPORT:libavahi-client \
+TVHEADEND_REGEX_PCRE2:libpcre2 \
@@ -1,13 +0,0 @@
--- a/src/intlconv.c
+++ b/src/intlconv.c
@@ -37,9 +37,8 @@ intlconv_test( void )
(strcmp(s, "ZlutouckyKun") &&
strcmp(s, "Zlutouck'yKun") &&
strcmp(s, "?lu?ou?k?K??"))) {
- tvherror(LS_MAIN, "iconv() routine is not working properly (%s), aborting!", s);
+ tvherror(LS_MAIN, "iconv() routine is not working properly (%s)", s);
tvh_safe_usleep(2000000);
- abort();
}
free(s);
}