+/* $OpenLDAP$ */
+/*
+ * Copyright 1998-2000 The OpenLDAP Foundation, Redwood City, California, USA
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms are permitted only
+ * as authorized by the OpenLDAP Public License. A copy of this
+ * license is available at http://www.OpenLDAP.org/license.html or
+ * in file LICENSE in the top-level directory of the distribution.
+ */
/* LDAP C Defines */
#ifndef _LDAP_CDEFS_H
#define _LDAP_CDEFS_H
-#if defined(__cplusplus)
+#if defined(__cplusplus) || defined(c_plusplus)
# define LDAP_BEGIN_DECL extern "C" {
# define LDAP_END_DECL }
#else
-# define LDAP_BEGIN_DECL
-# define LDAP_END_DECL
+# define LDAP_BEGIN_DECL /* begin declarations */
+# define LDAP_END_DECL /* end declarations */
#endif
-#if defined(__STDC__) || defined(__cplusplus) || \
- (defined(_WIN32) && !defined(NOPROTOTYPES))
+#if !defined(__NO_PROTOTYPES) && ( defined(__NEED_PROTOTYPES) || \
+ defined(__STDC__) || defined(__cplusplus) || defined(c_plusplus) )
+
/* ANSI C or C++ */
# define LDAP_P(protos) protos
# define LDAP_CONCAT1(x,y) x ## y
# define LDAP_CONCAT(x,y) LDAP_CONCAT1(x,y)
# define LDAP_STRING(x) #x /* stringify without expanding x */
# define LDAP_XSTRING(x) LDAP_STRING(x) /* expand x, then stringify */
-#else /* ! __STDC__ && ! __cplusplus */
+
+#ifndef LDAP_CONST
+# define LDAP_CONST const
+#endif
+
+#else /* no prototypes */
+
/* traditional C */
# define LDAP_P(protos) ()
# define LDAP_CONCAT(x,y) x/**/y
# define LDAP_STRING(x) "x"
-#endif /* __STDC__ || __cplusplus */
-
-#ifndef LDAP_F
-# ifdef _WIN32
-# define LDAP_F __declspec( dllexport )
-# else /* ! _WIN32 */
-# define LDAP_F extern
-# endif /* _WIN32 */
-#endif /* LDAP_FDECL */
+
+#ifndef LDAP_CONST
+# define LDAP_CONST /* no const */
+#endif
+
+#endif /* no prototypes */
+
+#if (__GNUC__) * 1000 + (__GNUC_MINOR__) >= 2006
+# define LDAP_GCCATTR(attrs) __attribute__(attrs)
+#else
+# define LDAP_GCCATTR(attrs)
+#endif
+
+
+/* Support for NT dynamic libraries. */
+
+/*
+ * C library. Mingw32 links with the C run-time library by default,
+ * so the explicit definition of CSTATIC will keep dllimport from
+ * being defined.
+ */
+#if (defined(__MINGW32__) && !defined(CSTATIC) || \
+ defined(_WIN32) && defined(_DLL))
+# define LIBC_F(type) extern __declspec(dllimport) type
+#else
+# define LIBC_F(type) extern type
+#endif
+
+/* AVL library */
+#if defined(LIBAVL_DECL) && defined(_WIN32)
+# define LIBAVL_F(type) extern __declspec(LIBAVL_DECL) type
+#else
+# define LIBAVL_F(type) extern type
+#endif
+
+/* LBER library */
+#if defined(LIBLBER_DECL) && defined(_WIN32)
+# define LIBLBER_F(type) extern __declspec(LIBLBER_DECL) type
+#else
+# define LIBLBER_F(type) extern type
+#endif
+
+/* LDAP library */
+#if defined(LIBLDAP_DECL) && defined(_WIN32)
+# define LIBLDAP_F(type) extern __declspec(LIBLDAP_DECL) type
+#else
+# define LIBLDAP_F(type) extern type
+#endif
+
+/* LDBM library */
+#if defined(LIBLDBM_DECL) && defined(_WIN32)
+# define LIBLDBM_F(type) extern __declspec(LIBLDBM_DECL) type
+#else
+# define LIBLDBM_F(type) extern type
+#endif
+
+/* LDIF library */
+#if defined(LIBLDIF_DECL) && defined(_WIN32)
+# define LIBLDIF_F(type) extern __declspec(LIBLDIF_DECL) type
+#else
+# define LIBLDIF_F(type) extern type
+#endif
+
+/* LUTIL library */
+#if defined(LIBLUTIL_DECL) && defined(_WIN32)
+# define LIBLUTIL_F(type) extern __declspec(LIBLUTIL_DECL) type
+#else
+# define LIBLUTIL_F(type) extern type
+#endif
+
+/* SLAPD (as a module exporting symbols) */
+#if defined(LIBSLAPD_DECL) && defined(_WIN32)
+# define LIBSLAPD_F(type) extern __declspec(LIBSLAPD_DECL) type
+#else
+# define LIBSLAPD_F(type) extern type
+#endif
#endif /* _LDAP_CDEFS_H */