--- /dev/null
+#!/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
--- /dev/null
+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;