diff --git a/BitKeeper/etc/logging_ok b/BitKeeper/etc/logging_ok
index b3533f2a834..9210c176e6e 100644
--- a/BitKeeper/etc/logging_ok
+++ b/BitKeeper/etc/logging_ok
@@ -76,6 +76,7 @@ konstantin@mysql.com
kostja@oak.local
lenz@kallisto.mysql.com
lenz@mysql.com
+magnus@neptunus.(none)
marko@hundin.mysql.fi
miguel@hegel.(none)
miguel@hegel.br
diff --git a/ndb/BinDist.sh b/ndb/BinDist.sh
new file mode 100644
index 00000000000..ed0b294c912
--- /dev/null
+++ b/ndb/BinDist.sh
@@ -0,0 +1,121 @@
+#
+# Invoked from scripts/make_binary_distribution as "sh BinDist.sh".
+# Prints list of dirs and files to include under mysql/ndb.
+#
+
+# release notes
+
+grep -v '^#' <<__END__
+#ReleaseNotes.html
+mysqlclusterenv.sh
+__END__
+
+# subset of bins, libs, includes
+
+grep -v '^#' <<__END__
+bin/
+bin/ndb
+bin/mgmtsrvr
+bin/mgmtclient
+bin/mysqlcluster
+bin/mysqlcluster_install_db
+bin/mysqlclusterd
+bin/restore
+bin/ndb_rep
+bin/desc
+bin/flexBench
+bin/select_all
+bin/select_count
+bin/delete_all
+bin/ndbsql
+bin/drop_tab
+bin/drop_index
+bin/list_tables
+bin/waiter
+lib/
+lib/libNEWTON_API.a
+lib/libNEWTON_API.so
+lib/libNDB_API.a
+lib/libNDB_API.so
+lib/libMGM_API.a
+lib/libMGM_API.so
+lib/libNDB_ODBC.so
+lib/libMGM_API_pic.a
+lib/libNDB_API_pic.a
+include/
+include/ndb_types.h
+include/ndb_version.h
+include/mgmapi/
+include/mgmapi/mgmapi.h
+include/mgmapi/mgmapi_debug.h
+include/ndbapi/
+include/ndbapi/ndbapi_limits.h
+include/ndbapi/AttrType.hpp
+include/ndbapi/Ndb.hpp
+include/ndbapi/NdbApi.hpp
+include/ndbapi/NdbConnection.hpp
+include/ndbapi/NdbCursorOperation.hpp
+include/ndbapi/NdbDictionary.hpp
+include/ndbapi/NdbError.hpp
+include/ndbapi/NdbEventOperation.hpp
+include/ndbapi/NdbIndexOperation.hpp
+include/ndbapi/NdbOperation.hpp
+include/ndbapi/NdbPool.hpp
+include/ndbapi/NdbRecAttr.hpp
+include/ndbapi/NdbReceiver.hpp
+include/ndbapi/NdbResultSet.hpp
+include/ndbapi/NdbScanFilter.hpp
+include/ndbapi/NdbScanOperation.hpp
+include/ndbapi/NdbSchemaCon.hpp
+include/ndbapi/NdbSchemaOp.hpp
+include/newtonapi/dba.h
+include/newtonapi/defs/pcn_types.h
+__END__
+
+#if [ -f /usr/local/lib/libstdc++.a ]; then
+# cp /usr/local/lib/libstdc++.a lib/.
+# echo lib/libstdc++.a
+#fi
+#if [ -f /usr/local/lib/libstdc++.so.5 ]; then
+# cp /usr/local/lib/libstdc++.so.5 lib/.
+# echo lib/libstdc++.so.5
+#fi
+#if [ -f /usr/local/lib/libgcc_s.so.1 ]; then
+# cp /usr/local/lib/libgcc_s.so.1 lib/.
+# echo lib/libgcc_s.so.1
+#fi
+
+# docs
+
+#find docs/*.html docs/*.pdf -print | sort -t/
+
+# demos
+
+find demos -print | grep -v /SCCS | sort -t/
+
+# examples
+
+grep -v '^#' <<__END__
+examples/
+examples/Makefile
+examples/ndbapi_example1/
+examples/ndbapi_example1/Makefile
+examples/ndbapi_example1/ndbapi_example1.cpp
+examples/ndbapi_example2/
+examples/ndbapi_example2/Makefile
+examples/ndbapi_example2/ndbapi_example2.cpp
+examples/ndbapi_example3/
+examples/ndbapi_example3/Makefile
+examples/ndbapi_example3/ndbapi_example3.cpp
+examples/ndbapi_example4/
+examples/ndbapi_example4/Makefile
+examples/ndbapi_example4/ndbapi_example4.cpp
+examples/ndbapi_example5/
+examples/ndbapi_example5/Makefile
+examples/ndbapi_example5/ndbapi_example5.cpp
+examples/select_all/
+examples/select_all/Makefile
+examples/select_all/select_all.cpp
+__END__
+
+exit 0
diff --git a/ndb/Defs.mk b/ndb/Defs.mk
new file mode 100644
index 00000000000..d5a21c64ca9
--- /dev/null
+++ b/ndb/Defs.mk
@@ -0,0 +1,84 @@
+include $(NDB_TOP)/config/config.mk
+include $(NDB_TOP)/config/Defs.$(NDB_VERSION).mk
+include $(NDB_TOP)/config/Defs.$(NDB_OS).$(NDB_ARCH).$(NDB_COMPILER).mk
+
+ifeq ($(NDB_OS), WIN32)
+# Windows specific definitions
+OBJEXT := obj
+LIBEXT := lib
+LIBPREFIX :=
+fixpath = `cygpath -w $1`
+ar_rcs = lib -out:`cygpath -w $1` $2
+link_so = link -DLL -OUT:`cygpath -w $1` $(WIN_LIBS) $2
+#check-odbc = Y
+USE_EDITLINE := N
+#STRCASECMP is defined in include/portlib/PortDefs.h to _strcmpi
+else
+#Common definitions for almost all non-Windows environments
+OBJEXT := o
+LIBEXT := a
+LIBPREFIX := lib
+fixpath = $1
+ar_rcs = $(AR_RCS) $1 $2
+#check-odbc = $(findstring sqlext.h, $(wildcard /usr/include/sqlext.h) $(wildcard /usr/local/include/sqlext.h))
+CCFLAGS_TOP += -DHAVE_STRCASECMP
+
+endif
+
+ifeq ($(NDB_OS), WIN32)
+CCFLAGS_TOP += -DHAVE_STRDUP
+NDB_STRLCPY := Y
+NDB_STRLCAT := Y
+SHLIBEXT := dll
+endif
+
+ifeq ($(NDB_OS), LINUX)
+CCFLAGS_TOP += -DHAVE_STRDUP
+NDB_STRLCAT := Y
+NDB_STRLCPY := Y
+SHLIBEXT := so
+endif
+
+ifeq ($(NDB_OS), SOLARIS)
+CCFLAGS_TOP += -DHAVE_STRDUP
+NDB_STRLCAT := Y
+NDB_STRLCPY := Y
+SHLIBEXT := so
+endif
+
+ifeq ($(NDB_OS), HPUX)
+CCFLAGS_TOP += -DHAVE_STRDUP
+NDB_STRLCAT := Y
+NDB_STRLCPY := Y
+SHLIBEXT := sl
+endif
+
+ifeq ($(NDB_OS), MACOSX)
+CCFLAGS_TOP += -DHAVE_STRLCAT
+CCFLAGS_TOP += -DHAVE_STRLCAT
+CCFLAGS_TOP += -DHAVE_STRLCPY
+CCFLAGS_TOP += -DNDBOUT_UINTPTR
+SHLIBEXT := dylib
+endif
+
+ifeq ($(NDB_OS), OSE)
+NDB_STRDUP := Y
+NDB_STRLCAT := Y
+NDB_STRLCPY := Y
+SHLIBEXT := so
+endif
+
+ifeq ($(NDB_OS), SOFTOSE)
+NDB_STRDUP := Y
+NDB_STRLCAT := Y
+NDB_STRLCPY := Y
+SHLIBEXT := so
+endif
+
+ifeq ($(NDB_SCI), Y)
+CCFLAGS_TOP += -DHAVE_SCI
+endif
+
+ifneq ($(findstring OSE, $(NDB_OS)),)
+USE_EDITLINE := N
+endif
diff --git a/ndb/Epilogue.mk b/ndb/Epilogue.mk
new file mode 100644
index 00000000000..89cd4034208
--- /dev/null
+++ b/ndb/Epilogue.mk
@@ -0,0 +1,853 @@
+# .KEEP_STATE:
+# bk test !!!
+
+###
+# For building some intermediary targets in /tmp (only useful on solaris)
+ifneq ($(NDB_BUILDROOT),)
+NDB_TOPABS := $(shell cd $(NDB_TOP) && /bin/pwd)
+NDB_BUILDDIR := $(subst $(NDB_TOPABS),$(NDB_BUILDROOT),$(CURDIR))/
+ifeq ($(wildcard $(NDB_BUILDDIR)),)
+dummy := $(shell mkdir -p $(NDB_BUILDDIR))
+endif
+endif
+
+###
+CCFLAGS_TOP += -DNDB_$(NDB_OS) -DNDB_$(NDB_ARCH) -DNDB_$(NDB_COMPILER)
+
+ifdef BIN_TARGET
+BIN_EXE = Y
+endif
+
+###
+#
+# OS specifics
+#
+
+# Disable shared libraries on HP-UX for the time being.
+ifeq ($(NDB_OS), HPUX)
+ SO_LIB := N
+ PIC_LIB := N
+ PIC_ARCHIVE := N
+ NONPIC_ARCHIVE := Y
+endif
+
+ifeq ($(NDB_OS), OSE)
+ SO_LIB := N
+ PIC_LIB := N
+ PIC_ARCHIVE := N
+ NONPIC_ARCHIVE := Y
+
+ifdef BIN_TARGET
+ BIN_LIB_TARGET := lib$(BIN_TARGET).a
+ BIN_TARGET := lib$(BIN_TARGET).a
+endif
+endif
+
+ifeq ($(NDB_OS), SOFTOSE)
+ SO_LIB := N
+ PIC_LIB := N
+ PIC_ARCHIVE := N
+
+ifdef BIN_TARGET
+ BIN_EXE_TARGET := $(BIN_TARGET)
+ BIN_LIB_TARGET := lib$(BIN_TARGET).a
+ EXTRA_MAIN := osemain.o
+endif
+endif
+
+ifeq ($(filter OSE, $(NDB_OS)),)
+ BIN_EXE_TARGET := $(BIN_TARGET)
+endif
+
+
+ifeq ($(NDB_OS), MACOSX)
+.LIBPATTERNS= lib%.dylib lib%.a
+endif
+
+###
+#
+#
+
+###
+# External dependencies definition : the place we store libraries
+# we get from outside the NDB development group.
+EXTERNAL_DEPENDS_TOP=$(NDB_TOP)/src/external/$(NDB_OS).$(NDB_ARCH)
+
+
+###
+#
+# TYPE Handling
+
+#
+# TYPE := kernel
+#
+ifneq ($(filter kernel, $(TYPE)),)
+CCFLAGS_LOC += \
+ -I$(call fixpath,$(NDB_TOP)/src/kernel/vm) \
+ -I$(call fixpath,$(NDB_TOP)/src/kernel/error) \
+ -I$(call fixpath,$(NDB_TOP)/src/kernel) \
+ -I$(call fixpath,$(NDB_TOP)/include/kernel) \
+ -I$(call fixpath,$(NDB_TOP)/include/transporter) \
+ -I$(call fixpath,$(NDB_TOP)/include/debugger) \
+ -I$(call fixpath,$(NDB_TOP)/include/mgmcommon) \
+ -I$(call fixpath,$(NDB_TOP)/include/ndbapi) \
+ -I$(call fixpath,$(NDB_TOP)/include/util) \
+ -I$(call fixpath,$(NDB_TOP)/include/portlib) \
+ -I$(call fixpath,$(NDB_TOP)/include/logger)
+endif
+
+#
+# TYPE := ndbapi
+#
+ifneq ($(filter ndbapi, $(TYPE)),)
+CCFLAGS_LOC += \
+ -I$(call fixpath,$(NDB_TOP)/include/kernel) \
+ -I$(call fixpath,$(NDB_TOP)/include/transporter) \
+ -I$(call fixpath,$(NDB_TOP)/include/debugger) \
+ -I$(call fixpath,$(NDB_TOP)/include/mgmcommon) \
+ -I$(call fixpath,$(NDB_TOP)/include/ndbapi) \
+ -I$(call fixpath,$(NDB_TOP)/include/util) \
+ -I$(call fixpath,$(NDB_TOP)/include/portlib) \
+ -I$(call fixpath,$(NDB_TOP)/include/logger)
+endif
+
+#
+# TYPE := ndbapiclient
+#
+ifneq ($(filter ndbapiclient, $(TYPE)),)
+CCFLAGS_LOC += \
+ -I$(call fixpath,$(NDB_TOP)/include/ndbapi)
+
+BIN_TARGET_LIBS += NDB_API
+endif
+
+#
+# TYPE := mgmapiclient
+#
+ifneq ($(filter mgmapiclient, $(TYPE)),)
+CCFLAGS_LOC += \
+ -I$(call fixpath,$(NDB_TOP)/include/mgmapi)
+
+BIN_TARGET_LIBS += MGM_API
+endif
+
+#
+# TYPE := ndbapitest
+#
+ifneq ($(filter ndbapitest, $(TYPE)),)
+CCFLAGS_LOC += \
+ -I$(call fixpath,$(NDB_TOP)/include/ndbapi) \
+ -I$(call fixpath,$(NDB_TOP)/include/util) \
+ -I$(call fixpath,$(NDB_TOP)/include/portlib) \
+ -I$(call fixpath,$(NDB_TOP)/test/include) \
+ -I$(call fixpath,$(NDB_TOP)/include/mgmapi)
+
+BIN_TARGET_LIBS += NDBT
+LDFLAGS_LOC += -lNDB_API -lMGM_API -lm
+
+endif
+
+#
+# TYPE := signalsender
+#
+ifneq ($(filter signalsender, $(TYPE)),)
+CCFLAGS_LOC += \
+ -I$(call fixpath,$(NDB_TOP)/include/ndbapi) \
+ -I$(call fixpath,$(NDB_TOP)/src/ndbapi) \
+ -I$(call fixpath,$(NDB_TOP)/src/ndbapi/signal-sender) \
+ -I$(call fixpath,$(NDB_TOP)/include/util) \
+ -I$(call fixpath,$(NDB_TOP)/include/portlib) \
+ -I$(call fixpath,$(NDB_TOP)/include/transporter) \
+ -I$(call fixpath,$(NDB_TOP)/include/mgmcommon) \
+ -I$(call fixpath,$(NDB_TOP)/include/kernel)
+
+BIN_TARGET_LIBS += NDB_API
+BIN_TARGET_ARCHIVES += editline signal-sender
+
+endif
+
+
+#
+# TYPE := repserver
+#
+ifneq ($(filter repserver, $(TYPE)),)
+CCFLAGS_LOC += \
+ -I$(call fixpath,$(NDB_TOP)/include/ndbapi) \
+ -I$(call fixpath,$(NDB_TOP)/src) \
+ -I$(call fixpath,$(NDB_TOP)/src/ndbapi) \
+ -I$(call fixpath,$(NDB_TOP)/src/ndbapi/signal-sender) \
+ -I$(call fixpath,$(NDB_TOP)/include/util) \
+ -I$(call fixpath,$(NDB_TOP)/include/portlib) \
+ -I$(call fixpath,$(NDB_TOP)/include/transporter) \
+ -I$(call fixpath,$(NDB_TOP)/include/mgmcommon) \
+ -I$(call fixpath,$(NDB_TOP)/include/kernel)
+endif
+
+#
+# TYPE := odbcclient
+#
+
+ifneq ($(filter odbcclient, $(TYPE)),)
+TYPE += util
+LDFLAGS_LOC += -lm
+#ifneq ($(call check-odbc),)
+ifneq ($(NDB_ODBC),N)
+ifeq ($(NDB_OS), SOLARIS)
+CCFLAGS_LOC += -I/usr/local/include
+BIN_TARGET_LIBS_DIRS += /usr/local/lib
+BIN_TARGET_LIBS += odbc odbcinst NDBT
+endif
+ifeq ($(NDB_OS), LINUX)
+BIN_TARGET_LIBS += odbc odbcinst NDBT
+endif
+ifeq ($(NDB_OS), MACOSX)
+BIN_TARGET_LIBS += odbc odbcinst NDBT
+endif
+ifeq ($(NDB_OS), IBMAIX)
+BIN_TARGET_LIBS += odbc odbcinst NDBT
+endif
+ifeq ($(NDB_OS), TRU64X)
+BIN_TARGET_LIBS += odbc odbcinst NDBT
+endif
+else
+BIN_EXE = N
+endif
+endif
+
+#
+# TYPE := *
+#
+#
+# TYPE := util
+#
+ifneq ($(filter util, $(TYPE)),)
+CCFLAGS_LOC += -I$(call fixpath,$(NDB_TOP)/include/util) \
+ -I$(call fixpath,$(NDB_TOP)/include/portlib) \
+ -I$(call fixpath,$(NDB_TOP)/include/logger)
+BIN_TARGET_LIBS += logger general portlib
+endif
+
+CCFLAGS_LOC += -I$(call fixpath,$(NDB_TOP)/include)
+
+ifeq ($(NDB_SCI), Y)
+BIN_TARGET_LIBS += sisci
+BIN_TARGET_LIBS_DIRS += $(EXTERNAL_DEPENDS_TOP)/sci/lib
+
+CCFLAGS_LOC += -I$(call fixpath,$(EXTERNAL_DEPENDS_TOP)/sci/include)
+endif
+
+#
+# TYPE Handling
+###
+
+###
+#
+# First rule
+#
+first:
+ $(MAKE) libs
+ $(MAKE) bins
+
+ifeq ($(findstring all,$(replace-targets)),)
+all: first
+endif
+
+###
+#
+# Nice to have rules
+api: libs
+ $(MAKE) -C $(NDB_TOP)/src/ndbapi bins
+
+mgm: libs
+ $(MAKE) -C $(NDB_TOP)/src/mgmsrv bins
+
+ndb: libs
+ $(MAKE) -C $(NDB_TOP)/src/kernel/ndb-main bins
+
+apitest: first
+ $(MAKE) -C $(NDB_TOP)/test/ndbapi all
+
+#-lNDBT:
+# $(MAKE) -C $(NDB_TOP)/test/src all
+#
+#-lNDB_API: libs
+# $(MAKE) -C $(NDB_TOP)/src/ndbapi bins
+
+#
+# Libs/Bins
+#
+ifdef PREREQ_LOC
+_libs:: $(PREREQ_LOC)
+_bins:: $(PREREQ_LOC)
+endif
+
+L_DIRS := $(LIB_DIRS) $(DIRS)
+B_DIRS := $(BIN_DIRS) $(DIRS)
+A_DIRS := $(LIB_DIRS) $(BIN_DIRS) $(DIRS)
+
+_libs::
+
+_bins::
+
+libs: _libs $(patsubst %, _libs_%, $(L_DIRS))
+$(patsubst %, _libs_%, $(L_DIRS)) : DUMMY
+ $(MAKE) -C $(patsubst _libs_%,%,$@) libs
+
+bins: _bins $(patsubst %, _bins_%, $(B_DIRS))
+$(patsubst %, _bins_%, $(B_DIRS)) : DUMMY
+ $(MAKE) -C $(patsubst _bins_%,%,$@) bins
+
+###
+#
+# Links
+_links:
+ -$(NDB_TOP)/tools/make-links.sh $(NDB_TOP)/include `pwd`
+
+links: _links $(patsubst %, _links_%, $(A_DIRS))
+$(patsubst %, _links_%, $(A_DIRS)) : DUMMY
+ $(MAKE) -C $(patsubst _links_%,%,$@) links
+
+
+####
+#
+# OSE build_spec (
+ifdef SOURCES
+BS := Y
+endif
+
+ifdef SOURCES_c
+BS := Y
+endif
+
+_build_spec: Makefile
+ifdef BS
+ @echo "TYPE = SWU" > build.spec
+ @echo "include $(NDB_TOP)/Ndb.mk" >> build.spec
+# @for i in $(CCFLAGS_LOC); do echo "INC += $$i" >> build.spec ; done
+ @for i in $(patsubst -I%, %, $(CCFLAGS_LOC)); do echo "INC += $$i" >> build.spec ; done
+ @echo "INC += /vobs/cello/cls/rtosi_if/include" >> build.spec
+ @echo "INC += /vobs/cello/cls/rtosi_if/include.@@@" >> build.spec
+ @echo "INC += /vobs/cello/cls/rtosi_if/include.<<<" >> build.spec
+endif
+
+build_spec: _build_spec $(patsubst %, _build_spec_%, $(A_DIRS))
+$(patsubst %, _build_spec_%, $(A_DIRS)) : DUMMY
+ $(MAKE) -C $(patsubst _build_spec_%,%,$@) build_spec
+
+###
+#
+# Phony targets
+
+.PHONY: $(A_DIRS)
+
+###
+#
+# Dummy rule
+
+DUMMY:
+
+###
+#
+# Definitions of...
+
+PIC_DIR := $(NDB_BUILDDIR).pic
+A_TMP_DIR := $(NDB_BUILDDIR).a_tmp
+SO_TMP_DIR := $(NDB_BUILDDIR).so_tmp
+PIC_TMP_DIR := $(NDB_BUILDDIR).pic_tmp
+
+$(PIC_DIR):
+ mkdir -p $(PIC_DIR)
+
+SRC_C := $(filter %.C, $(SOURCES))
+SRC_CPP := $(filter %.cpp, $(SOURCES))
+SRC_CC := $(filter %.cc, $(SOURCES))
+SRC_c := $(filter %.c, $(SOURCES)) $(filter %.c, $(SOURCES.c))
+SRC_YPP := $(filter %.ypp, $(SOURCES))
+SRC_LPP := $(filter %.lpp, $(SOURCES))
+
+OBJECTS := $(SRC_C:%.C=%.$(OBJEXT)) \
+ $(SRC_CPP:%.cpp=%.$(OBJEXT)) \
+ $(SRC_CC:%.cc=%.$(OBJEXT)) \
+ $(SRC_c:%.c=%.$(OBJEXT)) \
+ $(SRC_YPP:%.ypp=%.tab.$(OBJEXT)) \
+ $(SRC_LPP:%.lpp=%.yy.$(OBJEXT)) \
+ $(OBJECTS_LOC)
+
+PIC_OBJS := $(OBJECTS:%=$(PIC_DIR)/%)
+
+LIB_DIR := $(NDB_TOP)/lib
+BIN_DIR := $(NDB_TOP)/bin
+
+###
+#
+# ARCHIVE_TARGET
+#
+ifdef ARCHIVE_TARGET
+
+ifndef NONPIC_ARCHIVE
+NONPIC_ARCHIVE := Y
+endif
+
+ifeq ($(NONPIC_ARCHIVE), Y)
+_libs:: $(LIB_DIR)/$(LIBPREFIX)$(ARCHIVE_TARGET).$(LIBEXT)
+$(LIB_DIR)/$(LIBPREFIX)$(ARCHIVE_TARGET).$(LIBEXT) : $(OBJECTS)
+ $(call ar_rcs,$@,$(OBJECTS))
+
+endif # NONPIC_ARCHIVE := Y
+
+ifeq ($(PIC_ARCHIVE), Y)
+_libs:: $(PIC_DIR) $(LIB_DIR)/$(LIBPREFIX)$(ARCHIVE_TARGET)_pic.$(LIBEXT)
+$(LIB_DIR)/$(LIBPREFIX)$(ARCHIVE_TARGET)_pic.$(LIBEXT) : $(PIC_OBJS)
+ cd $(PIC_DIR) && $(call ar_rcs,../$@,$(OBJECTS))
+
+PIC_DEP := Y
+
+endif # PIC_ARCHIVE := Y
+
+endif # ARCHIVE_TARGET
+
+###
+#
+# LIB_TARGET
+#
+ifdef LIB_TARGET
+
+ifeq ($(A_LIB), Y)
+
+A_LIB_ARCHIVES := $(LIB_TARGET_ARCHIVES:%=$(LIB_DIR)/$(LIBPREFIX)%.$(LIBEXT))
+
+_bins:: $(LIB_DIR)/$(LIBPREFIX)$(LIB_TARGET).$(LIBEXT)
+$(LIB_DIR)/$(LIBPREFIX)$(LIB_TARGET).$(LIBEXT) : $(A_LIB_ARCHIVES)
+ @rm -rf $(A_TMP_DIR) && mkdir $(A_TMP_DIR)
+ cd $(A_TMP_DIR) && for i in $^; do ar -x ../$$i; done && $(call ar_rcs,../$@,*.$(OBJEXT))
+ $(NDB_TOP)/home/bin/ndb_deploy $@
+endif # A_LIB := Y
+
+ifeq ($(SO_LIB), Y)
+ifneq ($(NDB_OS), WIN32)
+SO_LIB_ARCHIVES := $(LIB_TARGET_ARCHIVES:%=$(LIB_DIR)/$(LIBPREFIX)%_pic.$(LIBEXT))
+
+_bins:: $(LIB_DIR)/$(LIBPREFIX)$(LIB_TARGET).$(SHLIBEXT)
+$(LIB_DIR)/$(LIBPREFIX)$(LIB_TARGET).$(SHLIBEXT) : $(SO_LIB_ARCHIVES)
+ @rm -rf $(SO_TMP_DIR) && mkdir $(SO_TMP_DIR)
+ cd $(SO_TMP_DIR) && for i in $^; do ar -x ../$$i; done
+ifneq ($(NDB_OS), MACOSX)
+ $(SO) $@.new $(SO_TMP_DIR)/*.$(OBJEXT) -L$(LIB_DIR) $(LIB_TARGET_LIBS) $(LDFLAGS_LAST)
+ rm -f $@; mv $@.new $@
+else
+ $(SO) $@ $(SO_TMP_DIR)/*.$(OBJEXT) -L$(LIB_DIR) $(LIB_TARGET_LIBS) $(LDFLAGS_LAST)
+endif
+ifeq ($(NDB_VERSION), RELEASE)
+ifneq ($(NDB_OS), MACOSX)
+ strip $@
+endif
+endif
+ $(NDB_TOP)/home/bin/ndb_deploy $@
+else # WIN32
+SO_LIB_ARCHIVES := $(LIB_TARGET_ARCHIVES:%=$(LIB_DIR)/$(LIBPREFIX)%_pic.$(LIBEXT))
+
+_bins:: $(LIB_DIR)/$(LIBPREFIX)$(LIB_TARGET).$(SHLIBEXT)
+$(LIB_DIR)/$(LIBPREFIX)$(LIB_TARGET).$(SHLIBEXT) : $(SO_LIB_ARCHIVES)
+ @rm -rf $(SO_TMP_DIR) && mkdir $(SO_TMP_DIR)
+ cd $(SO_TMP_DIR) && for i in $^; do ar -x ../$$i; done
+ $(call link_so,$@.new,$(SO_TMP_DIR)/*.$(OBJEXT))
+ rm -f $@; mv $@.new $@
+#ifeq ($(NDB_VERSION), RELEASE)
+# strip $@
+#endif
+
+endif
+endif # SO_LIB := Y
+
+ifeq ($(PIC_LIB), Y)
+
+PIC_LIB_ARCHIVES := $(LIB_TARGET_ARCHIVES:%=$(LIB_DIR)/$(LIBPREFIX)%_pic.$(LIBEXT))
+
+_bins:: $(LIB_DIR)/$(LIBPREFIX)$(LIB_TARGET)_pic.$(LIBEXT)
+$(LIB_DIR)/$(LIBPREFIX)$(LIB_TARGET)_pic.$(LIBEXT) : $(PIC_LIB_ARCHIVES)
+ @rm -rf $(PIC_TMP_DIR) && mkdir $(PIC_TMP_DIR)
+ cd $(PIC_TMP_DIR) && for i in $^; do ar -x ../$$i; done && $(call ar_rcs,../$@,*.$(OBJEXT))
+
+endif # PIC_LIB := Y
+
+endif # LIB_TARGET
+
+###
+#
+# BIN_TARGET
+#
+ifeq ($(BIN_EXE), Y)
+ifneq ($(NDB_OS), WIN32)
+BIN_LIBS := $(BIN_TARGET_ARCHIVES:%=$(LIB_DIR)/$(LIBPREFIX)%.$(LIBEXT))
+BIN_LIBS += $(BIN_TARGET_LIBS:%=-l%)
+
+BIN_DEPS := $(OBJECTS) $(EXTRA_MAIN) $(BIN_LIBS)
+BIN_LIB_DIRS := $(BIN_TARGET_LIBS_DIRS:%=-L%)
+
+BIN_FLAGS := $(BIN_LIB_DIRS) $(BIN_DEPS)
+
+VPATH := $(LIB_DIR) $(BIN_TARGET_LIBS_DIRS)
+_bins:: $(BIN_DIR)/$(BIN_TARGET)
+$(BIN_DIR)/$(BIN_TARGET) : $(BIN_DEPS)
+ $(LINK.cc) $(LDFLAGS) $(LDLIBS) -L$(LIB_DIR) $(BIN_FLAGS) -o $@.new $(LDFLAGS_LAST)
+ rm -f $@; mv $@.new $@
+ifeq ($(NDB_VERSION), RELEASE)
+ifneq ($(NDB_OS), MACOSX)
+ strip $@
+endif
+endif
+ $(NDB_TOP)/home/bin/ndb_deploy $@
+else # WIN32
+BIN_LIBS := $(foreach lib,$(BIN_TARGET_ARCHIVES),$(call fixpath,$(LIB_DIR)/$(LIBPREFIX)$(lib).$(LIBEXT)))
+BIN_LIBS += $(BIN_TARGET_LIBS:%=$(LIBPREFIX)%.$(LIBEXT))
+
+BIN_DEPS := $(OBJECTS) $(BIN_TARGET_ARCHIVES:%=$(LIB_DIR)/$(LIBPREFIX)%.$(LIBEXT))
+BIN_LIB_DIRS := -libpath:$(call fixpath,$(LIB_DIR)) $(BIN_TARGET_LIBS_DIRS:%=-libpath:%)
+
+BIN_FLAGS := $(BIN_LIB_DIRS)
+
+VPATH := $(LIB_DIR) $(BIN_TARGET_LIBS_DIRS)
+_bins:: $(BIN_DIR)/$(BIN_TARGET).exe
+$(BIN_DIR)/$(BIN_TARGET).exe : $(BIN_DEPS)
+ $(LINK.cc) -out:$(call fixpath,$@.new) $(OBJECTS) $(BIN_FLAGS) $(BIN_LIBS)
+ rm -f $@; mv $@.new $@
+ifeq ($(NDB_VERSION), RELEASE)
+ strip $@
+endif
+
+endif
+endif
+
+###
+#
+# SOURCES.sh
+#
+ifdef SOURCES.sh
+
+BIN_SRC := $(SOURCES.sh:%=$(BIN_DIR)/%)
+
+_bins:: $(BIN_SRC)
+
+$(BIN_SRC) : $(SOURCES.sh)
+ rm -f $(^:%=$(BIN_DIR)/%)
+ cp $^ $(BIN_DIR)
+endif
+
+#
+# Compile rules PIC objects
+#
+ifeq ($(NDB_OS), WIN32)
+OUT := -Fo
+else
+OUT := -o
+endif
+
+$(PIC_DIR)/%.$(OBJEXT): %.C
+ $(C++) $(OUT)$@ -c $(CCFLAGS) $(CFLAGS_$<) $(PIC) $<
+
+$(PIC_DIR)/%.$(OBJEXT): %.cpp
+ $(C++) $(OUT)$@ -c $(CCFLAGS) $(CFLAGS_$<) $(PIC) $<
+
+$(PIC_DIR)/%.$(OBJEXT): %.cc
+ $(C++) $(OUT)$@ -c $(CCFLAGS) $(CFLAGS_$<) $(PIC) $<
+
+$(PIC_DIR)/%.$(OBJEXT): %.c
+ $(CC) $(OUT)$@ -c $(CFLAGS) $(CFLAGS_$<) $(PIC) $<
+
+#
+# Compile rules
+#
+%.$(OBJEXT) : %.cpp
+ $(C++) $(OUT)$@ -c $(CCFLAGS) $(CFLAGS_$<) $(NON_PIC) $<
+
+%.$(OBJEXT) : %.C
+ $(C++) $(OUT)$@ -c $(CCFLAGS) $(CFLAGS_$<) $(NON_PIC) $<
+
+%.$(OBJEXT) : %.cc
+ $(C++) $(OUT)$@ -c $(CCFLAGS) $(CFLAGS_$<) $(NON_PIC) $<
+
+%.$(OBJEXT) : %.c
+ $(CC) $(OUT)$@ -c $(CFLAGS) $(CFLAGS_$<) $(NON_PIC) $<
+
+%.s : %.C
+ $(C++) -S $(CCFLAGS) $(CFLAGS_$<) $(NON_PIC) $<
+
+%.s : %.cpp
+ $(C++) -S $(CCFLAGS) $(CFLAGS_$<) $(NON_PIC) $<
+
+%.s : %.cc
+ $(C++) -S $(CCFLAGS) $(CFLAGS_$<) $(NON_PIC) $<
+
+%.s : %.c
+ $(CC) -S $(CCFLAGS) $(CFLAGS_$<) $(NON_PIC) $<
+
+BISON = bison
+BISONHACK = :
+%.tab.cpp %.tab.hpp : %.ypp
+ $(BISON) $<
+ $(BISONHACK) $*.tab.cpp $*.tab.hpp
+
+FLEX = flex
+FLEXHACK = :
+%.yy.cpp : %.lpp
+ $(FLEX) -o$@ $<
+ $(FLEXHACK) $@
+
+###
+#
+# Defines regarding dependencies
+
+DEPMK := $(NDB_BUILDDIR).depend.mk
+
+DEPDIR := $(NDB_BUILDDIR).depend
+
+DEPENDENCIES := $(SRC_C:%.C=$(DEPDIR)/%.d) \
+ $(SRC_CC:%.cc=$(DEPDIR)/%.d) \
+ $(SRC_CPP:%.cpp=$(DEPDIR)/%.d) \
+ $(SRC_c:%.c=$(DEPDIR)/%.d) \
+ $(SRC_YPP:%.ypp=$(DEPDIR)/%.tab.d) \
+ $(SRC_LPP:%.lpp=$(DEPDIR)/%.yy.d)
+
+###
+#
+# Dependency rule
+
+_depend: $(DEPMK)
+
+depend: _depend $(patsubst %, _depend_%, $(A_DIRS))
+
+$(patsubst %, _depend_%, $(A_DIRS)) : DUMMY
+ $(MAKE) -C $(patsubst _depend_%,%,$@) depend
+
+###
+#
+# Clean dependencies
+
+_clean_dep:
+ -rm -rf $(DEPMK) $(DEPDIR)/*
+
+clean_dep: _clean_dep $(patsubst %, _clean_dep_%, $(A_DIRS))
+
+$(patsubst %, _clean_dep_%, $(A_DIRS)) : DUMMY
+ $(MAKE) -C $(patsubst _clean_dep_%,%,$@) clean_dep
+
+###
+#
+# Generate dependencies
+
+$(DEPDIR):
+ -@mkdir -p $(DEPDIR)
+
+$(DEPDIR)/%.d: %.C
+ @echo Generating depend for $<
+ @$(MAKEDEPEND) $(CCFLAGS) $(CFLAGS_$<) $< >$@
+
+$(DEPDIR)/%.d: %.c
+ @echo Generating depend for $<
+ @$(MAKEDEPEND) $(CCFLAGS) $(CFLAGS_$<) $< >$@
+
+$(DEPDIR)/%.d: %.cpp
+ @echo Generating depend for $<
+ @$(MAKEDEPEND) $(CCFLAGS) $(CFLAGS_$<) $< >$@
+
+$(DEPDIR)/%.d: %.cc
+ @echo Generating depend for $<
+ @$(MAKEDEPEND) $(CCFLAGS) $(CFLAGS_$<) $< >$@
+
+ifeq ($(NDB_OS), WIN32)
+ifndef PIC_DEP
+DEP_PTN := -e 's/\(.*\)\.o[ :]*/\1.$(OBJEXT) $(DEPDIR)\/\1.d : /g'
+else
+DEP_PTN := -e 's/\(.*\)\.o[ :]*/\1.$(OBJEXT) $(PIC_DIR)\/\1.$(OBJEXT) $(DEPDIR)\/\1.d : /g'
+endif
+else
+ifndef PIC_DEP
+DEP_PTN := -e 's!\(.*\)\.$(OBJEXT)[ :]*!\1.$(OBJEXT) $(DEPDIR)\/\1.d : !g'
+else
+DEP_PTN := -e 's!\(.*\)\.$(OBJEXT)[ :]*!\1.$(OBJEXT) $(PIC_DIR)\/\1.$(OBJEXT) $(DEPDIR)\/\1.d : !g'
+endif
+endif
+#DEP_PTN += -e 's!/usr/include/[-+a-zA-Z0-9_/.]*!!g'
+#DEP_PTN += -e 's!/usr/local/lib/gcc-lib/[-+a-zA-Z0-9_/.]*!!g'
+
+$(DEPMK): $(DEPDIR) $(SRC_YPP:%.ypp=%.tab.hpp) $(SRC_LPP:%.lpp=%.yy.cpp) $(DEPENDENCIES) $(wildcard $(NDB_TOP)/.update.d)
+ @echo "updating .depend.mk"
+ @sed $(DEP_PTN) /dev/null $(DEPENDENCIES) >$(DEPMK)
+
+###
+#
+# clean
+#
+_clean:
+ -rm -rf SunWS_cache $(PIC_DIR)/SunWS_cache
+ifeq ($(NONPIC_ARCHIVE), Y)
+ -rm -f $(OBJECTS) $(LIB_DIR)/$(LIBPREFIX)$(ARCHIVE_TARGET).$(LIBEXT)
+endif
+ifeq ($(PIC_ARCHIVE), Y)
+ -rm -f $(PIC_OBJS) $(LIB_DIR)/$(LIBPREFIX)$(ARCHIVE_TARGET)_pic.$(LIBEXT)
+endif
+ifdef BIN_TARGET
+ -rm -f $(OBJECTS)
+endif
+ifdef LIB_TARGET
+ifeq ($(A_LIB), Y)
+ -rm -f $(A_TMP_DIR)/*
+endif
+ifeq ($(SO_LIB), Y)
+ -rm -f $(SO_TMP_DIR)/*
+endif
+ifeq ($(PIC_LIB), Y)
+ -rm -f $(PIC_TMP_DIR)/*
+endif
+endif
+ifneq ($(SRC_YPP),)
+ -rm -f $(SRC_YPP:%.ypp=%.tab.[hc]pp) $(SRC_YPP:%.ypp=%.output)
+endif
+ifneq ($(SRC_LPP),)
+ -rm -f $(SRC_LPP:%.lpp=%.yy.*)
+endif
+ifdef CLEAN_LOC
+ -rm -f $(CLEAN_LOC)
+endif
+
+###
+#
+# clean all
+#
+clobber: cleanall
+_cleanall: _clean clean_links
+ -rm -f osemain.con osemain.c
+ifdef LIB_TARGET
+ifeq ($(A_LIB), Y)
+ -rm -f $(LIB_DIR)/$(LIBPREFIX)$(LIB_TARGET).$(LIBEXT)
+endif
+ifeq ($(SO_LIB), Y)
+ -rm -f $(LIB_DIR)/$(LIBPREFIX)$(LIB_TARGET).$(SHLIBEXT)
+endif
+ifeq ($(PIC_LIB), Y)
+ -rm -f $(LIB_DIR)/$(LIBPREFIX)$(LIB_TARGET)_pic.$(LIBEXT)
+endif
+endif
+ifdef BIN_TARGET
+ -rm -f $(BIN_DIR)/$(BIN_TARGET)
+endif
+
+clean_links:
+
+###
+#
+# Dist clean
+#
+_distclean: _tidy
+ rm -rf $(DEPDIR) $(PIC_DIR) $(PIC_TMP_DIR) $(SO_TMP_DIR) $(A_TMP_DIR) Sources build.spec
+
+###
+#
+# tidy
+#
+_tidy: _cleanall _clean_dep
+ -rm -f *~ *.$(OBJEXT) *.$(LIBEXT) *.${SHLIBEXT}
+
+#
+# clean cleanall tidy - recursion
+#
+ifeq ($(findstring clean,$(replace-targets)),)
+clean: _clean $(patsubst %, _clean_%, $(A_DIRS))
+endif
+
+$(patsubst %, _clean_%, $(A_DIRS)) : DUMMY
+ $(MAKE) -C $(patsubst _clean_%,%,$@) clean
+
+cleanall: _cleanall $(patsubst %, _cleanall_%, $(A_DIRS))
+
+$(patsubst %, _cleanall_%, $(A_DIRS)) : DUMMY
+ $(MAKE) -C $(patsubst _cleanall_%,%,$@) cleanall
+
+tidy: _tidy $(patsubst %, _tidy_%, $(A_DIRS))
+
+$(patsubst %, _tidy_%, $(A_DIRS)) : DUMMY
+ $(MAKE) -C $(patsubst _tidy_%,%,$@) tidy
+
+distclean: _distclean $(patsubst %, _distclean_%, $(A_DIRS))
+
+$(patsubst %, _distclean_%, $(A_DIRS)) : DUMMY
+ $(MAKE) -C $(patsubst _distclean_%,%,$@) distclean
+
+###
+#
+# Guess configuration
+
+$(NDB_TOP)/config/config.mk: $(NDB_TOP)/config/GuessConfig.sh
+ $(NDB_TOP)/config/GuessConfig.sh -D
+
+$(NDB_TOP)/config/Defs....mk: $(NDB_TOP)/config/config.mk
+$(NDB_TOP)/config/Defs..mk: $(NDB_TOP)/config/config.mk
+
+###
+# Soft ose envirment stuff
+#
+osemain.con: $(NDB_TOP)/src/env/softose/osemain_con.org
+ cp $< $@
+ echo "PRI_PROC(init_$(BIN_TARGET), init_$(BIN_TARGET), 65535, 3, ndb, 0, NULL)" >> $@
+
+osemain.c: $(OSE_LOC)/sfk-solaris2/krn-solaris2/src/osemain.c
+ ln -s $< $@
+
+osemain.o : osemain.con
+
+$(DEPDIR)/osemain.d : osemain.con
+
+###
+#
+# These target dont want dependencies
+
+NO_DEP=clean clobber cleanall tidy clean_dep $(DEPDIR) build_spec \
+ $(NDB_TOP)/config/config.mk distclean osemain.con osemain.c
+
+ifeq ($(filter $(NO_DEP), $(MAKECMDGOALS)),)
+ifneq ($(strip $(DEPENDENCIES)),)
+ include $(DEPMK)
+endif
+endif
+
+###
+#
+# Auxiliary targets
+
+sources: Sources
+
+Sources: Makefile
+ @rm -f $@
+ @for f in Makefile $(A_DIRS) $(SOURCES) $(SOURCES.c); do echo $$f; done >$@
+
+###
+#
+# TAG generation for emacs and vi folks
+#
+# In emacs "Esc- ." or "M- ." to find a symbol location
+# In vi use the :\tag command
+# by convention:
+# TAGS is used with emacs
+# tags is used with vi
+#
+# Hopefully the make is being done from $(NDB_TOP)/src
+# and your TAGS/tags file then is in the same directory.
+
+TAGS: DUMMY
+ rm -f TAGS
+ find $(NDB_TOP) -name "*.[ch]" | xargs $(ETAGS) --append
+ find $(NDB_TOP) -name "*.[ch]pp" | xargs $(ETAGS) --append
+
+tags: DUMMY
+ rm -f tags
+ find $(NDB_TOP) -name "*.[ch]" | xargs $(CTAGS) --append
+ find $(NDB_TOP) -name "*.[ch]pp" | xargs $(CTAGS) --append
+
+install:
+
+
+ebrowse: DUMMY
+ cd $(NDB_TOP); rm -f EBROWSE
+ cd $(NDB_TOP); find . -name "*.hpp" -or -name "*.cpp" -or -name "*.h" -or -name "*.c" > tmpfile~
+ cd $(NDB_TOP); ebrowse --file tmpfile~
+ cd $(NDB_TOP); rm -f tmpfile~
diff --git a/ndb/Makefile b/ndb/Makefile
new file mode 100644
index 00000000000..586a430bb17
--- /dev/null
+++ b/ndb/Makefile
@@ -0,0 +1,62 @@
+include .defs.mk
+
+DIRS := src test tools examples
+
+# hack before full autoconf
+replace-targets := all clean
+NDB_RELEASE := $(shell ../scripts/mysql_config --version)
+
+include $(NDB_TOP)/Epilogue.mk
+
+_libs_test : _bins_src
+_libs_tools : _libs_test
+_libs_examples : _bins_src
+_bins_src : _libs_src
+_bins_tools : _bins_src
+
+# always release compile except for ndbapi static lib
+all:
+ $(MAKE) -C src/ndbapi libs
+ $(MAKE) libs NDB_VERSION=RELEASE
+ $(MAKE) bins NDB_VERSION=RELEASE
+ifeq ($(NDB_OS),LINUX)
+ NDB_RELEASE=$(NDB_RELEASE) $(MAKE) -j1 -C docs all cd /home/bk/mysql-4.1-ndb
+shell> BUILD/compile-pentium-debug -c --prefix=/usr/local/mysql-4.1-ndb
+shell> make
+
diff --git a/ndb/bin/.empty b/ndb/bin/.empty
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/ndb/bin/check-regression.sh b/ndb/bin/check-regression.sh
new file mode 100755
index 00000000000..93a31ccb39c
--- /dev/null
+++ b/ndb/bin/check-regression.sh
@@ -0,0 +1,180 @@
+#!/bin/sh
+# NAME
+# check-regression.sh
+#
+# SYNOPSIS
+# check-regression.sh
+#
+# DESCRIPTION
+#
+# This scrip must be run before any major cvs checkins are done.
+# It will perform a number of regression tests to check that
+# nothing is broken.
+#
+# OPTIONS
+#
+# EXAMPLES
+#
+#
+# ENVIRONMENT
+# NDB_PROJ_HOME Home dir for ndb
+# verbose verbose printouts
+#
+# FILES
+# $NDB_PROJ_HOME/lib/funcs.sh general shell script functions
+#
+#
+# SEE ALSO
+#
+# DIAGNOSTICTS
+#
+#
+# VERSION
+# 1.0
+#
+# AUTHOR
+#
+#
+
+. $NDB_PROJ_HOME/lib/funcs.sh # Load some good stuff
+
+synopsis="check-regression.sh"
+progname=`basename $0`
+
+numOfTestsOK=0
+numOfTestsFailed=0
+
+LOG=check-regression.`date '+%Y-%m-%d'`
+
+executeTest()
+{
+ eval "$@" | tee -a $LOG
+
+ if [ $? -eq 0 ]
+ then
+ echo "SUCCESS: $@"
+ numOfTestsOK=`expr $numOfTestsOK + 1`
+ else
+ echo "FAILED: $@"
+ numOfTestsFailed=`expr $numOfTestsFailed + 1`
+ fi
+}
+
+#
+# INFO
+#
+trace "Starting: `date`"
+trace "NDB_PROJ_HOME = $NDB_PROJ_HOME"
+trace "NDB_TOP = $NDB_TOP"
+
+#
+# THE TESTS TO EXECUTE
+#
+
+# Testsuite: testDataBuffers
+# Number of tests: 1
+executeTest 'drop_tab ' TB00 TB01 TB02 TB03 TB04 TB05 TB06 TB07 TB08 TB09 TB10 TB11 TB12 TB13 TB14 TB15
+executeTest 'testDataBuffers'
+executeTest 'drop_tab ' TB00 TB01 TB02 TB03 TB04 TB05 TB06 TB07 TB08 TB09 TB10 TB11 TB12 TB13 TB14 TB15
+
+TABLES="T9 T13"
+
+# Testsuite: testBasic
+# Number of tests: 16
+executeTest 'testBasic -n PkInsert' $TABLES
+executeTest 'testBasic -n PkRead' $TABLES
+executeTest 'testBasic -n PkUpdate' $TABLES
+executeTest 'testBasic -n PkDelete' $TABLES
+#executeTest 'testBasic -n UpdateAndRead'
+#executeTest 'testBasic -n PkReadAndLocker'
+#executeTest 'testBasic -n PkReadAndLocker2'
+#executeTest 'testBasic -n PkReadUpdateAndLocker'
+#executeTest 'testBasic -n ReadWithLocksAndInserts'
+#executeTest 'testBasic -n ReadConsistency'
+#executeTest 'testBasic -n PkInsertTwice'
+#executeTest 'testBasic -n Fill'
+#executeTest 'testBasic -n FillTwice'
+#executeTest 'testBasic -n NoCommitSleep'
+#executeTest 'testBasic -n NoCommit626'
+#executeTest 'testBasic -n NoCommitAndClose'
+
+# Testsuite: testBasicAsynch
+# Number of tests: 4
+executeTest 'testBasicAsynch -n PkInsertAsynch' $TABLES
+executeTest 'testBasicAsynch -n PkReadAsynch' $TABLES
+executeTest 'testBasicAsynch -n PkUpdateAsynch' $TABLES
+executeTest 'testBasicAsynch -n PkDeleteAsynch' $TABLES
+
+# Testsuite: testDict
+# Number of tests: 6
+#executeTest 'testDict -n CreateAndDrop'
+#executeTest 'testDict -n CreateAndDropWithData'
+#executeTest 'testDict -n CreateAndDropDuring'
+#executeTest 'testDict -n CreateInvalidTables'
+#executeTest 'testDict -n CreateTableWhenDbIsFull'
+#executeTest 'testDict -n CreateMaxTables'
+
+# Testsuite: testScan
+# Number of tests: 34
+#executeTest 'testScan -n ScanRead'
+#executeTest 'testScan -n ScanRead16'
+executeTest 'testScan -n ScanRead240' $TABLES
+executeTest 'testScan -n ScanUpdate' $TABLES
+executeTest 'testScan -n ScanUpdate2' $TABLES
+executeTest 'testScan -n ScanDelete' $TABLES
+executeTest 'testScan -n ScanDelete2' $TABLES
+#executeTest 'testScan -n ScanUpdateAndScanRead'
+#executeTest 'testScan -n ScanReadAndLocker'
+#executeTest 'testScan -n ScanReadAndPkRead'
+#executeTest 'testScan -n ScanRead488'
+#executeTest 'testScan -n ScanWithLocksAndInserts'
+#executeTest 'testScan -n ScanReadAbort'
+#executeTest 'testScan -n ScanReadAbort15'
+#executeTest 'testScan -n ScanReadAbort16'
+#executeTest 'testScan -n ScanUpdateAbort16'
+#executeTest 'testScan -n ScanReadAbort240'
+#executeTest 'testScan -n ScanReadRestart'
+#executeTest 'testScan -n ScanReadRestart16'
+#executeTest 'testScan -n ScanReadRestart32'
+#executeTest 'testScan -n ScanUpdateRestart'
+#executeTest 'testScan -n ScanUpdateRestart16'
+#executeTest 'testScan -n CheckGetValue'
+#executeTest 'testScan -n CloseWithoutStop'
+#executeTest 'testScan -n NextScanWhenNoMore'
+#executeTest 'testScan -n ExecuteScanWithoutOpenScan'
+#executeTest 'testScan -n OnlyOpenScanOnce'
+#executeTest 'testScan -n OnlyOneOpInScanTrans'
+#executeTest 'testScan -n OnlyOneOpBeforeOpenScan'
+#executeTest 'testScan -n OnlyOneScanPerTrans'
+#executeTest 'testScan -n NoCloseTransaction'
+#executeTest 'testScan -n CheckInactivityTimeOut'
+#executeTest 'testScan -n CheckInactivityBeforeClose'
+#executeTest 'testScan -n CheckAfterTerror'
+
+# Testsuite: testScanInterpreter
+# Number of tests: 1
+#executeTest 'testScanInterpreter -n ScanLessThan'
+
+TABLES="T6 T13"
+
+# Testsuite: testSystemRestart
+# Number of tests: 4
+executeTest 'testSystemRestart -l 1 -n SR1' $TABLES
+executeTest 'testSystemRestart -l 1 -n SR2' $TABLES
+#executeTest 'testSystemRestart -n SR_UNDO'
+#executeTest 'testSystemRestart -n SR_FULLDB'
+
+# TESTS FINISHED
+trace "Finished: `date`"
+
+#
+# TEST SUMMARY
+#
+if [ $numOfTestsFailed -eq 0 ]
+then
+ echo "-- REGRESSION TEST SUCCESSFUL --"
+else
+ echo "-- REGRESSION TEST FAILED!! --"
+fi
+echo "Number of successful tests: $numOfTestsOK"
+echo "Number of failed tests : $numOfTestsFailed"
diff --git a/ndb/bin/makeTestPrograms_html.sh b/ndb/bin/makeTestPrograms_html.sh
new file mode 100755
index 00000000000..ac31c8a6267
--- /dev/null
+++ b/ndb/bin/makeTestPrograms_html.sh
@@ -0,0 +1,22 @@
+#!/bin/sh
+rm $1
+touch $1
+echo "
" >> $1
+echo "" >> $1
+echo "Name | | Description | " >> $1
+echo "
" >> $1
+testBasic --print_html >> $1
+testBackup --print_html >> $1
+testBasicAsynch --print_html >> $1
+testDict --print_html >> $1
+testBank --print_html >> $1
+testIndex --print_html >> $1
+testNdbApi --print_html >> $1
+testNodeRestart --print_html >> $1
+testOperations --print_html >> $1
+testRestartGci --print_html >> $1
+testScan --print_html >> $1
+testScanInterpreter --print_html >> $1
+testSystemRestart --print_html >> $1
+echo "
" >> $1
+
diff --git a/ndb/bin/mysqlcluster b/ndb/bin/mysqlcluster
new file mode 100755
index 00000000000..81fc7308942
--- /dev/null
+++ b/ndb/bin/mysqlcluster
@@ -0,0 +1,11 @@
+#!/bin/sh
+if [ -z "$MYSQLCLUSTER_TOP" -o ! -d "$MYSQLCLUSTER_TOP" ]; then
+ echo "MYSQLCLUSTER_TOP not set or directory does not exist"
+ exit 1
+fi
+if [ -z "$MYSQLCLUSTER_TOP" -o ! -d "$MYSQLCLUSTER_TOP/ndb" ]; then
+ echo "$MYSQLCLUSTER_TOP/ndb directory does not exist"
+ exit 1
+fi
+
+mysql --socket=$MYSQLCLUSTER_TOP/data/mysqlcluster.sock $*
diff --git a/ndb/bin/mysqlcluster_install_db b/ndb/bin/mysqlcluster_install_db
new file mode 100755
index 00000000000..6fe95ff105d
--- /dev/null
+++ b/ndb/bin/mysqlcluster_install_db
@@ -0,0 +1,119 @@
+#!/bin/sh
+
+NDB_HOME=
+export NDB_CONNECTSTRING
+if [ -z "$MYSQLCLUSTER_TOP" ]; then
+ echo "MYSQLCLUSTER_TOP not set"
+ exit 1
+fi
+if [ -d "$MYSQLCLUSTER_TOP" ]; then :; else
+ echo "$MYSQLCLUSTER_TOP directory does not exist"
+ exit 1
+fi
+if [ -d "$MYSQLCLUSTER_TOP/ndb" ]; then :; else
+ echo "$MYSQLCLUSTER_TOP/ndb directory does not exist"
+ exit 1
+fi
+
+start_default_ndbcluster() {
+
+# configurable parameters, make sure to change in mysqlcluterd as well
+MYSQLCLUSTER_FILESYSTEM=$MYSQLCLUSTER_TOP/data/mysqlclusterfs
+MYSQLCLUSTER_PORT_BASE="22" # using ports MYSQLCLUSTER_PORT_BASE{"00","01", etc}
+# end configurable parameters
+
+# do some checks
+
+NDB_CONNECTSTRING=
+
+[ -d "$MYSQLCLUSTER_FILESYSTEM" ] || mkdir "$MYSQLCLUSTER_FILESYSTEM"
+if [ -d "$MYSQLCLUSTER_FILESYSTEM" ]; then :; else
+ echo "$MYSQLCLUSTER_FILESYSTEM filesystem directory does not exist"
+ exit 1
+fi
+
+
+# set som help variables
+
+NDB_HOST="localhost"
+NDB_PORT=$MYSQLCLUSTER_PORT_BASE"00"
+NDB_CONNECTSTRING_BASE="host=$NDB_HOST:$NDB_PORT;nodeid="
+
+
+# Edit file system path and ports in config file
+
+cd $MYSQLCLUSTER_FILESYSTEM
+sed \
+ -e s,"WRITE_PATH_TO_FILESYSTEM_2_HERE",$MYSQLCLUSTER_FILESYSTEM,g \
+ -e s,"CHOOSE_PORT_BASE",$MYSQLCLUSTER_PORT_BASE,g \
+ < $MYSQLCLUSTER_TOP/ndb/demos/config-templates/config_template-install.ini \
+ > config.ini
+
+
+# Start management server as deamon
+
+NDB_ID="1"
+NDB_CONNECTSTRING=$NDB_CONNECTSTRING_BASE$NDB_ID
+#xterm -e mgmtsrvr -c $MYSQLCLUSTER_FILESYSTEM/config.ini &
+if mgmtsrvr -d -c $MYSQLCLUSTER_FILESYSTEM/config.ini ; then :; else
+ echo "Unable to start mgmtsrvr"
+ exit 1
+fi
+
+
+# Start database node
+
+cd $MYSQLCLUSTER_FILESYSTEM # the output from the database node gets where it starts
+NDB_ID="2"
+NDB_CONNECTSTRING=$NDB_CONNECTSTRING_BASE$NDB_ID
+#xterm -T "NDB Cluster DB Node" -geometry 80x10 -xrm *.hold:true -e ndb -i &
+ndb -d -i &
+
+# Start xterm for application programs
+
+NDB_ID="3"
+NDB_CONNECTSTRING=$NDB_CONNECTSTRING_BASE$NDB_ID
+#xterm -T "NDB Cluster API Node" -geometry 80x10 &
+echo set before running ndbApi programs > export NDB_CONNECTSTRING=$NDB_CONNECTSTRING
+
+# Start management client
+
+#xterm -T "NDB Management Client" -geometry 80x10 -xrm *.hold:true -e mgmtclient $NDB_HOST $NDB_PORT &
+echo "NDB Management Client starts with: mgmtclient $NDB_HOST $NDB_PORT"
+
+# test if Ndb Cluster starts properly
+
+NDB_ID="11"
+NDB_CONNECTSTRING=$NDB_CONNECTSTRING_BASE$NDB_ID
+if list_tables | grep "NDBT_ProgramExit: 0 - OK"; then :; else
+ echo "Ndbcluster startup failed"
+ exit 1
+fi
+}
+
+start_mysql_install_db() {
+ # run install of regular MySQL Server
+
+ cd $MYSQLCLUSTER_TOP
+ scripts/mysql_install_db --basedir=$MYSQLCLUSTER_TOP --datadir=$MYSQLCLUSTER_TOP/data --socket=$MYSQLCLUSTER_TOP/data/mysqlcluster.sock $*
+}
+
+if test "$1" = "ndb_started"
+then
+ shift
+ mgmt_host=$1
+ shift
+ mgmt_port=$1
+ shift
+ if [ -z "$mgmt_host" -o -z "$mgmt_port" ]; then
+ echo "syntax: ndb_started hostname port"
+ exit 1
+ fi
+ NDB_CONNECTSTRING="host=$mgmt_host:$mgmt_port;nodeid=11"
+ echo using NDB_CONNECTSTRING=$NDB_CONNECTSTRING
+ start_mysql_install_db $*
+else
+ start_default_ndbcluster
+ start_mysql_install_db
+fi
+
diff --git a/ndb/bin/mysqlclusterd b/ndb/bin/mysqlclusterd
new file mode 100755
index 00000000000..3b4deb3ed48
--- /dev/null
+++ b/ndb/bin/mysqlclusterd
@@ -0,0 +1,34 @@
+#!/bin/sh
+
+# configurable parameters
+MYSQLCLUSTER_PORT_BASE="22"
+# end configurable parameters
+
+if [ -z "$MYSQLCLUSTER_TOP" -o ! -d "$MYSQLCLUSTER_TOP" ]; then
+ echo "MYSQLCLUSTER_TOP not set or directory does not exist"
+ exit 1
+fi
+if [ -z "$MYSQLCLUSTER_TOP" -o ! -d "$MYSQLCLUSTER_TOP/ndb" ]; then
+ echo "$MYSQLCLUSTER_TOP/ndb directory does not exist"
+ exit 1
+fi
+
+if test "$1" = "ndb_started"
+then
+ shift
+ mgmt_host=$1
+ shift
+ mgmt_port=$1
+ shift
+ if [ -z "$mgmt_host" -o -z "$mgmt_port" ]; then
+ echo "syntax: ndb_started hostname port"
+ exit 1
+ fi
+ NDB_CONNECTSTRING="host=$mgmt_host:$mgmt_port;nodeid=11"
+ echo using NDB_CONNECTSTRING=$NDB_CONNECTSTRING
+else
+ NDB_CONNECTSTRING="host=localhost:"$MYSQLCLUSTER_PORT_BASE"00;nodeid=11"
+fi
+export NDB_CONNECTSTRING
+
+mysqld --default-table-type=ndbcluster --basedir=$MYSQLCLUSTER_TOP --datadir=$MYSQLCLUSTER_TOP/data --socket=$MYSQLCLUSTER_TOP/data/mysqlcluster.sock $*
diff --git a/ndb/bin/regression.sh b/ndb/bin/regression.sh
new file mode 100644
index 00000000000..5e3491af208
--- /dev/null
+++ b/ndb/bin/regression.sh
@@ -0,0 +1,644 @@
+#!/bin/sh
+# NAME
+# regression.sh
+#
+# SYNOPSIS
+# regression.sh
+#
+# DESCRIPTION
+#
+# This script runs a number of regression tests to verify that nothing
+# is broken. Currently it executes the same tests as in the autotest
+# regression suite.
+#
+# OPTIONS
+#
+# EXAMPLES
+#
+#
+# ENVIRONMENT
+# verbose verbose printouts
+#
+# FILES
+#
+#
+# SEE ALSO
+#
+# DIAGNOSTICTS
+#
+#
+# VERSION
+# 1.0
+#
+# AUTHOR
+#
+#
+
+
+# die prints the supplied message to stderr,
+# prefixed with the program name, and exits
+# with the exit code given by "-e num" or
+# 1, if no -e option is present.
+#
+die ()
+{
+ die_code__=1
+ [ "X$1" = X-e ] && { die_code__=$2; shift 2; }
+ [ "X$1" = X-- ] && shift
+ errmsg "$@"
+ exit $die_code__
+}
+
+
+# msg prints the supplied message to stderr,
+# prefixed with the program name.
+#
+errmsg ()
+{
+ echo "${progname:-}:" "$@" >&2
+}
+
+# rawdie prints the supplied message to stderr.
+# It then exits with the exit code given with "-e num"
+# or 1, if no -e option is present.
+#
+rawdie ()
+{
+ rawdie_code__=1
+ [ "X$1" = X-e ] && { rawdie_code__=$2; shift 2; }
+ [ "X$1" = X-- ] && shift
+ rawerrmsg "$@"
+ exit $rawdie_code__
+}
+
+# Syndie prints the supplied message (if present) to stderr,
+# prefixed with the program name, on the first line.
+# On the second line, it prints $synopsis.
+# It then exits with the exit code given with "-e num"
+# or 1, if no -e option is present.
+#
+syndie ()
+{
+ syndie_code__=1
+ [ "X$1" = X-e ] && { syndie_code__=$2; shift 2; }
+ [ "X$1" = X-- ] && shift
+ [ -n "$*" ] && msg "$*"
+ rawdie -e $syndie_code__ "Synopsis: $synopsis"
+}
+
+
+
+
+# msg prints the supplied message to stdout,
+# prefixed with the program name.
+#
+msg ()
+{
+ echo "${progname:-}:" "$@"
+}
+
+rawmsg () { echo "$*"; } # print the supplied message to stdout
+rawerrmsg () { echo "$*" >&2; } # print the supplied message to stderr
+
+# trace prints the supplied message to stdout if verbose is non-null
+#
+trace ()
+{
+ [ -n "$verbose" ] && msg "$@"
+}
+
+
+# errtrace prints the supplied message to stderr if verbose is non-null
+#
+errtrace ()
+{
+ [ -n "$verbose" ] && msg "$@" >&2
+}
+
+
+synopsis="regression.sh"
+progname=`basename $0`
+
+numOfTestsOK=0
+numOfTestsFailed=0
+
+LOG=regression-$1.`date '+%Y-%m-%d'`
+
+executeTest()
+{
+ eval "$@" | tee -a $LOG
+
+ if [ $? -eq 0 ]
+ then
+ echo "SUCCESS: $@"
+ numOfTestsOK=`expr $numOfTestsOK + 1`
+ else
+ echo "FAILED: $@"
+ numOfTestsFailed=`expr $numOfTestsFailed + 1`
+ fi
+}
+
+#
+# INFO
+#
+trace "Starting: `date`"
+trace "NDB_TOP = $NDB_TOP"
+
+#
+# THE TESTS TO EXECUTE
+#
+
+# BASIC FUNCTIONALITY
+if [ $1 = "basic" ]
+then
+executeTest 'testBasic -n PkRead'
+executeTest 'drop_all_tabs'
+
+executeTest 'testBasic -n PkUpdate'
+executeTest 'drop_all_tabs'
+
+executeTest 'testBasic -n PkDelete'
+executeTest 'drop_all_tabs'
+
+executeTest 'testBasic -n PkInsert'
+executeTest 'drop_all_tabs'
+
+executeTest 'testBasic -n UpdateAndRead'
+executeTest 'drop_all_tabs'
+
+executeTest 'testBasic -n PkReadAndLocker' T6
+executeTest 'drop_tab' T6
+
+executeTest 'testBasic -n PkReadAndLocker2' T6
+executeTest 'drop_tab' T6
+
+executeTest 'testBasic -n PkReadUpdateAndLocker' T6
+executeTest 'drop_tab' T6
+
+executeTest 'testBasic -n ReadWithLocksAndInserts' T6
+executeTest 'drop_tab' T6
+
+executeTest 'testBasic -n PkInsertTwice' T1 T6 T10
+executeTest 'drop_tab' T1 T6 T10
+
+executeTest 'testBasic -n PkDirtyRead'
+executeTest 'drop_all_tabs'
+
+executeTest 'testBasic -n Fill' T6
+executeTest 'drop_tab' T6
+
+executeTest 'testBasic -n Fill' T1
+executeTest 'drop_tab' T1
+
+executeTest 'testBasic -n NoCommitSleep' T6
+executeTest 'drop_tab' T6
+
+executeTest 'testBasic -n NoCommit626' T6
+executeTest 'drop_tab' T6
+
+executeTest 'testBasic -n NoCommitAndClose' T6
+executeTest 'drop_tab' T6
+
+executeTest 'testBasic -n Commit626' T6
+executeTest 'drop_tab' T6
+
+executeTest 'testBasic -n CommitTry626' T6
+executeTest 'drop_tab' T6
+
+executeTest 'testBasic -n CommitAsMuch626' T6
+executeTest 'drop_tab' T6
+
+executeTest 'testBasic -n NoCommit626' T6
+executeTest 'drop_tab' T6
+
+executeTest 'testBasic -n NoCommitRollback626' T1 T6
+executeTest 'drop_tab' T1 T6
+
+executeTest 'testBasic -n Commit630' T1 T6
+executeTest 'drop_tab' T6
+
+executeTest 'testBasic -n CommitTry630' T1 T6
+executeTest 'drop_tab' T1 T6
+
+executeTest 'testBasic -n CommitAsMuch630' T1 T6
+executeTest 'drop_tab' T1 T6
+
+executeTest 'testBasic -n NoCommit630' T1 T6
+executeTest 'drop_tab' T1 T6
+
+executeTest 'testBasic -n NoCommitRollback630' T1 T6
+executeTest 'drop_tab' T1 T6
+
+executeTest 'testBasic -n NoCommitAndClose' T1 T6
+executeTest 'drop_tab' T1 T6
+
+executeTest 'testBasic -n RollbackUpdate' T1 T6
+executeTest 'drop_tab' T1 T6
+
+executeTest 'testBasic -n RollbackDeleteMultiple' T1 T6
+executeTest 'drop_tab' T1 T6
+
+executeTest 'testBasic -n ImplicitRollbackDelete' T1 T6
+executeTest 'drop_tab' T1 T6
+
+executeTest 'testBasic -n CommitDelete' T1 T6
+executeTest 'drop_tab' T1 T6
+
+executeTest 'testBasic -n RollbackNothing' T1 T6
+executeTest 'drop_tab' T1 T6
+
+executeTest 'testBasic -n ReadConsistency' T6
+executeTest 'drop_tab' T6
+
+executeTest 'testBasic -n PkRead' TPK_33 TPK_34 TPK_1003 TPK_2003 TPK_4092
+executeTest 'drop_tab' TPK_33 TPK_34 TPK_1003 TPK_2003 TPK_4092
+
+executeTest 'testBasic -n PkUpdate' TPK_33 TPK_34 TPK_1003 TPK_2003 TPK_4092
+executeTest 'drop_tab' TPK_33 TPK_34 TPK_1003 TPK_2003 TPK_4092
+
+executeTest 'testBasic -n PkDelete' TPK_33 TPK_34 TPK_1003 TPK_2003 TPK_4092
+executeTest 'drop_tab' TPK_33 TPK_34 TPK_1003 TPK_2003 TPK_4092
+
+executeTest 'testBasic -n PkInsert' TPK_33 TPK_34 TPK_1003 TPK_2003 TPK_409
+executeTest 'drop_tab' TPK_33 TPK_34 TPK_1003 TPK_2003 TPK_4092
+
+executeTest 'testBasic -n UpdateAndRead' TPK_33 TPK_34 TPK_1003 TPK_2003 TPK_4092
+#executeTest 'drop_tab' TPK_33 TPK_34 TPK_1003 TPK_2003 TPK_4092
+
+executeTest 'testBasicAsynch -n PkInsertAsynch'
+executeTest 'drop_all_tabs'
+
+executeTest 'testBasicAsynch -n PkReadAsynch'
+executeTest 'drop_all_tabs'
+
+executeTest 'testBasicAsynch -n PkUpdateAsynch'
+executeTest 'drop_all_tabs'
+
+executeTest 'testBasicAsynch -n PkDeleteAsynch'
+executeTest 'drop_all_tabs'
+fi
+
+# SCAN TESTS
+if [ $1 = "scan" ]
+then
+executeTest 'testScan -n ScanRead16'
+executeTest 'drop_all_tabs'
+
+executeTest 'testScan -n ScanRead240'
+executeTest 'drop_all_tabs'
+
+executeTest 'testScan -n ScanUpdate'
+executeTest 'drop_all_tabs'
+
+executeTest 'testScan -n ScanUpdate2' T6
+executeTest 'drop_tab' T6
+
+executeTest 'testScan -n ScanDelete'
+executeTest 'drop_all_tab'
+
+executeTest 'testScan -n ScanDelete2' T10
+executeTest 'drop_tab' T10
+
+executeTest 'testScan -n ScanUpdateAndScanRead' T6
+executeTest 'drop_tab' T6
+
+executeTest 'testScan -n ScanReadAndLocker' T6
+executeTest 'drop_tab' T6
+
+executeTest 'testScan -n ScanReadAndPkRead' T6
+executeTest 'drop_tab' T6
+
+executeTest 'testScan -n ScanRead488' T6
+executeTest 'drop_tab' T6
+
+executeTest 'testScan -n ScanWithLocksAndInserts' T6
+executeTest 'drop_tab' T6
+
+executeTest 'testScan -n ScanReadAbort' T6
+executeTest 'drop_tab' T6
+
+executeTest 'testScan -n ScanReadAbort15' T6
+executeTest 'drop_tab' T6
+
+executeTest 'testScan -n ScanReadAbort240' T6
+executeTest 'drop_tab' T6
+
+executeTest 'testScan -n ScanUpdateAbort16' T6
+executeTest 'drop_tab' T6
+
+executeTest 'testScan -n ScanReadRestart' T6
+executeTest 'drop_tab' T6
+
+executeTest 'testScan -n ScanUpdateRestart' T6
+executeTest 'drop_tab' T6
+
+executeTest 'testScan -n CheckGetValue' T6
+executeTest 'drop_tab' T6
+
+executeTest 'testScan -n CloseWithoutStop' T6
+executeTest 'drop_tab' T6
+
+executeTest 'testScan -n NextScanWhenNoMore' T6
+executeTest 'drop_tab' T6
+
+executeTest 'testScan -n ExecuteScanWithoutOpenScan' T6
+executeTest 'drop_tab' T6
+
+executeTest 'testScan -n OnlyOpenScanOnce' T6
+executeTest 'drop_tab' T6
+
+executeTest 'testScan -n OnlyOneOpInScanTrans' T6
+executeTest 'drop_tab' T6
+
+executeTest 'testScan -n OnlyOneOpBeforeOpenScan' T6
+executeTest 'drop_tab' T6
+
+executeTest 'testScan -n OnlyOneScanPerTrans' T6
+executeTest 'drop_tab' T6
+
+executeTest 'testScan -n NoCloseTransaction' T6
+executeTest 'drop_tab' T6
+
+executeTest 'testScan -n CheckInactivityTimeOut' T6
+executeTest 'drop_tab' T6
+
+executeTest 'testScan -n CheckInactivityBeforeClose' T6
+executeTest 'drop_tab' T6
+
+executeTest 'testScan -n CheckAfterTerror' T6
+executeTest 'drop_tab' T6
+fi
+
+
+# DICT TESTS
+if [ $1 = "dict" ]
+then
+executeTest 'testDict -n CreateAndDrop'
+executeTest 'drop_all_tabs'
+
+executeTest 'testDict -n CreateAndDropWithData'
+executeTest 'drop_all_tabs'
+
+executeTest 'testDict -n CreateAndDropDuring' T6
+executeTest 'drop_tab' T6
+
+executeTest 'testDict -n CreateInvalidTables'
+executeTest 'drop_all_tabs'
+
+executeTest 'testDict -n CreateTableWhenDbIsFull' T6
+executeTest 'drop_tab' T6
+
+executeTest 'testDict -n CreateMaxTables' T6
+executeTest 'drop_tab' T6
+
+executeTest 'testDict -n FragmentTypeAll' T1 T6 T7 T8
+executeTest 'drop_tab' T1 T6 T7 T8
+
+executeTest 'testDict -n FragmentTypeAllLarge' T1 T6 T7 T8
+executeTest 'drop_tab' T1 T6 T7 T8
+
+executeTest 'testDict -n TemporaryTables' T1 T6 T7 T8
+executeTest 'drop_tab' T1 T6 T7 T8
+fi
+
+# TEST NDBAPI
+if [ $1 = "api" ]
+then
+executeTest 'testNdbApi -n MaxNdb' T6
+executeTest 'drop_tab' T6
+
+executeTest 'testNdbApi -n MaxTransactions' T1 T6 T7 T8 T13
+executeTest 'drop_tab' T1 T6 T7 T8 T13
+
+executeTest 'testNdbApi -n MaxOperations' T1 T6 T7 T8 T1
+executeTest 'drop_tab' T1 T6 T7 T8 T13
+
+executeTest 'testNdbApi -n MaxGetValue' T1 T6 T7 T8 T13
+executeTest 'drop_tab' T1 T6 T7 T8 T13
+
+executeTest 'testNdbApi -n MaxEqual'
+executeTest 'drop_all_tabs'
+
+executeTest 'testNdbApi -n DeleteNdb' T1 T6
+executeTest 'drop_tab' T1 T6
+
+executeTest 'testNdbApi -n WaitUntilReady' T1 T6 T7 T8 T13
+executeTest 'drop_tab' T1 T6 T7 T8 T13
+
+executeTest 'testNdbApi -n GetOperationNoTab' T6
+executeTest 'drop_tab' T6
+
+executeTest 'testNdbApi -n NdbErrorOperation' T6
+executeTest 'drop_tab' T6
+
+executeTest 'testNdbApi -n MissingOperation' T6
+executeTest 'drop_tab' T6
+
+executeTest 'testNdbApi -n GetValueInUpdate' T6
+executeTest 'drop_tab' T6
+
+executeTest 'testNdbApi -n UpdateWithoutKeys' T6
+executeTest 'drop_tab' T6
+
+executeTest 'testNdbApi -n UpdateWithoutValues' T6
+executeTest 'drop_tab' T6
+
+executeTest 'testOperations -n ReadRead' T6
+executeTest 'drop_tab' T6
+
+executeTest 'testOperations -n ReadReadEx' T6
+executeTest 'drop_tab' T6
+
+executeTest 'testOperations -n ReadInsert' T6
+executeTest 'drop_tab' T6
+
+executeTest 'testOperations -n ReadUpdate' T6
+executeTest 'drop_tab' T6
+
+executeTest 'testOperations -n ReadDelete' T6
+executeTest 'drop_tab' T6
+
+executeTest 'testOperations -n ReadExRead' T6
+executeTest 'drop_tab' T6
+
+executeTest 'testOperations -n ReadExReadEx' T6
+executeTest 'drop_tab' T6
+
+executeTest 'testOperations -n ReadExInsert' T6
+executeTest 'drop_tab' T6
+
+executeTest 'testOperations -n ReadExUpdate' T6
+executeTest 'drop_tab' T6
+
+executeTest 'testOperations -n ReadExDelete' T6
+executeTest 'drop_tab' T6
+
+executeTest 'testOperations -n InsertRead' T6
+executeTest 'drop_tab' T6
+
+executeTest 'testOperations -n InsertReadEx' T6
+executeTest 'drop_tab' T6
+
+executeTest 'testOperations -n InsertInsert' T6
+executeTest 'drop_tab' T6
+
+executeTest 'testOperations -n InsertUpdate' T6
+executeTest 'drop_tab' T6
+
+executeTest 'testOperations -n InsertDelete' T6
+executeTest 'drop_tab' T6
+
+executeTest 'testOperations -n UpdateRead' T6
+executeTest 'drop_tab' T6
+
+executeTest 'testOperations -n UpdateReadEx' T6
+executeTest 'drop_tab' T6
+
+executeTest 'testOperations -n UpdateInsert' T6
+executeTest 'drop_tab' T6
+
+executeTest 'testOperations -n UpdateUpdate' T6
+executeTest 'drop_tab' T6
+
+executeTest 'testOperations -n UpdateDelete' T6
+executeTest 'drop_tab' T6
+
+executeTest 'testOperations -n DeleteRead' T6
+executeTest 'drop_tab' T6
+
+executeTest 'testOperations -n DeleteReadEx' T6
+executeTest 'drop_tab' T6
+
+executeTest 'testOperations -n DeleteInsert' T6
+executeTest 'drop_tab' T6
+
+executeTest 'testOperations -n DeleteUpdate' T6
+executeTest 'drop_tab' T6
+
+executeTest 'testOperations -n DeleteDelete' T6
+executeTest 'drop_tab' T6
+
+executeTest 'testRestartGci' T6
+executeTest 'drop_tab' T6
+
+executeTest 'testIndex -n CreateAll'
+executeTest 'drop_all_tabs'
+
+executeTest 'testIndex -n InsertDeleteGentle' T1 T6 T8 T10
+executeTest 'drop_tab' T1 T6 T8 T10
+
+executeTest 'testIndex -n InsertDelete' T1 T6 T8 T10
+executeTest 'drop_tab' T1 T6 T8 T10
+
+executeTest 'testIndex -n CreateLoadDropGentle' T1 T6 T8 T10
+executeTest 'drop_tab' T1 T6 T8 T10
+
+executeTest 'testIndex -n CreateLoadDrop' T1 T6 T8 T10
+executeTest 'drop_tab' T1 T6 T8 T10
+
+executeTest 'testBackup' -n BackupOne
+
+executeTest 'testBackup' -n BackupBank T6
+executeTest 'drop_tab' T6
+fi
+
+# TEST SYSTEM RESTARTS
+if [ $1 = "sr" ]
+then
+executeTest 'testSystemRestart -n SR1' T1
+executeTest 'testSystemRestart -n SR1' T6
+executeTest 'testSystemRestart -n SR1' T7
+executeTest 'testSystemRestart -n SR1' T8
+executeTest 'testSystemRestart -n SR1' T10
+executeTest 'testSystemRestart -n SR2' T1
+executeTest 'testSystemRestart -n SR2' T6
+executeTest 'testSystemRestart -n SR2' T7
+executeTest 'testSystemRestart -n SR2' T10
+executeTest 'testSystemRestart -n SR2' T13
+executeTest 'testSystemRestart -n SR3' T6
+executeTest 'testSystemRestart -n SR3' T10
+executeTest 'testSystemRestart -n SR4' T6
+executeTest 'testSystemRestart -n SR_UNDO' T1
+executeTest 'testSystemRestart -n SR_UNDO' T6
+executeTest 'testSystemRestart -n SR_UNDO' T7
+executeTest 'testSystemRestart -n SR_UNDO' T8
+executeTest 'testSystemRestart -n SR_UNDO' T10
+executeTest 'drop_tab' T1 T6 T7 T8 T10
+fi
+
+# TEST NODE RESTARTS
+if [ $1 = "nr" ]
+then
+executeTest 'testNodeRestart -n NoLoad' T6 T8 T13
+executeTest 'drop_tab' T6 T8 T13
+
+executeTest 'testNodeRestart -n PkRead' T6 T8 T13
+executeTest 'drop_tab' T6 T8 T13
+
+executeTest 'testNodeRestart -n PkReadPkUpdate' T6 T8 T13
+executeTest 'drop_tab' T6 T8 T13
+
+executeTest 'testNodeRestart -n ReadUpdateScan' T6 T8 T13
+executeTest 'drop_tab' T6 T8 T13
+
+executeTest 'testNodeRestart -n Terror' T6 T13
+executeTest 'drop_tab' T6 T8 T13
+
+executeTest 'testNodeRestart -n FullDb' T6 T13
+executeTest 'drop_tab' T6 T8 T13
+
+executeTest 'testNodeRestart -n RestartRandomNode' T6 T13
+executeTest 'drop_tab' T6 T8 T13
+
+executeTest 'testNodeRestart -n RestartRandomNodeError' T6 T13
+executeTest 'drop_tab' T6 T8 T13
+
+executeTest 'testNodeRestart -n RestartRandomNodeInitial' T6 T13
+executeTest 'drop_tab' T6 T8 T13
+
+executeTest 'testNodeRestart -n RestartNFDuringNR' T6 T13
+executeTest 'drop_tab' T6 T8 T13
+
+executeTest 'testNodeRestart -n RestartNodeDuringLCP' T6 T13
+executeTest 'drop_tab' T6 T8 T13
+
+executeTest 'testNodeRestart -n RestartMasterNodeError' T6 T8 T13
+executeTest 'drop_tab' T6 T8 T13
+
+executeTest 'testNodeRestart -n TwoNodeFailure' T6 T8 T13
+executeTest 'drop_tab' T6 T8 T13
+
+executeTest 'testNodeRestart -n TwoMasterNodeFailure' T6 T8 T13
+executeTest 'drop_tab' T6 T8 T13
+
+executeTest 'testNodeRestart -n FiftyPercentFail' T6 T8 T13
+executeTest 'drop_tab' T6 T8 T13
+
+executeTest 'testNodeRestart -n RestartAllNodes' T6 T8 T13
+executeTest 'drop_tab' T6 T8 T13
+
+executeTest 'testNodeRestart -n RestartAllNodesAbort' T6 T8 T13
+executeTest 'drop_tab' T6 T8 T13
+
+executeTest 'testNodeRestart -n RestartAllNodesError9999' T6 T8 T13
+executeTest 'drop_tab' T6 T8 T13
+
+executeTest 'testNodeRestart -n FiftyPercentStopAndWait' T6 T8 T13
+executeTest 'drop_tab' T6 T8 T13
+
+fi
+
+# TESTS FINISHED
+trace "Finished: `date`"
+
+#
+# TEST SUMMARY
+#
+if [ $numOfTestsFailed -eq 0 ]
+then
+ echo "-- REGRESSION TEST SUCCESSFUL --"
+else
+ echo "-- REGRESSION TEST FAILED!! --"
+fi
+echo "Number of successful tests: $numOfTestsOK"
+echo "Number of failed tests : $numOfTestsFailed"
diff --git a/ndb/config/Defs.DEBUG.mk b/ndb/config/Defs.DEBUG.mk
new file mode 100644
index 00000000000..309ae90a0ba
--- /dev/null
+++ b/ndb/config/Defs.DEBUG.mk
@@ -0,0 +1,4 @@
+
+VERSION_FLAGS := -DNDB_DEBUG -DUSE_EMULATED_JAM -DVM_TRACE -DERROR_INSERT -DARRAY_GUARD
+#-DDEBUG_TRANSPORTER
+
diff --git a/ndb/config/Defs.HPUX.HPPA.GCC.mk b/ndb/config/Defs.HPUX.HPPA.GCC.mk
new file mode 100644
index 00000000000..895c7672071
--- /dev/null
+++ b/ndb/config/Defs.HPUX.HPPA.GCC.mk
@@ -0,0 +1,50 @@
+###
+#
+# Defines
+SHELL := /bin/sh
+
+C++ := g++
+CC := gcc
+AR_RCS := ar rcs
+SO := ld -b -o
+
+SHLIBEXT := sl
+
+MAKEDEPEND := g++ -M
+PIC := -fPIC
+
+RPCGENFLAGS := -MA -C -N
+ETAGS := etags
+CTAGS := ctags
+
+###
+#
+# Flags
+#
+CCFLAGS_WARNINGS = -Wno-long-long -W -Wall -pedantic
+# -Wno-sign-compare Use this flag if you are annoyed with all the warnings
+CCFLAGS_TOP = -DHPUX -D_REENTRANT -D_POSIX_PTHREAD_SEMANTICS -DNO_COMMAND_HANDLER
+
+ifeq (RELEASE, $(NDB_VERSION))
+VERSION_FLAGS += -O3
+else
+ifeq (RELEASE_TRACE, $(NDB_VERSION))
+VERSION_FLAGS += -O3 -g
+else
+VERSION_FLAGS += -g
+endif
+endif
+
+CCFLAGS = $(CCFLAGS_LOC) $(CCFLAGS_TOP) $(USER_FLAGS) $(VERSION_FLAGS) $(CCFLAGS_WARNINGS)
+CFLAGS = $(CCFLAGS_LOC) $(CCFLAGS_TOP) $(USER_FLAGS) $(VERSION_FLAGS) $(CCFLAGS_WARNINGS)
+
+LDFLAGS_TOP = -lpthread -lnsl -lrt
+
+LDFLAGS = $(LDFLAGS_LOC) $(LDFLAGS_TOP)
+
+LDLIBS = $(LDLIBS_LOC) $(LDLIBS_TOP)
+
+LINK.cc = $(PURE) $(C++) $(CCFLAGS) $(LDFLAGS)
+
+LINK.c = $(PURE) $(CC) $(CFLAGS) $(LDFLAGS)
+
diff --git a/ndb/config/Defs.IBMAIX.POWERPC.GCC.mk b/ndb/config/Defs.IBMAIX.POWERPC.GCC.mk
new file mode 100644
index 00000000000..ae975fb2cb8
--- /dev/null
+++ b/ndb/config/Defs.IBMAIX.POWERPC.GCC.mk
@@ -0,0 +1,49 @@
+###
+#
+# Defines
+SHELL := /bin/sh
+
+C++ := g++
+CC := gcc
+AR_RCS := $(PURE) ar rcs
+SO := g++ -shared -o
+
+MAKEDEPEND := g++ -M
+PIC := -fPIC
+
+RPCGENFLAGS := -M -C -N
+
+ETAGS := etags
+CTAGS := ctags
+
+###
+#
+# Flags
+#
+CCFLAGS_WARNINGS = -Wno-long-long -Wall #-pedantic
+# Add these for more warnings -Weffc++ -W
+CCFLAGS_TOP = -D_REENTRANT -D_POSIX_PTHREAD_SEMANTICS
+CCFLAGS_TOP += -fno-rtti
+
+ifeq (RELEASE, $(NDB_VERSION))
+VERSION_FLAGS += -O3
+else
+ifeq (RELEASE_TRACE, $(NDB_VERSION))
+VERSION_FLAGS += -O3 -g
+else
+VERSION_FLAGS += -g
+endif
+endif
+
+CCFLAGS = $(CCFLAGS_LOC) $(CCFLAGS_TOP) $(USER_FLAGS) $(VERSION_FLAGS) $(CCFLAGS_WARNINGS)
+CFLAGS = $(CCFLAGS_LOC) $(CCFLAGS_TOP) $(USER_FLAGS) $(VERSION_FLAGS) $(CCFLAGS_WARNINGS)
+
+LDFLAGS_TOP = -lpthread -lrt
+
+LDFLAGS = $(LDFLAGS_LOC) $(LDFLAGS_TOP)
+
+LDLIBS = $(LDLIBS_LOC) $(LDLIBS_TOP)
+
+LINK.cc = $(PURE) $(C++) $(CCFLAGS) $(LDFLAGS)
+
+LINK.c = $(PURE) $(CC) $(CFLAGS) $(LDFLAGS)
diff --git a/ndb/config/Defs.LINUX.x86.GCC.mk b/ndb/config/Defs.LINUX.x86.GCC.mk
new file mode 100644
index 00000000000..a1cc3c52a7e
--- /dev/null
+++ b/ndb/config/Defs.LINUX.x86.GCC.mk
@@ -0,0 +1,56 @@
+###
+#
+# Defines
+SHELL := /bin/sh
+
+C++ := g++$(GCC_VERSION)
+CC := gcc$(GCC_VERSION)
+AR_RCS := $(PURE) ar rcs
+SO := gcc$(GCC_VERSION) -shared -lpthread -o
+
+MAKEDEPEND := g++$(GCC_VERSION) -M
+PIC := -fPIC
+
+RPCGENFLAGS := -M -C -N
+
+ETAGS := etags
+CTAGS := ctags
+
+###
+#
+# Flags
+#
+# gcc3.3 __THROW problem if -pedantic and -O2
+ifeq ($(NDB_VERSION),DEBUG)
+CCFLAGS_WARNINGS = -Wno-long-long -Wall -pedantic
+else
+CCFLAGS_WARNINGS = -Wno-long-long -Wall
+endif
+# Add these for more warnings -Weffc++ -W
+CCFLAGS_TOP = -D_REENTRANT -D_POSIX_PTHREAD_SEMANTICS
+CCFLAGS_TOP += -fno-rtti -fno-exceptions
+
+ifeq (RELEASE, $(NDB_VERSION))
+VERSION_FLAGS += -O2
+else
+ifeq (RELEASE_TRACE, $(NDB_VERSION))
+VERSION_FLAGS += -O2 -g
+else
+VERSION_FLAGS += -g
+endif
+endif
+
+CCFLAGS = $(CCFLAGS_LOC) $(CCFLAGS_TOP) $(USER_FLAGS) $(VERSION_FLAGS) $(CCFLAGS_WARNINGS)
+CFLAGS = $(CCFLAGS_LOC) $(CCFLAGS_TOP) $(USER_FLAGS) $(VERSION_FLAGS) $(CCFLAGS_WARNINGS)
+
+LDFLAGS_TOP =
+
+LDFLAGS = $(LDFLAGS_LOC) $(LDFLAGS_TOP)
+
+LDLIBS = $(LDLIBS_LOC) $(LDLIBS_TOP)
+
+LINK.cc = $(PURE) $(CC) $(CCFLAGS) $(LDFLAGS)
+
+LINK.c = $(PURE) $(CC) $(CFLAGS) $(LDFLAGS)
+
+LDFLAGS_LAST = -lpthread -lrt -Wl,-Bstatic -lstdc++ -Wl,-Bdynamic
diff --git a/ndb/config/Defs.LINUX.x86.ICC.mk b/ndb/config/Defs.LINUX.x86.ICC.mk
new file mode 100644
index 00000000000..8e8540409da
--- /dev/null
+++ b/ndb/config/Defs.LINUX.x86.ICC.mk
@@ -0,0 +1,54 @@
+###
+#
+# Defines
+SHELL := /bin/sh
+
+C++ := icc
+CC := icc
+AR_RCS := $(PURE) ar rcs
+SO := g++$(GCC_VERSION) -shared -lpthread -o
+
+MAKEDEPEND := g++$(GCC_VERSION) -M
+PIC := -fPIC
+
+RPCGENFLAGS := -M -C -N
+
+ETAGS := etags
+CTAGS := ctags
+
+###
+#
+# Flags
+#
+# gcc3.3 __THROW problem if -pedantic and -O2
+ifeq ($(NDB_VERSION),DEBUG)
+CCFLAGS_WARNINGS =
+else
+CCFLAGS_WARNINGS =
+endif
+# Add these for more warnings -Weffc++ -W
+CCFLAGS_TOP = -D_REENTRANT -D_POSIX_PTHREAD_SEMANTICS
+CCFLAGS_TOP +=
+
+ifeq (RELEASE, $(NDB_VERSION))
+VERSION_FLAGS += -O2
+else
+ifeq (RELEASE_TRACE, $(NDB_VERSION))
+VERSION_FLAGS += -O2 -g
+else
+VERSION_FLAGS += -g
+endif
+endif
+
+CCFLAGS = $(CCFLAGS_LOC) $(CCFLAGS_TOP) $(USER_FLAGS) $(VERSION_FLAGS) $(CCFLAGS_WARNINGS)
+CFLAGS = $(CCFLAGS_LOC) $(CCFLAGS_TOP) $(USER_FLAGS) $(VERSION_FLAGS) $(CCFLAGS_WARNINGS)
+
+LDFLAGS_TOP = -lpthread -lrt
+
+LDFLAGS = $(LDFLAGS_LOC) $(LDFLAGS_TOP)
+
+LDLIBS = $(LDLIBS_LOC) $(LDLIBS_TOP)
+
+LINK.cc = $(PURE) $(C++) $(CCFLAGS) $(LDFLAGS)
+
+LINK.c = $(PURE) $(CC) $(CFLAGS) $(LDFLAGS)
diff --git a/ndb/config/Defs.LINUX.x86_64.GCC.mk b/ndb/config/Defs.LINUX.x86_64.GCC.mk
new file mode 100644
index 00000000000..a238d29ef4c
--- /dev/null
+++ b/ndb/config/Defs.LINUX.x86_64.GCC.mk
@@ -0,0 +1,54 @@
+###
+#
+# Defines
+SHELL := /bin/sh
+
+C++ := g++
+CC := gcc
+AR_RCS := $(PURE) ar rcs
+SO := g++ -shared -lpthread -o
+
+MAKEDEPEND := g++ -M
+PIC := -fPIC
+
+RPCGENFLAGS := -M -C -N
+
+ETAGS := etags
+CTAGS := ctags
+
+###
+#
+# Flags
+#
+# gcc3.3 __THROW problem if -pedantic and -O2
+ifeq ($(NDB_VERSION),DEBUG)
+CCFLAGS_WARNINGS = -Wno-long-long -Wall -pedantic
+else
+CCFLAGS_WARNINGS = -Wno-long-long -Wall
+endif
+# Add these for more warnings -Weffc++ -W
+CCFLAGS_TOP = -D_REENTRANT -D_POSIX_PTHREAD_SEMANTICS
+CCFLAGS_TOP += -fno-rtti -fno-exceptions -m64
+
+ifeq (RELEASE, $(NDB_VERSION))
+VERSION_FLAGS += -O2
+else
+ifeq (RELEASE_TRACE, $(NDB_VERSION))
+VERSION_FLAGS += -O2 -g
+else
+VERSION_FLAGS += -g
+endif
+endif
+
+CCFLAGS = $(CCFLAGS_LOC) $(CCFLAGS_TOP) $(USER_FLAGS) $(VERSION_FLAGS) $(CCFLAGS_WARNINGS)
+CFLAGS = $(CCFLAGS_LOC) $(CCFLAGS_TOP) $(USER_FLAGS) $(VERSION_FLAGS) $(CCFLAGS_WARNINGS)
+
+LDFLAGS_TOP = -lpthread -lrt
+
+LDFLAGS = $(LDFLAGS_LOC) $(LDFLAGS_TOP)
+
+LDLIBS = $(LDLIBS_LOC) $(LDLIBS_TOP)
+
+LINK.cc = $(PURE) $(C++) $(CCFLAGS) $(LDFLAGS)
+
+LINK.c = $(PURE) $(CC) $(CFLAGS) $(LDFLAGS)
diff --git a/ndb/config/Defs.MACOSX.POWERPC.GCC.mk b/ndb/config/Defs.MACOSX.POWERPC.GCC.mk
new file mode 100644
index 00000000000..bb73e9bcc61
--- /dev/null
+++ b/ndb/config/Defs.MACOSX.POWERPC.GCC.mk
@@ -0,0 +1,58 @@
+###
+#
+# Defines
+SHELL := /bin/sh
+
+C++ := gcc
+CC := gcc
+CXX := gcc
+AR_RCS := $(PURE) ar rcs
+#SO := g++ -dynamiclib -Wl,-segprot,__TEXT,rwx,rwx -o
+SO := gcc -dynamiclib -o
+
+SHLIBEXT := dylib
+
+MAKEDEPEND := gcc -M
+PIC := -fPIC
+
+RPCGENFLAGS := -M -C -N
+
+ETAGS := etags
+CTAGS := ctags
+
+###
+#
+# Flags
+#
+CCFLAGS_WARNINGS = -Wno-long-long -Wall -Winline #-Werror#-pedantic
+# Add these for more warnings -Weffc++ -W
+CCFLAGS_TOP = -D_REENTRANT -D_POSIX_PTHREAD_SEMANTICS -D_BIG_ENDIAN
+CXX_FLAGS_TOP = -fno-rtti -felide-constructors -fno-exceptions -fno-omit-fram-pointer
+C_FLAGS_TOP += -fno-omit-frame-pointer
+
+ifeq (RELEASE, $(NDB_VERSION))
+VERSION_FLAGS += -O3
+else
+ifeq (RELEASE_TRACE, $(NDB_VERSION))
+VERSION_FLAGS += -O3 -g
+else
+VERSION_FLAGS += -g
+endif
+endif
+
+CCFLAGS = $(CCFLAGS_LOC) $(CCFLAGS_TOP) $(CXXFLAGS_TOP) $(USER_FLAGS) $(VERSION_FLAGS) $(CCFLAGS_WARNINGS)
+CFLAGS = $(CCFLAGS_LOC) $(CCFLAGS_TOP) $(C_FLAGS_TOP) $(USER_FLAGS) $(VERSION_FLAGS) $(CCFLAGS_WARNINGS)
+
+LDFLAGS_TOP =
+
+LDFLAGS = $(LDFLAGS_LOC) $(LDFLAGS_TOP)
+
+LDLIBS = $(LDLIBS_LOC) $(LDLIBS_TOP)
+
+LINK.cc = $(PURE) $(C++) $(CCFLAGS) $(LDFLAGS)
+
+LINK.c = $(PURE) $(CC) $(CFLAGS) $(LDFLAGS)
+
+#LDFLAGS_LAST = -Wl,-Bstatic -lstdc++ -Wl,-Bdynamic
+LDFLAGS_LAST = -lstdc++
+
diff --git a/ndb/config/Defs.OSE.PPC750.DIAB.mk b/ndb/config/Defs.OSE.PPC750.DIAB.mk
new file mode 100644
index 00000000000..8773021a152
--- /dev/null
+++ b/ndb/config/Defs.OSE.PPC750.DIAB.mk
@@ -0,0 +1,47 @@
+###
+#
+# Defines
+SHELL := /bin/sh
+
+C++ := dplus
+CC := dcc
+AR_RCS := $(PURE) ar rcs
+SO := dar -r
+
+MAKEDEPEND := g++ -M -nostdinc
+PIC :=
+
+RPCGENFLAGS := -MA -C -N
+
+###
+#
+# Flags
+#
+CCFLAGS_INCLUDE = -I/vobs/cello/cls/rtosi_if/include -I/vobs/cello/cls/rtosi_if/include.mp750 -I/vobs/cello/cls/rtosi_if/include.ppc
+CCFLAGS_TOP = -tPPC750EH -DBIG_ENDIAN -D_BIG_ENDIAN -DPPC -DPPC750 -DOSE_DELTA -DMP -Xlint -Xforce-prototypes -DINLINE=__inline__ -Xansi -Xsmall-data=0 -Xsmall-const=0 -Xstrings-in-text
+
+ifeq (RELEASE, $(NDB_VERSION))
+VERSION_FLAGS += -XO
+else
+ifeq (RELEASE_TRACE, $(NDB_VERSION))
+VERSION_FLAGS += -XO -g
+else
+VERSION_FLAGS += -g
+endif
+endif
+
+CCFLAGS = $(CCFLAGS_LOC) $(CCFLAGS_TOP) $(USER_FLAGS) $(VERSION_FLAGS) $(CCFLAGS_INCLUDE)
+CFLAGS = $(CCFLAGS_LOC) $(CCFLAGS_TOP) $(USER_FLAGS) $(VERSION_FLAGS) $(CCFLAGS_INCLUDE)
+
+LDFLAGS_TOP =
+
+LDFLAGS = $(LDFLAGS_LOC) $(LDFLAGS_TOP)
+
+LDLIBS = $(LDLIBS_LOC) $(LDLIBS_TOP)
+
+LINK.cc = $(PURE) $(C++) $(CCFLAGS) $(LDFLAGS)
+
+LINK.c = $(PURE) $(CC) $(CFLAGS) $(LDFLAGS)
+
+
+
diff --git a/ndb/config/Defs.RELEASE.mk b/ndb/config/Defs.RELEASE.mk
new file mode 100644
index 00000000000..fad72d53a43
--- /dev/null
+++ b/ndb/config/Defs.RELEASE.mk
@@ -0,0 +1,3 @@
+
+VERSION_FLAGS := -DNDB_RELEASE -DUSE_EMULATED_JAM -DNDEBUG
+
diff --git a/ndb/config/Defs.RELEASE_TRACE.mk b/ndb/config/Defs.RELEASE_TRACE.mk
new file mode 100644
index 00000000000..06726f282e4
--- /dev/null
+++ b/ndb/config/Defs.RELEASE_TRACE.mk
@@ -0,0 +1,3 @@
+
+VERSION_FLAGS := -DNDB_RELEASE -DUSE_EMULATED_JAM -DNDEBUG -DVM_TRACE -DERROR_INSERT -DARRAY_GUARD
+
diff --git a/ndb/config/Defs.SIMCELLO.SOFTOSE.GCC.mk b/ndb/config/Defs.SIMCELLO.SOFTOSE.GCC.mk
new file mode 100644
index 00000000000..8d73e7a752b
--- /dev/null
+++ b/ndb/config/Defs.SIMCELLO.SOFTOSE.GCC.mk
@@ -0,0 +1,53 @@
+###
+#
+# Defines
+SHELL := /bin/sh
+
+C++ := g++
+CC := gcc
+AR_RCS := $(PURE) ar rcs
+SO := g++ -shared -o
+
+MAKEDEPEND := g++ -M
+PIC := -fPIC
+
+###
+#
+# Flags
+#
+NDB_STRDUP := Y
+CCFLAGS_WARNINGS = -Wall -pedantic -Wno-sign-compare
+CC_FLAGS_OSE = -DSPARC -DSIM -DOSE_DELTA -DMP
+CCFLAGS_TOP = $(CC_FLAGS_OSE) $(CC_FLAGS_WARNINGS) -DNDB_STRDUP
+
+ifeq (RELEASE, $(NDB_VERSION))
+VERSION_FLAGS += -O3
+else
+ifeq (RELEASE_TRACE, $(NDB_VERSION))
+VERSION_FLAGS += -O3 -g
+else
+VERSION_FLAGS += -g
+endif
+endif
+
+
+CCFLAGS_LOC_OSE= -I/vobs/cello/cls/rtosi_if/include.sparc
+
+
+CCFLAGS = $(CCFLAGS_LOC_OSE) $(CCFLAGS_LOC) $(CCFLAGS_TOP) $(USER_FLAGS) $(VERSION_FLAGS) $(CCFLAGS_WARNINGS)
+CFLAGS = $(CCFLAGS_LOC_OSE) $(CCFLAGS_LOC) $(CCFLAGS_TOP) $(USER_FLAGS) $(VERSION_FLAGS) $(CCFLAGS_WARNINGS)
+
+LDLIBS_LOC = -L$(NDB_TOP)/lib -L$(OSE_LOC)/sfk-solaris2/lib -L$(OSE_LOC)/sfk-solaris2/krn-solaris2/lib
+
+LDLIBS_TOP =
+
+LDFLAGS = $(LDFLAGS_LOC) $(LDFLAGS_TOP)
+
+LDLIBS = $(LDLIBS_LOC) $(LDLIBS_TOP)
+
+LINK.cc = $(PURE) $(C++) $(CCFLAGS) $(LDFLAGS)
+
+LINK.c = $(PURE) $(CC) $(LDFLAGS)
+
+
+
diff --git a/ndb/config/Defs.SOFTOSE.SPARC.GCC.mk b/ndb/config/Defs.SOFTOSE.SPARC.GCC.mk
new file mode 100644
index 00000000000..6788fa956bf
--- /dev/null
+++ b/ndb/config/Defs.SOFTOSE.SPARC.GCC.mk
@@ -0,0 +1,57 @@
+###
+#
+# Defines
+SHELL := /bin/sh
+
+C++ := g++
+CC := gcc
+AR_RCS := $(PURE) ar rcs
+SO := g++ -shared -o
+
+MAKEDEPEND := g++ -M
+PIC := -fPIC
+
+###
+#
+# Flags
+#
+NDB_STRDUP := Y
+CCFLAGS_WARNINGS = -Wno-long-long -Wall -pedantic -Wno-sign-compare -ansi
+CC_FLAGS_OSE = -DUSE_OSEDEF_H -DOSE_DELTA -DOS_DEBUG -DBIG_ENDIAN
+CCFLAGS_TOP = $(CC_FLAGS_OSE) $(CC_FLAGS_WARNINGS) -DNDB_STRDUP
+
+ifeq (RELEASE, $(NDB_VERSION))
+VERSION_FLAGS += -O3
+else
+ifeq (RELEASE_TRACE, $(NDB_VERSION))
+VERSION_FLAGS += -O3 -g
+else
+VERSION_FLAGS += -g -DOS_DEBUG
+endif
+endif
+
+OSE_LOC = /opt/as/OSE/OSE4.3.1
+
+CCFLAGS_LOC_OSESTD = -I$(OSE_LOC)/sfk-solaris2/std-include
+CCFLAGS_LOC_OSE = -I$(OSE_LOC)/sfk-solaris2/include -I$(OSE_LOC)/sfk-solaris2/krn-solaris2/include -I$(NDB_TOP)/src/env/softose
+
+
+CCFLAGS = $(CCFLAGS_LOC_OSE) $(CCFLAGS_LOC_OSESTD) $(CCFLAGS_LOC) $(CCFLAGS_TOP) $(USER_FLAGS) $(VERSION_FLAGS) $(CCFLAGS_WARNINGS)
+CFLAGS = $(CCFLAGS_LOC_OSE) $(CCFLAGS_LOC_OSESTD) $(CCFLAGS_LOC) $(CCFLAGS_TOP) $(USER_FLAGS) $(VERSION_FLAGS) $(CCFLAGS_WARNINGS)
+
+LDLIBS_LOC = -L$(NDB_TOP)/lib -L$(OSE_LOC)/sfk-solaris2/lib -L$(OSE_LOC)/sfk-solaris2/krn-solaris2/lib
+
+LDLIBS_TOP =
+
+LDLIBS_LAST = -lsoftose_env -lsoftose_krn -llnh -lefs -lshell -lfss -ltosv -lrtc -lheap -linetutil -linetapi -lsoftose -lsoftose_env -lsoftose_krn -losepthread -lrtc -lnsl -lsocket -lpthread -lcrt -lm
+
+LDFLAGS = $(LDFLAGS_LOC) $(LDFLAGS_TOP)
+
+LDLIBS = $(LDLIBS_LOC) $(LDLIBS_TOP)
+
+LINK.cc = $(PURE) $(C++) $(CCFLAGS) $(LDFLAGS)
+
+LINK.c = $(PURE) $(CC) $(LDFLAGS)
+
+
+
diff --git a/ndb/config/Defs.SOLARIS.SPARC.FORTE6.mk b/ndb/config/Defs.SOLARIS.SPARC.FORTE6.mk
new file mode 100644
index 00000000000..8a95205703d
--- /dev/null
+++ b/ndb/config/Defs.SOLARIS.SPARC.FORTE6.mk
@@ -0,0 +1,54 @@
+###
+#
+# Defines
+SHELL := /bin/sh
+
+C++ := CC
+CC := /opt/as/forte6/SUNWspro/bin/cc
+AR_RCS := $(PURE) CC -xar -o
+SO := CC -G -z text -o
+
+MAKEDEPEND := CC -xM1
+PIC := -KPIC
+ETAGS := etags
+CTAGS := ctags
+
+RPCGENFLAGS := -MA -C -N
+
+###
+#
+# Flags
+
+CCFLAGS_TOP = -mt -DSOLARIS -D_REENTRANT -D_POSIX_PTHREAD_SEMANTICS
+
+ifneq ($(PURE),)
+ CCFLAGS_TOP += -xs
+ CCFLAGS_TOP += -DNDB_PURIFY
+endif
+
+ifeq (RELEASE, $(NDB_VERSION))
+VERSION_FLAGS += -xO3
+else
+ifeq (RELEASE_TRACE, $(NDB_VERSION))
+VERSION_FLAGS += -xO3 -g
+else
+VERSION_FLAGS += -g
+endif
+endif
+
+CCFLAGS = $(CCFLAGS_LOC) $(CCFLAGS_TOP) $(USER_FLAGS) $(VERSION_FLAGS)
+CFLAGS = $(CCFLAGS_LOC) $(CCFLAGS_TOP) $(USER_FLAGS) $(VERSION_FLAGS)
+
+LDFLAGS_TOP = -L/opt/as/forte6/SUNWspro/WS6/lib -lpthread -lsocket -lnsl -lrt
+
+LDFLAGS = $(LDFLAGS_LOC) $(LDFLAGS_TOP)
+
+LDLIBS = $(LDLIBS_LOC) $(LDLIBS_TOP)
+
+LINK.cc = $(PURE) $(C++) -xildoff $(CCFLAGS) $(LDFLAGS)
+
+LINK.c = $(PURE) $(CC) $(CFLAGS) $(LDFLAGS)
+
+
+
+
diff --git a/ndb/config/Defs.SOLARIS.SPARC.GCC.mk b/ndb/config/Defs.SOLARIS.SPARC.GCC.mk
new file mode 100644
index 00000000000..25920515278
--- /dev/null
+++ b/ndb/config/Defs.SOLARIS.SPARC.GCC.mk
@@ -0,0 +1,54 @@
+###
+#
+# Defines
+SHELL := /bin/sh
+
+CXX := gcc
+C++ := g++
+CC := gcc
+AR_RCS := ar rcs
+SO := gcc -G -o
+
+#GXX_VERSION := $(shell gcc --version | sed -e 's,.*\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\).*,\1,1' -e q)
+
+MAKEDEPEND := g++ -M
+PIC := -fPIC
+
+RPCGENFLAGS := -MA -C -N
+ETAGS := etags
+CTAGS := ctags
+
+###
+#
+# Flags
+#
+CCFLAGS_WARNINGS = -Wno-long-long -W -Wall -pedantic
+# -Wno-sign-compare Use this flag if you are annoyed with all the warnings
+CCFLAGS_TOP = -DSOLARIS -D_REENTRANT -D_POSIX_PTHREAD_SEMANTICS -DNO_COMMAND_HANDLER
+CCFLAGS_TOP += -fno-rtti
+
+ifeq (RELEASE, $(NDB_VERSION))
+VERSION_FLAGS += -O2
+else
+ifeq (RELEASE_TRACE, $(NDB_VERSION))
+VERSION_FLAGS += -O2 -g
+else
+VERSION_FLAGS += -g
+endif
+endif
+
+CCFLAGS = $(CCFLAGS_LOC) $(CCFLAGS_TOP) $(USER_FLAGS) $(VERSION_FLAGS) $(CCFLAGS_WARNINGS)
+CFLAGS = $(CCFLAGS_LOC) $(CCFLAGS_TOP) $(USER_FLAGS) $(VERSION_FLAGS) $(CCFLAGS_WARNINGS)
+
+LDFLAGS_TOP =
+
+LDFLAGS = $(LDFLAGS_LOC) $(LDFLAGS_TOP)
+
+LDLIBS = $(LDLIBS_LOC) $(LDLIBS_TOP)
+
+LINK.cc = $(PURE) $(CXX) $(CCFLAGS) $(LDFLAGS)
+
+LINK.c = $(PURE) $(CC) $(CFLAGS) $(LDFLAGS)
+
+LDFLAGS_LAST = -lpthread -lsocket -lnsl -lrt -Wl,-Bstatic -lstdc++ -Wl,-Bdynamic
+
diff --git a/ndb/config/Defs.SOLARIS.SPARC_64.GCC.mk b/ndb/config/Defs.SOLARIS.SPARC_64.GCC.mk
new file mode 100644
index 00000000000..2b8b9d4cc24
--- /dev/null
+++ b/ndb/config/Defs.SOLARIS.SPARC_64.GCC.mk
@@ -0,0 +1,53 @@
+###
+#
+# Note: LD_LIBRARY_PATH must be set for /usr/local/lib/sparcv9 to dynamically link
+# to 64-bit libraries
+#
+# Defines
+SHELL := /bin/sh
+
+C++ := g++ -m64
+CC := gcc -m64
+AR_RCS := ar rcs
+SO := g++ -m64 -shared -o
+
+MAKEDEPEND := g++ -M
+PIC := -fPIC
+
+RPCGENFLAGS := -MA -C -N
+ETAGS := etags
+CTAGS := ctags
+
+###
+#
+# Flags
+#
+CCFLAGS_WARNINGS = -Wno-long-long -W -Wall -pedantic
+# -Wno-sign-compare Use this flag if you are annoyed with all the warnings
+CCFLAGS_TOP = -DSOLARIS -D_REENTRANT -D_POSIX_PTHREAD_SEMANTICS -DNO_COMMAND_HANDLER
+CCFLAGS_TOP += -fno-rtti
+
+ifeq (RELEASE, $(NDB_VERSION))
+VERSION_FLAGS += -O2
+else
+ifeq (RELEASE_TRACE, $(NDB_VERSION))
+VERSION_FLAGS += -O2 -g
+else
+VERSION_FLAGS += -g
+endif
+endif
+
+CCFLAGS = $(CCFLAGS_LOC) $(CCFLAGS_TOP) $(USER_FLAGS) $(VERSION_FLAGS) $(CCFLAGS_WARNINGS)
+CFLAGS = $(CCFLAGS_LOC) $(CCFLAGS_TOP) $(USER_FLAGS) $(VERSION_FLAGS) $(CCFLAGS_WARNINGS)
+
+LDFLAGS_TOP = -lpthread -lsocket -lnsl -lrt
+
+LDFLAGS = $(LDFLAGS_LOC) $(LDFLAGS_TOP)
+
+LDLIBS = $(LDLIBS_LOC) $(LDLIBS_TOP)
+
+LINK.cc = $(PURE) $(C++) $(CCFLAGS) $(LDFLAGS)
+
+LINK.c = $(PURE) $(CC) $(CFLAGS) $(LDFLAGS)
+
+
diff --git a/ndb/config/Defs.SOLARIS6.SPARC.GCC.mk b/ndb/config/Defs.SOLARIS6.SPARC.GCC.mk
new file mode 100644
index 00000000000..f1c570ba101
--- /dev/null
+++ b/ndb/config/Defs.SOLARIS6.SPARC.GCC.mk
@@ -0,0 +1,53 @@
+###
+#
+# Defines
+SHELL := /bin/sh
+
+C++ := g++
+CC := gcc
+AR_RCS := $(PURE) ar rcs
+SO := g++ -shared -o
+
+MAKEDEPEND := g++ -M
+PIC := -fPIC
+
+RPCGENFLAGS := -MA -C -N
+
+###
+#
+# Flags
+#
+CCFLAGS_WARNINGS = -Wno-long-long -Wall -pedantic
+# -Wno-sign-compare Use this flag if you are annoyed with all the warnings
+CCFLAGS_TOP = -DSOLARIS -D_REENTRANT -D_POSIX_PTHREAD_SEMANTICS -DNO_COMMAND_HANDLER
+
+# SOLARIS 6 should use the same settings as SOLARIS7
+# if something in the SOLARIS 7 port does not work for SOLARIS 6
+# it can be ifdefed using
+# if ! defined NDB_SOLRIS6
+CCFLAGS_TOP = -DNDB_SOLARIS
+
+ifeq (RELEASE, $(NDB_VERSION))
+VERSION_FLAGS += -O3
+else
+ifeq (RELEASE_TRACE, $(NDB_VERSION))
+VERSION_FLAGS += -O3
+else
+VERSION_FLAGS += -g
+endif
+endif
+
+CCFLAGS = $(CCFLAGS_LOC) $(CCFLAGS_TOP) $(USER_FLAGS) $(VERSION_FLAGS) $(CCFLAGS_WARNINGS)
+CFLAGS = $(CCFLAGS_LOC) $(CCFLAGS_TOP) $(USER_FLAGS) $(VERSION_FLAGS) $(CCFLAGS_WARNINGS)
+
+LDFLAGS_TOP = -lpthread -lsocket -lnsl -lposix4
+
+LDFLAGS = $(LDFLAGS_LOC) $(LDFLAGS_TOP)
+
+LDLIBS = $(LDLIBS_LOC) $(LDLIBS_TOP)
+
+LINK.cc = $(PURE) $(C++) $(CCFLAGS) $(LDFLAGS)
+
+LINK.c = $(PURE) $(CC) $(CFLAGS) $(LDFLAGS)
+
+
diff --git a/ndb/config/Defs.TRU64X.ALPHA.GCC.mk b/ndb/config/Defs.TRU64X.ALPHA.GCC.mk
new file mode 100644
index 00000000000..ae975fb2cb8
--- /dev/null
+++ b/ndb/config/Defs.TRU64X.ALPHA.GCC.mk
@@ -0,0 +1,49 @@
+###
+#
+# Defines
+SHELL := /bin/sh
+
+C++ := g++
+CC := gcc
+AR_RCS := $(PURE) ar rcs
+SO := g++ -shared -o
+
+MAKEDEPEND := g++ -M
+PIC := -fPIC
+
+RPCGENFLAGS := -M -C -N
+
+ETAGS := etags
+CTAGS := ctags
+
+###
+#
+# Flags
+#
+CCFLAGS_WARNINGS = -Wno-long-long -Wall #-pedantic
+# Add these for more warnings -Weffc++ -W
+CCFLAGS_TOP = -D_REENTRANT -D_POSIX_PTHREAD_SEMANTICS
+CCFLAGS_TOP += -fno-rtti
+
+ifeq (RELEASE, $(NDB_VERSION))
+VERSION_FLAGS += -O3
+else
+ifeq (RELEASE_TRACE, $(NDB_VERSION))
+VERSION_FLAGS += -O3 -g
+else
+VERSION_FLAGS += -g
+endif
+endif
+
+CCFLAGS = $(CCFLAGS_LOC) $(CCFLAGS_TOP) $(USER_FLAGS) $(VERSION_FLAGS) $(CCFLAGS_WARNINGS)
+CFLAGS = $(CCFLAGS_LOC) $(CCFLAGS_TOP) $(USER_FLAGS) $(VERSION_FLAGS) $(CCFLAGS_WARNINGS)
+
+LDFLAGS_TOP = -lpthread -lrt
+
+LDFLAGS = $(LDFLAGS_LOC) $(LDFLAGS_TOP)
+
+LDLIBS = $(LDLIBS_LOC) $(LDLIBS_TOP)
+
+LINK.cc = $(PURE) $(C++) $(CCFLAGS) $(LDFLAGS)
+
+LINK.c = $(PURE) $(CC) $(CFLAGS) $(LDFLAGS)
diff --git a/ndb/config/Defs.WIN32.x86.VC7.mk b/ndb/config/Defs.WIN32.x86.VC7.mk
new file mode 100644
index 00000000000..e66dacb78e7
--- /dev/null
+++ b/ndb/config/Defs.WIN32.x86.VC7.mk
@@ -0,0 +1,61 @@
+###
+#
+# Defines
+SHELL := /bin/sh
+
+
+DEFINES = -D_WIN32 -D_M_IX86=600 -D_MSC_EXTENSIONS=0 -U_cdecl -D_MT
+#
+MAKEDEPEND = g++ -M --nostdinc --nostdinc++ -I"`cygpath -u "$(MSVCDIR)\include"`" -I"`cygpath -u "$(MSVCDIR)\PlatformSDK\include"`" $(DEFINES)
+PIC = -D_LIB
+NON_PIC = -D_LIB
+
+RPCGENFLAGS := -M -C -N
+
+ETAGS := etags
+CTAGS := ctags
+
+###
+#
+# Flags
+#
+CCFLAGS_WARNINGS =
+CCFLAGS_TOP =
+CCFLAGS_LOC =
+CCFLAGS_WIN = -DWIN32 -D_WIN32_WINNT=0x0500 -DWINVER=0x0500 -D_MBCS -DNO_COMMAND_HANDLER
+CCFLAGS_WIN += -W3 -EHsc
+#CCFLAGS_WIN += -clr
+
+ifeq (RELEASE, $(NDB_VERSION))
+CCFLAGS_WIN += -MT -O2 -Ob1 -DNO_DEBUG_MESSAGES
+else
+ifeq (RELEASE_TRACE, $(NDB_VERSION))
+CCFLAGS_WIN += -MT -O2 -Ob1 -DNO_DEBUG_MESSAGES
+else
+CCFLAGS_WIN += -MTd -Zi -Od -GS -D_DEBUG
+endif
+endif
+
+C++ = cl -nologo $(CCFLAGS_WIN)
+CC = cl -nologo $(CCFLAGS_WIN)
+
+CCFLAGS = $(CCFLAGS_LOC) $(CCFLAGS_TOP) $(USER_FLAGS) $(VERSION_FLAGS) $(CCFLAGS_WARNINGS)
+CFLAGS = $(CCFLAGS_LOC) $(CCFLAGS_TOP) $(USER_FLAGS) $(VERSION_FLAGS) $(CCFLAGS_WARNINGS)
+
+LDFLAGS_TOP =
+
+LDFLAGS = $(LDFLAGS_LOC) $(LDFLAGS_TOP)
+
+LDLIBS = $(LDLIBS_LOC) $(LDLIBS_TOP)
+
+WIN_LIBS := Ws2_32.lib Advapi32.lib
+
+ifeq (RELEASE, $(NDB_VERSION))
+LINK.cc = link -INCREMENTAL:NO -NOLOGO -LARGEADDRESSAWARE $(WIN_LIBS)
+else
+ifeq (RELEASE_TRACE, $(NDB_VERSION))
+LINK.cc = link -INCREMENTAL:NO -NOLOGO -LARGEADDRESSAWARE $(WIN_LIBS)
+else
+LINK.cc = link -INCREMENTAL -NOLOGO -DEBUG -LARGEADDRESSAWARE $(WIN_LIBS)
+endif
+endif
diff --git a/ndb/config/GuessConfig.sh b/ndb/config/GuessConfig.sh
new file mode 100755
index 00000000000..a1ecdecfa93
--- /dev/null
+++ b/ndb/config/GuessConfig.sh
@@ -0,0 +1,113 @@
+#! /bin/sh
+
+if [ -z "$NDB_TOP" ]
+then
+ echo "You have not set NDB_TOP. Exiting" 1>&2
+ exit 1
+fi
+
+if [ -z "$NDB_SCI" ]
+then
+ NDB_SCI=N
+fi
+
+os=`uname -s`
+case $os in
+Linux)
+ NDB_OS=LINUX
+ NDB_ARCH=x86
+ NDB_COMPILER=GCC
+ ;;
+Darwin)
+ NDB_OS=MACOSX
+ NDB_ARCH=POWERPC
+ NDB_COMPILER=GCC
+ ;;
+HP-UX)
+ NDB_OS=HPUX
+ NDB_ARCH=HPPA
+ NDB_COMPILER=GCC
+ ;;
+CYGWIN_NT-5.0)
+ NDB_OS=WIN32
+ NDB_ARCH=x86
+ NDB_COMPILER=VC7
+ ;;
+*)
+ if [ "$os" = "SunOS" ] && [ `uname -r` = "5.6" ]
+ then
+ NDB_OS=OSE
+ NDB_ARCH=PPC750
+ NDB_COMPILER=DIAB
+ else
+ NDB_OS=SOLARIS
+ NDB_ARCH=SPARC
+ NDB_COMPILER=GCC
+ fi;;
+esac
+
+if [ -z "$NDB_ODBC" ]
+then
+ val=N
+ if [ -f /usr/include/sqlext.h -o -f /usr/local/include/sqlext.h ]
+ then
+ val=Y
+ fi
+ case $NDB_OS in
+ LINUX)
+ NDB_ODBC=$val
+ ;;
+ MACOSX)
+ NDB_ODBC=$val
+ ;;
+ *)
+ NDB_ODBC=N
+ ;;
+ esac
+fi
+
+
+mch=`uname -m`
+case $mch in
+x86_64)
+ NDB_ARCH=x86_64
+ ;;
+*)
+ ;;
+esac
+
+if [ -f $NDB_TOP/config/Makefile ]
+then
+TERMCAP_LIB=`grep TERMCAP_LIB $NDB_TOP/config/Makefile | sed -e s,"TERMCAP_LIB.*=.*-l","",g`
+fi
+if [ "$TERMCAP_LIB" = "" ]
+then
+TERMCAP_LIB=termcap
+fi
+
+# Allow for selecting GCC, but must be 2nd parameter
+if [ $# -gt 1 -a "$2" = "-GCC" ]
+then
+ NDB_COMPILER=GCC
+fi
+
+(
+ echo "# This file was automatically generated `date`"
+ echo "NDB_OS := $NDB_OS"
+ echo "NDB_ARCH := $NDB_ARCH"
+ echo "NDB_COMPILER := $NDB_COMPILER"
+
+ if [ $# -gt 0 -a "$1" = "-R" ]
+ then
+ echo "NDB_VERSION := RELEASE"
+ else
+ echo "NDB_VERSION := DEBUG"
+ fi
+
+ echo "NDB_SCI := $NDB_SCI"
+ echo "NDB_ODBC := $NDB_ODBC"
+ echo "TERMCAP_LIB := $TERMCAP_LIB"
+) > $NDB_TOP/config/config.mk
+
+exit 0
+
diff --git a/ndb/config/Makefile.am b/ndb/config/Makefile.am
new file mode 100644
index 00000000000..b5fd81814a1
--- /dev/null
+++ b/ndb/config/Makefile.am
@@ -0,0 +1,31 @@
+# Copyright (C) 2003 MySQL AB
+#
+# 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 2 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, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+# Process this file with automake to create Makefile.in
+
+AUTOMAKE_OPTIONS = foreign
+
+# These are built from source in the Docs directory
+EXTRA_DIST =
+SUBDIRS =
+
+# Relink after clean
+linked_sources =
+
+CLEANFILES = $(linked_sources)
+
+# This is just so that the linking is done early.
+config.h:
diff --git a/ndb/config/acinclude.m4 b/ndb/config/acinclude.m4
new file mode 100644
index 00000000000..b9edaf801ed
--- /dev/null
+++ b/ndb/config/acinclude.m4
@@ -0,0 +1,1513 @@
+# Local macros for automake & autoconf
+
+AC_DEFUN(MYSQL_CHECK_LIBEDIT_INTERFACE,[
+ AC_CACHE_CHECK([libedit variant of rl_completion_entry_function], mysql_cv_libedit_interface,
+ AC_TRY_COMPILE(
+ [
+ #include "stdio.h"
+ #include "readline/readline.h"
+ ],
+ [
+ char res= *(*rl_completion_entry_function)(0,0);
+ completion_matches(0,0);
+ ],
+ [
+ mysql_cv_libedit_interface=yes
+ AC_DEFINE_UNQUOTED(USE_LIBEDIT_INTERFACE)
+ ],
+ [mysql_cv_libedit_interface=no]
+ )
+ )
+])
+
+AC_DEFUN(MYSQL_CHECK_NEW_RL_INTERFACE,[
+ AC_CACHE_CHECK([defined rl_compentry_func_t and rl_completion_func_t], mysql_cv_new_rl_interface,
+ AC_TRY_COMPILE(
+ [
+ #include "stdio.h"
+ #include "readline/readline.h"
+ ],
+ [
+ rl_completion_func_t *func1= (rl_completion_func_t*)0;
+ rl_compentry_func_t *func2= (rl_compentry_func_t*)0;
+ ],
+ [
+ mysql_cv_new_rl_interface=yes
+ AC_DEFINE_UNQUOTED(USE_NEW_READLINE_INTERFACE)
+ ],
+ [mysql_cv_new_rl_interface=no]
+ )
+ )
+])
+
+# A local version of AC_CHECK_SIZEOF that includes sys/types.h
+dnl MYSQL_CHECK_SIZEOF(TYPE [, CROSS-SIZE])
+AC_DEFUN(MYSQL_CHECK_SIZEOF,
+[changequote(<<, >>)dnl
+dnl The name to #define.
+define(<>, translit(sizeof_$1, [a-z *], [A-Z_P]))dnl
+dnl The cache variable name.
+define(<>, translit(ac_cv_sizeof_$1, [ *], [_p]))dnl
+changequote([, ])dnl
+AC_MSG_CHECKING(size of $1)
+AC_CACHE_VAL(AC_CV_NAME,
+[AC_TRY_RUN([#include
+#include
+#if STDC_HEADERS
+#include
+#include
+#endif
+main()
+{
+ FILE *f=fopen("conftestval", "w");
+ if (!f) exit(1);
+ fprintf(f, "%d\n", sizeof($1));
+ exit(0);
+}], AC_CV_NAME=`cat conftestval`, AC_CV_NAME=0, ifelse([$2], , , AC_CV_NAME=$2))])dnl
+AC_MSG_RESULT($AC_CV_NAME)
+AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME)
+undefine([AC_TYPE_NAME])dnl
+undefine([AC_CV_NAME])dnl
+])
+
+#---START: Used in for client configure
+AC_DEFUN(MYSQL_TYPE_ACCEPT,
+[ac_save_CXXFLAGS="$CXXFLAGS"
+AC_CACHE_CHECK([base type of last arg to accept], mysql_cv_btype_last_arg_accept,
+AC_LANG_SAVE
+AC_LANG_CPLUSPLUS
+if test "$ac_cv_prog_gxx" = "yes"
+then
+ CXXFLAGS=`echo $CXXFLAGS -Werror | sed 's/-fbranch-probabilities//'`
+fi
+mysql_cv_btype_last_arg_accept=none
+[AC_TRY_COMPILE([#if defined(inline)
+#undef inline
+#endif
+#include
+#include
+#include
+],
+[int a = accept(1, (struct sockaddr *) 0, (socklen_t *) 0); return (a != 0);],
+mysql_cv_btype_last_arg_accept=socklen_t)]
+if test "$mysql_cv_btype_last_arg_accept" = "none"; then
+[AC_TRY_COMPILE([#if defined(inline)
+#undef inline
+#endif
+#include
+#include
+#include
+],
+[int a = accept(1, (struct sockaddr *) 0, (size_t *) 0); return (a != 0);],
+mysql_cv_btype_last_arg_accept=size_t)]
+fi
+if test "$mysql_cv_btype_last_arg_accept" = "none"; then
+mysql_cv_btype_last_arg_accept=int
+fi)
+AC_LANG_RESTORE
+AC_DEFINE_UNQUOTED(SOCKET_SIZE_TYPE, $mysql_cv_btype_last_arg_accept)
+CXXFLAGS="$ac_save_CXXFLAGS"
+])
+#---END:
+
+dnl Find type of qsort
+AC_DEFUN(MYSQL_TYPE_QSORT,
+[AC_CACHE_CHECK([return type of qsort], mysql_cv_type_qsort,
+[AC_TRY_COMPILE([#include
+#ifdef __cplusplus
+extern "C"
+#endif
+void qsort(void *base, size_t nel, size_t width,
+ int (*compar) (const void *, const void *));
+],
+[int i;], mysql_cv_type_qsort=void, mysql_cv_type_qsort=int)])
+AC_DEFINE_UNQUOTED(RETQSORTTYPE, $mysql_cv_type_qsort)
+if test "$mysql_cv_type_qsort" = "void"
+then
+ AC_DEFINE_UNQUOTED(QSORT_TYPE_IS_VOID, 1)
+fi
+])
+
+AC_DEFUN(MYSQL_TIMESPEC_TS,
+[AC_CACHE_CHECK([if struct timespec has a ts_sec member], mysql_cv_timespec_ts,
+[AC_TRY_COMPILE([#include
+#ifdef __cplusplus
+extern "C"
+#endif
+],
+[struct timespec abstime;
+
+abstime.ts_sec = time(NULL)+1;
+abstime.ts_nsec = 0;
+], mysql_cv_timespec_ts=yes, mysql_cv_timespec_ts=no)])
+if test "$mysql_cv_timespec_ts" = "yes"
+then
+ AC_DEFINE(HAVE_TIMESPEC_TS_SEC)
+fi
+])
+
+AC_DEFUN(MYSQL_TZNAME,
+[AC_CACHE_CHECK([if we have tzname variable], mysql_cv_tzname,
+[AC_TRY_COMPILE([#include
+#ifdef __cplusplus
+extern "C"
+#endif
+],
+[ tzset();
+ return tzname[0] != 0;
+], mysql_cv_tzname=yes, mysql_cv_tzname=no)])
+if test "$mysql_cv_tzname" = "yes"
+then
+ AC_DEFINE(HAVE_TZNAME)
+fi
+])
+
+AC_DEFUN(MYSQL_CHECK_ZLIB_WITH_COMPRESS, [
+save_LIBS="$LIBS"
+LIBS="-l$1 $LIBS"
+AC_CACHE_CHECK([if libz with compress], mysql_cv_compress,
+[AC_TRY_RUN([#include
+#ifdef __cplusplus
+extern "C"
+#endif
+int main(int argv, char **argc)
+{
+ return 0;
+}
+
+int link_test()
+{
+ return compress(0, (unsigned long*) 0, "", 0);
+}
+], mysql_cv_compress=yes, mysql_cv_compress=no)])
+if test "$mysql_cv_compress" = "yes"
+then
+ AC_DEFINE(HAVE_COMPRESS)
+else
+ LIBS="$save_LIBS"
+fi
+])
+
+#---START: Used in for client configure
+AC_DEFUN(MYSQL_CHECK_ULONG,
+[AC_MSG_CHECKING(for type ulong)
+AC_CACHE_VAL(ac_cv_ulong,
+[AC_TRY_RUN([#include
+#include
+main()
+{
+ ulong foo;
+ foo++;
+ exit(0);
+}], ac_cv_ulong=yes, ac_cv_ulong=no, ac_cv_ulong=no)])
+AC_MSG_RESULT($ac_cv_ulong)
+if test "$ac_cv_ulong" = "yes"
+then
+ AC_DEFINE(HAVE_ULONG)
+fi
+])
+
+AC_DEFUN(MYSQL_CHECK_UCHAR,
+[AC_MSG_CHECKING(for type uchar)
+AC_CACHE_VAL(ac_cv_uchar,
+[AC_TRY_RUN([#include
+#include
+main()
+{
+ uchar foo;
+ foo++;
+ exit(0);
+}], ac_cv_uchar=yes, ac_cv_uchar=no, ac_cv_uchar=no)])
+AC_MSG_RESULT($ac_cv_uchar)
+if test "$ac_cv_uchar" = "yes"
+then
+ AC_DEFINE(HAVE_UCHAR)
+fi
+])
+
+AC_DEFUN(MYSQL_CHECK_UINT,
+[AC_MSG_CHECKING(for type uint)
+AC_CACHE_VAL(ac_cv_uint,
+[AC_TRY_RUN([#include
+#include
+main()
+{
+ uint foo;
+ foo++;
+ exit(0);
+}], ac_cv_uint=yes, ac_cv_uint=no, ac_cv_uint=no)])
+AC_MSG_RESULT($ac_cv_uint)
+if test "$ac_cv_uint" = "yes"
+then
+ AC_DEFINE(HAVE_UINT)
+fi
+])
+
+
+AC_DEFUN(MYSQL_CHECK_IN_ADDR_T,
+[AC_MSG_CHECKING(for type in_addr_t)
+AC_CACHE_VAL(ac_cv_in_addr_t,
+[AC_TRY_RUN([#include
+#include
+#include
+#include
+#include
+
+int main(int argc, char **argv)
+{
+ in_addr_t foo;
+ exit(0);
+}], ac_cv_in_addr_t=yes, ac_cv_in_addr_t=no, ac_cv_in_addr_t=no)])
+AC_MSG_RESULT($ac_cv_in_addr_t)
+if test "$ac_cv_in_addr_t" = "yes"
+then
+ AC_DEFINE(HAVE_IN_ADDR_T)
+fi
+])
+
+
+AC_DEFUN(MYSQL_PTHREAD_YIELD,
+[AC_CACHE_CHECK([if pthread_yield takes zero arguments], ac_cv_pthread_yield_zero_arg,
+[AC_TRY_LINK([#define _GNU_SOURCE
+#include
+#ifdef __cplusplus
+extern "C"
+#endif
+],
+[
+ pthread_yield();
+], ac_cv_pthread_yield_zero_arg=yes, ac_cv_pthread_yield_zero_arg=yeso)])
+if test "$ac_cv_pthread_yield_zero_arg" = "yes"
+then
+ AC_DEFINE(HAVE_PTHREAD_YIELD_ZERO_ARG)
+fi
+]
+[AC_CACHE_CHECK([if pthread_yield takes 1 argument], ac_cv_pthread_yield_one_arg,
+[AC_TRY_LINK([#define _GNU_SOURCE
+#include
+#ifdef __cplusplus
+extern "C"
+#endif
+],
+[
+ pthread_yield(0);
+], ac_cv_pthread_yield_one_arg=yes, ac_cv_pthread_yield_one_arg=no)])
+if test "$ac_cv_pthread_yield_one_arg" = "yes"
+then
+ AC_DEFINE(HAVE_PTHREAD_YIELD_ONE_ARG)
+fi
+]
+)
+
+
+
+#---END:
+
+AC_DEFUN(MYSQL_CHECK_FP_EXCEPT,
+[AC_MSG_CHECKING(for type fp_except)
+AC_CACHE_VAL(ac_cv_fp_except,
+[AC_TRY_RUN([#include
+#include
+#include
+main()
+{
+ fp_except foo;
+ foo++;
+ exit(0);
+}], ac_cv_fp_except=yes, ac_cv_fp_except=no, ac_cv_fp_except=no)])
+AC_MSG_RESULT($ac_cv_fp_except)
+if test "$ac_cv_fp_except" = "yes"
+then
+ AC_DEFINE(HAVE_FP_EXCEPT)
+fi
+])
+
+# From fileutils-3.14/aclocal.m4
+
+# @defmac AC_PROG_CC_STDC
+# @maindex PROG_CC_STDC
+# @ovindex CC
+# If the C compiler in not in ANSI C mode by default, try to add an option
+# to output variable @code{CC} to make it so. This macro tries various
+# options that select ANSI C on some system or another. It considers the
+# compiler to be in ANSI C mode if it defines @code{__STDC__} to 1 and
+# handles function prototypes correctly.
+#
+# Patched by monty to only check if __STDC__ is defined. With the original
+# check it's impossible to get things to work with the Sunpro compiler from
+# Workshop 4.2
+#
+# If you use this macro, you should check after calling it whether the C
+# compiler has been set to accept ANSI C; if not, the shell variable
+# @code{am_cv_prog_cc_stdc} is set to @samp{no}. If you wrote your source
+# code in ANSI C, you can make an un-ANSIfied copy of it by using the
+# program @code{ansi2knr}, which comes with Ghostscript.
+# @end defmac
+
+AC_DEFUN(AM_PROG_CC_STDC,
+[AC_REQUIRE([AC_PROG_CC])
+AC_MSG_CHECKING(for ${CC-cc} option to accept ANSI C)
+AC_CACHE_VAL(am_cv_prog_cc_stdc,
+[am_cv_prog_cc_stdc=no
+ac_save_CC="$CC"
+# Don't try gcc -ansi; that turns off useful extensions and
+# breaks some systems' header files.
+# AIX -qlanglvl=ansi
+# Ultrix and OSF/1 -std1
+# HP-UX -Aa -D_HPUX_SOURCE
+# SVR4 -Xc -D__EXTENSIONS__
+# removed "-Xc -D__EXTENSIONS__" beacause sun c++ does not like it.
+for ac_arg in "" -qlanglvl=ansi -std1 "-Aa -D_HPUX_SOURCE"
+do
+ CC="$ac_save_CC $ac_arg"
+ AC_TRY_COMPILE(
+[#if !defined(__STDC__)
+choke me
+#endif
+/* DYNIX/ptx V4.1.3 can't compile sys/stat.h with -Xc -D__EXTENSIONS__. */
+#ifdef _SEQUENT_
+# include
+# include
+#endif
+], [
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};],
+[am_cv_prog_cc_stdc="$ac_arg"; break])
+done
+CC="$ac_save_CC"
+])
+AC_MSG_RESULT($am_cv_prog_cc_stdc)
+case "x$am_cv_prog_cc_stdc" in
+ x|xno) ;;
+ *) CC="$CC $am_cv_prog_cc_stdc" ;;
+esac
+])
+
+#
+# Check to make sure that the build environment is sane.
+#
+
+AC_DEFUN(AM_SANITY_CHECK,
+[AC_MSG_CHECKING([whether build environment is sane])
+sleep 1
+echo timestamp > conftestfile
+# Do this in a subshell so we don't clobber the current shell's
+# arguments. FIXME: maybe try `-L' hack like GETLOADAVG test?
+if (set X `ls -t $srcdir/configure conftestfile`; test "[$]2" = conftestfile)
+then
+ # Ok.
+ :
+else
+ AC_MSG_ERROR([newly created file is older than distributed files!
+Check your system clock])
+fi
+rm -f conftest*
+AC_MSG_RESULT(yes)])
+
+# Orginal from bash-2.0 aclocal.m4, Changed to use termcap last by monty.
+
+AC_DEFUN(MYSQL_CHECK_LIB_TERMCAP,
+[
+AC_CACHE_VAL(mysql_cv_termcap_lib,
+[AC_CHECK_LIB(ncurses, tgetent, mysql_cv_termcap_lib=libncurses,
+ [AC_CHECK_LIB(curses, tgetent, mysql_cv_termcap_lib=libcurses,
+ [AC_CHECK_LIB(termcap, tgetent, mysql_cv_termcap_lib=libtermcap,
+ mysql_cv_termcap_lib=NOT_FOUND)])])])
+AC_MSG_CHECKING(for termcap functions library)
+if test "$mysql_cv_termcap_lib" = "NOT_FOUND"; then
+AC_MSG_ERROR([No curses/termcap library found])
+elif test "$mysql_cv_termcap_lib" = "libtermcap"; then
+TERMCAP_LIB=-ltermcap
+elif test "$mysql_cv_termcap_lib" = "libncurses"; then
+TERMCAP_LIB=-lncurses
+else
+TERMCAP_LIB=-lcurses
+fi
+AC_MSG_RESULT($TERMCAP_LIB)
+])
+
+dnl Check type of signal routines (posix, 4.2bsd, 4.1bsd or v7)
+AC_DEFUN(MYSQL_SIGNAL_CHECK,
+[AC_REQUIRE([AC_TYPE_SIGNAL])
+AC_MSG_CHECKING(for type of signal functions)
+AC_CACHE_VAL(mysql_cv_signal_vintage,
+[
+ AC_TRY_LINK([#include ],[
+ sigset_t ss;
+ struct sigaction sa;
+ sigemptyset(&ss); sigsuspend(&ss);
+ sigaction(SIGINT, &sa, (struct sigaction *) 0);
+ sigprocmask(SIG_BLOCK, &ss, (sigset_t *) 0);
+ ], mysql_cv_signal_vintage=posix,
+ [
+ AC_TRY_LINK([#include ], [
+ int mask = sigmask(SIGINT);
+ sigsetmask(mask); sigblock(mask); sigpause(mask);
+ ], mysql_cv_signal_vintage=4.2bsd,
+ [
+ AC_TRY_LINK([
+ #include
+ RETSIGTYPE foo() { }], [
+ int mask = sigmask(SIGINT);
+ sigset(SIGINT, foo); sigrelse(SIGINT);
+ sighold(SIGINT); sigpause(SIGINT);
+ ], mysql_cv_signal_vintage=svr3, mysql_cv_signal_vintage=v7
+ )]
+ )]
+)
+])
+AC_MSG_RESULT($mysql_cv_signal_vintage)
+if test "$mysql_cv_signal_vintage" = posix; then
+AC_DEFINE(HAVE_POSIX_SIGNALS)
+elif test "$mysql_cv_signal_vintage" = "4.2bsd"; then
+AC_DEFINE(HAVE_BSD_SIGNALS)
+elif test "$mysql_cv_signal_vintage" = svr3; then
+AC_DEFINE(HAVE_USG_SIGHOLD)
+fi
+])
+
+AC_DEFUN(MYSQL_CHECK_GETPW_FUNCS,
+[AC_MSG_CHECKING(whether programs are able to redeclare getpw functions)
+AC_CACHE_VAL(mysql_cv_can_redecl_getpw,
+[AC_TRY_COMPILE([#include
+#include
+extern struct passwd *getpwent();], [struct passwd *z; z = getpwent();],
+ mysql_cv_can_redecl_getpw=yes,mysql_cv_can_redecl_getpw=no)])
+AC_MSG_RESULT($mysql_cv_can_redecl_getpw)
+if test "$mysql_cv_can_redecl_getpw" = "no"; then
+AC_DEFINE(HAVE_GETPW_DECLS)
+fi
+])
+
+AC_DEFUN(MYSQL_HAVE_TIOCGWINSZ,
+[AC_MSG_CHECKING(for TIOCGWINSZ in sys/ioctl.h)
+AC_CACHE_VAL(mysql_cv_tiocgwinsz_in_ioctl,
+[AC_TRY_COMPILE([#include
+#include ], [int x = TIOCGWINSZ;],
+ mysql_cv_tiocgwinsz_in_ioctl=yes,mysql_cv_tiocgwinsz_in_ioctl=no)])
+AC_MSG_RESULT($mysql_cv_tiocgwinsz_in_ioctl)
+if test "$mysql_cv_tiocgwinsz_in_ioctl" = "yes"; then
+AC_DEFINE(GWINSZ_IN_SYS_IOCTL)
+fi
+])
+
+AC_DEFUN(MYSQL_HAVE_FIONREAD,
+[AC_MSG_CHECKING(for FIONREAD in sys/ioctl.h)
+AC_CACHE_VAL(mysql_cv_fionread_in_ioctl,
+[AC_TRY_COMPILE([#include
+#include ], [int x = FIONREAD;],
+ mysql_cv_fionread_in_ioctl=yes,mysql_cv_fionread_in_ioctl=no)])
+AC_MSG_RESULT($mysql_cv_fionread_in_ioctl)
+if test "$mysql_cv_fionread_in_ioctl" = "yes"; then
+AC_DEFINE(FIONREAD_IN_SYS_IOCTL)
+fi
+])
+
+AC_DEFUN(MYSQL_HAVE_TIOCSTAT,
+[AC_MSG_CHECKING(for TIOCSTAT in sys/ioctl.h)
+AC_CACHE_VAL(mysql_cv_tiocstat_in_ioctl,
+[AC_TRY_COMPILE([#include
+#include ], [int x = TIOCSTAT;],
+ mysql_cv_tiocstat_in_ioctl=yes,mysql_cv_tiocstat_in_ioctl=no)])
+AC_MSG_RESULT($mysql_cv_tiocstat_in_ioctl)
+if test "$mysql_cv_tiocstat_in_ioctl" = "yes"; then
+AC_DEFINE(TIOCSTAT_IN_SYS_IOCTL)
+fi
+])
+
+AC_DEFUN(MYSQL_STRUCT_DIRENT_D_INO,
+[AC_REQUIRE([AC_HEADER_DIRENT])
+AC_MSG_CHECKING(if struct dirent has a d_ino member)
+AC_CACHE_VAL(mysql_cv_dirent_has_dino,
+[AC_TRY_COMPILE([
+#include
+#include
+#ifdef HAVE_UNISTD_H
+# include
+#endif /* HAVE_UNISTD_H */
+#if defined(HAVE_DIRENT_H)
+# include
+#else
+# define dirent direct
+# ifdef HAVE_SYS_NDIR_H
+# include
+# endif /* SYSNDIR */
+# ifdef HAVE_SYS_DIR_H
+# include
+# endif /* SYSDIR */
+# ifdef HAVE_NDIR_H
+# include
+# endif
+#endif /* HAVE_DIRENT_H */
+],[
+struct dirent d; int z; z = d.d_ino;
+], mysql_cv_dirent_has_dino=yes, mysql_cv_dirent_has_dino=no)])
+AC_MSG_RESULT($mysql_cv_dirent_has_dino)
+if test "$mysql_cv_dirent_has_dino" = "yes"; then
+AC_DEFINE(STRUCT_DIRENT_HAS_D_INO)
+fi
+])
+
+AC_DEFUN(MYSQL_TYPE_SIGHANDLER,
+[AC_MSG_CHECKING([whether signal handlers are of type void])
+AC_CACHE_VAL(mysql_cv_void_sighandler,
+[AC_TRY_COMPILE([#include
+#include
+#ifdef signal
+#undef signal
+#endif
+#ifdef __cplusplus
+extern "C"
+#endif
+void (*signal ()) ();],
+[int i;], mysql_cv_void_sighandler=yes, mysql_cv_void_sighandler=no)])dnl
+AC_MSG_RESULT($mysql_cv_void_sighandler)
+if test "$mysql_cv_void_sighandler" = "yes"; then
+AC_DEFINE(VOID_SIGHANDLER)
+fi
+])
+
+AC_DEFUN(MYSQL_CXX_BOOL,
+[
+AC_REQUIRE([AC_PROG_CXX])
+AC_MSG_CHECKING(if ${CXX} supports bool types)
+AC_CACHE_VAL(mysql_cv_have_bool,
+[
+AC_LANG_SAVE
+AC_LANG_CPLUSPLUS
+AC_TRY_COMPILE(,[bool b = true;],
+mysql_cv_have_bool=yes,
+mysql_cv_have_bool=no)
+AC_LANG_RESTORE
+])
+AC_MSG_RESULT($mysql_cv_have_bool)
+if test "$mysql_cv_have_bool" = yes; then
+AC_DEFINE(HAVE_BOOL)
+fi
+])dnl
+
+AC_DEFUN(MYSQL_STACK_DIRECTION,
+ [AC_CACHE_CHECK(stack direction for C alloca, ac_cv_c_stack_direction,
+ [AC_TRY_RUN([#include
+ int find_stack_direction ()
+ {
+ static char *addr = 0;
+ auto char dummy;
+ if (addr == 0)
+ {
+ addr = &dummy;
+ return find_stack_direction ();
+ }
+ else
+ return (&dummy > addr) ? 1 : -1;
+ }
+ int main ()
+ {
+ exit (find_stack_direction() < 0);
+ }], ac_cv_c_stack_direction=1, ac_cv_c_stack_direction=-1,
+ ac_cv_c_stack_direction=0)])
+ AC_DEFINE_UNQUOTED(STACK_DIRECTION, $ac_cv_c_stack_direction)
+])dnl
+
+AC_DEFUN(MYSQL_FUNC_ALLOCA,
+[
+# Since we have heard that alloca fails on IRIX never define it on a
+# SGI machine
+if test ! "$host_vendor" = "sgi"
+then
+ AC_REQUIRE_CPP()dnl Set CPP; we run AC_EGREP_CPP conditionally.
+ # The Ultrix 4.2 mips builtin alloca declared by alloca.h only works
+ # for constant arguments. Useless!
+ AC_CACHE_CHECK([for working alloca.h], ac_cv_header_alloca_h,
+ [AC_TRY_LINK([#include ], [char *p = alloca(2 * sizeof(int));],
+ ac_cv_header_alloca_h=yes, ac_cv_header_alloca_h=no)])
+ if test "$ac_cv_header_alloca_h" = "yes"
+ then
+ AC_DEFINE(HAVE_ALLOCA)
+ fi
+
+ AC_CACHE_CHECK([for alloca], ac_cv_func_alloca_works,
+ [AC_TRY_LINK([
+ #ifdef __GNUC__
+ # define alloca __builtin_alloca
+ #else
+ # if HAVE_ALLOCA_H
+ # include
+ # else
+ # ifdef _AIX
+ #pragma alloca
+ # else
+ # ifndef alloca /* predefined by HP cc +Olibcalls */
+ char *alloca ();
+ # endif
+ # endif
+ # endif
+ #endif
+ ], [char *p = (char *) alloca(1);],
+ ac_cv_func_alloca_works=yes, ac_cv_func_alloca_works=no)])
+ if test "$ac_cv_func_alloca_works" = "yes"; then
+ AC_DEFINE(HAVE_ALLOCA)
+ fi
+
+ if test "$ac_cv_func_alloca_works" = "no"; then
+ # The SVR3 libPW and SVR4 libucb both contain incompatible functions
+ # that cause trouble. Some versions do not even contain alloca or
+ # contain a buggy version. If you still want to use their alloca,
+ # use ar to extract alloca.o from them instead of compiling alloca.c.
+ ALLOCA=alloca.o
+ AC_DEFINE(C_ALLOCA)
+
+ AC_CACHE_CHECK(whether alloca needs Cray hooks, ac_cv_os_cray,
+ [AC_EGREP_CPP(webecray,
+ [#if defined(CRAY) && ! defined(CRAY2)
+ webecray
+ #else
+ wenotbecray
+ #endif
+ ], ac_cv_os_cray=yes, ac_cv_os_cray=no)])
+ if test "$ac_cv_os_cray" = "yes"; then
+ for ac_func in _getb67 GETB67 getb67; do
+ AC_CHECK_FUNC($ac_func, [AC_DEFINE_UNQUOTED(CRAY_STACKSEG_END, $ac_func)
+ break])
+ done
+ fi
+ fi
+ AC_SUBST(ALLOCA)dnl
+else
+ AC_MSG_RESULT("Skipped alloca tests")
+fi
+])
+
+AC_DEFUN(MYSQL_CHECK_LONGLONG_TO_FLOAT,
+[
+AC_MSG_CHECKING(if conversion of longlong to float works)
+AC_CACHE_VAL(ac_cv_conv_longlong_to_float,
+[AC_TRY_RUN([#include
+typedef long long longlong;
+main()
+{
+ longlong ll=1;
+ float f;
+ FILE *file=fopen("conftestval", "w");
+ f = (float) ll;
+ fprintf(file,"%g\n",f);
+ fclose(file);
+ exit (0);
+}], ac_cv_conv_longlong_to_float=`cat conftestval`, ac_cv_conv_longlong_to_float=0, ifelse([$2], , , ac_cv_conv_longlong_to_float=$2))])dnl
+if test "$ac_cv_conv_longlong_to_float" = "1" -o "$ac_cv_conv_longlong_to_float" = "yes"
+then
+ ac_cv_conv_longlong_to_float=yes
+else
+ ac_cv_conv_longlong_to_float=no
+fi
+AC_MSG_RESULT($ac_cv_conv_longlong_to_float)
+])
+
+AC_DEFUN(MYSQL_CHECK_CPU,
+[AC_CACHE_CHECK([if compiler supports optimizations for current cpu],
+mysql_cv_cpu,[
+
+ac_save_CFLAGS="$CFLAGS"
+if test -r /proc/cpuinfo ; then
+ cpuinfo="cat /proc/cpuinfo"
+ cpu_family=`$cpuinfo | grep 'cpu family' | cut -d ':' -f 2 | cut -d ' ' -f 2 | head -1`
+ cpu_vendor=`$cpuinfo | grep 'vendor_id' | cut -d ':' -f 2 | cut -d ' ' -f 2 | head -1`
+fi
+if test "$cpu_vendor" = "AuthenticAMD"; then
+ if test $cpu_family -ge 6; then
+ cpu_set="athlon pentiumpro k5 pentium i486 i386";
+ elif test $cpu_family -eq 5; then
+ cpu_set="k5 pentium i486 i386";
+ elif test $cpu_family -eq 4; then
+ cpu_set="i486 i386"
+ else
+ cpu_set="i386"
+ fi
+elif test "$cpu_vendor" = "GenuineIntel"; then
+ if test $cpu_family -ge 6; then
+ cpu_set="pentiumpro pentium i486 i386";
+ elif test $cpu_family -eq 5; then
+ cpu_set="pentium i486 i386";
+ elif test $cpu_family -eq 4; then
+ cpu_set="i486 i386"
+ else
+ cpu_set="i386"
+ fi
+fi
+
+for ac_arg in $cpu_set;
+do
+ CFLAGS="$ac_save_CFLAGS -mcpu=$ac_arg -march=$ac_arg -DCPU=$ac_arg"
+ AC_TRY_COMPILE([],[int i],mysql_cv_cpu=$ac_arg; break;, mysql_cv_cpu="unknown")
+done
+
+if test "$mysql_cv_cpu" = "unknown"
+then
+ CFLAGS="$ac_save_CFLAGS"
+ AC_MSG_RESULT(none)
+else
+ AC_MSG_RESULT($mysql_cv_cpu)
+fi
+]]))
+
+AC_DEFUN(MYSQL_CHECK_VIO, [
+ AC_ARG_WITH([vio],
+ [ --with-vio Include the Virtual IO support],
+ [vio="$withval"],
+ [vio=no])
+
+ if test "$vio" = "yes"
+ then
+ vio_dir="vio"
+ vio_libs="../vio/libvio.la"
+ AC_DEFINE(HAVE_VIO)
+ else
+ vio_dir=""
+ vio_libs=""
+ fi
+ AC_SUBST([vio_dir])
+ AC_SUBST([vio_libs])
+])
+
+AC_DEFUN(MYSQL_FIND_OPENSSL, [
+ incs="$1"
+ libs="$2"
+ case "$incs---$libs" in
+ ---)
+ for d in /usr/ssl/include /usr/local/ssl/include /usr/include \
+/usr/include/ssl /opt/ssl/include /opt/openssl/include \
+/usr/local/ssl/include /usr/local/include ; do
+ if test -f $d/openssl/ssl.h ; then
+ OPENSSL_INCLUDE=-I$d
+ fi
+ done
+
+ for d in /usr/ssl/lib /usr/local/ssl/lib /usr/lib/openssl \
+/usr/lib /usr/lib64 /opt/ssl/lib /opt/openssl/lib /usr/local/lib/ ; do
+ if test -f $d/libssl.a || test -f $d/libssl.so || test -f $d/libssl.dylib ; then
+ OPENSSL_LIB=$d
+ fi
+ done
+ ;;
+ ---* | *---)
+ AC_MSG_ERROR([if either 'includes' or 'libs' is specified, both must be specified])
+ ;;
+ * )
+ if test -f $incs/openssl/ssl.h ; then
+ OPENSSL_INCLUDE=-I$incs
+ fi
+ if test -f $libs/libssl.a || test -f $libs/libssl.so || test -f $libs/libssl.dylib ; then
+ OPENSSL_LIB=$libs
+ fi
+ ;;
+ esac
+
+ # On RedHat 9 we need kerberos to compile openssl
+ for d in /usr/kerberos/include
+ do
+ if test -f $d/krb5.h ; then
+ OPENSSL_KERBEROS_INCLUDE="$d"
+ fi
+ done
+
+
+ if test -z "$OPENSSL_LIB" -o -z "$OPENSSL_INCLUDE" ; then
+ echo "Could not find an installation of OpenSSL"
+ if test -n "$OPENSSL_LIB" ; then
+ if test "$IS_LINUX" = "true"; then
+ echo "Looks like you've forgotten to install OpenSSL development RPM"
+ fi
+ fi
+ exit 1
+ fi
+
+])
+
+AC_DEFUN(MYSQL_CHECK_OPENSSL, [
+AC_MSG_CHECKING(for OpenSSL)
+ AC_ARG_WITH([openssl],
+ [ --with-openssl Include the OpenSSL support],
+ [openssl="$withval"],
+ [openssl=no])
+
+ AC_ARG_WITH([openssl-includes],
+ [
+ --with-openssl-includes=DIR
+ Find OpenSSL headers in DIR],
+ [openssl_includes="$withval"],
+ [openssl_includes=""])
+
+ AC_ARG_WITH([openssl-libs],
+ [
+ --with-openssl-libs=DIR
+ Find OpenSSL libraries in DIR],
+ [openssl_libs="$withval"],
+ [openssl_libs=""])
+
+ if test "$openssl" = "yes"
+ then
+ MYSQL_FIND_OPENSSL([$openssl_includes], [$openssl_libs])
+ #force VIO use
+ vio_dir="vio"
+ vio_libs="../vio/libvio.la"
+ AC_DEFINE(HAVE_VIO)
+ AC_MSG_RESULT(yes)
+ openssl_libs="-L$OPENSSL_LIB -lssl -lcrypto"
+ # Don't set openssl_includes to /usr/include as this gives us a lot of
+ # compiler warnings when using gcc 3.x
+ openssl_includes=""
+ if test "$OPENSSL_INCLUDE" != "-I/usr/include"
+ then
+ openssl_includes="$OPENSSL_INCLUDE"
+ fi
+ if test "$OPENSSL_KERBEROS_INCLUDE"
+ then
+ openssl_includes="$openssl_includes -I$OPENSSL_KERBEROS_INCLUDE"
+ fi
+ AC_DEFINE(HAVE_OPENSSL)
+
+ # openssl-devel-0.9.6 requires dlopen() and we can't link staticly
+ # on many platforms (We should actually test this here, but it's quite
+ # hard) to do as we are doing libtool for linking.
+ using_static=""
+ case "$CLIENT_EXTRA_LDFLAGS $MYSQLD_EXTRA_LDFLAGS" in
+ *-all-static*) using_static="yes" ;;
+ esac
+ if test "$using_static" = "yes"
+ then
+ echo "You can't use the --all-static link option when using openssl."
+ exit 1
+ fi
+ NON_THREADED_CLIENT_LIBS="$NON_THREADED_CLIENT_LIBS $openssl_libs"
+ else
+ AC_MSG_RESULT(no)
+ fi
+ AC_SUBST(openssl_libs)
+ AC_SUBST(openssl_includes)
+])
+
+
+AC_DEFUN(MYSQL_CHECK_MYSQLFS, [
+ AC_ARG_WITH([mysqlfs],
+ [
+ --with-mysqlfs Include the corba-based MySQL file system],
+ [mysqlfs="$withval"],
+ [mysqlfs=no])
+
+dnl Call MYSQL_CHECK_ORBIT even if mysqlfs == no, so that @orbit_*@
+dnl get substituted.
+ MYSQL_CHECK_ORBIT
+
+ AC_MSG_CHECKING(if we should build MySQLFS)
+ fs_dirs=""
+ if test "$mysqlfs" = "yes"
+ then
+ if test -n "$orbit_exec_prefix"
+ then
+ fs_dirs=fs
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT(disabled because ORBIT, the CORBA ORB, was not found)
+ fi
+ else
+ AC_MSG_RESULT([no])
+ fi
+ AC_SUBST([fs_dirs])
+])
+
+AC_DEFUN(MYSQL_CHECK_ORBIT, [
+AC_MSG_CHECKING(for ORBit)
+orbit_config_path=`which orbit-config`
+if test -n "$orbit_config_path" -a $? = 0
+then
+ orbit_exec_prefix=`orbit-config --exec-prefix`
+ orbit_includes=`orbit-config --cflags server`
+ orbit_libs=`orbit-config --libs server`
+ orbit_idl="$orbit_exec_prefix/bin/orbit-idl"
+ AC_MSG_RESULT(found!)
+ AC_DEFINE(HAVE_ORBIT)
+else
+ orbit_exec_prefix=
+ orbit_includes=
+ orbit_libs=
+ orbit_idl=
+ AC_MSG_RESULT(not found)
+fi
+AC_SUBST(orbit_includes)
+AC_SUBST(orbit_libs)
+AC_SUBST(orbit_idl)
+])
+
+AC_DEFUN([MYSQL_CHECK_ISAM], [
+ AC_ARG_WITH([isam], [
+ --with-isam Enable the ISAM table type],
+ [with_isam="$withval"],
+ [with_isam=no])
+
+ isam_libs=
+ if test X"$with_isam" = X"yes"
+ then
+ AC_DEFINE(HAVE_ISAM)
+ isam_libs="\$(top_builddir)/isam/libnisam.a\
+ \$(top_builddir)/merge/libmerge.a"
+ fi
+ AC_SUBST(isam_libs)
+])
+
+
+dnl ---------------------------------------------------------------------------
+dnl Macro: MYSQL_CHECK_BDB
+dnl Sets HAVE_BERKELEY_DB if inst library is found
+dnl Makes sure db version is correct.
+dnl Looks in $srcdir for Berkeley distribution if not told otherwise
+dnl ---------------------------------------------------------------------------
+
+AC_DEFUN([MYSQL_CHECK_BDB], [
+ AC_ARG_WITH([berkeley-db],
+ [
+ --with-berkeley-db[=DIR]
+ Use BerkeleyDB located in DIR],
+ [bdb="$withval"],
+ [bdb=no])
+
+ AC_ARG_WITH([berkeley-db-includes],
+ [
+ --with-berkeley-db-includes=DIR
+ Find Berkeley DB headers in DIR],
+ [bdb_includes="$withval"],
+ [bdb_includes=default])
+
+ AC_ARG_WITH([berkeley-db-libs],
+ [
+ --with-berkeley-db-libs=DIR
+ Find Berkeley DB libraries in DIR],
+ [bdb_libs="$withval"],
+ [bdb_libs=default])
+
+ AC_MSG_CHECKING([for BerkeleyDB])
+
+dnl SORT OUT THE SUPPLIED ARGUMENTS TO DETERMINE WHAT TO DO
+dnl echo "DBG1: bdb='$bdb'; incl='$bdb_includes'; lib='$bdb_libs'"
+ have_berkeley_db=no
+ case "$bdb" in
+ no )
+ mode=no
+ AC_MSG_RESULT([no])
+ ;;
+ yes | default )
+ case "$bdb_includes---$bdb_libs" in
+ default---default )
+ mode=search-$bdb
+ AC_MSG_RESULT([searching...])
+ ;;
+ default---* | *---default | yes---* | *---yes )
+ AC_MSG_ERROR([if either 'includes' or 'libs' is specified, both must be specified])
+ ;;
+ * )
+ mode=supplied-two
+ AC_MSG_RESULT([supplied])
+ ;;
+ esac
+ ;;
+ * )
+ mode=supplied-one
+ AC_MSG_RESULT([supplied])
+ ;;
+ esac
+
+dnl echo "DBG2: [$mode] bdb='$bdb'; incl='$bdb_includes'; lib='$bdb_libs'"
+
+ case $mode in
+ no )
+ bdb_includes=
+ bdb_libs=
+ bdb_libs_with_path=
+ ;;
+ supplied-two )
+ MYSQL_CHECK_INSTALLED_BDB([$bdb_includes], [$bdb_libs])
+ case $bdb_dir_ok in
+ installed ) mode=yes ;;
+ * ) AC_MSG_ERROR([didn't find valid BerkeleyDB: $bdb_dir_ok]) ;;
+ esac
+ ;;
+ supplied-one )
+ MYSQL_CHECK_BDB_DIR([$bdb])
+ case $bdb_dir_ok in
+ source ) mode=compile ;;
+ installed ) mode=yes ;;
+ * ) AC_MSG_ERROR([didn't find valid BerkeleyDB: $bdb_dir_ok]) ;;
+ esac
+ ;;
+ search-* )
+ MYSQL_SEARCH_FOR_BDB
+ case $bdb_dir_ok in
+ source ) mode=compile ;;
+ installed ) mode=yes ;;
+ * )
+ # not found
+ case $mode in
+ *-yes ) AC_MSG_ERROR([no suitable BerkeleyDB found]) ;;
+ * ) mode=no ;;
+ esac
+ bdb_includes=
+ bdb_libs=
+ bdb_libs_with_path=
+ ;;
+ esac
+ ;;
+ *)
+ AC_MSG_ERROR([impossible case condition '$mode': please report this to bugs@lists.mysql.com])
+ ;;
+ esac
+
+dnl echo "DBG3: [$mode] bdb='$bdb'; incl='$bdb_includes'; lib='$bdb_libs'"
+ case $mode in
+ no )
+ AC_MSG_RESULT([Not using Berkeley DB])
+ ;;
+ yes )
+ have_berkeley_db="yes"
+ AC_MSG_RESULT([Using Berkeley DB in '$bdb_includes'])
+ ;;
+ compile )
+ have_berkeley_db="$bdb"
+ AC_MSG_RESULT([Compiling Berekeley DB in '$have_berkeley_db'])
+ ;;
+ * )
+ AC_MSG_ERROR([impossible case condition '$mode': please report this to bugs@lists.mysql.com])
+ ;;
+ esac
+
+ AC_SUBST(bdb_includes)
+ AC_SUBST(bdb_libs)
+ AC_SUBST(bdb_libs_with_path)
+])
+
+AC_DEFUN([MYSQL_CHECK_INSTALLED_BDB], [
+dnl echo ["MYSQL_CHECK_INSTALLED_BDB ($1) ($2)"]
+ inc="$1"
+ lib="$2"
+ if test -f "$inc/db.h"
+ then
+ MYSQL_CHECK_BDB_VERSION([$inc/db.h],
+ [.*#define[ ]*], [[ ][ ]*])
+
+ if test X"$bdb_version_ok" = Xyes; then
+ save_LDFLAGS="$LDFLAGS"
+ LDFLAGS="-L$lib $LDFLAGS"
+ AC_CHECK_LIB(db,db_env_create, [
+ bdb_dir_ok=installed
+ MYSQL_TOP_BUILDDIR([inc])
+ MYSQL_TOP_BUILDDIR([lib])
+ bdb_includes="-I$inc"
+ bdb_libs="-L$lib -ldb"
+ bdb_libs_with_path="$lib/libdb.a"
+ ])
+ LDFLAGS="$save_LDFLAGS"
+ else
+ bdb_dir_ok="$bdb_version_ok"
+ fi
+ else
+ bdb_dir_ok="no db.h file in '$inc'"
+ fi
+])
+
+AC_DEFUN([MYSQL_CHECK_BDB_DIR], [
+dnl ([$bdb])
+dnl echo ["MYSQL_CHECK_BDB_DIR ($1)"]
+ dir="$1"
+
+ MYSQL_CHECK_INSTALLED_BDB([$dir/include], [$dir/lib])
+
+ if test X"$bdb_dir_ok" != Xinstalled; then
+ # test to see if it's a source dir
+ rel="$dir/dist/RELEASE"
+ if test -f "$rel"; then
+ MYSQL_CHECK_BDB_VERSION([$rel], [], [=])
+ if test X"$bdb_version_ok" = Xyes; then
+ bdb_dir_ok=source
+ bdb="$dir"
+ MYSQL_TOP_BUILDDIR([dir])
+ bdb_includes="-I$dir/build_unix"
+ bdb_libs="-L$dir/build_unix -ldb"
+ bdb_libs_with_path="$dir/build_unix/libdb.a"
+ else
+ bdb_dir_ok="$bdb_version_ok"
+ fi
+ else
+ bdb_dir_ok="'$dir' doesn't look like a BDB directory ($bdb_dir_ok)"
+ fi
+ fi
+])
+
+AC_DEFUN([MYSQL_SEARCH_FOR_BDB], [
+dnl echo ["MYSQL_SEARCH_FOR_BDB"]
+ bdb_dir_ok="no BerkeleyDB found"
+
+ for test_dir in $srcdir/bdb $srcdir/db-*.*.* /usr/local/BerkeleyDB*; do
+dnl echo "-----------> Looking at ($test_dir; `cd $test_dir && pwd`)"
+ MYSQL_CHECK_BDB_DIR([$test_dir])
+ if test X"$bdb_dir_ok" = Xsource || test X"$bdb_dir_ok" = Xinstalled; then
+dnl echo "-----------> Found it ($bdb), ($srcdir)"
+dnl This is needed so that 'make distcheck' works properly (VPATH build).
+dnl VPATH build won't work if bdb is not under the source tree; but in
+dnl that case, hopefully people will just make and install inside the
+dnl tree, or install BDB first, and then use the installed version.
+ case "$bdb" in
+ "$srcdir/"* ) bdb=`echo "$bdb" | sed -e "s,^$srcdir/,,"` ;;
+ esac
+ break
+ fi
+ done
+])
+
+dnl MYSQL_CHECK_BDB_VERSION takes 3 arguments:
+dnl 1) the file to look in
+dnl 2) the search pattern before DB_VERSION_XXX
+dnl 3) the search pattern between DB_VERSION_XXX and the number
+dnl It assumes that the number is the last thing on the line
+AC_DEFUN([MYSQL_CHECK_BDB_VERSION], [
+ db_major=`sed -e '/^[$2]DB_VERSION_MAJOR[$3]/ !d' -e 's///' [$1]`
+ db_minor=`sed -e '/^[$2]DB_VERSION_MINOR[$3]/ !d' -e 's///' [$1]`
+ db_patch=`sed -e '/^[$2]DB_VERSION_PATCH[$3]/ !d' -e 's///' [$1]`
+ test -z "$db_major" && db_major=0
+ test -z "$db_minor" && db_minor=0
+ test -z "$db_patch" && db_patch=0
+
+ # This is ugly, but about as good as it can get
+# mysql_bdb=
+# if test $db_major -eq 3 && test $db_minor -eq 2 && test $db_patch -eq 3
+# then
+# mysql_bdb=h
+# elif test $db_major -eq 3 && test $db_minor -eq 2 && test $db_patch -eq 9
+# then
+# want_bdb_version="3.2.9a" # hopefully this will stay up-to-date
+# mysql_bdb=a
+# fi
+
+dnl RAM:
+want_bdb_version="4.1.24"
+bdb_version_ok=yes
+
+# if test -n "$mysql_bdb" && \
+# grep "DB_VERSION_STRING.*:.*$mysql_bdb: " [$1] > /dev/null
+# then
+# bdb_version_ok=yes
+# else
+# bdb_version_ok="invalid version $db_major.$db_minor.$db_patch"
+# bdb_version_ok="$bdb_version_ok (must be version 3.2.3h or $want_bdb_version)"
+# fi
+])
+
+AC_DEFUN([MYSQL_TOP_BUILDDIR], [
+ case "$[$1]" in
+ /* ) ;; # don't do anything with an absolute path
+ "$srcdir"/* )
+ # If BDB is under the source directory, we need to look under the
+ # build directory for bdb/build_unix.
+ # NOTE: I'm being lazy, and assuming the user did not specify
+ # something like --with-berkeley-db=bdb (it would be missing "./").
+ [$1]="\$(top_builddir)/"`echo "$[$1]" | sed -e "s,^$srcdir/,,"`
+ ;;
+ * )
+ AC_MSG_ERROR([The BDB directory must be directly under the MySQL source directory, or be specified using the full path. ('$srcdir'; '$[$1]')])
+ ;;
+ esac
+ if test X"$[$1]" != "/"
+ then
+ [$1]=`echo $[$1] | sed -e 's,/$,,'`
+ fi
+])
+
+dnl ---------------------------------------------------------------------------
+dnl END OF MYSQL_CHECK_BDB SECTION
+dnl ---------------------------------------------------------------------------
+
+dnl ---------------------------------------------------------------------------
+dnl Macro: MYSQL_CHECK_INNODB
+dnl Sets HAVE_INNOBASE_DB if --with-innodb is used
+dnl ---------------------------------------------------------------------------
+
+AC_DEFUN([MYSQL_CHECK_INNODB], [
+ AC_ARG_WITH([innodb],
+ [
+ --without-innodb Do not include the InnoDB table handler],
+ [innodb="$withval"],
+ [innodb=yes])
+
+ AC_MSG_CHECKING([for Innodb])
+
+ have_innodb=no
+ innodb_includes=
+ innodb_libs=
+ case "$innodb" in
+ yes )
+ AC_MSG_RESULT([Using Innodb])
+ AC_DEFINE(HAVE_INNOBASE_DB)
+ have_innodb="yes"
+ innodb_includes="-I../innobase/include"
+ innodb_system_libs=""
+dnl Some libs are listed several times, in order for gcc to sort out
+dnl circular references.
+ innodb_libs="\
+ \$(top_builddir)/innobase/usr/libusr.a\
+ \$(top_builddir)/innobase/srv/libsrv.a\
+ \$(top_builddir)/innobase/dict/libdict.a\
+ \$(top_builddir)/innobase/que/libque.a\
+ \$(top_builddir)/innobase/srv/libsrv.a\
+ \$(top_builddir)/innobase/ibuf/libibuf.a\
+ \$(top_builddir)/innobase/row/librow.a\
+ \$(top_builddir)/innobase/pars/libpars.a\
+ \$(top_builddir)/innobase/btr/libbtr.a\
+ \$(top_builddir)/innobase/trx/libtrx.a\
+ \$(top_builddir)/innobase/read/libread.a\
+ \$(top_builddir)/innobase/usr/libusr.a\
+ \$(top_builddir)/innobase/buf/libbuf.a\
+ \$(top_builddir)/innobase/ibuf/libibuf.a\
+ \$(top_builddir)/innobase/eval/libeval.a\
+ \$(top_builddir)/innobase/log/liblog.a\
+ \$(top_builddir)/innobase/fsp/libfsp.a\
+ \$(top_builddir)/innobase/fut/libfut.a\
+ \$(top_builddir)/innobase/fil/libfil.a\
+ \$(top_builddir)/innobase/lock/liblock.a\
+ \$(top_builddir)/innobase/mtr/libmtr.a\
+ \$(top_builddir)/innobase/page/libpage.a\
+ \$(top_builddir)/innobase/rem/librem.a\
+ \$(top_builddir)/innobase/thr/libthr.a\
+ \$(top_builddir)/innobase/sync/libsync.a\
+ \$(top_builddir)/innobase/data/libdata.a\
+ \$(top_builddir)/innobase/mach/libmach.a\
+ \$(top_builddir)/innobase/ha/libha.a\
+ \$(top_builddir)/innobase/dyn/libdyn.a\
+ \$(top_builddir)/innobase/mem/libmem.a\
+ \$(top_builddir)/innobase/sync/libsync.a\
+ \$(top_builddir)/innobase/ut/libut.a\
+ \$(top_builddir)/innobase/os/libos.a\
+ \$(top_builddir)/innobase/ut/libut.a"
+
+ AC_CHECK_LIB(rt, aio_read, [innodb_system_libs="-lrt"])
+ ;;
+ * )
+ AC_MSG_RESULT([Not using Innodb])
+ ;;
+ esac
+
+ AC_SUBST(innodb_includes)
+ AC_SUBST(innodb_libs)
+ AC_SUBST(innodb_system_libs)
+])
+
+dnl ---------------------------------------------------------------------------
+dnl END OF MYSQL_CHECK_INNODB SECTION
+dnl ---------------------------------------------------------------------------
+
+dnl ---------------------------------------------------------------------------
+dnl Macro: MYSQL_CHECK_NDBCLUSTER
+dnl Sets HAVE_NDBCLUSTER_DB if --with-ndbcluster is used
+dnl ---------------------------------------------------------------------------
+
+AC_DEFUN([MYSQL_CHECK_NDBCLUSTER], [
+ AC_ARG_WITH([ndbcluster],
+ [
+ --without-ndbcluster Do not include the Ndb Cluster table handler],
+ [ndbcluster="$withval"],
+ [ndbcluster=yes])
+
+ AC_MSG_CHECKING([for Ndb Cluster])
+
+ have_ndbcluster=no
+ ndbcluster_includes=
+ ndbcluster_libs=
+ case "$ndbcluster" in
+ yes )
+ AC_MSG_RESULT([Using Ndb Cluster])
+ AC_DEFINE(HAVE_NDBCLUSTER_DB)
+ have_ndbcluster="yes"
+ ndbcluster_includes="-I../ndb/include -I../ndb/include/ndbapi"
+ ndbcluster_libs="\$(top_builddir)/ndb/lib/libNDB_API.a"
+ ndbcluster_system_libs=""
+ esac
+
+ AC_SUBST(ndbcluster_includes)
+ AC_SUBST(ndbcluster_libs)
+ AC_SUBST(ndbcluster_system_libs)
+])
+
+dnl ---------------------------------------------------------------------------
+dnl END OF MYSQL_CHECK_NDBCLUSTER SECTION
+dnl ---------------------------------------------------------------------------
+
+dnl By default, many hosts won't let programs access large files;
+dnl one must use special compiler options to get large-file access to work.
+dnl For more details about this brain damage please see:
+dnl http://www.sas.com/standards/large.file/x_open.20Mar96.html
+
+dnl Written by Paul Eggert .
+
+dnl Internal subroutine of AC_SYS_LARGEFILE.
+dnl AC_SYS_LARGEFILE_FLAGS(FLAGSNAME)
+AC_DEFUN(AC_SYS_LARGEFILE_FLAGS,
+ [AC_CACHE_CHECK([for $1 value to request large file support],
+ ac_cv_sys_largefile_$1,
+ [if ($GETCONF LFS_$1) >conftest.1 2>conftest.2 && test ! -s conftest.2
+ then
+ ac_cv_sys_largefile_$1=`cat conftest.1`
+ else
+ ac_cv_sys_largefile_$1=no
+ ifelse($1, CFLAGS,
+ [case "$host_os" in
+ # HP-UX 10.20 requires -D__STDC_EXT__ with gcc 2.95.1.
+changequote(, )dnl
+ hpux10.[2-9][0-9]* | hpux1[1-9]* | hpux[2-9][0-9]*)
+changequote([, ])dnl
+ if test "$GCC" = yes; then
+ case `$CC --version 2>/dev/null` in
+ 2.95.*) ac_cv_sys_largefile_CFLAGS=-D__STDC_EXT__ ;;
+ esac
+ fi
+ ;;
+ # IRIX 6.2 and later require cc -n32.
+changequote(, )dnl
+ irix6.[2-9]* | irix6.1[0-9]* | irix[7-9].* | irix[1-9][0-9]*)
+changequote([, ])dnl
+ if test "$GCC" != yes; then
+ ac_cv_sys_largefile_CFLAGS=-n32
+ fi
+ esac
+ if test "$ac_cv_sys_largefile_CFLAGS" != no; then
+ ac_save_CC="$CC"
+ CC="$CC $ac_cv_sys_largefile_CFLAGS"
+ AC_TRY_LINK(, , , ac_cv_sys_largefile_CFLAGS=no)
+ CC="$ac_save_CC"
+ fi])
+ fi
+ rm -f conftest*])])
+
+dnl Internal subroutine of AC_SYS_LARGEFILE.
+dnl AC_SYS_LARGEFILE_SPACE_APPEND(VAR, VAL)
+AC_DEFUN(AC_SYS_LARGEFILE_SPACE_APPEND,
+ [case $2 in
+ no) ;;
+ ?*)
+ case "[$]$1" in
+ '') $1=$2 ;;
+ *) $1=[$]$1' '$2 ;;
+ esac ;;
+ esac])
+
+dnl Internal subroutine of AC_SYS_LARGEFILE.
+dnl AC_SYS_LARGEFILE_MACRO_VALUE(C-MACRO, CACHE-VAR, COMMENT, CODE-TO-SET-DEFAULT)
+AC_DEFUN(AC_SYS_LARGEFILE_MACRO_VALUE,
+ [AC_CACHE_CHECK([for $1], $2,
+ [$2=no
+changequote(, )dnl
+ for ac_flag in $ac_cv_sys_largefile_CFLAGS no; do
+ case "$ac_flag" in
+ -D$1)
+ $2=1 ;;
+ -D$1=*)
+ $2=`expr " $ac_flag" : '[^=]*=\(.*\)'` ;;
+ esac
+ done
+ $4
+changequote([, ])dnl
+ ])
+ if test "[$]$2" != no; then
+ AC_DEFINE_UNQUOTED([$1], [$]$2, [$3])
+ fi])
+
+AC_DEFUN(MYSQL_SYS_LARGEFILE,
+ [AC_REQUIRE([AC_CANONICAL_HOST])
+ AC_ARG_ENABLE(largefile,
+ [ --disable-largefile Omit support for large files])
+ if test "$enable_largefile" != no; then
+ AC_CHECK_TOOL(GETCONF, getconf)
+ AC_SYS_LARGEFILE_FLAGS(CFLAGS)
+ AC_SYS_LARGEFILE_FLAGS(LDFLAGS)
+ AC_SYS_LARGEFILE_FLAGS(LIBS)
+
+ for ac_flag in $ac_cv_sys_largefile_CFLAGS no; do
+ case "$ac_flag" in
+ no) ;;
+ -D_FILE_OFFSET_BITS=*) ;;
+ -D_LARGEFILE_SOURCE | -D_LARGEFILE_SOURCE=*) ;;
+ -D_LARGE_FILES | -D_LARGE_FILES=*) ;;
+ -D?* | -I?*)
+ AC_SYS_LARGEFILE_SPACE_APPEND(CPPFLAGS, "$ac_flag") ;;
+ *)
+ AC_SYS_LARGEFILE_SPACE_APPEND(CFLAGS, "$ac_flag") ;;
+ esac
+ done
+ AC_SYS_LARGEFILE_SPACE_APPEND(LDFLAGS, "$ac_cv_sys_largefile_LDFLAGS")
+ AC_SYS_LARGEFILE_SPACE_APPEND(LIBS, "$ac_cv_sys_largefile_LIBS")
+
+ AC_SYS_LARGEFILE_MACRO_VALUE(_FILE_OFFSET_BITS,
+ ac_cv_sys_file_offset_bits,
+ [Number of bits in a file offset, on hosts where this is settable.],
+ [case "$host_os" in
+ # HP-UX 10.20 and later
+ hpux10.[2-9][0-9]* | hpux1[1-9]* | hpux[2-9][0-9]*)
+ ac_cv_sys_file_offset_bits=64 ;;
+ # We can't declare _FILE_OFFSET_BITS here as this will cause
+ # compile errors as AC_PROG_CC adds include files in confdefs.h
+ # We solve this (until autoconf is fixed) by instead declaring it
+ # as define instead
+ solaris2.[8,9])
+ CFLAGS="$CFLAGS -D_FILE_OFFSET_BITS=64"
+ CXXFLAGS="$CXXFLAGS -D_FILE_OFFSET_BITS=64"
+ ac_cv_sys_file_offset_bits=no ;;
+ esac])
+ AC_SYS_LARGEFILE_MACRO_VALUE(_LARGEFILE_SOURCE,
+ ac_cv_sys_largefile_source,
+ [Define to make fseeko etc. visible, on some hosts.],
+ [case "$host_os" in
+ # HP-UX 10.20 and later
+ hpux10.[2-9][0-9]* | hpux1[1-9]* | hpux[2-9][0-9]*)
+ ac_cv_sys_largefile_source=1 ;;
+ esac])
+ AC_SYS_LARGEFILE_MACRO_VALUE(_LARGE_FILES,
+ ac_cv_sys_large_files,
+ [Define for large files, on AIX-style hosts.],
+ [case "$host_os" in
+ # AIX 4.2 and later
+ aix4.[2-9]* | aix4.1[0-9]* | aix[5-9].* | aix[1-9][0-9]*)
+ ac_cv_sys_large_files=1 ;;
+ esac])
+ fi
+ ])
+
+
+# Local version of _AC_PROG_CXX_EXIT_DECLARATION that does not
+# include #stdlib.h as default as this breaks things on Solaris
+# (Conflicts with pthreads and big file handling)
+
+m4_define([_AC_PROG_CXX_EXIT_DECLARATION],
+[for ac_declaration in \
+ ''\
+ 'extern "C" void std::exit (int) throw (); using std::exit;' \
+ 'extern "C" void std::exit (int); using std::exit;' \
+ 'extern "C" void exit (int) throw ();' \
+ 'extern "C" void exit (int);' \
+ 'void exit (int);' \
+ '#include '
+do
+ _AC_COMPILE_IFELSE([AC_LANG_PROGRAM([@%:@include
+$ac_declaration],
+ [exit (42);])],
+ [],
+ [continue])
+ _AC_COMPILE_IFELSE([AC_LANG_PROGRAM([$ac_declaration],
+ [exit (42);])],
+ [break])
+done
+rm -f conftest*
+if test -n "$ac_declaration"; then
+ echo '#ifdef __cplusplus' >>confdefs.h
+ echo $ac_declaration >>confdefs.h
+ echo '#endif' >>confdefs.h
+fi
+])# _AC_PROG_CXX_EXIT_DECLARATION
+
+dnl ---------------------------------------------------------------------------
+
diff --git a/ndb/config/configure.in b/ndb/config/configure.in
new file mode 100644
index 00000000000..4fa5ccdb672
--- /dev/null
+++ b/ndb/config/configure.in
@@ -0,0 +1,2085 @@
+dnl -*- ksh -*-
+dnl Process this file with autoconf to produce a configure script.
+
+AC_INIT(../../sql/mysqld.cc)
+AC_CANONICAL_SYSTEM
+# The Docs Makefile.am parses this line!
+AM_INIT_AUTOMAKE(mysql, 4.1.2-3.4.3-alpha)
+AM_CONFIG_HEADER(config.h)
+
+PROTOCOL_VERSION=10
+DOT_FRM_VERSION=6
+# See the libtool docs for information on how to do shared lib versions.
+SHARED_LIB_VERSION=14:0:0
+
+# Set all version vars based on $VERSION. How do we do this more elegant ?
+# Remember that regexps needs to quote [ and ] since this is run through m4
+MYSQL_NO_DASH_VERSION=`echo $VERSION | sed -e "s|[[a-z]]*-.*$||"`
+MYSQL_BASE_VERSION=`echo $MYSQL_NO_DASH_VERSION | sed -e "s|\.[[^.]]*$||"`
+MYSQL_VERSION_ID=`echo $MYSQL_NO_DASH_VERSION. | sed -e 's/\./ /g; s/ \([[0-9]]\) / 0\\1 /g; s/ //g'`
+
+# The port should be constant for a LONG time
+MYSQL_TCP_PORT_DEFAULT=3306
+MYSQL_UNIX_ADDR_DEFAULT="/tmp/mysql.sock"
+
+#####
+#####
+
+AC_SUBST(MYSQL_NO_DASH_VERSION)
+AC_SUBST(MYSQL_BASE_VERSION)
+AC_SUBST(MYSQL_VERSION_ID)
+AC_SUBST(PROTOCOL_VERSION)
+AC_DEFINE_UNQUOTED(PROTOCOL_VERSION, $PROTOCOL_VERSION)
+AC_SUBST(DOT_FRM_VERSION)
+AC_DEFINE_UNQUOTED(DOT_FRM_VERSION, $DOT_FRM_VERSION)
+AC_SUBST(SHARED_LIB_VERSION)
+
+# Canonicalize the configuration name.
+SYSTEM_TYPE="$host_vendor-$host_os"
+MACHINE_TYPE="$host_cpu"
+AC_SUBST(SYSTEM_TYPE)
+AC_DEFINE_UNQUOTED(SYSTEM_TYPE, "$SYSTEM_TYPE")
+AC_SUBST(MACHINE_TYPE)
+AC_DEFINE_UNQUOTED(MACHINE_TYPE, "$MACHINE_TYPE")
+
+# Detect intel x86 like processor
+BASE_MACHINE_TYPE=$MACHINE_TYPE
+case $MACHINE_TYPE in
+ i?86) BASE_MACHINE_TYPE=i386 ;;
+esac
+
+# Save some variables and the command line options for mysqlbug
+SAVE_ASFLAGS="$ASFLAGS"
+SAVE_CFLAGS="$CFLAGS"
+SAVE_CXXFLAGS="$CXXFLAGS"
+SAVE_LDFLAGS="$LDFLAGS"
+SAVE_CXXLDFLAGS="$CXXLDFLAGS"
+CONF_COMMAND="$0 $ac_configure_args"
+AC_SUBST(CONF_COMMAND)
+AC_SUBST(SAVE_ASFLAGS)
+AC_SUBST(SAVE_CFLAGS)
+AC_SUBST(SAVE_CXXFLAGS)
+AC_SUBST(SAVE_LDFLAGS)
+AC_SUBST(SAVE_CXXLDFLAGS)
+AC_SUBST(CXXLDFLAGS)
+
+AC_PREREQ(2.12)dnl Minimum Autoconf version required.
+
+AM_MAINTAINER_MODE
+#AC_ARG_PROGRAM # Automaticly invoked by AM_INIT_AUTOMAKE
+AM_SANITY_CHECK
+# This is needed is SUBDIRS is set
+AC_PROG_MAKE_SET
+
+# This is need before AC_PROG_CC
+#
+
+if test "x${CFLAGS-}" = x ; then
+ cflags_is_set=no
+else
+ cflags_is_set=yes
+fi
+
+if test "x${CPPFLAGS-}" = x ; then
+ cppflags_is_set=no
+else
+ cppflags_is_set=yes
+fi
+
+if test "x${LDFLAGS-}" = x ; then
+ ldflags_is_set=no
+else
+ ldflags_is_set=yes
+fi
+
+# The following hack should ensure that configure doesn't add optimizing
+# or debugging flags to CFLAGS or CXXFLAGS
+CFLAGS="$CFLAGS "
+CXXFLAGS="$CXXFLAGS "
+
+dnl Checks for programs.
+AC_PROG_AWK
+AC_PROG_CC
+AC_PROG_CXX
+AC_PROG_CPP
+
+# Print version of CC and CXX compiler (if they support --version)
+case $SYSTEM_TYPE in
+ *netware*)
+CC_VERSION=`$CC -version | grep -i version`
+ ;;
+ *)
+CC_VERSION=`$CC --version | sed 1q`
+ ;;
+esac
+if test $? -eq "0"
+then
+ AC_MSG_CHECKING("C Compiler version");
+ AC_MSG_RESULT("$CC $CC_VERSION")
+else
+CC_VERSION=""
+fi
+case $SYSTEM_TYPE in
+ *netware*)
+CXX_VERSION=`$CXX -version | grep -i version`
+ ;;
+ *)
+CXX_VERSION=`$CXX --version | sed 1q`
+ ;;
+esac
+if test $? -eq "0"
+then
+ AC_MSG_CHECKING("C++ compiler version");
+ AC_MSG_RESULT("$CXX $CXX_VERSION")
+else
+CXX_VERSION=""
+fi
+AC_SUBST(CXX_VERSION)
+AC_SUBST(CC_VERSION)
+
+# Fix for sgi gcc / sgiCC which tries to emulate gcc
+if test "$CC" = "sgicc"
+then
+ ac_cv_prog_gcc="no"
+fi
+if test "$CXX" = "sgi++"
+then
+ GXX="no"
+fi
+
+if test "$ac_cv_prog_gcc" = "yes"
+then
+ AS="$CC -c"
+ AC_SUBST(AS)
+else
+ AC_PATH_PROG(AS, as, as)
+fi
+# Still need ranlib for readline; local static use only so no libtool.
+AC_PROG_RANLIB
+# We use libtool
+#AC_LIBTOOL_WIN32_DLL
+AC_PROG_LIBTOOL
+
+# Ensure that we have --preserve-dup-deps defines, otherwise we get link
+# problems of 'mysql' with CXX=g++
+LIBTOOL="$LIBTOOL --preserve-dup-deps"
+AC_SUBST(LIBTOOL)dnl
+
+#AC_LIBTOOL_DLOPEN AC_LIBTOOL_WIN32_DLL AC_DISABLE_FAST_INSTALL AC_DISABLE_SHARED AC_DISABLE_STATIC
+
+# AC_PROG_INSTALL
+AC_PROG_INSTALL
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}'
+
+# Not critical since the generated file is distributed
+AC_PROG_YACC
+AC_CHECK_PROG(PDFMANUAL, pdftex, manual.pdf)
+AC_CHECK_PROG(DVIS, tex, manual.dvi)
+
+AC_MSG_CHECKING("return type of sprintf")
+
+#check the return type of sprintf
+case $SYSTEM_TYPE in
+ *netware*)
+ AC_DEFINE(SPRINTF_RETURNS_INT) AC_MSG_RESULT("int")
+ ;;
+ *)
+AC_TRY_RUN([
+ int main()
+ {
+ char* s = "hello";
+ char buf[6];
+ if((int)sprintf(buf, s) == strlen(s))
+ return 0;
+
+ return -1;
+ }
+ ],
+AC_DEFINE(SPRINTF_RETURNS_INT) AC_MSG_RESULT("int"),
+ AC_TRY_RUN([
+ int main()
+ {
+ char* s = "hello";
+ char buf[6];
+ if((char*)sprintf(buf,s) == buf + strlen(s))
+ return 0;
+ return -1;
+ }
+], AC_DEFINE(SPRINTF_RETURNS_PTR) AC_MSG_RESULT("ptr"),
+ AC_DEFINE(SPRINTF_RETURNS_GARBAGE) AC_MSG_RESULT("garbage")))
+ ;;
+esac
+
+
+# option, cache_name, variable,
+# code to execute if yes, code to exectute if fail
+AC_DEFUN(AC_SYS_COMPILER_FLAG,
+[
+ AC_MSG_CHECKING($1)
+ OLD_CFLAGS="[$]CFLAGS"
+ AC_CACHE_VAL(mysql_cv_option_$2,
+ [
+ CFLAGS="[$]OLD_CFLAGS $1"
+ AC_TRY_RUN([int main(){exit(0);}],mysql_cv_option_$2=yes,mysql_cv_option_$2=no,mysql_cv_option_$2=no)
+ ])
+
+ CFLAGS="[$]OLD_CFLAGS"
+
+ if test x"[$]mysql_cv_option_$2" = "xyes" ; then
+ $3="[$]$3 $1"
+ AC_MSG_RESULT(yes)
+ $5
+ else
+ AC_MSG_RESULT(no)
+ $4
+ fi
+])
+
+# arch, option, cache_name, variable
+AC_DEFUN(AC_SYS_CPU_COMPILER_FLAG,
+[
+ if test "`uname -m 2>/dev/null`" = "$1" ; then
+ AC_SYS_COMPILER_FLAG($2,$3,$4)
+ fi
+])
+
+# os, option, cache_name, variable
+AC_DEFUN(AC_SYS_OS_COMPILER_FLAG,
+[
+ if test "x$mysql_cv_sys_os" = "x$1" ; then
+ AC_SYS_COMPILER_FLAG($2,$3,$4)
+ fi
+])
+
+# We need some special hacks when running slowaris
+AC_PATH_PROG(uname_prog, uname, no)
+
+# We should go through this and put all the explictly system dependent
+# stuff in one place
+AC_MSG_CHECKING(operating system)
+AC_CACHE_VAL(mysql_cv_sys_os,
+[
+if test "$uname_prog" != "no"; then
+ mysql_cv_sys_os="`uname`"
+else
+ mysql_cv_sys_os="Not Solaris"
+fi
+])
+AC_MSG_RESULT($mysql_cv_sys_os)
+
+# This should be rewritten to use $target_os
+case "$target_os" in
+ sco3.2v5*)
+ CFLAGS="$CFLAGS -DSCO"
+ CXXFLAGS="$CXXFLAGS -DSCO"
+ LD='$(CC) $(CFLAGS)'
+ case "$CFLAGS" in
+ *-belf*)
+ AC_SYS_COMPILER_FLAG(-belf,sco_belf_option,CFLAGS,[],[
+ case "$LDFLAGS" in
+ *-belf*) ;;
+ *) echo "Adding -belf option to ldflags."
+ LDFLAGS="$LDFLAGS -belf"
+ ;;
+ esac
+ ])
+ ;;
+ *)
+ AC_SYS_COMPILER_FLAG(-belf,sco_belf_option,CFLAGS,[],[
+ case "$LDFLAGS" in
+ *-belf*) ;;
+ *)
+ echo "Adding -belf option to ldflags."
+ LDFLAGS="$LDFLAGS -belf"
+ ;;
+ esac
+ ])
+ ;;
+ esac
+ ;;
+ sysv5UnixWare*)
+ if test "$GCC" != "yes"; then
+ # We are using built-in inline function
+ CFLAGS="$CFLAGS -Kalloca"
+ fi
+ CXXFLAGS="$CXXFLAGS -DNO_CPLUSPLUS_ALLOCA"
+ ;;
+ sysv5OpenUNIX8*)
+ if test "$GCC" != "yes"; then
+ # We are using built-in inline function
+ CFLAGS="$CFLAGS -Kalloca"
+ fi
+ CXXFLAGS="$CXXFLAGS -DNO_CPLUSPLUS_ALLOCA"
+ ;;
+esac
+AC_SUBST(CC)
+AC_SUBST(CFLAGS)
+AC_SUBST(CXX)
+AC_SUBST(CXXFLAGS)
+AC_SUBST(LD)
+AC_SUBST(INSTALL_SCRIPT)
+
+export CC CXX CFLAGS LD LDFLAGS AR
+
+if test "$GXX" = "yes"
+then
+ # mysqld requires -fno-implicit-templates.
+ # Disable exceptions as they seams to create problems with gcc and threads.
+ # mysqld doesn't use run-time-type-checking, so we disable it.
+ CXXFLAGS="$CXXFLAGS -fno-implicit-templates -fno-exceptions -fno-rtti"
+
+ # If you are using 'gcc' 3.0 (not g++) to compile C++ programs on Linux,
+ # we will gets some problems when linking static programs.
+ # The following code is used to fix this problem.
+
+ if test "$CXX" = "gcc" -o "$CXX" = "ccache gcc"
+ then
+ if $CXX -v 2>&1 | grep 'version 3' > /dev/null 2>&1
+ then
+ CXXFLAGS="$CXXFLAGS -DUSE_MYSYS_NEW -DDEFINE_CXA_PURE_VIRTUAL"
+ fi
+ fi
+fi
+
+# Avoid bug in fcntl on some versions of linux
+AC_MSG_CHECKING("if we should use 'skip-locking' as default for $target_os")
+# Any wariation of Linux
+if expr "$target_os" : "[[Ll]]inux.*" > /dev/null
+then
+ MYSQLD_DEFAULT_SWITCHES="--skip-locking"
+ IS_LINUX="true"
+ AC_MSG_RESULT("yes");
+else
+ MYSQLD_DEFAULT_SWITCHES=""
+ IS_LINUX="false"
+ AC_MSG_RESULT("no");
+fi
+AC_SUBST(MYSQLD_DEFAULT_SWITCHES)
+AC_SUBST(IS_LINUX)
+
+dnl Find paths to some shell programs
+AC_PATH_PROG(LN, ln, ln)
+# This must be able to take a -f flag like normal unix ln.
+AC_PATH_PROG(LN_CP_F, ln, ln)
+if ! ( expr "$SYSTEM_TYPE" : ".*netware.*" > /dev/null ); then
+# If ln -f does not exists use -s (AFS systems)
+if test -n "$LN_CP_F"; then
+ LN_CP_F="$LN_CP_F -s"
+fi
+fi
+
+AC_PATH_PROG(MV, mv, mv)
+AC_PATH_PROG(RM, rm, rm)
+AC_PATH_PROG(CP, cp, cp)
+AC_PATH_PROG(SED, sed, sed)
+AC_PATH_PROG(CMP, cmp, cmp)
+AC_PATH_PROG(CHMOD, chmod, chmod)
+AC_PATH_PROG(HOSTNAME, hostname, hostname)
+# Check for a GNU tar named 'gtar', or 'gnutar' (MacOS X) and
+# fall back to 'tar' otherwise and hope that it's a GNU tar as well
+AC_CHECK_PROGS(TAR, gnutar gtar tar)
+
+dnl We use a path for perl so the script startup works
+dnl We make sure to use perl, not perl5, in hopes that the RPMs will
+dnl not depend on the perl5 binary being installed (probably a bug in RPM)
+AC_PATH_PROG(PERL, perl, no)
+if test "$PERL" != "no" && $PERL -e 'require 5' > /dev/null 2>&1
+then
+ PERL5=$PERL
+else
+ AC_PATH_PROG(PERL5, perl5, no)
+ if test "$PERL5" != no
+ then
+ PERL=$PERL5
+ ac_cv_path_PERL=$ac_cv_path_PERL5
+ fi
+fi
+
+AC_SUBST(HOSTNAME)
+AC_SUBST(PERL)
+AC_SUBST(PERL5)
+
+# Lock for PS
+AC_PATH_PROG(PS, ps, ps)
+AC_MSG_CHECKING("how to check if pid exists")
+PS=$ac_cv_path_PS
+# Linux style
+if $PS p $$ 2> /dev/null | grep $0 > /dev/null
+then
+ FIND_PROC="$PS p \$\$PID | grep mysqld > /dev/null"
+# Solaris
+elif $PS -p $$ 2> /dev/null | grep $0 > /dev/null
+then
+ FIND_PROC="$PS -p \$\$PID | grep mysqld > /dev/null"
+# BSD style
+elif $PS -uaxww 2> /dev/null | grep $0 > /dev/null
+then
+ FIND_PROC="$PS -uaxww | grep mysqld | grep \" \$\$PID \" > /dev/null"
+# SysV style
+elif $PS -ef 2> /dev/null | grep $0 > /dev/null
+then
+ FIND_PROC="$PS -ef | grep mysqld | grep \" \$\$PID \" > /dev/null"
+# Do anybody use this?
+elif $PS $$ 2> /dev/null | grep $0 > /dev/null
+then
+ FIND_PROC="$PS \$\$PID | grep mysqld > /dev/null"
+else
+ case $SYSTEM_TYPE in
+ *freebsd*)
+ FIND_PROC="$PS p \$\$PID | grep mysqld > /dev/null"
+ ;;
+ *darwin*)
+ FIND_PROC="$PS -uaxww | grep mysqld | grep \" \$\$PID \" > /dev/null"
+ ;;
+ *cygwin*)
+ FIND_PROC="$PS -e | grep mysqld | grep \" \$\$PID \" > /dev/null"
+ ;;
+ *netware* | *modesto*)
+ FIND_PROC=
+ ;;
+ *)
+ AC_MSG_ERROR([Could not find the right ps switches. Which OS is this ?. See the Installation chapter in the Reference Manual.])
+ esac
+fi
+AC_SUBST(FIND_PROC)
+AC_MSG_RESULT("$FIND_PROC")
+
+# Check if a pid is valid
+AC_PATH_PROG(KILL, kill, kill)
+AC_MSG_CHECKING("for kill switches")
+if $ac_cv_path_KILL -0 $$
+then
+ CHECK_PID="$ac_cv_path_KILL -0 \$\$PID > /dev/null 2> /dev/null"
+elif kill -s 0 $$
+then
+ CHECK_PID="$ac_cv_path_KILL -s 0 \$\$PID > /dev/null 2> /dev/null"
+else
+ AC_MSG_WARN([kill -0 to check for pid seems to fail])
+ CHECK_PID="$ac_cv_path_KILL -s SIGCONT \$\$PID > /dev/null 2> /dev/null"
+fi
+AC_SUBST(CHECK_PID)
+AC_MSG_RESULT("$CHECK_PID")
+
+# We need a ANSI C compiler
+AM_PROG_CC_STDC
+
+# We need an assembler, too
+AM_PROG_AS
+
+if test "$am_cv_prog_cc_stdc" = "no"
+then
+ AC_MSG_ERROR([MySQL requires a ANSI C compiler (and a C++ compiler). Try gcc. See the Installation chapter in the Reference Manual.])
+fi
+
+NOINST_LDFLAGS=
+
+static_nss=""
+STATIC_NSS_FLAGS=""
+OTHER_LIBC_LIB=""
+AC_ARG_WITH(other-libc,
+ [ --with-other-libc=DIR Link against libc and other standard libraries
+ installed in the specified non-standard location
+ overriding default. Originally added to be able to
+ link against glibc 2.2 without making the user
+ upgrade the standard libc installation.],
+ [
+ other_libc_include="$withval/include"
+ other_libc_lib="$withval/lib"
+ with_other_libc="yes"
+ enable_shared="no"
+ all_is_static="yes"
+ CFLAGS="$CFLAGS -I$other_libc_include"
+ # There seems to be a feature in gcc that treats system and libc headers
+ # silently when they violatate ANSI C++ standard, but it is strict otherwise
+ # since gcc cannot now recognize that our headers are libc, we work around
+ # by telling it to be permissive. Note that this option only works with
+ # new versions of gcc (2.95.x and above)
+ CXXFLAGS="$CXXFLAGS -fpermissive -I$other_libc_include"
+ if test -f "$other_libc_lib/libnss_files.a"
+ then
+ # libc has been compiled with --enable-static-nss
+ # we need special flags, but we will have to add those later
+ STATIC_NSS_FLAGS="-lc -lnss_files -lnss_dns -lresolv"
+ STATIC_NSS_FLAGS="$STATIC_NSS_FLAGS $STATIC_NSS_FLAGS"
+ OTHER_LIBC_LIB="-static -L$other_libc_lib"
+ static_nss=1
+ else
+ # this is a dirty hack. We if we detect static nss glibc in the special
+ # location, we do not re-direct the linker to get libraries from there
+ # during check. The reason is that if we did, we would have to find a
+ # way to append the special static nss flags to LIBS every time we do
+ # any check - this is definitely feasible, but not worthwhile the risk
+ # of breaking other things. So for our purposes it would be sufficient
+ # to assume that whoever is using static NSS knows what he is doing and
+ # has sensible libraries in the regular location
+ LDFLAGS="$LDFLAGS -static -L$other_libc_lib "
+ fi
+
+ # When linking against custom libc installed separately, we want to force
+ # all binary builds to be static, including the build done by configure
+ # itself to test for system features.
+ with_mysqld_ldflags="-all-static"
+ with_client_ldflags="-all-static"
+ NOINST_LDFLAGS="-all-static"
+ ],
+ [
+ other_libc_include=
+ other_libc_lib=
+ with_other_libc="no"
+ ]
+)
+AC_SUBST(NOINST_LDFLAGS)
+
+#
+# Check if we are using Linux and a glibc compiled with static nss
+# (this is true on the MySQL build machines to avoid NSS problems)
+#
+
+if test "$IS_LINUX" = "true" -a "$static_nss" = ""
+then
+ tmp=`nm /usr/lib/libc.a | grep _nss_files_getaliasent_r`
+ if test -n "$tmp"
+ then
+ STATIC_NSS_FLAGS="-lc -lnss_files -lnss_dns -lresolv"
+ STATIC_NSS_FLAGS="$STATIC_NSS_FLAGS $STATIC_NSS_FLAGS"
+ static_nss=1
+ fi
+fi
+
+
+AC_ARG_WITH(server-suffix,
+ [ --with-server-suffix Append value to the version string.],
+ [ MYSQL_SERVER_SUFFIX=`echo "$withval" | sed -e 's/^\(...................................\)..*$/\1/'` ],
+ [ MYSQL_SERVER_SUFFIX= ]
+ )
+AC_SUBST(MYSQL_SERVER_SUFFIX)
+
+# Set flags if we wants to have MIT threads.
+AC_ARG_WITH(mit-threads,
+ [ --with-mit-threads Always use included thread lib.],
+ [ with_mit_threads=$withval ],
+ [ with_mit_threads=no ]
+ )
+
+if test "$with_mit_threads" = "yes"
+then
+ enable_largefile="no" # Will not work on Linux.
+fi
+
+# Set flags if we want to force to use pthreads
+AC_ARG_WITH(pthread,
+ [ --with-pthread Force use of pthread library.],
+ [ with_pthread=$withval ],
+ [ with_pthread=no ]
+ )
+
+# Force use of thread libs LIBS
+AC_ARG_WITH(named-thread-libs,
+ [ --with-named-thread-libs=ARG
+ Use specified thread libraries instead of
+ those automatically found by configure.],
+ [ with_named_thread=$withval ],
+ [ with_named_thread=no ]
+ )
+
+# Force use of a curses libs
+AC_ARG_WITH(named-curses-libs,
+ [ --with-named-curses-libs=ARG
+ Use specified curses libraries instead of
+ those automatically found by configure.],
+ [ with_named_curses=$withval ],
+ [ with_named_curses=no ]
+ )
+
+# Force use of a zlib (compress)
+AC_ARG_WITH(named-z-libs,
+ [ --with-named-z-libs=ARG
+ Use specified zlib libraries instead of
+ those automatically found by configure.],
+ [ with_named_zlib=$withval ],
+ [ with_named_zlib=z ]
+ )
+
+# Make thread safe client
+AC_ARG_ENABLE(thread-safe-client,
+ [ --enable-thread-safe-client
+ Compile the client with threads.],
+ [ THREAD_SAFE_CLIENT=$enableval ],
+ [ THREAD_SAFE_CLIENT=no ]
+ )
+
+# compile with strings functions in assembler
+AC_ARG_ENABLE(assembler,
+ [ --enable-assembler Use assembler versions of some string
+ functions if available.],
+ [ ENABLE_ASSEMBLER=$enableval ],
+ [ ENABLE_ASSEMBLER=no ]
+ )
+
+AC_MSG_CHECKING(if we should use assembler functions)
+# For now we only support assembler on i386 and sparc systems
+AM_CONDITIONAL(ASSEMBLER_x86, test "$ENABLE_ASSEMBLER" = "yes" -a "$BASE_MACHINE_TYPE" = "i386")
+AM_CONDITIONAL(ASSEMBLER_sparc32, test "$ENABLE_ASSEMBLER" = "yes" -a "$BASE_MACHINE_TYPE" = "sparc")
+AM_CONDITIONAL(ASSEMBLER_sparc64, test "$ENABLE_ASSEMBLER" = "yes" -a "$BASE_MACHINE_TYPE" = "sparcv9")
+AM_CONDITIONAL(ASSEMBLER, test "$ASSEMBLER_x86_TRUE" = "" -o "$ASSEMBLER_sparc32_TRUE" = "")
+
+if test "$ASSEMBLER_TRUE" = ""
+then
+ AC_MSG_RESULT([yes])
+else
+ AC_MSG_RESULT([no])
+fi
+
+
+AC_MSG_CHECKING(if we should use RAID)
+AC_ARG_WITH(raid,
+ [ --with-raid Enable RAID Support],
+ [ USE_RAID=$withval ],
+ [ USE_RAID=no ]
+ )
+if test "$USE_RAID" = "yes"
+then
+ AC_MSG_RESULT([yes])
+ AC_DEFINE([USE_RAID])
+else
+ AC_MSG_RESULT([no])
+fi
+
+# Use this to set the place used for unix socket used to local communication.
+AC_ARG_WITH(unix-socket-path,
+ [ --with-unix-socket-path=SOCKET
+ Where to put the unix-domain socket. SOCKET must be
+ an absolute file name.],
+ [ MYSQL_UNIX_ADDR=$withval ],
+ [ MYSQL_UNIX_ADDR=$MYSQL_UNIX_ADDR_DEFAULT ]
+ )
+AC_SUBST(MYSQL_UNIX_ADDR)
+
+AC_ARG_WITH(tcp-port,
+ [ --with-tcp-port=port-number
+ Which port to use for MySQL services (default 3306)],
+ [ MYSQL_TCP_PORT=$withval ],
+ [ MYSQL_TCP_PORT=$MYSQL_TCP_PORT_DEFAULT ]
+ )
+AC_SUBST(MYSQL_TCP_PORT)
+# We might want to document the assigned port in the manual.
+AC_SUBST(MYSQL_TCP_PORT_DEFAULT)
+
+# Use this to set the place used for unix socket used to local communication.
+AC_ARG_WITH(mysqld-user,
+ [ --with-mysqld-user=username
+ What user the mysqld daemon shall be run as.],
+ [ MYSQLD_USER=$withval ],
+ [ MYSQLD_USER=mysql ]
+ )
+AC_SUBST(MYSQLD_USER)
+
+# If we should allow LOAD DATA LOCAL
+AC_MSG_CHECKING(If we should should enable LOAD DATA LOCAL by default)
+AC_ARG_ENABLE(local-infile,
+ [ --enable-local-infile Enable LOAD DATA LOCAL INFILE (default: disabled)],
+ [ ENABLED_LOCAL_INFILE=$enableval ],
+ [ ENABLED_LOCAL_INFILE=no ]
+ )
+if test "$ENABLED_LOCAL_INFILE" = "yes"
+then
+ AC_MSG_RESULT([yes])
+ AC_DEFINE([ENABLED_LOCAL_INFILE])
+else
+ AC_MSG_RESULT([no])
+fi
+
+MYSQL_SYS_LARGEFILE
+
+# Types that must be checked AFTER large file support is checked
+AC_TYPE_SIZE_T
+
+#--------------------------------------------------------------------
+# Check for system header files
+#--------------------------------------------------------------------
+
+AC_HEADER_DIRENT
+AC_HEADER_STDC
+AC_HEADER_SYS_WAIT
+AC_CHECK_HEADERS(fcntl.h float.h floatingpoint.h ieeefp.h limits.h \
+ memory.h pwd.h select.h \
+ stdlib.h stddef.h \
+ strings.h string.h synch.h sys/mman.h sys/socket.h netinet/in.h arpa/inet.h \
+ sys/timeb.h sys/types.h sys/un.h sys/vadvise.h sys/wait.h term.h \
+ unistd.h utime.h sys/utime.h termio.h termios.h sched.h crypt.h alloca.h \
+ sys/ioctl.h malloc.h sys/malloc.h linux/config.h)
+
+#--------------------------------------------------------------------
+# Check for system libraries. Adds the library to $LIBS
+# and defines HAVE_LIBM etc
+#--------------------------------------------------------------------
+
+AC_CHECK_LIB(m, floor, [], AC_CHECK_LIB(m, __infinity))
+
+AC_CHECK_LIB(nsl_r, gethostbyname_r, [],
+ AC_CHECK_LIB(nsl, gethostbyname_r))
+AC_CHECK_FUNC(gethostbyname_r)
+
+AC_CHECK_FUNC(setsockopt, , AC_CHECK_LIB(socket, setsockopt))
+AC_CHECK_FUNC(yp_get_default_domain, ,
+ AC_CHECK_LIB(nsl, yp_get_default_domain))
+AC_CHECK_FUNC(p2open, , AC_CHECK_LIB(gen, p2open))
+# This may get things to compile even if bind-8 is installed
+AC_CHECK_FUNC(bind, , AC_CHECK_LIB(bind, bind))
+# For crypt() on Linux
+AC_CHECK_LIB(crypt, crypt)
+AC_CHECK_FUNC(crypt, AC_DEFINE(HAVE_CRYPT))
+
+# For sem_xxx functions on Solaris 2.6
+AC_CHECK_FUNC(sem_init, , AC_CHECK_LIB(posix4, sem_init))
+
+# For compress in zlib
+MYSQL_CHECK_ZLIB_WITH_COMPRESS($with_named_zlib)
+
+#--------------------------------------------------------------------
+# Check for TCP wrapper support
+#--------------------------------------------------------------------
+
+AC_ARG_WITH(libwrap,
+[ --with-libwrap[=DIR] Compile in libwrap (tcp_wrappers) support],[
+ case "$with_libwrap" in
+ no) : ;;
+ yes|*)
+ _cppflags=${CPPFLAGS}
+ _ldflags=${LDFLAGS}
+
+ if test "$with_libwrap" != "yes"; then
+ CPPFLAGS="${CPPFLAGS} -I$with_libwrap/include"
+ LDFLAGS="${LDFLAGS} -L$with_libwrap/lib"
+ fi
+
+ _libs=${LIBS}
+ AC_CHECK_HEADER(tcpd.h,
+ LIBS="-lwrap $LIBS"
+ AC_MSG_CHECKING(for TCP wrappers library -lwrap)
+ AC_TRY_LINK([#include
+int allow_severity = 0;
+int deny_severity = 0;
+
+struct request_info *req;
+],[hosts_access (req)],
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(LIBWRAP)
+ AC_DEFINE(HAVE_LIBWRAP)
+ if test "$with_libwrap" != "yes"; then
+ WRAPLIBS="-L${with_libwrap}/lib"
+ fi
+ WRAPLIBS="${WRAPLIBS} -lwrap",
+ AC_MSG_RESULT(no)
+ CPPFLAGS=${_cppflags} LDFLAGS=${_ldflags}),
+ CPPFLAGS=${_cppflags} LDFLAGS=${_ldflags})
+ LDFLAGS=${_ldflags} LIBS=${_libs}
+ ;;
+ esac
+])
+AC_SUBST(WRAPLIBS)
+
+if test "$IS_LINUX" = "true"; then
+ AC_MSG_CHECKING([for atomic operations])
+
+ atom_ops=
+ AC_TRY_RUN([
+#include
+int main()
+{
+ atomic_t v;
+
+ atomic_set(&v, 23);
+ atomic_add(5, &v);
+ return atomic_read(&v) == 28 ? 0 : -1;
+}
+ ], AC_DEFINE(HAVE_ATOMIC_ADD) atom_ops="${atom_ops}atomic_add ",
+ )
+ AC_TRY_RUN([
+#include
+int main()
+{
+ atomic_t v;
+
+ atomic_set(&v, 23);
+ atomic_sub(5, &v);
+ return atomic_read(&v) == 18 ? 0 : -1;
+}
+ ], AC_DEFINE(HAVE_ATOMIC_SUB) atom_ops="${atom_ops}atomic_sub ",
+ )
+
+ if test -z "$atom_ops"; then atom_ops="no"; fi
+ AC_MSG_RESULT($atom_ops)
+
+ AC_ARG_WITH(pstack,
+ [ --with-pstack Use the pstack backtrace library],
+ [ USE_PSTACK=$withval ],
+ [ USE_PSTACK=no ])
+ pstack_libs=
+ pstack_dirs=
+ if test "$USE_PSTACK" = yes -a "$IS_LINUX" = "true" -a "$BASE_MACHINE_TYPE" = "i386" -a "$with_mit_threads" = "no"
+ then
+ have_libiberty= have_libbfd=
+ my_save_LIBS="$LIBS"
+dnl I have no idea if this is a good test - can not find docs for libiberty
+ AC_CHECK_LIB([iberty], [fdmatch],
+ [have_libiberty=yes
+ AC_CHECK_LIB([bfd], [bfd_openr], [have_libbfd=yes], , [-liberty])])
+ LIBS="$my_save_LIBS"
+
+ if test x"$have_libiberty" = xyes -a x"$have_libbfd" = xyes
+ then
+ pstack_dirs='$(top_srcdir)'/pstack
+ pstack_libs="../pstack/libpstack.a -lbfd -liberty"
+ # We must link staticly when using pstack
+ with_mysqld_ldflags="-all-static"
+ AC_SUBST([pstack_dirs])
+ AC_SUBST([pstack_libs])
+ AC_DEFINE([USE_PSTACK])
+dnl This check isn't needed, but might be nice to give some feedback....
+dnl AC_CHECK_HEADER(libiberty.h,
+dnl have_libiberty_h=yes,
+dnl have_libiberty_h=no)
+ else
+ USE_PSTACK="no"
+ fi
+ else
+ USE_PSTACK="no"
+ fi
+fi
+AM_CONDITIONAL(COMPILE_PSTACK, test "$USE_PSTACK" = "yes")
+AC_MSG_CHECKING([if we should use pstack])
+AC_MSG_RESULT([$USE_PSTACK])
+
+# Check for gtty if termio.h doesn't exists
+if test "$ac_cv_header_termio_h" = "no" -a "$ac_cv_header_termios_h" = "no"
+then
+ AC_CHECK_FUNC(gtty, , AC_CHECK_LIB(compat, gtty))
+fi
+# We make a special variable for client library's to avoid including
+# thread libs in the client.
+NON_THREADED_CLIENT_LIBS="$LIBS"
+
+AC_MSG_CHECKING([for int8])
+case $SYSTEM_TYPE in
+ *netware)
+ AC_MSG_RESULT([no])
+ ;;
+ *)
+AC_TRY_RUN([
+#ifdef HAVE_STDLIB_H
+#include
+#endif
+
+#ifdef HAVE_STDDEF_H
+#include
+#endif
+
+#ifdef HAVE_SYS_TYPES_H
+#include
+#endif
+
+int main()
+{
+ int8 i;
+ return 0;
+}
+], AC_DEFINE(HAVE_INT_8_16_32) AC_MSG_RESULT([yes]), AC_MSG_RESULT([no])
+)
+ ;;
+esac
+
+#
+# Some system specific hacks
+#
+
+MAX_C_OPTIMIZE="-O3"
+MAX_CXX_OPTIMIZE="-O3"
+
+case $SYSTEM_TYPE in
+ *solaris2.7*)
+ # Solaris 2.7 has a broken /usr/include/widec.h
+ # Make a fixed copy in ./include
+ echo "Fixing broken include files for $SYSTEM_TYPE"
+ echo " - Creating local copy of widec.h"
+ if test ! -d include
+ then
+ mkdir ./include
+ fi
+ builddir=`pwd`
+ sed -e "s|^#if[ ]*!defined(lint) && !defined(__lint)|#if !defined\(lint\) \&\& !defined\(__lint\) \&\& !defined\(getwc\)|" < /usr/include/widec.h > include/widec.h
+ CFLAGS="$CFLAGS -DHAVE_CURSES_H -I$builddir/include -DHAVE_RWLOCK_T"
+ CXXFLAGS="$CXXFLAGS -DHAVE_CURSES_H -I$builddir/include -DHAVE_RWLOCK_T"
+ ;;
+ *solaris2.8*)
+ # Solaris 2.8 has a broken /usr/include/widec.h
+ # Make a fixed copy in ./include
+ echo "Fixing broken include files for $SYSTEM_TYPE"
+ echo " - Creating local copy of widec.h"
+ if test ! -d include
+ then
+ mkdir ./include
+ fi
+ builddir=`pwd`
+ sed -e "s|^#if[ ]*!defined(__lint)|#if !defined\(__lint\) \&\& !defined\(getwc\)|" < /usr/include/widec.h > include/widec.h
+ CFLAGS="$CFLAGS -DHAVE_CURSES_H -I$builddir/include -DHAVE_RWLOCK_T"
+ CXXFLAGS="$CXXFLAGS -DHAVE_CURSES_H -I$builddir/include -DHAVE_RWLOCK_T"
+ ;;
+ *solaris2.5.1*)
+ echo "Enabling getpass() workaround for Solaris 2.5.1"
+ CFLAGS="$CFLAGS -DHAVE_BROKEN_GETPASS -DSOLARIS -DHAVE_RWLOCK_T";
+ CXXFLAGS="$CXXFLAGS -DHAVE_RWLOCK_T -DSOLARIS"
+ ;;
+ *solaris*)
+ CFLAGS="$CFLAGS -DHAVE_RWLOCK_T"
+ CXXFLAGS="$CXXFLAGS -DHAVE_RWLOCK_T"
+ ;;
+ *SunOS*)
+ echo "Enabling getpass() workaround for SunOS"
+ CFLAGS="$CFLAGS -DHAVE_BROKEN_GETPASS -DSOLARIS";
+ ;;
+ *hpux10.20*)
+ echo "Enabling workarounds for hpux 10.20"
+ CFLAGS="$CFLAGS -DHAVE_BROKEN_SNPRINTF -DSIGNALS_DONT_BREAK_READ -DDO_NOT_REMOVE_THREAD_WRAPPERS -DHPUX10 -DSIGNAL_WITH_VIO_CLOSE -DHAVE_BROKEN_PTHREAD_COND_TIMEDWAIT -DHAVE_POSIX1003_4a_MUTEX"
+ CXXFLAGS="$CXXFLAGS -DHAVE_BROKEN_SNPRINTF -D_INCLUDE_LONGLONG -DSIGNALS_DONT_BREAK_READ -DDO_NOT_REMOVE_THREAD_WRAPPERS -DHPUX10 -DSIGNAL_WITH_VIO_CLOSE -DHAVE_BROKEN_PTHREAD_COND_TIMEDWAIT -DHAVE_POSIX1003_4a_MUTEX"
+ if test "$with_named_thread" = "no"
+ then
+ echo "Using --with-named-thread=-lpthread"
+ with_named_thread="-lcma"
+ fi
+ ;;
+ *hpux11.*)
+ echo "Enabling workarounds for hpux 11"
+ CFLAGS="$CFLAGS -DHPUX11 -DHAVE_BROKEN_PREAD -DDONT_USE_FINITE -DHAVE_BROKEN_GETPASS -DNO_FCNTL_NONBLOCK -DDO_NOT_REMOVE_THREAD_WRAPPERS -DHAVE_BROKEN_PTHREAD_COND_TIMEDWAIT"
+ CXXFLAGS="$CXXFLAGS -DHPUX11 -DHAVE_BROKEN_PREAD -DDONT_USE_FINITE -D_INCLUDE_LONGLONG -DNO_FCNTL_NONBLOCK -DDO_NOT_REMOVE_THREAD_WRAPPERS -DHAVE_BROKEN_PTHREAD_COND_TIMEDWAIT"
+ if test "$with_named_thread" = "no"
+ then
+ echo "Using --with-named-thread=-lpthread"
+ with_named_thread="-lpthread"
+ fi
+ # Fixes for HPUX 11.0 compiler
+ if test "$ac_cv_prog_gcc" = "no"
+ then
+ CFLAGS="$CFLAGS -DHAVE_BROKEN_INLINE"
+ CXXFLAGS="$CXXFLAGS +O2"
+ MAX_C_OPTIMIZE=""
+ MAX_CXX_OPTIMIZE=""
+ fi
+ ;;
+ *rhapsody*)
+ if test "$ac_cv_prog_gcc" = "yes"
+ then
+ CPPFLAGS="$CPPFLAGS -traditional-cpp "
+ CFLAGS="-DHAVE_CTHREADS_WRAPPER -DDO_NOT_REMOVE_THREAD_WRAPPERS"
+ CXXFLAGS="-DHAVE_CTHREADS_WRAPPER"
+ if test $with_named_curses = "no"
+ then
+ with_named_curses=""
+ fi
+ fi
+ ;;
+ *darwin5*)
+ if test "$ac_cv_prog_gcc" = "yes"
+ then
+ FLAGS="-traditional-cpp -DHAVE_DARWIN_THREADS -D_P1003_1B_VISIBLE -DSIGNAL_WITH_VIO_CLOSE -DSIGNALS_DONT_BREAK_READ -DHAVE_BROKEN_REALPATH"
+ CFLAGS="$CFLAGS $FLAGS"
+ CXXFLAGS="$CXXFLAGS $FLAGS"
+ MAX_C_OPTIMIZE="-O"
+ with_named_curses=""
+ fi
+ ;;
+ *darwin6*)
+ if test "$ac_cv_prog_gcc" = "yes"
+ then
+ FLAGS="-DHAVE_DARWIN_THREADS -D_P1003_1B_VISIBLE -DSIGNAL_WITH_VIO_CLOSE -DSIGNALS_DONT_BREAK_READ -DHAVE_BROKEN_REALPATH"
+ CFLAGS="$CFLAGS $FLAGS"
+ CXXFLAGS="$CXXFLAGS $FLAGS"
+ MAX_C_OPTIMIZE="-O"
+ fi
+ ;;
+ *darwin7*)
+ if test "$ac_cv_prog_gcc" = "yes"
+ then
+ FLAGS="-DHAVE_DARWIN_THREADS -D_P1003_1B_VISIBLE -DSIGNAL_WITH_VIO_CLOSE -DSIGNALS_DONT_BREAK_READ"
+ CFLAGS="$CFLAGS $FLAGS"
+ CXXFLAGS="$CXXFLAGS $FLAGS"
+ MAX_C_OPTIMIZE="-O"
+ fi
+ ;;
+ *freebsd*)
+ echo "Adding fix for interrupted reads"
+ OSVERSION=`sysctl -a | grep osreldate | awk '{ print $2 }'`
+ if test "$OSVERSION" -gt "480100" && \
+ test "$OSVERSION" -lt "500000" || \
+ test "$OSVERSION" -gt "500109"
+ then
+ CXXFLAGS="$CXXFLAGS -DMYSQLD_NET_RETRY_COUNT=1000000"
+ else
+ CFLAGS="$CFLAGS -DHAVE_BROKEN_REALPATH"
+ CXXFLAGS="$CXXFLAGS -DMYSQLD_NET_RETRY_COUNT=1000000 -DHAVE_BROKEN_REALPATH"
+ fi
+ ;;
+ *netbsd*)
+ echo "Adding flag -Dunix"
+ CFLAGS="$CFLAGS -Dunix"
+ CXXFLAGS="$CXXFLAGS -Dunix"
+ OVERRIDE_MT_LD_ADD="\$(top_srcdir)/mit-pthreads/obj/libpthread.a"
+ ;;
+ *bsdi*)
+ echo "Adding fix for BSDI"
+ CFLAGS="$CFLAGS -D__BSD__ -DHAVE_BROKEN_REALPATH"
+ AC_DEFINE_UNQUOTED(SOCKOPT_OPTLEN_TYPE, size_t)
+ ;;
+ *sgi-irix6*)
+ if test "$with_named_thread" = "no"
+ then
+ echo "Using --with-named-thread=-lpthread"
+ with_named_thread="-lpthread"
+ fi
+ CXXFLAGS="$CXXFLAGS -D_BOOL"
+ ;;
+ *aix4.3*)
+ echo "Adding defines for AIX"
+ CFLAGS="$CFLAGS -Wa,-many -DUNDEF_HAVE_INITGROUPS -DSIGNALS_DONT_BREAK_READ"
+ CXXFLAGS="$CXXFLAGS -Wa,-many -DUNDEF_HAVE_INITGROUPS -DSIGNALS_DONT_BREAK_READ"
+ ;;
+dnl Is this the right match for DEC OSF on alpha?
+ *dec-osf*)
+ if test "$ac_cv_prog_gcc" = "yes" && test "$host_cpu" = "alpha"
+ then
+ echo "Adding defines for DEC OSF on alpha"
+ CFLAGS="$CFLAGS -mieee"
+ CXXFLAGS="$CXXFLAGS -mieee"
+ fi
+ echo "Adding defines for OSF1"
+ # gethostbyname_r is deprecated and doesn't work ok on OSF1
+ CFLAGS="$CFLAGS -DUNDEF_HAVE_GETHOSTBYNAME_R"
+ CXXFLAGS="$CXXFLAGS -DUNDEF_HAVE_GETHOSTBYNAME_R"
+ ;;
+ *netware*)
+ # No need for curses library so set it to null
+ with_named_curses=""
+
+ # No thread library - in LibC
+ with_named_thread=""
+
+ #
+ # Edit Makefile.in files.
+ #
+ echo -n "configuring Makefile.in files for NetWare... "
+ for file in sql/Makefile.in libmysql/Makefile.in libmysql_r/Makefile.in sql/share/Makefile.in strings/Makefile.in client/Makefile.in
+ do
+ # echo "#### $file ####"
+ filedir="`dirname $file`"
+ filebase="`basename $file`"
+ filesed=$filedir/$filebase.sed
+ #
+ # Backup and always use original file
+ #
+ if test -f $file.bk
+ then
+ cp -fp $file.bk $file
+ else
+ cp -fp $file $file.bk
+ fi
+ case $file in
+ sql/Makefile.in)
+ # Use gen_lex_hash.linux instead of gen_lex_hash
+ # Add library dependencies to mysqld_DEPENDENCIES
+ lib_DEPENDENCIES="\$(bdb_libs_with_path) \$(innodb_libs) \$(pstack_libs) \$(innodb_system_libs) \$(openssl_libs)"
+ cat > $filesed << EOF
+s,\(^.*\$(MAKE) gen_lex_hash\),#\1,
+s,\(\./gen_lex_hash\),\1.linux,
+s%\(mysqld_DEPENDENCIES = \) %\1$lib_DEPENDENCIES %
+EOF
+ ;;
+ sql/share/Makefile.in)
+ cat > $filesed << EOF
+s,\(extra/comp_err\),\1.linux,
+EOF
+ ;;
+ libmysql/Makefile.in)
+ cat > $filesed << EOF
+s,\(\./conf_to_src\)\( \$(top_srcdir)\),\1.linux\2,
+s,\(: conf_to_src\),\1.linux,
+EOF
+ ;;
+ libmysql_r/Makefile.in)
+ cat > $filesed << EOF
+s,\(\./conf_to_src\)\( \$(top_srcdir)\),\1.linux\2,
+s,\(: conf_to_src\),\1.linux,
+EOF
+ ;;
+ strings/Makefile.in)
+ cat > $filesed << EOF
+s,\(\./conf_to_src\)\( \$(top_srcdir)\),\1.linux\2,
+s,\(: conf_to_src\),\1.linux,
+EOF
+ ;;
+ client/Makefile.in)
+ #
+ cat > $filesed << EOF
+s,libmysqlclient.la,.libs/libmysqlclient.a,
+EOF
+ ;;
+ esac
+ if `sed -f $filesed $file > $file.nw`;\
+ then
+ mv -f $file.nw $file
+ rm -f $filesed
+ else
+ exit 1
+ fi
+ # wait for file system changes to complete
+ sleep 1
+ done
+ echo "done"
+
+ #
+ # Make sure the following files are writable.
+ #
+ # When the files are retrieved from some source code control systems they are read-only.
+ #
+ echo -n "making sure specific build files are writable... "
+ for file in \
+ Docs/include.texi \
+ Docs/mysql.info \
+ Docs/manual.txt \
+ Docs/manual_toc.html \
+ Docs/manual.html \
+ Docs/INSTALL-BINARY \
+ INSTALL-SOURCE \
+ COPYING \
+ COPYING.LIB \
+ MIRRORS
+ do
+ if test -e $file; then
+ chmod +w $file
+ fi
+ done
+ echo "done"
+
+ ;;
+esac
+
+
+#---START: Used in for client configure
+# Check if we threads are in libc or if we should use
+# -lpthread, -lpthreads or mit-pthreads
+# We have to check libc last because else it fails on Solaris 2.6
+
+with_posix_threads="no"
+# Hack for DEC-UNIX (OSF1)
+if test "$with_named_thread" = "no" -a "$with_mit_threads" = "no"
+then
+ # Look for LinuxThreads.
+ AC_MSG_CHECKING("LinuxThreads")
+ res=`grep Linuxthreads /usr/include/pthread.h 2>/dev/null | wc -l`
+ if test "$res" -gt 0
+ then
+ AC_MSG_RESULT("Found")
+ AC_DEFINE(HAVE_LINUXTHREADS)
+ # Linux 2.0 sanity check
+ AC_TRY_COMPILE([#include ], [int a = sched_get_priority_min(1);], ,
+ AC_MSG_ERROR([Syntax error in sched.h. Change _P to __P in the /usr/include/sched.h file. See the Installation chapter in the Reference Manual]))
+ # RedHat 5.0 does not work with dynamic linking of this. -static also
+ # gives a speed increase in linux so it does not hurt on other systems.
+ with_named_thread="-lpthread"
+ else
+ AC_MSG_RESULT("Not found")
+ # If this is a linux machine we should barf
+ if test "$IS_LINUX" = "true"
+ then
+ AC_MSG_ERROR([This is a linux system and Linuxthreads was not
+found. On linux Linuxthreads should be used. Please install Linuxthreads
+(or a new glibc) and try again. See the Installation chapter in the
+Reference Manual for more information.])
+ else
+ AC_MSG_CHECKING("DEC threads")
+ if test -f /usr/shlib/libpthread.so -a -f /usr/lib/libmach.a -a -f /usr/ccs/lib/cmplrs/cc/libexc.a
+ then
+ with_named_thread="-lpthread -lmach -lexc"
+ CFLAGS="$CFLAGS -D_REENTRANT"
+ CXXFLAGS="$CXXFLAGS -D_REENTRANT"
+ AC_DEFINE(HAVE_DEC_THREADS)
+ AC_MSG_RESULT("yes")
+ else
+ AC_MSG_RESULT("no")
+ AC_MSG_CHECKING("DEC 3.2 threads")
+ if test -f /usr/shlib/libpthreads.so -a -f /usr/lib/libmach.a -a -f /usr/ccs/lib/cmplrs/cc/libexc.a
+ then
+ with_named_thread="-lpthreads -lmach -lc_r"
+ AC_DEFINE(HAVE_DEC_THREADS)
+ AC_DEFINE(HAVE_DEC_3_2_THREADS)
+ with_osf32_threads="yes"
+ MYSQLD_DEFAULT_SWITCHES="--skip-thread-priority"
+ AC_MSG_RESULT("yes")
+ else
+ AC_MSG_RESULT("no")
+ fi
+ fi
+ fi
+ fi
+fi
+
+
+dnl This is needed because -lsocket has to come after the thread
+dnl library on SCO.
+AC_DEFUN([MYSQL_REMOVE_SOCKET_FROM_LIBS_HACK], [
+ LIBS=`echo " $LIBS " | sed -e 's/ -lsocket / /g'`
+])
+# Hack for SCO UNIX
+if test "$with_named_thread" = "no"
+then
+ AC_MSG_CHECKING("SCO threads")
+ if expr "$SYSTEM_TYPE" : ".*sco.*" > /dev/null
+ then
+ if test -f /usr/lib/libgthreads.a -o -f /usr/lib/libgthreads.so
+ then
+ MYSQL_REMOVE_SOCKET_FROM_LIBS_HACK
+ with_named_thread="-lgthreads -lsocket -lgthreads"
+ # sched.h conflicts with fsu-threads
+ touch ./include/sched.h
+
+ # We must have gcc
+ if expr "$CC" : ".*gcc.*"
+ then
+ AC_MSG_RESULT("yes")
+ else
+ AC_MSG_ERROR([On SCO UNIX MySQL must be compiled with gcc. See the Installation chapter in the Reference Manual.]);
+ fi
+ AC_MSG_RESULT("yes")
+ elif test -f /usr/local/lib/libpthread.a -o -f /usr/local/lib/libpthread.so
+ then
+ MYSQL_REMOVE_SOCKET_FROM_LIBS_HACK
+ with_named_thread="-lpthread -lsocket"
+ # sched.h conflicts with fsu-threads
+ # touch ./include/sched.h
+
+ AC_MSG_CHECKING("for gcc")
+ # We must have gcc
+ if expr "$CC" : ".*gcc.*"
+ then
+ AC_MSG_RESULT("yes")
+ else
+ AC_MSG_ERROR([On SCO UNIX MySQL must be compiled with gcc. See the Installation chapter in the Reference Manual.]);
+ fi
+ AC_MSG_RESULT("yes")
+ # Hack for SCO UnixWare 7.1.x
+ #
+ elif test "$with_named_thread" = "no"
+ then
+ AC_MSG_RESULT("no")
+ AC_MSG_CHECKING("SCO UnixWare 7.1.x native threads")
+ if expr "$SYSTEM_TYPE" : ".*sco.*" > /dev/null
+ then
+ if test -f /usr/lib/libthread.so -o -f /usr/lib/libthreadT.so
+ then
+ MYSQL_REMOVE_SOCKET_FROM_LIBS_HACK
+ if expr "$CC" : ".*gcc.*"
+ then
+ with_named_thread="-pthread -lsocket -lnsl"
+ else
+ with_named_thread="-Kthread -lsocket -lnsl"
+ fi
+ if expr "$SYSTEM_TYPE" : ".*unixware7.0.0" > /dev/null
+ then
+ AC_DEFINE(HAVE_UNIXWARE7_THREADS)
+ else
+ AC_DEFINE(HAVE_UNIXWARE7_POSIX)
+ fi
+ AC_MSG_RESULT("yes")
+ # We must have cc
+ AC_MSG_CHECKING("for gcc")
+ if expr "$CC" : ".*gcc.*"
+ then
+ CC="$CC -pthread -DUNIXWARE_7 -DHAVE_BROKEN_RWLOCK";
+ CXX="$CXX -pthread -DUNIXWARE_7 -DHAVE_BROKEN_RWLOCK";
+ else
+ CC="$CC -Kthread -DUNIXWARE_7 -DHAVE_BROKEN_RWLOCK";
+ CXX="$CXX -Kthread -DUNIXWARE_7 -DHAVE_BROKEN_RWLOCK";
+ fi
+ else
+ { echo "configure: error: Can't find thread libs on SCO UnixWare7. See the Installation chapter in the Reference Manual." 1>&2; exit 1; };
+ fi
+ else
+ AC_MSG_RESULT("no")
+ fi
+ else
+ AC_MSG_ERROR([On SCO UNIX MySQL requires that the FSUThreads package is installed. See the Installation chapter in the Reference Manual.]);
+ fi
+ else
+ AC_MSG_RESULT("no")
+ fi
+fi
+# Hack for SCO UnixWare7
+#
+if test "$with_named_thread" = "no"
+then
+ AC_MSG_CHECKING("SCO UnixWare7 native threads")
+ if expr "$SYSTEM_TYPE" : ".*UnixWare*" > /dev/null
+ then
+ if test -f /usr/lib/libthread.so -o -f /usr/lib/libthreadT.so
+ then
+ MYSQL_REMOVE_SOCKET_FROM_LIBS_HACK
+ if expr "$CC" : ".*gcc.*"
+ then
+ with_named_thread="-pthread -lsocket -lnsl"
+ else
+ with_named_thread="-Kthread -lsocket -lnsl"
+ fi
+ if expr "$SYSTEM_TYPE" : ".*unixware7.0.0" > /dev/null
+ then
+ AC_DEFINE(HAVE_UNIXWARE7_THREADS)
+ else
+ AC_DEFINE(HAVE_UNIXWARE7_POSIX)
+ fi
+ # We must have cc
+ AC_MSG_CHECKING("for gcc")
+ if expr "$CC" : ".*gcc.*"
+ then
+ CC="$CC -pthread -DUNIXWARE_7 -DHAVE_BROKEN_RWLOCK";
+ CXX="$CXX -pthread -DUNIXWARE_7 -DHAVE_BROKEN_RWLOCK";
+ else
+ CC="$CC -Kthread -DUNIXWARE_7 -DHAVE_BROKEN_RWLOCK";
+ CXX="$CXX -Kthread -DUNIXWARE_7 -DHAVE_BROKEN_RWLOCK";
+ fi
+ AC_MSG_RESULT("yes")
+ else
+ { echo "configure: error: Can't find thread libs on SCO UnixWare7. See the Installation chapter in the Reference Manual." 1>&2; exit 1; };
+ fi
+ else
+ AC_MSG_RESULT("no")
+ fi
+fi
+
+# Hack for Caldera OpenUNIX8
+#
+if test "$with_named_thread" = "no"
+then
+ AC_MSG_CHECKING("OpenUNIX8 native threads")
+ if expr "$SYSTEM_TYPE" : ".*OpenUNIX*" > /dev/null
+ then
+ if test -f /usr/lib/libthread.so -o -f /usr/lib/libthreadT.so
+ then
+ MYSQL_REMOVE_SOCKET_FROM_LIBS_HACK
+ if expr "$CC" : ".*gcc.*"
+ then
+ with_named_thread="-pthread -lsocket -lnsl"
+ else
+ with_named_thread="-Kthread -lsocket -lnsl"
+ fi
+ if expr "$SYSTEM_TYPE" : ".*unixware7.0.0" > /dev/null
+ then
+ AC_DEFINE(HAVE_UNIXWARE7_THREADS)
+ else
+ AC_DEFINE(HAVE_UNIXWARE7_POSIX)
+ fi
+ # We must have cc
+ AC_MSG_CHECKING("for gcc")
+ if expr "$CC" : ".*gcc.*"
+ then
+ CC="$CC -pthread -DUNIXWARE_7 -DHAVE_BROKEN_RWLOCK";
+ CXX="$CXX -pthread -DUNIXWARE_7 -DHAVE_BROKEN_RWLOCK";
+ else
+ CC="$CC -Kthread -DUNIXWARE_7 -DHAVE_BROKEN_RWLOCK";
+ CXX="$CXX -Kthread -DUNIXWARE_7 -DHAVE_BROKEN_RWLOCK";
+ fi
+ AC_MSG_RESULT("yes")
+ else
+ { echo "configure: error: Can't find thread libs on Caldera OpenUNIX 8. See the Installation chapter in the Reference Manual." 1>&2; exit 1; };
+ fi
+ else
+ AC_MSG_RESULT("no")
+ fi
+fi
+
+# Hack for Siemens UNIX
+if test "$with_named_thread" = "no" -a "$with_mit_threads" = "no"
+then
+ AC_MSG_CHECKING("Siemens threads")
+ if test -f /usr/lib/libxnet.so -a "$SYSTEM_TYPE" = "sni-sysv4"
+ then
+ LIBS="-lxnet $LIBS"
+ NON_THREADED_CLIENT_LIBS="$NON_THREADED_CLIENT_LIBS -lxnet"
+ with_named_thread="-Kthread $LDFLAGS -lxnet"
+ LD_FLAGS=""
+ CFLAGS="-Kthread $CFLAGS"
+ CXXFLAGS="-Kthread $CXXFLAGS"
+ AC_MSG_RESULT("yes")
+ else
+ AC_MSG_RESULT("no")
+ fi
+fi
+
+# Use library named -lpthread
+if test "$with_named_thread" = "no" -a "$with_pthread" = "yes"
+then
+ with_named_thread="-lpthread"
+fi
+
+#---END:
+
+# Hack for Solaris >= 2.5
+# We want both the new and the old interface
+
+if test "$with_named_thread" = "no" -a "$with_mit_threads" = "no"
+then
+ AC_MSG_CHECKING("Solaris threads")
+ if test -f /usr/lib/libpthread.so -a -f /usr/lib/libthread.so
+ then
+ with_named_thread="-lpthread -lthread"
+ AC_MSG_RESULT("yes")
+ else
+ AC_MSG_RESULT("no")
+ fi
+fi
+
+TOOLS_LIBS="$NON_THREADED_CLIENT_LIBS"
+
+# Should we use named pthread library ?
+AC_MSG_CHECKING("named thread libs:")
+if test "$with_named_thread" != "no"
+then
+ LIBS="$with_named_thread $LIBS $with_named_thread"
+ TOOLS_LIBS="$with_named_thread $TOOLS_LIBS $with_named_thread"
+ with_posix_threads="yes"
+ with_mit_threads="no"
+ AC_MSG_RESULT("$with_named_thread")
+else
+ AC_MSG_RESULT("no")
+ if test "$with_mit_threads" = "no"
+ then
+ # pthread_create is in standard libraries (As in BSDI 3.0)
+ AC_MSG_CHECKING("for pthread_create in -libc");
+ AC_TRY_LINK(
+ [#include ],
+ [ (void) pthread_create((pthread_t*) 0,(pthread_attr_t*) 0, 0, 0); ],
+ with_posix_threads=yes, with_posix_threads=no)
+ AC_MSG_RESULT("$with_posix_threads")
+ if test "$with_posix_threads" = "no"
+ then
+ AC_MSG_CHECKING("for pthread_create in -lpthread");
+ ac_save_LIBS="$LIBS"
+ ac_save_TOOLS_LIBS="$TOOLS_LIBS"
+ LIBS="$LIBS -lpthread"
+ TOOLS_LIBS="$TOOLS_LIBS -lpthread"
+ AC_TRY_LINK(
+ [#include ],
+ [ (void) pthread_create((pthread_t*) 0,(pthread_attr_t*) 0, 0, 0); ],
+ with_posix_threads=yes, with_posix_threads=no)
+ AC_MSG_RESULT("$with_posix_threads")
+ if test "$with_posix_threads" = "no"
+ then
+ LIBS=" $ac_save_LIBS -lpthreads"
+ TOOLS_LIBS=" $ac_save_TOOLS_LIBS -lpthreads"
+ AC_MSG_CHECKING("for pthread_create in -lpthreads");
+ AC_TRY_LINK(
+ [#include ],
+ [ pthread_create((pthread_t*) 0,(pthread_attr_t*) 0, 0, 0); ],
+ with_posix_threads=yes, with_posix_threads=no)
+ AC_MSG_RESULT("$with_posix_threads")
+ if test "$with_posix_threads" = "no"
+ then
+ # This is for FreeBSD
+ LIBS="$ac_save_LIBS -pthread"
+ TOOLS_LIBS="$ac_save_TOOLS_LIBS -pthread"
+ AC_MSG_CHECKING("for pthread_create in -pthread");
+ AC_TRY_LINK(
+ [#include ],
+ [ pthread_create((pthread_t*) 0,(pthread_attr_t*) 0, 0, 0); ],
+ with_posix_threads=yes, with_posix_threads=no)
+ AC_MSG_RESULT("$with_posix_threads")
+ if test "$with_posix_threads" = "no"
+ then
+ with_mit_threads="yes"
+ LIBS="$ac_save_LIBS"
+ TOOLS_LIBS="$ac_save_TOOLS_LIBS"
+ fi
+ fi
+ fi
+ fi
+ fi
+fi
+
+#---START: Used in for client configure
+# Must be checked after, because strtok_r may be in -lpthread
+# On AIX strtok_r is in libc_r
+
+my_save_LIBS="$LIBS"
+AC_CHECK_LIB(pthread,strtok_r)
+LIBS="$my_save_LIBS"
+if test "$ac_cv_lib_pthread_strtok_r" = "no"
+then
+ AC_CHECK_LIB(c_r,strtok_r)
+ case "$with_osf32_threads---$target_os" in
+ # Don't keep -lc_r in LIBS; -pthread handles it magically
+ yes---* | *---freebsd* | *---hpux*) LIBS="$my_save_LIBS" ;;
+
+ esac
+ AC_CHECK_FUNCS(strtok_r pthread_init)
+else
+ AC_CHECK_FUNCS(strtok_r)
+fi
+#---END:
+
+# Check for dlopen, needed for user definable functions
+# This must be checked after threads on AIX
+# We only need this for mysqld, not for the clients.
+
+my_save_LIBS="$LIBS"
+LIBS=""
+AC_CHECK_LIB(dl,dlopen)
+LIBDL=$LIBS
+LIBS="$my_save_LIBS"
+AC_SUBST(LIBDL)
+
+# System characteristics
+case $SYSTEM_TYPE in
+ *netware* | *modesto*) ;;
+ *)
+AC_SYS_RESTARTABLE_SYSCALLS
+ ;;
+esac
+
+# Build optimized or debug version ?
+# First check for gcc and g++
+if test "$ac_cv_prog_gcc" = "yes"
+then
+ DEBUG_CFLAGS="-g"
+ DEBUG_OPTIMIZE_CC="-O"
+ OPTIMIZE_CFLAGS="$MAX_C_OPTIMIZE"
+else
+ DEBUG_CFLAGS="-g"
+ DEBUG_OPTIMIZE_CC=""
+ OPTIMIZE_CFLAGS="-O"
+fi
+if test "$ac_cv_prog_cxx_g" = "yes"
+then
+ DEBUG_CXXFLAGS="-g"
+ DEBUG_OPTIMIZE_CXX="-O"
+ OPTIMIZE_CXXFLAGS="$MAX_CXX_OPTIMIZE"
+else
+ DEBUG_CXXFLAGS="-g"
+ DEBUG_OPTIMIZE_CXX=""
+ OPTIMIZE_CXXFLAGS="-O"
+fi
+
+if expr "$SYSTEM_TYPE" : ".*netware.*" > /dev/null; then
+ DEBUG_CFLAGS="$DEBUG_CFLAGS -DDEBUG -sym internal,codeview4"
+ DEBUG_CXXFLAGS="$DEBUG_CXXFLAGS -DDEBUG -sym internal,codeview4"
+ OPTIMIZE_CFLAGS="$OPTIMIZE_CFLAGS -DNDEBUG"
+ OPTIMIZE_CXXFLAGS="$OPTIMIZE_CXXFLAGS -DNDEBUG"
+fi
+
+AC_ARG_WITH(debug,
+ [ --without-debug Build a production version without debugging code],
+ [with_debug=$withval],
+ [with_debug=no])
+if test "$with_debug" = "yes"
+then
+ # Medium debug.
+ CFLAGS="$DEBUG_CFLAGS $DEBUG_OPTIMIZE_CC -DDBUG_ON -DSAFE_MUTEX $CFLAGS"
+ CXXFLAGS="$DEBUG_CXXFLAGS $DEBUG_OPTIMIZE_CXX -DSAFE_MUTEX $CXXFLAGS"
+elif test "$with_debug" = "full"
+then
+ # Full debug. Very slow in some cases
+ CFLAGS="$DEBUG_CFLAGS -DDBUG_ON -DSAFE_MUTEX -DSAFEMALLOC $CFLAGS"
+ CXXFLAGS="$DEBUG_CXXFLAGS -DSAFE_MUTEX -DSAFEMALLOC $CXXFLAGS"
+else
+ # Optimized version. No debug
+ CFLAGS="$OPTIMIZE_CFLAGS -DDBUG_OFF $CFLAGS"
+ CXXFLAGS="$OPTIMIZE_CXXFLAGS -DDBUG_OFF $CXXFLAGS"
+fi
+
+# Force static compilation to avoid linking problems/get more speed
+AC_ARG_WITH(mysqld-ldflags,
+ [ --with-mysqld-ldflags Extra linking arguments for mysqld],
+ [MYSQLD_EXTRA_LDFLAGS=$withval],
+ [MYSQLD_EXTRA_LDFLAGS=])
+AC_SUBST(MYSQLD_EXTRA_LDFLAGS)
+
+AC_ARG_WITH(client-ldflags,
+ [ --with-client-ldflags Extra linking arguments for clients],
+ [CLIENT_EXTRA_LDFLAGS=$withval],
+ [CLIENT_EXTRA_LDFLAGS=])
+AC_SUBST(CLIENT_EXTRA_LDFLAGS)
+
+AC_ARG_WITH(lib-ccflags,
+ [ --with-lib-ccflags Extra CC options for libraries],
+ [LIB_EXTRA_CCFLAGS=$withval],
+ [LIB_EXTRA_CCFLAGS=])
+AC_SUBST(LIB_EXTRA_CCFLAGS)
+
+# Avoid stupid bug on some OS
+AC_ARG_WITH(low-memory,
+ [ --with-low-memory Try to use less memory to compile to avoid
+ memory limitations.],
+ [with_lowmem=$withval],
+ [with_lowmem=no])
+if test "$with_lowmem" = "yes"
+then
+ if test "$ac_cv_prog_gcc" = "yes"
+ then
+ LM_CFLAGS="-fno-inline"
+ else
+ LM_CFLAGS="-O0"
+ fi
+else
+ LM_CFLAGS=""
+fi
+AC_SUBST(LM_CFLAGS)
+
+AC_ARG_WITH(comment,
+ [ --with-comment Comment about compilation environment.],
+ [with_comment=$withval],
+ [with_comment=no])
+if test "$with_comment" != "no"
+then
+ COMPILATION_COMMENT=$with_comment
+else
+ COMPILATION_COMMENT="Source distribution"
+fi
+AC_SUBST(COMPILATION_COMMENT)
+
+AC_MSG_CHECKING("need of special linking flags")
+if test "$IS_LINUX" = "true" -a "$ac_cv_prog_gcc" = "yes" -a "$all_is_static" != "yes"
+then
+ LDFLAGS="$LDFLAGS -rdynamic"
+ AC_MSG_RESULT("-rdynamic")
+else
+ AC_MSG_RESULT("none")
+fi
+
+dnl Checks for typedefs, structures, and compiler characteristics.
+AC_C_CONST
+AC_C_INLINE
+AC_TYPE_OFF_T
+AC_STRUCT_ST_RDEV
+AC_HEADER_TIME
+AC_STRUCT_TM
+# AC_CHECK_SIZEOF return 0 when it does not find the size of a
+# type. We want a error instead.
+AC_CHECK_SIZEOF(char, 1)
+if test "$ac_cv_sizeof_char" -eq 0
+then
+ AC_MSG_ERROR([No size for char type.
+A likely cause for this could be that there isn't any
+static libraries installed. You can verify this by checking if you have libm.a
+in /lib, /usr/lib or some other standard place. If this is the problem,
+install the static libraries and try again. If this isn't the problem,
+examine config.log for possible errors. If you want to report this, use
+'scripts/mysqlbug' and include at least the last 20 rows from config.log!])
+fi
+AC_CHECK_SIZEOF(char*, 4)
+AC_CHECK_SIZEOF(int, 4)
+if test "$ac_cv_sizeof_int" -eq 0
+then
+ AC_MSG_ERROR("No size for int type.")
+fi
+AC_CHECK_SIZEOF(long, 4)
+if test "$ac_cv_sizeof_long" -eq 0
+then
+ AC_MSG_ERROR("No size for long type.")
+fi
+AC_CHECK_SIZEOF(long long, 8)
+if test "$ac_cv_sizeof_long_long" -eq 0
+then
+ AC_MSG_ERROR("MySQL needs a long long type.")
+fi
+# off_t is not a builtin type
+MYSQL_CHECK_SIZEOF(off_t, 4)
+if test "$ac_cv_sizeof_off_t" -eq 0
+then
+ AC_MSG_ERROR("MySQL needs a off_t type.")
+fi
+# This always gives a warning. Ignore it unless you are cross compiling
+AC_C_BIGENDIAN
+#---START: Used in for client configure
+# Check base type of last arg to accept
+MYSQL_TYPE_ACCEPT
+
+#---END:
+# Find where the stack goes
+MYSQL_STACK_DIRECTION
+# We want to skip alloca on irix unconditionally. It may work on some version..
+MYSQL_FUNC_ALLOCA
+# Do struct timespec have members tv_sec or ts_sec
+MYSQL_TIMESPEC_TS
+# Do we have the tzname variable
+MYSQL_TZNAME
+# Do the system files define ulong
+MYSQL_CHECK_ULONG
+# Do the system files define uchar
+MYSQL_CHECK_UCHAR
+# Do the system files define uint
+MYSQL_CHECK_UINT
+# Check for fp_except in ieeefp.h
+MYSQL_CHECK_FP_EXCEPT
+# Check for IN_ADDR_T
+MYSQL_CHECK_IN_ADDR_T
+# Do the c++ compiler have a bool type
+MYSQL_CXX_BOOL
+# Check some common bugs with gcc 2.8.# on sparc
+if ! ( expr "$SYSTEM_TYPE" : ".*netware.*" > /dev/null ); then
+MYSQL_CHECK_LONGLONG_TO_FLOAT
+if test "$ac_cv_conv_longlong_to_float" != "yes"
+then
+ AC_MSG_ERROR([Your compiler cannot convert a longlong value to a float!
+If you are using gcc 2.8.# you should upgrade to egcs 1.0.3 or newer and try
+again]);
+fi
+fi
+MYSQL_PTHREAD_YIELD
+
+######################################################################
+# For readline/libedit (We simply move the mimimum amount of stuff from
+# the readline/libedit configure.in here)
+
+dnl Checks for header files.
+AC_CHECK_HEADERS(malloc.h sys/cdefs.h)
+
+dnl Checks for library functions.
+AC_FUNC_ALLOCA
+AC_PROG_GCC_TRADITIONAL
+AC_TYPE_SIGNAL
+AC_CHECK_FUNCS(re_comp regcomp strdup)
+
+AC_CHECK_HEADERS(vis.h)
+AC_CHECK_FUNCS(strlcat strlcpy)
+AC_CHECK_FUNCS(issetugid)
+AC_CHECK_FUNCS(fgetln)
+AC_CHECK_FUNCS(getline flockfile)
+
+# from old readline settting:
+
+MAKE_SHELL=/bin/sh
+AC_SUBST(MAKE_SHELL)
+
+# Already-done: stdlib.h string.h unistd.h termios.h
+AC_CHECK_HEADERS(varargs.h stdarg.h dirent.h locale.h ndir.h sys/dir.h \
+ sys/file.h sys/ndir.h sys/ptem.h sys/pte.h sys/select.h sys/stream.h \
+ sys/mman.h curses.h termcap.h termio.h termbits.h asm/termbits.h grp.h \
+paths.h semaphore.h)
+
+# Already-done: strcasecmp
+AC_CHECK_FUNCS(lstat putenv select setenv setlocale strcoll tcgetattr)
+
+AC_STAT_MACROS_BROKEN
+MYSQL_SIGNAL_CHECK
+MYSQL_CHECK_GETPW_FUNCS
+MYSQL_HAVE_TIOCGWINSZ
+MYSQL_HAVE_FIONREAD
+MYSQL_HAVE_TIOCSTAT
+MYSQL_STRUCT_DIRENT_D_INO
+MYSQL_TYPE_SIGHANDLER
+if test "$with_named_curses" = "no"
+then
+ MYSQL_CHECK_LIB_TERMCAP
+else
+ TERMCAP_LIB="$with_named_curses"
+fi
+AC_SUBST(TERMCAP_LIB)
+
+# End of readline/libedit stuff
+#########################################################################
+
+dnl Checks for library functions.
+
+#
+# The following code disables intrinsic function support while we test for
+# library functions. This is to avoid configure problems with Intel ecc
+# compiler
+
+ORG_CFLAGS="$CFLAGS"
+if test "$GCC" != "yes"; then
+ AC_SYS_COMPILER_FLAG(-nolib_inline,nolib_inline,CFLAGS,[],[])
+fi
+
+AC_FUNC_MMAP
+AC_TYPE_SIGNAL
+MYSQL_TYPE_QSORT
+AC_FUNC_UTIME_NULL
+AC_FUNC_VPRINTF
+
+AC_CHECK_FUNCS(alarm bcmp bfill bmove bzero chsize cuserid fchmod fcntl \
+ fconvert fdatasync finite fpresetsticky fpsetmask fsync ftruncate \
+ getcwd gethostbyaddr_r gethostbyname_r getpass getpassphrase getpwnam \
+ getpwuid getrlimit getrusage getwd gmtime_r index initgroups isnan \
+ localtime_r locking longjmp lrand48 madvise mallinfo memcpy memmove \
+ mkstemp mlockall perror poll pread pthread_attr_create clock_gettime \
+ pthread_attr_getstacksize pthread_attr_setprio pthread_attr_setschedparam \
+ pthread_attr_setstacksize pthread_condattr_create pthread_getsequence_np \
+ pthread_key_delete pthread_rwlock_rdlock pthread_setprio \
+ pthread_setprio_np pthread_setschedparam pthread_sigmask readlink \
+ realpath rename rint rwlock_init setupterm sighold sigset sigthreadmask \
+ snprintf socket stpcpy strcasecmp strerror strnlen strpbrk strstr strtol \
+ strtoll strtoul strtoull tell tempnam thr_setconcurrency vidattr)
+
+# isinf() could be a function or a macro (HPUX)
+AC_MSG_CHECKING(for isinf with )
+AC_TRY_LINK([#include ], [float f = 0.0; isinf(f)],
+ AC_MSG_RESULT(yes) AC_DEFINE(HAVE_ISINF,,[isinf() macro or function]),
+ AC_MSG_RESULT(no))
+
+CFLAGS="$ORG_CFLAGS"
+
+# Sanity check: We chould not have any fseeko symbol unless
+# large_file_support=yes
+AC_CHECK_FUNC(fseeko,
+[if test "$large_file_support" = no -a "$IS_LINUX" = "true";
+then
+ AC_MSG_ERROR("Found fseeko symbol but large_file_support is not enabled!");
+fi]
+)
+
+my_save_LIBS="$LIBS"
+LIBS="$LIBS $LIBDL"
+AC_CHECK_FUNCS(dlopen dlerror)
+LIBS="$my_save_LIBS"
+
+# Check definition of gethostbyaddr_r (glibc2 defines this with 8 arguments)
+ac_save_CXXFLAGS="$CXXFLAGS"
+AC_CACHE_CHECK([style of gethost* routines], mysql_cv_gethost_style,
+AC_LANG_SAVE
+AC_LANG_CPLUSPLUS
+
+# Do not treat warnings as errors if we are linking against other libc
+# this is to work around gcc not being permissive on non-system includes
+# with respect to ANSI C++
+# We also remove the -fbranch-probabilities option as this will give warnings
+# about not profiled code, which confuses configure
+if test "$ac_cv_prog_gxx" = "yes" -a "$with_other_libc" = "no"
+then
+ CXXFLAGS=`echo "$CXXFLAGS -Werror" | sed 's/-fbranch-probabilities//'`
+fi
+
+AC_TRY_COMPILE(
+[#undef inline
+#if !defined(SCO) && !defined(__osf__) && !defined(_REENTRANT)
+#define _REENTRANT
+#endif
+#include
+#include
+#include
+#include
+#include
+#include ],
+[int skr;
+ struct hostent *foo = gethostbyaddr_r((const char *) 0,
+ 0, 0, (struct hostent *) 0, (char *) NULL, 0, &skr); return (foo == 0);],
+mysql_cv_gethost_style=solaris, mysql_cv_gethost_style=other))
+AC_LANG_RESTORE
+CXXFLAGS="$ac_save_CXXFLAGS"
+if test "$mysql_cv_gethost_style" = "solaris"
+then
+ AC_DEFINE(HAVE_SOLARIS_STYLE_GETHOST)
+fi
+
+#---START: Used in for client configure
+
+# Check definition of gethostbyname_r (glibc2.0.100 is different from Solaris)
+ac_save_CXXFLAGS="$CXXFLAGS"
+AC_CACHE_CHECK([style of gethostname_r routines], mysql_cv_gethostname_style,
+AC_LANG_SAVE
+AC_LANG_CPLUSPLUS
+if test "$ac_cv_prog_gxx" = "yes" -a "$with_other_libc" = "no"
+then
+ CXXFLAGS=`echo "$CXXFLAGS -Werror" | sed 's/-fbranch-probabilities//'`
+fi
+AC_TRY_COMPILE(
+[#undef inline
+#if !defined(SCO) && !defined(__osf__) && !defined(_REENTRANT)
+#define _REENTRANT
+#endif
+#include
+#include
+#include
+#include
+#include
+#include ],
+[int skr;
+
+ skr = gethostbyname_r((const char *) 0,
+ (struct hostent*) 0, (char*) 0, 0, (struct hostent **) 0, &skr);],
+mysql_cv_gethostname_style=glibc2, mysql_cv_gethostname_style=other))
+AC_LANG_RESTORE
+CXXFLAGS="$ac_save_CXXFLAGS"
+if test "$mysql_cv_gethostname_style" = "glibc2"
+then
+ AC_DEFINE(HAVE_GETHOSTBYNAME_R_GLIBC2_STYLE)
+fi
+
+# Check 3rd argument of getthostbyname_r
+ac_save_CXXFLAGS="$CXXFLAGS"
+AC_CACHE_CHECK([3 argument to gethostname_r routines], mysql_cv_gethostname_arg,
+AC_LANG_SAVE
+AC_LANG_CPLUSPLUS
+if test "$ac_cv_prog_gxx" = "yes" -a "$with_other_libc" = "no"
+then
+ CXXFLAGS=`echo "$CXXFLAGS -Werror" | sed 's/-fbranch-probabilities//'`
+fi
+AC_TRY_COMPILE(
+[#undef inline
+#if !defined(SCO) && !defined(__osf__) && !defined(_REENTRANT)
+#define _REENTRANT
+#endif
+#include
+#include
+#include
+#include
+#include
+#include ],
+[int skr;
+
+ skr = gethostbyname_r((const char *) 0, (struct hostent*) 0, (struct hostent_data*) 0);],
+mysql_cv_gethostname_arg=hostent_data, mysql_cv_gethostname_arg=char))
+AC_LANG_RESTORE
+CXXFLAGS="$ac_save_CXXFLAGS"
+if test "$mysql_cv_gethostname_arg" = "hostent_data"
+then
+ AC_DEFINE(HAVE_GETHOSTBYNAME_R_RETURN_INT)
+fi
+
+
+if test "$with_mit_threads" = "no"
+then
+ # Check definition of pthread_getspecific
+ AC_CACHE_CHECK("args to pthread_getspecific", mysql_cv_getspecific_args,
+ AC_TRY_COMPILE(
+[#if !defined(SCO) && !defined(__osf__) && !defined(_REENTRANT)
+#define _REENTRANT
+#endif
+#define _POSIX_PTHREAD_SEMANTICS
+#include ],
+[ void *pthread_getspecific(pthread_key_t key);
+pthread_getspecific((pthread_key_t) NULL); ],
+mysql_cv_getspecific_args=POSIX, mysql_cv_getspecific_args=other))
+ if test "$mysql_cv_getspecific_args" = "other"
+ then
+ AC_DEFINE(HAVE_NONPOSIX_PTHREAD_GETSPECIFIC)
+ fi
+
+ # Check definition of pthread_mutex_init
+ AC_CACHE_CHECK("args to pthread_mutex_init", mysql_cv_mutex_init_args,
+ AC_TRY_COMPILE(
+[#if !defined(SCO) && !defined(__osf__)
+#define _REENTRANT
+#endif
+#define _POSIX_PTHREAD_SEMANTICS
+#include ],
+[
+ pthread_mutexattr_t attr;
+ pthread_mutex_t mp;
+ pthread_mutex_init(&mp,&attr); ],
+mysql_cv_mutex_init_args=POSIX, mysql_cv_mutex_init_args=other))
+ if test "$mysql_cv_mutex_init_args" = "other"
+ then
+ AC_DEFINE(HAVE_NONPOSIX_PTHREAD_MUTEX_INIT)
+ fi
+fi
+#---END:
+
+#---START: Used in for client configure
+# Check definition of readdir_r
+AC_CACHE_CHECK("args to readdir_r", mysql_cv_readdir_r,
+AC_TRY_LINK(
+[#if !defined(SCO) && !defined(__osf__)
+#define _REENTRANT
+#endif
+#define _POSIX_PTHREAD_SEMANTICS
+#include
+#include ],
+[ int readdir_r(DIR *dirp, struct dirent *entry, struct dirent **result);
+readdir_r((DIR *) NULL, (struct dirent *) NULL, (struct dirent **) NULL); ],
+mysql_cv_readdir_r=POSIX, mysql_cv_readdir_r=other))
+if test "$mysql_cv_readdir_r" = "POSIX"
+then
+ AC_DEFINE(HAVE_READDIR_R)
+fi
+
+# Check definition of posix sigwait()
+AC_CACHE_CHECK("style of sigwait", mysql_cv_sigwait,
+AC_TRY_LINK(
+[#if !defined(SCO) && !defined(__osf__)
+#define _REENTRANT
+#endif
+#define _POSIX_PTHREAD_SEMANTICS
+#include
+#include ],
+[#ifndef _AIX
+sigset_t set;
+int sig;
+sigwait(&set,&sig);
+#endif],
+mysql_cv_sigwait=POSIX, mysql_cv_sigwait=other))
+if test "$mysql_cv_sigwait" = "POSIX"
+then
+ AC_DEFINE(HAVE_SIGWAIT)
+fi
+
+if test "$mysql_cv_sigwait" != "POSIX"
+then
+unset mysql_cv_sigwait
+# Check definition of posix sigwait()
+AC_CACHE_CHECK("style of sigwait", mysql_cv_sigwait,
+AC_TRY_LINK(
+[#if !defined(SCO) && !defined(__osf__)
+#define _REENTRANT
+#endif
+#define _POSIX_PTHREAD_SEMANTICS
+#include
+#include ],
+[sigset_t set;
+int sig;
+sigwait(&set);],
+mysql_cv_sigwait=NONPOSIX, mysql_cv_sigwait=other))
+if test "$mysql_cv_sigwait" = "NONPOSIX"
+then
+ AC_DEFINE(HAVE_NONPOSIX_SIGWAIT)
+fi
+fi
+#---END:
+
+# Check if pthread_attr_setscope() exists
+AC_CACHE_CHECK("for pthread_attr_setscope", mysql_cv_pthread_attr_setscope,
+AC_TRY_LINK(
+[#if !defined(SCO) && !defined(__osf__)
+#define _REENTRANT
+#endif
+#define _POSIX_PTHREAD_SEMANTICS
+#include ],
+[pthread_attr_t thr_attr;
+pthread_attr_setscope(&thr_attr,0);],
+mysql_cv_pthread_attr_setscope=yes, mysql_cv_pthread_attr_setscope=no))
+if test "$mysql_cv_pthread_attr_setscope" = "yes"
+then
+ AC_DEFINE(HAVE_PTHREAD_ATTR_SETSCOPE)
+fi
+
+# Check for bad includes
+AC_MSG_CHECKING("can netinet files be included")
+AC_TRY_COMPILE(
+[#include
+#include
+#include
+#include
+#include
+#include ],
+[ printf("1\n"); ],
+netinet_inc=yes, netinet_inc=no)
+if test "$netinet_inc" = "no"
+then
+ AC_DEFINE(HAVE_BROKEN_NETINET_INCLUDES)
+fi
+AC_MSG_RESULT("$netinet_inc")
+
+# Some usefull subst
+AC_SUBST(CC)
+AC_SUBST(GXX)
+
+# Output results
+AC_OUTPUT(Makefile dnl
+ , , [
+ test -z "$CONFIG_HEADERS" || echo timestamp > stamp-h
+ ])
diff --git a/ndb/demos/1-node/1-api-3/Ndb.cfg b/ndb/demos/1-node/1-api-3/Ndb.cfg
new file mode 100644
index 00000000000..61309af029e
--- /dev/null
+++ b/ndb/demos/1-node/1-api-3/Ndb.cfg
@@ -0,0 +1,2 @@
+OwnProcessId 3
+127.0.0.1 10000
diff --git a/ndb/demos/1-node/1-db-2/Ndb.cfg b/ndb/demos/1-node/1-db-2/Ndb.cfg
new file mode 100644
index 00000000000..9315950b67a
--- /dev/null
+++ b/ndb/demos/1-node/1-db-2/Ndb.cfg
@@ -0,0 +1,2 @@
+OwnProcessId 2
+127.0.0.1 10000
diff --git a/ndb/demos/1-node/1-mgm-1/Ndb.cfg b/ndb/demos/1-node/1-mgm-1/Ndb.cfg
new file mode 100644
index 00000000000..61d4c0ecc17
--- /dev/null
+++ b/ndb/demos/1-node/1-mgm-1/Ndb.cfg
@@ -0,0 +1,2 @@
+OwnProcessId 1
+127.0.0.1 10000
diff --git a/ndb/demos/1-node/1-mgm-1/template_config.ini b/ndb/demos/1-node/1-mgm-1/template_config.ini
new file mode 100644
index 00000000000..76bb7867e3c
--- /dev/null
+++ b/ndb/demos/1-node/1-mgm-1/template_config.ini
@@ -0,0 +1,70 @@
+###############################################################################
+#
+# Initial system configuration file for MySQL Cluster v3.1.0 (Demo 1)
+#
+###############################################################################
+
+[DB DEFAULT]
+NoOfReplicas: 1
+#LockPagesInMainMemory: Y
+StopOnError: Y
+#MaxNoOfConcurrentOperations: 1024
+#MaxNoOfConcurrentTransactions: 1024
+NoOfIndexPages: 1500
+NoOfDataPages: 5000
+#TimeBetweenLocalCheckpoints: 20
+#TimeBetweenGlobalCheckpoints: 1500
+#NoOfFragmentLogFiles: 8
+BackupMemory: 4M
+BackupDataBufferSize: 2M
+BackupLogBufferSize: 2M
+BackupWriteSize: 32k
+
+[COMPUTER]
+Id: 1
+ByteOrder: Little
+HostName: localhost
+
+[MGM]
+Id: 1
+ExecuteOnComputer: 1
+PortNumber: 10000
+PortNumberStats: 10001
+
+
+[DB]
+Id: 2
+ExecuteOnComputer: 1
+FileSystemPath: WRITE_PATH_TO_FILESYSTEM_2_HERE
+
+[API]
+Id: 3
+ExecuteOnComputer: 1
+
+# Designated MySQL Server API node id
+[API]
+Id: 11
+ExecuteOnComputer: 1
+
+[TCP DEFAULT]
+SendSignalId: N
+Compression: N
+Checksum: N
+SendBufferSize: 2000
+MaxReceiveSize: 2000
+
+[TCP]
+NodeId1: 1
+NodeId2: 2
+PortNumber: 10002
+
+[TCP]
+NodeId1: 2
+NodeId2: 3
+PortNumber: 10003
+
+# Designated MySQL Server API node connection
+[TCP]
+NodeId1: 2
+NodeId2: 11
+PortNumber: 10011
diff --git a/ndb/demos/2-node/2-api-4/Ndb.cfg b/ndb/demos/2-node/2-api-4/Ndb.cfg
new file mode 100644
index 00000000000..1713a9b5893
--- /dev/null
+++ b/ndb/demos/2-node/2-api-4/Ndb.cfg
@@ -0,0 +1,2 @@
+OwnProcessId 4
+127.0.0.1 10000
diff --git a/ndb/demos/2-node/2-api-5/Ndb.cfg b/ndb/demos/2-node/2-api-5/Ndb.cfg
new file mode 100644
index 00000000000..faa2882eeea
--- /dev/null
+++ b/ndb/demos/2-node/2-api-5/Ndb.cfg
@@ -0,0 +1,2 @@
+OwnProcessId 5
+127.0.0.1 10000
diff --git a/ndb/demos/2-node/2-api-6/Ndb.cfg b/ndb/demos/2-node/2-api-6/Ndb.cfg
new file mode 100644
index 00000000000..bc2c4809453
--- /dev/null
+++ b/ndb/demos/2-node/2-api-6/Ndb.cfg
@@ -0,0 +1,2 @@
+OwnProcessId 6
+127.0.0.1 10000
diff --git a/ndb/demos/2-node/2-api-7/Ndb.cfg b/ndb/demos/2-node/2-api-7/Ndb.cfg
new file mode 100644
index 00000000000..4107fdb6c5e
--- /dev/null
+++ b/ndb/demos/2-node/2-api-7/Ndb.cfg
@@ -0,0 +1,2 @@
+OwnProcessId 7
+127.0.0.1 10000
diff --git a/ndb/demos/2-node/2-db-2/Ndb.cfg b/ndb/demos/2-node/2-db-2/Ndb.cfg
new file mode 100644
index 00000000000..9315950b67a
--- /dev/null
+++ b/ndb/demos/2-node/2-db-2/Ndb.cfg
@@ -0,0 +1,2 @@
+OwnProcessId 2
+127.0.0.1 10000
diff --git a/ndb/demos/2-node/2-db-3/Ndb.cfg b/ndb/demos/2-node/2-db-3/Ndb.cfg
new file mode 100644
index 00000000000..61309af029e
--- /dev/null
+++ b/ndb/demos/2-node/2-db-3/Ndb.cfg
@@ -0,0 +1,2 @@
+OwnProcessId 3
+127.0.0.1 10000
diff --git a/ndb/demos/2-node/2-mgm-1/Ndb.cfg b/ndb/demos/2-node/2-mgm-1/Ndb.cfg
new file mode 100644
index 00000000000..61d4c0ecc17
--- /dev/null
+++ b/ndb/demos/2-node/2-mgm-1/Ndb.cfg
@@ -0,0 +1,2 @@
+OwnProcessId 1
+127.0.0.1 10000
diff --git a/ndb/demos/2-node/2-mgm-1/template_config.ini b/ndb/demos/2-node/2-mgm-1/template_config.ini
new file mode 100644
index 00000000000..3edb909609a
--- /dev/null
+++ b/ndb/demos/2-node/2-mgm-1/template_config.ini
@@ -0,0 +1,157 @@
+###############################################################################
+#
+# Initial system configuration file for MySQL Cluster v3.1.0 (Demo 2)
+#
+###############################################################################
+
+[COMPUTER]
+Id: 1
+ByteOrder: Little
+HostName: localhost
+
+[COMPUTER]
+Id: 2
+ByteOrder: Little
+HostName: localhost
+
+[MGM]
+Id: 1
+ExecuteOnComputer: 1
+PortNumber: 10000
+PortNumberStats: 10001
+ArbitrationRank: 1
+
+[DB DEFAULT]
+NoOfReplicas: 2
+#LockPagesInMainMemory: N
+StopOnError: N
+#MaxNoOfConcurrentOperations: 1024
+#MaxNoOfConcurrentTransactions: 1024
+NoOfIndexPages: 200
+NoOfDataPages: 600
+#TimeBetweenLocalCheckpoints: 20
+#TimeBetweenGlobalCheckpoints: 1500
+#NoOfFragmentLogFiles: 8
+BackupMemory: 4M
+BackupDataBufferSize: 2M
+BackupLogBufferSize: 2M
+BackupWriteSize: 32k
+
+[DB]
+Id: 2
+ExecuteOnComputer: 1
+FileSystemPath: WRITE_PATH_TO_FILESYSTEM_2_HERE
+
+[DB]
+Id: 3
+ExecuteOnComputer: 2
+FileSystemPath: WRITE_PATH_TO_FILESYSTEM_3_HERE
+
+[API DEFAULT]
+ArbitrationRank: 1
+
+[API]
+Id: 4
+ExecuteOnComputer: 1
+
+[API]
+Id: 5
+ExecuteOnComputer: 1
+
+[API]
+Id: 6
+ExecuteOnComputer: 2
+
+[API]
+Id: 7
+ExecuteOnComputer: 2
+
+# Designated MySQL Server API node id
+[API]
+Id: 11
+ExecuteOnComputer: 1
+
+# Designated MySQL Server API node id
+[API]
+Id: 12
+ExecuteOnComputer: 2
+
+
+[TCP]
+NodeId1: 1
+NodeId2: 2
+PortNumber: 10002
+
+[TCP]
+NodeId1: 1
+NodeId2: 3
+PortNumber: 10003
+
+[TCP]
+NodeId1: 2
+NodeId2: 3
+PortNumber: 10004
+
+[TCP]
+NodeId1: 2
+NodeId2: 4
+PortNumber: 10005
+
+[TCP]
+NodeId1: 2
+NodeId2: 5
+PortNumber: 10006
+
+[TCP]
+NodeId1: 2
+NodeId2: 6
+PortNumber: 10007
+
+[TCP]
+NodeId1: 2
+NodeId2: 7
+PortNumber: 10008
+
+[TCP]
+NodeId1: 3
+NodeId2: 4
+PortNumber: 10009
+
+[TCP]
+NodeId1: 3
+NodeId2: 5
+PortNumber: 10010
+
+[TCP]
+NodeId1: 3
+NodeId2: 6
+PortNumber: 10011
+
+[TCP]
+NodeId1: 3
+NodeId2: 7
+PortNumber: 10012
+
+# Designated MySQL Server API node connection
+[TCP]
+NodeId1: 2
+NodeId2: 11
+PortNumber: 10013
+
+# Designated MySQL Server API node connection
+[TCP]
+NodeId1: 3
+NodeId2: 11
+PortNumber: 10014
+
+# Designated MySQL Server API node connection
+[TCP]
+NodeId1: 2
+NodeId2: 12
+PortNumber: 10015
+
+# Designated MySQL Server API node connection
+[TCP]
+NodeId1: 3
+NodeId2: 12
+PortNumber: 10016
diff --git a/ndb/demos/config-templates/config_template-1-REP.ini b/ndb/demos/config-templates/config_template-1-REP.ini
new file mode 100644
index 00000000000..71be3f2f53f
--- /dev/null
+++ b/ndb/demos/config-templates/config_template-1-REP.ini
@@ -0,0 +1,87 @@
+###############################################################################
+#
+# Initial system configuration file for MySQL Cluster v3.1.0 (Demo 1)
+#
+###############################################################################
+
+[DB DEFAULT]
+NoOfReplicas: 1
+StopOnError: Y
+NoOfIndexPages: 1500
+NoOfDataPages: 5000
+BackupMemory: 4M
+BackupDataBufferSize: 2M
+BackupLogBufferSize: 2M
+BackupWriteSize: 32k
+
+[COMPUTER]
+Id: 1
+ByteOrder: Little
+HostName: CHOOSE_HOSTNAME
+
+[EXTERNAL SYSTEM]
+Name: External
+
+[MGM]
+Id: 1
+ExecuteOnComputer: 1
+PortNumber: CHOOSE_PORT_BASE00
+PortNumberStats: CHOOSE_PORT_BASE01
+
+
+[DB]
+Id: 2
+ExecuteOnComputer: 1
+FileSystemPath: WRITE_PATH_TO_FILESYSTEM_2_HERE
+
+[API]
+Id: 3
+ExecuteOnComputer: 1
+
+[REP]
+Id: CHOOSE_REP_ID
+ExecuteOnComputer: 1
+
+[EXTERNAL REP]
+Id: CHOOSE_EXTREP_ID
+System: External
+
+# Designated MySQL Server API node id
+[API]
+Id: 11
+ExecuteOnComputer: 1
+
+[TCP DEFAULT]
+SendSignalId: N
+Compression: N
+Checksum: N
+SendBufferSize: 2000
+MaxReceiveSize: 2000
+
+[TCP]
+NodeId1: 1
+NodeId2: 2
+PortNumber: CHOOSE_PORT_BASE02
+
+[TCP]
+NodeId1: 2
+NodeId2: 3
+PortNumber: CHOOSE_PORT_BASE03
+
+[TCP]
+NodeId1: 2
+NodeId2: CHOOSE_REP_ID
+PortNumber: CHOOSE_PORT_BASE04
+
+[TCP]
+Hostname1: CHOOSE_HOSTNAME
+Hostname2: CHOOSE_EXTHOSTNAME
+NodeId1: CHOOSE_REP_ID
+NodeId2: External.CHOOSE_EXTREP_ID
+PortNumber: 10099
+
+# Designated MySQL Server API node connection
+[TCP]
+NodeId1: 2
+NodeId2: 11
+PortNumber: CHOOSE_PORT_BASE11
diff --git a/ndb/demos/config-templates/config_template-4.ini b/ndb/demos/config-templates/config_template-4.ini
new file mode 100644
index 00000000000..e47c9037344
--- /dev/null
+++ b/ndb/demos/config-templates/config_template-4.ini
@@ -0,0 +1,336 @@
+###############################################################################
+#
+# 4-node system configuration file for MySQL Cluster
+#
+###############################################################################
+
+[DB DEFAULT]
+NoOfReplicas: 1
+StopOnError: N
+NoOfIndexPages: 1500
+NoOfDataPages: 5000
+BackupMemory: 4M
+BackupDataBufferSize: 2M
+BackupLogBufferSize: 2M
+BackupWriteSize: 32k
+
+[COMPUTER]
+Id: 1
+ByteOrder: Little
+HostName: CHOOSE_HOSTNAME_1
+
+[COMPUTER]
+Id: 2
+ByteOrder: Little
+HostName: CHOOSE_HOSTNAME_2
+
+[COMPUTER]
+Id: 3
+ByteOrder: Little
+HostName: CHOOSE_HOSTNAME_3
+
+[COMPUTER]
+Id: 4
+ByteOrder: Little
+HostName: CHOOSE_HOSTNAME_4
+
+[MGM]
+Id: 1
+ExecuteOnComputer: 1
+PortNumber: CHOOSE_PORT_BASE00
+PortNumberStats: CHOOSE_PORT_BASE01
+
+[DB]
+Id: 2
+ExecuteOnComputer: 1
+FileSystemPath: WRITE_PATH_TO_FILESYSTEM_1_HERE
+
+[DB]
+Id: 3
+ExecuteOnComputer: 2
+FileSystemPath: WRITE_PATH_TO_FILESYSTEM_2_HERE
+
+[DB]
+Id: 4
+ExecuteOnComputer: 3
+FileSystemPath: WRITE_PATH_TO_FILESYSTEM_3_HERE
+
+[DB]
+Id: 5
+ExecuteOnComputer: 4
+FileSystemPath: WRITE_PATH_TO_FILESYSTEM_4_HERE
+
+[API]
+Id: 6
+ExecuteOnComputer: 1
+
+[API]
+Id: 7
+ExecuteOnComputer: 2
+
+[API]
+Id: 8
+ExecuteOnComputer: 3
+
+[API]
+Id: 9
+ExecuteOnComputer: 4
+
+# Designated MySQL Server API node id
+[API]
+Id: 11
+ExecuteOnComputer: 1
+
+# Designated MySQL Server API node id
+[API]
+Id: 12
+ExecuteOnComputer: 2
+
+# Designated MySQL Server API node id
+[API]
+Id: 13
+ExecuteOnComputer: 3
+
+# Designated MySQL Server API node id
+[API]
+Id: 14
+ExecuteOnComputer: 4
+
+[TCP DEFAULT]
+SendSignalId: N
+Compression: N
+Checksum: N
+SendBufferSize: 2000
+MaxReceiveSize: 2000
+
+# Management server
+[TCP]
+NodeId1: 1
+NodeId2: 2
+PortNumber: CHOOSE_PORT_BASE02
+
+[TCP]
+NodeId1: 1
+NodeId2: 3
+PortNumber: CHOOSE_PORT_BASE03
+
+[TCP]
+NodeId1: 1
+NodeId2: 4
+PortNumber: CHOOSE_PORT_BASE04
+
+[TCP]
+NodeId1: 1
+NodeId2: 5
+PortNumber: CHOOSE_PORT_BASE05
+
+# Database cluster
+[TCP]
+NodeId1: 2
+NodeId2: 3
+PortNumber: CHOOSE_PORT_BASE06
+
+[TCP]
+NodeId1: 2
+NodeId2: 4
+PortNumber: CHOOSE_PORT_BASE07
+
+[TCP]
+NodeId1: 2
+NodeId2: 5
+PortNumber: CHOOSE_PORT_BASE08
+
+[TCP]
+NodeId1: 3
+NodeId2: 4
+PortNumber: CHOOSE_PORT_BASE09
+
+[TCP]
+NodeId1: 3
+NodeId2: 5
+PortNumber: CHOOSE_PORT_BASE10
+
+[TCP]
+NodeId1: 4
+NodeId2: 5
+PortNumber: CHOOSE_PORT_BASE11
+
+# API node 6
+[TCP]
+NodeId1: 6
+NodeId2: 2
+PortNumber: CHOOSE_PORT_BASE12
+
+[TCP]
+NodeId1: 6
+NodeId2: 3
+PortNumber: CHOOSE_PORT_BASE13
+
+[TCP]
+NodeId1: 6
+NodeId2: 4
+PortNumber: CHOOSE_PORT_BASE14
+
+[TCP]
+NodeId1: 6
+NodeId2: 5
+PortNumber: CHOOSE_PORT_BASE15
+
+# API node 7
+[TCP]
+NodeId1: 7
+NodeId2: 2
+PortNumber: CHOOSE_PORT_BASE16
+
+[TCP]
+NodeId1: 7
+NodeId2: 3
+PortNumber: CHOOSE_PORT_BASE17
+
+[TCP]
+NodeId1: 7
+NodeId2: 4
+PortNumber: CHOOSE_PORT_BASE18
+
+[TCP]
+NodeId1: 7
+NodeId2: 5
+PortNumber: CHOOSE_PORT_BASE19
+
+# API node 8
+[TCP]
+NodeId1: 8
+NodeId2: 2
+PortNumber: CHOOSE_PORT_BASE20
+
+[TCP]
+NodeId1: 8
+NodeId2: 3
+PortNumber: CHOOSE_PORT_BASE21
+
+[TCP]
+NodeId1: 8
+NodeId2: 4
+PortNumber: CHOOSE_PORT_BASE22
+
+[TCP]
+NodeId1: 8
+NodeId2: 5
+PortNumber: CHOOSE_PORT_BASE23
+
+# API node 9
+[TCP]
+NodeId1: 9
+NodeId2: 2
+PortNumber: CHOOSE_PORT_BASE24
+
+[TCP]
+NodeId1: 9
+NodeId2: 3
+PortNumber: CHOOSE_PORT_BASE25
+
+[TCP]
+NodeId1: 9
+NodeId2: 4
+PortNumber: CHOOSE_PORT_BASE26
+
+[TCP]
+NodeId1: 9
+NodeId2: 5
+PortNumber: CHOOSE_PORT_BASE27
+
+# Designated MySQL Server API node connection
+[TCP]
+NodeId1: 2
+NodeId2: 11
+PortNumber: CHOOSE_PORT_BASE28
+
+# Designated MySQL Server API node connection
+[TCP]
+NodeId1: 3
+NodeId2: 11
+PortNumber: CHOOSE_PORT_BASE29
+
+# Designated MySQL Server API node connection
+[TCP]
+NodeId1: 4
+NodeId2: 11
+PortNumber: CHOOSE_PORT_BASE30
+
+# Designated MySQL Server API node connection
+[TCP]
+NodeId1: 5
+NodeId2: 11
+PortNumber: CHOOSE_PORT_BASE31
+
+# Designated MySQL Server API node connection
+[TCP]
+NodeId1: 2
+NodeId2: 12
+PortNumber: CHOOSE_PORT_BASE32
+
+# Designated MySQL Server API node connection
+[TCP]
+NodeId1: 3
+NodeId2: 12
+PortNumber: CHOOSE_PORT_BASE33
+
+# Designated MySQL Server API node connection
+[TCP]
+NodeId1: 4
+NodeId2: 12
+PortNumber: CHOOSE_PORT_BASE34
+
+# Designated MySQL Server API node connection
+[TCP]
+NodeId1: 5
+NodeId2: 12
+PortNumber: CHOOSE_PORT_BASE35
+
+# Designated MySQL Server API node connection
+[TCP]
+NodeId1: 2
+NodeId2: 13
+PortNumber: CHOOSE_PORT_BASE36
+
+# Designated MySQL Server API node connection
+[TCP]
+NodeId1: 3
+NodeId2: 13
+PortNumber: CHOOSE_PORT_BASE37
+
+# Designated MySQL Server API node connection
+[TCP]
+NodeId1: 4
+NodeId2: 13
+PortNumber: CHOOSE_PORT_BASE38
+
+# Designated MySQL Server API node connection
+[TCP]
+NodeId1: 5
+NodeId2: 13
+PortNumber: CHOOSE_PORT_BASE39
+
+# Designated MySQL Server API node connection
+[TCP]
+NodeId1: 2
+NodeId2: 14
+PortNumber: CHOOSE_PORT_BASE40
+
+# Designated MySQL Server API node connection
+[TCP]
+NodeId1: 3
+NodeId2: 14
+PortNumber: CHOOSE_PORT_BASE41
+
+# Designated MySQL Server API node connection
+[TCP]
+NodeId1: 4
+NodeId2: 14
+PortNumber: CHOOSE_PORT_BASE42
+
+# Designated MySQL Server API node connection
+[TCP]
+NodeId1: 5
+NodeId2: 14
+PortNumber: CHOOSE_PORT_BASE43
diff --git a/ndb/demos/config-templates/config_template-install.ini b/ndb/demos/config-templates/config_template-install.ini
new file mode 100644
index 00000000000..e31906ba609
--- /dev/null
+++ b/ndb/demos/config-templates/config_template-install.ini
@@ -0,0 +1,64 @@
+###############################################################################
+#
+# Initial system configuration file for MySQL Cluster v3.1.0 (Demo 1)
+#
+###############################################################################
+
+[DB DEFAULT]
+NoOfReplicas: 1
+StopOnError: N
+NoOfIndexPages: 1500
+NoOfDataPages: 5000
+BackupMemory: 4M
+BackupDataBufferSize: 2M
+BackupLogBufferSize: 2M
+BackupWriteSize: 32k
+
+[COMPUTER]
+Id: 1
+ByteOrder: Little
+HostName: localhost
+
+[MGM]
+Id: 1
+ExecuteOnComputer: 1
+PortNumber: CHOOSE_PORT_BASE00
+PortNumberStats: CHOOSE_PORT_BASE01
+
+
+[DB]
+Id: 2
+ExecuteOnComputer: 1
+FileSystemPath: WRITE_PATH_TO_FILESYSTEM_2_HERE
+
+[API]
+Id: 3
+ExecuteOnComputer: 1
+
+# Designated MySQL Server API node id
+[API]
+Id: 11
+ExecuteOnComputer: 1
+
+[TCP DEFAULT]
+SendSignalId: N
+Compression: N
+Checksum: N
+SendBufferSize: 2000
+MaxReceiveSize: 2000
+
+[TCP]
+NodeId1: 1
+NodeId2: 2
+PortNumber: CHOOSE_PORT_BASE02
+
+[TCP]
+NodeId1: 2
+NodeId2: 3
+PortNumber: CHOOSE_PORT_BASE03
+
+# Designated MySQL Server API node connection
+[TCP]
+NodeId1: 2
+NodeId2: 11
+PortNumber: CHOOSE_PORT_BASE11
diff --git a/ndb/demos/run_demo1-PS-SS_common.sh b/ndb/demos/run_demo1-PS-SS_common.sh
new file mode 100644
index 00000000000..625e9655087
--- /dev/null
+++ b/ndb/demos/run_demo1-PS-SS_common.sh
@@ -0,0 +1,50 @@
+echo $NDB_HOST $NDB_EXTHOST
+
+NDB_PORT=$NDB_PORT_BASE"00"
+NDB_CONNECTSTRING_BASE="host=$NDB_HOST:$NDB_PORT;nodeid="
+
+# Edit file system path
+
+cd $NDB_DEMO
+sed -e s,"WRITE_PATH_TO_FILESYSTEM_2_HERE",$NDB_DEMO/filesystem,g \
+ -e s,"CHOOSE_HOSTNAME",$NDB_HOST,g\
+ -e s,"CHOOSE_EXTHOSTNAME",$NDB_EXTHOST,g\
+ -e s,"CHOOSE_PORT_BASE",$NDB_PORT_BASE,g\
+ -e s,"CHOOSE_REP_ID",$NDB_REP_ID,g\
+ -e s,"CHOOSE_EXTREP_ID",$NDB_EXTREP_ID,g\
+ < ../config-templates/config_template-1-REP.ini > config.ini
+
+# Start management server as deamon
+
+NDB_ID="1"
+NDB_CONNECTSTRING=$NDB_CONNECTSTRING_BASE$NDB_ID
+export NDB_CONNECTSTRING
+if mgmtsrvr -d -c config.ini ; then :; else
+ echo "Unable to start mgmtsrvr"
+ exit 1
+fi
+
+# Start database node
+
+NDB_ID="2"
+NDB_CONNECTSTRING=$NDB_CONNECTSTRING_BASE$NDB_ID
+export NDB_CONNECTSTRING
+xterm -T "$NDB_DEMO_NAME DB Node $NDB_ID" -geometry 80x10 -xrm *.hold:true -e ndb -i &
+
+# Start xterm for application programs
+
+NDB_ID="3"
+NDB_CONNECTSTRING=$NDB_CONNECTSTRING_BASE$NDB_ID
+export NDB_CONNECTSTRING
+xterm -T "$NDB_DEMO_NAME API Node $NDB_ID" -geometry 80x10 &
+
+# Start xterm for rep node
+
+NDB_ID=$NDB_REP_ID
+NDB_CONNECTSTRING=$NDB_CONNECTSTRING_BASE$NDB_ID
+export NDB_CONNECTSTRING
+xterm -T "$NDB_DEMO_NAME REP Node $NDB_ID" -geometry 80x10 -xrm *.hold:true -e ndb_rep &
+
+# Start management client
+
+xterm -T "$NDB_DEMO_NAME Mgmt Client" -geometry 80x10 -xrm *.hold:true -e mgmtclient $NDB_HOST $NDB_PORT &
diff --git a/ndb/demos/run_demo1-PS.sh b/ndb/demos/run_demo1-PS.sh
new file mode 100755
index 00000000000..82cfdd5e65b
--- /dev/null
+++ b/ndb/demos/run_demo1-PS.sh
@@ -0,0 +1,30 @@
+#!/bin/sh
+if [ -z "$MYSQLCLUSTER_TOP" ]; then
+ echo "MYSQLCLUSTER_TOP not set"
+ exit 1
+fi
+if [ -d "$MYSQLCLUSTER_TOP/ndb" ]; then :; else
+ echo "$MYSQLCLUSTER_TOP/ndb directory does not exist"
+ exit 1
+fi
+NDB_CONNECTSTRING=
+NDB_HOME=
+NDB_DEMO=$MYSQLCLUSTER_TOP/ndb/demos/1-node-PS
+
+NDB_PORT_BASE="102"
+NDB_REP_ID="5"
+NDB_EXTREP_ID="4"
+
+NDB_DEMO_NAME="Demo 1-PS MySQL Cluster"
+NDB_HOST1=$1
+NDB_HOST2=$2
+if [ -z "$NDB_HOST1" ]; then
+ NDB_HOST1=localhost
+fi
+if [ -z "$NDB_HOST2" ]; then
+ NDB_HOST2=localhost
+fi
+NDB_HOST=$NDB_HOST1
+NDB_EXTHOST=$NDB_HOST2
+
+source $MYSQLCLUSTER_TOP/ndb/demos/run_demo1-PS-SS_common.sh
diff --git a/ndb/demos/run_demo1-SS.sh b/ndb/demos/run_demo1-SS.sh
new file mode 100755
index 00000000000..5ede57c44c4
--- /dev/null
+++ b/ndb/demos/run_demo1-SS.sh
@@ -0,0 +1,30 @@
+#!/bin/sh
+if [ -z "$MYSQLCLUSTER_TOP" ]; then
+ echo "MYSQLCLUSTER_TOP not set"
+ exit 1
+fi
+if [ -d "$MYSQLCLUSTER_TOP/ndb" ]; then :; else
+ echo "$MYSQLCLUSTER_TOP/ndb directory does not exist"
+ exit 1
+fi
+NDB_CONNECTSTRING=
+NDB_HOME=
+NDB_DEMO=$MYSQLCLUSTER_TOP/ndb/demos/1-node-SS
+
+NDB_PORT_BASE="101"
+NDB_REP_ID="4"
+NDB_EXTREP_ID="5"
+
+NDB_DEMO_NAME="Demo 1-SS MySQL Cluster"
+NDB_HOST1=$1
+NDB_HOST2=$2
+if [ -z "$NDB_HOST1" ]; then
+ NDB_HOST1=localhost
+fi
+if [ -z "$NDB_HOST2" ]; then
+ NDB_HOST2=localhost
+fi
+NDB_HOST=$NDB_HOST2
+NDB_EXTHOST=$NDB_HOST1
+
+source $MYSQLCLUSTER_TOP/ndb/demos/run_demo1-PS-SS_common.sh
diff --git a/ndb/demos/run_demo1.sh b/ndb/demos/run_demo1.sh
new file mode 100755
index 00000000000..df6e3fc799d
--- /dev/null
+++ b/ndb/demos/run_demo1.sh
@@ -0,0 +1,41 @@
+#!/bin/sh
+if [ -z "$MYSQLCLUSTER_TOP" ]; then
+ echo "MYSQLCLUSTER_TOP not set"
+ exit 1
+fi
+if [ -d "$MYSQLCLUSTER_TOP/ndb" ]; then :; else
+ echo "$MYSQLCLUSTER_TOP/ndb directory does not exist"
+ exit 1
+fi
+NDB_CONNECTSTRING=
+NDB_HOME=
+ndb_demo=$MYSQLCLUSTER_TOP/ndb/demos
+
+# Edit file system path
+
+cd $ndb_demo/1-node/1-mgm-1
+sed -e s,"WRITE_PATH_TO_FILESYSTEM_2_HERE",$ndb_demo/1-node/1-db-2/filesystem,g \
+ < template_config.ini > config.ini
+
+# Start management server as deamon
+
+cd $ndb_demo/1-node/1-mgm-1
+if mgmtsrvr -d -c config.ini ; then :; else
+ echo "Unable to start mgmtsrvr"
+ exit 1
+fi
+
+# Start database node
+
+cd $ndb_demo/1-node/1-db-2
+xterm -T "Demo 1 NDB Cluster DB Node 2" -geometry 80x10 -xrm *.hold:true -e ndb -i &
+
+# Start xterm for application programs
+
+cd $ndb_demo/1-node/1-api-3
+xterm -T "Demo 1 NDB Cluster API Node 3" -geometry 80x10 &
+
+# Start management client
+
+cd $ndb_demo
+xterm -T "Demo 1 NDB Management Client" -geometry 80x10 -xrm *.hold:true -e mgmtclient localhost 10000 &
diff --git a/ndb/demos/run_demo2.sh b/ndb/demos/run_demo2.sh
new file mode 100755
index 00000000000..9bae7517d5f
--- /dev/null
+++ b/ndb/demos/run_demo2.sh
@@ -0,0 +1,54 @@
+#!/bin/sh
+if [ -z "$MYSQLCLUSTER_TOP" ]; then
+ echo "MYSQLCLUSTER_TOP not set"
+ exit 1
+fi
+if [ -d "$MYSQLCLUSTER_TOP/ndb" ]; then :; else
+ echo "$MYSQLCLUSTER_TOP/ndb directory does not exist"
+ exit 1
+fi
+NDB_CONNECTSTRING=
+NDB_HOME=
+ndb_demo=$MYSQLCLUSTER_TOP/ndb/demos
+
+# Edit file system path
+
+cd $ndb_demo/2-node/2-mgm-1
+sed -e s,"WRITE_PATH_TO_FILESYSTEM_2_HERE",$ndb_demo/2-node/2-db-2/filesystem,g \
+ -e s,"WRITE_PATH_TO_FILESYSTEM_3_HERE",$ndb_demo/2-node/2-db-3/filesystem,g \
+ < template_config.ini > config.ini
+
+# Start management server as deamon
+
+cd $ndb_demo/2-node/2-mgm-1
+if mgmtsrvr -d -c config.ini ; then :; else
+ echo "Unable to start mgmtsrvr"
+ exit 1
+fi
+
+#xterm -T "Demo 2 NDB Management Server" -geometry 80x10 -xrm *.hold:true -e mgmtsrvr -c config.ini &
+
+# Start database node
+
+cd $ndb_demo/2-node/2-db-2
+xterm -T "Demo 2 NDB Cluster DB Node 2" -geometry 80x10 -xrm *.hold:true -e ndb -i &
+
+# Start database node
+
+cd $ndb_demo/2-node/2-db-3
+xterm -T "Demo 2 NDB Cluster DB Node 3" -geometry 80x10 -xrm *.hold:true -e ndb -i &
+
+# Start xterm for application programs
+
+cd $ndb_demo/2-node/2-api-4
+xterm -T "Demo 2 NDB Cluster API Node 4" -geometry 80x10 &
+
+# Start xterm for application programs
+
+cd $ndb_demo/2-node/2-api-5
+xterm -T "Demo 2 NDB Cluster API Node 5" -geometry 80x10 &
+
+# Start management client
+
+cd $ndb_demo
+xterm -T "Demo 2 NDB Management Client" -geometry 80x10 -xrm *.hold:true -e mgmtclient localhost 10000 &
diff --git a/ndb/docs/Makefile b/ndb/docs/Makefile
new file mode 100644
index 00000000000..a2139b66044
--- /dev/null
+++ b/ndb/docs/Makefile
@@ -0,0 +1,97 @@
+include .defs.mk
+#
+# hack before full autoconf
+replace-targets := all clean
+first-docs: all
+
+include $(NDB_TOP)/Epilogue.mk
+
+all: ndbapidoc mgmapidoc
+
+DOXYGEN = doxygen
+DOXYTOP = $(shell cd $(NDB_TOP); pwd)/docs
+DOXYDIR = $(DOXYTOP)/doxygen
+DOXYTMP = $(DOXYTOP)/.doxytmp
+DOXYOUT = $(DOXYTOP)/.doxyout
+
+clean:
+ rm -rf ndbapi.pdf ndbapi.html mgmapi.pdf mgmapi.html
+ rm -rf $(DOXYTMP) $(DOXYOUT)
+
+###
+#
+# NDB API Programmer's Guide
+#
+ndbapidoc: ndbapi.pdf
+
+ndbapi.pdf: $(NDB_TOP)/include/ndb_version.h
+ @set -x; \
+ rm -rf ndbapi.pdf ndbapi.html; \
+ rm -rf $(DOXYTMP) $(DOXYOUT); \
+ mkdir -p $(DOXYTMP) $(DOXYOUT); \
+ (cd $(NDB_TOP)/include/ndbapi && \
+ find . -type f -print | \
+ grep -v /SCCS | \
+ cpio -pdm $(DOXYTMP)); \
+ (cd $(NDB_TOP)/examples && \
+ cp -p */*.[ch]pp $(DOXYTMP)); \
+ $(DOXYDIR)/predoxy.pl; \
+ mv footer.html $(DOXYTMP); \
+ (cd $(DOXYTMP) && \
+ $(DOXYGEN) $(DOXYDIR)/Doxyfile.ndbapi); \
+ $(DOXYDIR)/postdoxy.pl $(DOXYOUT)/ndbapi.latex "NDB API Programmer Guide"; \
+ (cd $(DOXYOUT) && \
+ find ndbapi.html -print | cpio -pdm $(DOXYTOP)); \
+ (cd $(DOXYOUT)/ndbapi.latex && \
+ pdflatex refman.tex && makeindex refman && pdflatex refman.tex && \
+ cp -p refman.pdf $(DOXYTOP)/ndbapi.pdf);
+
+###
+#
+# MGM API Guide
+#
+mgmapidoc: mgmapi.pdf
+
+mgmapi.pdf: $(NDB_TOP)/include/ndb_version.h
+ @set -x; \
+ rm -rf mgmapi.pdf mgmapi.html; \
+ rm -rf $(DOXYTMP) $(DOXYOUT); \
+ mkdir -p $(DOXYTMP) $(DOXYOUT); \
+ (cd $(NDB_TOP)/include/mgmapi && \
+ find . -type f -print | \
+ grep -v /SCCS | \
+ cpio -pdm $(DOXYTMP)); \
+ $(DOXYDIR)/predoxy.pl; \
+ mv footer.html $(DOXYTMP); \
+ (cd $(DOXYTMP) && \
+ $(DOXYGEN) $(DOXYDIR)/Doxyfile.mgmapi); \
+ $(DOXYDIR)/postdoxy.pl $(OUTDIR)/mgmapi.latex "NDB Cluster MGM API Guide"; \
+ (cd $(DOXYOUT) && \
+ find mgmapi.html -print | cpio -pdm $(DOXYTOP)); \
+ (cd $(DOXYOUT)/mgmapi.latex && \
+ pdflatex refman.tex && makeindex refman && pdflatex refman.tex && \
+ cp -p refman.pdf $(DOXYTOP)/mgmapi.pdf);
+
+###
+#
+# Complete Source Browser except for
+# ndbapi odbc test tools win32 lib examples docs CVS config bin
+# include/ndbapi
+# include/newtonapi src/newtonapi
+# include/mgmapi src/mgmapi
+# src/client
+ndbdoc: DUMMY
+ mkdir -p $(OUTDIR)
+ cd $(NDB_TOP) ; $(DOXYGEN) $(DOXYDIR)/Doxyfile.ndb
+
+###
+#
+# odbcdoc - Complete Source Browser for NDB ODBC (src/client/odbc)
+
+odbcdoc: DUMMY
+ mkdir -p $(OUTDIR)
+ cd $(NDB_TOP) ; $(DOXYGEN) $(DOXYDIR)/Doxyfile.odbc
+
+testdoc: DUMMY
+ mkdir -p $(OUTDIR)
+ cd $(NDB_TOP) ; $(DOXYGEN) $(DOXYDIR)/Doxyfile.test
diff --git a/ndb/docs/README b/ndb/docs/README
new file mode 100644
index 00000000000..262e9003aca
--- /dev/null
+++ b/ndb/docs/README
@@ -0,0 +1,30 @@
+Create MySQL Cluster user documentation from source code
+--------------------------------------------------------
+(All these require Doxygen.)
+
+* make clean
+ Remove all generated documentation and tmp files
+
+* make ndbapidoc
+ Makes the NDB API Programmer's Guide (in HTML)
+
+* make ndbapipdf
+ Makes the NDB API Programmer Guide (in PDF)
+
+* make mgmapidoc
+ Makes the MGM API Reference Manual (in HTML)
+
+* make mgmapipdf
+ Makes the MGM API Reference Manual (in PDF)
+
+* make ndbdoc
+ Makes source code browser for NDB Cluster (in HTML)
+ (Requires Graphviz.)
+
+Doxygen and Graphviz can be found at:
+ http://www.doxygen.org
+or at (for Red Hat 9.0 RPMs):
+ http://dentrassi.de/download/doxygen/
+
+--
+lars@mysql.com
diff --git a/ndb/docs/doxygen/Doxyfile.mgmapi b/ndb/docs/doxygen/Doxyfile.mgmapi
new file mode 100644
index 00000000000..4287b37fd97
--- /dev/null
+++ b/ndb/docs/doxygen/Doxyfile.mgmapi
@@ -0,0 +1,877 @@
+# Doxyfile 1.2.12
+
+# This file describes the settings to be used by the documentation system
+# doxygen (www.doxygen.org) for a project
+#
+# All text after a hash (#) is considered a comment and will be ignored
+# The format is:
+# TAG = value [value, ...]
+# For lists items can also be appended using:
+# TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (" ")
+
+#---------------------------------------------------------------------------
+# General configuration options
+#---------------------------------------------------------------------------
+DETAILS_AT_TOP = yes
+HIDE_FRIEND_COMPOUNDS = yes
+
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded
+# by quotes) that should identify the project.
+
+PROJECT_NAME =
+
+# The PROJECT_NUMBER tag can be used to enter a project or revision number.
+# This could be handy for archiving the generated documentation or
+# if some version control system is used.
+
+PROJECT_NUMBER =
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
+# base path where the generated documentation will be put.
+# If a relative path is entered, it will be relative to the location
+# where doxygen was started. If left blank the current directory will be used.
+
+OUTPUT_DIRECTORY =
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all
+# documentation generated by doxygen is written. Doxygen will use this
+# information to generate all constant output in the proper language.
+# The default language is English, other supported languages are:
+# Brazilian, Chinese, Croatian, Czech, Danish, Dutch, Finnish, French,
+# German, Hungarian, Italian, Japanese, Korean, Norwegian, Polish,
+# Portuguese, Romanian, Russian, Slovak, Slovene, Spanish and Swedish.
+
+OUTPUT_LANGUAGE = English
+
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
+# documentation are documented, even if no documentation was available.
+# Private class members and static file members will be hidden unless
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
+
+EXTRACT_ALL = NO
+
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class
+# will be included in the documentation.
+
+EXTRACT_PRIVATE = NO
+
+# If the EXTRACT_STATIC tag is set to YES all static members of a file
+# will be included in the documentation.
+
+EXTRACT_STATIC = NO
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all
+# undocumented members of documented classes, files or namespaces.
+# If set to NO (the default) these members will be included in the
+# various overviews, but no documentation section is generated.
+# This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_MEMBERS = NO
+
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all
+# undocumented classes that are normally visible in the class hierarchy.
+# If set to NO (the default) these class will be included in the various
+# overviews. This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_CLASSES = NO
+
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will
+# include brief member descriptions after the members that are listed in
+# the file and class documentation (similar to JavaDoc).
+# Set to NO to disable this.
+
+BRIEF_MEMBER_DESC = YES
+
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend
+# the brief description of a member or function before the detailed description.
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
+# brief descriptions will be completely suppressed.
+
+REPEAT_BRIEF = YES
+
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
+# Doxygen will generate a detailed section even if there is only a brief
+# description.
+
+ALWAYS_DETAILED_SEC = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full
+# path before files name in the file list and in the header files. If set
+# to NO the shortest path that makes the file name unique will be used.
+
+FULL_PATH_NAMES = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
+# can be used to strip a user defined part of the path. Stripping is
+# only done if one of the specified strings matches the left-hand part of
+# the path. It is allowed to use relative paths in the argument list.
+
+STRIP_FROM_PATH =
+
+# The INTERNAL_DOCS tag determines if documentation
+# that is typed after a \internal command is included. If the tag is set
+# to NO (the default) then the documentation will be excluded.
+# Set it to YES to include the internal documentation.
+
+INTERNAL_DOCS = NO
+
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct
+# doxygen to hide any special comment blocks from generated source code
+# fragments. Normal C and C++ comments will always remain visible.
+
+STRIP_CODE_COMMENTS = YES
+
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate
+# file names in lower case letters. If set to YES upper case letters are also
+# allowed. This is useful if you have classes or files whose names only differ
+# in case and if your file system supports case sensitive file names. Windows
+# users are adviced to set this option to NO.
+
+CASE_SENSE_NAMES = YES
+
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter
+# (but less readable) file names. This can be useful is your file systems
+# doesn't support long names like on DOS, Mac, or CD-ROM.
+
+SHORT_NAMES = NO
+
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen
+# will show members with their full class and namespace scopes in the
+# documentation. If set to YES the scope will be hidden.
+
+HIDE_SCOPE_NAMES = NO
+
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen
+# will generate a verbatim copy of the header file for each class for
+# which an include is specified. Set to NO to disable this.
+
+VERBATIM_HEADERS = YES
+
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen
+# will put list of the files that are included by a file in the documentation
+# of that file.
+
+SHOW_INCLUDE_FILES = YES
+
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen
+# will interpret the first line (until the first dot) of a JavaDoc-style
+# comment as the brief description. If set to NO, the JavaDoc
+# comments will behave just like the Qt-style comments (thus requiring an
+# explict @brief command for a brief description.
+
+JAVADOC_AUTOBRIEF = NO
+
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented
+# member inherits the documentation from any documented member that it
+# reimplements.
+
+INHERIT_DOCS = YES
+
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline]
+# is inserted in the documentation for inline members.
+
+INLINE_INFO = YES
+
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen
+# will sort the (detailed) documentation of file and class members
+# alphabetically by member name. If set to NO the members will appear in
+# declaration order.
+
+SORT_MEMBER_DOCS = YES
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
+# tag is set to YES, then doxygen will reuse the documentation of the first
+# member in the group (if any) for the other members of the group. By default
+# all members of a group must be documented explicitly.
+
+DISTRIBUTE_GROUP_DOC = NO
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab.
+# Doxygen uses this value to replace tabs by spaces in code fragments.
+
+TAB_SIZE = 8
+
+# The GENERATE_TODOLIST tag can be used to enable (YES) or
+# disable (NO) the todo list. This list is created by putting \todo
+# commands in the documentation.
+
+GENERATE_TODOLIST = YES
+
+# The GENERATE_TESTLIST tag can be used to enable (YES) or
+# disable (NO) the test list. This list is created by putting \test
+# commands in the documentation.
+
+GENERATE_TESTLIST = YES
+
+# The GENERATE_BUGLIST tag can be used to enable (YES) or
+# disable (NO) the bug list. This list is created by putting \bug
+# commands in the documentation.
+
+GENERATE_BUGLIST = YES
+
+# This tag can be used to specify a number of aliases that acts
+# as commands in the documentation. An alias has the form "name=value".
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to
+# put the command \sideeffect (or @sideeffect) in the documentation, which
+# will result in a user defined paragraph with heading "Side Effects:".
+# You can put \n's in the value part of an alias to insert newlines.
+
+ALIASES =
+
+# The ENABLED_SECTIONS tag can be used to enable conditional
+# documentation sections, marked by \if sectionname ... \endif.
+
+ENABLED_SECTIONS =
+
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines
+# the initial value of a variable or define consist of for it to appear in
+# the documentation. If the initializer consists of more lines than specified
+# here it will be hidden. Use a value of 0 to hide initializers completely.
+# The appearance of the initializer of individual variables and defines in the
+# documentation can be controlled using \showinitializer or \hideinitializer
+# command in the documentation regardless of this setting.
+
+MAX_INITIALIZER_LINES = 30
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources
+# only. Doxygen will then generate output that is more tailored for C.
+# For instance some of the names that are used will be different. The list
+# of all members will be omitted, etc.
+
+OPTIMIZE_OUTPUT_FOR_C = NO
+
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated
+# at the bottom of the documentation of classes and structs. If set to YES the
+# list will mention the files that were used to generate the documentation.
+
+SHOW_USED_FILES = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+
+# The QUIET tag can be used to turn on/off the messages that are generated
+# by doxygen. Possible values are YES and NO. If left blank NO is used.
+
+QUIET = NO
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are
+# generated by doxygen. Possible values are YES and NO. If left blank
+# NO is used.
+
+WARNINGS = YES
+
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will
+# automatically be disabled.
+
+WARN_IF_UNDOCUMENTED = YES
+
+# The WARN_FORMAT tag determines the format of the warning messages that
+# doxygen can produce. The string should contain the $file, $line, and $text
+# tags, which will be replaced by the file and line number from which the
+# warning originated and the warning text.
+
+WARN_FORMAT =
+
+# The WARN_LOGFILE tag can be used to specify a file to which warning
+# and error messages should be written. If left blank the output is written
+# to stderr.
+
+WARN_LOGFILE =
+
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+
+# The INPUT tag can be used to specify the files and/or directories that contain
+# documented source files. You may enter file names like "myfile.cpp" or
+# directories like "/usr/src/myproject". Separate the files or directories
+# with spaces.
+
+INPUT = .
+
+# If the value of the INPUT tag contains directories, you can use the
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank file matching one of the following patterns are included:
+# *.c *.cc *.cxx *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx *.hpp
+# *.h++ *.idl
+
+FILE_PATTERNS =
+
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories
+# should be searched for input files as well. Possible values are YES and NO.
+# If left blank NO is used.
+
+RECURSIVE = NO
+
+# The EXCLUDE tag can be used to specify files and/or directories that should
+# excluded from the INPUT source files. This way you can easily exclude a
+# subdirectory from a directory tree whose root is specified with the INPUT tag.
+
+EXCLUDE =
+
+# If the value of the INPUT tag contains directories, you can use the
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
+# certain files from those directories.
+
+EXCLUDE_PATTERNS =
+
+# The EXAMPLE_PATH tag can be used to specify one or more files or
+# directories that contain example code fragments that are included (see
+# the \include command).
+
+EXAMPLE_PATH = .
+
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank all files are included.
+
+EXAMPLE_PATTERNS =
+
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
+# searched for input files to be used with the \include or \dontinclude
+# commands irrespective of the value of the RECURSIVE tag.
+# Possible values are YES and NO. If left blank NO is used.
+
+EXAMPLE_RECURSIVE = NO
+
+# The IMAGE_PATH tag can be used to specify one or more files or
+# directories that contain image that are included in the documentation (see
+# the \image command).
+
+IMAGE_PATH =
+
+# The INPUT_FILTER tag can be used to specify a program that doxygen should
+# invoke to filter for each input file. Doxygen will invoke the filter program
+# by executing (via popen()) the command , where
+# is the value of the INPUT_FILTER tag, and is the name of an
+# input file. Doxygen will then use the output that the filter program writes
+# to standard output.
+
+INPUT_FILTER =
+
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
+# INPUT_FILTER) will be used to filter the input files when producing source
+# files to browse.
+
+FILTER_SOURCE_FILES = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will
+# be generated. Documented entities will be cross-referenced with these sources.
+
+SOURCE_BROWSER = NO
+
+# Setting the INLINE_SOURCES tag to YES will include the body
+# of functions and classes directly in the documentation.
+
+INLINE_SOURCES = NO
+
+# If the REFERENCED_BY_RELATION tag is set to YES (the default)
+# then for each documented function all documented
+# functions referencing it will be listed.
+
+REFERENCED_BY_RELATION = YES
+
+# If the REFERENCES_RELATION tag is set to YES (the default)
+# then for each documented function all documented entities
+# called/used by that function will be listed.
+
+REFERENCES_RELATION = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index
+# of all compounds will be generated. Enable this if the project
+# contains a lot of classes, structs, unions or interfaces.
+
+ALPHABETICAL_INDEX = NO
+
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns
+# in which this list will be split (can be a number in the range [1..20])
+
+COLS_IN_ALPHA_INDEX = 5
+
+# In case all classes in a project start with a common prefix, all
+# classes will be put under the same header in the alphabetical index.
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that
+# should be ignored while generating the index headers.
+
+IGNORE_PREFIX =
+
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will
+# generate HTML output.
+
+GENERATE_HTML = YES
+
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `html' will be used as the default path.
+
+HTML_OUTPUT = ../.doxyout/mgmapi.html
+
+# The HTML_HEADER tag can be used to specify a personal HTML header for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard header.
+
+HTML_HEADER =
+
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard footer.
+
+HTML_FOOTER = footer.html
+
+# The HTML_STYLESHEET tag can be used to specify a user defined cascading
+# style sheet that is used by each HTML page. It can be used to
+# fine-tune the look of the HTML output. If the tag is left blank doxygen
+# will generate a default style sheet
+
+HTML_STYLESHEET =
+
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes,
+# files or namespaces will be aligned in HTML using tables. If set to
+# NO a bullet list will be used.
+
+HTML_ALIGN_MEMBERS = YES
+
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files
+# will be generated that can be used as input for tools like the
+# Microsoft HTML help workshop to generate a compressed HTML help file (.chm)
+# of the generated HTML documentation.
+
+GENERATE_HTMLHELP = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag
+# controls if a separate .chi index file is generated (YES) or that
+# it should be included in the master .chm file (NO).
+
+GENERATE_CHI = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag
+# controls whether a binary table of contents is generated (YES) or a
+# normal table of contents (NO) in the .chm file.
+
+BINARY_TOC = NO
+
+# The TOC_EXPAND flag can be set to YES to add extra items for group members
+# to the contents of the Html help documentation and to the tree view.
+
+TOC_EXPAND = NO
+
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at
+# top of each HTML page. The value NO (the default) enables the index and
+# the value YES disables it.
+
+DISABLE_INDEX = NO
+
+# This tag can be used to set the number of enum values (range [1..20])
+# that doxygen will group on one line in the generated HTML documentation.
+
+ENUM_VALUES_PER_LINE = 4
+
+# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be
+# generated containing a tree-like index structure (just like the one that
+# is generated for HTML Help). For this to work a browser that supports
+# JavaScript and frames is required (for instance Mozilla, Netscape 4.0+,
+# or Internet explorer 4.0+). Note that for large projects the tree generation
+# can take a very long time. In such cases it is better to disable this feature.
+# Windows users are probably better off using the HTML help feature.
+
+GENERATE_TREEVIEW = NO
+
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be
+# used to set the initial width (in pixels) of the frame in which the tree
+# is shown.
+
+TREEVIEW_WIDTH = 250
+
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will
+# generate Latex output.
+
+GENERATE_LATEX = YES
+
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `latex' will be used as the default path.
+
+LATEX_OUTPUT = ../.doxyout/mgmapi.latex
+
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact
+# LaTeX documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_LATEX = NO
+
+# The PAPER_TYPE tag can be used to set the paper type that is used
+# by the printer. Possible values are: a4, a4wide, letter, legal and
+# executive. If left blank a4wide will be used.
+
+PAPER_TYPE =
+
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX
+# packages that should be included in the LaTeX output.
+
+EXTRA_PACKAGES =
+
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for
+# the generated latex document. The header should contain everything until
+# the first chapter. If it is left blank doxygen will generate a
+# standard header. Notice: only use this tag if you know what you are doing!
+
+LATEX_HEADER = ../doxygen/header.mgmapi.tex
+
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will
+# contain links (just like the HTML output) instead of page references
+# This makes the output suitable for online browsing using a pdf viewer.
+
+PDF_HYPERLINKS = YES
+
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of
+# plain latex in the generated Makefile. Set this option to YES to get a
+# higher quality PDF documentation.
+
+USE_PDFLATEX = YES
+
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode.
+# command to the generated LaTeX files. This will instruct LaTeX to keep
+# running if errors occur, instead of asking the user for help.
+# This option is also used when generating formulas in HTML.
+
+LATEX_BATCHMODE = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output
+# The RTF output is optimised for Word 97 and may not look very pretty with
+# other RTF readers or editors.
+
+GENERATE_RTF = NO
+
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `rtf' will be used as the default path.
+
+RTF_OUTPUT = ../mgmapi.rtf
+
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact
+# RTF documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_RTF = NO
+
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated
+# will contain hyperlink fields. The RTF file will
+# contain links (just like the HTML output) instead of page references.
+# This makes the output suitable for online browsing using WORD or other
+# programs which support those fields.
+# Note: wordpad (write) and others do not support links.
+
+RTF_HYPERLINKS = NO
+
+# Load stylesheet definitions from file. Syntax is similar to doxygen's
+# config file, i.e. a series of assigments. You only have to provide
+# replacements, missing definitions are set to their default value.
+
+RTF_STYLESHEET_FILE =
+
+# Set optional variables used in the generation of an rtf document.
+# Syntax is similar to doxygen's config file.
+
+RTF_EXTENSIONS_FILE =
+
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will
+# generate man pages
+
+GENERATE_MAN = NO
+
+# The MAN_OUTPUT tag is used to specify where the man pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `man' will be used as the default path.
+
+MAN_OUTPUT =
+
+# The MAN_EXTENSION tag determines the extension that is added to
+# the generated man pages (default is the subroutine's section .3)
+
+MAN_EXTENSION =
+
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output,
+# then it will generate one additional man file for each entity
+# documented in the real man page(s). These additional files
+# only source the real man page, but without them the man command
+# would be unable to find the correct page. The default is NO.
+
+MAN_LINKS = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_XML tag is set to YES Doxygen will
+# generate an XML file that captures the structure of
+# the code including all documentation. Note that this
+# feature is still experimental and incomplete at the
+# moment.
+
+GENERATE_XML = NO
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor
+#---------------------------------------------------------------------------
+
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will
+# evaluate all C-preprocessor directives found in the sources and include
+# files.
+
+ENABLE_PREPROCESSING = YES
+
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro
+# names in the source code. If set to NO (the default) only conditional
+# compilation will be performed. Macro expansion can be done in a controlled
+# way by setting EXPAND_ONLY_PREDEF to YES.
+
+MACRO_EXPANSION = YES
+
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES
+# then the macro expansion is limited to the macros specified with the
+# PREDEFINED and EXPAND_AS_PREDEFINED tags.
+
+EXPAND_ONLY_PREDEF = YES
+
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files
+# in the INCLUDE_PATH (see below) will be search if a #include is found.
+
+SEARCH_INCLUDES = YES
+
+# The INCLUDE_PATH tag can be used to specify one or more directories that
+# contain include files that are not input files but should be processed by
+# the preprocessor.
+
+INCLUDE_PATH =
+
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
+# patterns (like *.h and *.hpp) to filter out the header-files in the
+# directories. If left blank, the patterns specified with FILE_PATTERNS will
+# be used.
+
+INCLUDE_FILE_PATTERNS =
+
+# The PREDEFINED tag can be used to specify one or more macro names that
+# are defined before the preprocessor is started (similar to the -D option of
+# gcc). The argument of the tag is a list of macros of the form: name
+# or name=definition (no spaces). If the definition and the = are
+# omitted =1 is assumed.
+
+PREDEFINED = DOXYGEN_SHOULD_SKIP_DEPRECATED \
+ DOXYGEN_SHOULD_SKIP_INTERNAL \
+ protected=private
+
+# If the MACRO_EXPANSION and EXPAND_PREDEF_ONLY tags are set to YES then
+# this tag can be used to specify a list of macro names that should be expanded.
+# The macro definition that is found in the sources will be used.
+# Use the PREDEFINED tag if you want to use a different macro definition.
+
+EXPAND_AS_DEFINED =
+
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then
+# doxygen's preprocessor will remove all function-like macros that are alone
+# on a line and do not end with a semicolon. Such function macros are typically
+# used for boiler-plate code, and will confuse the parser if not removed.
+
+SKIP_FUNCTION_MACROS = YES
+
+#---------------------------------------------------------------------------
+# Configuration::addtions related to external references
+#---------------------------------------------------------------------------
+
+# The TAGFILES tag can be used to specify one or more tagfiles.
+
+TAGFILES =
+
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create
+# a tag file that is based on the input files it reads.
+
+GENERATE_TAGFILE =
+
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed
+# in the class index. If set to NO only the inherited external classes
+# will be listed.
+
+ALLEXTERNALS = NO
+
+# The PERL_PATH should be the absolute path and name of the perl script
+# interpreter (i.e. the result of `which perl').
+
+PERL_PATH =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool
+#---------------------------------------------------------------------------
+
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will
+# generate a inheritance diagram (in Html, RTF and LaTeX) for classes with base or
+# super classes. Setting the tag to NO turns the diagrams off. Note that this
+# option is superceded by the HAVE_DOT option below. This is only a fallback. It is
+# recommended to install and use dot, since it yield more powerful graphs.
+
+CLASS_DIAGRAMS = YES
+
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
+# available from the path. This tool is part of Graphviz, a graph visualization
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section
+# have no effect if this option is set to NO (the default)
+
+HAVE_DOT = NO
+
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect inheritance relations. Setting this tag to YES will force the
+# the CLASS_DIAGRAMS tag to NO.
+
+CLASS_GRAPH = YES
+
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect implementation dependencies (inheritance, containment, and
+# class references variables) of the class with other documented classes.
+
+COLLABORATION_GRAPH = YES
+
+# If set to YES, the inheritance and collaboration graphs will show the
+# relations between templates and their instances.
+
+TEMPLATE_RELATIONS = YES
+
+# If set to YES, the inheritance and collaboration graphs will hide
+# inheritance and usage relations if the target is undocumented
+# or is not a class.
+
+HIDE_UNDOC_RELATIONS = YES
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT
+# tags are set to YES then doxygen will generate a graph for each documented
+# file showing the direct and indirect include dependencies of the file with
+# other documented files.
+
+INCLUDE_GRAPH = YES
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each
+# documented header file showing the documented files that directly or
+# indirectly include this file.
+
+INCLUDED_BY_GRAPH = YES
+
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen
+# will graphical hierarchy of all classes instead of a textual one.
+
+GRAPHICAL_HIERARCHY = YES
+
+# The tag DOT_PATH can be used to specify the path where the dot tool can be
+# found. If left blank, it is assumed the dot tool can be found on the path.
+
+DOT_PATH =
+
+# The DOTFILE_DIRS tag can be used to specify one or more directories that
+# contain dot files that are included in the documentation (see the
+# \dotfile command).
+
+DOTFILE_DIRS =
+
+# The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width
+# (in pixels) of the graphs generated by dot. If a graph becomes larger than
+# this value, doxygen will try to truncate the graph, so that it fits within
+# the specified constraint. Beware that most browsers cannot cope with very
+# large images.
+
+MAX_DOT_GRAPH_WIDTH = 1024
+
+# The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height
+# (in pixels) of the graphs generated by dot. If a graph becomes larger than
+# this value, doxygen will try to truncate the graph, so that it fits within
+# the specified constraint. Beware that most browsers cannot cope with very
+# large images.
+
+MAX_DOT_GRAPH_HEIGHT = 1024
+
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will
+# generate a legend page explaining the meaning of the various boxes and
+# arrows in the dot generated graphs.
+
+GENERATE_LEGEND = YES
+
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will
+# remove the intermedate dot files that are used to generate
+# the various graphs.
+
+DOT_CLEANUP = YES
+
+#---------------------------------------------------------------------------
+# Configuration::addtions related to the search engine
+#---------------------------------------------------------------------------
+
+# The SEARCHENGINE tag specifies whether or not a search engine should be
+# used. If set to NO the values of all tags below this one will be ignored.
+
+SEARCHENGINE = NO
+
+# The CGI_NAME tag should be the name of the CGI script that
+# starts the search engine (doxysearch) with the correct parameters.
+# A script with this name will be generated by doxygen.
+
+CGI_NAME =
+
+# The CGI_URL tag should be the absolute URL to the directory where the
+# cgi binaries are located. See the documentation of your http daemon for
+# details.
+
+CGI_URL =
+
+# The DOC_URL tag should be the absolute URL to the directory where the
+# documentation is located. If left blank the absolute path to the
+# documentation, with file:// prepended to it, will be used.
+
+DOC_URL =
+
+# The DOC_ABSPATH tag should be the absolute path to the directory where the
+# documentation is located. If left blank the directory on the local machine
+# will be used.
+
+DOC_ABSPATH =
+
+# The BIN_ABSPATH tag must point to the directory where the doxysearch binary
+# is installed.
+
+BIN_ABSPATH =
+
+# The EXT_DOC_PATHS tag can be used to specify one or more paths to
+# documentation generated for other projects. This allows doxysearch to search
+# the documentation for these projects as well.
+
+EXT_DOC_PATHS =
diff --git a/ndb/docs/doxygen/Doxyfile.ndb b/ndb/docs/doxygen/Doxyfile.ndb
new file mode 100644
index 00000000000..d43a66323f8
--- /dev/null
+++ b/ndb/docs/doxygen/Doxyfile.ndb
@@ -0,0 +1,937 @@
+# Doxyfile 1.2.14
+
+# This file describes the settings to be used by the documentation system
+# doxygen (www.doxygen.org) for a project
+#
+# All text after a hash (#) is considered a comment and will be ignored
+# The format is:
+# TAG = value [value, ...]
+# For lists items can also be appended using:
+# TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (" ")
+
+#---------------------------------------------------------------------------
+# General configuration options
+#---------------------------------------------------------------------------
+
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded
+# by quotes) that should identify the project.
+
+PROJECT_NAME = "NDB Cluster"
+
+# The PROJECT_NUMBER tag can be used to enter a project or revision number.
+# This could be handy for archiving the generated documentation or
+# if some version control system is used.
+
+PROJECT_NUMBER =
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
+# base path where the generated documentation will be put.
+# If a relative path is entered, it will be relative to the location
+# where doxygen was started. If left blank the current directory will be used.
+
+OUTPUT_DIRECTORY =
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all
+# documentation generated by doxygen is written. Doxygen will use this
+# information to generate all constant output in the proper language.
+# The default language is English, other supported languages are:
+# Brazilian, Chinese, Croatian, Czech, Danish, Dutch, Finnish, French,
+# German, Greek, Hungarian, Italian, Japanese, Korean, Norwegian, Polish,
+# Portuguese, Romanian, Russian, Slovak, Slovene, Spanish and Swedish.
+
+OUTPUT_LANGUAGE = English
+
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
+# documentation are documented, even if no documentation was available.
+# Private class members and static file members will be hidden unless
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
+
+EXTRACT_ALL = YES
+
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class
+# will be included in the documentation.
+
+EXTRACT_PRIVATE = YES
+
+# If the EXTRACT_STATIC tag is set to YES all static members of a file
+# will be included in the documentation.
+
+EXTRACT_STATIC = YES
+
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs)
+# defined locally in source files will be included in the documentation.
+# If set to NO only classes defined in header files are included.
+
+EXTRACT_LOCAL_CLASSES = YES
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all
+# undocumented members of documented classes, files or namespaces.
+# If set to NO (the default) these members will be included in the
+# various overviews, but no documentation section is generated.
+# This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_MEMBERS = NO
+
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all
+# undocumented classes that are normally visible in the class hierarchy.
+# If set to NO (the default) these class will be included in the various
+# overviews. This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_CLASSES = NO
+
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will
+# include brief member descriptions after the members that are listed in
+# the file and class documentation (similar to JavaDoc).
+# Set to NO to disable this.
+
+BRIEF_MEMBER_DESC = YES
+
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend
+# the brief description of a member or function before the detailed description.
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
+# brief descriptions will be completely suppressed.
+
+REPEAT_BRIEF = YES
+
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
+# Doxygen will generate a detailed section even if there is only a brief
+# description.
+
+ALWAYS_DETAILED_SEC = NO
+
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all inherited
+# members of a class in the documentation of that class as if those members were
+# ordinary class members. Constructors, destructors and assignment operators of
+# the base classes will not be shown.
+
+INLINE_INHERITED_MEMB = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full
+# path before files name in the file list and in the header files. If set
+# to NO the shortest path that makes the file name unique will be used.
+
+FULL_PATH_NAMES = YES
+
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
+# can be used to strip a user defined part of the path. Stripping is
+# only done if one of the specified strings matches the left-hand part of
+# the path. It is allowed to use relative paths in the argument list.
+
+STRIP_FROM_PATH = .
+
+# The INTERNAL_DOCS tag determines if documentation
+# that is typed after a \internal command is included. If the tag is set
+# to NO (the default) then the documentation will be excluded.
+# Set it to YES to include the internal documentation.
+
+INTERNAL_DOCS = YES
+
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct
+# doxygen to hide any special comment blocks from generated source code
+# fragments. Normal C and C++ comments will always remain visible.
+
+STRIP_CODE_COMMENTS = YES
+
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate
+# file names in lower case letters. If set to YES upper case letters are also
+# allowed. This is useful if you have classes or files whose names only differ
+# in case and if your file system supports case sensitive file names. Windows
+# users are adviced to set this option to NO.
+
+CASE_SENSE_NAMES = YES
+
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter
+# (but less readable) file names. This can be useful is your file systems
+# doesn't support long names like on DOS, Mac, or CD-ROM.
+
+SHORT_NAMES = NO
+
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen
+# will show members with their full class and namespace scopes in the
+# documentation. If set to YES the scope will be hidden.
+
+HIDE_SCOPE_NAMES = NO
+
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen
+# will generate a verbatim copy of the header file for each class for
+# which an include is specified. Set to NO to disable this.
+
+VERBATIM_HEADERS = YES
+
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen
+# will put list of the files that are included by a file in the documentation
+# of that file.
+
+SHOW_INCLUDE_FILES = YES
+
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen
+# will interpret the first line (until the first dot) of a JavaDoc-style
+# comment as the brief description. If set to NO, the JavaDoc
+# comments will behave just like the Qt-style comments (thus requiring an
+# explict @brief command for a brief description.
+
+JAVADOC_AUTOBRIEF = NO
+
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented
+# member inherits the documentation from any documented member that it
+# reimplements.
+
+INHERIT_DOCS = YES
+
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline]
+# is inserted in the documentation for inline members.
+
+INLINE_INFO = YES
+
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen
+# will sort the (detailed) documentation of file and class members
+# alphabetically by member name. If set to NO the members will appear in
+# declaration order.
+
+SORT_MEMBER_DOCS = YES
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
+# tag is set to YES, then doxygen will reuse the documentation of the first
+# member in the group (if any) for the other members of the group. By default
+# all members of a group must be documented explicitly.
+
+DISTRIBUTE_GROUP_DOC = NO
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab.
+# Doxygen uses this value to replace tabs by spaces in code fragments.
+
+TAB_SIZE = 8
+
+# The GENERATE_TODOLIST tag can be used to enable (YES) or
+# disable (NO) the todo list. This list is created by putting \todo
+# commands in the documentation.
+
+GENERATE_TODOLIST = YES
+
+# The GENERATE_TESTLIST tag can be used to enable (YES) or
+# disable (NO) the test list. This list is created by putting \test
+# commands in the documentation.
+
+GENERATE_TESTLIST = YES
+
+# The GENERATE_BUGLIST tag can be used to enable (YES) or
+# disable (NO) the bug list. This list is created by putting \bug
+# commands in the documentation.
+
+GENERATE_BUGLIST = YES
+
+# This tag can be used to specify a number of aliases that acts
+# as commands in the documentation. An alias has the form "name=value".
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to
+# put the command \sideeffect (or @sideeffect) in the documentation, which
+# will result in a user defined paragraph with heading "Side Effects:".
+# You can put \n's in the value part of an alias to insert newlines.
+
+ALIASES =
+
+# The ENABLED_SECTIONS tag can be used to enable conditional
+# documentation sections, marked by \if sectionname ... \endif.
+
+ENABLED_SECTIONS =
+
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines
+# the initial value of a variable or define consist of for it to appear in
+# the documentation. If the initializer consists of more lines than specified
+# here it will be hidden. Use a value of 0 to hide initializers completely.
+# The appearance of the initializer of individual variables and defines in the
+# documentation can be controlled using \showinitializer or \hideinitializer
+# command in the documentation regardless of this setting.
+
+MAX_INITIALIZER_LINES = 30
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources
+# only. Doxygen will then generate output that is more tailored for C.
+# For instance some of the names that are used will be different. The list
+# of all members will be omitted, etc.
+
+OPTIMIZE_OUTPUT_FOR_C = NO
+
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated
+# at the bottom of the documentation of classes and structs. If set to YES the
+# list will mention the files that were used to generate the documentation.
+
+SHOW_USED_FILES = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+
+# The QUIET tag can be used to turn on/off the messages that are generated
+# by doxygen. Possible values are YES and NO. If left blank NO is used.
+
+QUIET = NO
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are
+# generated by doxygen. Possible values are YES and NO. If left blank
+# NO is used.
+
+WARNINGS = YES
+
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will
+# automatically be disabled.
+
+WARN_IF_UNDOCUMENTED = YES
+
+# The WARN_FORMAT tag determines the format of the warning messages that
+# doxygen can produce. The string should contain the $file, $line, and $text
+# tags, which will be replaced by the file and line number from which the
+# warning originated and the warning text.
+
+WARN_FORMAT = "$file:$line: $text"
+
+# The WARN_LOGFILE tag can be used to specify a file to which warning
+# and error messages should be written. If left blank the output is written
+# to stderr.
+
+WARN_LOGFILE =
+
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+
+# The INPUT tag can be used to specify the files and/or directories that contain
+# documented source files. You may enter file names like "myfile.cpp" or
+# directories like "/usr/src/myproject". Separate the files or directories
+# with spaces.
+
+INPUT =
+
+# If the value of the INPUT tag contains directories, you can use the
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank the following patterns are tested:
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx *.hpp
+# *.h++ *.idl *.odl
+
+FILE_PATTERNS =
+
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories
+# should be searched for input files as well. Possible values are YES and NO.
+# If left blank NO is used.
+
+RECURSIVE = YES
+
+# The EXCLUDE tag can be used to specify files and/or directories that should
+# excluded from the INPUT source files. This way you can easily exclude a
+# subdirectory from a directory tree whose root is specified with the INPUT tag.
+
+EXCLUDE = test \
+ tools \
+ win32 \
+ lib \
+ examples \
+ docs \
+ CVS \
+ SCCS \
+ config \
+ bin \
+ include/ndbapi \
+ include/newtonapi \
+ src/newtonapi \
+ include/mgmapi \
+ src/mgmapi \
+ src/client
+
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or directories
+# that are symbolic links (a Unix filesystem feature) are excluded from the input.
+
+EXCLUDE_SYMLINKS = NO
+
+# If the value of the INPUT tag contains directories, you can use the
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
+# certain files from those directories.
+
+EXCLUDE_PATTERNS = *CVS* \
+ *SCCS*
+
+# The EXAMPLE_PATH tag can be used to specify one or more files or
+# directories that contain example code fragments that are included (see
+# the \include command).
+
+EXAMPLE_PATH =
+
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank all files are included.
+
+EXAMPLE_PATTERNS =
+
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
+# searched for input files to be used with the \include or \dontinclude
+# commands irrespective of the value of the RECURSIVE tag.
+# Possible values are YES and NO. If left blank NO is used.
+
+EXAMPLE_RECURSIVE = NO
+
+# The IMAGE_PATH tag can be used to specify one or more files or
+# directories that contain image that are included in the documentation (see
+# the \image command).
+
+IMAGE_PATH =
+
+# The INPUT_FILTER tag can be used to specify a program that doxygen should
+# invoke to filter for each input file. Doxygen will invoke the filter program
+# by executing (via popen()) the command , where
+# is the value of the INPUT_FILTER tag, and is the name of an
+# input file. Doxygen will then use the output that the filter program writes
+# to standard output.
+
+INPUT_FILTER =
+
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
+# INPUT_FILTER) will be used to filter the input files when producing source
+# files to browse.
+
+FILTER_SOURCE_FILES = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will
+# be generated. Documented entities will be cross-referenced with these sources.
+
+SOURCE_BROWSER = YES
+
+# Setting the INLINE_SOURCES tag to YES will include the body
+# of functions and classes directly in the documentation.
+
+INLINE_SOURCES = YES
+
+# If the REFERENCED_BY_RELATION tag is set to YES (the default)
+# then for each documented function all documented
+# functions referencing it will be listed.
+
+REFERENCED_BY_RELATION = YES
+
+# If the REFERENCES_RELATION tag is set to YES (the default)
+# then for each documented function all documented entities
+# called/used by that function will be listed.
+
+REFERENCES_RELATION = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index
+# of all compounds will be generated. Enable this if the project
+# contains a lot of classes, structs, unions or interfaces.
+
+ALPHABETICAL_INDEX = YES
+
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns
+# in which this list will be split (can be a number in the range [1..20])
+
+COLS_IN_ALPHA_INDEX = 5
+
+# In case all classes in a project start with a common prefix, all
+# classes will be put under the same header in the alphabetical index.
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that
+# should be ignored while generating the index headers.
+
+IGNORE_PREFIX =
+
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will
+# generate HTML output.
+
+GENERATE_HTML = YES
+
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `html' will be used as the default path.
+
+HTML_OUTPUT = ndb.html
+
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank
+# doxygen will generate files with .html extension.
+
+HTML_FILE_EXTENSION = .html
+
+# The HTML_HEADER tag can be used to specify a personal HTML header for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard header.
+
+HTML_HEADER =
+
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard footer.
+
+HTML_FOOTER =
+
+# The HTML_STYLESHEET tag can be used to specify a user defined cascading
+# style sheet that is used by each HTML page. It can be used to
+# fine-tune the look of the HTML output. If the tag is left blank doxygen
+# will generate a default style sheet
+
+HTML_STYLESHEET =
+
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes,
+# files or namespaces will be aligned in HTML using tables. If set to
+# NO a bullet list will be used.
+
+HTML_ALIGN_MEMBERS = YES
+
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files
+# will be generated that can be used as input for tools like the
+# Microsoft HTML help workshop to generate a compressed HTML help file (.chm)
+# of the generated HTML documentation.
+
+GENERATE_HTMLHELP = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag
+# controls if a separate .chi index file is generated (YES) or that
+# it should be included in the master .chm file (NO).
+
+GENERATE_CHI = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag
+# controls whether a binary table of contents is generated (YES) or a
+# normal table of contents (NO) in the .chm file.
+
+BINARY_TOC = NO
+
+# The TOC_EXPAND flag can be set to YES to add extra items for group members
+# to the contents of the Html help documentation and to the tree view.
+
+TOC_EXPAND = NO
+
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at
+# top of each HTML page. The value NO (the default) enables the index and
+# the value YES disables it.
+
+DISABLE_INDEX = NO
+
+# This tag can be used to set the number of enum values (range [1..20])
+# that doxygen will group on one line in the generated HTML documentation.
+
+ENUM_VALUES_PER_LINE = 4
+
+# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be
+# generated containing a tree-like index structure (just like the one that
+# is generated for HTML Help). For this to work a browser that supports
+# JavaScript and frames is required (for instance Mozilla, Netscape 4.0+,
+# or Internet explorer 4.0+). Note that for large projects the tree generation
+# can take a very long time. In such cases it is better to disable this feature.
+# Windows users are probably better off using the HTML help feature.
+
+GENERATE_TREEVIEW = NO
+
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be
+# used to set the initial width (in pixels) of the frame in which the tree
+# is shown.
+
+TREEVIEW_WIDTH = 250
+
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will
+# generate Latex output.
+
+GENERATE_LATEX = NO
+
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `latex' will be used as the default path.
+
+LATEX_OUTPUT = ndb.latex
+
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact
+# LaTeX documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_LATEX = NO
+
+# The PAPER_TYPE tag can be used to set the paper type that is used
+# by the printer. Possible values are: a4, a4wide, letter, legal and
+# executive. If left blank a4wide will be used.
+
+PAPER_TYPE = a4wide
+
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX
+# packages that should be included in the LaTeX output.
+
+EXTRA_PACKAGES =
+
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for
+# the generated latex document. The header should contain everything until
+# the first chapter. If it is left blank doxygen will generate a
+# standard header. Notice: only use this tag if you know what you are doing!
+
+LATEX_HEADER =
+
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will
+# contain links (just like the HTML output) instead of page references
+# This makes the output suitable for online browsing using a pdf viewer.
+
+PDF_HYPERLINKS = NO
+
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of
+# plain latex in the generated Makefile. Set this option to YES to get a
+# higher quality PDF documentation.
+
+USE_PDFLATEX = NO
+
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode.
+# command to the generated LaTeX files. This will instruct LaTeX to keep
+# running if errors occur, instead of asking the user for help.
+# This option is also used when generating formulas in HTML.
+
+LATEX_BATCHMODE = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output
+# The RTF output is optimised for Word 97 and may not look very pretty with
+# other RTF readers or editors.
+
+GENERATE_RTF = NO
+
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `rtf' will be used as the default path.
+
+RTF_OUTPUT = rtf
+
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact
+# RTF documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_RTF = NO
+
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated
+# will contain hyperlink fields. The RTF file will
+# contain links (just like the HTML output) instead of page references.
+# This makes the output suitable for online browsing using WORD or other
+# programs which support those fields.
+# Note: wordpad (write) and others do not support links.
+
+RTF_HYPERLINKS = NO
+
+# Load stylesheet definitions from file. Syntax is similar to doxygen's
+# config file, i.e. a series of assigments. You only have to provide
+# replacements, missing definitions are set to their default value.
+
+RTF_STYLESHEET_FILE =
+
+# Set optional variables used in the generation of an rtf document.
+# Syntax is similar to doxygen's config file.
+
+RTF_EXTENSIONS_FILE =
+
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will
+# generate man pages
+
+GENERATE_MAN = NO
+
+# The MAN_OUTPUT tag is used to specify where the man pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `man' will be used as the default path.
+
+MAN_OUTPUT = man
+
+# The MAN_EXTENSION tag determines the extension that is added to
+# the generated man pages (default is the subroutine's section .3)
+
+MAN_EXTENSION = .3
+
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output,
+# then it will generate one additional man file for each entity
+# documented in the real man page(s). These additional files
+# only source the real man page, but without them the man command
+# would be unable to find the correct page. The default is NO.
+
+MAN_LINKS = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_XML tag is set to YES Doxygen will
+# generate an XML file that captures the structure of
+# the code including all documentation. Note that this
+# feature is still experimental and incomplete at the
+# moment.
+
+GENERATE_XML = NO
+
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will
+# generate an AutoGen Definitions (see autogen.sf.net) file
+# that captures the structure of the code including all
+# documentation. Note that this feature is still experimental
+# and incomplete at the moment.
+
+GENERATE_AUTOGEN_DEF = NO
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor
+#---------------------------------------------------------------------------
+
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will
+# evaluate all C-preprocessor directives found in the sources and include
+# files.
+
+ENABLE_PREPROCESSING = YES
+
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro
+# names in the source code. If set to NO (the default) only conditional
+# compilation will be performed. Macro expansion can be done in a controlled
+# way by setting EXPAND_ONLY_PREDEF to YES.
+
+MACRO_EXPANSION = NO
+
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES
+# then the macro expansion is limited to the macros specified with the
+# PREDEFINED and EXPAND_AS_PREDEFINED tags.
+
+EXPAND_ONLY_PREDEF = NO
+
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files
+# in the INCLUDE_PATH (see below) will be search if a #include is found.
+
+SEARCH_INCLUDES = YES
+
+# The INCLUDE_PATH tag can be used to specify one or more directories that
+# contain include files that are not input files but should be processed by
+# the preprocessor.
+
+INCLUDE_PATH =
+
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
+# patterns (like *.h and *.hpp) to filter out the header-files in the
+# directories. If left blank, the patterns specified with FILE_PATTERNS will
+# be used.
+
+INCLUDE_FILE_PATTERNS =
+
+# The PREDEFINED tag can be used to specify one or more macro names that
+# are defined before the preprocessor is started (similar to the -D option of
+# gcc). The argument of the tag is a list of macros of the form: name
+# or name=definition (no spaces). If the definition and the = are
+# omitted =1 is assumed.
+
+PREDEFINED =
+
+# If the MACRO_EXPANSION and EXPAND_PREDEF_ONLY tags are set to YES then
+# this tag can be used to specify a list of macro names that should be expanded.
+# The macro definition that is found in the sources will be used.
+# Use the PREDEFINED tag if you want to use a different macro definition.
+
+EXPAND_AS_DEFINED =
+
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then
+# doxygen's preprocessor will remove all function-like macros that are alone
+# on a line and do not end with a semicolon. Such function macros are typically
+# used for boiler-plate code, and will confuse the parser if not removed.
+
+SKIP_FUNCTION_MACROS = YES
+
+#---------------------------------------------------------------------------
+# Configuration::addtions related to external references
+#---------------------------------------------------------------------------
+
+# The TAGFILES tag can be used to specify one or more tagfiles.
+
+TAGFILES =
+
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create
+# a tag file that is based on the input files it reads.
+
+GENERATE_TAGFILE =
+
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed
+# in the class index. If set to NO only the inherited external classes
+# will be listed.
+
+ALLEXTERNALS = NO
+
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed
+# in the modules index. If set to NO, only the current project's groups will
+# be listed.
+
+EXTERNAL_GROUPS = YES
+
+# The PERL_PATH should be the absolute path and name of the perl script
+# interpreter (i.e. the result of `which perl').
+
+PERL_PATH = /usr/bin/perl
+
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool
+#---------------------------------------------------------------------------
+
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will
+# generate a inheritance diagram (in Html, RTF and LaTeX) for classes with base or
+# super classes. Setting the tag to NO turns the diagrams off. Note that this
+# option is superceded by the HAVE_DOT option below. This is only a fallback. It is
+# recommended to install and use dot, since it yield more powerful graphs.
+
+CLASS_DIAGRAMS = YES
+
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
+# available from the path. This tool is part of Graphviz, a graph visualization
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section
+# have no effect if this option is set to NO (the default)
+
+HAVE_DOT = YES
+
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect inheritance relations. Setting this tag to YES will force the
+# the CLASS_DIAGRAMS tag to NO.
+
+CLASS_GRAPH = YES
+
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect implementation dependencies (inheritance, containment, and
+# class references variables) of the class with other documented classes.
+
+COLLABORATION_GRAPH = YES
+
+# If set to YES, the inheritance and collaboration graphs will show the
+# relations between templates and their instances.
+
+TEMPLATE_RELATIONS = YES
+
+# If set to YES, the inheritance and collaboration graphs will hide
+# inheritance and usage relations if the target is undocumented
+# or is not a class.
+
+HIDE_UNDOC_RELATIONS = NO
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT
+# tags are set to YES then doxygen will generate a graph for each documented
+# file showing the direct and indirect include dependencies of the file with
+# other documented files.
+
+INCLUDE_GRAPH = YES
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each
+# documented header file showing the documented files that directly or
+# indirectly include this file.
+
+INCLUDED_BY_GRAPH = YES
+
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen
+# will graphical hierarchy of all classes instead of a textual one.
+
+GRAPHICAL_HIERARCHY = YES
+
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
+# generated by dot. Possible values are gif, jpg, and png
+# If left blank gif will be used.
+
+DOT_IMAGE_FORMAT = gif
+
+# The tag DOT_PATH can be used to specify the path where the dot tool can be
+# found. If left blank, it is assumed the dot tool can be found on the path.
+
+DOT_PATH =
+
+# The DOTFILE_DIRS tag can be used to specify one or more directories that
+# contain dot files that are included in the documentation (see the
+# \dotfile command).
+
+DOTFILE_DIRS =
+
+# The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width
+# (in pixels) of the graphs generated by dot. If a graph becomes larger than
+# this value, doxygen will try to truncate the graph, so that it fits within
+# the specified constraint. Beware that most browsers cannot cope with very
+# large images.
+
+MAX_DOT_GRAPH_WIDTH = 1024
+
+# The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height
+# (in pixels) of the graphs generated by dot. If a graph becomes larger than
+# this value, doxygen will try to truncate the graph, so that it fits within
+# the specified constraint. Beware that most browsers cannot cope with very
+# large images.
+
+MAX_DOT_GRAPH_HEIGHT = 1024
+
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will
+# generate a legend page explaining the meaning of the various boxes and
+# arrows in the dot generated graphs.
+
+GENERATE_LEGEND = YES
+
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will
+# remove the intermedate dot files that are used to generate
+# the various graphs.
+
+DOT_CLEANUP = YES
+
+#---------------------------------------------------------------------------
+# Configuration::addtions related to the search engine
+#---------------------------------------------------------------------------
+
+# The SEARCHENGINE tag specifies whether or not a search engine should be
+# used. If set to NO the values of all tags below this one will be ignored.
+
+SEARCHENGINE = NO
+
+# The CGI_NAME tag should be the name of the CGI script that
+# starts the search engine (doxysearch) with the correct parameters.
+# A script with this name will be generated by doxygen.
+
+CGI_NAME = search.cgi
+
+# The CGI_URL tag should be the absolute URL to the directory where the
+# cgi binaries are located. See the documentation of your http daemon for
+# details.
+
+CGI_URL =
+
+# The DOC_URL tag should be the absolute URL to the directory where the
+# documentation is located. If left blank the absolute path to the
+# documentation, with file:// prepended to it, will be used.
+
+DOC_URL =
+
+# The DOC_ABSPATH tag should be the absolute path to the directory where the
+# documentation is located. If left blank the directory on the local machine
+# will be used.
+
+DOC_ABSPATH =
+
+# The BIN_ABSPATH tag must point to the directory where the doxysearch binary
+# is installed.
+
+BIN_ABSPATH = /usr/local/bin
+
+# The EXT_DOC_PATHS tag can be used to specify one or more paths to
+# documentation generated for other projects. This allows doxysearch to search
+# the documentation for these projects as well.
+
+EXT_DOC_PATHS =
diff --git a/ndb/docs/doxygen/Doxyfile.ndbapi b/ndb/docs/doxygen/Doxyfile.ndbapi
new file mode 100644
index 00000000000..61d58d4fea3
--- /dev/null
+++ b/ndb/docs/doxygen/Doxyfile.ndbapi
@@ -0,0 +1,877 @@
+# Doxyfile 1.2.12
+
+# This file describes the settings to be used by the documentation system
+# doxygen (www.doxygen.org) for a project
+#
+# All text after a hash (#) is considered a comment and will be ignored
+# The format is:
+# TAG = value [value, ...]
+# For lists items can also be appended using:
+# TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (" ")
+
+#---------------------------------------------------------------------------
+# General configuration options
+#---------------------------------------------------------------------------
+DETAILS_AT_TOP = yes
+HIDE_FRIEND_COMPOUNDS = yes
+
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded
+# by quotes) that should identify the project.
+
+PROJECT_NAME =
+
+# The PROJECT_NUMBER tag can be used to enter a project or revision number.
+# This could be handy for archiving the generated documentation or
+# if some version control system is used.
+
+PROJECT_NUMBER =
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
+# base path where the generated documentation will be put.
+# If a relative path is entered, it will be relative to the location
+# where doxygen was started. If left blank the current directory will be used.
+
+OUTPUT_DIRECTORY =
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all
+# documentation generated by doxygen is written. Doxygen will use this
+# information to generate all constant output in the proper language.
+# The default language is English, other supported languages are:
+# Brazilian, Chinese, Croatian, Czech, Danish, Dutch, Finnish, French,
+# German, Hungarian, Italian, Japanese, Korean, Norwegian, Polish,
+# Portuguese, Romanian, Russian, Slovak, Slovene, Spanish and Swedish.
+
+OUTPUT_LANGUAGE = English
+
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
+# documentation are documented, even if no documentation was available.
+# Private class members and static file members will be hidden unless
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
+
+EXTRACT_ALL = NO
+
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class
+# will be included in the documentation.
+
+EXTRACT_PRIVATE = NO
+
+# If the EXTRACT_STATIC tag is set to YES all static members of a file
+# will be included in the documentation.
+
+EXTRACT_STATIC = NO
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all
+# undocumented members of documented classes, files or namespaces.
+# If set to NO (the default) these members will be included in the
+# various overviews, but no documentation section is generated.
+# This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_MEMBERS = NO
+
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all
+# undocumented classes that are normally visible in the class hierarchy.
+# If set to NO (the default) these class will be included in the various
+# overviews. This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_CLASSES = NO
+
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will
+# include brief member descriptions after the members that are listed in
+# the file and class documentation (similar to JavaDoc).
+# Set to NO to disable this.
+
+BRIEF_MEMBER_DESC = YES
+
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend
+# the brief description of a member or function before the detailed description.
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
+# brief descriptions will be completely suppressed.
+
+REPEAT_BRIEF = YES
+
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
+# Doxygen will generate a detailed section even if there is only a brief
+# description.
+
+ALWAYS_DETAILED_SEC = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full
+# path before files name in the file list and in the header files. If set
+# to NO the shortest path that makes the file name unique will be used.
+
+FULL_PATH_NAMES = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
+# can be used to strip a user defined part of the path. Stripping is
+# only done if one of the specified strings matches the left-hand part of
+# the path. It is allowed to use relative paths in the argument list.
+
+STRIP_FROM_PATH =
+
+# The INTERNAL_DOCS tag determines if documentation
+# that is typed after a \internal command is included. If the tag is set
+# to NO (the default) then the documentation will be excluded.
+# Set it to YES to include the internal documentation.
+
+INTERNAL_DOCS = NO
+
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct
+# doxygen to hide any special comment blocks from generated source code
+# fragments. Normal C and C++ comments will always remain visible.
+
+STRIP_CODE_COMMENTS = YES
+
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate
+# file names in lower case letters. If set to YES upper case letters are also
+# allowed. This is useful if you have classes or files whose names only differ
+# in case and if your file system supports case sensitive file names. Windows
+# users are adviced to set this option to NO.
+
+CASE_SENSE_NAMES = YES
+
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter
+# (but less readable) file names. This can be useful is your file systems
+# doesn't support long names like on DOS, Mac, or CD-ROM.
+
+SHORT_NAMES = NO
+
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen
+# will show members with their full class and namespace scopes in the
+# documentation. If set to YES the scope will be hidden.
+
+HIDE_SCOPE_NAMES = NO
+
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen
+# will generate a verbatim copy of the header file for each class for
+# which an include is specified. Set to NO to disable this.
+
+VERBATIM_HEADERS = YES
+
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen
+# will put list of the files that are included by a file in the documentation
+# of that file.
+
+SHOW_INCLUDE_FILES = YES
+
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen
+# will interpret the first line (until the first dot) of a JavaDoc-style
+# comment as the brief description. If set to NO, the JavaDoc
+# comments will behave just like the Qt-style comments (thus requiring an
+# explict @brief command for a brief description.
+
+JAVADOC_AUTOBRIEF = NO
+
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented
+# member inherits the documentation from any documented member that it
+# reimplements.
+
+INHERIT_DOCS = YES
+
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline]
+# is inserted in the documentation for inline members.
+
+INLINE_INFO = YES
+
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen
+# will sort the (detailed) documentation of file and class members
+# alphabetically by member name. If set to NO the members will appear in
+# declaration order.
+
+SORT_MEMBER_DOCS = YES
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
+# tag is set to YES, then doxygen will reuse the documentation of the first
+# member in the group (if any) for the other members of the group. By default
+# all members of a group must be documented explicitly.
+
+DISTRIBUTE_GROUP_DOC = NO
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab.
+# Doxygen uses this value to replace tabs by spaces in code fragments.
+
+TAB_SIZE = 8
+
+# The GENERATE_TODOLIST tag can be used to enable (YES) or
+# disable (NO) the todo list. This list is created by putting \todo
+# commands in the documentation.
+
+GENERATE_TODOLIST = YES
+
+# The GENERATE_TESTLIST tag can be used to enable (YES) or
+# disable (NO) the test list. This list is created by putting \test
+# commands in the documentation.
+
+GENERATE_TESTLIST = YES
+
+# The GENERATE_BUGLIST tag can be used to enable (YES) or
+# disable (NO) the bug list. This list is created by putting \bug
+# commands in the documentation.
+
+GENERATE_BUGLIST = YES
+
+# This tag can be used to specify a number of aliases that acts
+# as commands in the documentation. An alias has the form "name=value".
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to
+# put the command \sideeffect (or @sideeffect) in the documentation, which
+# will result in a user defined paragraph with heading "Side Effects:".
+# You can put \n's in the value part of an alias to insert newlines.
+
+ALIASES =
+
+# The ENABLED_SECTIONS tag can be used to enable conditional
+# documentation sections, marked by \if sectionname ... \endif.
+
+ENABLED_SECTIONS =
+
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines
+# the initial value of a variable or define consist of for it to appear in
+# the documentation. If the initializer consists of more lines than specified
+# here it will be hidden. Use a value of 0 to hide initializers completely.
+# The appearance of the initializer of individual variables and defines in the
+# documentation can be controlled using \showinitializer or \hideinitializer
+# command in the documentation regardless of this setting.
+
+MAX_INITIALIZER_LINES = 30
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources
+# only. Doxygen will then generate output that is more tailored for C.
+# For instance some of the names that are used will be different. The list
+# of all members will be omitted, etc.
+
+OPTIMIZE_OUTPUT_FOR_C = NO
+
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated
+# at the bottom of the documentation of classes and structs. If set to YES the
+# list will mention the files that were used to generate the documentation.
+
+SHOW_USED_FILES = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+
+# The QUIET tag can be used to turn on/off the messages that are generated
+# by doxygen. Possible values are YES and NO. If left blank NO is used.
+
+QUIET = NO
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are
+# generated by doxygen. Possible values are YES and NO. If left blank
+# NO is used.
+
+WARNINGS = YES
+
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will
+# automatically be disabled.
+
+WARN_IF_UNDOCUMENTED = YES
+
+# The WARN_FORMAT tag determines the format of the warning messages that
+# doxygen can produce. The string should contain the $file, $line, and $text
+# tags, which will be replaced by the file and line number from which the
+# warning originated and the warning text.
+
+WARN_FORMAT =
+
+# The WARN_LOGFILE tag can be used to specify a file to which warning
+# and error messages should be written. If left blank the output is written
+# to stderr.
+
+WARN_LOGFILE =
+
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+
+# The INPUT tag can be used to specify the files and/or directories that contain
+# documented source files. You may enter file names like "myfile.cpp" or
+# directories like "/usr/src/myproject". Separate the files or directories
+# with spaces.
+
+INPUT = .
+
+# If the value of the INPUT tag contains directories, you can use the
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank file matching one of the following patterns are included:
+# *.c *.cc *.cxx *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx *.hpp
+# *.h++ *.idl
+
+FILE_PATTERNS =
+
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories
+# should be searched for input files as well. Possible values are YES and NO.
+# If left blank NO is used.
+
+RECURSIVE = NO
+
+# The EXCLUDE tag can be used to specify files and/or directories that should
+# excluded from the INPUT source files. This way you can easily exclude a
+# subdirectory from a directory tree whose root is specified with the INPUT tag.
+
+EXCLUDE =
+
+# If the value of the INPUT tag contains directories, you can use the
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
+# certain files from those directories.
+
+EXCLUDE_PATTERNS =
+
+# The EXAMPLE_PATH tag can be used to specify one or more files or
+# directories that contain example code fragments that are included (see
+# the \include command).
+
+EXAMPLE_PATH = .
+
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank all files are included.
+
+EXAMPLE_PATTERNS =
+
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
+# searched for input files to be used with the \include or \dontinclude
+# commands irrespective of the value of the RECURSIVE tag.
+# Possible values are YES and NO. If left blank NO is used.
+
+EXAMPLE_RECURSIVE = NO
+
+# The IMAGE_PATH tag can be used to specify one or more files or
+# directories that contain image that are included in the documentation (see
+# the \image command).
+
+IMAGE_PATH =
+
+# The INPUT_FILTER tag can be used to specify a program that doxygen should
+# invoke to filter for each input file. Doxygen will invoke the filter program
+# by executing (via popen()) the command , where
+# is the value of the INPUT_FILTER tag, and is the name of an
+# input file. Doxygen will then use the output that the filter program writes
+# to standard output.
+
+INPUT_FILTER =
+
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
+# INPUT_FILTER) will be used to filter the input files when producing source
+# files to browse.
+
+FILTER_SOURCE_FILES = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will
+# be generated. Documented entities will be cross-referenced with these sources.
+
+SOURCE_BROWSER = NO
+
+# Setting the INLINE_SOURCES tag to YES will include the body
+# of functions and classes directly in the documentation.
+
+INLINE_SOURCES = NO
+
+# If the REFERENCED_BY_RELATION tag is set to YES (the default)
+# then for each documented function all documented
+# functions referencing it will be listed.
+
+REFERENCED_BY_RELATION = YES
+
+# If the REFERENCES_RELATION tag is set to YES (the default)
+# then for each documented function all documented entities
+# called/used by that function will be listed.
+
+REFERENCES_RELATION = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index
+# of all compounds will be generated. Enable this if the project
+# contains a lot of classes, structs, unions or interfaces.
+
+ALPHABETICAL_INDEX = NO
+
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns
+# in which this list will be split (can be a number in the range [1..20])
+
+COLS_IN_ALPHA_INDEX = 5
+
+# In case all classes in a project start with a common prefix, all
+# classes will be put under the same header in the alphabetical index.
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that
+# should be ignored while generating the index headers.
+
+IGNORE_PREFIX =
+
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will
+# generate HTML output.
+
+GENERATE_HTML = YES
+
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `html' will be used as the default path.
+
+HTML_OUTPUT = ../.doxyout/ndbapi.html
+
+# The HTML_HEADER tag can be used to specify a personal HTML header for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard header.
+
+HTML_HEADER =
+
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard footer.
+
+HTML_FOOTER = footer.html
+
+# The HTML_STYLESHEET tag can be used to specify a user defined cascading
+# style sheet that is used by each HTML page. It can be used to
+# fine-tune the look of the HTML output. If the tag is left blank doxygen
+# will generate a default style sheet
+
+HTML_STYLESHEET =
+
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes,
+# files or namespaces will be aligned in HTML using tables. If set to
+# NO a bullet list will be used.
+
+HTML_ALIGN_MEMBERS = YES
+
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files
+# will be generated that can be used as input for tools like the
+# Microsoft HTML help workshop to generate a compressed HTML help file (.chm)
+# of the generated HTML documentation.
+
+GENERATE_HTMLHELP = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag
+# controls if a separate .chi index file is generated (YES) or that
+# it should be included in the master .chm file (NO).
+
+GENERATE_CHI = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag
+# controls whether a binary table of contents is generated (YES) or a
+# normal table of contents (NO) in the .chm file.
+
+BINARY_TOC = NO
+
+# The TOC_EXPAND flag can be set to YES to add extra items for group members
+# to the contents of the Html help documentation and to the tree view.
+
+TOC_EXPAND = NO
+
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at
+# top of each HTML page. The value NO (the default) enables the index and
+# the value YES disables it.
+
+DISABLE_INDEX = NO
+
+# This tag can be used to set the number of enum values (range [1..20])
+# that doxygen will group on one line in the generated HTML documentation.
+
+ENUM_VALUES_PER_LINE = 4
+
+# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be
+# generated containing a tree-like index structure (just like the one that
+# is generated for HTML Help). For this to work a browser that supports
+# JavaScript and frames is required (for instance Mozilla, Netscape 4.0+,
+# or Internet explorer 4.0+). Note that for large projects the tree generation
+# can take a very long time. In such cases it is better to disable this feature.
+# Windows users are probably better off using the HTML help feature.
+
+GENERATE_TREEVIEW = NO
+
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be
+# used to set the initial width (in pixels) of the frame in which the tree
+# is shown.
+
+TREEVIEW_WIDTH = 250
+
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will
+# generate Latex output.
+
+GENERATE_LATEX = YES
+
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `latex' will be used as the default path.
+
+LATEX_OUTPUT = ../.doxyout/ndbapi.latex
+
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact
+# LaTeX documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_LATEX = NO
+
+# The PAPER_TYPE tag can be used to set the paper type that is used
+# by the printer. Possible values are: a4, a4wide, letter, legal and
+# executive. If left blank a4wide will be used.
+
+PAPER_TYPE =
+
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX
+# packages that should be included in the LaTeX output.
+
+EXTRA_PACKAGES =
+
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for
+# the generated latex document. The header should contain everything until
+# the first chapter. If it is left blank doxygen will generate a
+# standard header. Notice: only use this tag if you know what you are doing!
+
+LATEX_HEADER = ../doxygen/header.ndbapi.tex
+
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will
+# contain links (just like the HTML output) instead of page references
+# This makes the output suitable for online browsing using a pdf viewer.
+
+PDF_HYPERLINKS = YES
+
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of
+# plain latex in the generated Makefile. Set this option to YES to get a
+# higher quality PDF documentation.
+
+USE_PDFLATEX = YES
+
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode.
+# command to the generated LaTeX files. This will instruct LaTeX to keep
+# running if errors occur, instead of asking the user for help.
+# This option is also used when generating formulas in HTML.
+
+LATEX_BATCHMODE = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output
+# The RTF output is optimised for Word 97 and may not look very pretty with
+# other RTF readers or editors.
+
+GENERATE_RTF = NO
+
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `rtf' will be used as the default path.
+
+RTF_OUTPUT = ../ndbapi.rtf
+
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact
+# RTF documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_RTF = NO
+
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated
+# will contain hyperlink fields. The RTF file will
+# contain links (just like the HTML output) instead of page references.
+# This makes the output suitable for online browsing using WORD or other
+# programs which support those fields.
+# Note: wordpad (write) and others do not support links.
+
+RTF_HYPERLINKS = NO
+
+# Load stylesheet definitions from file. Syntax is similar to doxygen's
+# config file, i.e. a series of assigments. You only have to provide
+# replacements, missing definitions are set to their default value.
+
+RTF_STYLESHEET_FILE =
+
+# Set optional variables used in the generation of an rtf document.
+# Syntax is similar to doxygen's config file.
+
+RTF_EXTENSIONS_FILE =
+
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will
+# generate man pages
+
+GENERATE_MAN = NO
+
+# The MAN_OUTPUT tag is used to specify where the man pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `man' will be used as the default path.
+
+MAN_OUTPUT =
+
+# The MAN_EXTENSION tag determines the extension that is added to
+# the generated man pages (default is the subroutine's section .3)
+
+MAN_EXTENSION =
+
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output,
+# then it will generate one additional man file for each entity
+# documented in the real man page(s). These additional files
+# only source the real man page, but without them the man command
+# would be unable to find the correct page. The default is NO.
+
+MAN_LINKS = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_XML tag is set to YES Doxygen will
+# generate an XML file that captures the structure of
+# the code including all documentation. Note that this
+# feature is still experimental and incomplete at the
+# moment.
+
+GENERATE_XML = NO
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor
+#---------------------------------------------------------------------------
+
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will
+# evaluate all C-preprocessor directives found in the sources and include
+# files.
+
+ENABLE_PREPROCESSING = YES
+
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro
+# names in the source code. If set to NO (the default) only conditional
+# compilation will be performed. Macro expansion can be done in a controlled
+# way by setting EXPAND_ONLY_PREDEF to YES.
+
+MACRO_EXPANSION = YES
+
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES
+# then the macro expansion is limited to the macros specified with the
+# PREDEFINED and EXPAND_AS_PREDEFINED tags.
+
+EXPAND_ONLY_PREDEF = YES
+
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files
+# in the INCLUDE_PATH (see below) will be search if a #include is found.
+
+SEARCH_INCLUDES = YES
+
+# The INCLUDE_PATH tag can be used to specify one or more directories that
+# contain include files that are not input files but should be processed by
+# the preprocessor.
+
+INCLUDE_PATH =
+
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
+# patterns (like *.h and *.hpp) to filter out the header-files in the
+# directories. If left blank, the patterns specified with FILE_PATTERNS will
+# be used.
+
+INCLUDE_FILE_PATTERNS =
+
+# The PREDEFINED tag can be used to specify one or more macro names that
+# are defined before the preprocessor is started (similar to the -D option of
+# gcc). The argument of the tag is a list of macros of the form: name
+# or name=definition (no spaces). If the definition and the = are
+# omitted =1 is assumed.
+
+PREDEFINED = DOXYGEN_SHOULD_SKIP_DEPRECATED \
+ DOXYGEN_SHOULD_SKIP_INTERNAL \
+ protected=private
+
+# If the MACRO_EXPANSION and EXPAND_PREDEF_ONLY tags are set to YES then
+# this tag can be used to specify a list of macro names that should be expanded.
+# The macro definition that is found in the sources will be used.
+# Use the PREDEFINED tag if you want to use a different macro definition.
+
+EXPAND_AS_DEFINED =
+
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then
+# doxygen's preprocessor will remove all function-like macros that are alone
+# on a line and do not end with a semicolon. Such function macros are typically
+# used for boiler-plate code, and will confuse the parser if not removed.
+
+SKIP_FUNCTION_MACROS = YES
+
+#---------------------------------------------------------------------------
+# Configuration::addtions related to external references
+#---------------------------------------------------------------------------
+
+# The TAGFILES tag can be used to specify one or more tagfiles.
+
+TAGFILES =
+
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create
+# a tag file that is based on the input files it reads.
+
+GENERATE_TAGFILE =
+
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed
+# in the class index. If set to NO only the inherited external classes
+# will be listed.
+
+ALLEXTERNALS = NO
+
+# The PERL_PATH should be the absolute path and name of the perl script
+# interpreter (i.e. the result of `which perl').
+
+PERL_PATH =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool
+#---------------------------------------------------------------------------
+
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will
+# generate a inheritance diagram (in Html, RTF and LaTeX) for classes with base or
+# super classes. Setting the tag to NO turns the diagrams off. Note that this
+# option is superceded by the HAVE_DOT option below. This is only a fallback. It is
+# recommended to install and use dot, since it yield more powerful graphs.
+
+CLASS_DIAGRAMS = YES
+
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
+# available from the path. This tool is part of Graphviz, a graph visualization
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section
+# have no effect if this option is set to NO (the default)
+
+HAVE_DOT = NO
+
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect inheritance relations. Setting this tag to YES will force the
+# the CLASS_DIAGRAMS tag to NO.
+
+CLASS_GRAPH = YES
+
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect implementation dependencies (inheritance, containment, and
+# class references variables) of the class with other documented classes.
+
+COLLABORATION_GRAPH = YES
+
+# If set to YES, the inheritance and collaboration graphs will show the
+# relations between templates and their instances.
+
+TEMPLATE_RELATIONS = YES
+
+# If set to YES, the inheritance and collaboration graphs will hide
+# inheritance and usage relations if the target is undocumented
+# or is not a class.
+
+HIDE_UNDOC_RELATIONS = YES
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT
+# tags are set to YES then doxygen will generate a graph for each documented
+# file showing the direct and indirect include dependencies of the file with
+# other documented files.
+
+INCLUDE_GRAPH = YES
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each
+# documented header file showing the documented files that directly or
+# indirectly include this file.
+
+INCLUDED_BY_GRAPH = YES
+
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen
+# will graphical hierarchy of all classes instead of a textual one.
+
+GRAPHICAL_HIERARCHY = YES
+
+# The tag DOT_PATH can be used to specify the path where the dot tool can be
+# found. If left blank, it is assumed the dot tool can be found on the path.
+
+DOT_PATH =
+
+# The DOTFILE_DIRS tag can be used to specify one or more directories that
+# contain dot files that are included in the documentation (see the
+# \dotfile command).
+
+DOTFILE_DIRS =
+
+# The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width
+# (in pixels) of the graphs generated by dot. If a graph becomes larger than
+# this value, doxygen will try to truncate the graph, so that it fits within
+# the specified constraint. Beware that most browsers cannot cope with very
+# large images.
+
+MAX_DOT_GRAPH_WIDTH = 1024
+
+# The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height
+# (in pixels) of the graphs generated by dot. If a graph becomes larger than
+# this value, doxygen will try to truncate the graph, so that it fits within
+# the specified constraint. Beware that most browsers cannot cope with very
+# large images.
+
+MAX_DOT_GRAPH_HEIGHT = 1024
+
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will
+# generate a legend page explaining the meaning of the various boxes and
+# arrows in the dot generated graphs.
+
+GENERATE_LEGEND = YES
+
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will
+# remove the intermedate dot files that are used to generate
+# the various graphs.
+
+DOT_CLEANUP = YES
+
+#---------------------------------------------------------------------------
+# Configuration::addtions related to the search engine
+#---------------------------------------------------------------------------
+
+# The SEARCHENGINE tag specifies whether or not a search engine should be
+# used. If set to NO the values of all tags below this one will be ignored.
+
+SEARCHENGINE = NO
+
+# The CGI_NAME tag should be the name of the CGI script that
+# starts the search engine (doxysearch) with the correct parameters.
+# A script with this name will be generated by doxygen.
+
+CGI_NAME =
+
+# The CGI_URL tag should be the absolute URL to the directory where the
+# cgi binaries are located. See the documentation of your http daemon for
+# details.
+
+CGI_URL =
+
+# The DOC_URL tag should be the absolute URL to the directory where the
+# documentation is located. If left blank the absolute path to the
+# documentation, with file:// prepended to it, will be used.
+
+DOC_URL =
+
+# The DOC_ABSPATH tag should be the absolute path to the directory where the
+# documentation is located. If left blank the directory on the local machine
+# will be used.
+
+DOC_ABSPATH =
+
+# The BIN_ABSPATH tag must point to the directory where the doxysearch binary
+# is installed.
+
+BIN_ABSPATH =
+
+# The EXT_DOC_PATHS tag can be used to specify one or more paths to
+# documentation generated for other projects. This allows doxysearch to search
+# the documentation for these projects as well.
+
+EXT_DOC_PATHS =
diff --git a/ndb/docs/doxygen/Doxyfile.odbc b/ndb/docs/doxygen/Doxyfile.odbc
new file mode 100644
index 00000000000..93e052d5b9d
--- /dev/null
+++ b/ndb/docs/doxygen/Doxyfile.odbc
@@ -0,0 +1,921 @@
+# Doxyfile 1.2.14
+
+# This file describes the settings to be used by the documentation system
+# doxygen (www.doxygen.org) for a project
+#
+# All text after a hash (#) is considered a comment and will be ignored
+# The format is:
+# TAG = value [value, ...]
+# For lists items can also be appended using:
+# TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (" ")
+
+#---------------------------------------------------------------------------
+# General configuration options
+#---------------------------------------------------------------------------
+
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded
+# by quotes) that should identify the project.
+
+PROJECT_NAME = "NDB ODBC"
+
+# The PROJECT_NUMBER tag can be used to enter a project or revision number.
+# This could be handy for archiving the generated documentation or
+# if some version control system is used.
+
+PROJECT_NUMBER =
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
+# base path where the generated documentation will be put.
+# If a relative path is entered, it will be relative to the location
+# where doxygen was started. If left blank the current directory will be used.
+
+OUTPUT_DIRECTORY =
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all
+# documentation generated by doxygen is written. Doxygen will use this
+# information to generate all constant output in the proper language.
+# The default language is English, other supported languages are:
+# Brazilian, Chinese, Croatian, Czech, Danish, Dutch, Finnish, French,
+# German, Greek, Hungarian, Italian, Japanese, Korean, Norwegian, Polish,
+# Portuguese, Romanian, Russian, Slovak, Slovene, Spanish and Swedish.
+
+OUTPUT_LANGUAGE = English
+
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
+# documentation are documented, even if no documentation was available.
+# Private class members and static file members will be hidden unless
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
+
+EXTRACT_ALL = YES
+
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class
+# will be included in the documentation.
+
+EXTRACT_PRIVATE = YES
+
+# If the EXTRACT_STATIC tag is set to YES all static members of a file
+# will be included in the documentation.
+
+EXTRACT_STATIC = YES
+
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs)
+# defined locally in source files will be included in the documentation.
+# If set to NO only classes defined in header files are included.
+
+EXTRACT_LOCAL_CLASSES = YES
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all
+# undocumented members of documented classes, files or namespaces.
+# If set to NO (the default) these members will be included in the
+# various overviews, but no documentation section is generated.
+# This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_MEMBERS = NO
+
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all
+# undocumented classes that are normally visible in the class hierarchy.
+# If set to NO (the default) these class will be included in the various
+# overviews. This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_CLASSES = NO
+
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will
+# include brief member descriptions after the members that are listed in
+# the file and class documentation (similar to JavaDoc).
+# Set to NO to disable this.
+
+BRIEF_MEMBER_DESC = YES
+
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend
+# the brief description of a member or function before the detailed description.
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
+# brief descriptions will be completely suppressed.
+
+REPEAT_BRIEF = YES
+
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
+# Doxygen will generate a detailed section even if there is only a brief
+# description.
+
+ALWAYS_DETAILED_SEC = NO
+
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all inherited
+# members of a class in the documentation of that class as if those members were
+# ordinary class members. Constructors, destructors and assignment operators of
+# the base classes will not be shown.
+
+INLINE_INHERITED_MEMB = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full
+# path before files name in the file list and in the header files. If set
+# to NO the shortest path that makes the file name unique will be used.
+
+FULL_PATH_NAMES = YES
+
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
+# can be used to strip a user defined part of the path. Stripping is
+# only done if one of the specified strings matches the left-hand part of
+# the path. It is allowed to use relative paths in the argument list.
+
+STRIP_FROM_PATH = .
+
+# The INTERNAL_DOCS tag determines if documentation
+# that is typed after a \internal command is included. If the tag is set
+# to NO (the default) then the documentation will be excluded.
+# Set it to YES to include the internal documentation.
+
+INTERNAL_DOCS = YES
+
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct
+# doxygen to hide any special comment blocks from generated source code
+# fragments. Normal C and C++ comments will always remain visible.
+
+STRIP_CODE_COMMENTS = YES
+
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate
+# file names in lower case letters. If set to YES upper case letters are also
+# allowed. This is useful if you have classes or files whose names only differ
+# in case and if your file system supports case sensitive file names. Windows
+# users are adviced to set this option to NO.
+
+CASE_SENSE_NAMES = YES
+
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter
+# (but less readable) file names. This can be useful is your file systems
+# doesn't support long names like on DOS, Mac, or CD-ROM.
+
+SHORT_NAMES = NO
+
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen
+# will show members with their full class and namespace scopes in the
+# documentation. If set to YES the scope will be hidden.
+
+HIDE_SCOPE_NAMES = NO
+
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen
+# will generate a verbatim copy of the header file for each class for
+# which an include is specified. Set to NO to disable this.
+
+VERBATIM_HEADERS = YES
+
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen
+# will put list of the files that are included by a file in the documentation
+# of that file.
+
+SHOW_INCLUDE_FILES = YES
+
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen
+# will interpret the first line (until the first dot) of a JavaDoc-style
+# comment as the brief description. If set to NO, the JavaDoc
+# comments will behave just like the Qt-style comments (thus requiring an
+# explict @brief command for a brief description.
+
+JAVADOC_AUTOBRIEF = NO
+
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented
+# member inherits the documentation from any documented member that it
+# reimplements.
+
+INHERIT_DOCS = YES
+
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline]
+# is inserted in the documentation for inline members.
+
+INLINE_INFO = YES
+
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen
+# will sort the (detailed) documentation of file and class members
+# alphabetically by member name. If set to NO the members will appear in
+# declaration order.
+
+SORT_MEMBER_DOCS = YES
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
+# tag is set to YES, then doxygen will reuse the documentation of the first
+# member in the group (if any) for the other members of the group. By default
+# all members of a group must be documented explicitly.
+
+DISTRIBUTE_GROUP_DOC = NO
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab.
+# Doxygen uses this value to replace tabs by spaces in code fragments.
+
+TAB_SIZE = 8
+
+# The GENERATE_TODOLIST tag can be used to enable (YES) or
+# disable (NO) the todo list. This list is created by putting \todo
+# commands in the documentation.
+
+GENERATE_TODOLIST = YES
+
+# The GENERATE_TESTLIST tag can be used to enable (YES) or
+# disable (NO) the test list. This list is created by putting \test
+# commands in the documentation.
+
+GENERATE_TESTLIST = YES
+
+# The GENERATE_BUGLIST tag can be used to enable (YES) or
+# disable (NO) the bug list. This list is created by putting \bug
+# commands in the documentation.
+
+GENERATE_BUGLIST = YES
+
+# This tag can be used to specify a number of aliases that acts
+# as commands in the documentation. An alias has the form "name=value".
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to
+# put the command \sideeffect (or @sideeffect) in the documentation, which
+# will result in a user defined paragraph with heading "Side Effects:".
+# You can put \n's in the value part of an alias to insert newlines.
+
+ALIASES =
+
+# The ENABLED_SECTIONS tag can be used to enable conditional
+# documentation sections, marked by \if sectionname ... \endif.
+
+ENABLED_SECTIONS =
+
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines
+# the initial value of a variable or define consist of for it to appear in
+# the documentation. If the initializer consists of more lines than specified
+# here it will be hidden. Use a value of 0 to hide initializers completely.
+# The appearance of the initializer of individual variables and defines in the
+# documentation can be controlled using \showinitializer or \hideinitializer
+# command in the documentation regardless of this setting.
+
+MAX_INITIALIZER_LINES = 30
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources
+# only. Doxygen will then generate output that is more tailored for C.
+# For instance some of the names that are used will be different. The list
+# of all members will be omitted, etc.
+
+OPTIMIZE_OUTPUT_FOR_C = NO
+
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated
+# at the bottom of the documentation of classes and structs. If set to YES the
+# list will mention the files that were used to generate the documentation.
+
+SHOW_USED_FILES = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+
+# The QUIET tag can be used to turn on/off the messages that are generated
+# by doxygen. Possible values are YES and NO. If left blank NO is used.
+
+QUIET = NO
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are
+# generated by doxygen. Possible values are YES and NO. If left blank
+# NO is used.
+
+WARNINGS = YES
+
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will
+# automatically be disabled.
+
+WARN_IF_UNDOCUMENTED = YES
+
+# The WARN_FORMAT tag determines the format of the warning messages that
+# doxygen can produce. The string should contain the $file, $line, and $text
+# tags, which will be replaced by the file and line number from which the
+# warning originated and the warning text.
+
+WARN_FORMAT = "$file:$line: $text"
+
+# The WARN_LOGFILE tag can be used to specify a file to which warning
+# and error messages should be written. If left blank the output is written
+# to stderr.
+
+WARN_LOGFILE =
+
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+
+# The INPUT tag can be used to specify the files and/or directories that contain
+# documented source files. You may enter file names like "myfile.cpp" or
+# directories like "/usr/src/myproject". Separate the files or directories
+# with spaces.
+
+INPUT = src/client/odbc
+
+# If the value of the INPUT tag contains directories, you can use the
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank the following patterns are tested:
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx *.hpp
+# *.h++ *.idl *.odl
+
+FILE_PATTERNS =
+
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories
+# should be searched for input files as well. Possible values are YES and NO.
+# If left blank NO is used.
+
+RECURSIVE = YES
+
+# The EXCLUDE tag can be used to specify files and/or directories that should
+# excluded from the INPUT source files. This way you can easily exclude a
+# subdirectory from a directory tree whose root is specified with the INPUT tag.
+
+EXCLUDE =
+
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or directories
+# that are symbolic links (a Unix filesystem feature) are excluded from the input.
+
+EXCLUDE_SYMLINKS = NO
+
+# If the value of the INPUT tag contains directories, you can use the
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
+# certain files from those directories.
+
+EXCLUDE_PATTERNS =
+
+# The EXAMPLE_PATH tag can be used to specify one or more files or
+# directories that contain example code fragments that are included (see
+# the \include command).
+
+EXAMPLE_PATH =
+
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank all files are included.
+
+EXAMPLE_PATTERNS =
+
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
+# searched for input files to be used with the \include or \dontinclude
+# commands irrespective of the value of the RECURSIVE tag.
+# Possible values are YES and NO. If left blank NO is used.
+
+EXAMPLE_RECURSIVE = NO
+
+# The IMAGE_PATH tag can be used to specify one or more files or
+# directories that contain image that are included in the documentation (see
+# the \image command).
+
+IMAGE_PATH =
+
+# The INPUT_FILTER tag can be used to specify a program that doxygen should
+# invoke to filter for each input file. Doxygen will invoke the filter program
+# by executing (via popen()) the command , where
+# is the value of the INPUT_FILTER tag, and is the name of an
+# input file. Doxygen will then use the output that the filter program writes
+# to standard output.
+
+INPUT_FILTER =
+
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
+# INPUT_FILTER) will be used to filter the input files when producing source
+# files to browse.
+
+FILTER_SOURCE_FILES = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will
+# be generated. Documented entities will be cross-referenced with these sources.
+
+SOURCE_BROWSER = YES
+
+# Setting the INLINE_SOURCES tag to YES will include the body
+# of functions and classes directly in the documentation.
+
+INLINE_SOURCES = YES
+
+# If the REFERENCED_BY_RELATION tag is set to YES (the default)
+# then for each documented function all documented
+# functions referencing it will be listed.
+
+REFERENCED_BY_RELATION = YES
+
+# If the REFERENCES_RELATION tag is set to YES (the default)
+# then for each documented function all documented entities
+# called/used by that function will be listed.
+
+REFERENCES_RELATION = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index
+# of all compounds will be generated. Enable this if the project
+# contains a lot of classes, structs, unions or interfaces.
+
+ALPHABETICAL_INDEX = YES
+
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns
+# in which this list will be split (can be a number in the range [1..20])
+
+COLS_IN_ALPHA_INDEX = 5
+
+# In case all classes in a project start with a common prefix, all
+# classes will be put under the same header in the alphabetical index.
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that
+# should be ignored while generating the index headers.
+
+IGNORE_PREFIX =
+
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will
+# generate HTML output.
+
+GENERATE_HTML = YES
+
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `html' will be used as the default path.
+
+HTML_OUTPUT = ../.doxyout/odbc.html
+
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank
+# doxygen will generate files with .html extension.
+
+HTML_FILE_EXTENSION = .html
+
+# The HTML_HEADER tag can be used to specify a personal HTML header for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard header.
+
+HTML_HEADER =
+
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard footer.
+
+HTML_FOOTER =
+
+# The HTML_STYLESHEET tag can be used to specify a user defined cascading
+# style sheet that is used by each HTML page. It can be used to
+# fine-tune the look of the HTML output. If the tag is left blank doxygen
+# will generate a default style sheet
+
+HTML_STYLESHEET =
+
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes,
+# files or namespaces will be aligned in HTML using tables. If set to
+# NO a bullet list will be used.
+
+HTML_ALIGN_MEMBERS = YES
+
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files
+# will be generated that can be used as input for tools like the
+# Microsoft HTML help workshop to generate a compressed HTML help file (.chm)
+# of the generated HTML documentation.
+
+GENERATE_HTMLHELP = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag
+# controls if a separate .chi index file is generated (YES) or that
+# it should be included in the master .chm file (NO).
+
+GENERATE_CHI = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag
+# controls whether a binary table of contents is generated (YES) or a
+# normal table of contents (NO) in the .chm file.
+
+BINARY_TOC = NO
+
+# The TOC_EXPAND flag can be set to YES to add extra items for group members
+# to the contents of the Html help documentation and to the tree view.
+
+TOC_EXPAND = NO
+
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at
+# top of each HTML page. The value NO (the default) enables the index and
+# the value YES disables it.
+
+DISABLE_INDEX = NO
+
+# This tag can be used to set the number of enum values (range [1..20])
+# that doxygen will group on one line in the generated HTML documentation.
+
+ENUM_VALUES_PER_LINE = 4
+
+# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be
+# generated containing a tree-like index structure (just like the one that
+# is generated for HTML Help). For this to work a browser that supports
+# JavaScript and frames is required (for instance Mozilla, Netscape 4.0+,
+# or Internet explorer 4.0+). Note that for large projects the tree generation
+# can take a very long time. In such cases it is better to disable this feature.
+# Windows users are probably better off using the HTML help feature.
+
+GENERATE_TREEVIEW = NO
+
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be
+# used to set the initial width (in pixels) of the frame in which the tree
+# is shown.
+
+TREEVIEW_WIDTH = 250
+
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will
+# generate Latex output.
+
+GENERATE_LATEX = NO
+
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `latex' will be used as the default path.
+
+LATEX_OUTPUT = ../.doxyout/odbc.latex
+
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact
+# LaTeX documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_LATEX = NO
+
+# The PAPER_TYPE tag can be used to set the paper type that is used
+# by the printer. Possible values are: a4, a4wide, letter, legal and
+# executive. If left blank a4wide will be used.
+
+PAPER_TYPE = a4wide
+
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX
+# packages that should be included in the LaTeX output.
+
+EXTRA_PACKAGES =
+
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for
+# the generated latex document. The header should contain everything until
+# the first chapter. If it is left blank doxygen will generate a
+# standard header. Notice: only use this tag if you know what you are doing!
+
+LATEX_HEADER =
+
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will
+# contain links (just like the HTML output) instead of page references
+# This makes the output suitable for online browsing using a pdf viewer.
+
+PDF_HYPERLINKS = NO
+
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of
+# plain latex in the generated Makefile. Set this option to YES to get a
+# higher quality PDF documentation.
+
+USE_PDFLATEX = NO
+
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode.
+# command to the generated LaTeX files. This will instruct LaTeX to keep
+# running if errors occur, instead of asking the user for help.
+# This option is also used when generating formulas in HTML.
+
+LATEX_BATCHMODE = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output
+# The RTF output is optimised for Word 97 and may not look very pretty with
+# other RTF readers or editors.
+
+GENERATE_RTF = NO
+
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `rtf' will be used as the default path.
+
+RTF_OUTPUT = rtf
+
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact
+# RTF documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_RTF = NO
+
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated
+# will contain hyperlink fields. The RTF file will
+# contain links (just like the HTML output) instead of page references.
+# This makes the output suitable for online browsing using WORD or other
+# programs which support those fields.
+# Note: wordpad (write) and others do not support links.
+
+RTF_HYPERLINKS = NO
+
+# Load stylesheet definitions from file. Syntax is similar to doxygen's
+# config file, i.e. a series of assigments. You only have to provide
+# replacements, missing definitions are set to their default value.
+
+RTF_STYLESHEET_FILE =
+
+# Set optional variables used in the generation of an rtf document.
+# Syntax is similar to doxygen's config file.
+
+RTF_EXTENSIONS_FILE =
+
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will
+# generate man pages
+
+GENERATE_MAN = NO
+
+# The MAN_OUTPUT tag is used to specify where the man pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `man' will be used as the default path.
+
+MAN_OUTPUT = man
+
+# The MAN_EXTENSION tag determines the extension that is added to
+# the generated man pages (default is the subroutine's section .3)
+
+MAN_EXTENSION = .3
+
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output,
+# then it will generate one additional man file for each entity
+# documented in the real man page(s). These additional files
+# only source the real man page, but without them the man command
+# would be unable to find the correct page. The default is NO.
+
+MAN_LINKS = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_XML tag is set to YES Doxygen will
+# generate an XML file that captures the structure of
+# the code including all documentation. Note that this
+# feature is still experimental and incomplete at the
+# moment.
+
+GENERATE_XML = NO
+
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will
+# generate an AutoGen Definitions (see autogen.sf.net) file
+# that captures the structure of the code including all
+# documentation. Note that this feature is still experimental
+# and incomplete at the moment.
+
+GENERATE_AUTOGEN_DEF = NO
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor
+#---------------------------------------------------------------------------
+
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will
+# evaluate all C-preprocessor directives found in the sources and include
+# files.
+
+ENABLE_PREPROCESSING = YES
+
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro
+# names in the source code. If set to NO (the default) only conditional
+# compilation will be performed. Macro expansion can be done in a controlled
+# way by setting EXPAND_ONLY_PREDEF to YES.
+
+MACRO_EXPANSION = NO
+
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES
+# then the macro expansion is limited to the macros specified with the
+# PREDEFINED and EXPAND_AS_PREDEFINED tags.
+
+EXPAND_ONLY_PREDEF = NO
+
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files
+# in the INCLUDE_PATH (see below) will be search if a #include is found.
+
+SEARCH_INCLUDES = YES
+
+# The INCLUDE_PATH tag can be used to specify one or more directories that
+# contain include files that are not input files but should be processed by
+# the preprocessor.
+
+INCLUDE_PATH =
+
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
+# patterns (like *.h and *.hpp) to filter out the header-files in the
+# directories. If left blank, the patterns specified with FILE_PATTERNS will
+# be used.
+
+INCLUDE_FILE_PATTERNS =
+
+# The PREDEFINED tag can be used to specify one or more macro names that
+# are defined before the preprocessor is started (similar to the -D option of
+# gcc). The argument of the tag is a list of macros of the form: name
+# or name=definition (no spaces). If the definition and the = are
+# omitted =1 is assumed.
+
+PREDEFINED =
+
+# If the MACRO_EXPANSION and EXPAND_PREDEF_ONLY tags are set to YES then
+# this tag can be used to specify a list of macro names that should be expanded.
+# The macro definition that is found in the sources will be used.
+# Use the PREDEFINED tag if you want to use a different macro definition.
+
+EXPAND_AS_DEFINED =
+
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then
+# doxygen's preprocessor will remove all function-like macros that are alone
+# on a line and do not end with a semicolon. Such function macros are typically
+# used for boiler-plate code, and will confuse the parser if not removed.
+
+SKIP_FUNCTION_MACROS = YES
+
+#---------------------------------------------------------------------------
+# Configuration::addtions related to external references
+#---------------------------------------------------------------------------
+
+# The TAGFILES tag can be used to specify one or more tagfiles.
+
+TAGFILES =
+
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create
+# a tag file that is based on the input files it reads.
+
+GENERATE_TAGFILE =
+
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed
+# in the class index. If set to NO only the inherited external classes
+# will be listed.
+
+ALLEXTERNALS = NO
+
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed
+# in the modules index. If set to NO, only the current project's groups will
+# be listed.
+
+EXTERNAL_GROUPS = YES
+
+# The PERL_PATH should be the absolute path and name of the perl script
+# interpreter (i.e. the result of `which perl').
+
+PERL_PATH = /usr/bin/perl
+
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool
+#---------------------------------------------------------------------------
+
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will
+# generate a inheritance diagram (in Html, RTF and LaTeX) for classes with base or
+# super classes. Setting the tag to NO turns the diagrams off. Note that this
+# option is superceded by the HAVE_DOT option below. This is only a fallback. It is
+# recommended to install and use dot, since it yield more powerful graphs.
+
+CLASS_DIAGRAMS = YES
+
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
+# available from the path. This tool is part of Graphviz, a graph visualization
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section
+# have no effect if this option is set to NO (the default)
+
+HAVE_DOT = YES
+
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect inheritance relations. Setting this tag to YES will force the
+# the CLASS_DIAGRAMS tag to NO.
+
+CLASS_GRAPH = YES
+
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect implementation dependencies (inheritance, containment, and
+# class references variables) of the class with other documented classes.
+
+COLLABORATION_GRAPH = YES
+
+# If set to YES, the inheritance and collaboration graphs will show the
+# relations between templates and their instances.
+
+TEMPLATE_RELATIONS = YES
+
+# If set to YES, the inheritance and collaboration graphs will hide
+# inheritance and usage relations if the target is undocumented
+# or is not a class.
+
+HIDE_UNDOC_RELATIONS = NO
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT
+# tags are set to YES then doxygen will generate a graph for each documented
+# file showing the direct and indirect include dependencies of the file with
+# other documented files.
+
+INCLUDE_GRAPH = YES
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each
+# documented header file showing the documented files that directly or
+# indirectly include this file.
+
+INCLUDED_BY_GRAPH = YES
+
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen
+# will graphical hierarchy of all classes instead of a textual one.
+
+GRAPHICAL_HIERARCHY = YES
+
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
+# generated by dot. Possible values are gif, jpg, and png
+# If left blank gif will be used.
+
+DOT_IMAGE_FORMAT = gif
+
+# The tag DOT_PATH can be used to specify the path where the dot tool can be
+# found. If left blank, it is assumed the dot tool can be found on the path.
+
+DOT_PATH =
+
+# The DOTFILE_DIRS tag can be used to specify one or more directories that
+# contain dot files that are included in the documentation (see the
+# \dotfile command).
+
+DOTFILE_DIRS =
+
+# The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width
+# (in pixels) of the graphs generated by dot. If a graph becomes larger than
+# this value, doxygen will try to truncate the graph, so that it fits within
+# the specified constraint. Beware that most browsers cannot cope with very
+# large images.
+
+MAX_DOT_GRAPH_WIDTH = 1024
+
+# The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height
+# (in pixels) of the graphs generated by dot. If a graph becomes larger than
+# this value, doxygen will try to truncate the graph, so that it fits within
+# the specified constraint. Beware that most browsers cannot cope with very
+# large images.
+
+MAX_DOT_GRAPH_HEIGHT = 1024
+
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will
+# generate a legend page explaining the meaning of the various boxes and
+# arrows in the dot generated graphs.
+
+GENERATE_LEGEND = YES
+
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will
+# remove the intermedate dot files that are used to generate
+# the various graphs.
+
+DOT_CLEANUP = YES
+
+#---------------------------------------------------------------------------
+# Configuration::addtions related to the search engine
+#---------------------------------------------------------------------------
+
+# The SEARCHENGINE tag specifies whether or not a search engine should be
+# used. If set to NO the values of all tags below this one will be ignored.
+
+SEARCHENGINE = YES
+
+# The CGI_NAME tag should be the name of the CGI script that
+# starts the search engine (doxysearch) with the correct parameters.
+# A script with this name will be generated by doxygen.
+
+CGI_NAME = search.cgi
+
+# The CGI_URL tag should be the absolute URL to the directory where the
+# cgi binaries are located. See the documentation of your http daemon for
+# details.
+
+CGI_URL =
+
+# The DOC_URL tag should be the absolute URL to the directory where the
+# documentation is located. If left blank the absolute path to the
+# documentation, with file:// prepended to it, will be used.
+
+DOC_URL =
+
+# The DOC_ABSPATH tag should be the absolute path to the directory where the
+# documentation is located. If left blank the directory on the local machine
+# will be used.
+
+DOC_ABSPATH =
+
+# The BIN_ABSPATH tag must point to the directory where the doxysearch binary
+# is installed.
+
+BIN_ABSPATH = /usr/local/bin/
+
+# The EXT_DOC_PATHS tag can be used to specify one or more paths to
+# documentation generated for other projects. This allows doxysearch to search
+# the documentation for these projects as well.
+
+EXT_DOC_PATHS =
diff --git a/ndb/docs/doxygen/Doxyfile.test b/ndb/docs/doxygen/Doxyfile.test
new file mode 100644
index 00000000000..34ee21873ff
--- /dev/null
+++ b/ndb/docs/doxygen/Doxyfile.test
@@ -0,0 +1,921 @@
+# Doxyfile 1.2.14
+
+# This file describes the settings to be used by the documentation system
+# doxygen (www.doxygen.org) for a project
+#
+# All text after a hash (#) is considered a comment and will be ignored
+# The format is:
+# TAG = value [value, ...]
+# For lists items can also be appended using:
+# TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (" ")
+
+#---------------------------------------------------------------------------
+# General configuration options
+#---------------------------------------------------------------------------
+
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded
+# by quotes) that should identify the project.
+
+PROJECT_NAME = "NDB Cluster Test Programs"
+
+# The PROJECT_NUMBER tag can be used to enter a project or revision number.
+# This could be handy for archiving the generated documentation or
+# if some version control system is used.
+
+PROJECT_NUMBER =
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
+# base path where the generated documentation will be put.
+# If a relative path is entered, it will be relative to the location
+# where doxygen was started. If left blank the current directory will be used.
+
+OUTPUT_DIRECTORY =
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all
+# documentation generated by doxygen is written. Doxygen will use this
+# information to generate all constant output in the proper language.
+# The default language is English, other supported languages are:
+# Brazilian, Chinese, Croatian, Czech, Danish, Dutch, Finnish, French,
+# German, Greek, Hungarian, Italian, Japanese, Korean, Norwegian, Polish,
+# Portuguese, Romanian, Russian, Slovak, Slovene, Spanish and Swedish.
+
+OUTPUT_LANGUAGE = English
+
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
+# documentation are documented, even if no documentation was available.
+# Private class members and static file members will be hidden unless
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
+
+EXTRACT_ALL = YES
+
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class
+# will be included in the documentation.
+
+EXTRACT_PRIVATE = YES
+
+# If the EXTRACT_STATIC tag is set to YES all static members of a file
+# will be included in the documentation.
+
+EXTRACT_STATIC = YES
+
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs)
+# defined locally in source files will be included in the documentation.
+# If set to NO only classes defined in header files are included.
+
+EXTRACT_LOCAL_CLASSES = YES
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all
+# undocumented members of documented classes, files or namespaces.
+# If set to NO (the default) these members will be included in the
+# various overviews, but no documentation section is generated.
+# This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_MEMBERS = NO
+
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all
+# undocumented classes that are normally visible in the class hierarchy.
+# If set to NO (the default) these class will be included in the various
+# overviews. This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_CLASSES = NO
+
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will
+# include brief member descriptions after the members that are listed in
+# the file and class documentation (similar to JavaDoc).
+# Set to NO to disable this.
+
+BRIEF_MEMBER_DESC = YES
+
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend
+# the brief description of a member or function before the detailed description.
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
+# brief descriptions will be completely suppressed.
+
+REPEAT_BRIEF = YES
+
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
+# Doxygen will generate a detailed section even if there is only a brief
+# description.
+
+ALWAYS_DETAILED_SEC = NO
+
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all inherited
+# members of a class in the documentation of that class as if those members were
+# ordinary class members. Constructors, destructors and assignment operators of
+# the base classes will not be shown.
+
+INLINE_INHERITED_MEMB = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full
+# path before files name in the file list and in the header files. If set
+# to NO the shortest path that makes the file name unique will be used.
+
+FULL_PATH_NAMES = YES
+
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
+# can be used to strip a user defined part of the path. Stripping is
+# only done if one of the specified strings matches the left-hand part of
+# the path. It is allowed to use relative paths in the argument list.
+
+STRIP_FROM_PATH = .
+
+# The INTERNAL_DOCS tag determines if documentation
+# that is typed after a \internal command is included. If the tag is set
+# to NO (the default) then the documentation will be excluded.
+# Set it to YES to include the internal documentation.
+
+INTERNAL_DOCS = YES
+
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct
+# doxygen to hide any special comment blocks from generated source code
+# fragments. Normal C and C++ comments will always remain visible.
+
+STRIP_CODE_COMMENTS = YES
+
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate
+# file names in lower case letters. If set to YES upper case letters are also
+# allowed. This is useful if you have classes or files whose names only differ
+# in case and if your file system supports case sensitive file names. Windows
+# users are adviced to set this option to NO.
+
+CASE_SENSE_NAMES = YES
+
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter
+# (but less readable) file names. This can be useful is your file systems
+# doesn't support long names like on DOS, Mac, or CD-ROM.
+
+SHORT_NAMES = NO
+
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen
+# will show members with their full class and namespace scopes in the
+# documentation. If set to YES the scope will be hidden.
+
+HIDE_SCOPE_NAMES = NO
+
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen
+# will generate a verbatim copy of the header file for each class for
+# which an include is specified. Set to NO to disable this.
+
+VERBATIM_HEADERS = YES
+
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen
+# will put list of the files that are included by a file in the documentation
+# of that file.
+
+SHOW_INCLUDE_FILES = YES
+
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen
+# will interpret the first line (until the first dot) of a JavaDoc-style
+# comment as the brief description. If set to NO, the JavaDoc
+# comments will behave just like the Qt-style comments (thus requiring an
+# explict @brief command for a brief description.
+
+JAVADOC_AUTOBRIEF = NO
+
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented
+# member inherits the documentation from any documented member that it
+# reimplements.
+
+INHERIT_DOCS = YES
+
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline]
+# is inserted in the documentation for inline members.
+
+INLINE_INFO = YES
+
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen
+# will sort the (detailed) documentation of file and class members
+# alphabetically by member name. If set to NO the members will appear in
+# declaration order.
+
+SORT_MEMBER_DOCS = YES
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
+# tag is set to YES, then doxygen will reuse the documentation of the first
+# member in the group (if any) for the other members of the group. By default
+# all members of a group must be documented explicitly.
+
+DISTRIBUTE_GROUP_DOC = NO
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab.
+# Doxygen uses this value to replace tabs by spaces in code fragments.
+
+TAB_SIZE = 8
+
+# The GENERATE_TODOLIST tag can be used to enable (YES) or
+# disable (NO) the todo list. This list is created by putting \todo
+# commands in the documentation.
+
+GENERATE_TODOLIST = YES
+
+# The GENERATE_TESTLIST tag can be used to enable (YES) or
+# disable (NO) the test list. This list is created by putting \test
+# commands in the documentation.
+
+GENERATE_TESTLIST = YES
+
+# The GENERATE_BUGLIST tag can be used to enable (YES) or
+# disable (NO) the bug list. This list is created by putting \bug
+# commands in the documentation.
+
+GENERATE_BUGLIST = YES
+
+# This tag can be used to specify a number of aliases that acts
+# as commands in the documentation. An alias has the form "name=value".
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to
+# put the command \sideeffect (or @sideeffect) in the documentation, which
+# will result in a user defined paragraph with heading "Side Effects:".
+# You can put \n's in the value part of an alias to insert newlines.
+
+ALIASES =
+
+# The ENABLED_SECTIONS tag can be used to enable conditional
+# documentation sections, marked by \if sectionname ... \endif.
+
+ENABLED_SECTIONS =
+
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines
+# the initial value of a variable or define consist of for it to appear in
+# the documentation. If the initializer consists of more lines than specified
+# here it will be hidden. Use a value of 0 to hide initializers completely.
+# The appearance of the initializer of individual variables and defines in the
+# documentation can be controlled using \showinitializer or \hideinitializer
+# command in the documentation regardless of this setting.
+
+MAX_INITIALIZER_LINES = 30
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources
+# only. Doxygen will then generate output that is more tailored for C.
+# For instance some of the names that are used will be different. The list
+# of all members will be omitted, etc.
+
+OPTIMIZE_OUTPUT_FOR_C = NO
+
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated
+# at the bottom of the documentation of classes and structs. If set to YES the
+# list will mention the files that were used to generate the documentation.
+
+SHOW_USED_FILES = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+
+# The QUIET tag can be used to turn on/off the messages that are generated
+# by doxygen. Possible values are YES and NO. If left blank NO is used.
+
+QUIET = NO
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are
+# generated by doxygen. Possible values are YES and NO. If left blank
+# NO is used.
+
+WARNINGS = YES
+
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will
+# automatically be disabled.
+
+WARN_IF_UNDOCUMENTED = YES
+
+# The WARN_FORMAT tag determines the format of the warning messages that
+# doxygen can produce. The string should contain the $file, $line, and $text
+# tags, which will be replaced by the file and line number from which the
+# warning originated and the warning text.
+
+WARN_FORMAT = "$file:$line: $text"
+
+# The WARN_LOGFILE tag can be used to specify a file to which warning
+# and error messages should be written. If left blank the output is written
+# to stderr.
+
+WARN_LOGFILE =
+
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+
+# The INPUT tag can be used to specify the files and/or directories that contain
+# documented source files. You may enter file names like "myfile.cpp" or
+# directories like "/usr/src/myproject". Separate the files or directories
+# with spaces.
+
+INPUT = test
+
+# If the value of the INPUT tag contains directories, you can use the
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank the following patterns are tested:
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx *.hpp
+# *.h++ *.idl *.odl
+
+FILE_PATTERNS =
+
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories
+# should be searched for input files as well. Possible values are YES and NO.
+# If left blank NO is used.
+
+RECURSIVE = YES
+
+# The EXCLUDE tag can be used to specify files and/or directories that should
+# excluded from the INPUT source files. This way you can easily exclude a
+# subdirectory from a directory tree whose root is specified with the INPUT tag.
+
+EXCLUDE =
+
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or directories
+# that are symbolic links (a Unix filesystem feature) are excluded from the input.
+
+EXCLUDE_SYMLINKS = NO
+
+# If the value of the INPUT tag contains directories, you can use the
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
+# certain files from those directories.
+
+EXCLUDE_PATTERNS =
+
+# The EXAMPLE_PATH tag can be used to specify one or more files or
+# directories that contain example code fragments that are included (see
+# the \include command).
+
+EXAMPLE_PATH =
+
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank all files are included.
+
+EXAMPLE_PATTERNS =
+
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
+# searched for input files to be used with the \include or \dontinclude
+# commands irrespective of the value of the RECURSIVE tag.
+# Possible values are YES and NO. If left blank NO is used.
+
+EXAMPLE_RECURSIVE = NO
+
+# The IMAGE_PATH tag can be used to specify one or more files or
+# directories that contain image that are included in the documentation (see
+# the \image command).
+
+IMAGE_PATH =
+
+# The INPUT_FILTER tag can be used to specify a program that doxygen should
+# invoke to filter for each input file. Doxygen will invoke the filter program
+# by executing (via popen()) the command , where
+# is the value of the INPUT_FILTER tag, and is the name of an
+# input file. Doxygen will then use the output that the filter program writes
+# to standard output.
+
+INPUT_FILTER =
+
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
+# INPUT_FILTER) will be used to filter the input files when producing source
+# files to browse.
+
+FILTER_SOURCE_FILES = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will
+# be generated. Documented entities will be cross-referenced with these sources.
+
+SOURCE_BROWSER = YES
+
+# Setting the INLINE_SOURCES tag to YES will include the body
+# of functions and classes directly in the documentation.
+
+INLINE_SOURCES = YES
+
+# If the REFERENCED_BY_RELATION tag is set to YES (the default)
+# then for each documented function all documented
+# functions referencing it will be listed.
+
+REFERENCED_BY_RELATION = YES
+
+# If the REFERENCES_RELATION tag is set to YES (the default)
+# then for each documented function all documented entities
+# called/used by that function will be listed.
+
+REFERENCES_RELATION = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index
+# of all compounds will be generated. Enable this if the project
+# contains a lot of classes, structs, unions or interfaces.
+
+ALPHABETICAL_INDEX = YES
+
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns
+# in which this list will be split (can be a number in the range [1..20])
+
+COLS_IN_ALPHA_INDEX = 5
+
+# In case all classes in a project start with a common prefix, all
+# classes will be put under the same header in the alphabetical index.
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that
+# should be ignored while generating the index headers.
+
+IGNORE_PREFIX =
+
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will
+# generate HTML output.
+
+GENERATE_HTML = YES
+
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `html' will be used as the default path.
+
+HTML_OUTPUT = html
+
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank
+# doxygen will generate files with .html extension.
+
+HTML_FILE_EXTENSION = .html
+
+# The HTML_HEADER tag can be used to specify a personal HTML header for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard header.
+
+HTML_HEADER =
+
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard footer.
+
+HTML_FOOTER =
+
+# The HTML_STYLESHEET tag can be used to specify a user defined cascading
+# style sheet that is used by each HTML page. It can be used to
+# fine-tune the look of the HTML output. If the tag is left blank doxygen
+# will generate a default style sheet
+
+HTML_STYLESHEET =
+
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes,
+# files or namespaces will be aligned in HTML using tables. If set to
+# NO a bullet list will be used.
+
+HTML_ALIGN_MEMBERS = YES
+
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files
+# will be generated that can be used as input for tools like the
+# Microsoft HTML help workshop to generate a compressed HTML help file (.chm)
+# of the generated HTML documentation.
+
+GENERATE_HTMLHELP = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag
+# controls if a separate .chi index file is generated (YES) or that
+# it should be included in the master .chm file (NO).
+
+GENERATE_CHI = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag
+# controls whether a binary table of contents is generated (YES) or a
+# normal table of contents (NO) in the .chm file.
+
+BINARY_TOC = NO
+
+# The TOC_EXPAND flag can be set to YES to add extra items for group members
+# to the contents of the Html help documentation and to the tree view.
+
+TOC_EXPAND = NO
+
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at
+# top of each HTML page. The value NO (the default) enables the index and
+# the value YES disables it.
+
+DISABLE_INDEX = NO
+
+# This tag can be used to set the number of enum values (range [1..20])
+# that doxygen will group on one line in the generated HTML documentation.
+
+ENUM_VALUES_PER_LINE = 4
+
+# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be
+# generated containing a tree-like index structure (just like the one that
+# is generated for HTML Help). For this to work a browser that supports
+# JavaScript and frames is required (for instance Mozilla, Netscape 4.0+,
+# or Internet explorer 4.0+). Note that for large projects the tree generation
+# can take a very long time. In such cases it is better to disable this feature.
+# Windows users are probably better off using the HTML help feature.
+
+GENERATE_TREEVIEW = NO
+
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be
+# used to set the initial width (in pixels) of the frame in which the tree
+# is shown.
+
+TREEVIEW_WIDTH = 250
+
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will
+# generate Latex output.
+
+GENERATE_LATEX = NO
+
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `latex' will be used as the default path.
+
+LATEX_OUTPUT = latex
+
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact
+# LaTeX documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_LATEX = NO
+
+# The PAPER_TYPE tag can be used to set the paper type that is used
+# by the printer. Possible values are: a4, a4wide, letter, legal and
+# executive. If left blank a4wide will be used.
+
+PAPER_TYPE = a4wide
+
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX
+# packages that should be included in the LaTeX output.
+
+EXTRA_PACKAGES =
+
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for
+# the generated latex document. The header should contain everything until
+# the first chapter. If it is left blank doxygen will generate a
+# standard header. Notice: only use this tag if you know what you are doing!
+
+LATEX_HEADER =
+
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will
+# contain links (just like the HTML output) instead of page references
+# This makes the output suitable for online browsing using a pdf viewer.
+
+PDF_HYPERLINKS = NO
+
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of
+# plain latex in the generated Makefile. Set this option to YES to get a
+# higher quality PDF documentation.
+
+USE_PDFLATEX = NO
+
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode.
+# command to the generated LaTeX files. This will instruct LaTeX to keep
+# running if errors occur, instead of asking the user for help.
+# This option is also used when generating formulas in HTML.
+
+LATEX_BATCHMODE = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output
+# The RTF output is optimised for Word 97 and may not look very pretty with
+# other RTF readers or editors.
+
+GENERATE_RTF = NO
+
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `rtf' will be used as the default path.
+
+RTF_OUTPUT = rtf
+
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact
+# RTF documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_RTF = NO
+
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated
+# will contain hyperlink fields. The RTF file will
+# contain links (just like the HTML output) instead of page references.
+# This makes the output suitable for online browsing using WORD or other
+# programs which support those fields.
+# Note: wordpad (write) and others do not support links.
+
+RTF_HYPERLINKS = NO
+
+# Load stylesheet definitions from file. Syntax is similar to doxygen's
+# config file, i.e. a series of assigments. You only have to provide
+# replacements, missing definitions are set to their default value.
+
+RTF_STYLESHEET_FILE =
+
+# Set optional variables used in the generation of an rtf document.
+# Syntax is similar to doxygen's config file.
+
+RTF_EXTENSIONS_FILE =
+
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will
+# generate man pages
+
+GENERATE_MAN = NO
+
+# The MAN_OUTPUT tag is used to specify where the man pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `man' will be used as the default path.
+
+MAN_OUTPUT = man
+
+# The MAN_EXTENSION tag determines the extension that is added to
+# the generated man pages (default is the subroutine's section .3)
+
+MAN_EXTENSION = .3
+
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output,
+# then it will generate one additional man file for each entity
+# documented in the real man page(s). These additional files
+# only source the real man page, but without them the man command
+# would be unable to find the correct page. The default is NO.
+
+MAN_LINKS = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_XML tag is set to YES Doxygen will
+# generate an XML file that captures the structure of
+# the code including all documentation. Note that this
+# feature is still experimental and incomplete at the
+# moment.
+
+GENERATE_XML = NO
+
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will
+# generate an AutoGen Definitions (see autogen.sf.net) file
+# that captures the structure of the code including all
+# documentation. Note that this feature is still experimental
+# and incomplete at the moment.
+
+GENERATE_AUTOGEN_DEF = NO
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor
+#---------------------------------------------------------------------------
+
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will
+# evaluate all C-preprocessor directives found in the sources and include
+# files.
+
+ENABLE_PREPROCESSING = YES
+
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro
+# names in the source code. If set to NO (the default) only conditional
+# compilation will be performed. Macro expansion can be done in a controlled
+# way by setting EXPAND_ONLY_PREDEF to YES.
+
+MACRO_EXPANSION = NO
+
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES
+# then the macro expansion is limited to the macros specified with the
+# PREDEFINED and EXPAND_AS_PREDEFINED tags.
+
+EXPAND_ONLY_PREDEF = NO
+
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files
+# in the INCLUDE_PATH (see below) will be search if a #include is found.
+
+SEARCH_INCLUDES = YES
+
+# The INCLUDE_PATH tag can be used to specify one or more directories that
+# contain include files that are not input files but should be processed by
+# the preprocessor.
+
+INCLUDE_PATH =
+
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
+# patterns (like *.h and *.hpp) to filter out the header-files in the
+# directories. If left blank, the patterns specified with FILE_PATTERNS will
+# be used.
+
+INCLUDE_FILE_PATTERNS =
+
+# The PREDEFINED tag can be used to specify one or more macro names that
+# are defined before the preprocessor is started (similar to the -D option of
+# gcc). The argument of the tag is a list of macros of the form: name
+# or name=definition (no spaces). If the definition and the = are
+# omitted =1 is assumed.
+
+PREDEFINED =
+
+# If the MACRO_EXPANSION and EXPAND_PREDEF_ONLY tags are set to YES then
+# this tag can be used to specify a list of macro names that should be expanded.
+# The macro definition that is found in the sources will be used.
+# Use the PREDEFINED tag if you want to use a different macro definition.
+
+EXPAND_AS_DEFINED =
+
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then
+# doxygen's preprocessor will remove all function-like macros that are alone
+# on a line and do not end with a semicolon. Such function macros are typically
+# used for boiler-plate code, and will confuse the parser if not removed.
+
+SKIP_FUNCTION_MACROS = YES
+
+#---------------------------------------------------------------------------
+# Configuration::addtions related to external references
+#---------------------------------------------------------------------------
+
+# The TAGFILES tag can be used to specify one or more tagfiles.
+
+TAGFILES =
+
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create
+# a tag file that is based on the input files it reads.
+
+GENERATE_TAGFILE =
+
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed
+# in the class index. If set to NO only the inherited external classes
+# will be listed.
+
+ALLEXTERNALS = NO
+
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed
+# in the modules index. If set to NO, only the current project's groups will
+# be listed.
+
+EXTERNAL_GROUPS = YES
+
+# The PERL_PATH should be the absolute path and name of the perl script
+# interpreter (i.e. the result of `which perl').
+
+PERL_PATH = /usr/bin/perl
+
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool
+#---------------------------------------------------------------------------
+
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will
+# generate a inheritance diagram (in Html, RTF and LaTeX) for classes with base or
+# super classes. Setting the tag to NO turns the diagrams off. Note that this
+# option is superceded by the HAVE_DOT option below. This is only a fallback. It is
+# recommended to install and use dot, since it yield more powerful graphs.
+
+CLASS_DIAGRAMS = YES
+
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
+# available from the path. This tool is part of Graphviz, a graph visualization
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section
+# have no effect if this option is set to NO (the default)
+
+HAVE_DOT = YES
+
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect inheritance relations. Setting this tag to YES will force the
+# the CLASS_DIAGRAMS tag to NO.
+
+CLASS_GRAPH = YES
+
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect implementation dependencies (inheritance, containment, and
+# class references variables) of the class with other documented classes.
+
+COLLABORATION_GRAPH = YES
+
+# If set to YES, the inheritance and collaboration graphs will show the
+# relations between templates and their instances.
+
+TEMPLATE_RELATIONS = YES
+
+# If set to YES, the inheritance and collaboration graphs will hide
+# inheritance and usage relations if the target is undocumented
+# or is not a class.
+
+HIDE_UNDOC_RELATIONS = NO
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT
+# tags are set to YES then doxygen will generate a graph for each documented
+# file showing the direct and indirect include dependencies of the file with
+# other documented files.
+
+INCLUDE_GRAPH = YES
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each
+# documented header file showing the documented files that directly or
+# indirectly include this file.
+
+INCLUDED_BY_GRAPH = YES
+
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen
+# will graphical hierarchy of all classes instead of a textual one.
+
+GRAPHICAL_HIERARCHY = YES
+
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
+# generated by dot. Possible values are gif, jpg, and png
+# If left blank gif will be used.
+
+DOT_IMAGE_FORMAT = gif
+
+# The tag DOT_PATH can be used to specify the path where the dot tool can be
+# found. If left blank, it is assumed the dot tool can be found on the path.
+
+DOT_PATH =
+
+# The DOTFILE_DIRS tag can be used to specify one or more directories that
+# contain dot files that are included in the documentation (see the
+# \dotfile command).
+
+DOTFILE_DIRS =
+
+# The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width
+# (in pixels) of the graphs generated by dot. If a graph becomes larger than
+# this value, doxygen will try to truncate the graph, so that it fits within
+# the specified constraint. Beware that most browsers cannot cope with very
+# large images.
+
+MAX_DOT_GRAPH_WIDTH = 1024
+
+# The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height
+# (in pixels) of the graphs generated by dot. If a graph becomes larger than
+# this value, doxygen will try to truncate the graph, so that it fits within
+# the specified constraint. Beware that most browsers cannot cope with very
+# large images.
+
+MAX_DOT_GRAPH_HEIGHT = 1024
+
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will
+# generate a legend page explaining the meaning of the various boxes and
+# arrows in the dot generated graphs.
+
+GENERATE_LEGEND = YES
+
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will
+# remove the intermedate dot files that are used to generate
+# the various graphs.
+
+DOT_CLEANUP = YES
+
+#---------------------------------------------------------------------------
+# Configuration::addtions related to the search engine
+#---------------------------------------------------------------------------
+
+# The SEARCHENGINE tag specifies whether or not a search engine should be
+# used. If set to NO the values of all tags below this one will be ignored.
+
+SEARCHENGINE = NO
+
+# The CGI_NAME tag should be the name of the CGI script that
+# starts the search engine (doxysearch) with the correct parameters.
+# A script with this name will be generated by doxygen.
+
+CGI_NAME = search.cgi
+
+# The CGI_URL tag should be the absolute URL to the directory where the
+# cgi binaries are located. See the documentation of your http daemon for
+# details.
+
+CGI_URL =
+
+# The DOC_URL tag should be the absolute URL to the directory where the
+# documentation is located. If left blank the absolute path to the
+# documentation, with file:// prepended to it, will be used.
+
+DOC_URL =
+
+# The DOC_ABSPATH tag should be the absolute path to the directory where the
+# documentation is located. If left blank the directory on the local machine
+# will be used.
+
+DOC_ABSPATH =
+
+# The BIN_ABSPATH tag must point to the directory where the doxysearch binary
+# is installed.
+
+BIN_ABSPATH = /usr/local/bin
+
+# The EXT_DOC_PATHS tag can be used to specify one or more paths to
+# documentation generated for other projects. This allows doxysearch to search
+# the documentation for these projects as well.
+
+EXT_DOC_PATHS =
diff --git a/ndb/docs/doxygen/header.mgmapi.tex b/ndb/docs/doxygen/header.mgmapi.tex
new file mode 100644
index 00000000000..1b55ceb15c7
--- /dev/null
+++ b/ndb/docs/doxygen/header.mgmapi.tex
@@ -0,0 +1,44 @@
+\documentclass[a4paper]{book}
+\usepackage{a4wide}
+\usepackage{makeidx}
+\usepackage{fancyhdr}
+\usepackage{graphicx}
+\usepackage{multicol}
+\usepackage{float}
+\usepackage{textcomp}
+\usepackage{alltt}
+\usepackage{times}
+\ifx\pdfoutput\undefined
+\usepackage[ps2pdf,
+ pagebackref=true,
+ colorlinks=true,
+ linkcolor=blue
+ ]{hyperref}
+\usepackage{pspicture}
+\else
+\usepackage[pdftex,
+ pagebackref=true,
+ colorlinks=true,
+ linkcolor=blue
+ ]{hyperref}
+\fi
+\usepackage{doxygen}
+\makeindex
+\setcounter{tocdepth}{1}
+\renewcommand{\footrulewidth}{0.4pt}
+\begin{document}
+\begin{titlepage}
+\vspace*{7cm}
+\begin{center}
+{\Huge NDB Cluster MGM API Guide \mbox{}\vspace{-3cm}\mbox{}\hrule\bigskip\bigskip\bigskip\bigskip\mbox{}\Huge{}}\\\vspace*{1cm}
+\begin{center}\LARGE{MySQL AB}\end{center}\hfill\bigskip\bigskip\bigskip\hrule\bigskip\bigskip\bigskip\bigskip\bigskip\bigskip\bigskip\bigskip\bigskip\bigskip\bigskip\bigskip NDB Cluster Release RELEASE
+\bigskip\bigskip\bigskip\bigskip\bigskip\hfill\vspace*{0.5cm}
+{\small DATE}\\
+\end{center}
+\end{titlepage}
+\clearemptydoublepage
+\pagenumbering{roman}
+\tableofcontents
+\clearemptydoublepage
+\pagenumbering{arabic}
+
diff --git a/ndb/docs/doxygen/header.ndbapi.tex b/ndb/docs/doxygen/header.ndbapi.tex
new file mode 100644
index 00000000000..c37ce286ed8
--- /dev/null
+++ b/ndb/docs/doxygen/header.ndbapi.tex
@@ -0,0 +1,44 @@
+\documentclass[a4paper]{book}
+\usepackage{a4wide}
+\usepackage{makeidx}
+\usepackage{fancyhdr}
+\usepackage{graphicx}
+\usepackage{multicol}
+\usepackage{float}
+\usepackage{textcomp}
+\usepackage{alltt}
+\usepackage{times}
+\ifx\pdfoutput\undefined
+\usepackage[ps2pdf,
+ pagebackref=true,
+ colorlinks=true,
+ linkcolor=blue
+ ]{hyperref}
+\usepackage{pspicture}
+\else
+\usepackage[pdftex,
+ pagebackref=true,
+ colorlinks=true,
+ linkcolor=blue
+ ]{hyperref}
+\fi
+\usepackage{doxygen}
+\makeindex
+\setcounter{tocdepth}{1}
+\renewcommand{\footrulewidth}{0.4pt}
+\begin{document}
+\begin{titlepage}
+\vspace*{7cm}
+\begin{center}
+{\Huge NDB API Programmer's Guide \mbox{}\vspace{-3cm}\mbox{}\hrule\bigskip\bigskip\bigskip\bigskip\mbox{}\Huge{}}\\\vspace*{1cm}
+\begin{center}\LARGE{MySQL AB}\end{center}\hfill\bigskip\bigskip\bigskip\hrule\bigskip\bigskip\bigskip\bigskip\bigskip\bigskip\bigskip\bigskip\bigskip\bigskip\bigskip\bigskip NDB Cluster Release RELEASE
+\bigskip\bigskip\bigskip\bigskip\bigskip\hfill\vspace*{0.5cm}
+{\small DATE}\\
+\end{center}
+\end{titlepage}
+\clearemptydoublepage
+\pagenumbering{roman}
+\tableofcontents
+\clearemptydoublepage
+\pagenumbering{arabic}
+
diff --git a/ndb/docs/doxygen/postdoxy.pl b/ndb/docs/doxygen/postdoxy.pl
new file mode 100755
index 00000000000..95062d1899f
--- /dev/null
+++ b/ndb/docs/doxygen/postdoxy.pl
@@ -0,0 +1,97 @@
+#!/usr/local/bin/perl
+#
+# Written by Lars Thalmann, lars@mysql.com, 2003.
+#
+
+use strict;
+umask 000;
+
+# -----------------------------------------------------------------------------
+# Settings
+# -----------------------------------------------------------------------------
+
+$ENV{LD_LIBRARY_PATH} = "/usr/local/lib:/opt/as/local/lib";
+$ENV{LD_LIBRARY_PATH} = $ENV{LD_LIBRARY_PATH} . ":/opt/as/forte6/SUNWspro/lib";
+$ENV{PATH} = $ENV{PATH} . ":/usr/local/bin:/opt/as/local/bin";
+$ENV{PATH} = $ENV{PATH} . ":/opt/as/local/teTeX/bin/sparc-sun-solaris2.8";
+
+my $destdir = @ARGV[0];
+my $title = ""; # $ARGV[1];
+
+my $release;
+if (defined $ENV{'NDB_RELEASE'}) {
+ $release = $ENV{'NDB_RELEASE'};
+ print "----------------------------------------------------------------\n";
+ print "Relase = " . $release . "\n";
+ print "----------------------------------------------------------------\n";
+} else {
+ print "----------------------------------------------------------------\n";
+ print "NDB Documentation is being modified to statndard format\n";
+ print "(If you want this automatic, use env variable NDB_RELEASE.)\n";
+ print "Enter release (Examples: \"1.43.0 (alpha)\" or \"2.1.0 (gamma)\"): ";
+ $release = ;
+ print "----------------------------------------------------------------\n";
+}
+
+# -----------------------------------------------------------------------------
+# Change a little in refman.tex
+# -----------------------------------------------------------------------------
+
+open (INFILE, "< ${destdir}/refman.tex")
+ or die "Error opening ${destdir}/refman.tex.\n";
+open (OUTFILE, "> ${destdir}/refman.tex.new")
+ or die "Error opening ${destdir}/refman.tex.new.\n";
+
+while ()
+{
+ if (/(.*)(RELEASE)(.*)$/) {
+ print OUTFILE $1 . $release . $3;
+ } elsif (/(.*)(DATE)(.*)$/) {
+ print OUTFILE $1 . localtime() . $3;
+ } elsif (/\\chapter\{File Index\}/) {
+ # Erase
+ } elsif (/\\input\{files\}/) {
+ # Erase
+ } elsif (/\\chapter\{Hierarchical Index\}/) {
+ # Erase
+ } elsif (/\\input\{hierarchy\}/) {
+ # Erase
+ } elsif (/\\chapter\{Page Index\}/) {
+ # Erase
+ } elsif (/\\input\{pages\}/) {
+ # Erase
+ } else {
+ print OUTFILE;
+ }
+}
+
+close INFILE;
+close OUTFILE;
+
+system("mv ${destdir}/refman.tex.new ${destdir}/refman.tex");
+
+# -----------------------------------------------------------------------------
+# Change a little in doxygen.sty
+# -----------------------------------------------------------------------------
+
+open (INFILE, "< ${destdir}/doxygen.sty")
+ or die "Error opening INFILE.\n";
+open (OUTFILE, "> ${destdir}/doxygen.sty.new")
+ or die "Error opening OUTFILE.\n";
+
+while ()
+{
+ if (/\\rfoot/) {
+ print OUTFILE "\\rfoot[\\fancyplain{}{\\bfseries\\small \\copyright~Copyright 2003-2004 MySQL AB\\hfill support-cluster\@mysql.com}]{}\n";
+ } elsif (/\\lfoot/) {
+ print OUTFILE "\\lfoot[]{\\fancyplain{}{\\bfseries\\small support-cluster\@mysql.com\\hfill \\copyright~Copyright 2003-2004 MySQL AB}}\n";
+ } else {
+ print OUTFILE;
+ }
+}
+
+close INFILE;
+close OUTFILE;
+
+system("mv ${destdir}/doxygen.sty.new ${destdir}/doxygen.sty");
+
diff --git a/ndb/docs/doxygen/predoxy.pl b/ndb/docs/doxygen/predoxy.pl
new file mode 100755
index 00000000000..461ad02478a
--- /dev/null
+++ b/ndb/docs/doxygen/predoxy.pl
@@ -0,0 +1,34 @@
+#!/usr/local/bin/perl
+#
+# Written by Lars Thalmann, lars@mysql.com, 2003.
+#
+
+use strict;
+umask 000;
+
+# -----------------------------------------------------------------------------
+# Fix HTML Footer
+# -----------------------------------------------------------------------------
+
+open (OUTFILE, "> footer.html");
+
+print OUTFILE<
+
+
+
+EOT
+print OUTFILE "Documentation generated " . localtime() .
+ " from NDB Cluster source files.";
+print OUTFILE<
+© 2003-2004
+MySQL AB
+
+
+
+