Commit fe685832 authored by unknown's avatar unknown
Browse files

bug #23369 (Embedded library can't be linked)

Problem is that some files moved to storage/*/ still are dependent
on sql/ code (usually use members of THD structure)
that can get different being compiled with another #define-s
Code added to recompile these for the embedded server


config/ac-macros/plugins.m4:
  macros added to check if the storage has sql/ - dependent code
libmysqld/Makefile.am:
  symlink files from storage/*/ needed to be recompiled
  with EMBEDDED_LIBRARY
storage/federated/plug.in:
  ha_federated.cc uses THD structure
storage/heap/plug.in:
  ha_heap.cc uses THD structure
storage/innobase/plug.in:
  ha_innodb.cc uses THD structure
storage/myisam/plug.in:
  ha_myisam.cc uses THD structure
storage/myisammrg/plug.in:
  ha_myisammrg.cc uses THD structure
parent 86921c18
Loading
Loading
Loading
Loading
+35 −3
Original line number Diff line number Diff line
@@ -253,6 +253,29 @@ AC_DEFUN([MYSQL_PLUGIN_ACTIONS],[
 ])
])

dnl ---------------------------------------------------------------------------
dnl Macro: MYSQL_PLUGIN_DEPENDS_ON_MYSQL_INTERNALS
dnl
dnl SYNOPSIS
dnl   MYSQL_PLUGIN_DEPENDS_ON_MYSQL_INTERNALS([name],[file name])
dnl
dnl DESCRIPTION
dnl   Some modules in plugins keep dependance on structures
dnl   declared in sql/ (THD class usually)
dnl   That has to be fixed in the future, but until then
dnl   we have to recompile these modules when we want to
dnl   to compile server parts with the different #defines
dnl   Normally it happens when we compile the embedded server
dnl   Thus one should mark such files in his handler using this macro
dnl    (currently only one such a file per plugin is supported)
dnl
dnl ---------------------------------------------------------------------------

AC_DEFUN([MYSQL_PLUGIN_DEPENDS_ON_MYSQL_INTERNALS],[
 MYSQL_REQUIRE_PLUGIN([$1])
 m4_define([MYSQL_PLUGIN_DEPENDS_ON_MYSQL_INTERNALS_]AS_TR_CPP([$1]), [$2])
])

