From patchwork Tue Jan 31 15:20:44 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: glenvt18 X-Patchwork-Id: 39131 Received: from localhost ([127.0.0.1] helo=www.linuxtv.org) by www.linuxtv.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cYaF6-0004yv-DG; Tue, 31 Jan 2017 15:21:12 +0000 Received: from mail.tu-berlin.de ([130.149.7.33]) by www.linuxtv.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cYaF2-0004yg-Dh for vdr@linuxtv.org; Tue, 31 Jan 2017 15:21:09 +0000 X-tubIT-Incoming-IP: 209.85.215.68 Received: from mail-lf0-f68.google.com ([209.85.215.68]) by mail.tu-berlin.de (exim-4.84_2/mailfrontend-5) with esmtp for id 1cYaF0-0001OR-9P; Tue, 31 Jan 2017 16:21:08 +0100 Received: by mail-lf0-f68.google.com with SMTP id q89so34213446lfi.1 for ; Tue, 31 Jan 2017 07:21:06 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=Aq5dpKGlSnpCSwUpf2XBZnO0McZETOkrcWu/DGuxnIs=; b=nfGBjW8UouQHV+15uxC+lWOUIptgPlMquOsqIPii+sKfWHrUQoxse8DrC/S8lS+uAL ZnGysDfPh/RbJ6UfExRh3PbQ4+P4hbntbmiqw7RNhakkkYABXkhjcKuvbsEfrc/ZDZlV hUBgBYIAEnM36JImX1BuDIWV2VQBo5OHEbDXFqEh4DMH0URuwDbci7Z117NN9SRcFKEe +YVqZN618g6UUjTRVVSN2gfh5M1AklTLwMPl8/ZadoJOerJIV8vrkOiNyUWPeVZs6uao x/Q6Dmtt653zlXPaUmbXhzzB1ry90GtPc/asoZZXnKVkQnSvBoUJ3ujO11Leusma+wE9 Vw+w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=Aq5dpKGlSnpCSwUpf2XBZnO0McZETOkrcWu/DGuxnIs=; b=lu5P6bA6qKBtZUlnmKyZbmxadPsxYjiQWcrfRAu2k0Isc8cJuIdXo28xGsCeyxZ3aj B/B2DwCaZxzIb9/G/zn3rlZwVKKn7LIEBOgmkSXilo7dBbGcpL+AosqMxNtdv+8fUAwE TVzEih9xFUX3IK2KAd2bRFttwUT0s7w7rcSyzTBDYT12zKBFz2CUy0Xg3Y7A7BBqlPIK 0IAbHWNclH5GAc1GFhpqs8pufPdZ0W6yNYMEqsCNN3DNdgrL9d/p2J+EOyz+WY3adh5D q+Mr3aJwRVP0mHmqMcF8+h7gWeaxZOIDrgy1/TtOYNLbpcB9ZBqys0iXrhtq3Lvn8MCB wY0g== X-Gm-Message-State: AIkVDXJAf3ihEcdalj6eJxz9tTQ0PSFgF4mwcNZTR6Tb58b/bPCIZREew8TNoLPH4ziZIw== X-Received: by 10.25.15.199 with SMTP id 68mr7679572lfp.53.1485876065855; Tue, 31 Jan 2017 07:21:05 -0800 (PST) Received: from localhost.localdomain ([185.135.149.183]) by smtp.gmail.com with ESMTPSA id f188sm1015864lfe.12.2017.01.31.07.21.04 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 31 Jan 2017 07:21:05 -0800 (PST) From: glenvt18 To: VDR Mailing List Date: Tue, 31 Jan 2017 18:20:44 +0300 Message-Id: <1485876044-17422-1-git-send-email-glenvt18@gmail.com> X-Mailer: git-send-email 2.7.4 X-PMX-Version: 6.0.0.2142326, Antispam-Engine: 2.7.2.2107409, Antispam-Data: 2017.1.31.151518 X-PMX-Spam: Gauge=IIIIIIII, Probability=8%, Report=' FROM_NAME_ONE_WORD 0.05, HTML_00_01 0.05, HTML_00_10 0.05, BODY_SIZE_4000_4999 0, BODY_SIZE_5000_LESS 0, BODY_SIZE_7000_LESS 0, DKIM_SIGNATURE 0, NO_CTA_URI_FOUND 0, NO_URI_FOUND 0, NO_URI_HTTPS 0, WEBMAIL_SOURCE 0, __CC_NAME 0, __DATE_TZ_RU 0, __DQ_NEG_HEUR 0, __DQ_NEG_IP 0, __FRAUD_WEBMAIL 0, __FRAUD_WEBMAIL_FROM 0, __FROM_GMAIL 0, __HAS_CC_HDR 0, __HAS_FROM 0, __HAS_MSGID 0, __HAS_X_MAILER 0, __MIME_TEXT_ONLY 0, __MIME_TEXT_P 0, __MIME_TEXT_P1 0, __NO_HTML_TAG_RAW 0, __PHISH_SPEAR_STRUCTURE_1 0, __RDNS_GMAIL 0, __SANE_MSGID 0, __SUBJ_ALPHA_END 0, __TO_MALFORMED_2 0, __TO_NAME 0, __TO_NAME_DIFF_FROM_ACC 0, __TO_REAL_NAMES 0, __YOUTUBE_RCVD 0' X-LSpam-Score: -0.4 (/) X-LSpam-Report: No, score=-0.4 required=5.0 tests=BAYES_00=-1.9, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, RCVD_IN_SORBS_SPAM=0.5, RDNS_NONE=0.793, T_DKIM_INVALID=0.01 autolearn=no autolearn_force=no Subject: [vdr] [PATCH] Fix building against musl C library X-BeenThere: vdr@linuxtv.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: VDR Mailing List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: VDR Mailing List MIME-Version: 1.0 Errors-To: vdr-bounces@linuxtv.org Sender: "vdr" This was tested with Alpine Linux 3.5/musl-1.1.15/gcc-6.2.1/vdr-2.3.2. While building for Alpine, add -lintl to LIBS: echo 'LIBS += -lintl' >> Make.config Some notes: 1. __attribute__((__format_arg__(n))) is supported since gcc-2.8 (1998). 2. freopen() can be reworked to work with musl if it really matters. 3. Musl doesn't define __MUSL__ or whatever. Checking __GLIBC__ is definitely not perfect, but VDR build system can't run tests for the moment. --- i18n.h | 2 +- osd.c | 2 +- thread.c | 4 +++- tools.c | 2 +- tools.h | 12 +++++++++++- vdr.c | 6 ++++++ 6 files changed, 23 insertions(+), 5 deletions(-) diff --git a/i18n.h b/i18n.h index f8ad9de..b002bbf 100644 --- a/i18n.h +++ b/i18n.h @@ -46,7 +46,7 @@ const cStringList *I18nLanguages(void); ///< have an actual locale installed. The rest are just dummy entries ///< to allow having three letter language codes for other languages ///< that have no actual locale on this system. -const char *I18nTranslate(const char *s, const char *Plugin = NULL) __attribute_format_arg__(1); +const char *I18nTranslate(const char *s, const char *Plugin = NULL) __attribute__((__format_arg__ (1))); ///< Translates the given string (with optional Plugin context) into ///< the current language. If no translation is available, the original ///< string will be returned. diff --git a/osd.c b/osd.c index 524700a..ef975f5 100644 --- a/osd.c +++ b/osd.c @@ -12,7 +12,7 @@ #include #include #include -#include +#include #include "device.h" #include "tools.h" diff --git a/thread.c b/thread.c index 47eb977..58dba43 100644 --- a/thread.c +++ b/thread.c @@ -155,7 +155,9 @@ cRwLock::cRwLock(bool PreferWriter) writeLockThreadId = 0; pthread_rwlockattr_t attr; pthread_rwlockattr_init(&attr); +#if defined(__GLIBC__) pthread_rwlockattr_setkind_np(&attr, PreferWriter ? PTHREAD_RWLOCK_PREFER_WRITER_NP : PTHREAD_RWLOCK_PREFER_READER_NP); +#endif pthread_rwlock_init(&rwlock, &attr); } @@ -205,7 +207,7 @@ cMutex::cMutex(void) locked = 0; pthread_mutexattr_t attr; pthread_mutexattr_init(&attr); - pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_ERRORCHECK_NP); + pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_ERRORCHECK); pthread_mutex_init(&mutex, &attr); } diff --git a/tools.c b/tools.c index 754673d..fef9d2d 100644 --- a/tools.c +++ b/tools.c @@ -640,7 +640,7 @@ char *ReadLink(const char *FileName) { if (!FileName) return NULL; - char *TargetName = canonicalize_file_name(FileName); + char *TargetName = realpath(FileName, NULL); if (!TargetName) { if (errno == ENOENT) // file doesn't exist TargetName = strdup(FileName); diff --git a/tools.h b/tools.h index 73cca5a..03f5fd1 100644 --- a/tools.h +++ b/tools.h @@ -28,6 +28,16 @@ #include #include "thread.h" +#ifndef ACCESSPERMS +# define ACCESSPERMS (S_IRWXU|S_IRWXG|S_IRWXO) /* 0777 */ +#endif +#ifndef ALLPERMS +# define ALLPERMS (S_ISUID|S_ISGID|S_ISVTX|S_IRWXU|S_IRWXG|S_IRWXO)/* 07777 */ +#endif +#ifndef DEFFILEMODE +# define DEFFILEMODE (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH)/* 0666*/ +#endif + typedef unsigned char uchar; extern int SysLogLevel; @@ -738,7 +748,7 @@ public: data[i] = T(0); size = 0; } - void Sort(__compar_fn_t Compare) + void Sort(int (*Compare)(const void *, const void *)) { qsort(data, size, sizeof(T), Compare); } diff --git a/vdr.c b/vdr.c index 8a49471..c2a82aa 100644 --- a/vdr.c +++ b/vdr.c @@ -670,12 +670,18 @@ int main(int argc, char *argv[]) } } else if (Terminal) { +#ifdef __GLIBC__ // Claim new controlling terminal stdin = freopen(Terminal, "r", stdin); stdout = freopen(Terminal, "w", stdout); stderr = freopen(Terminal, "w", stderr); HasStdin = true; tcgetattr(STDIN_FILENO, &savedTm); +#else + // stdin, stdout, stderr are declared FILE const* by musl C library + fprintf(stderr, "Option '-t' is only supported if VDR has been built against glibc.\n"); + return 2; +#endif } isyslog("VDR version %s started", VDRVERSION);