From 88aff4bf851e8f0d67cc7cd860d445e0fb234717 Mon Sep 17 00:00:00 2001
From: "monty@hundin.mysql.fi" <>
Date: Mon, 8 Oct 2001 04:58:07 +0300
Subject: Updated manual about embedded version. Speed up column-completion in
 'mysql' Don't use ISAM if HAVE_ISAM is not defined A lot of fixes for the
 embedded version.  All libraries are now included in libmysqld.a Changed
 arguments to convert_dirname() to make it more general. Renamed files in the
 'merge' directory to all use a common prefix. Don't compile both assembler
 and C functions on x86

---
 libmysqld/Makefile.am          | 79 ++++++++++++++++++++++++------------------
 libmysqld/examples/Makefile.am | 15 ++------
 libmysqld/examples/test-run    | 58 ++++++++++++++++---------------
 libmysqld/lib_sql.cc           | 10 +++---
 libmysqld/libmysqld.c          |  5 ---
 5 files changed, 84 insertions(+), 83 deletions(-)

(limited to 'libmysqld')

diff --git a/libmysqld/Makefile.am b/libmysqld/Makefile.am
index e39cebff04a..275a761e5ac 100644
--- a/libmysqld/Makefile.am
+++ b/libmysqld/Makefile.am
@@ -17,27 +17,23 @@
 #
 # This file is public domain and comes with NO WARRANTY of any kind
 
-MYSQLDATAdir =			$(localstatedir)
-MYSQLSHAREdir =			$(pkgdatadir)
-MYSQLBASEdir=			$(prefix)
+MYSQLDATAdir =		$(localstatedir)
+MYSQLSHAREdir =		$(pkgdatadir)
+MYSQLBASEdir=		$(prefix)
 
 DEFS =			-DEMBEDDED_LIBRARY -DMYSQL_SERVER \
 			-DDEFAULT_MYSQL_HOME="\"$(MYSQLBASEdir)\"" \
 			-DDATADIR="\"$(MYSQLDATAdir)\"" \
 			-DSHAREDIR="\"$(MYSQLSHAREdir)\""
-INCLUDES = @MT_INCLUDES@ @bdb_includes@ -I$(srcdir)/../include -I../include \
-	-I$(srcdir)/.. -I$(top_srcdir) -I.. -I../sql -I../regex
+INCLUDES=		@MT_INCLUDES@ @bdb_includes@ -I$(srcdir)/../include \
+			-I../include -I$(srcdir)/.. -I$(top_srcdir) -I.. \
+			-I../sql -I../regex
 
-
-## XXX: should we use client or server LDFLAGS for libmysqld?
-LDADD =			@CLIENT_EXTRA_LDFLAGS@ libmysqld.la
-pkglib_LTLIBRARIES =	libmysqld.la
+noinst_LIBRARIES =	libmysqld_int.a
+pkglib_LIBRARIES =	libmysqld.a
 SUBDIRS =		. examples
-libmysqld_la_SOURCES=	libmysqld.c lib_sql.cc lib_load.cc
-
+libmysqld_sources=	libmysqld.c lib_sql.cc lib_load.cc
 libmysqlsources =	errmsg.c get_password.c password.c
-## XXX: we should not have to duplicate info from the sources list
-libmysqlobjects =	errmsg.lo get_password.lo password.lo
 
 noinst_HEADERS =	embedded_priv.h
 
@@ -58,37 +54,52 @@ sqlsources = convert.cc derror.cc field.cc field_conv.cc filesort.cc \
 	sql_update.cc sql_yacc.cc table.cc thr_malloc.cc time.cc \
 	unireg.cc uniques.cc stacktrace.c sql_union.cc hash_filo.cc
 