dnl ---------------------------------------------------------------------------
dnl Macro: MYSQL_CONFIGURE_PLUGINS
dnl
@@ -282,6 +305,9 @@ AC_DEFUN([MYSQL_CONFIGURE_PLUGINS],[
    AC_SUBST([mysql_pg_dirs])
    AC_SUBST([mysql_se_unittest_dirs])
    AC_SUBST([mysql_pg_unittest_dirs])
    AC_SUBST([condition_dependent_plugin_modules])
    AC_SUBST([condition_dependent_plugin_links])
    AC_SUBST([condition_dependent_plugin_includes])
   ])
 ])
])
@@ -307,6 +333,7 @@ AC_DEFUN([_MYSQL_EMIT_CHECK_PLUGIN],[
  [MYSQL_PLUGIN_DYNAMIC_]AS_TR_CPP([$1]),
  [MYSQL_PLUGIN_MANDATORY_]AS_TR_CPP([$1]),
  [MYSQL_PLUGIN_DISABLED_]AS_TR_CPP([$1]),
  [MYSQL_PLUGIN_DEPENDS_ON_MYSQL_INTERNALS_]AS_TR_CPP([$1]),
  [MYSQL_PLUGIN_ACTIONS_]AS_TR_CPP([$1])
 )
])
@@ -318,9 +345,9 @@ AC_DEFUN([__MYSQL_EMIT_CHECK_PLUGIN],[
 AC_MSG_CHECKING([whether to use ]$3)
 mysql_use_plugin_dir=""
 m4_ifdef([$10],[
  if test "X[$mysql_plugin_]$2" = Xyes -a \
          "X[$with_plugin_]$2" != Xno -o \
          "X[$with_plugin_]$2" = Xyes; then
  if test "x[$mysql_plugin_]$2" = Xyes -a \
          "x[$with_plugin_]$2" != Xno -o \
          "x[$with_plugin_]$2" = Xyes; then
    AC_MSG_RESULT([error])
    AC_MSG_ERROR([disabled])
  fi
@@ -346,6 +373,11 @@ AC_DEFUN([__MYSQL_EMIT_CHECK_PLUGIN],[
       ])
       AC_SUBST([plugin_]$2[_shared_target], "$8")
       AC_SUBST([plugin_]$2[_static_target], [""])
       m4_ifdef([$11],[
        condition_dependent_plugin_modules="$condition_dependent_plugin_modules m4_bregexp($11, [[^/]+$], [\&])"
        condition_dependent_plugin_links="$condition_dependent_plugin_links $6/$11"
        condition_dependent_plugin_includes="$condition_dependent_plugin_includes -I[\$(top_srcdir)]/$6/m4_bregexp($11, [^.+[/$]], [\&])"
       ])
       [with_plugin_]$2=yes
       AC_MSG_RESULT([plugin])
       m4_ifdef([$6],[
+12 −2
Original line number Diff line number Diff line
@@ -32,7 +32,8 @@ INCLUDES= -I$(top_builddir)/include -I$(top_srcdir)/include \
			-I$(top_builddir)/include -I$(top_srcdir)/include \
			-I$(top_srcdir)/sql -I$(top_srcdir)/sql/examples \
			-I$(top_srcdir)/regex \
			$(openssl_includes) @ZLIB_INCLUDES@
			$(openssl_includes) @ZLIB_INCLUDES@ \
			@condition_dependent_plugin_includes@

noinst_LIBRARIES =	libmysqld_int.a
pkglib_LIBRARIES =	libmysqld.a
@@ -77,6 +78,8 @@ libmysqld_int_a_SOURCES= $(libmysqld_sources) $(libmysqlsources) $(sqlsources)
libmysqld_a_SOURCES=

sqlstoragesources =	$(EXTRA_libmysqld_a_SOURCES)
storagesources = @condition_dependent_plugin_modules@
storagesourceslinks = @condition_dependent_plugin_links@

# automake misses these
sql_yacc.cc sql_yacc.h: $(top_srcdir)/sql/sql_yacc.yy
@@ -170,12 +173,19 @@ link_sources:
	      @LN_CP_F@ `find $(srcdir)/../sql -name "$$f"` "$$f"; \
	    done; \
	  fi; \
	  if test -n "$(storagesources)" ; \
	  then \
	    rm -f $(storagesources); \
	    for f in $(storagesourceslinks); do \
	      @LN_CP_F@ $(top_srcdir)/$$f . ; \
	    done; \
	  fi; \
	  rm -f client_settings.h; \
	  @LN_CP_F@ $(top_srcdir)/libmysql/client_settings.h client_settings.h


clean-local:
	rm -f `echo $(sqlsources) $(libmysqlsources) $(sqlstoragesources) | sed "s;\.lo;.c;g"` \
	rm -f `echo $(sqlsources) $(libmysqlsources) $(sqlstoragesources) $(storagesources) | sed "s;\.lo;.c;g"` \
	       $(top_srcdir)/linked_libmysqld_sources; \
	rm -f client_settings.h

+1 −0
Original line number Diff line number Diff line
@@ -2,3 +2,4 @@ MYSQL_STORAGE_ENGINE(federated,,[Federated Storage Engine],
        [Connects to tables on remote MySQL servers], [max,max-no-ndb])
MYSQL_PLUGIN_STATIC(federated,    [libfederated.a])
MYSQL_PLUGIN_DYNAMIC(federated,   [ha_federated.la])
MYSQL_PLUGIN_DEPENDS_ON_MYSQL_INTERNALS(federated, [ha_federated.cc])
+1 −0
Original line number Diff line number Diff line
@@ -3,4 +3,5 @@ MYSQL_STORAGE_ENGINE(heap,no, [Memory Storage Engine],
MYSQL_PLUGIN_DIRECTORY(heap,    [storage/heap])
MYSQL_PLUGIN_STATIC(heap,       [libheap.a])
MYSQL_PLUGIN_MANDATORY(heap)    dnl Memory tables
MYSQL_PLUGIN_DEPENDS_ON_MYSQL_INTERNALS(heap, [ha_heap.cc])
+1 −0
Original line number Diff line number Diff line
@@ -68,4 +68,5 @@ MYSQL_PLUGIN_ACTIONS(innobase, [
      storage/innobase/handler/Makefile
      storage/innobase/usr/Makefile)
  ])
MYSQL_PLUGIN_DEPENDS_ON_MYSQL_INTERNALS(innobase, [handler/ha_innodb.cc])
Loading