patches/glibc/ports-2.12.1/150-queue-header-updates.patch
author Daniel Price <daniel.price@gmail.com>
Tue Nov 20 16:59:17 2012 -0800 (2012-11-20)
changeset 3126 333d3e40cbd1
permissions -rw-r--r--
scripts: refine static linking check to better guide the user

The current mechanism to check if static linking is possible, and the mesage
displayed on failure, can be puzzling to the unsuspecting user.

Also, the current implementation is not using the existing infrastructure,
and is thus difficult to enhance with new tests.

So, switch to using the standard CT_DoExecLog infra, and use four tests to
check for the host compiler:
- check we can run it
- check it can build a trivial program
- check it can statically link that program
- check if it statically link with libstdc++

That should cover most of the problems. Hopefully.

(At the same time, fix a typo in a comment)

Signed-off-by: Daniel Price <daniel.price@gmail.com>
[yann.morin.1998@free.fr: split original patch for self-contained changes]
[yann.morin.1998@free.fr: use steps to better see gcc's output]
[yann.morin.1998@free.fr: commit log]
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Message-Id: <163f86b5216fc08c672a.1353459722@nipigon.dssd.com>
Patchwork-Id: 200536
yann@2437
     1
grab some updates from FreeBSD
yann@2437
     2
yann@2437
     3
http://bugs.gentoo.org/201979
yann@2437
     4
yann@2437
     5
diff -durN glibc-2.12.1.orig/misc/sys/queue.h glibc-2.12.1/misc/sys/queue.h
yann@2437
     6
yann@2437
     7
diff -durN glibc-2.12.1.orig/misc/sys/queue.h glibc-2.12.1/misc/sys/queue.h
yann@2437
     8
--- glibc-2.12.1.orig/misc/sys/queue.h	2008-03-05 06:50:30.000000000 +0100
yann@2437
     9
+++ glibc-2.12.1/misc/sys/queue.h	2009-11-13 00:49:51.000000000 +0100
yann@2437
    10
@@ -136,6 +136,11 @@
yann@2437
    11
 		(var);							\
yann@2437
    12
 		(var) = ((var)->field.le_next))
yann@2437
    13
 
yann@2437
    14
+#define	LIST_FOREACH_SAFE(var, head, field, tvar)			\
yann@2437
    15
+	for ((var) = LIST_FIRST((head));				\
yann@2437
    16
+	    (var) && ((tvar) = LIST_NEXT((var), field), 1);		\
yann@2437
    17
+	    (var) = (tvar))
yann@2437
    18
+
yann@2437
    19
 /*
yann@2437
    20
  * List access methods.
yann@2437
    21
  */
yann@2437
    22
@@ -197,6 +202,16 @@
yann@2437
    23
 #define	SLIST_FOREACH(var, head, field)					\
yann@2437
    24
 	for((var) = (head)->slh_first; (var); (var) = (var)->field.sle_next)
yann@2437
    25
 
yann@2437
    26
+#define	SLIST_FOREACH_SAFE(var, head, field, tvar)			\
yann@2437
    27
+	for ((var) = SLIST_FIRST((head));				\
yann@2437
    28
+	    (var) && ((tvar) = SLIST_NEXT((var), field), 1);		\
yann@2437
    29
+	    (var) = (tvar))
yann@2437
    30
+
yann@2437
    31
+#define	SLIST_FOREACH_PREVPTR(var, varp, head, field)			\
yann@2437
    32
+	for ((varp) = &SLIST_FIRST((head));				\
yann@2437
    33
+	    ((var) = *(varp)) != NULL;					\
yann@2437
    34
+	    (varp) = &SLIST_NEXT((var), field))
yann@2437
    35
+
yann@2437
    36
 /*
yann@2437
    37
  * Singly-linked List access methods.
yann@2437
    38
  */
yann@2437
    39
@@ -242,6 +257,12 @@
yann@2437
    40
 	(head)->stqh_last = &(elm)->field.stqe_next;			\
yann@2437
    41
 } while (/*CONSTCOND*/0)
yann@2437
    42
 
yann@2437
    43
+#define	STAILQ_LAST(head, type, field)					\
yann@2437
    44
+	(STAILQ_EMPTY((head)) ?						\
yann@2437
    45
+		NULL :							\
yann@2437
    46
+	        ((struct type *)(void *)				\
yann@2437
    47
+		((char *)((head)->stqh_last) - __offsetof(struct type, field))))
yann@2437
    48
+
yann@2437
    49
 #define	STAILQ_INSERT_AFTER(head, listelm, elm, field) do {		\
yann@2437
    50
 	if (((elm)->field.stqe_next = (listelm)->field.stqe_next) == NULL)\
yann@2437
    51
 		(head)->stqh_last = &(elm)->field.stqe_next;		\
yann@2437
    52
@@ -271,6 +292,11 @@
yann@2437
    53
 		(var);							\
yann@2437
    54
 		(var) = ((var)->field.stqe_next))
yann@2437
    55
 
yann@2437
    56
+#define STAILQ_FOREACH_SAFE(var, head, field, tvar)			\
yann@2437
    57
+	for ((var) = STAILQ_FIRST((head));				\
yann@2437
    58
+		(var) && ((tvar) = STAILQ_NEXT((var), field), 1);	\
yann@2437
    59
+		(var) = (tvar))
yann@2437
    60
+
yann@2437
    61
 #define	STAILQ_CONCAT(head1, head2) do {				\
yann@2437
    62
 	if (!STAILQ_EMPTY((head2))) {					\
yann@2437
    63
 		*(head1)->stqh_last = (head2)->stqh_first;		\
yann@2437
    64
@@ -437,11 +463,21 @@
yann@2437
    65
 		(var);							\
yann@2437
    66
 		(var) = ((var)->field.tqe_next))
yann@2437
    67
 
yann@2437
    68
+#define TAILQ_FOREACH_SAFE(var, head, field, tvar)			\
yann@2437
    69
+	for ((var) = TAILQ_FIRST((head));				\
yann@2437
    70
+		(var) && ((tvar) = TAILQ_NEXT((var), field), 1);	\
yann@2437
    71
+		(var) = (tvar))
yann@2437
    72
+
yann@2437
    73
 #define	TAILQ_FOREACH_REVERSE(var, head, headname, field)		\
yann@2437
    74
 	for ((var) = (*(((struct headname *)((head)->tqh_last))->tqh_last));	\
yann@2437
    75
 		(var);							\
yann@2437
    76
 		(var) = (*(((struct headname *)((var)->field.tqe_prev))->tqh_last)))
yann@2437
    77
 
yann@2437
    78
+#define TAILQ_FOREACH_REVERSE_SAFE(var, head, headname, field, tvar)	\
yann@2437
    79
+	for ((var) = TAILQ_LAST((head), headname);			\
yann@2437
    80
+		(var) && ((tvar) = TAILQ_PREV((var), headname, field), 1);	\
yann@2437
    81
+		(var) = (tvar))
yann@2437
    82
+
yann@2437
    83
 #define	TAILQ_CONCAT(head1, head2, field) do {				\
yann@2437
    84
 	if (!TAILQ_EMPTY(head2)) {					\
yann@2437
    85
 		*(head1)->tqh_last = (head2)->tqh_first;		\