summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/tdb/Makefile.in7
-rwxr-xr-xlib/tdb/abi_checks.sh35
-rw-r--r--lib/tdb/configure.ac3
-rw-r--r--lib/tdb/libtdb.m45
-rw-r--r--lib/tdb/rules.mk2
-rw-r--r--lib/tdb/tdb.exports64
-rw-r--r--lib/tdb/tdb.signatures59
7 files changed, 172 insertions, 3 deletions
diff --git a/lib/tdb/Makefile.in b/lib/tdb/Makefile.in
index df1b02be6a1..93bfe37f4f2 100644
--- a/lib/tdb/Makefile.in
+++ b/lib/tdb/Makefile.in
@@ -33,6 +33,10 @@ tdbdir = @tdbdir@
TDB_OBJ = @TDB_OBJ@ @LIBREPLACEOBJ@
+SONAMEFLAG = @SONAMEFLAG@
+VERSIONSCRIPT = @VERSIONSCRIPT@
+EXPORTSFILE = @EXPORTSFILE@
+
default: all
include $(tdbdir)/tdb.mk
@@ -42,7 +46,7 @@ all:: showflags dirs $(PROGS) $(TDB_SOLIB) libtdb.a $(PYTHON_BUILD_TARGET)
install:: all
$(TDB_SOLIB): $(TDB_OBJ)
- $(SHLD) $(SHLD_FLAGS) -o $@ $(TDB_OBJ) @SONAMEFLAG@$(TDB_SONAME)
+ $(SHLD) $(SHLD_FLAGS) -o $@ $(TDB_OBJ) $(VERSIONSCRIPT) $(EXPORTSFILE) $(SONAMEFLAG)$(TDB_SONAME)
shared-build: all
${INSTALLCMD} -d $(sharedbuilddir)/lib
@@ -60,6 +64,7 @@ installcheck:: test install
clean::
rm -f *.o *.a */*.o
+ rm -fr abi
distclean:: clean
rm -f config.log config.status include/config.h config.cache
diff --git a/lib/tdb/abi_checks.sh b/lib/tdb/abi_checks.sh
new file mode 100755
index 00000000000..042b0f3374e
--- /dev/null
+++ b/lib/tdb/abi_checks.sh
@@ -0,0 +1,35 @@
+#!/bin/bash
+
+make clean
+
+mkdir -p abi/common
+mkdir -p abi/tools
+ABI_CHECKS="-aux-info abi/\$@.X"
+make ABI_CHECK="$ABI_CHECKS" CC="/usr/bin/gcc"
+
+for i in abi/*/*.X; do cat $i | grep 'tdb\.h'; done | sort | uniq | awk -F "extern " '{ print $2 }' > abi/signatures
+grep '^extern' include/tdb.h | grep -v '"C"' | sort | uniq | awk -F "extern " '{ print $2 }' >> abi/signatures
+
+cat > abi/exports << EOF
+{
+ global:
+EOF
+#Functions
+cat abi/signatures | grep "(" | awk -F '(' '{ print $1 }' | awk -F ' ' '{ print " "$NF";" }' | tr -d '*' | sort >> abi/exports
+#global vars
+cat abi/signatures | grep -v "(" | awk -F ';' '{print $1 }' | awk -F ' ' '{ print " "$NF";" }' | tr -d '*' | sort >> abi/exports
+cat >> abi/exports << EOF
+
+ local: *;
+};
+EOF
+
+diff -u tdb.signatures abi/signatures
+if [ "$?" != "0" ]; then
+ echo "WARNING: Possible ABI Change!!"
+fi
+
+diff -u tdb.exports abi/exports
+if [ "$?" != "0" ]; then
+ echo "WARNING: Export file may be outdated!!"
+fi
diff --git a/lib/tdb/configure.ac b/lib/tdb/configure.ac
index e00f08af70a..e5bd9f6c35a 100644
--- a/lib/tdb/configure.ac
+++ b/lib/tdb/configure.ac
@@ -2,11 +2,12 @@ AC_PREREQ(2.50)
AC_DEFUN([SMB_MODULE_DEFAULT], [echo -n ""])
AC_DEFUN([SMB_LIBRARY_ENABLE], [echo -n ""])
AC_DEFUN([SMB_ENABLE], [echo -n ""])
-AC_INIT(tdb, 1.1.4)
+AC_INIT(tdb, 1.1.5)
AC_CONFIG_SRCDIR([common/tdb.c])
AC_CONFIG_HEADER(include/config.h)
AC_LIBREPLACE_ALL_CHECKS
AC_LD_SONAMEFLAG
+AC_LD_VERSIONSCRIPT
AC_LD_PICFLAG
AC_LD_SHLIBEXT
AC_LIBREPLACE_SHLD
diff --git a/lib/tdb/libtdb.m4 b/lib/tdb/libtdb.m4
index 252e0b0be30..f5ed012a80f 100644
--- a/lib/tdb/libtdb.m4
+++ b/lib/tdb/libtdb.m4
@@ -28,3 +28,8 @@ AC_CHECK_HEADERS(getopt.h sys/select.h sys/time.h)
AC_HAVE_DECL(pread, [#include <unistd.h>])
AC_HAVE_DECL(pwrite, [#include <unistd.h>])
+
+if test x"$VERSIONSCRIPT" != "x"; then
+ EXPORTSFILE=tdb.exports
+ AC_SUBST(EXPORTSFILE)
+fi
diff --git a/lib/tdb/rules.mk b/lib/tdb/rules.mk
index 7b765625dfc..73ab771c5c2 100644
--- a/lib/tdb/rules.mk
+++ b/lib/tdb/rules.mk
@@ -15,7 +15,7 @@ showflags::
.c.o:
@echo Compiling $*.c
@mkdir -p `dirname $@`
- @$(CC) $(PICFLAG) $(CFLAGS) -c $< -o $@
+ @$(CC) $(PICFLAG) $(CFLAGS) $(ABI_CHECK) -c $< -o $@
distclean::
rm -f *~ */*~
diff --git a/lib/tdb/tdb.exports b/lib/tdb/tdb.exports
new file mode 100644
index 00000000000..f3dcd1514b0
--- /dev/null
+++ b/lib/tdb/tdb.exports
@@ -0,0 +1,64 @@
+{
+ global:
+ tdb_add_flags;
+ tdb_append;
+ tdb_chainlock;
+ tdb_chainlock_mark;
+ tdb_chainlock_nonblock;
+ tdb_chainlock_read;
+ tdb_chainlock_unmark;
+ tdb_chainunlock;
+ tdb_chainunlock_read;
+ tdb_close;
+ tdb_delete;
+ tdb_dump_all;
+ tdb_enable_seqnum;
+ tdb_error;
+ tdb_errorstr;
+ tdb_exists;
+ tdb_fd;
+ tdb_fetch;
+ tdb_firstkey;
+ tdb_freelist_size;
+ tdb_get_flags;
+ tdb_get_logging_private;
+ tdb_get_seqnum;
+ tdb_hash_size;
+ tdb_increment_seqnum_nonblock;
+ tdb_lockall;
+ tdb_lockall_mark;
+ tdb_lockall_nonblock;
+ tdb_lockall_read;
+ tdb_lockall_read_nonblock;
+ tdb_lockall_unmark;
+ tdb_log_fn;
+ tdb_map_size;
+ tdb_name;
+ tdb_nextkey;
+ tdb_open;
+ tdb_open_ex;
+ tdb_parse_record;
+ tdb_printfreelist;
+ tdb_remove_flags;
+ tdb_reopen;
+ tdb_reopen_all;
+ tdb_repack;
+ tdb_setalarm_sigptr;
+ tdb_set_logging_function;
+ tdb_set_max_dead;
+ tdb_store;
+ tdb_transaction_cancel;
+ tdb_transaction_commit;
+ tdb_transaction_prepare_commit;
+ tdb_transaction_recover;
+ tdb_transaction_start;
+ tdb_traverse;
+ tdb_traverse_read;
+ tdb_unlockall;
+ tdb_unlockall_read;
+ tdb_validate_freelist;
+ tdb_wipe_all;
+ tdb_null;
+
+ local: *;
+};
diff --git a/lib/tdb/tdb.signatures b/lib/tdb/tdb.signatures
new file mode 100644
index 00000000000..12e0b24edbc
--- /dev/null
+++ b/lib/tdb/tdb.signatures
@@ -0,0 +1,59 @@
+int tdb_reopen (struct tdb_context *);
+int tdb_reopen_all (int);
+void tdb_set_logging_function (struct tdb_context *, const struct tdb_logging_context *);
+enum TDB_ERROR tdb_error (struct tdb_context *);
+const char *tdb_errorstr (struct tdb_context *);
+TDB_DATA tdb_fetch (struct tdb_context *, TDB_DATA);
+int tdb_parse_record (struct tdb_context *, TDB_DATA, int (*) (TDB_DATA, TDB_DATA, void *), void *);
+int tdb_delete (struct tdb_context *, TDB_DATA);
+int tdb_store (struct tdb_context *, TDB_DATA, TDB_DATA, int);
+int tdb_append (struct tdb_context *, TDB_DATA, TDB_DATA);
+int tdb_close (struct tdb_context *);
+TDB_DATA tdb_firstkey (struct tdb_context *);
+TDB_DATA tdb_nextkey (struct tdb_context *, TDB_DATA);
+int tdb_traverse (struct tdb_context *, tdb_traverse_func, void *);
+int tdb_traverse_read (struct tdb_context *, tdb_traverse_func, void *);
+int tdb_exists (struct tdb_context *, TDB_DATA);
+int tdb_lockall (struct tdb_context *);
+int tdb_lockall_nonblock (struct tdb_context *);
+int tdb_unlockall (struct tdb_context *);
+int tdb_lockall_read (struct tdb_context *);
+int tdb_lockall_read_nonblock (struct tdb_context *);
+int tdb_unlockall_read (struct tdb_context *);
+int tdb_lockall_mark (struct tdb_context *);
+int tdb_lockall_unmark (struct tdb_context *);
+const char *tdb_name (struct tdb_context *);
+int tdb_fd (struct tdb_context *);
+tdb_log_func tdb_log_fn (struct tdb_context *);
+void *tdb_get_logging_private (struct tdb_context *);
+int tdb_transaction_start (struct tdb_context *);
+int tdb_transaction_prepare_commit (struct tdb_context *);
+int tdb_transaction_commit (struct tdb_context *);
+int tdb_transaction_cancel (struct tdb_context *);
+int tdb_transaction_recover (struct tdb_context *);
+int tdb_get_seqnum (struct tdb_context *);
+int tdb_hash_size (struct tdb_context *);
+size_t tdb_map_size (struct tdb_context *);
+int tdb_get_flags (struct tdb_context *);
+void tdb_add_flags (struct tdb_context *, unsigned int);
+void tdb_remove_flags (struct tdb_context *, unsigned int);
+void tdb_enable_seqnum (struct tdb_context *);
+void tdb_increment_seqnum_nonblock (struct tdb_context *);
+int tdb_chainlock (struct tdb_context *, TDB_DATA);
+int tdb_chainlock_nonblock (struct tdb_context *, TDB_DATA);
+int tdb_chainunlock (struct tdb_context *, TDB_DATA);
+int tdb_chainlock_read (struct tdb_context *, TDB_DATA);
+int tdb_chainunlock_read (struct tdb_context *, TDB_DATA);
+int tdb_chainlock_mark (struct tdb_context *, TDB_DATA);
+int tdb_chainlock_unmark (struct tdb_context *, TDB_DATA);
+void tdb_setalarm_sigptr (struct tdb_context *, volatile sig_atomic_t *);
+int tdb_wipe_all (struct tdb_context *);
+int tdb_repack (struct tdb_context *);
+void tdb_dump_all (struct tdb_context *);
+int tdb_printfreelist (struct tdb_context *);
+int tdb_validate_freelist (struct tdb_context *, int *);
+int tdb_freelist_size (struct tdb_context *);
+struct tdb_context *tdb_open (const char *, int, int, int, mode_t);
+struct tdb_context *tdb_open_ex (const char *, int, int, int, mode_t, const struct tdb_logging_context *, tdb_hash_func);
+void tdb_set_max_dead (struct tdb_context *, int);
+TDB_DATA tdb_null;