-## XXX: we should not have to duplicate info from the sources list
-sqlobjects = convert.lo derror.lo field.lo field_conv.lo filesort.lo \
-	ha_innobase.lo ha_berkeley.lo ha_heap.lo ha_isam.lo ha_isammrg.lo \
-	ha_myisam.lo ha_myisammrg.lo handler.lo sql_handler.lo \
-	hostname.lo init.lo \
-	item.lo item_buff.lo item_cmpfunc.lo item_create.lo \
-	item_func.lo item_strfunc.lo item_sum.lo item_timefunc.lo \
-	item_uniq.lo key.lo lock.lo log.lo log_event.lo md5.lo \
-	mini_client.lo net_pkg.lo net_serv.lo opt_ft.lo opt_range.lo \
-	opt_sum.lo procedure.lo records.lo slave.lo sql_acl.lo \
-	sql_analyse.lo sql_base.lo sql_cache.lo sql_class.lo \
-	sql_crypt.lo sql_db.lo sql_delete.lo sql_insert.lo sql_lex.lo \
-	sql_list.lo sql_manager.lo sql_map.lo sql_parse.lo \
-	sql_rename.lo sql_repl.lo sql_select.lo sql_show.lo \
-	sql_string.lo sql_table.lo sql_test.lo sql_udf.lo \
-	sql_update.lo sql_yacc.lo table.lo thr_malloc.lo time.lo \
-	unireg.lo uniques.lo stacktrace.lo sql_union.lo hash_filo.lo
-
 EXTRA_DIST = lib_vio.c
 
+libmysqld_int_a_SOURCES= $(libmysqld_sources) $(libmysqlsources) $(sqlsources)
+
 # automake misses these
 sql_yacc.cc sql_yacc.h: $(top_srcdir)/sql/sql_yacc.yy
 
