]> git.sur5r.net Git - openldap/blobdiff - configure.in
ITS#7735 fix memctx usage in prev commit
[openldap] / configure.in
index fb0cd72a96ca4f3dcf584726ba40c0d67ecd81b8..fcd8bd7f3dc63b300b55fdb28ef56331801be8af 100644 (file)
@@ -1,7 +1,7 @@
 dnl $OpenLDAP$
 dnl This work is part of OpenLDAP Software <http://www.openldap.org/>.
 dnl
-dnl Copyright 1998-2009 The OpenLDAP Foundation.
+dnl Copyright 1998-2013 The OpenLDAP Foundation.
 dnl All rights reserved.
 dnl
 dnl Redistribution and use in source and binary forms, with or without
@@ -23,9 +23,9 @@ define([AC_LIBTOOL_LANG_F77_CONFIG], [:])dnl
 define([AC_LIBTOOL_LANG_GCJ_CONFIG], [:])dnl
 dnl ================================================================
 dnl Configure.in for OpenLDAP
-AC_COPYRIGHT([[Copyright 1998-2009 The OpenLDAP Foundation. All rights reserved.
+AC_COPYRIGHT([[Copyright 1998-2013 The OpenLDAP Foundation. All rights reserved.
 Restrictions apply, see COPYRIGHT and LICENSE files.]])
-AC_REVISION([$OpenLDAP$])
+AC_REVISION([$Id$])
 AC_INIT([OpenLDAP],,[http://www.openldap.org/its/])
 m4_define([AC_PACKAGE_BUGREPORT],[<http://www.openldap.org/its/>])
 AC_CONFIG_SRCDIR(build/version.sh)dnl
@@ -56,12 +56,14 @@ if test -t 1; then
        TN="`$SHTOOL echo -e '%b' 2>/dev/null`"
 fi
 
-OPENLDAP_CVS=""
-if test -d $ac_aux_dir/CVS; then
-       OPENLDAP_CVS="(from CVS sources) "
+OPENLDAP_REPO=""
+if test -d $ac_aux_dir/../.git; then
+       OPENLDAP_REPO="(from Git clone) "
+elif test -d $ac_aux_dir/CVS; then
+       OPENLDAP_REPO="(from CVS checkout) "
 fi
 
-echo "Configuring ${TB}${OL_STRING}${TN} ${OPENLDAP_CVS}..."
+echo "Configuring ${TB}${OL_STRING}${TN} ${OPENLDAP_REPO}..."
 
 dnl Determine host platform
 dnl            we try not to use this for much
@@ -96,7 +98,7 @@ AH_TOP([
 /* begin of portable.h.pre */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
- * Copyright 1998-2009 The OpenLDAP Foundation
+ * Copyright 1998-2013 The OpenLDAP Foundation
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -242,12 +244,10 @@ OL_ARG_WITH(cyrus_sasl,[  --with-cyrus-sasl         with Cyrus SASL support],
        auto, [auto yes no] )
 OL_ARG_WITH(fetch,[  --with-fetch                with fetch(3) URL support],
        auto, [auto yes no] )
-OL_ARG_WITH(gssapi,[  --with-gssapi              with GSSAPI support],
-       auto, [auto yes no] )
 OL_ARG_WITH(threads,[  --with-threads    with threads],
        auto, [auto nt posix mach pth lwp yes no manual] )
-OL_ARG_WITH(tls,[  --with-tls            with TLS/SSL support auto|openssl|gnutls],
-       auto, [auto openssl gnutls yes no] )
+OL_ARG_WITH(tls,[  --with-tls            with TLS/SSL support auto|openssl|gnutls|moznss],
+       auto, [auto openssl gnutls moznss yes no] )
 OL_ARG_WITH(yielding_select,
        [  --with-yielding-select  with implicitly yielding select],
        auto, [auto yes no manual] )
@@ -286,6 +286,7 @@ Backends="bdb \
        dnssrv \
        hdb \
        ldap \
+       mdb \
        meta \
        monitor \
        ndb \
@@ -310,6 +311,8 @@ OL_ARG_ENABLE(hdb,[    --enable-hdb   enable Hierarchical DB backend],
        yes, [no yes mod], ol_enable_backends)dnl
 OL_ARG_ENABLE(ldap,[    --enable-ldap    enable ldap backend],
        no, [no yes mod], ol_enable_backends)dnl
+OL_ARG_ENABLE(mdb,[    --enable-mdb      enable mdb database backend],
+       yes, [no yes mod], ol_enable_backends)dnl
 OL_ARG_ENABLE(meta,[    --enable-meta    enable metadirectory backend],
        no, [no yes mod], ol_enable_backends)dnl
 OL_ARG_ENABLE(monitor,[    --enable-monitor      enable monitor backend],
@@ -348,6 +351,7 @@ Overlays="accesslog \
        retcode \
        rwm \
        seqmod \
+       sssvlv \
        syncprov \
        translucent \
        unique \
@@ -387,7 +391,9 @@ OL_ARG_ENABLE(retcode,[    --enable-retcode   Return Code testing overlay],
 OL_ARG_ENABLE(rwm,[    --enable-rwm              Rewrite/Remap overlay],
        no, [no yes mod], ol_enable_overlays)
 OL_ARG_ENABLE(seqmod,[    --enable-seqmod        Sequential Modify overlay],
-       yes, [no yes mod], ol_enable_overlays)
+       no, [no yes mod], ol_enable_overlays)
+OL_ARG_ENABLE(sssvlv,[    --enable-sssvlv        ServerSideSort/VLV overlay],
+       no, [no yes mod], ol_enable_overlays)
 OL_ARG_ENABLE(syncprov,[    --enable-syncprov    Syncrepl Provider overlay],
        yes, [no yes mod], ol_enable_overlays)
 OL_ARG_ENABLE(translucent,[    --enable-translucent  Translucent Proxy overlay],
@@ -469,6 +475,7 @@ elif test $ol_enable_modules != yes &&
        test $ol_enable_dnssrv = no &&
        test $ol_enable_hdb = no &&
        test $ol_enable_ldap = no &&
+       test $ol_enable_mdb = no &&
        test $ol_enable_meta = no &&
        test $ol_enable_monitor = no &&
        test $ol_enable_ndb = no &&
@@ -530,6 +537,7 @@ BUILD_BDB=no
 BUILD_DNSSRV=no
 BUILD_HDB=no
 BUILD_LDAP=no
+BUILD_MDB=no
 BUILD_META=no
 BUILD_MONITOR=no
 BUILD_NDB=no
@@ -546,6 +554,7 @@ BUILD_AUDITLOG=no
 BUILD_CONSTRAINT=no
 BUILD_DDS=no
 BUILD_DENYOP=no
+BUILD_DEREF=no
 BUILD_DYNGROUP=no
 BUILD_DYNLIST=no
 BUILD_LASTMOD=no
@@ -556,6 +565,7 @@ BUILD_REFINT=no
 BUILD_RETCODE=no
 BUILD_RWM=no
 BUILD_SEQMOD=no
+BUILD_SSSVLV=no
 BUILD_SYNCPROV=no
 BUILD_TRANSLUCENT=no
 BUILD_UNIQUE=no
@@ -581,12 +591,10 @@ SLAPD_SQL_INCLUDES=
 KRB4_LIBS=
 KRB5_LIBS=
 SASL_LIBS=
-GSSAPI_LIBS=
 TLS_LIBS=
 MODULES_LIBS=
 SLAPI_LIBS=
 LIBSLAPI=
-LIBSLAPITOOLS=
 AUTH_LIBS=
 ICU_LIBS=
 
@@ -879,7 +887,7 @@ if test $ac_cv_func_sigaction = no && test $ac_cv_func_sigaction = no ; then
        AC_CHECK_LIB(V3, sigset)
 fi
 
-if test $ol_cv_msvc ; then
+if test $ol_cv_msvc = yes ; then
    ol_cv_winsock=yes
 fi
 
@@ -890,7 +898,7 @@ if test "$ac_cv_header_winsock_h" = yes; then
        AC_CACHE_CHECK([for winsock], [ol_cv_winsock],[
        save_LIBS="$LIBS"
        for curlib in none ws2_32 wsock32; do
-               if test curlib != none ; then
+               if test $curlib != none ; then
                LIBS="$save_LIBS -l$curlib"
                fi
                AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <winsock.h>
@@ -931,7 +939,7 @@ dnl         -linet
 AC_CHECK_FUNC(socket, :, [     
 dnl hopefully we won't include too many libraries
        AC_CHECK_LIB(socket, main)
-       AC_CHECK_LIB(net, main)
+       AC_CHECK_LIB(net, socket)
        AC_CHECK_LIB(nsl_s, main)
        AC_CHECK_LIB(nsl, main)
        AC_CHECK_LIB(inet, socket)
@@ -1012,9 +1020,11 @@ dnl UUID Support
 
 have_uuid=no
 AC_CHECK_HEADERS(sys/uuid.h)
+dnl The HAVE_UUID_TO_STR code path also needs uuid_create
 if test $ac_cv_header_sys_uuid_h = yes ; then
        save_LIBS="$LIBS"
        AC_SEARCH_LIBS([uuid_to_str], [uuid], [have_uuid=yes], :)
+       AC_SEARCH_LIBS([uuid_create], [uuid], :, [have_uuid=no])
        LIBS="$save_LIBS"
 
        if test $have_uuid = yes ; then
@@ -1027,11 +1037,13 @@ if test $ac_cv_header_sys_uuid_h = yes ; then
 fi
 
 dnl Look for uuid_generate
+dnl The HAVE_UUID_GENERATE code path also needs uuid_unparse_lower
 if test $have_uuid = no ; then
        AC_CHECK_HEADERS(uuid/uuid.h)
        if test $ac_cv_header_uuid_uuid_h = yes ; then
                save_LIBS="$LIBS"
                AC_SEARCH_LIBS([uuid_generate], [uuid], [have_uuid=yes], :)
+               AC_SEARCH_LIBS([uuid_unparse_lower], [uuid], :, [have_uuid=no])
                LIBS="$save_LIBS"
 
                if test $have_uuid = yes ; then
@@ -1141,63 +1153,6 @@ if test $ol_enable_local != no ; then
        fi
 fi
 
-dnl ----------------------------------------------------------------
-dnl GSSAPI
-ol_link_gssapi=no
-
-case $ol_with_gssapi in yes | auto)
-
-       ol_header_gssapi=no
-       AC_CHECK_HEADERS(gssapi/gssapi.h)
-       if test $ac_cv_header_gssapi_gssapi_h = yes ; then
-               ol_header_gssapi=yes
-       else
-               AC_CHECK_HEADERS(gssapi.h)
-               if test $ac_cv_header_gssapi_h = yes ; then
-                       ol_header_gssapi=yes
-               fi
-
-               dnl## not every gssapi has gss_oid_to_str()
-               dnl## as it's not defined in the GSSAPI V2 API
-               dnl## anymore
-               saveLIBS="$LIBS"
-               LIBS="$LIBS $GSSAPI_LIBS"
-               AC_CHECK_FUNCS(gss_oid_to_str)
-               LIBS="$saveLIBS"
-       fi
-
-       if test $ol_header_gssapi = yes ; then
-               dnl## we check for gss_wrap
-               dnl## as it's new to the GSSAPI V2 API
-               AC_CHECK_LIB(gssapi, gss_wrap,
-                            [ol_link_gssapi=yes;GSSAPI_LIBS="-lgssapi"],
-                            [ol_link_gssapi=no])
-               if test $ol_link_gssapi != yes ; then
-                       AC_CHECK_LIB(gssapi_krb5, gss_wrap,
-                                    [ol_link_gssapi=yes;GSSAPI_LIBS="-lgssapi_krb5"],
-                                    [ol_link_gssapi=no])
-               fi
-               if test $ol_link_gssapi != yes ; then
-                       AC_CHECK_LIB(gss, gss_wrap,
-                                    [ol_link_gssapi=yes;GSSAPI_LIBS="-lgss"],
-                                    [ol_link_gssapi=no])
-               fi
-       fi
-
-       ;;
-esac
-
-WITH_GSSAPI=no
-if test $ol_link_gssapi = yes; then
-       AC_DEFINE(HAVE_GSSAPI, 1, [define if you have GSSAPI])
-       WITH_GSSAPI=yes
-elif test $ol_with_gssapi = auto ; then
-       AC_MSG_WARN([Could not locate GSSAPI package])
-       AC_MSG_WARN([GSSAPI authentication not supported!])
-elif test $ol_with_gssapi = yes ; then
-       AC_MSG_ERROR([GSSAPI detection failed])
-fi
-
 dnl ----------------------------------------------------------------
 dnl TLS/SSL
        
@@ -1268,6 +1223,32 @@ if test $ol_link_tls = no ; then
        fi
 fi
 
+dnl NOTE: caller must specify -I/path/to/nspr4 and -I/path/to/nss3
+dnl and -L/path/to/nspr4 libs and -L/path/to/nss3 libs if those libs
+dnl are not in the default system location
+if test $ol_link_tls = no ; then
+       if test $ol_with_tls = moznss || test $ol_with_tls = auto ; then
+               have_moznss=no
+               AC_CHECK_HEADERS([nssutil.h])
+               if test "$ac_cv_header_nssutil_h" = yes ; then
+                       AC_CHECK_LIB([nss3], [NSS_Initialize],
+                                                [ have_moznss=yes ], [ have_moznss=no ])
+               fi
+
+               if test "$have_moznss" = yes ; then
+                       ol_with_tls=moznss
+                       ol_link_tls=yes
+                       AC_DEFINE(HAVE_MOZNSS, 1, 
+                                         [define if you have MozNSS])
+                       TLS_LIBS="-lssl3 -lsmime3 -lnss3 -lnssutil3 -lplds4 -lplc4 -lnspr4"
+               else
+                       if test $ol_with_tls = moznss ; then
+                       AC_MSG_ERROR([MozNSS not found - please specify the location to the NSPR and NSS header files in CPPFLAGS and the location to the NSPR and NSS libraries in LDFLAGS (if not in the system location)])
+                       fi
+               fi
+       fi
+fi
+
 WITH_TLS=no
 if test $ol_link_tls = yes ; then
        AC_DEFINE(HAVE_TLS, 1, [define if you have TLS])
@@ -1738,23 +1719,6 @@ case $ol_with_threads in auto | yes | lwp)
                        )
                fi
        fi
-
-       dnl check for SunOS4 LWP
-       AC_CHECK_HEADERS(lwp/lwp.h)
-       if test $ac_cv_header_lwp_lwp_h = yes ; then
-               AC_CHECK_LIB(lwp, lwp_create, [have_lwp=yes], [have_lwp=no])
-
-               if test $have_lwp = yes ; then
-                       AC_DEFINE(HAVE_LWP,1,
-                               [if you have SunOS LWP package])
-                       LTHREAD_LIBS="$LTHREAD_LIBS -llwp"
-                       ol_link_threads=lwp
-
-                       if test $ol_with_yielding_select = auto ; then
-                               ol_with_yielding_select=no
-                       fi
-               fi
-       fi
        ;;
 esac
 
@@ -1774,7 +1738,6 @@ if test $ol_with_threads = manual ; then
        OL_HEADER_LINUX_THREADS
 
        AC_CHECK_HEADERS(mach/cthreads.h)
-       AC_CHECK_HEADERS(lwp/lwp.h)
        AC_CHECK_HEADERS(thread.h synch.h)
 fi
 
@@ -1887,6 +1850,7 @@ dnl ----------------------------------------------------------------
 dnl Tests for reentrant functions necessary to build -lldap_r
 AC_CHECK_FUNCS(                \
        ctime_r                 \
+       gmtime_r localtime_r \
        gethostbyname_r gethostbyaddr_r \
 )
 
@@ -2033,6 +1997,21 @@ if test $ol_enable_sql != no ; then
 
                        odbc32)
                                AC_CHECK_LIB(odbc32, SQLDriverConnect, [have_odbc32=yes], [have_odbc32=no])
+                               
+                               dnl The windows API uses __stdcall which cannot be detected by AC_CHECK_LIB
+                               if test $have_odbc32 = no ; then
+                                       AC_MSG_CHECKING([for SQLDriverConnect in -lodbc32 with windows.h])
+                                       save_LIBS="$LIBS"
+                                       LIBS="$LIBS -lodbc32"
+                                       AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <windows.h>
+                                       #include <sqlext.h>
+                                               ]], [[
+                                               SQLDriverConnect(NULL,NULL,NULL,0,NULL,0,NULL,0);
+                                               ]])],[have_odbc32=yes], [have_odbc32=no])
+                                       LIBS="$save_LIBS"
+                                       AC_MSG_RESULT($have_odbc32)
+                               fi
+                               
                                if test $have_odbc32 = yes ; then
                                        ol_link_sql="-lodbc32"
                                fi
@@ -2192,7 +2171,7 @@ if test $ol_with_fetch != no ; then
        OL_LIB_FETCH
 
        if test $ol_cv_lib_fetch != no ; then
-               LUTIL_LIBS="$LUTIL_LIBS $ol_link_fetch"
+               LIBS="$LIBS $ol_link_fetch"
                ol_link_fetch=freebsd
 
        elif test $ol_with_fetch != auto ; then
@@ -2449,7 +2428,6 @@ AC_CHECK_FUNCS(                   \
        geteuid                 \
        getgrgid                \
        gethostname             \
-       getpass                 \
        getpassphrase           \
        getpwuid                \
        getpwnam                \
@@ -2485,6 +2463,7 @@ AC_CHECK_FUNCS(                   \
        strtoq                  \
        strtouq                 \
        strtoll                 \
+       strtoull                \
        strspn                  \
        sysconf                 \
        waitpid                 \
@@ -2550,8 +2529,7 @@ if test "$ol_enable_slapi" != no ; then
        fi
        AC_CHECK_LIB(ltdl, lt_dlinit, [
                SLAPI_LIBS=-lltdl
-               LIBSLAPI=libslapi.a
-               LIBSLAPITOOLS=../libslapi.a
+               LIBSLAPI=slapi/libslapi.la
                AC_DEFINE(HAVE_LIBLTDL,1,[define if you have libtool -ltdl])
        ],[AC_MSG_ERROR([could not locate libtool -lltdl])])
 
@@ -2692,6 +2670,19 @@ if test "$ol_enable_ldap" != no ; then
        AC_DEFINE_UNQUOTED(SLAPD_LDAP,$MFLAG,[define to support LDAP backend])
 fi
 
+if test "$ol_enable_mdb" != no ; then
+       BUILD_SLAPD=yes
+       BUILD_MDB=$ol_enable_mdb
+       if test "$ol_enable_mdb" = mod ; then
+               SLAPD_DYNAMIC_BACKENDS="$SLAPD_DYNAMIC_BACKENDS back-mdb"
+               MFLAG=SLAPD_MOD_DYNAMIC
+       else
+               SLAPD_STATIC_BACKENDS="$SLAPD_STATIC_BACKENDS back-mdb"
+               MFLAG=SLAPD_MOD_STATIC
+       fi
+       AC_DEFINE_UNQUOTED(SLAPD_MDB,$MFLAG,[define to support MDB backend])
+fi
+
 if test "$ol_enable_meta" != no ; then
        BUILD_SLAPD=yes
        BUILD_META=$ol_enable_meta
@@ -2874,7 +2865,7 @@ if test "$ol_enable_dds" != no ; then
 fi
 
 if test "$ol_enable_deref" != no ; then
-       BUILD_DDS=$ol_enable_deref
+       BUILD_DEREF=$ol_enable_deref
        if test "$ol_enable_deref" = mod ; then
                MFLAG=SLAPD_MOD_DYNAMIC
                SLAPD_DYNAMIC_OVERLAYS="$SLAPD_DYNAMIC_OVERLAYS deref.la"
@@ -2994,6 +2985,18 @@ if test "$ol_enable_seqmod" != no ; then
        AC_DEFINE_UNQUOTED(SLAPD_OVER_SEQMOD,$MFLAG,[define for Sequential Modify overlay])
 fi
 
+if test "$ol_enable_sssvlv" != no ; then
+       BUILD_SSSVLV=$ol_enable_sssvlv
+       if test "$ol_enable_sssvlv" = mod ; then
+               MFLAG=SLAPD_MOD_DYNAMIC
+               SLAPD_DYNAMIC_OVERLAYS="$SLAPD_DYNAMIC_OVERLAYS sssvlv.la"
+       else
+               MFLAG=SLAPD_MOD_STATIC
+               SLAPD_STATIC_OVERLAYS="$SLAPD_STATIC_OVERLAYS sssvlv.o"
+       fi
+       AC_DEFINE_UNQUOTED(SLAPD_OVER_SSSVLV,$MFLAG,[define for ServerSideSort/VLV overlay])
+fi
+
 if test "$ol_enable_syncprov" != no ; then
        BUILD_SYNCPROV=$ol_enable_syncprov
        if test "$ol_enable_syncprov" = mod ; then
@@ -3085,6 +3088,7 @@ dnl backends
   AC_SUBST(BUILD_DNSSRV)
   AC_SUBST(BUILD_HDB)
   AC_SUBST(BUILD_LDAP)
+  AC_SUBST(BUILD_MDB)
   AC_SUBST(BUILD_META)
   AC_SUBST(BUILD_MONITOR)
   AC_SUBST(BUILD_NDB)
@@ -3102,6 +3106,7 @@ dnl overlays
   AC_SUBST(BUILD_CONSTRAINT)
   AC_SUBST(BUILD_DDS)
   AC_SUBST(BUILD_DENYOP)
+  AC_SUBST(BUILD_DEREF)
   AC_SUBST(BUILD_DYNGROUP)
   AC_SUBST(BUILD_DYNLIST)
   AC_SUBST(BUILD_LASTMOD)
@@ -3112,6 +3117,7 @@ dnl overlays
   AC_SUBST(BUILD_RETCODE)
   AC_SUBST(BUILD_RWM)
   AC_SUBST(BUILD_SEQMOD)
+  AC_SUBST(BUILD_SSSVLV)
   AC_SUBST(BUILD_SYNCPROV)
   AC_SUBST(BUILD_TRANSLUCENT)
   AC_SUBST(BUILD_UNIQUE)
@@ -3142,12 +3148,10 @@ AC_SUBST(MOD_PERL_LDFLAGS)
 AC_SUBST(KRB4_LIBS)
 AC_SUBST(KRB5_LIBS)
 AC_SUBST(SASL_LIBS)
-AC_SUBST(GSSAPI_LIBS)
 AC_SUBST(TLS_LIBS)
 AC_SUBST(MODULES_LIBS)
 AC_SUBST(SLAPI_LIBS)
 AC_SUBST(LIBSLAPI)
-AC_SUBST(LIBSLAPITOOLS)
 AC_SUBST(AUTH_LIBS)
 AC_SUBST(ICU_LIBS)
 
@@ -3191,6 +3195,7 @@ AC_CONFIG_FILES([Makefile:build/top.mk:Makefile.in:build/dir.mk]
 [servers/slapd/back-hdb/Makefile:build/top.mk:servers/slapd/back-hdb/Makefile.in:build/mod.mk]
 [servers/slapd/back-ldap/Makefile:build/top.mk:servers/slapd/back-ldap/Makefile.in:build/mod.mk]
 [servers/slapd/back-ldif/Makefile:build/top.mk:servers/slapd/back-ldif/Makefile.in:build/mod.mk]
+[servers/slapd/back-mdb/Makefile:build/top.mk:servers/slapd/back-mdb/Makefile.in:build/mod.mk]
 [servers/slapd/back-meta/Makefile:build/top.mk:servers/slapd/back-meta/Makefile.in:build/mod.mk]
 [servers/slapd/back-monitor/Makefile:build/top.mk:servers/slapd/back-monitor/Makefile.in:build/mod.mk]
 [servers/slapd/back-ndb/Makefile:build/top.mk:servers/slapd/back-ndb/Makefile.in:build/mod.mk]
@@ -3217,7 +3222,7 @@ rm -f $BACKENDSC
 cat > $BACKENDSC << ENDX
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
- * Copyright 1998-2009 The OpenLDAP Foundation.
+ * Copyright 1998-2013 The OpenLDAP Foundation.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -3268,7 +3273,7 @@ rm -f $OVERLAYSC
 cat > $OVERLAYSC << ENDX
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
- * Copyright 1998-2009 The OpenLDAP Foundation.
+ * Copyright 1998-2013 The OpenLDAP Foundation.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without