plugins.m4 21.2 KB
Newer Older
unknown's avatar
unknown committed
1
dnl ===========================================================================
unknown's avatar
unknown committed
2
dnl Support for mysql server plugins
unknown's avatar
unknown committed
3 4 5 6
dnl ===========================================================================
dnl
dnl WorkLog#3201
dnl
unknown's avatar
unknown committed
7
dnl Framework for pluggable static and dynamic plugins for mysql
unknown's avatar
unknown committed
8 9
dnl
dnl ---------------------------------------------------------------------------
unknown's avatar
unknown committed
10
dnl Macro: MYSQL_PLUGIN
unknown's avatar
unknown committed
11
dnl
unknown's avatar
unknown committed
12 13 14
dnl SYNOPSIS
dnl   MYSQL_PLUGIN([name],[Plugin name],
dnl                [Plugin description],
unknown's avatar
unknown committed
15 16
dnl                [group,group...])
dnl   
unknown's avatar
unknown committed
17 18 19
dnl DESCRIPTION
dnl   First declaration for a plugin (mandatory).
dnl   Adds plugin as member to configuration groups (if specified)
unknown's avatar
unknown committed
20 21 22
dnl
dnl ---------------------------------------------------------------------------

unknown's avatar
unknown committed
23 24
AC_DEFUN([MYSQL_PLUGIN],[
 _MYSQL_PLUGIN(
unknown's avatar
unknown committed
25
  [$1],
unknown's avatar
unknown committed
26
  [__MYSQL_PLUGIN_]AS_TR_CPP([$1])[__],
unknown's avatar
unknown committed
27 28 29
  m4_default([$2], [$1 plugin]),
  m4_default([$3], [plugin for $1]),
  m4_default([$4], []),
unknown's avatar
unknown committed
30
 )
unknown's avatar
unknown committed
31 32
])

unknown's avatar
unknown committed
33
AC_DEFUN([_MYSQL_PLUGIN],[
unknown's avatar
unknown committed
34
 m4_ifdef([$2], [
unknown's avatar
unknown committed
35
  AC_FATAL([Duplicate MYSQL_PLUGIN declaration for $3])
unknown's avatar
fixes  
unknown committed
36
 ],[
unknown's avatar
unknown committed
37 38
  m4_define([$2], [$1])
  _MYSQL_PLUGAPPEND([__mysql_plugin_list__],[$1])
unknown's avatar
unknown committed
39 40
  m4_define([MYSQL_PLUGIN_NAME_]AS_TR_CPP([$1]), [$3])
  m4_define([MYSQL_PLUGIN_DESC_]AS_TR_CPP([$1]), [$4])
41
  _MYSQL_PLUGAPPEND_META([$1], $5)
42 43 44 45
  ifelse(m4_bregexp(__mysql_include__,[/plug\.in$]),-1,[],[
     MYSQL_PLUGIN_DIRECTORY([$1],
         m4_bregexp(__mysql_include__,[^\(.*\)/plug\.in$],[\1]))
  ])
unknown's avatar
unknown committed
46
 ])
unknown's avatar
unknown committed
47 48 49 50 51 52
])


dnl ---------------------------------------------------------------------------
dnl Macro: MYSQL_STORAGE_ENGINE
dnl
unknown's avatar
unknown committed
53 54 55 56 57
dnl SYNOPSIS
dnl   MYSQL_STORAGE_ENGINE([name],[legacy-option],[Storage engine name],
dnl                        [Storage engine description],[group,group...])
dnl
dnl DESCRIPTION
unknown's avatar
unknown committed
58 59 60 61
dnl   Short cut for storage engine declarations
dnl
dnl ---------------------------------------------------------------------------

unknown's avatar
unknown committed
62
AC_DEFUN([MYSQL_STORAGE_ENGINE],[
unknown's avatar
unknown committed
63 64
 MYSQL_PLUGIN([$1], [$3], [$4], [[$5]])
 MYSQL_PLUGIN_DEFINE([$1], [WITH_]AS_TR_CPP([$1])[_STORAGE_ENGINE])
unknown's avatar
unknown committed
65
 ifelse([$2],[no],[],[
unknown's avatar
fixes  
unknown committed
66
  _MYSQL_LEGACY_STORAGE_ENGINE(
67
      m4_bpatsubst([$1], -, _),
unknown's avatar
fixes  
unknown committed
68
      m4_bpatsubst(m4_default([$2], [$1-storage-engine]), -, _))
unknown's avatar
unknown committed
69
 ])
unknown's avatar
unknown committed
70 71 72
])

AC_DEFUN([_MYSQL_LEGACY_STORAGE_ENGINE],[
73 74
if test "[${with_]$2[+set}]" = set; then
  [with_plugin_]$1="[$with_]$2"
unknown's avatar
unknown committed
75
fi
unknown's avatar
unknown committed
76 77 78 79
])


dnl ---------------------------------------------------------------------------
unknown's avatar
unknown committed
80 81 82
dnl Macro: MYSQL_PLUGIN_DEFINE
dnl
dnl SYNOPSIS
unknown's avatar
unknown committed
83
dnl   MYSQL_PLUGIN_DEFINE([name],[MYSQL_CPP_DEFINE])
unknown's avatar
unknown committed
84
dnl
unknown's avatar
unknown committed
85 86
dnl DESCRIPTION
dnl   When a plugin is to be statically linked, define the C macro
unknown's avatar
unknown committed
87 88 89
dnl
dnl ---------------------------------------------------------------------------

unknown's avatar
unknown committed
90 91 92
AC_DEFUN([MYSQL_PLUGIN_DEFINE],[
 MYSQL_REQUIRE_PLUGIN([$1])
 m4_define([MYSQL_PLUGIN_DEFINE_]AS_TR_CPP([$1]), [$2])
unknown's avatar
unknown committed
93 94 95 96
])