-libmysqld_la_LIBADD = $(sqlobjects) $(libmysqlobjects)
+# The following libraries should be included in libmysqld.a
+INC_LIB=	$(top_builddir)/regex/libregex.a \
+		$(top_builddir)/myisam/libmyisam.a \
+		$(top_builddir)/myisammrg/libmyisammrg.a \
+		$(top_builddir)/heap/libheap.a \
+		@innodb_libs@ @bdb_libs_with_path@ \
+		$(top_builddir)/mysys/libmysys.a \
+		$(top_builddir)/strings/libmystrings.a \
+		$(top_builddir)/dbug/libdbug.a \
+		$(top_builddir)/regex/libregex.a
+
+#
+# To make it easy for the end user to use the embedded library we 
+# generate a total libmysqld.a from all library files, 
+
+libmysqld.a:	libmysqld_int.a $(INC_LIB)
+		if test ! -d tmp ; then mkdir tmp ; fi
+		rm -f $@ libmysqld_int2.a tmp/*.o tmp/*.a
+		cp $(INC_LIB) tmp
+		cp libmysqld_int.a libmysqld_int2.a ; \
+		cd tmp ; \
+		for file in *.a ; do \
+		  bfile=`basename $$file .a` ; \
+		  ar x $$file; \
+		  for obj in *.o ; do mv $$obj $${bfile}_$$obj ; done ; \
+		  ar q ../libmysqld_int2.a *.o ; \
+		  rm *.o ; \
+		done
+		mv libmysqld_int2.a libmysqld.a
+		rm tmp/*
+		$(RANLIB) libmysqld.a
+
 ## XXX: any time the client interface changes, we'll need to bump
 ## the version info for libmysqld; however, it's possible for the
 ## libmysqld interface to change without affecting the standard
 ## libmysqlclient interface.  Should we make a separate version
 ## string for the two?
-libmysqld_la_LDFLAGS = -version-info @SHARED_LIB_VERSION@
-CLEANFILES =		$(libmysqld_la_LIBADD) libmysqld.la
+#libmysqld_la_LDFLAGS = -version-info @SHARED_LIB_VERSION@
+#CLEANFILES =		$(libmysqld_la_LIBADD) libmysqld.la
 
 # This is called from the toplevel makefile
 link_sources:
diff --git a/libmysqld/examples/Makefile.am b/libmysqld/examples/Makefile.am
index 124bc3e05f4..d1cf24caf48 100644
--- a/libmysqld/examples/Makefile.am
+++ b/libmysqld/examples/Makefile.am
@@ -10,20 +10,9 @@ link_sources:
 DEFS = 		-DEMBEDDED_LIBRARY
 INCLUDES =	-I$(top_srcdir)/include $(openssl_includes) \
 		-I$(srcdir) -I$(top_srcdir) -I$(top_srcdir)/client
-LIBS =	@LIBS@
-LDADD =	$(top_builddir)/libmysqld/libmysqld.la \
-	$(top_builddir)/isam/libnisam.a \
-	$(top_builddir)/myisam/libmyisam.a \
-	$(top_builddir)/heap/libheap.a \
-	$(top_builddir)/merge/libmerge.a \
-	$(top_builddir)/myisammrg/libmyisammrg.a \
-	@innodb_libs@ @bdb_libs@ @pstack_libs@ \
-	$(top_builddir)/mysys/libmysys.a \
-	$(top_builddir)/strings/libmystrings.a \
-	$(top_builddir)/dbug/libdbug.a \
-	$(top_builddir)/regex/libregex.a @LIBDL@
+LIBS =		@LIBS@
+LDADD =		../libmysqld.a @innodb_system_libs@ @LIBDL@
 
-mysqltest_DEPENDENCIES = ../libmysqld.la
 mysqltest_SOURCES =	mysqltest.c
 
 mysql_SOURCES = mysql.cc readline.cc completion_hash.cc \
diff --git a/libmysqld/examples/test-run b/libmysqld/examples/test-run
index 58c21349519..b97d2742b74 100755
--- a/libmysqld/examples/test-run
+++ b/libmysqld/examples/test-run
@@ -6,26 +6,19 @@
 # that will run on all platforms (or incorporate it into the
 # standard mysql-test-run).
 
-#test_data_dir=/tmp/mysql-data
-test_data_dir=../../mysql-test/var/master-data
-cd "$test_data_dir" || {
-  echo "can't cd to $test_data_dir" >&2
-  exit 1
-}
-
 # All paths below must be relative to $test_data_dir
-#top_builddir=/home/tim/my/4
-top_builddir=../../..
+top_builddir=../..
 mysql_test_dir=$top_builddir/mysql-test
 examples=$top_builddir/libmysqld/examples
 mysqltest=$examples/mysqltest
-testdir=./test
-
+datadir=$mysql_test_dir/var/master-data
+test_data_dir=test
 gdb=0
 list=0
 run=
 tests=
 start=
+clean=1
 
 cr="
 "
@@ -35,6 +28,7 @@ usage () {
     cat <<EOF
 usage: $0 [-g|-h|-r] [test-name ...]
 
+    -C | --noclean	Do not remove old innodb and bdb files at start.
     -g | --gdb          run $mysqltest in gdb
     -h | --help         show this help
     -l | --list )       list all available tests
@@ -58,6 +52,7 @@ do
         -l | --list ) list=1 ; shift ;;
         -r | --run ) run="${cr}run"; shift;;
         --debug)     init_args="$init_args --debug" ; shift ;;
+        -C | --noclean) clean=0 ; shift ;;
         -s | --start=* )
             test $argset -eq 0 && { shift; arg="$1"; }
             start="$arg"
@@ -68,25 +63,30 @@ do
     esac
 done
 
-test -d "$mysql_test_dir/t" -a -d "$mysql_test_dir/r" -a \
-     -f $mysqltest -a -d $testdir || {
-    echo "bad setup (is '$testdir', from '$test_data_dir', missing?)" >&2
+if test ! -d "$datadir/$test_data_dir"
+then
+    echo "bad setup (is '$datadir/$test_data_dir'', missing ?)" >&2
     exit 1
-}
+fi
 
 test -n "$tests" ||
     tests=`/bin/ls -1 "$mysql_test_dir"/t/*.test | grep -v '^.*/rpl[^/]*$' | \
         sed -e 's,^.*/,,' -e 's,.test$,,'`
 
