From bdb8e1579896b8787115b759d34d1a000649b126 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20Paul=20K=C3=BChne?= Date: Thu, 8 Aug 2013 21:41:46 +0200 Subject: [PATCH 2/2] contrib/zvbi: fix compilation with clang --- contrib/src/zvbi/rules.mak | 3 + contrib/src/zvbi/zvbi-fix-clang-support.patch | 455 ++++++++++++++++++++++++++ 2 files changed, 458 insertions(+) create mode 100644 contrib/src/zvbi/zvbi-fix-clang-support.patch diff --git a/contrib/src/zvbi/rules.mak b/contrib/src/zvbi/rules.mak index a34c2ca..7584eed 100644 --- a/contrib/src/zvbi/rules.mak +++ b/contrib/src/zvbi/rules.mak @@ -20,6 +20,9 @@ zvbi: zvbi-$(ZVBI_VERSION).tar.bz2 .sum-zvbi ifdef HAVE_WIN32 $(APPLY) $(SRC)/zvbi/zvbi-win32.patch endif +ifdef HAVE_DARWIN_OS + $(APPLY) $(SRC)/zvbi/zvbi-fix-clang-support.patch +endif $(MOVE) DEPS_zvbi = pthreads iconv $(DEPS_iconv) diff --git a/contrib/src/zvbi/zvbi-fix-clang-support.patch b/contrib/src/zvbi/zvbi-fix-clang-support.patch new file mode 100644 index 0000000..5226a3c --- /dev/null +++ b/contrib/src/zvbi/zvbi-fix-clang-support.patch @@ -0,0 +1,455 @@ +diff -ru zvbi/src/misc.h zvbi-fixed/src/misc.h +--- zvbi/src/misc.h 2013-07-02 04:32:31.000000000 +0200 ++++ zvbi-fixed/src/misc.h 2013-08-08 21:37:22.000000000 +0200 +@@ -52,17 +52,6 @@ + # define unlikely(expr) __builtin_expect(expr, 0) + #endif + +-#undef __i386__ +-#undef __i686__ +-/* FIXME #cpu is deprecated +-#if #cpu (i386) +-# define __i386__ 1 +-#endif +-#if #cpu (i686) +-# define __i686__ 1 +-#endif +-*/ +- + /* &x == PARENT (&x.tm_min, struct tm, tm_min), + safer than &x == (struct tm *) &x.tm_min. A NULL _ptr is safe and + will return NULL, not -offsetof(_member). */ +@@ -156,8 +145,6 @@ + + #define likely(expr) (expr) + #define unlikely(expr) (expr) +-#undef __i386__ +-#undef __i686__ + + static char * + PARENT_HELPER (char *p, unsigned int offset) +diff -ru zvbi/src/packet.c zvbi-fixed/src/packet.c +--- zvbi/src/packet.c 2013-07-10 13:37:28.000000000 +0200 ++++ zvbi-fixed/src/packet.c 2013-08-08 21:36:48.000000000 +0200 +@@ -1859,24 +1859,22 @@ + int i, j, err = 0; + + /* XXX nested function not portable, to be removed */ +- int +- bits(int count) +- { +- int r, n; +- +- r = buf; +- +- if ((n = count - left) > 0) { +- r |= (buf = *triplet++) << left; +- left = 18; +- } else +- n = count; +- +- buf >>= n; +- left -= n; +- +- return r & ((1UL << count) - 1); +- } ++#define bits(count) ({ \ ++ int r, n; \ ++ \ ++ r = buf; \ ++ \ ++ if ((n = count - left) > 0) { \ ++ r |= (buf = *triplet++) << left; \ ++ left = 18; \ ++ } else \ ++ n = count; \ ++ \ ++ buf >>= n; \ ++ left -= n; \ ++ \ ++ (r & ((1UL << count) - 1)); \ ++ }) + + if ((designation = vbi_unham8 (*p)) < 0) + return FALSE; +Only in zvbi-fixed/src: packet.c.orig +diff -ru zvbi/src/teletext.c zvbi-fixed/src/teletext.c +--- zvbi/src/teletext.c 2013-07-02 06:03:54.000000000 +0200 ++++ zvbi-fixed/src/teletext.c 2013-08-08 21:37:06.000000000 +0200 +@@ -1258,180 +1258,177 @@ + int pdc_hr; + + /* XXX nested function not portable, to be removed */ +- void +- flush(int column) +- { +- int row = inv_row + active_row; +- int i; +- +- if (row >= ROWS) +- return; +- +- if (type == OBJECT_TYPE_PASSIVE && !mac.unicode) { +- active_column = column; +- return; +- } +- +- printv("flush [%04x%c,F%d%c,B%d%c,S%d%c,O%d%c,H%d%c] %d ... %d\n", +- ac.unicode, mac.unicode ? '*' : ' ', +- ac.foreground, mac.foreground ? '*' : ' ', +- ac.background, mac.background ? '*' : ' ', +- ac.size, mac.size ? '*' : ' ', +- ac.opacity, mac.opacity ? '*' : ' ', +- ac.flash, mac.flash ? '*' : ' ', +- active_column, column - 1); +- +- for (i = inv_column + active_column; i < inv_column + column;) { +- vbi_char c; +- +- if (i > 39) +- break; +- +- c = acp[i]; +- +- if (mac.underline) { +- int u = ac.underline; +- +- if (!mac.unicode) +- ac.unicode = c.unicode; +- +- if (vbi_is_gfx(ac.unicode)) { +- if (u) +- ac.unicode &= ~0x20; /* separated */ +- else +- ac.unicode |= 0x20; /* contiguous */ +- mac.unicode = ~0; +- u = 0; +- } +- +- c.underline = u; +- } +- if (mac.foreground) +- c.foreground = (ac.foreground != VBI_TRANSPARENT_BLACK) ? +- ac.foreground : (row_color_transparent) ? +- VBI_TRANSPARENT_BLACK : row_color; +- if (mac.background) +- c.background = (ac.background != VBI_TRANSPARENT_BLACK) ? +- ac.background : (row_color_transparent) ? +- VBI_TRANSPARENT_BLACK : row_color; +- if (invert) { +- int t = c.foreground; +- +- c.foreground = c.background; +- c.background = t; +- } +- if (mac.opacity) +- c.opacity = ac.opacity; +- if (mac.flash) +- c.flash = ac.flash; +- if (mac.conceal) +- c.conceal = ac.conceal; +- if (mac.unicode) { +- c.unicode = ac.unicode; +- mac.unicode = 0; +- +- if (mac.size) +- c.size = ac.size; +- else if (c.size > VBI_DOUBLE_SIZE) +- c.size = VBI_NORMAL_SIZE; +- } +- +- acp[i] = c; +- +- if (type == OBJECT_TYPE_PASSIVE) +- break; +- +- i++; +- +- if (type != OBJECT_TYPE_PASSIVE +- && type != OBJECT_TYPE_ADAPTIVE) { +- int raw; +- +- raw = (row == 0 && i < 9) ? +- 0x20 : vbi_unpar8 (vtp->data.lop.raw[row][i - 1]); +- +- /* set-after spacing attributes cancelling non-spacing */ +- +- switch (raw) { +- case 0x00 ... 0x07: /* alpha + foreground color */ +- case 0x10 ... 0x17: /* mosaic + foreground color */ +- printv("... fg term %d %02x\n", i, raw); +- mac.foreground = 0; +- mac.conceal = 0; +- break; +- +- case 0x08: /* flash */ +- mac.flash = 0; +- break; +- +- case 0x0A: /* end box */ +- case 0x0B: /* start box */ +- if (i < COLUMNS && vbi_unpar8 (vtp->data.lop.raw[row][i]) == raw) { +- printv("... boxed term %d %02x\n", i, raw); +- mac.opacity = 0; +- } +- +- break; +- +- case 0x0D: /* double height */ +- case 0x0E: /* double width */ +- case 0x0F: /* double size */ +- printv("... size term %d %02x\n", i, raw); +- mac.size = 0; +- break; +- } +- +- if (i > 39) +- break; +- +- raw = (row == 0 && i < 8) ? +- 0x20 : vbi_unpar8 (vtp->data.lop.raw[row][i]); +- +- /* set-at spacing attributes cancelling non-spacing */ +- +- switch (raw) { +- case 0x09: /* steady */ +- mac.flash = 0; +- break; +- +- case 0x0C: /* normal size */ +- printv("... size term %d %02x\n", i, raw); +- mac.size = 0; +- break; +- +- case 0x18: /* conceal */ +- mac.conceal = 0; +- break; +- +- /* +- * Non-spacing underlined/separated display attribute +- * cannot be cancelled by a subsequent spacing attribute. +- */ +- +- case 0x1C: /* black background */ +- case 0x1D: /* new background */ +- printv("... bg term %d %02x\n", i, raw); +- mac.background = 0; +- break; +- } +- } +- } +- +- active_column = column; +- } ++#define flush(column) \ ++ ({ \ ++ int row = inv_row + active_row; \ ++ int i; \ ++ \ ++ if (row >= ROWS) \ ++ break; \ ++ \ ++ if (type == OBJECT_TYPE_PASSIVE && !mac.unicode) { \ ++ active_column = column; \ ++ break; \ ++ } \ ++ \ ++ printv("flush [%04x%c,F%d%c,B%d%c,S%d%c,O%d%c,H%d%c] %d ... %d\n", \ ++ ac.unicode, mac.unicode ? '*' : ' ', \ ++ ac.foreground, mac.foreground ? '*' : ' ', \ ++ ac.background, mac.background ? '*' : ' ', \ ++ ac.size, mac.size ? '*' : ' ', \ ++ ac.opacity, mac.opacity ? '*' : ' ', \ ++ ac.flash, mac.flash ? '*' : ' ', \ ++ active_column, column - 1); \ ++ \ ++ for (i = inv_column + active_column; i < inv_column + column;) { \ ++ vbi_char c; \ ++ \ ++ if (i > 39) \ ++ break; \ ++ \ ++ c = acp[i]; \ ++ \ ++ if (mac.underline) { \ ++ int u = ac.underline; \ ++ \ ++ if (!mac.unicode) \ ++ ac.unicode = c.unicode; \ ++ \ ++ if (vbi_is_gfx(ac.unicode)) { \ ++ if (u) \ ++ ac.unicode &= ~0x20; /* separated */ \ ++ else \ ++ ac.unicode |= 0x20; /* contiguous */ \ ++ mac.unicode = ~0; \ ++ u = 0; \ ++ } \ ++ \ ++ c.underline = u; \ ++ } \ ++ if (mac.foreground) \ ++ c.foreground = (ac.foreground != VBI_TRANSPARENT_BLACK) ? \ ++ ac.foreground : (row_color_transparent) ? \ ++ VBI_TRANSPARENT_BLACK : row_color; \ ++ if (mac.background) \ ++ c.background = (ac.background != VBI_TRANSPARENT_BLACK) ? \ ++ ac.background : (row_color_transparent) ? \ ++ VBI_TRANSPARENT_BLACK : row_color; \ ++ if (invert) { \ ++ int t = c.foreground; \ ++ \ ++ c.foreground = c.background; \ ++ c.background = t; \ ++ } \ ++ if (mac.opacity) \ ++ c.opacity = ac.opacity; \ ++ if (mac.flash) \ ++ c.flash = ac.flash; \ ++ if (mac.conceal) \ ++ c.conceal = ac.conceal; \ ++ if (mac.unicode) { \ ++ c.unicode = ac.unicode; \ ++ mac.unicode = 0; \ ++ \ ++ if (mac.size) \ ++ c.size = ac.size; \ ++ else if (c.size > VBI_DOUBLE_SIZE) \ ++ c.size = VBI_NORMAL_SIZE; \ ++ } \ ++ \ ++ acp[i] = c; \ ++ \ ++ if (type == OBJECT_TYPE_PASSIVE) \ ++ break; \ ++ \ ++ i++; \ ++ \ ++ if (type != OBJECT_TYPE_PASSIVE \ ++ && type != OBJECT_TYPE_ADAPTIVE) { \ ++ int raw; \ ++ \ ++ raw = (row == 0 && i < 9) ? \ ++ 0x20 : vbi_unpar8 (vtp->data.lop.raw[row][i - 1]); \ ++ \ ++ /* set-after spacing attributes cancelling non-spacing */ \ ++ \ ++ switch (raw) { \ ++ case 0x00 ... 0x07: /* alpha + foreground color */ \ ++ case 0x10 ... 0x17: /* mosaic + foreground color */ \ ++ printv("... fg term %d %02x\n", i, raw); \ ++ mac.foreground = 0; \ ++ mac.conceal = 0; \ ++ break; \ ++ \ ++ case 0x08: /* flash */ \ ++ mac.flash = 0; \ ++ break; \ ++ \ ++ case 0x0A: /* end box */ \ ++ case 0x0B: /* start box */ \ ++ if (i < COLUMNS && vbi_unpar8 (vtp->data.lop.raw[row][i]) == raw) { \ ++ printv("... boxed term %d %02x\n", i, raw); \ ++ mac.opacity = 0; \ ++ } \ ++ \ ++ break; \ ++ \ ++ case 0x0D: /* double height */ \ ++ case 0x0E: /* double width */ \ ++ case 0x0F: /* double size */ \ ++ printv("... size term %d %02x\n", i, raw); \ ++ mac.size = 0; \ ++ break; \ ++ } \ ++ \ ++ if (i > 39) \ ++ break; \ ++ \ ++ raw = (row == 0 && i < 8) ? \ ++ 0x20 : vbi_unpar8 (vtp->data.lop.raw[row][i]); \ ++ \ ++ /* set-at spacing attributes cancelling non-spacing */ \ ++ \ ++ switch (raw) { \ ++ case 0x09: /* steady */ \ ++ mac.flash = 0; \ ++ break; \ ++ \ ++ case 0x0C: /* normal size */ \ ++ printv("... size term %d %02x\n", i, raw); \ ++ mac.size = 0; \ ++ break; \ ++ \ ++ case 0x18: /* conceal */ \ ++ mac.conceal = 0; \ ++ break; \ ++ \ ++ /* \ ++ * Non-spacing underlined/separated display attribute \ ++ * cannot be cancelled by a subsequent spacing attribute. \ ++ */ \ ++ \ ++ case 0x1C: /* black background */ \ ++ case 0x1D: /* new background */ \ ++ printv("... bg term %d %02x\n", i, raw); \ ++ mac.background = 0; \ ++ break; \ ++ } \ ++ } \ ++ } \ ++ \ ++ active_column = column; \ ++ }) + + /* XXX nested function not portable, to be removed */ +- void +- flush_row(void) +- { +- if (type == OBJECT_TYPE_PASSIVE || type == OBJECT_TYPE_ADAPTIVE) +- flush(active_column + 1); +- else +- flush(COLUMNS); +- +- if (type != OBJECT_TYPE_PASSIVE) +- memset(&mac, 0, sizeof(mac)); +- } ++#define flush_row do {\ ++ if (type == OBJECT_TYPE_PASSIVE || type == OBJECT_TYPE_ADAPTIVE) \ ++ flush(active_column + 1); \ ++ else \ ++ flush(COLUMNS); \ ++\ ++ if (type != OBJECT_TYPE_PASSIVE) \ ++ memset(&mac, 0, sizeof(mac)); \ ++ } while (0) + + active_column = 0; + active_row = 0; +@@ -1554,7 +1551,7 @@ + printv("enh set_active row %d col %d\n", row, column); + + if (row > active_row) +- flush_row(); ++ flush_row; + else + flush(active_column + 1); + +@@ -1752,7 +1749,7 @@ + break; + + case 0x15 ... 0x17: /* object definition */ +- flush_row(); ++ flush_row; + printv("enh obj definition 0x%02x 0x%02x\n", p->mode, p->data); + printv("enh terminated\n"); + goto swedish; +@@ -1768,7 +1765,7 @@ + case 0x1F: /* termination marker */ + default: + terminate: +- flush_row(); ++ flush_row; + printv("enh terminated %02x\n", p->mode); + goto swedish; + } -- 1.8.3.1 (Apple Git-46)