dnl ---------------------------------------------------------------------------
unknown's avatar
unknown committed
97
dnl Macro: MYSQL_PLUGIN_DIRECTORY
unknown's avatar
unknown committed
98
dnl
unknown's avatar
unknown committed
99 100 101 102
dnl SYNOPSIS
dnl   MYSQL_PLUGIN_DIRECTORY([name],[plugin/dir])
dnl
dnl DESCRIPTION
unknown's avatar
unknown committed
103
dnl   Adds a directory to the build process
unknown's avatar
unknown committed
104
dnl   if it contains 'configure' it will be picked up automatically
unknown's avatar
unknown committed
105 106 107
dnl
dnl ---------------------------------------------------------------------------

unknown's avatar
unknown committed
108 109 110
AC_DEFUN([MYSQL_PLUGIN_DIRECTORY],[
 MYSQL_REQUIRE_PLUGIN([$1])
 m4_define([MYSQL_PLUGIN_DIRECTORY_]AS_TR_CPP([$1]), [$2])
unknown's avatar
unknown committed
111 112 113 114
])


dnl ---------------------------------------------------------------------------
unknown's avatar
unknown committed
115 116 117 118
dnl Macro: MYSQL_PLUGIN_STATIC
dnl
dnl SYNOPSIS
dnl   MYSQL_PLUGIN_STATIC([name],[libmyplugin.a])
unknown's avatar
unknown committed
119
dnl
unknown's avatar
unknown committed
120
dnl DESCRIPTION
unknown's avatar
unknown committed
121 122 123 124
dnl   Declare the name for the static library 
dnl
dnl ---------------------------------------------------------------------------

unknown's avatar
unknown committed
125 126 127
AC_DEFUN([MYSQL_PLUGIN_STATIC],[
 MYSQL_REQUIRE_PLUGIN([$1])
 m4_define([MYSQL_PLUGIN_STATIC_]AS_TR_CPP([$1]), [$2])
unknown's avatar
unknown committed
128 129 130 131
])


dnl ---------------------------------------------------------------------------
unknown's avatar
unknown committed
132
dnl Macro: MYSQL_PLUGIN_DYNAMIC
unknown's avatar
unknown committed
133
dnl
unknown's avatar
unknown committed
134 135 136 137
dnl SYNOPSIS
dnl  MYSQL_PLUGIN_DYNAMIC([name],[myplugin.la])
dnl
dnl DESCRIPTION
unknown's avatar
unknown committed
138 139 140 141
dnl   Declare the name for the shared library
dnl
dnl ---------------------------------------------------------------------------

unknown's avatar
unknown committed
142 143 144
AC_DEFUN([MYSQL_PLUGIN_DYNAMIC],[
 MYSQL_REQUIRE_PLUGIN([$1])
 m4_define([MYSQL_PLUGIN_DYNAMIC_]AS_TR_CPP([$1]), [$2])
unknown's avatar
unknown committed
145 146 147 148
])


dnl ---------------------------------------------------------------------------
unknown's avatar
unknown committed
149 150 151 152
dnl Macro: MYSQL_PLUGIN_MANDATORY
dnl
dnl SYNOPSIS
dnl   MYSQL_PLUGIN_MANDATORY([name])
unknown's avatar
unknown committed
153
dnl
unknown's avatar
unknown committed
154 155
dnl DESCRIPTION
dnl   Marks the specified plugin as a mandatory plugin
unknown's avatar
unknown committed
156 157 158
dnl
dnl ---------------------------------------------------------------------------

unknown's avatar
unknown committed
159 160 161 162 163
AC_DEFUN([MYSQL_PLUGIN_MANDATORY],[
 MYSQL_REQUIRE_PLUGIN([$1])
 _MYSQL_PLUGIN_MANDATORY([$1],
  [MYSQL_PLUGIN_MANDATORY_]AS_TR_CPP([$1]),
  [MYSQL_PLUGIN_DISABLED_]AS_TR_CPP([$1])
unknown's avatar
unknown committed
164
 )
unknown's avatar
unknown committed
165 166
])

unknown's avatar
unknown committed
167
AC_DEFUN([_MYSQL_PLUGIN_MANDATORY],[
unknown's avatar
unknown committed
168 169
 m4_define([$2], [yes])
 m4_ifdef([$3], [
unknown's avatar
unknown committed
170
  AC_FATAL([mandatory plugin $1 has been disabled])
unknown's avatar
unknown committed
171 172
  m4_undefine([$2])
 ])
unknown's avatar
unknown committed
173 174 175 176
])


dnl ---------------------------------------------------------------------------
unknown's avatar
unknown committed
177
dnl Macro: MYSQL_PLUGIN_DISABLED
unknown's avatar
unknown committed
178
dnl
unknown's avatar
unknown committed
179 180 181 182 183
dnl SYNOPSIS
dnl   MYSQL_PLUGIN_DISABLED([name])
dnl
dnl DESCRIPTION
dnl   Marks the specified plugin as a disabled plugin
unknown's avatar
unknown committed
184 185 186
dnl
dnl ---------------------------------------------------------------------------

unknown's avatar
unknown committed
187 188 189 190 191
AC_DEFUN([MYSQL_PLUGIN_DISABLED],[
 MYSQL_REQUIRE_PLUGIN([$1])
 _MYSQL_PLUGIN_DISABLED([$1], 
  [MYSQL_PLUGIN_DISABLED_]AS_TR_CPP([$1]),
  [MYSQL_PLUGIN_MANDATORY_]AS_TR_CPP([$1])
unknown's avatar
unknown committed
192
 )
unknown's avatar
unknown committed
193 194
])

unknown's avatar
unknown committed
195
AC_DEFUN([_MYSQL_PLUGIN_DISABLED],[
unknown's avatar
unknown committed
196 197 198 199 200
 m4_define([$2], [yes])
 m4_ifdef([$3], [
  AC_FATAL([attempt to disable mandatory plugin $1])
  m4_undefine([$2])
 ])
unknown's avatar
unknown committed
201 202 203 204
])


