[vlc-devel] Report on contrib tree clang issues
Olivier Gambier
olivier at webitup.fr
Tue Jan 17 03:57:25 CET 2012
Le 17 janv. 2012 à 03:23, Rafaël Carré a écrit :
> Le 2012-01-16 21:19, Olivier Gambier a écrit :
>> Hi list,
>>
>> Following on the previous discussion on that topic:
>> http://mailman.videolan.org/pipermail/vlc-devel/2011-November/083724.html
>>
>> and using clang 3.
>>
>> Most stuff is fine now, except:
>>
>>
>> * Libgcrypt: still needs the mentioned patches (from homebrew)
>> use CFLAGS="-std=gnu89 -fheinous-gnu-extensions"
>> configure with --disable-asm
>> Apply https://trac.macports.org/browser/trunk/dports/devel/libgcrypt/files/clang-asm.patch
>
> Does it work on other compilers/platforns ?
I don't think so. -fheinous-gnu-extensions is clang specific.
>
>> * Libcaca: still needs to be patched as well (this one from homebrew)
>>
>> --- libcaca/caca/caca.h 2011-07-05 00:09:51.000000000 -0700
>> +++ libcaca.new/caca/caca.h 2011-07-05 00:10:10.000000000 -0700
>> @@ -645,7 +645,7 @@
>> # define CACA_DEPRECATED
>> # endif
>>
>> -# if defined __GNUC__ && __GNUC__ > 3
>> +# if !defined __APPLE__ && defined __GNUC__ && __GNUC__ > 3
>> # define CACA_ALIAS(x) __attribute__ ((weak, alias(#x)))
>> # else
>> # define CACA_ALIAS(x)
>
> Does clang define __GNUC__ ?
Yes AFAIK.
Now, maybe it would be better to detect __clang__ instead.
>
>> * zvbi:
>>
>> There is a patch from a Freebsd port for the nested function issue:
>>
>> http://www.freebsd.org/cgi/cvsweb.cgi/ports/devel/libzvbi/files/patch-src-packet.c?rev=1.1;content-type=text%2Fplain
>> http://www.freebsd.org/cgi/cvsweb.cgi/ports/devel/libzvbi/files/patch-src-teletext.c?rev=1.1;content-type=text%2Fplain
>>
>> and see: http://www.freshports.org/commit.php?category=devel&port=libzvbi&files=yes&message_id=201112150652.pBF6qgNm092931@repoman.freebsd.org
>>
>> As for the #if #cpu problem, the freebsd port replaces them by defined in their Makefile, though that should be looked into…
>
>
>
>> I gave up on live555 though… but everything else seems fine :)
>>
>>
>>
>>
>>
>> In the hope these infos will help
>
> It would be better if you provide patches against contrib/ that we can
> apply directly
Ok.
********************************
Libcaca
********************************
diff --git a/contrib/src/caca/rules.mak b/contrib/src/caca/rules.mak
index ebf37cb..04f7d6d 100644
--- a/contrib/src/caca/rules.mak
+++ b/contrib/src/caca/rules.mak
@@ -16,6 +16,7 @@ caca: libcaca-$(CACA_VERSION).tar.gz .sum-caca
$(UNPACK)
ifdef HAVE_MACOSX
$(APPLY) $(SRC)/caca/caca-osx-sdkofourchoice.patch
+ $(APPLY) $(SRC)/caca/caca-osx-alias.patch
endif
ifdef HAVE_WIN32
$(APPLY) $(SRC)/caca/caca-win32-static.patch
and the patch contrib/src/caca/caca-osx-alias.patch
--- libcaca/caca/caca.h 2011-07-05 00:09:51.000000000 -0700
+++ libcaca.new/caca/caca.h 2011-07-05 00:10:10.000000000 -0700
@@ -645,7 +645,7 @@
# define CACA_DEPRECATED
# endif
-# if defined __GNUC__ && __GNUC__ > 3
+# if !defined __APPLE__ && defined __GNUC__ && __GNUC__ > 3
# define CACA_ALIAS(x) __attribute__ ((weak, alias(#x)))
# else
# define CACA_ALIAS(x)
********************************
libgcrypt: same as suggested earlier by Felix Paul Kühne
********************************
I guess it would be better to do these only with clang (via a ifdef HAVE_CLANG maybe?)
--- a/contrib/src/gcrypt/rules.mak
+++ b/contrib/src/gcrypt/rules.mak
@@ -11,19 +11,25 @@ $(TARBALLS)/libgcrypt-$(GCRYPT_VERSION).tar.bz2:
libgcrypt: libgcrypt-$(GCRYPT_VERSION).tar.bz2 .sum-gcrypt
$(UNPACK)
+ifdef HAVE_MACOSX
+ $(APPLY) $(SRC)/gcrypt/gcrypt-osx-clang-asm.patch
+endif
$(MOVE)
DEPS_gcrypt = gpg-error
CONFIGURE_OPTS =
+MAKE_OPTS =
ifdef HAVE_WIN64
CONFIGURE_OPTS += --disable-asm
endif
ifdef HAVE_MACOSX
-CONFIGURE_OPTS += --disable-aesni-support
+CONFIGURE_OPTS += --disable-aesni-support --disable-asm
+MAKE_OPTS = "CFLAGS=-fheinous-gnu-extensions -std=gnu89"
endif
.gcrypt: libgcrypt
#$(RECONF)
cd $< && $(HOSTVARS) ./configure $(HOSTCONF) --enable-ciphers=aes,des,rfc2268,arcfour --enable-digests=sha
+ cd $< && $(MAKE) $(MAKE_OPTS)
cd $< && $(MAKE) install
touch $@
and the patch from homebrew:
cat contrib/src/gcrypt/gcrypt-osx-clang-asm.patch
--- libgrcypt/cipher/rijndael.c 2011-08-19 09:16:14.000000000 -0700
+++ libgcrypt.new/cipher/rijndael.c 2011-08-19 09:19:01.000000000 -0700
@@ -730,13 +730,13 @@ do_aesni_enc_aligned (const RIJNDAEL_con
"movdqa 0x90(%%esi), %%xmm1\n\t"
aesenc_xmm1_xmm0
"movdqa 0xa0(%%esi), %%xmm1\n\t"
- "cmp $10, %[rounds]\n\t"
+ "cmpl $10, %[rounds]\n\t"
"jz .Lenclast%=\n\t"
aesenc_xmm1_xmm0
"movdqa 0xb0(%%esi), %%xmm1\n\t"
aesenc_xmm1_xmm0
"movdqa 0xc0(%%esi), %%xmm1\n\t"
- "cmp $12, %[rounds]\n\t"
+ "cmpl $12, %[rounds]\n\t"
"jz .Lenclast%=\n\t"
aesenc_xmm1_xmm0
"movdqa 0xd0(%%esi), %%xmm1\n\t"
@@ -785,13 +785,13 @@ do_aesni_dec_aligned (const RIJNDAEL_con
"movdqa 0x90(%%esi), %%xmm1\n\t"
aesdec_xmm1_xmm0
"movdqa 0xa0(%%esi), %%xmm1\n\t"
- "cmp $10, %[rounds]\n\t"
+ "cmpl $10, %[rounds]\n\t"
"jz .Ldeclast%=\n\t"
aesdec_xmm1_xmm0
"movdqa 0xb0(%%esi), %%xmm1\n\t"
aesdec_xmm1_xmm0
"movdqa 0xc0(%%esi), %%xmm1\n\t"
- "cmp $12, %[rounds]\n\t"
+ "cmpl $12, %[rounds]\n\t"
"jz .Ldeclast%=\n\t"
aesdec_xmm1_xmm0
"movdqa 0xd0(%%esi), %%xmm1\n\t"
@@ -844,13 +844,13 @@ do_aesni_cfb (const RIJNDAEL_context *ct
"movdqa 0x90(%%esi), %%xmm1\n\t"
aesenc_xmm1_xmm0
"movdqa 0xa0(%%esi), %%xmm1\n\t"
- "cmp $10, %[rounds]\n\t"
+ "cmpl $10, %[rounds]\n\t"
"jz .Lenclast%=\n\t"
aesenc_xmm1_xmm0
"movdqa 0xb0(%%esi), %%xmm1\n\t"
aesenc_xmm1_xmm0
"movdqa 0xc0(%%esi), %%xmm1\n\t"
- "cmp $12, %[rounds]\n\t"
+ "cmpl $12, %[rounds]\n\t"
"jz .Lenclast%=\n\t"
aesenc_xmm1_xmm0
"movdqa 0xd0(%%esi), %%xmm1\n\t"
@@ -862,7 +862,7 @@ do_aesni_cfb (const RIJNDAEL_context *ct
"movdqu %[src], %%xmm1\n\t" /* Save input. */
"pxor %%xmm1, %%xmm0\n\t" /* xmm0 = input ^ IV */
- "cmp $1, %[decrypt]\n\t"
+ "cmpl $1, %[decrypt]\n\t"
"jz .Ldecrypt_%=\n\t"
"movdqa %%xmm0, %[iv]\n\t" /* [encrypt] Store IV. */
"jmp .Lleave_%=\n"
@@ -923,13 +923,13 @@ do_aesni_ctr (const RIJNDAEL_context *ct
"movdqa 0x90(%%esi), %%xmm1\n\t"
aesenc_xmm1_xmm0
"movdqa 0xa0(%%esi), %%xmm1\n\t"
- "cmp $10, %[rounds]\n\t"
+ "cmpl $10, %[rounds]\n\t"
"jz .Lenclast%=\n\t"
aesenc_xmm1_xmm0
"movdqa 0xb0(%%esi), %%xmm1\n\t"
aesenc_xmm1_xmm0
"movdqa 0xc0(%%esi), %%xmm1\n\t"
- "cmp $12, %[rounds]\n\t"
+ "cmpl $12, %[rounds]\n\t"
"jz .Lenclast%=\n\t"
aesenc_xmm1_xmm0
"movdqa 0xd0(%%esi), %%xmm1\n\t"
@@ -1050,7 +1050,7 @@ do_aesni_ctr_4 (const RIJNDAEL_context *
aesenc_xmm1_xmm3
aesenc_xmm1_xmm4
"movdqa 0xa0(%%esi), %%xmm1\n\t"
- "cmp $10, %[rounds]\n\t"
+ "cmpl $10, %[rounds]\n\t"
"jz .Lenclast%=\n\t"
aesenc_xmm1_xmm0
aesenc_xmm1_xmm2
@@ -1062,7 +1062,7 @@ do_aesni_ctr_4 (const RIJNDAEL_context *
aesenc_xmm1_xmm3
aesenc_xmm1_xmm4
"movdqa 0xc0(%%esi), %%xmm1\n\t"
- "cmp $12, %[rounds]\n\t"
+ "cmpl $12, %[rounds]\n\t"
"jz .Lenclast%=\n\t"
aesenc_xmm1_xmm0
aesenc_xmm1_xmm2
********************************
zvbi:
********************************
diff --git a/contrib/src/zvbi/rules.mak b/contrib/src/zvbi/rules.mak
index 50f372e..7795629 100644
--- a/contrib/src/zvbi/rules.mak
+++ b/contrib/src/zvbi/rules.mak
@@ -21,6 +21,8 @@ zvbi: zvbi-$(ZVBI_VERSION).tar.bz2 .sum-zvbi
ifdef HAVE_WIN32
$(APPLY) $(SRC)/zvbi/zvbi-win32.patch
endif
+# From: http://www.freebsd.org/cgi/getmsg.cgi?fetch=813399+0+/usr/local/www/db/text/2011/cvs-all/20111218.cvs-all
+ $(APPLY) $(SRC)/zvbi/zvbi-clang.patch
$(MOVE)
DEPS_zvbi = pthreads iconv $(DEPS_iconv)
And the patch from bsd ports (for the nested function):
cat contrib/src/zvbi/zvbi-clang.patch
--- zvbi/src/packet.c 2011-12-14 22:00:49.000000000 +0100
+++ zvbi.new/src/packet.c 2011-12-14 22:00:53.000000000 +0100
@@ -1747,24 +1747,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;
--- zvbi/src/teletext.c 2011-12-14 22:01:23.000000000 +0100
+++ zvbi.new/src/teletext.c 2011-12-14 22:01:30.000000000 +0100
@@ -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;
active_row = row;
active_column = column;
@@ -1750,7 +1747,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;
@@ -1766,7 +1763,7 @@
case 0x1F: /* termination marker */
default:
terminate:
- flush_row();
+ flush_row;
printv("enh terminated %02x\n", p->mode);
goto swedish;
}
More information about the vlc-devel
mailing list