bug-gnulib
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

new module 'search'


From: Bruno Haible
Subject: new module 'search'
Date: Sun, 25 Mar 2007 03:44:03 +0100
User-agent: KMail/1.5.4

tsearch() should be declared in <search.h>, not "tsearch.h". I'm removing
tsearch.h, making gnulib more POSIX aligned.

2007-03-24  Bruno Haible  <address@hidden>

        * modules/search: New file.
        * lib/search_.h: New file, incorporating lib/tsearch.h.
        * m4/search_h.m4: New file.
        * lib/tsearch.h: Remove file.
        * lib/tsearch.c: Include search.h instead of tsearch.h.
        * m4/tsearch.m4 (gl_FUNC_TSEARCH): Require gl_SEARCH_H_DEFAULTS. Set
        HAVE_TSEARCH.
        * modules/tsearch (Files): Remove lib/tsearch.h.
        (Depends-on): Add search.
        (configure.ac): Invoke gl_SEARCH_MODULE_INDICATOR.
        (Include): Change tsearch.h into search.h.

======================= modules/search =======================================
Description:
A GNU-like <search.h>.

Files:
lib/search_.h
m4/search_h.m4

Depends-on:
absolute-header
link-warning

configure.ac:
gl_SEARCH_H

Makefile.am:
BUILT_SOURCES += search.h

# We need the following in order to create <search.h> when the system
# doesn't have one that works with the given compiler.
search.h: search_.h
        rm -f address@hidden $@
        { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
          sed -e 's|@''HAVE_SEARCH_H''@|$(HAVE_SEARCH_H)|g' \
              -e 's|@''ABSOLUTE_SEARCH_H''@|$(ABSOLUTE_SEARCH_H)|g' \
              -e 's|@''GNULIB_TSEARCH''@|$(GNULIB_TSEARCH)|g' \
              -e 's|@''HAVE_TSEARCH''@|$(HAVE_TSEARCH)|g' \
              -e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \
              < $(srcdir)/search_.h; \
        } > address@hidden
        mv address@hidden $@
MOSTLYCLEANFILES += search.h search.h-t

Include:
#include <search.h>

License:
LGPL

Maintainer:
all
======================= lib/search_.h ========================================
/* A GNU-like <search.h>.

   Copyright (C) 2007 Free Software Foundation, Inc.

   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 2, or (at your option)
   any later version.

   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with this program; if not, write to the Free Software Foundation,
   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */

#ifndef _GL_SEARCH_H
#define _GL_SEARCH_H

#if @HAVE_SEARCH_H@
# include @ABSOLUTE_SEARCH_H@
#endif


/* The definition of GL_LINK_WARNING is copied here.  */


#ifdef __cplusplus
extern "C" {
#endif


#if @GNULIB_TSEARCH@
# if address@hidden@

/* See <http://www.opengroup.org/susv3xbd/search.h.html>,
       <http://www.opengroup.org/susv3xsh/tsearch.html>
   for details.  */

typedef enum
{ 
  preorder,
  postorder, 
  endorder,
  leaf
}
VISIT;

/* Searches an element in the tree *VROOTP that compares equal to KEY.
   If one is found, it is returned.  Otherwise, a new element equal to KEY
   is inserted in the tree and is returned.  */
extern void * tsearch (const void *key, void **vrootp,
                       int (*compar) (const void *, const void *));

/* Searches an element in the tree *VROOTP that compares equal to KEY.
   If one is found, it is returned.  Otherwise, NULL is returned.  */
extern void * tfind (const void *key, void *const *vrootp,
                     int (*compar) (const void *, const void *));

/* Searches an element in the tree *VROOTP that compares equal to KEY.
   If one is found, it is removed from the tree, and its parent node is
   returned.  Otherwise, NULL is returned.  */
extern void * tdelete (const void *key, void **vrootp,
                       int (*compar) (const void *, const void *));

/* Perform a depth-first, left-to-right traversal of the tree VROOT.
   The ACTION function is called:
     - for non-leaf nodes: 3 times, before the left subtree traversal,
       after the left subtree traversal but before the right subtree traversal,
       and after the right subtree traversal,
     - for leaf nodes: once.
   The arguments passed to ACTION are:
     1. the node; it can be casted to a 'const void * const *', i.e. into a
        pointer to the key,
     2. an indicator which visit of the node this is,
     3. the level of the node in the tree (0 for the root).  */
extern void twalk (const void *vroot,
                   void (*action) (const void *, VISIT, int));

# endif
#elif defined GNULIB_POSIXCHECK
# undef tsearch
# define tsearch(k,v,c) \
    (GL_LINK_WARNING ("tsearch is unportable - " \
                      "use gnulib module tsearch for portability"), \
     tsearch (k, v, c))
# undef tfind
# define tfind(k,v,c) \
    (GL_LINK_WARNING ("tfind is unportable - " \
                      "use gnulib module tsearch for portability"), \
     tfind (k, v, c))
# undef tdelete
# define tdelete(k,v,c) \
    (GL_LINK_WARNING ("tdelete is unportable - " \
                      "use gnulib module tsearch for portability"), \
     tdelete (k, v, c))
# undef twalk
# define twalk(v,a) \
    (GL_LINK_WARNING ("twalk is unportable - " \
                      "use gnulib module tsearch for portability"), \
     twalk (v, a))
#endif


#ifdef __cplusplus
}
#endif