dnl ---------------------------------------------------------------------------
unknown's avatar
unknown committed
205 206 207 208
dnl Macro: MYSQL_PLUGIN_DEPENDS
dnl
dnl SYNOPSIS
dnl   MYSQL_PLUGIN_DEPENDS([name],[prereq,prereq...])
unknown's avatar
unknown committed
209
dnl
unknown's avatar
unknown committed
210 211
dnl DESCRIPTION
dnl   Enables other plugins neccessary for the named plugin
unknown's avatar
unknown committed
212
dnl   Dependency checking is not recursive so if any 
unknown's avatar
unknown committed
213
dnl   required plugin requires further plugins, list them
unknown's avatar
unknown committed
214 215 216 217
dnl   here too!
dnl
dnl ---------------------------------------------------------------------------

unknown's avatar
unknown committed
218 219 220 221 222
AC_DEFUN([MYSQL_PLUGIN_DEPENDS],[
 MYSQL_REQUIRE_PLUGIN([$1])
 ifelse($#, 2, [
  _MYSQL_PLUGIN_DEPEND([$1], $2)
 ], [
unknown's avatar
fixes  
unknown committed
223
  AC_FATAL([bad number of arguments])
unknown's avatar
unknown committed
224 225 226
 ])
])

unknown's avatar
unknown committed
227
AC_DEFUN([_MYSQL_PLUGIN_DEPEND],[
unknown's avatar
unknown committed
228
 ifelse($#, 1, [], [$#:$2], [2:], [], [
unknown's avatar
unknown committed
229 230 231 232
  MYSQL_REQUIRE_PLUGIN([$2])
  _MYSQL_PLUGAPPEND([__mysql_plugdepends_$1__],[$2])
  _MYSQL_PLUGIN_DEPEND([$1], m4_shift(m4_shift($@)))
 ])
unknown's avatar
unknown committed
233 234 235 236
])


dnl ---------------------------------------------------------------------------
unknown's avatar
unknown committed
237 238 239 240
dnl Macro: MYSQL_PLUGIN_ACTIONS
dnl
dnl SYNOPSIS
dnl   MYSQL_PLUGIN_ACTIONS([name],[PLUGIN_CONFIGURE_STUFF])
unknown's avatar
unknown committed
241
dnl
unknown's avatar
unknown committed
242 243
dnl DESCRIPTION
dnl   Declares additional autoconf actions required to configure the plugin
unknown's avatar
unknown committed
244 245 246
dnl
dnl ---------------------------------------------------------------------------

unknown's avatar
unknown committed
247 248
AC_DEFUN([MYSQL_PLUGIN_ACTIONS],[
 MYSQL_REQUIRE_PLUGIN([$1])
unknown's avatar
unknown committed
249
 m4_ifdef([$2],[
unknown's avatar
unknown committed
250
   m4_define([MYSQL_PLUGIN_ACTIONS_]AS_TR_CPP([$1]),m4_defn([$2]))
unknown's avatar
unknown committed
251
 ],[
unknown's avatar
unknown committed
252
   m4_define([MYSQL_PLUGIN_ACTIONS_]AS_TR_CPP([$1]), [$2])
unknown's avatar
unknown committed
253 254 255 256 257 258
 ])
])

dnl ---------------------------------------------------------------------------
dnl Macro: MYSQL_CONFIGURE_PLUGINS
dnl
unknown's avatar
unknown committed
259 260 261 262 263 264
dnl SYNOPSIS
dnl   MYSQL_PLUGIN_DEPENDS([name,name...])
dnl
dnl DESCRIPTION
dnl   Used last, emits all required shell code to configure the plugins
dnl   Argument is a list of default plugins or meta-plugin
unknown's avatar
unknown committed
265 266 267
dnl
dnl ---------------------------------------------------------------------------

unknown's avatar
unknown committed
268 269
AC_DEFUN([MYSQL_CONFIGURE_PLUGINS],[
 m4_ifdef([__mysql_plugin_configured__],[
unknown's avatar
unknown committed
270
   AC_FATAL([cannot use [MYSQL_CONFIGURE_PLUGINS] multiple times])
unknown's avatar
unknown committed
271 272
 ],[
   m4_define([__mysql_plugin_configured__],[done])
273 274 275 276
   _MYSQL_INCLUDE_LIST(
   m4_bpatsubst(m4_esyscmd([ls plugin/*/plug.in storage/*/plug.in 2>/dev/null]),
[[ 
]],[,]))
unknown's avatar
unknown committed
277
   m4_ifdef([__mysql_plugin_list__],[
unknown's avatar
unknown committed
278
    _MYSQL_CHECK_PLUGIN_ARGS([$1])
unknown's avatar
unknown committed
279
    _MYSQL_CONFIGURE_PLUGINS(m4_bpatsubst(__mysql_plugin_list__, :, [,]))
unknown's avatar
unknown committed
280
    _MYSQL_EMIT_PLUGIN_ACTIONS(m4_bpatsubst(__mysql_plugin_list__, :, [,]))
unknown's avatar
fixes  
unknown committed
281 282
    AC_SUBST([mysql_se_dirs])
    AC_SUBST([mysql_pg_dirs])
283
    AC_SUBST([mysql_se_unittest_dirs])
unknown's avatar
unknown committed
284 285
   ])
 ])
unknown's avatar
unknown committed
286 287
])

unknown's avatar
unknown committed
288 289
AC_DEFUN([_MYSQL_CONFIGURE_PLUGINS],[
 ifelse($#, 0, [], $#, 1, [
unknown's avatar
unknown committed
290
  _MYSQL_EMIT_CHECK_PLUGIN([$1])
unknown's avatar
unknown committed
291
 ],[
unknown's avatar
unknown committed
292
  _MYSQL_EMIT_CHECK_PLUGIN([$1])
unknown's avatar
unknown committed
293
  _MYSQL_CONFIGURE_PLUGINS(m4_shift($@))
unknown's avatar
unknown committed
294 295 296
 ])
])

