summaryrefslogtreecommitdiff
path: root/recipes/opencvs
diff options
context:
space:
mode:
authorDenys Dmytriyenko <denis@denix.org>2009-03-17 14:32:59 -0400
committerDenys Dmytriyenko <denis@denix.org>2009-03-17 14:32:59 -0400
commit709c4d66e0b107ca606941b988bad717c0b45d9b (patch)
tree37ee08b1eb308f3b2b6426d5793545c38396b838 /recipes/opencvs
parentfa6cd5a3b993f16c27de4ff82b42684516d433ba (diff)
rename packages/ to recipes/ per earlier agreement
See links below for more details: http://thread.gmane.org/gmane.comp.handhelds.openembedded/21326 http://thread.gmane.org/gmane.comp.handhelds.openembedded/21816 Signed-off-by: Denys Dmytriyenko <denis@denix.org> Acked-by: Mike Westerhof <mwester@dls.net> Acked-by: Philip Balister <philip@balister.org> Acked-by: Khem Raj <raj.khem@gmail.com> Acked-by: Marcin Juszkiewicz <hrw@openembedded.org> Acked-by: Koen Kooi <koen@openembedded.org> Acked-by: Frans Meulenbroeks <fransmeulenbroeks@gmail.com>
Diffstat (limited to 'recipes/opencvs')
-rw-r--r--recipes/opencvs/files/linux.patch2239
-rw-r--r--recipes/opencvs/opencvs_cvs.bb20
2 files changed, 2259 insertions, 0 deletions
diff --git a/recipes/opencvs/files/linux.patch b/recipes/opencvs/files/linux.patch
new file mode 100644
index 0000000000..5230c1bb91
--- /dev/null
+++ b/recipes/opencvs/files/linux.patch
@@ -0,0 +1,2239 @@
+
+#
+# Patch managed by http://www.holgerschurig.de/patcher.html
+#
+
+--- /dev/null
++++ cvs/bsd-md5.h
+@@ -0,0 +1,36 @@
++#include <openssl/md5.h>
++#include <stdio.h>
++
++/* fscking linux boxen doesnt have MD5File in a crypto lib*/
++
++void
++MDPrint (unsigned char digest[16], char buf[])
++{
++ unsigned int i;
++
++ for (i = 0; i < 16; i++) {
++ sprintf((char *)(buf+2*i),"%02x", digest[i]);
++ }
++}
++
++char *
++MD5File(const char *fname, char *buf)
++{
++ FILE *f;
++ char mybuf[100];
++ int i;
++ MD5_CTX c;
++
++ if( (f=fopen(fname, "r")) == NULL )
++ return NULL;
++ else {
++ MD5_Init(&c);
++ while( (i=fread(mybuf, sizeof(char), 100, f) ) > 0) {
++ MD5_Update(&c, mybuf, i);
++ }
++ fclose(f);
++ MD5_Final(mybuf, &c);
++ MDPrint(mybuf, buf);
++ return buf;
++ }
++}
+--- /dev/null
++++ cvs/bsd-queue.h
+@@ -0,0 +1,584 @@
++/* $OpenBSD: queue.h,v 1.22 2001/06/23 04:39:35 angelos Exp $ */
++/* $NetBSD: queue.h,v 1.11 1996/05/16 05:17:14 mycroft Exp $ */
++
++/*
++ * Copyright (c) 1991, 1993
++ * The Regents of the University of California. All rights reserved.
++ *
++ * Redistribution and use in source and binary forms, with or without
++ * modification, are permitted provided that the following conditions
++ * are met:
++ * 1. Redistributions of source code must retain the above copyright
++ * notice, this list of conditions and the following disclaimer.
++ * 2. Redistributions in binary form must reproduce the above copyright
++ * notice, this list of conditions and the following disclaimer in the
++ * documentation and/or other materials provided with the distribution.
++ * 3. All advertising materials mentioning features or use of this software
++ * must display the following acknowledgement:
++ * This product includes software developed by the University of
++ * California, Berkeley and its contributors.
++ * 4. Neither the name of the University nor the names of its contributors
++ * may be used to endorse or promote products derived from this software
++ * without specific prior written permission.
++ *
++ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
++ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
++ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
++ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
++ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
++ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
++ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
++ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
++ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
++ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
++ * SUCH DAMAGE.
++ *
++ * @(#)queue.h 8.5 (Berkeley) 8/20/94
++ */
++
++#ifndef _FAKE_QUEUE_H_
++#define _FAKE_QUEUE_H_
++
++/*
++ * Ignore all <sys/queue.h> since older platforms have broken/incomplete
++ * <sys/queue.h> that are too hard to work around.
++ */
++#undef SLIST_HEAD
++#undef SLIST_HEAD_INITIALIZER
++#undef SLIST_ENTRY
++#undef SLIST_FIRST
++#undef SLIST_END
++#undef SLIST_EMPTY
++#undef SLIST_NEXT
++#undef SLIST_FOREACH
++#undef SLIST_INIT
++#undef SLIST_INSERT_AFTER
++#undef SLIST_INSERT_HEAD
++#undef SLIST_REMOVE_HEAD
++#undef SLIST_REMOVE
++#undef LIST_HEAD
++#undef LIST_HEAD_INITIALIZER
++#undef LIST_ENTRY
++#undef LIST_FIRST
++#undef LIST_END
++#undef LIST_EMPTY
++#undef LIST_NEXT
++#undef LIST_FOREACH
++#undef LIST_INIT
++#undef LIST_INSERT_AFTER
++#undef LIST_INSERT_BEFORE
++#undef LIST_INSERT_HEAD
++#undef LIST_REMOVE
++#undef LIST_REPLACE
++#undef SIMPLEQ_HEAD
++#undef SIMPLEQ_HEAD_INITIALIZER
++#undef SIMPLEQ_ENTRY
++#undef SIMPLEQ_FIRST
++#undef SIMPLEQ_END
++#undef SIMPLEQ_EMPTY
++#undef SIMPLEQ_NEXT
++#undef SIMPLEQ_FOREACH
++#undef SIMPLEQ_INIT
++#undef SIMPLEQ_INSERT_HEAD
++#undef SIMPLEQ_INSERT_TAIL
++#undef SIMPLEQ_INSERT_AFTER
++#undef SIMPLEQ_REMOVE_HEAD
++#undef TAILQ_HEAD
++#undef TAILQ_HEAD_INITIALIZER
++#undef TAILQ_ENTRY
++#undef TAILQ_FIRST
++#undef TAILQ_END
++#undef TAILQ_NEXT
++#undef TAILQ_LAST
++#undef TAILQ_PREV
++#undef TAILQ_EMPTY
++#undef TAILQ_FOREACH
++#undef TAILQ_FOREACH_REVERSE
++#undef TAILQ_INIT
++#undef TAILQ_INSERT_HEAD
++#undef TAILQ_INSERT_TAIL
++#undef TAILQ_INSERT_AFTER
++#undef TAILQ_INSERT_BEFORE
++#undef TAILQ_REMOVE
++#undef TAILQ_REPLACE
++#undef CIRCLEQ_HEAD
++#undef CIRCLEQ_HEAD_INITIALIZER
++#undef CIRCLEQ_ENTRY
++#undef CIRCLEQ_FIRST
++#undef CIRCLEQ_LAST
++#undef CIRCLEQ_END
++#undef CIRCLEQ_NEXT
++#undef CIRCLEQ_PREV
++#undef CIRCLEQ_EMPTY
++#undef CIRCLEQ_FOREACH
++#undef CIRCLEQ_FOREACH_REVERSE
++#undef CIRCLEQ_INIT
++#undef CIRCLEQ_INSERT_AFTER
++#undef CIRCLEQ_INSERT_BEFORE
++#undef CIRCLEQ_INSERT_HEAD
++#undef CIRCLEQ_INSERT_TAIL
++#undef CIRCLEQ_REMOVE
++#undef CIRCLEQ_REPLACE
++
++/*
++ * This file defines five types of data structures: singly-linked lists,
++ * lists, simple queues, tail queues, and circular queues.
++ *
++ *
++ * A singly-linked list is headed by a single forward pointer. The elements
++ * are singly linked for minimum space and pointer manipulation overhead at
++ * the expense of O(n) removal for arbitrary elements. New elements can be
++ * added to the list after an existing element or at the head of the list.
++ * Elements being removed from the head of the list should use the explicit
++ * macro for this purpose for optimum efficiency. A singly-linked list may
++ * only be traversed in the forward direction. Singly-linked lists are ideal
++ * for applications with large datasets and few or no removals or for
++ * implementing a LIFO queue.
++ *
++ * A list is headed by a single forward pointer (or an array of forward
++ * pointers for a hash table header). The elements are doubly linked
++ * so that an arbitrary element can be removed without a need to
++ * traverse the list. New elements can be added to the list before
++ * or after an existing element or at the head of the list. A list
++ * may only be traversed in the forward direction.
++ *
++ * A simple queue is headed by a pair of pointers, one the head of the
++ * list and the other to the tail of the list. The elements are singly
++ * linked to save space, so elements can only be removed from the
++ * head of the list. New elements can be added to the list before or after
++ * an existing element, at the head of the list, or at the end of the
++ * list. A simple queue may only be traversed in the forward direction.
++ *
++ * A tail queue is headed by a pair of pointers, one to the head of the
++ * list and the other to the tail of the list. The elements are doubly
++ * linked so that an arbitrary element can be removed without a need to
++ * traverse the list. New elements can be added to the list before or
++ * after an existing element, at the head of the list, or at the end of
++ * the list. A tail queue may be traversed in either direction.
++ *
++ * A circle queue is headed by a pair of pointers, one to the head of the
++ * list and the other to the tail of the list. The elements are doubly
++ * linked so that an arbitrary element can be removed without a need to
++ * traverse the list. New elements can be added to the list before or after
++ * an existing element, at the head of the list, or at the end of the list.
++ * A circle queue may be traversed in either direction, but has a more
++ * complex end of list detection.
++ *
++ * For details on the use of these macros, see the queue(3) manual page.
++ */
++
++/*
++ * Singly-linked List definitions.
++ */
++#define SLIST_HEAD(name, type) \
++struct name { \
++ struct type *slh_first; /* first element */ \
++}
++
++#define SLIST_HEAD_INITIALIZER(head) \
++ { NULL }
++
++#define SLIST_ENTRY(type) \
++struct { \
++ struct type *sle_next; /* next element */ \
++}
++
++/*
++ * Singly-linked List access methods.
++ */
++#define SLIST_FIRST(head) ((head)->slh_first)
++#define SLIST_END(head) NULL
++#define SLIST_EMPTY(head) (SLIST_FIRST(head) == SLIST_END(head))
++#define SLIST_NEXT(elm, field) ((elm)->field.sle_next)
++
++#define SLIST_FOREACH(var, head, field) \
++ for((var) = SLIST_FIRST(head); \
++ (var) != SLIST_END(head); \
++ (var) = SLIST_NEXT(var, field))
++
++/*
++ * Singly-linked List functions.
++ */
++#define SLIST_INIT(head) { \
++ SLIST_FIRST(head) = SLIST_END(head); \
++}
++
++#define SLIST_INSERT_AFTER(slistelm, elm, field) do { \
++ (elm)->field.sle_next = (slistelm)->field.sle_next; \
++ (slistelm)->field.sle_next = (elm); \
++} while (0)
++
++#define SLIST_INSERT_HEAD(head, elm, field) do { \
++ (elm)->field.sle_next = (head)->slh_first; \
++ (head)->slh_first = (elm); \
++} while (0)
++
++#define SLIST_REMOVE_HEAD(head, field) do { \
++ (head)->slh_first = (head)->slh_first->field.sle_next; \
++} while (0)
++
++#define SLIST_REMOVE(head, elm, type, field) do { \
++ if ((head)->slh_first == (elm)) { \
++ SLIST_REMOVE_HEAD((head), field); \
++ } \
++ else { \
++ struct type *curelm = (head)->slh_first; \
++ while( curelm->field.sle_next != (elm) ) \
++ curelm = curelm->field.sle_next; \
++ curelm->field.sle_next = \
++ curelm->field.sle_next->field.sle_next; \
++ } \
++} while (0)
++
++/*
++ * List definitions.
++ */
++#define LIST_HEAD(name, type) \
++struct name { \
++ struct type *lh_first; /* first element */ \
++}
++
++#define LIST_HEAD_INITIALIZER(head) \
++ { NULL }
++
++#define LIST_ENTRY(type) \
++struct { \
++ struct type *le_next; /* next element */ \
++ struct type **le_prev; /* address of previous next element */ \
++}
++
++/*
++ * List access methods
++ */
++#define LIST_FIRST(head) ((head)->lh_first)
++#define LIST_END(head) NULL
++#define LIST_EMPTY(head) (LIST_FIRST(head) == LIST_END(head))
++#define LIST_NEXT(elm, field) ((elm)->field.le_next)
++
++#define LIST_FOREACH(var, head, field) \
++ for((var) = LIST_FIRST(head); \
++ (var)!= LIST_END(head); \
++ (var) = LIST_NEXT(var, field))
++
++/*
++ * List functions.
++ */
++#define LIST_INIT(head) do { \
++ LIST_FIRST(head) = LIST_END(head); \
++} while (0)
++
++#define LIST_INSERT_AFTER(listelm, elm, field) do { \
++ if (((elm)->field.le_next = (listelm)->field.le_next) != NULL) \
++ (listelm)->field.le_next->field.le_prev = \
++ &(elm)->field.le_next; \
++ (listelm)->field.le_next = (elm); \
++ (elm)->field.le_prev = &(listelm)->field.le_next; \
++} while (0)
++
++#define LIST_INSERT_BEFORE(listelm, elm, field) do { \
++ (elm)->field.le_prev = (listelm)->field.le_prev; \
++ (elm)->field.le_next = (listelm); \
++ *(listelm)->field.le_prev = (elm); \
++ (listelm)->field.le_prev = &(elm)->field.le_next; \
++} while (0)
++
++#define LIST_INSERT_HEAD(head, elm, field) do { \
++ if (((elm)->field.le_next = (head)->lh_first) != NULL) \
++ (head)->lh_first->field.le_prev = &(elm)->field.le_next;\
++ (head)->lh_first = (elm); \
++ (elm)->field.le_prev = &(head)->lh_first; \
++} while (0)
++
++#define LIST_REMOVE(elm, field) do { \
++ if ((elm)->field.le_next != NULL) \
++ (elm)->field.le_next->field.le_prev = \
++ (elm)->field.le_prev; \
++ *(elm)->field.le_prev = (elm)->field.le_next; \
++} while (0)
++
++#define LIST_REPLACE(elm, elm2, field) do { \
++ if (((elm2)->field.le_next = (elm)->field.le_next) != NULL) \
++ (elm2)->field.le_next->field.le_prev = \
++ &(elm2)->field.le_next; \
++ (elm2)->field.le_prev = (elm)->field.le_prev; \
++ *(elm2)->field.le_prev = (elm2); \
++} while (0)
++
++/*
++ * Simple queue definitions.
++ */
++#define SIMPLEQ_HEAD(name, type) \
++struct name { \
++ struct type *sqh_first; /* first element */ \
++ struct type **sqh_last; /* addr of last next element */ \
++}
++
++#define SIMPLEQ_HEAD_INITIALIZER(head) \
++ { NULL, &(head).sqh_first }
++
++#define SIMPLEQ_ENTRY(type) \
++struct { \
++ struct type *sqe_next; /* next element */ \
++}
++
++/*
++ * Simple queue access methods.
++ */
++#define SIMPLEQ_FIRST(head) ((head)->sqh_first)
++#define SIMPLEQ_END(head) NULL
++#define SIMPLEQ_EMPTY(head) (SIMPLEQ_FIRST(head) == SIMPLEQ_END(head))
++#define SIMPLEQ_NEXT(elm, field) ((elm)->field.sqe_next)
++
++#define SIMPLEQ_FOREACH(var, head, field) \
++ for((var) = SIMPLEQ_FIRST(head); \
++ (var) != SIMPLEQ_END(head); \
++ (var) = SIMPLEQ_NEXT(var, field))
++
++/*
++ * Simple queue functions.
++ */
++#define SIMPLEQ_INIT(head) do { \
++ (head)->sqh_first = NULL; \
++ (head)->sqh_last = &(head)->sqh_first; \
++} while (0)
++
++#define SIMPLEQ_INSERT_HEAD(head, elm, field) do { \
++ if (((elm)->field.sqe_next = (head)->sqh_first) == NULL) \
++ (head)->sqh_last = &(elm)->field.sqe_next; \
++ (head)->sqh_first = (elm); \
++} while (0)
++
++#define SIMPLEQ_INSERT_TAIL(head, elm, field) do { \
++ (elm)->field.sqe_next = NULL; \
++ *(head)->sqh_last = (elm); \
++ (head)->sqh_last = &(elm)->field.sqe_next; \
++} while (0)
++
++#define SIMPLEQ_INSERT_AFTER(head, listelm, elm, field) do { \
++ if (((elm)->field.sqe_next = (listelm)->field.sqe_next) == NULL)\
++ (head)->sqh_last = &(elm)->field.sqe_next; \
++ (listelm)->field.sqe_next = (elm); \
++} while (0)
++
++#define SIMPLEQ_REMOVE_HEAD(head, elm, field) do { \
++ if (((head)->sqh_first = (elm)->field.sqe_next) == NULL) \
++ (head)->sqh_last = &(head)->sqh_first; \
++} while (0)
++
++/*
++ * Tail queue definitions.
++ */
++#define TAILQ_HEAD(name, type) \
++struct name { \
++ struct type *tqh_first; /* first element */ \
++ struct type **tqh_last; /* addr of last next element */ \
++}
++
++#define TAILQ_HEAD_INITIALIZER(head) \
++ { NULL, &(head).tqh_first }
++
++#define TAILQ_ENTRY(type) \
++struct { \
++ struct type *tqe_next; /* next element */ \
++ struct type **tqe_prev; /* address of previous next element */ \
++}
++
++/*
++ * tail queue access methods
++ */
++#define TAILQ_FIRST(head) ((head)->tqh_first)
++#define TAILQ_END(head) NULL
++#define TAILQ_NEXT(elm, field) ((elm)->field.tqe_next)
++#define TAILQ_LAST(head, headname) \
++ (*(((struct headname *)((head)->tqh_last))->tqh_last))
++/* XXX */
++#define TAILQ_PREV(elm, headname, field) \
++ (*(((struct headname *)((elm)->field.tqe_prev))->tqh_last))
++#define TAILQ_EMPTY(head) \
++ (TAILQ_FIRST(head) == TAILQ_END(head))
++
++#define TAILQ_FOREACH(var, head, field) \
++ for((var) = TAILQ_FIRST(head); \
++ (var) != TAILQ_END(head); \
++ (var) = TAILQ_NEXT(var, field))
++
++#define TAILQ_FOREACH_REVERSE(var, head, field, headname) \
++ for((var) = TAILQ_LAST(head, headname); \
++ (var) != TAILQ_END(head); \
++ (var) = TAILQ_PREV(var, headname, field))
++
++/*
++ * Tail queue functions.
++ */
++#define TAILQ_INIT(head) do { \
++ (head)->tqh_first = NULL; \
++ (head)->tqh_last = &(head)->tqh_first; \
++} while (0)
++
++#define TAILQ_INSERT_HEAD(head, elm, field) do { \
++ if (((elm)->field.tqe_next = (head)->tqh_first) != NULL) \
++ (head)->tqh_first->field.tqe_prev = \
++ &(elm)->field.tqe_next; \
++ else \
++ (head)->tqh_last = &(elm)->field.tqe_next; \
++ (head)->tqh_first = (elm); \
++ (elm)->field.tqe_prev = &(head)->tqh_first; \
++} while (0)
++
++#define TAILQ_INSERT_TAIL(head, elm, field) do { \
++ (elm)->field.tqe_next = NULL; \
++ (elm)->field.tqe_prev = (head)->tqh_last; \
++ *(head)->tqh_last = (elm); \
++ (head)->tqh_last = &(elm)->field.tqe_next; \
++} while (0)
++
++#define TAILQ_INSERT_AFTER(head, listelm, elm, field) do { \
++ if (((elm)->field.tqe_next = (listelm)->field.tqe_next) != NULL)\
++ (elm)->field.tqe_next->field.tqe_prev = \
++ &(elm)->field.tqe_next; \
++ else \
++ (head)->tqh_last = &(elm)->field.tqe_next; \
++ (listelm)->field.tqe_next = (elm); \
++ (elm)->field.tqe_prev = &(listelm)->field.tqe_next; \
++} while (0)
++
++#define TAILQ_INSERT_BEFORE(listelm, elm, field) do { \
++ (elm)->field.tqe_prev = (listelm)->field.tqe_prev; \
++ (elm)->field.tqe_next = (listelm); \
++ *(listelm)->field.tqe_prev = (elm); \
++ (listelm)->field.tqe_prev = &(elm)->field.tqe_next; \
++} while (0)
++
++#define TAILQ_REMOVE(head, elm, field) do { \
++ if (((elm)->field.tqe_next) != NULL) \
++ (elm)->field.tqe_next->field.tqe_prev = \
++ (elm)->field.tqe_prev; \
++ else \
++ (head)->tqh_last = (elm)->field.tqe_prev; \
++ *(elm)->field.tqe_prev = (elm)->field.tqe_next; \
++} while (0)
++
++#define TAILQ_REPLACE(head, elm, elm2, field) do { \
++ if (((elm2)->field.tqe_next = (elm)->field.tqe_next) != NULL) \
++ (elm2)->field.tqe_next->field.tqe_prev = \
++ &(elm2)->field.tqe_next; \
++ else \
++ (head)->tqh_last = &(elm2)->field.tqe_next; \
++ (elm2)->field.tqe_prev = (elm)->field.tqe_prev; \
++ *(elm2)->field.tqe_prev = (elm2); \
++} while (0)
++
++/*
++ * Circular queue definitions.
++ */
++#define CIRCLEQ_HEAD(name, type) \
++struct name { \
++ struct type *cqh_first; /* first element */ \
++ struct type *cqh_last; /* last element */ \
++}
++
++#define CIRCLEQ_HEAD_INITIALIZER(head) \
++ { CIRCLEQ_END(&head), CIRCLEQ_END(&head) }
++
++#define CIRCLEQ_ENTRY(type) \
++struct { \
++ struct type *cqe_next; /* next element */ \
++ struct type *cqe_prev; /* previous element */ \
++}
++
++/*
++ * Circular queue access methods
++ */
++#define CIRCLEQ_FIRST(head) ((head)->cqh_first)
++#define CIRCLEQ_LAST(head) ((head)->cqh_last)
++#define CIRCLEQ_END(head) ((void *)(head))
++#define CIRCLEQ_NEXT(elm, field) ((elm)->field.cqe_next)
++#define CIRCLEQ_PREV(elm, field) ((elm)->field.cqe_prev)
++#define CIRCLEQ_EMPTY(head) \
++ (CIRCLEQ_FIRST(head) == CIRCLEQ_END(head))
++
++#define CIRCLEQ_FOREACH(var, head, field) \
++ for((var) = CIRCLEQ_FIRST(head); \
++ (var) != CIRCLEQ_END(head); \
++ (var) = CIRCLEQ_NEXT(var, field))
++
++#define CIRCLEQ_FOREACH_REVERSE(var, head, field) \
++ for((var) = CIRCLEQ_LAST(head); \
++ (var) != CIRCLEQ_END(head); \
++ (var) = CIRCLEQ_PREV(var, field))
++
++/*
++ * Circular queue functions.
++ */
++#define CIRCLEQ_INIT(head) do { \
++ (head)->cqh_first = CIRCLEQ_END(head); \
++ (head)->cqh_last = CIRCLEQ_END(head); \
++} while (0)
++
++#define CIRCLEQ_INSERT_AFTER(head, listelm, elm, field) do { \
++ (elm)->field.cqe_next = (listelm)->field.cqe_next; \
++ (elm)->field.cqe_prev = (listelm); \
++ if ((listelm)->field.cqe_next == CIRCLEQ_END(head)) \
++ (head)->cqh_last = (elm); \
++ else \
++ (listelm)->field.cqe_next->field.cqe_prev = (elm); \
++ (listelm)->field.cqe_next = (elm); \
++} while (0)
++
++#define CIRCLEQ_INSERT_BEFORE(head, listelm, elm, field) do { \
++ (elm)->field.cqe_next = (listelm); \
++ (elm)->field.cqe_prev = (listelm)->field.cqe_prev; \
++ if ((listelm)->field.cqe_prev == CIRCLEQ_END(head)) \
++ (head)->cqh_first = (elm); \
++ else \
++ (listelm)->field.cqe_prev->field.cqe_next = (elm); \
++ (listelm)->field.cqe_prev = (elm); \
++} while (0)
++
++#define CIRCLEQ_INSERT_HEAD(head, elm, field) do { \
++ (elm)->field.cqe_next = (head)->cqh_first; \
++ (elm)->field.cqe_prev = CIRCLEQ_END(head); \
++ if ((head)->cqh_last == CIRCLEQ_END(head)) \
++ (head)->cqh_last = (elm); \
++ else \
++ (head)->cqh_first->field.cqe_prev = (elm); \
++ (head)->cqh_first = (elm); \
++} while (0)
++
++#define CIRCLEQ_INSERT_TAIL(head, elm, field) do { \
++ (elm)->field.cqe_next = CIRCLEQ_END(head); \
++ (elm)->field.cqe_prev = (head)->cqh_last; \
++ if ((head)->cqh_first == CIRCLEQ_END(head)) \
++ (head)->cqh_first = (elm); \
++ else \
++ (head)->cqh_last->field.cqe_next = (elm); \
++ (head)->cqh_last = (elm); \
++} while (0)
++
++#define CIRCLEQ_REMOVE(head, elm, field) do { \
++ if ((elm)->field.cqe_next == CIRCLEQ_END(head)) \
++ (head)->cqh_last = (elm)->field.cqe_prev; \
++ else \
++ (elm)->field.cqe_next->field.cqe_prev = \
++ (elm)->field.cqe_prev; \
++ if ((elm)->field.cqe_prev == CIRCLEQ_END(head)) \
++ (head)->cqh_first = (elm)->field.cqe_next; \
++ else \
++ (elm)->field.cqe_prev->field.cqe_next = \
++ (elm)->field.cqe_next; \
++} while (0)
++
++#define CIRCLEQ_REPLACE(head, elm, elm2, field) do { \
++ if (((elm2)->field.cqe_next = (elm)->field.cqe_next) == \
++ CIRCLEQ_END(head)) \
++ (head).cqh_last = (elm2); \
++ else \
++ (elm2)->field.cqe_next->field.cqe_prev = (elm2); \
++ if (((elm2)->field.cqe_prev = (elm)->field.cqe_prev) == \
++ CIRCLEQ_END(head)) \
++ (head).cqh_first = (elm2); \
++ else \
++ (elm2)->field.cqe_prev->field.cqe_next = (elm2); \
++} while (0)
++
++#endif /* !_FAKE_QUEUE_H_ */
+--- cvs/buf.h~linux.patch
++++ cvs/buf.h
+@@ -39,6 +39,7 @@
+ #define BUF_H
+
+ #include <sys/types.h>
++#include "config.h"
+
+
+ /* flags */
+--- cvs/cache.c~linux.patch
++++ cvs/cache.c
+@@ -25,7 +25,11 @@
+ */
+
+ #include <sys/param.h>
+-#include <sys/queue.h>
++#if HAVE_DECL_LIST_FOREACH
++# include <sys/queue.h>
++#else
++# include <bsd-queue.h>
++#endif
+ #include <sys/time.h>
+
+ #include <stdlib.h>
+--- cvs/commit.c~linux.patch
++++ cvs/commit.c
+@@ -25,7 +25,11 @@
+ */
+
+ #include <sys/types.h>
+-#include <sys/queue.h>
++#if HAVE_DECL_LIST_FOREACH
++# include <sys/queue.h>
++#else
++# include <bsd-queue.h>
++#endif
+ #include <sys/stat.h>
+
+ #include <errno.h>
+--- /dev/null
++++ cvs/configure.ac
+@@ -0,0 +1,72 @@
++# -*- Autoconf -*-
++# Process this file with autoconf to produce a configure script.
++
++AC_PREREQ(2.59)
++AC_INIT(OpenCVS, 1.0, unknown@unknown.com)
++AC_CONFIG_SRCDIR([remove.c])
++AM_CONFIG_HEADER([config.h])
++AM_INIT_AUTOMAKE
++
++# Checks for programs.
++AC_PROG_CC
++
++# Checks for libraries.
++AC_CHECK_HEADER([md5.h], [], [
++ AC_CHECK_LIB([ssl], [MD5_Final], MD5_LIBS="-lssl", AC_MSG_ERROR([Unable to find an appropriate lib for the MD5 functions]))
++])
++AC_SUBST([MD5_LIBS])
++
++# Checks for header files.
++AC_HEADER_DIRENT
++AC_HEADER_STDC
++AC_HEADER_SYS_WAIT
++AC_CHECK_HEADERS([fcntl.h netinet/in.h paths.h stddef.h stdlib.h string.h sys/param.h sys/socket.h sys/time.h syslog.h unistd.h])
++AC_CHECK_HEADERS([stdint.h])
++AC_CHECK_HEADERS([md5.h])
++
++# Checks for typedefs, structures, and compiler characteristics.
++AC_C_CONST
++AC_TYPE_UID_T
++AC_TYPE_MODE_T
++AC_TYPE_OFF_T
++AC_TYPE_PID_T
++AC_TYPE_SIZE_T
++AC_HEADER_TIME
++AC_STRUCT_TM
++AC_C_VOLATILE
++AC_CHECK_DECL([LIST_FOREACH], [], [], [[
++#if HAVE_SYS_QUEUE_H
++# include <sys/queue.h>
++#endif
++]])
++AC_CHECK_TYPES([ptrdiff_t])
++AC_CHECK_DECL([optreset])
++AC_CHECK_FUNC([syslog_r])
++AC_CHECK_DECL([u_int], [], [AC_DEFINE([u_int], [unsigned int], [u_int isnt defined for Linux platforms])])
++AC_CHECK_DECL([u_char], [], [AC_DEFINE([u_char], [unsigned char], [u_char isnt defined for Linux platforms])])
++
++# NOTE: strn* is not as safe as strl*, due to the fact that if
++# the src is larger than the dest, strn* do not NULL terminate.
++# FIXME: replace these with inline functions that call strn* and
++# then NULL terminate the dest.
++AC_CHECK_FUNCS([strlcpy], [], [AC_DEFINE([strlcpy], [strncpy], [strlcpy isnt portable])])
++AC_CHECK_FUNCS([strlcat], [], [AC_DEFINE([strlcat], [strncat], [strlcat isnt portable])])
++AC_CHECK_FUNCS([heapsort], [], [AC_DEFINE([heapsort], [qsort], [heapsrt isnt portable, and according to the man page, the only advantage over qsort is memory])])
++
++# Checks for library functions.
++AC_FUNC_CHOWN
++AC_REPLACE_FNMATCH
++AC_FUNC_FORK
++AC_FUNC_MALLOC
++AC_FUNC_MEMCMP
++AC_FUNC_MKTIME
++AC_FUNC_REALLOC
++AC_FUNC_SETVBUF_REVERSED
++AC_TYPE_SIGNAL
++AC_FUNC_STAT
++AC_FUNC_VPRINTF
++AC_CHECK_FUNCS([dup2 gettimeofday localtime_r memchr memset mkdir realpath socket strcasecmp strchr strdup strerror strrchr strtol])
++AC_CHECK_FUNCS([getdirentries], [], [AC_MSG_ERROR([getdirentries not found])])
++
++AC_CONFIG_FILES([Makefile])
++AC_OUTPUT
+--- cvs/conf.y~linux.patch
++++ cvs/conf.y
+@@ -33,7 +33,11 @@
+
+ %{
+ #include <sys/types.h>
+-#include <sys/queue.h>
++#if HAVE_DECL_LIST_FOREACH
++# include <sys/queue.h>
++#else
++# include <bsd-queue.h>
++#endif
+
+ #include <errno.h>
+ #include <ctype.h>
+--- cvs/cvs/Makefile
++++ /dev/null
+--- cvs/cvs.c~linux.patch
++++ cvs/cvs.c
+@@ -41,6 +41,7 @@
+ #include "cvs.h"
+ #include "log.h"
+ #include "file.h"
++#include "config.h"
+
+
+ extern char *__progname;
+@@ -518,7 +519,9 @@
+
+ ret = optind;
+ optind = 1;
++#if HAVE_DECL_OPTRESET
+ optreset = 1; /* for next call */
++#endif
+
+ return (ret);
+ }
+--- cvs/cvsd/Makefile
++++ /dev/null
+--- cvs/cvsd.h~linux.patch
++++ cvs/cvsd.h
+@@ -28,7 +28,11 @@
+ #define CVSD_H
+
+ #include <sys/types.h>
+-#include <sys/queue.h>
++#if HAVE_DECL_LIST_FOREACH
++# include <sys/queue.h>
++#else
++# include <bsd-queue.h>
++#endif
+ #include <sys/stat.h>
+ #include <sys/socket.h>
+
+--- cvs/cvs.h~linux.patch
++++ cvs/cvs.h
+@@ -33,6 +33,7 @@
+
+ #include "rcs.h"
+ #include "file.h"
++#include "config.h"
+
+ #define CVS_VERSION_MAJOR 0
+ #define CVS_VERSION_MINOR 2
+--- cvs/diff.c~linux.patch
++++ cvs/diff.c
+@@ -126,6 +126,8 @@
+ * 6n words for files of length n.
+ */
+
++#include "config.h"
++
+ #include <sys/param.h>
+ #include <sys/stat.h>
+ #include <sys/wait.h>
+@@ -142,6 +144,9 @@
+ #include <unistd.h>
+ #include <string.h>
+ #include <sysexits.h>
++#if HAVE_STDINT_H
++# include <stdint.h>
++#endif
+
+ #include "cvs.h"
+ #include "log.h"
+--- cvs/event.h~linux.patch
++++ cvs/event.h
+@@ -28,7 +28,11 @@
+ #define EVENT_H
+
+ #include <sys/types.h>
+-#include <sys/queue.h>
++#if HAVE_DECL_LIST_FOREACH
++# include <sys/queue.h>
++#else
++# include <bsd-queue.h>
++#endif
+ #include <sys/time.h>
+
+ #include <pwd.h>
+--- cvs/file.c~linux.patch
++++ cvs/file.c
+@@ -25,7 +25,11 @@
+ */
+
+ #include <sys/types.h>
+-#include <sys/queue.h>
++#if HAVE_DECL_LIST_FOREACH
++# include <sys/queue.h>
++#else
++# include <bsd-queue.h>
++#endif
+ #include <sys/stat.h>
+
+ #include <pwd.h>
+--- cvs/import.c~linux.patch
++++ cvs/import.c
+@@ -25,7 +25,11 @@
+ */
+
+ #include <sys/types.h>
+-#include <sys/queue.h>
++#if HAVE_DECL_LIST_FOREACH
++# include <sys/queue.h>
++#else
++# include <bsd-queue.h>
++#endif
+
+ #include <err.h>
+ #include <dirent.h>
+--- cvs/log.c~linux.patch
++++ cvs/log.c
+@@ -73,7 +73,9 @@
+ #define NB_FILTERS sizeof(cvs_log_filters)/sizeof(cvs_log_filters[0])
+
+
++#if HAVE_SYSLOG_R
+ static struct syslog_data cvs_sl;
++#endif
+
+
+ /*
+@@ -106,7 +108,11 @@
+ if (flags & LF_PID)
+ slopt |= LOG_PID;
+
++#if HAVE_SYSLOG_R
+ openlog_r(__progname, slopt, LOG_DAEMON, &cvs_sl);
++#else
++ openlog(__progname, slopt, LOG_DAEMON);
++#endif
+ }
+
+ return (0);
+@@ -122,7 +128,11 @@
+ cvs_log_cleanup(void)
+ {
+
++#if HAVE_SYSLOG_R
+ closelog_r(&cvs_sl);
++#else
++ closelog();
++#endif
+ }
+
+
+@@ -276,7 +286,11 @@
+ }
+
+ if (cvs_log_dest & LD_SYSLOG)
++#if HAVE_SYSLOG_R
+ syslog_r(cvs_slpriomap[level], &cvs_sl, "%s", buf);
++#else
++ syslog(cvs_slpriomap[level], "%s", buf);
++#endif
+
+ /* preserve it just in case we changed it? */
+ if (level == LP_ERRNO)
+--- cvs/Makefile~linux.patch
++++ cvs/Makefile
+@@ -1,7 +1,1227 @@
+-# $OpenBSD: Makefile,v 1.2 2004/07/26 17:29:49 jfb Exp $
++# Makefile.in generated by automake 1.8.4 from Makefile.am.
++# Makefile. Generated from Makefile.in by configure.
+
+-.include <bsd.own.mk>
++# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
++# 2003, 2004 Free Software Foundation, Inc.
++# This Makefile.in is free software; the Free Software Foundation
++# gives unlimited permission to copy and/or distribute it,
++# with or without modifications, as long as this notice is preserved.
+
+-SUBDIR= cvs cvsd
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
++# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
++# PARTICULAR PURPOSE.
+
+-.include <bsd.subdir.mk>
++
++
++SOURCES = $(cvs_SOURCES)
++
++srcdir = /home/kergoth/code/user/oe/build-omap/tmp/work/opencvs-0.0cvs20050111-r0/cvs
++top_srcdir = /home/kergoth/code/user/oe/build-omap/tmp/work/opencvs-0.0cvs20050111-r0/cvs
++VPATH = /home/kergoth/code/user/oe/build-omap/tmp/work/opencvs-0.0cvs20050111-r0/cvs
++pkgdatadir = $(datadir)/
++pkglibdir = $(libdir)/
++pkgincludedir = $(includedir)/
++top_builddir = .
++am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
++INSTALL = /usr/bin/install -c
++install_sh_DATA = $(install_sh) -c -m 644
++install_sh_PROGRAM = $(install_sh) -c
++install_sh_SCRIPT = $(install_sh) -c
++INSTALL_HEADER = $(INSTALL_DATA)
++transform = $(program_transform_name)
++NORMAL_INSTALL = :
++PRE_INSTALL = :
++POST_INSTALL = :
++NORMAL_UNINSTALL = :
++PRE_UNINSTALL = :
++POST_UNINSTALL = :
++bin_PROGRAMS = cvs$(EXEEXT)
++subdir = .
++DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
++ $(srcdir)/Makefile.in $(srcdir)/config.h.in \
++ $(top_srcdir)/configure TODO compile depcomp install-sh \
++ missing
++ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
++am__aclocal_m4_deps = $(top_srcdir)/configure.ac
++am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
++ $(ACLOCAL_M4)
++am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
++ configure.lineno configure.status.lineno
++mkinstalldirs = $(mkdir_p)
++CONFIG_HEADER = config.h
++CONFIG_CLEAN_FILES =
++am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man5dir)" "$(DESTDIR)$(man7dir)"
++binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
++PROGRAMS = $(bin_PROGRAMS)
++am_cvs_OBJECTS = cvs-cvs.$(OBJEXT) cvs-add.$(OBJEXT) \
++ cvs-annotate.$(OBJEXT) cvs-buf.$(OBJEXT) \
++ cvs-checkout.$(OBJEXT) cvs-commit.$(OBJEXT) cvs-diff.$(OBJEXT) \
++ cvs-entries.$(OBJEXT) cvs-file.$(OBJEXT) cvs-getlog.$(OBJEXT) \
++ cvs-history.$(OBJEXT) cvs-hist.$(OBJEXT) cvs-import.$(OBJEXT) \
++ cvs-init.$(OBJEXT) cvs-log.$(OBJEXT) cvs-logmsg.$(OBJEXT) \
++ cvs-proto.$(OBJEXT) cvs-rcs.$(OBJEXT) cvs-rcsnum.$(OBJEXT) \
++ cvs-remove.$(OBJEXT) cvs-req.$(OBJEXT) cvs-resp.$(OBJEXT) \
++ cvs-root.$(OBJEXT) cvs-server.$(OBJEXT) cvs-sock.$(OBJEXT) \
++ cvs-status.$(OBJEXT) cvs-tag.$(OBJEXT) cvs-update.$(OBJEXT) \
++ cvs-util.$(OBJEXT) cvs-version.$(OBJEXT)
++cvs_OBJECTS = $(am_cvs_OBJECTS)
++am__DEPENDENCIES_1 =
++cvs_DEPENDENCIES = $(am__DEPENDENCIES_1)
++DEFAULT_INCLUDES = -I. -I$(srcdir) -I.
++depcomp = $(SHELL) $(top_srcdir)/depcomp
++am__depfiles_maybe = depfiles
++@AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/cvs-add.Po \
++@AMDEP_TRUE@ ./$(DEPDIR)/cvs-annotate.Po ./$(DEPDIR)/cvs-buf.Po \
++@AMDEP_TRUE@ ./$(DEPDIR)/cvs-checkout.Po \
++@AMDEP_TRUE@ ./$(DEPDIR)/cvs-commit.Po ./$(DEPDIR)/cvs-cvs.Po \
++@AMDEP_TRUE@ ./$(DEPDIR)/cvs-diff.Po ./$(DEPDIR)/cvs-entries.Po \
++@AMDEP_TRUE@ ./$(DEPDIR)/cvs-file.Po ./$(DEPDIR)/cvs-getlog.Po \
++@AMDEP_TRUE@ ./$(DEPDIR)/cvs-hist.Po ./$(DEPDIR)/cvs-history.Po \
++@AMDEP_TRUE@ ./$(DEPDIR)/cvs-import.Po ./$(DEPDIR)/cvs-init.Po \
++@AMDEP_TRUE@ ./$(DEPDIR)/cvs-log.Po ./$(DEPDIR)/cvs-logmsg.Po \
++@AMDEP_TRUE@ ./$(DEPDIR)/cvs-proto.Po ./$(DEPDIR)/cvs-rcs.Po \
++@AMDEP_TRUE@ ./$(DEPDIR)/cvs-rcsnum.Po \
++@AMDEP_TRUE@ ./$(DEPDIR)/cvs-remove.Po ./$(DEPDIR)/cvs-req.Po \
++@AMDEP_TRUE@ ./$(DEPDIR)/cvs-resp.Po ./$(DEPDIR)/cvs-root.Po \
++@AMDEP_TRUE@ ./$(DEPDIR)/cvs-server.Po ./$(DEPDIR)/cvs-sock.Po \
++@AMDEP_TRUE@ ./$(DEPDIR)/cvs-status.Po ./$(DEPDIR)/cvs-tag.Po \
++@AMDEP_TRUE@ ./$(DEPDIR)/cvs-update.Po ./$(DEPDIR)/cvs-util.Po \
++@AMDEP_TRUE@ ./$(DEPDIR)/cvs-version.Po
++COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
++ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
++CCLD = $(CC)
++LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
++SOURCES = $(cvs_SOURCES)
++DIST_SOURCES = $(cvs_SOURCES)
++man1dir = $(mandir)/man1
++man5dir = $(mandir)/man5
++man7dir = $(mandir)/man7
++NROFF = nroff
++MANS = $(man1_MANS) $(man5_MANS) $(man7_MANS)
++ETAGS = etags
++CTAGS = ctags
++DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
++distdir = $(PACKAGE)-$(VERSION)
++top_distdir = $(distdir)
++am__remove_distdir = \
++ { test ! -d $(distdir) \
++ || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \
++ && rm -fr $(distdir); }; }
++DIST_ARCH