#endif
======================= m4/search.m4 =========================================
# search_h.m4 serial 1
dnl Copyright (C) 2007 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.

AC_DEFUN([gl_SEARCH_H],
[
  AC_REQUIRE([gl_SEARCH_H_DEFAULTS])
  AC_CHECK_HEADERS_ONCE([search.h])
  if test $ac_cv_header_search_h = yes; then
    HAVE_SEARCH_H=1
    gl_ABSOLUTE_HEADER([search.h])
    ABSOLUTE_SEARCH_H=\"$gl_cv_absolute_search_h\"
  else
    HAVE_SEARCH_H=0
  fi
  AC_SUBST([HAVE_SEARCH_H])
  AC_SUBST([ABSOLUTE_SEARCH_H])
])

AC_DEFUN([gl_SEARCH_MODULE_INDICATOR],
[
  dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
  AC_REQUIRE([gl_SEARCH_H_DEFAULTS])
  
GNULIB_[]m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./-],[ABCDEFGHIJKLMNOPQRSTUVWXYZ___])=1
])

AC_DEFUN([gl_SEARCH_H_DEFAULTS],
[
  GNULIB_TSEARCH=0; AC_SUBST([GNULIB_TSEARCH])
  dnl Assume proper GNU behavior unless another module says otherwise.
  HAVE_TSEARCH=1; AC_SUBST([HAVE_TSEARCH])
])
==============================================================================
*** modules/tsearch     31 Oct 2006 19:16:02 -0000      1.1
--- modules/tsearch     25 Mar 2007 02:36:03 -0000
***************
*** 2,20 ****
  Binary tree data structure.
  
  Files:
- lib/tsearch.h
  lib/tsearch.c
  m4/tsearch.m4
  
  Depends-on:
  
  configure.ac:
  gl_FUNC_TSEARCH
  
  Makefile.am:
  
  Include:
! "tsearch.h"
  
  License:
  LGPL
--- 2,21 ----
  Binary tree data structure.
  
  Files:
  lib/tsearch.c
  m4/tsearch.m4
  
  Depends-on:
+ search
  
  configure.ac:
  gl_FUNC_TSEARCH
+ gl_SEARCH_MODULE_INDICATOR([tsearch])
  
  Makefile.am:
  
  Include:
! <search.h>
  
  License:
  LGPL
*** m4/tsearch.m4       31 Oct 2006 19:16:02 -0000      1.1
--- m4/tsearch.m4       25 Mar 2007 02:36:03 -0000
***************
*** 1,13 ****
! # tsearch.m4 serial 1
! dnl Copyright (C) 2006 Free Software Foundation, Inc.
  dnl This file is free software; the Free Software Foundation
  dnl gives unlimited permission to copy and/or distribute it,
  dnl with or without modifications, as long as this notice is preserved.
  
  AC_DEFUN([gl_FUNC_TSEARCH],
  [
!   AC_REPLACE_FUNCS(tsearch)
    if test $ac_cv_func_tsearch = no; then
      gl_PREREQ_TSEARCH
    fi
  ])
--- 1,16 ----
! # tsearch.m4 serial 2
! dnl Copyright (C) 2006-2007 Free Software Foundation, Inc.
  dnl This file is free software; the Free Software Foundation
  dnl gives unlimited permission to copy and/or distribute it,
  dnl with or without modifications, as long as this notice is preserved.
  
  AC_DEFUN([gl_FUNC_TSEARCH],
  [
!   AC_REQUIRE([gl_SEARCH_H_DEFAULTS])
!   AC_CHECK_FUNCS([tsearch])
    if test $ac_cv_func_tsearch = no; then
+     HAVE_TSEARCH=0
+     AC_LIBOBJ([tsearch])
      gl_PREREQ_TSEARCH
    fi
  ])
*** lib/tsearch.c       31 Oct 2006 19:16:02 -0000      1.1
--- lib/tsearch.c       25 Mar 2007 02:36:03 -0000
***************
*** 1,4 ****
! /* Copyright (C) 1995, 1996, 1997, 2000, 2006 Free Software Foundation, Inc.
     Contributed by Bernd Schmidt <address@hidden>, 1997.
  
     NOTE: The canonical source of this file is maintained with the GNU C
--- 1,4 ----
! /* Copyright (C) 1995-1997, 2000, 2006-2007 Free Software Foundation, Inc.
     Contributed by Bernd Schmidt <address@hidden>, 1997.
  
     NOTE: The canonical source of this file is maintained with the GNU C
***************
*** 88,94 ****
  #include <config.h>
  
  /* Specification.  */
! #include "tsearch.h"
  
  #include <stdlib.h>
  
--- 88,98 ----
  #include <config.h>
  
  /* Specification.  */
! #ifdef IN_LIBINTL
! # include "tsearch.h"
! #else
! # include <search.h>
! #endif
  
  #include <stdlib.h>
  





reply via email to

[Prev in Thread] Current Thread [Next in Thread]