unknown's avatar
unknown committed
297 298
AC_DEFUN([_MYSQL_EMIT_CHECK_PLUGIN],[
 __MYSQL_EMIT_CHECK_PLUGIN(
unknown's avatar
unknown committed
299
  [$1],
unknown's avatar
unknown committed
300
  m4_bpatsubst([$1], -, _),
unknown's avatar
unknown committed
301 302 303 304 305 306 307 308 309
  [MYSQL_PLUGIN_NAME_]AS_TR_CPP([$1]),
  [MYSQL_PLUGIN_DESC_]AS_TR_CPP([$1]),
  [MYSQL_PLUGIN_DEFINE_]AS_TR_CPP([$1]),
  [MYSQL_PLUGIN_DIRECTORY_]AS_TR_CPP([$1]),
  [MYSQL_PLUGIN_STATIC_]AS_TR_CPP([$1]),
  [MYSQL_PLUGIN_DYNAMIC_]AS_TR_CPP([$1]),
  [MYSQL_PLUGIN_MANDATORY_]AS_TR_CPP([$1]),
  [MYSQL_PLUGIN_DISABLED_]AS_TR_CPP([$1]),
  [MYSQL_PLUGIN_ACTIONS_]AS_TR_CPP([$1])
unknown's avatar
unknown committed
310
 )
unknown's avatar
unknown committed
311 312
])