-echo "cleaning data directory '$test_data_dir'"
-rm -f $test_data_dir/ib_* $test_data_dir/ibdata* log.*
-echo "cleaning test directory '$testdir'"
-rm -f $testdir/*
-
+echo "cleaning data directory '$datadir/$test_data_dir'"
+if test $clean = 1
+then
+  rm -f $datadir/ib_* $datadir/ibdata*
+  rm -f $datadir/log.00*
+fi
+rm -f $datadir/../tmp/*
 rm -f test-gdbinit
 
 TZ=GMT-3; export TZ
 
+# At least one of the tests needs the following environment variable
+MYSQL_TEST_DIR=`( cd $mysql_test_dir ; pwd )` ; export MYSQL_TEST_DIR
+
 skip=1
 test -z "$start" && skip=0
 
@@ -96,16 +96,20 @@ do
     test $skip -eq 1 && test -n "$start" && test "$start" = "$b" && skip=0
     test $skip -eq 1 && { echo "skipping '$b'"; continue; }
 
-    t="$mysql_test_dir/t/$b.test"
-    r="$mysql_test_dir/r/$b.result"
-    c="$mysql_test_dir/r/$b.reject"
+    t="t/$b.test"
+    r="r/$b.result"
 
     # Only test if $t exists; there is no $r for some tests
-    test -f $t || {
-        echo "test '$b' doesn't exist" >&2
+    test -f $mysql_test_dir/$t || {
+        echo "test '$mysql_test_dir/$t' doesn't exist" >&2
         continue
     }
-    args="$init_args -v -S /tmp/mysql.sock -R $r -x $t test"
+    args="$init_args -v --basedir=$mysql_test_dir/ -R $r -x $t --server-arg=--datadir=$datadir"
+    if test -f "$mysql_test_dir/t/$b-master.opt" ; then
+       args="$args --server-file=t/$b-master.opt"
+    fi
+
+    args="$args $test_data_dir"		# Add database last
     echo "set args $args$run" > test-gdbinit
     #if false && test -n "$run"
     if test -n "$run" -o $gdb -eq 1
@@ -129,5 +133,5 @@ do
         res=$?
     fi
 
-    test $res -eq 0 || echo "!!! error: $res"
+    test $res -eq 0 -o $res -eq 2 || echo "!!! error: $res"
 done
diff --git a/libmysqld/lib_sql.cc b/libmysqld/lib_sql.cc
index 5641e920c9d..139f9b9c0c7 100644
--- a/libmysqld/lib_sql.cc
+++ b/libmysqld/lib_sql.cc
@@ -296,7 +296,7 @@ extern "C"
 
 static my_bool inited, org_my_init_done;
 
-int mysql_server_init(int argc, const char **argv, const char **groups)
+int mysql_server_init(int argc, char **argv, char **groups)
 {
   char glob_hostname[FN_REFLEN];
 
@@ -306,7 +306,7 @@ int mysql_server_init(int argc, const char **argv, const char **groups)
   char ***argvp;
   int fake_argc = 1;
   char *fake_argv[] = { (char *)"", 0 };
-  const char *fake_groups[] = { "server", 0 };
+  const char *fake_groups[] = { "server", "embedded", 0 };
   if (argc)
   {
     argcp = &argc;
@@ -318,7 +318,7 @@ int mysql_server_init(int argc, const char **argv, const char **groups)
     argvp = (char ***) &fake_argv;
   }
   if (!groups)
-      groups = fake_groups;
+      groups = (char**) fake_groups;
 
   my_umask=0660;		// Default umask for new files
   my_umask_dir=0700;		// Default umask for new directories
@@ -330,7 +330,9 @@ int mysql_server_init(int argc, const char **argv, const char **groups)
     org_my_init_done=my_init_done;
   }
   if (!org_my_init_done)
+  {
     MY_INIT((char *)"mysql_embedded");	// init my_sys library & pthreads
+  }
 
   tzset();			// Set tzname
 
@@ -357,7 +359,7 @@ int mysql_server_init(int argc, const char **argv, const char **groups)
   strcat(server_version,"-debug");
 #endif
   strcat(server_version,"-embedded");
-  load_defaults("my", groups, argcp, argvp);
+  load_defaults("my", (const char **) groups, argcp, argvp);
   defaults_argv=*argvp;
   mysql_tmpdir=getenv("TMPDIR");	/* Use this if possible */
 #if defined( __WIN__) || defined(OS2)
diff --git a/libmysqld/libmysqld.c b/libmysqld/libmysqld.c
index 12786cce0ee..7093e5f993e 100644
--- a/libmysqld/libmysqld.c
+++ b/libmysqld/libmysqld.c
@@ -79,11 +79,6 @@ static ulong mysql_sub_escape_string(CHARSET_INFO *charset_info, char *to,
 #define set_sigpipe(mysql)
 #define reset_sigpipe(mysql)
 
-static MYSQL* spawn_init(MYSQL* parent, const char* host,
-			 unsigned int port,
-			 const char* user,
-			 const char* passwd);
-
 /*****************************************************************************
 ** read a packet from server. Give error message if socket was down
 ** or packet is an error message
-- 
cgit v1.2.1