diff --git a/ctdb/Makefile.in b/ctdb/Makefile.in
index a405b935bb8..f2c690c8de0 100755
--- a/ctdb/Makefile.in
+++ b/ctdb/Makefile.in
@@ -217,11 +217,19 @@ tests/bin/ctdb_transaction: $(CTDB_CLIENT_OBJ) tests/src/ctdb_transaction.o
@echo Linking $@
@$(CC) $(CFLAGS) -o $@ tests/src/ctdb_transaction.o $(CTDB_CLIENT_OBJ) $(LIB_FLAGS)
-CTDB_TAKEOVER_OBJ = $(CTDB_SERVER_OBJ:server/ctdbd.o=)
+CTDB_SERVER_MOST_OBJ = $(CTDB_SERVER_OBJ:server/ctdbd.o=)
+CTDB_TEST_C = $(CTDB_SERVER_MOST_OBJ:.o=.c) tests/src/ctdbd_test.c
+CTDB_TEST_OBJ = @TALLOC_OBJ@ @TDB_OBJ@ \
+ @LIBREPLACEOBJ@ $(EXTRA_OBJ) @TEVENT_OBJ@
-tests/bin/ctdb_takeover_tests: $(CTDB_TAKEOVER_OBJ) tests/src/ctdb_takeover_tests.o
+CTDB_TEST_DEPENDS = $(CTDB_TEST_OBJ) $(CTDB_SERVER_MOST_C) \
+ tests/src/ctdbd_test.c
+
+tests/src/ctdb_takeover_tests.o: tests/src/ctdb_takeover_tests.c $(CTDB_TEST_C)
+
+tests/bin/ctdb_takeover_tests: $(CTDB_TEST_OBJ) tests/src/ctdb_takeover_tests.o
@echo Linking $@
- @$(CC) $(CFLAGS) -o $@ tests/src/ctdb_takeover_tests.o $(CTDB_TAKEOVER_OBJ) $(LIB_FLAGS)
+ @$(CC) $(CFLAGS) -o $@ tests/src/ctdb_takeover_tests.o $(CTDB_TEST_OBJ) $(LIB_FLAGS)
tests/bin/ibwrapper_test: $(CTDB_CLIENT_OBJ) ib/ibwrapper_test.o
@echo Linking $@
diff --git a/ctdb/tests/src/ctdb_takeover_tests.c b/ctdb/tests/src/ctdb_takeover_tests.c
index 6f83b5994aa..19cb5a6f392 100644
--- a/ctdb/tests/src/ctdb_takeover_tests.c
+++ b/ctdb/tests/src/ctdb_takeover_tests.c
@@ -17,21 +17,12 @@
along with this program; if not, see .
*/
-#include "includes.h"
-#include "../include/ctdb_private.h"
+#include "ctdbd_test.c"
/* This is lazy... but it is test code! */
#define CTDB_TEST_MAX_NODES 256
#define CTDB_TEST_MAX_IPS 256
-/*
- * Need these, since they're defined in ctdbd.c but we can't link
- * that.
- */
-int script_log_level;
-bool fast_start;
-void ctdb_load_nodes_file(struct ctdb_context *ctdb) {}
-
/* Format of each line is "IP pnn" - the separator has to be at least
* 1 space (not a tab or whatever - a space!).
*/
diff --git a/ctdb/tests/src/ctdbd_test.c b/ctdb/tests/src/ctdbd_test.c
new file mode 100644
index 00000000000..1e72f4880fd
--- /dev/null
+++ b/ctdb/tests/src/ctdbd_test.c
@@ -0,0 +1,94 @@
+/*
+ ctdbd test include file
+
+ Copyright (C) Martin Schwenke 2011
+
+ 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 3 of the License, 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, see .
+*/
+
+#ifndef _CTDBD_TEST_C
+#define _CTDBD_TEST_C
+
+#include "includes.h"
+#include "lib/tevent/tevent.h"
+#include "lib/tdb/include/tdb.h"
+#include "ctdb_private.h"
+
+/*
+ * Need these, since they're defined in ctdbd.c but we can't include
+ * that.
+ */
+int script_log_level;
+bool fast_start;
+void ctdb_load_nodes_file(struct ctdb_context *ctdb) {}
+
+
+/* UTIL_OBJ */
+#include "lib/util/idtree.c"
+#include "lib/util/db_wrap.c"
+#include "lib/util/strlist.c"
+#include "lib/util/util.c"
+#include "lib/util/util_time.c"
+#include "lib/util/util_file.c"
+#include "lib/util/fault.c"
+#include "lib/util/substitute.c"
+#include "lib/util/signal.c"
+
+/* CTDB_COMMON_OBJ */
+#include "common/ctdb_io.c"
+#include "common/ctdb_util.c"
+#include "common/ctdb_ltdb.c"
+#include "common/ctdb_message.c"
+#include "common/cmdline.c"
+#include "lib/util/debug.c"
+#include "common/rb_tree.c"
+#ifdef _LINUX_ERRNO_H
+#include "common/system_linux.c"
+#endif
+#include "common/system_common.c"
+#include "common/ctdb_logging.c"
+
+/* CTDB_SERVER_OBJ */
+#include "server/ctdb_daemon.c"
+#include "server/ctdb_lockwait.c"
+#include "server/ctdb_recoverd.c"
+#include "server/ctdb_recover.c"
+#include "server/ctdb_freeze.c"
+#include "server/ctdb_tunables.c"
+#include "server/ctdb_monitor.c"
+#include "server/ctdb_server.c"
+#include "server/ctdb_control.c"
+#include "server/ctdb_call.c"
+#include "server/ctdb_ltdb_server.c"
+#include "server/ctdb_traverse.c"
+#include "server/eventscript.c"
+#include "server/ctdb_takeover.c"
+#include "server/ctdb_serverids.c"
+#include "server/ctdb_persistent.c"
+#include "server/ctdb_keepalive.c"
+#include "server/ctdb_logging.c"
+#include "server/ctdb_uptime.c"
+#include "server/ctdb_vacuum.c"
+#include "server/ctdb_banning.c"
+#include "server/ctdb_statistics.c"
+
+/* CTDB_CLIENT_OBJ */
+#include "client/ctdb_client.c"
+
+/* CTDB_TCP_OBJ */
+#include "tcp/tcp_connect.c"
+#include "tcp/tcp_io.c"
+#include "tcp/tcp_init.c"
+
+#endif /* _CTDBD_TEST_C */