unknown's avatar
unknown committed
313
AC_DEFUN([__MYSQL_EMIT_CHECK_PLUGIN],[
unknown's avatar
unknown committed
314
 m4_ifdef([$5],[
unknown's avatar
unknown committed
315 316
  AH_TEMPLATE($5, [Include ]$4[ into mysqld])
 ])
unknown's avatar
unknown committed
317
 AC_MSG_CHECKING([whether to use ]$3)
unknown's avatar
fixes  
unknown committed
318
 mysql_use_plugin_dir=""
319
 mysql_use_plugin_unittest_dir=""
unknown's avatar
unknown committed
320
 m4_ifdef([$10],[
unknown's avatar
unknown committed
321 322 323
  if test "X[$mysql_plugin_]$2" = Xyes -a \
          "X[$with_plugin_]$2" != Xno -o \
          "X[$with_plugin_]$2" = Xyes; then
unknown's avatar
fixes  
unknown committed
324
    AC_MSG_RESULT([error])
unknown's avatar
unknown committed
325 326
    AC_MSG_ERROR([disabled])
  fi
unknown's avatar
unknown committed
327 328
  AC_MSG_RESULT([no])
 ],[
unknown's avatar
unknown committed
329
  m4_ifdef([$9],[
unknown's avatar
unknown committed
330
   if test "X[$with_plugin_]$2" = Xno; then
unknown's avatar
fixes  
unknown committed
331
     AC_MSG_RESULT([error])
unknown's avatar
unknown committed
332
     AC_MSG_ERROR([cannot disable mandatory plugin])
unknown's avatar
unknown committed
333
   fi
unknown's avatar
unknown committed
334
   [mysql_plugin_]$2=yes
unknown's avatar
unknown committed
335
  ])
unknown's avatar
unknown committed
336
  if test "X[$with_plugin_]$2" = Xno; then
unknown's avatar
unknown committed
337 338
    AC_MSG_RESULT([no])
  else
unknown's avatar
unknown committed
339
    m4_ifdef([$8],m4_ifdef([$7],[],[[with_plugin_]$2='']))
unknown's avatar
unknown committed
340 341
    if test "X[$mysql_plugin_]$2" != Xyes -a \
            "X[$with_plugin_]$2" != Xyes; then
unknown's avatar
unknown committed
342 343 344
      m4_ifdef([$8],[
       m4_ifdef([$6],[
         if test -d "$srcdir/$6" ; then
unknown's avatar
fixes  
unknown committed
345
           mysql_use_plugin_dir="$6"
unknown's avatar
unknown committed
346 347 348
       ])
       AC_SUBST([plugin_]$2[_shared_target], "$8")
       AC_SUBST([plugin_]$2[_static_target], [""])
unknown's avatar
unknown committed
349
       [with_plugin_]$2=yes
unknown's avatar
unknown committed
350
       AC_MSG_RESULT([plugin])
unknown's avatar
unknown committed
351
       m4_ifdef([$6],[
unknown's avatar
unknown committed
352
         else
unknown's avatar
unknown committed
353
           [mysql_plugin_]$2=no
unknown's avatar
unknown committed
354 355
           AC_MSG_RESULT([no])
         fi
unknown's avatar
unknown committed
356 357
       ])
      ],[
unknown's avatar
unknown committed
358
       [with_plugin_]$2=no
unknown's avatar
unknown committed
359
       AC_MSG_RESULT([no])
unknown's avatar
unknown committed
360
      ])
unknown's avatar
unknown committed
361
    else
unknown's avatar
unknown committed
362
      m4_ifdef([$7],[
unknown's avatar
unknown committed
363
       ifelse(m4_bregexp($7, [^lib[^.]+\.a$]), -2, [
364 365
dnl change above "-2" to "0" to enable this section
dnl Although this is "pretty", it breaks libmysqld build
unknown's avatar
unknown committed
366
        m4_ifdef([$6],[
unknown's avatar
fixes  
unknown committed
367
         mysql_use_plugin_dir="$6"
unknown's avatar
unknown committed
368
         mysql_plugin_libs="$mysql_plugin_libs -L[\$(top_builddir)]/$6"
unknown's avatar
unknown committed
369
        ])
370
        mysql_plugin_libs="$mysql_plugin_libs dnl
unknown's avatar
unknown committed
371 372
[-l]m4_bregexp($7, [^lib\([^.]+\)], [\1])"
       ], m4_bregexp($7, [^\\\$]), 0, [
unknown's avatar
unknown committed
373
        m4_ifdef([$6],[
unknown's avatar
fixes  
unknown committed
374
         mysql_use_plugin_dir="$6"
unknown's avatar
unknown committed
375
        ])
unknown's avatar
unknown committed
376 377
        mysql_plugin_libs="$mysql_plugin_libs $7"
       ], [
unknown's avatar
unknown committed
378
        m4_ifdef([$6],[
unknown's avatar
fixes  
unknown committed
379
         mysql_use_plugin_dir="$6"
unknown's avatar
unknown committed
380
         mysql_plugin_libs="$mysql_plugin_libs \$(top_builddir)/$6/$7"
unknown's avatar
unknown committed
381
        ],[
unknown's avatar
unknown committed
382 383 384
         mysql_plugin_libs="$mysql_plugin_libs $7"
        ])
       ])
unknown's avatar
unknown committed
385
       m4_ifdef([$5],[
unknown's avatar
unknown committed
386
        AC_DEFINE($5)
unknown's avatar
unknown committed
387
       ])
unknown's avatar
unknown committed
388 389 390
       AC_SUBST([plugin_]$2[_static_target], "$7")
       AC_SUBST([plugin_]$2[_shared_target], [""])
      ],[
unknown's avatar
unknown committed
391
       m4_ifdef([$6],[
unknown's avatar
fixes  
unknown committed
392 393
        AC_MSG_RESULT([error])
        AC_MSG_ERROR([Plugin $1 does not support static linking])
unknown's avatar
unknown committed
394
       ],[
unknown's avatar
unknown committed
395 396
        m4_ifdef([$5],[
         AC_DEFINE($5)
unknown's avatar
unknown committed
397 398 399 400
         AC_SUBST([plugin_]$2[_static_target], ["yes"])
         AC_SUBST([plugin_]$2[_shared_target], [""])
        ])
       ])
unknown's avatar
unknown committed
401
      ])
unknown's avatar
unknown committed
402
      mysql_plugin_defs="$mysql_plugin_defs, [builtin_]$2[_plugin]"
unknown's avatar
unknown committed
403
      [with_plugin_]$2=yes
unknown's avatar
unknown committed
404
      AC_MSG_RESULT([yes])
unknown's avatar
unknown committed
405
    fi
unknown's avatar
fixes  
unknown committed
406 407 408
    m4_ifdef([$6],[
      if test -n "$mysql_use_plugin_dir" ; then
        mysql_plugin_dirs="$mysql_plugin_dirs $6"
409 410
        m4_syscmd(test -f "$6/configure")
        ifelse(m4_sysval, 0,
411
          [AC_CONFIG_SUBDIRS($6)],
412 413 414 415 416 417 418 419 420
          [
            AC_CONFIG_FILES($6/Makefile)
            m4_syscmd(test -d "unittest/$6")
            ifelse(m4_sysval, 0,
            [
              mysql_use_plugin_unittest_dir="$6"
              AC_CONFIG_FILES(unittest/$6/Makefile)
            ], [])
          ]
421
        )
unknown's avatar
fixes  
unknown committed
422
        ifelse(m4_substr($6, 0, 8), [storage/],
423 424 425 426 427 428 429
          [
            [mysql_se_name="]m4_substr($6, 8)"
            mysql_se_dirs="$mysql_se_dirs $mysql_se_name"
            if test -n "$mysql_use_plugin_unittest_dir" ; then
              mysql_se_unittest_dirs="$mysql_se_unitest_dirs $mysql_se_name"
            fi
          ],
unknown's avatar
fixes  
unknown committed
430 431 432 433 434
          m4_substr($6, 0, 7), [plugin/],
          [mysql_pg_dirs="$mysql_pg_dirs ]m4_substr($6, 7)",
          [AC_FATAL([don't know how to handle plugin dir ]$6)])
      fi
    ])
unknown's avatar
unknown committed
435 436
  fi
 ])
unknown's avatar
unknown committed
437
])
unknown's avatar
unknown committed
438

unknown's avatar
unknown committed
439
AC_DEFUN([_MYSQL_EMIT_PLUGIN_ACTIONS],[
unknown's avatar
unknown committed
440
 ifelse($#, 0, [], $#, 1, [
unknown's avatar
unknown committed
441
  _MYSQL_EMIT_PLUGIN_ACTION([$1])
unknown's avatar
unknown committed
442
 ],[
unknown's avatar
unknown committed
443 444
  _MYSQL_EMIT_PLUGIN_ACTION([$1])
  _MYSQL_EMIT_PLUGIN_ACTIONS(m4_shift($@))
unknown's avatar
unknown committed
445 446 447
 ])
])

unknown's avatar
unknown committed
448 449
AC_DEFUN([_MYSQL_EMIT_PLUGIN_ACTION],[
 __MYSQL_EMIT_PLUGIN_ACTION(
unknown's avatar
unknown committed
450
  [$1],
unknown's avatar
unknown committed
451
  m4_bpatsubst([$1], -, _),
unknown's avatar
unknown committed
452 453
  [MYSQL_PLUGIN_DISABLED_]AS_TR_CPP([$1]),
  [MYSQL_PLUGIN_ACTIONS_]AS_TR_CPP([$1])
unknown's avatar
unknown committed
454
 )
unknown's avatar
unknown committed
455 456 457
])


unknown's avatar
unknown committed
458 459 460 461 462
AC_DEFUN([__MYSQL_EMIT_PLUGIN_ACTION],[
 m4_ifdef([$3], [], [
  if test "X[$with_plugin_]$2" = Xyes; then
    if test "X[$plugin_]$2[_static_target]" = X -a \
            "X[$plugin_]$2[_shared_target]" = X; then
unknown's avatar
unknown committed
463
      AC_MSG_ERROR([that's strange, $1 failed sanity check])
unknown's avatar
unknown committed
464
    fi
unknown's avatar
unknown committed
465
    $4
unknown's avatar
unknown committed
466 467
  fi
 ])
unknown's avatar
unknown committed
468 469 470 471 472 473 474 475 476
])



dnl ===========================================================================
dnl  Private helper macros
dnl ===========================================================================


unknown's avatar
unknown committed
477 478 479 480 481 482 483 484
dnl SYNOPSIS
dnl   MYSQL_REQUIRE_PLUGIN([name])
dnl
dnl DESCRIPTION
dnl   Checks that the specified plugin does exist

AC_DEFUN([MYSQL_REQUIRE_PLUGIN],[
 _MYSQL_REQUIRE_PLUGIN([$1], [__MYSQL_PLUGIN_]AS_TR_CPP([$1])[__])
unknown's avatar
unknown committed
485 486
])

unknown's avatar
unknown committed
487
define([_MYSQL_REQUIRE_PLUGIN],[
unknown's avatar
unknown committed
488 489
 ifdef([$2],[
  ifelse($2, [$1], [], [
unknown's avatar
unknown committed
490
   AC_FATAL([Misspelt MYSQL_PLUGIN declaration for $1])
unknown's avatar
unknown committed
491 492
  ])
 ],[
unknown's avatar
unknown committed
493
  AC_FATAL([Missing MYSQL_PLUGIN declaration for $1])
unknown's avatar
unknown committed
494 495 496 497 498 499 500
 ])
])


dnl ---------------------------------------------------------------------------


unknown's avatar
unknown committed
501 502 503 504 505 506 507 508
dnl SYNOPSIS
dnl   _MYSQL_EMIT_METAPLUGINS([name,name...])
dnl
dnl DESCRIPTION
dnl   Emits shell code for metaplugins

AC_DEFUN([_MYSQL_EMIT_METAPLUGINS], [ifelse($#, 0, [], $#, 1,
[_MYSQL_EMIT_METAPLUGIN([$1], [__mysql_]m4_bpatsubst($1, -, _)[_plugins__])
unknown's avatar
unknown committed
509
],
unknown's avatar
unknown committed
510 511
[_MYSQL_EMIT_METAPLUGIN([$1], [__mysql_]m4_bpatsubst($1, -, _)[_plugins__])
_MYSQL_EMIT_METAPLUGINS(m4_shift($@))])
unknown's avatar
unknown committed
512 513
])

unknown's avatar
unknown committed
514
AC_DEFUN([_MYSQL_EMIT_METAPLUGIN], [
unknown's avatar
unknown committed
515
  [$1] )
unknown's avatar
unknown committed
516
m4_ifdef([$2], [
unknown's avatar
unknown committed
517
    mysql_plugins='m4_bpatsubst($2, :, [ ])'
unknown's avatar
unknown committed
518
],[
unknown's avatar
unknown committed
519
    mysql_plugins=''
unknown's avatar
unknown committed
520
])
unknown's avatar
unknown committed
521
    ;;
unknown's avatar
unknown committed
522 523 524 525 526 527
])


dnl ---------------------------------------------------------------------------


unknown's avatar
unknown committed
528 529 530 531 532
dnl SYNOPSIS
dnl   _MYSQL_PLUGAPPEND([name],[to-append])
dnl
dnl DESCRIPTION
dnl   Helper macro for appending to colon-delimited lists
unknown's avatar
unknown committed
533 534
dnl   Optinal 3rd argument is for actions only required when defining
dnl   macro named for the first time.
unknown's avatar
unknown committed
535

unknown's avatar
unknown committed
536 537 538 539 540 541 542 543 544 545
AC_DEFUN([_MYSQL_PLUGAPPEND],[
 m4_ifdef([$1],[
  m4_define([__plugin_append_tmp__], m4_defn([$1]))
  m4_undefine([$1])
  m4_define([$1], __plugin_append_tmp__[:$2])
  m4_undefine([__plugin_append_tmp__])
 ],[
  m4_define([$1], [$2])
  $3
 ])
unknown's avatar
unknown committed
546 547 548
])


unknown's avatar
unknown committed
549 550 551 552 553 554 555 556
dnl SYNOPSIS
dnl   _MYSQL_PLUGAPPEND_META([name],[meta,meta...])
dnl
dnl DESCRIPTION
dnl   Helper macro for adding plugins to meta plugins

AC_DEFUN([_MYSQL_PLUGAPPEND_META],[
 ifelse($#, 1, [], [$#:$2], [2:], [], [$2], [all], [
unknown's avatar
fixes  
unknown committed
557
  AC_FATAL([protected plugin group: all])
unknown's avatar
unknown committed
558 559
 ], [$2], [none], [
  AC_FATAL([protected plugin group: none])
unknown's avatar
unknown committed
560
 ],[
unknown's avatar
unknown committed
561 562 563
  _MYSQL_PLUGAPPEND([__mysql_$1_configs__],[$2])
  _MYSQL_PLUGAPPEND([__mysql_]m4_bpatsubst($2, -, _)[_plugins__],[$1], [
   _MYSQL_PLUGAPPEND([__mysql_metaplugin_list__],[$2])
unknown's avatar
unknown committed
564
  ])
unknown's avatar
unknown committed
565
  _MYSQL_PLUGAPPEND_META([$1], m4_shift(m4_shift($@)))
unknown's avatar
unknown committed
566
 ])
unknown's avatar
unknown committed
567 568 569 570 571 572
])


dnl ---------------------------------------------------------------------------


unknown's avatar
unknown committed
573 574 575 576 577 578
dnl SYNOPSIS
dnl   MYSQL_LIST_PLUGINS
dnl
dnl DESCRIPTION
dnl   Emits formatted list of declared plugins

unknown's avatar
unknown committed
579 580 581 582
AC_DEFUN([MYSQL_LIST_PLUGINS],[dnl
 m4_ifdef([__mysql_plugin_list__],[dnl
  _MYSQL_LIST_PLUGINS(m4_bpatsubst(__mysql_plugin_list__, :, [,]))dnl
 ])dnl
unknown's avatar
unknown committed
583 584
])

unknown's avatar
unknown committed
585 586 587 588 589 590 591
AC_DEFUN([_MYSQL_LIST_PLUGINS],[dnl
 ifelse($#, 0, [], $#, 1, [dnl
  MYSQL_SHOW_PLUGIN([$1])dnl
 ],[dnl
  MYSQL_SHOW_PLUGIN([$1])dnl
  _MYSQL_LIST_PLUGINS(m4_shift($@))dnl
 ])dnl
unknown's avatar
unknown committed
592 593
])

unknown's avatar
unknown committed
594
AC_DEFUN([MYSQL_SHOW_PLUGIN],[
unknown's avatar
unknown committed
595 596 597
 _MYSQL_SHOW_PLUGIN(
  [$1],
  [$1-plugin],
unknown's avatar
unknown committed
598 599 600 601 602 603 604 605 606
  [MYSQL_PLUGIN_NAME_]AS_TR_CPP([$1]),
  [MYSQL_PLUGIN_DESC_]AS_TR_CPP([$1]),
  [MYSQL_PLUGIN_DEFINE_]AS_TR_CPP([$1]),
  [MYSQL_PLUGIN_DIRECTORY_]AS_TR_CPP([$1]),
  [MYSQL_PLUGIN_STATIC_]AS_TR_CPP([$1]),
  [MYSQL_PLUGIN_DYNAMIC_]AS_TR_CPP([$1]),
  [MYSQL_PLUGIN_MANDATORY_]AS_TR_CPP([$1]),
  [MYSQL_PLUGIN_DISABLED_]AS_TR_CPP([$1]),
  [MYSQL_PLUGIN_ACTIONS_]AS_TR_CPP([$1]),
unknown's avatar
unknown committed
607 608 609 610
  __mysql_[$1]_configs__,
 )
])

unknown's avatar
unknown committed
611
AC_DEFUN([_MYSQL_SHOW_PLUGIN],[dnl
unknown's avatar
fixes  
unknown committed
612
  === $3 ===
unknown's avatar
unknown committed
613
  Plugin Name:      [$1]
unknown's avatar
unknown committed
614
  Description:      $4
unknown's avatar
unknown committed
615
  Supports build:   _PLUGIN_BUILD_TYPE([$7],[$8])[]dnl
unknown's avatar
unknown committed
616
m4_ifdef([$12],[
unknown's avatar
unknown committed
617
  Configurations:   m4_bpatsubst($12, :, [, ])])[]dnl
unknown's avatar
unknown committed
618
m4_ifdef([$10],[
unknown's avatar
unknown committed
619
  Status:           disabled])[]dnl
unknown's avatar
unknown committed
620
m4_ifdef([$9],[
unknown's avatar
unknown committed
621 622
  Status:           mandatory])[]dnl
])
unknown's avatar
unknown committed
623

unknown's avatar
unknown committed
624
AC_DEFUN([_PLUGIN_BUILD_TYPE],
unknown's avatar
unknown committed
625 626
[m4_ifdef([$1],[static ]m4_ifdef([$2],[and dnl
]))[]m4_ifdef([$2],[dynamic],[m4_ifdef([$1],[],[static])])])
unknown's avatar
unknown committed
627 628 629 630 631


dnl ---------------------------------------------------------------------------


unknown's avatar
unknown committed
632 633 634 635 636
AC_DEFUN([_MYSQL_EMIT_PLUGINS],[
 ifelse($#, 0, [], [$#:$1], [1:], [], [
  m4_ifdef([MYSQL_PLUGIN_ACTIONS_]AS_TR_CPP([$1]), [], [
   m4_define([MYSQL_PLUGIN_ACTIONS_]AS_TR_CPP([$1]),[ ])
  ])
unknown's avatar
unknown committed
637
    [$1] )
unknown's avatar
unknown committed
638
  m4_ifdef([MYSQL_PLUGIN_DISABLED_]AS_TR_CPP([$1]),[
unknown's avatar
unknown committed
639
      AC_MSG_ERROR([plugin $1 is disabled])
unknown's avatar
unknown committed
640
  ],[
unknown's avatar
unknown committed
641 642 643 644
    _MYSQL_EMIT_PLUGIN_ENABLE([$1], m4_bpatsubst([$1], -, _),
      [MYSQL_PLUGIN_NAME_]AS_TR_CPP([$1]),
      [MYSQL_PLUGIN_STATIC_]AS_TR_CPP([$1]),
      [MYSQL_PLUGIN_DYNAMIC_]AS_TR_CPP([$1]))
unknown's avatar
unknown committed
645
  ])
unknown's avatar
unknown committed
646
      ;;
unknown's avatar
unknown committed
647
  _MYSQL_EMIT_PLUGINS(m4_shift($@))
unknown's avatar
unknown committed
648
 ])
unknown's avatar
unknown committed
649 650
])

unknown's avatar
unknown committed
651 652 653 654 655 656 657 658 659 660
AC_DEFUN([_MYSQL_EMIT_PLUGIN_ENABLE],[
    m4_ifdef([$5],m4_ifdef([$4],[
      [mysql_plugin_]$2=yes
    ],[
      AC_MSG_WARN([$3 can only be built as a plugin])
    ]),[
      [mysql_plugin_]$2=yes
    ])      
])

unknown's avatar
unknown committed
661 662 663 664 665
AC_DEFUN([_MYSQL_EMIT_PLUGIN_DEPENDS], [
 ifelse($#, 0, [], [$#:$1], [1:], [], [
  _MYSQL_EMIT_CHECK_DEPENDS(m4_bpatsubst([$1], -, _), 
                            [__mysql_plugdepends_$1__])
  _MYSQL_EMIT_PLUGIN_DEPENDS(m4_shift($@))
unknown's avatar
unknown committed
666
 ])
unknown's avatar
unknown committed
667 668
])

unknown's avatar
unknown committed
669
AC_DEFUN([_MYSQL_EMIT_CHECK_DEPENDS], [
unknown's avatar
unknown committed
670
 m4_ifdef([$2], [
unknown's avatar
unknown committed
671 672 673 674
   if test "X[$mysql_plugin_]$1" = Xyes -a \
           "X[$with_plugin_]$1" != Xno -o \
           "X[$with_plugin_]$1" = Xyes; then
     _MYSQL_EMIT_PLUGIN_DEPENDENCIES(m4_bpatsubst($2, :, [,]))
unknown's avatar
unknown committed
675 676
   fi
 ])
unknown's avatar
unknown committed
677 678
])

unknown's avatar
unknown committed
679
AC_DEFUN([_MYSQL_EMIT_PLUGIN_DEPENDENCIES], [
unknown's avatar
unknown committed
680
 ifelse([$1], [], [], [
unknown's avatar
unknown committed
681 682 683 684 685 686 687 688 689
  m4_ifdef([MYSQL_PLUGIN_DISABLED_]AS_TR_CPP([$1]),[
       AC_MSG_ERROR([depends upon disabled plugin $1])
  ],[
       [mysql_plugin_]m4_bpatsubst([$1], -, _)=yes
       if test "X[$with_plugin_]m4_bpatsubst([$1], -, _)" = Xno; then
         AC_MSG_ERROR([depends upon disabled plugin $1])
       fi
  ])
  _MYSQL_EMIT_PLUGIN_DEPENDENCIES(m4_shift($@))
unknown's avatar
unknown committed
690
 ])
unknown's avatar
unknown committed
691 692
])

unknown's avatar
unknown committed
693 694 695 696 697 698
dnl SYNOPSIS
dnl   _MYSQL_CHECK_PLUGIN_ARGS([plugin],[plugin]...)
dnl
dnl DESCRIPTION
dnl   Emits shell script for checking configure arguments
dnl   Arguments to this macro is default value for selected plugins
unknown's avatar
unknown committed
699 700

AC_DEFUN([_MYSQL_CHECK_PLUGIN_ARGS],[
unknown's avatar
unknown committed
701 702 703 704 705 706 707 708 709 710 711 712 713 714
 __MYSQL_CHECK_PLUGIN_ARGS(m4_default([$1], [none]))
])

AC_DEFUN([__MYSQL_CHECK_PLUGIN_ARGS],[
 AC_ARG_WITH([plugins],
AS_HELP_STRING([--with-plugins=PLUGIN[[[[[,PLUGIN..]]]]]],
               [Plugins to include in mysqld. (default is: $1) Must be a
                configuration name or a comma separated list of plugins.])
AS_HELP_STRING([],
               [Available configurations are:] dnl
m4_bpatsubst([none:]m4_ifdef([__mysql_metaplugin_list__],
             __mysql_metaplugin_list__:)[all], :, [ ])[.])
AS_HELP_STRING([],
               [Available plugins are:] dnl
unknown's avatar
unknown committed
715
m4_bpatsubst(__mysql_plugin_list__, :, [ ])[.])
unknown's avatar
unknown committed
716 717 718
AS_HELP_STRING([--without-plugin-PLUGIN],
               [Disable the named plugin from being built. Otherwise, for
                plugins which are not selected for inclusion in mysqld will be
unknown's avatar
unknown committed
719
                built dynamically (if supported)])
unknown's avatar
unknown committed
720 721 722 723
AS_HELP_STRING([--with-plugin-PLUGIN],
               [Forces the named plugin to be linked into mysqld statically.]),
 [mysql_plugins="`echo $withval | tr ',.:;*[]' '       '`"],
 [mysql_plugins=['$1']])
unknown's avatar
unknown committed
724 725

m4_divert_once([HELP_VAR_END],[
unknown's avatar
unknown committed
726
Description of plugins:
unknown's avatar
unknown committed
727
MYSQL_LIST_PLUGINS])
unknown's avatar
unknown committed
728

unknown's avatar
unknown committed
729
  case "$mysql_plugins" in
unknown's avatar
unknown committed
730
  all )
unknown's avatar
unknown committed
731
    mysql_plugins='m4_bpatsubst(__mysql_plugin_list__, :, [ ])'
unknown's avatar
unknown committed
732 733
    ;;
  none )
unknown's avatar
unknown committed
734
    mysql_plugins=''
unknown's avatar
unknown committed
735 736
    ;;
m4_ifdef([__mysql_metaplugin_list__],[
unknown's avatar
unknown committed
737
_MYSQL_EMIT_METAPLUGINS(m4_bpatsubst(__mysql_metaplugin_list__, :, [,]))
unknown's avatar
unknown committed
738
])
unknown's avatar
unknown committed
739
  esac
unknown's avatar
unknown committed
740

unknown's avatar
unknown committed
741
  for plugin in $mysql_plugins; do
unknown's avatar
unknown committed
742
    case "$plugin" in
unknown's avatar
unknown committed
743
    all | none )
unknown's avatar
unknown committed
744
      AC_MSG_ERROR([bad plugin name: $plugin])
unknown's avatar
unknown committed
745
      ;;
unknown's avatar
unknown committed
746
_MYSQL_EMIT_PLUGINS(m4_bpatsubst(__mysql_plugin_list__, :, [,]))
unknown's avatar
unknown committed
747
    * )
unknown's avatar
unknown committed
748
      AC_MSG_ERROR([unknown plugin: $plugin])
unknown's avatar
unknown committed
749 750
      ;;
    esac
unknown's avatar
unknown committed
751
  done
unknown's avatar
unknown committed
752

unknown's avatar
unknown committed
753
  _MYSQL_EMIT_PLUGIN_DEPENDS(m4_bpatsubst(__mysql_plugin_list__, :, [,]))
unknown's avatar
unknown committed
754 755
])

756 757 758 759 760 761 762 763 764 765 766 767
dnl ---------------------------------------------------------------------------
dnl Macro: _MYSQL_INCLUDE_LIST
dnl
dnl SYNOPSIS
dnl   _MYSQL_INCLUDE_LIST([filename,filename...])
dnl
dnl DESCRIPTION
dnl   includes all files from the list
dnl
dnl ---------------------------------------------------------------------------
AC_DEFUN([_MYSQL_INCLUDE_LIST],[
 ifelse([$1], [], [], [
768
  m4_define([__mysql_include__],[$1])
769
  dnl We have to use builtin(), because sinclude would generate an error
unknown's avatar
unknown committed
770 771 772
  dnl "file $1 does not exists" in aclocal-1.8 - which is a bug, clearly
  dnl violating m4 specs, and which is fixed in aclocal-1.9
  builtin([include],$1)
773
  m4_undefine([__mysql_include__])
774 775 776 777
  _MYSQL_INCLUDE_LIST(m4_shift($@))
 ])
])

unknown's avatar
unknown committed
778
dnl ===========================================================================