~drizzle-trunk/drizzle/development

1 by brian
clean slate
1
dnl ===========================================================================
2
dnl Support for mysql server plugins
3
dnl ===========================================================================
4
dnl
5
dnl WorkLog#3201
6
dnl
7
dnl Framework for pluggable static and dynamic plugins for mysql
8
dnl
9
dnl ---------------------------------------------------------------------------
10
dnl Macro: MYSQL_PLUGIN
11
dnl
12
dnl SYNOPSIS
13
dnl   MYSQL_PLUGIN([name],[Plugin name],
14
dnl                [Plugin description],
15
dnl                [group,group...])
16
dnl   
17
dnl DESCRIPTION
18
dnl   First declaration for a plugin (mandatory).
19
dnl   Adds plugin as member to configuration groups (if specified)
20
dnl
21
dnl ---------------------------------------------------------------------------
22
23
AC_DEFUN([MYSQL_PLUGIN],[
24
 _MYSQL_PLUGIN(
25
  [$1],
26
  [__MYSQL_PLUGIN_]AS_TR_CPP([$1])[__],
27
  m4_default([$2], [$1 plugin]),
28
  m4_default([$3], [plugin for $1]),
29
  m4_default([$4], []),
30
 )
31
])
32
33
AC_DEFUN([_MYSQL_PLUGIN],[
34
 m4_ifdef([$2], [
35
  AC_FATAL([Duplicate MYSQL_PLUGIN declaration for $3])
36
 ],[
37
  m4_define([$2], [$1])
38
  _MYSQL_PLUGAPPEND([__mysql_plugin_list__],[$1])
39
  m4_define([MYSQL_PLUGIN_NAME_]AS_TR_CPP([$1]), [$3])
40
  m4_define([MYSQL_PLUGIN_DESC_]AS_TR_CPP([$1]), [$4])
41
  _MYSQL_PLUGAPPEND_META([$1], $5)
42
  ifelse(m4_bregexp(__mysql_include__,[/plug\.in$]),-1,[],[
43
     MYSQL_PLUGIN_DIRECTORY([$1],
44
         m4_bregexp(__mysql_include__,[^\(.*\)/plug\.in$],[\1]))
45
  ])
46
 ])
47
])
48
49
50
dnl ---------------------------------------------------------------------------
51
dnl Macro: MYSQL_STORAGE_ENGINE
52
dnl
53
dnl SYNOPSIS
54
dnl   MYSQL_STORAGE_ENGINE([name],[legacy-option],[Storage engine name],
55
dnl                        [Storage engine description],[group,group...])
56
dnl
57
dnl DESCRIPTION
58
dnl   Short cut for storage engine declarations
59
dnl
60
dnl ---------------------------------------------------------------------------
61
62
AC_DEFUN([MYSQL_STORAGE_ENGINE],[
63
 MYSQL_PLUGIN([$1], [$3], [$4], [[$5]])
64
 MYSQL_PLUGIN_DEFINE([$1], [WITH_]AS_TR_CPP([$1])[_STORAGE_ENGINE])
65
 ifelse([$2],[no],[],[
66
  _MYSQL_LEGACY_STORAGE_ENGINE(
67
      m4_bpatsubst([$1], -, _),
68
      m4_bpatsubst(m4_default([$2], [$1-storage-engine]), -, _))
69
 ])
70
])
71
72
AC_DEFUN([_MYSQL_LEGACY_STORAGE_ENGINE],[
73
if test "[${with_]$2[+set}]" = set; then
74
  [with_plugin_]$1="[$with_]$2"
75
fi
76
])
77
78
79
dnl ---------------------------------------------------------------------------
80
dnl Macro: MYSQL_PLUGIN_DEFINE
81
dnl
82
dnl SYNOPSIS
83
dnl   MYSQL_PLUGIN_DEFINE([name],[MYSQL_CPP_DEFINE])
84
dnl
85
dnl DESCRIPTION
86
dnl   When a plugin is to be statically linked, define the C macro
87
dnl
88
dnl ---------------------------------------------------------------------------
89
90
AC_DEFUN([MYSQL_PLUGIN_DEFINE],[
91
 MYSQL_REQUIRE_PLUGIN([$1])
92
 m4_define([MYSQL_PLUGIN_DEFINE_]AS_TR_CPP([$1]), [$2])
93
])
94
95
96
dnl ---------------------------------------------------------------------------
97
dnl Macro: MYSQL_PLUGIN_DIRECTORY
98
dnl
99
dnl SYNOPSIS
100
dnl   MYSQL_PLUGIN_DIRECTORY([name],[plugin/dir])
101
dnl
102
dnl DESCRIPTION
103
dnl   Adds a directory to the build process
104
dnl   if it contains 'configure' it will be picked up automatically
105
dnl
106
dnl ---------------------------------------------------------------------------
107
108
AC_DEFUN([MYSQL_PLUGIN_DIRECTORY],[
109
 MYSQL_REQUIRE_PLUGIN([$1])
110
 m4_define([MYSQL_PLUGIN_DIRECTORY_]AS_TR_CPP([$1]), [$2])
111
])
112
113
114
dnl ---------------------------------------------------------------------------
115
dnl Macro: MYSQL_PLUGIN_STATIC
116
dnl
117
dnl SYNOPSIS
118
dnl   MYSQL_PLUGIN_STATIC([name],[libmyplugin.a])
119
dnl
120
dnl DESCRIPTION
121
dnl   Declare the name for the static library 
122
dnl
123
dnl ---------------------------------------------------------------------------
124
125
AC_DEFUN([MYSQL_PLUGIN_STATIC],[
126
 MYSQL_REQUIRE_PLUGIN([$1])
127
 m4_define([MYSQL_PLUGIN_STATIC_]AS_TR_CPP([$1]), [$2])
128
])
129
130
131
dnl ---------------------------------------------------------------------------
132
dnl Macro: MYSQL_PLUGIN_DYNAMIC
133
dnl
134
dnl SYNOPSIS
135
dnl  MYSQL_PLUGIN_DYNAMIC([name],[myplugin.la])
136
dnl
137
dnl DESCRIPTION
138
dnl   Declare the name for the shared library
139
dnl
140
dnl ---------------------------------------------------------------------------
141
142
AC_DEFUN([MYSQL_PLUGIN_DYNAMIC],[
143
 MYSQL_REQUIRE_PLUGIN([$1])
144
 m4_define([MYSQL_PLUGIN_DYNAMIC_]AS_TR_CPP([$1]), [$2])
145
])
146
147
148
dnl ---------------------------------------------------------------------------
149
dnl Macro: MYSQL_PLUGIN_MANDATORY
150
dnl
151
dnl SYNOPSIS
152
dnl   MYSQL_PLUGIN_MANDATORY([name])
153
dnl
154
dnl DESCRIPTION
155
dnl   Marks the specified plugin as a mandatory plugin
156
dnl
157
dnl ---------------------------------------------------------------------------
158
159
AC_DEFUN([MYSQL_PLUGIN_MANDATORY],[
160
 MYSQL_REQUIRE_PLUGIN([$1])
161
 _MYSQL_PLUGIN_MANDATORY([$1],
162
  [MYSQL_PLUGIN_MANDATORY_]AS_TR_CPP([$1]),
163
  [MYSQL_PLUGIN_DISABLED_]AS_TR_CPP([$1])
164
 )
165
])
166
167
AC_DEFUN([_MYSQL_PLUGIN_MANDATORY],[
168
 m4_define([$2], [yes])
169
 m4_ifdef([$3], [
170
  AC_FATAL([mandatory plugin $1 has been disabled])
171
  m4_undefine([$2])
172
 ])
173
])
174
175
176
dnl ---------------------------------------------------------------------------
177
dnl Macro: MYSQL_PLUGIN_DISABLED
178
dnl
179
dnl SYNOPSIS
180
dnl   MYSQL_PLUGIN_DISABLED([name])
181
dnl
182
dnl DESCRIPTION
183
dnl   Marks the specified plugin as a disabled plugin
184
dnl
185
dnl ---------------------------------------------------------------------------
186
187
AC_DEFUN([MYSQL_PLUGIN_DISABLED],[
188
 MYSQL_REQUIRE_PLUGIN([$1])
189
 _MYSQL_PLUGIN_DISABLED([$1], 
190
  [MYSQL_PLUGIN_DISABLED_]AS_TR_CPP([$1]),
191
  [MYSQL_PLUGIN_MANDATORY_]AS_TR_CPP([$1])
192
 )
193
])
194
195
AC_DEFUN([_MYSQL_PLUGIN_DISABLED],[
196
 m4_define([$2], [yes])
197
 m4_ifdef([$3], [
198
  AC_FATAL([attempt to disable mandatory plugin $1])
199
  m4_undefine([$2])
200
 ])
201
])
202
203
204
dnl ---------------------------------------------------------------------------
205
dnl Macro: MYSQL_PLUGIN_DEPENDS
206
dnl
207
dnl SYNOPSIS
208
dnl   MYSQL_PLUGIN_DEPENDS([name],[prereq,prereq...])
209
dnl
210
dnl DESCRIPTION
211
dnl   Enables other plugins neccessary for the named plugin
212
dnl   Dependency checking is not recursive so if any 
213
dnl   required plugin requires further plugins, list them
214
dnl   here too!
215
dnl
216
dnl ---------------------------------------------------------------------------
217
218
AC_DEFUN([MYSQL_PLUGIN_DEPENDS],[
219
 MYSQL_REQUIRE_PLUGIN([$1])
220
 ifelse($#, 2, [
221
  _MYSQL_PLUGIN_DEPEND([$1], $2)
222
 ], [
223
  AC_FATAL([bad number of arguments])
224
 ])
225
])
226
227
AC_DEFUN([_MYSQL_PLUGIN_DEPEND],[
228
 ifelse($#, 1, [], [$#:$2], [2:], [], [
229
  MYSQL_REQUIRE_PLUGIN([$2])
230
  _MYSQL_PLUGAPPEND([__mysql_plugdepends_$1__],[$2])
231
  _MYSQL_PLUGIN_DEPEND([$1], m4_shift(m4_shift($@)))
232
 ])
233
])
234
235
236
dnl ---------------------------------------------------------------------------
237
dnl Macro: MYSQL_PLUGIN_ACTIONS
238
dnl
239
dnl SYNOPSIS
240
dnl   MYSQL_PLUGIN_ACTIONS([name],[PLUGIN_CONFIGURE_STUFF])
241
dnl
242
dnl DESCRIPTION
243
dnl   Declares additional autoconf actions required to configure the plugin
244
dnl
245
dnl ---------------------------------------------------------------------------
246
247
AC_DEFUN([MYSQL_PLUGIN_ACTIONS],[
248
 MYSQL_REQUIRE_PLUGIN([$1])
249
 m4_ifdef([$2],[
250
   m4_define([MYSQL_PLUGIN_ACTIONS_]AS_TR_CPP([$1]),m4_defn([$2]))
251
 ],[
252
   m4_define([MYSQL_PLUGIN_ACTIONS_]AS_TR_CPP([$1]), [$2])
253
 ])
254
])
255
256
dnl ---------------------------------------------------------------------------
257
dnl Macro: MYSQL_PLUGIN_DEPENDS_ON_MYSQL_INTERNALS
258
dnl
259
dnl SYNOPSIS
260
dnl   MYSQL_PLUGIN_DEPENDS_ON_MYSQL_INTERNALS([name],[file name])
261
dnl
262
dnl DESCRIPTION
263
dnl   Some modules in plugins keep dependance on structures
264
dnl   declared in sql/ (THD class usually)
265
dnl   That has to be fixed in the future, but until then
266
dnl   we have to recompile these modules when we want to
267
dnl   to compile server parts with the different #defines
268
dnl   Normally it happens when we compile the embedded server
269
dnl   Thus one should mark such files in his handler using this macro
270
dnl    (currently only one such a file per plugin is supported)
271
dnl
272
dnl ---------------------------------------------------------------------------
273
274
AC_DEFUN([MYSQL_PLUGIN_DEPENDS_ON_MYSQL_INTERNALS],[
275
 MYSQL_REQUIRE_PLUGIN([$1])
276
 m4_define([MYSQL_PLUGIN_DEPENDS_ON_MYSQL_INTERNALS_]AS_TR_CPP([$1]), [$2])
277
])
278
279
dnl ---------------------------------------------------------------------------
280
dnl Macro: MYSQL_CONFIGURE_PLUGINS
281
dnl
282
dnl SYNOPSIS
283
dnl   MYSQL_PLUGIN_DEPENDS([name,name...])
284
dnl
285
dnl DESCRIPTION
286
dnl   Used last, emits all required shell code to configure the plugins
287
dnl   Argument is a list of default plugins or meta-plugin
288
dnl
289
dnl ---------------------------------------------------------------------------
290
291
AC_DEFUN([MYSQL_CONFIGURE_PLUGINS],[
292
 m4_ifdef([__mysql_plugin_configured__],[
293
   AC_FATAL([cannot use [MYSQL_CONFIGURE_PLUGINS] multiple times])
294
 ],[
295
   m4_define([__mysql_plugin_configured__],[done])
296
   _MYSQL_INCLUDE_LIST(
297
   m4_bpatsubst(m4_esyscmd([ls plugin/*/plug.in storage/*/plug.in 2>/dev/null]),
298
[[ 
299
]],[,]))
300
   m4_ifdef([__mysql_plugin_list__],[
301
    _MYSQL_CHECK_PLUGIN_ARGS([$1])
302
    _MYSQL_CONFIGURE_PLUGINS(m4_bpatsubst(__mysql_plugin_list__, :, [,]))
303
    _MYSQL_EMIT_PLUGIN_ACTIONS(m4_bpatsubst(__mysql_plugin_list__, :, [,]))
304
    AC_SUBST([mysql_se_dirs])
305
    AC_SUBST([mysql_pg_dirs])
306
    AC_SUBST([mysql_se_unittest_dirs])
307
    AC_SUBST([mysql_pg_unittest_dirs])
308
    AC_SUBST([condition_dependent_plugin_modules])
309
    AC_SUBST([condition_dependent_plugin_objects])
310
    AC_SUBST([condition_dependent_plugin_links])
311
    AC_SUBST([condition_dependent_plugin_includes])
312
   ])
313
 ])
314
])
315
316
AC_DEFUN([_MYSQL_CONFIGURE_PLUGINS],[
317
 ifelse($#, 0, [], $#, 1, [
318
  _MYSQL_EMIT_CHECK_PLUGIN([$1])
319
 ],[
320
  _MYSQL_EMIT_CHECK_PLUGIN([$1])
321
  _MYSQL_CONFIGURE_PLUGINS(m4_shift($@))
322
 ])
323
])
324
325
AC_DEFUN([_MYSQL_EMIT_CHECK_PLUGIN],[
326
 __MYSQL_EMIT_CHECK_PLUGIN(
327
  [$1],
328
  m4_bpatsubst([$1], -, _),
329
  [MYSQL_PLUGIN_NAME_]AS_TR_CPP([$1]),
330
  [MYSQL_PLUGIN_DESC_]AS_TR_CPP([$1]),
331
  [MYSQL_PLUGIN_DEFINE_]AS_TR_CPP([$1]),
332
  [MYSQL_PLUGIN_DIRECTORY_]AS_TR_CPP([$1]),
333
  [MYSQL_PLUGIN_STATIC_]AS_TR_CPP([$1]),
334
  [MYSQL_PLUGIN_DYNAMIC_]AS_TR_CPP([$1]),
335
  [MYSQL_PLUGIN_MANDATORY_]AS_TR_CPP([$1]),
336
  [MYSQL_PLUGIN_DISABLED_]AS_TR_CPP([$1]),
337
  [MYSQL_PLUGIN_DEPENDS_ON_MYSQL_INTERNALS_]AS_TR_CPP([$1]),
338
  [MYSQL_PLUGIN_ACTIONS_]AS_TR_CPP([$1])
339
 )
340
])
341
342
AC_DEFUN([__MYSQL_EMIT_CHECK_PLUGIN],[
343
 m4_ifdef([$5],[
344
  AH_TEMPLATE($5, [Include ]$4[ into mysqld])
345
 ])
346
 AC_MSG_CHECKING([whether to use ]$3)
347
 mysql_use_plugin_dir=""
348
 m4_ifdef([$10],[
349
  if test "X[$mysql_plugin_]$2" = Xyes -a \
350
          "X[$with_plugin_]$2" != Xno -o \
351
          "X[$with_plugin_]$2" = Xyes; then
352
    AC_MSG_RESULT([error])
353
    AC_MSG_ERROR([disabled])
354
  fi
355
  AC_MSG_RESULT([no])
356
 ],[
357
  m4_ifdef([$9],[
358
   if test "X[$with_plugin_]$2" = Xno; then
359
     AC_MSG_RESULT([error])
360
     AC_MSG_ERROR([cannot disable mandatory plugin])
361
   fi
362
   [mysql_plugin_]$2=yes
363
  ],[
364
   case "$with_mysqld_ldflags " in
365
     *"-all-static "*)
366
       # No need to build shared plugins when mysqld is linked with
367
       # -all-static as it won't be able to load them.
368
       if test "X[$mysql_plugin_]$2" != Xyes -a \
369
               "X[$with_plugin_]$2" != Xyes; then
370
	     [with_plugin_]$2=no
371
	   fi
372
     ;;
373
   esac
374
  ])
375
  if test "X[$with_plugin_]$2" = Xno; then
376
    AC_MSG_RESULT([no])
377
  else
378
    m4_ifdef([$8],m4_ifdef([$7],[],[[with_plugin_]$2='']))
379
    if test "X[$mysql_plugin_]$2" != Xyes -a \
380
            "X[$with_plugin_]$2" != Xyes; then
381
      m4_ifdef([$8],[
382
       m4_ifdef([$6],[
383
         if test -d "$srcdir/$6" ; then
384
           mysql_use_plugin_dir="$6"
385
       ])
386
       AC_SUBST([plugin_]$2[_shared_target], "$8")
387
       AC_SUBST([plugin_]$2[_static_target], [""])
388
       [with_plugin_]$2=yes
389
       AC_MSG_RESULT([plugin])
390
       m4_ifdef([$6],[
391
         else
392
           [mysql_plugin_]$2=no
393
           AC_MSG_RESULT([no])
394
         fi
395
       ])
396
      ],[
397
       [with_plugin_]$2=no
398
       AC_MSG_RESULT([no])
399
      ])
400
    else
401
      m4_ifdef([$7],[
402
       ifelse(m4_bregexp($7, [^lib[^.]+\.a$]), -2, [
403
dnl change above "-2" to "0" to enable this section
404
dnl Although this is "pretty", it breaks libmysqld build
405
        m4_ifdef([$6],[
406
         mysql_use_plugin_dir="$6"
407
         mysql_plugin_libs="$mysql_plugin_libs -L[\$(top_builddir)]/$6"
408
        ])
409
        mysql_plugin_libs="$mysql_plugin_libs dnl
410
[-l]m4_bregexp($7, [^lib\([^.]+\)], [\1])"
411
       ], m4_bregexp($7, [^\\\$]), 0, [
412
        m4_ifdef([$6],[
413
         mysql_use_plugin_dir="$6"
414
        ])
415
        mysql_plugin_libs="$mysql_plugin_libs $7"
416
       ], [
417
        m4_ifdef([$6],[
418
         mysql_use_plugin_dir="$6"
419
         mysql_plugin_libs="$mysql_plugin_libs \$(top_builddir)/$6/$7"
420
        ],[
421
         mysql_plugin_libs="$mysql_plugin_libs $7"
422
        ])
423
       ])
424
       m4_ifdef([$5],[
425
        AC_DEFINE($5)
426
       ])
427
       AC_SUBST([plugin_]$2[_static_target], "$7")
428
       AC_SUBST([plugin_]$2[_shared_target], [""])
429
      ],[
430
       m4_ifdef([$6],[
431
        AC_MSG_RESULT([error])
432
        AC_MSG_ERROR([Plugin $1 does not support static linking])
433
       ],[
434
        m4_ifdef([$5],[
435
         AC_DEFINE($5)
436
         AC_SUBST([plugin_]$2[_static_target], ["yes"])
437
         AC_SUBST([plugin_]$2[_shared_target], [""])
438
        ])
439
       ])
440
      ])
441
      mysql_plugin_defs="$mysql_plugin_defs, [builtin_]$2[_plugin]"
442
      [with_plugin_]$2=yes
443
      AC_MSG_RESULT([yes])
444
      m4_ifdef([$11],[
445
       condition_dependent_plugin_modules="$condition_dependent_plugin_modules m4_bregexp($11, [[^/]+$], [\&])"
446
       condition_dependent_plugin_objects="$condition_dependent_plugin_objects m4_bregexp($11, [[^/]+\.], [\&o])"
447
       condition_dependent_plugin_links="$condition_dependent_plugin_links $6/$11"
448
       condition_dependent_plugin_includes="$condition_dependent_plugin_includes -I[\$(top_srcdir)]/$6/m4_bregexp($11, [^.+[/$]], [\&])"
449
      ])
450
    fi
451
    m4_ifdef([$6],[
452
      if test -n "$mysql_use_plugin_dir" ; then
453
        mysql_plugin_dirs="$mysql_plugin_dirs $6"
454
        m4_syscmd(test -f "$6/configure")
455
        ifelse(m4_sysval, 0,
456
          [AC_CONFIG_SUBDIRS($6)],
457
          [AC_CONFIG_FILES($6/Makefile)]
458
        )
459
        ifelse(m4_substr($6, 0, 8), [storage/],
460
          [
461
            [mysql_se_dirs="$mysql_se_dirs ]m4_substr($6, 8)"
462
             mysql_se_unittest_dirs="$mysql_se_unittest_dirs ../$6"
463
          ],
464
          m4_substr($6, 0, 7), [plugin/],
465
          [
466
            [mysql_pg_dirs="$mysql_pg_dirs ]m4_substr($6, 7)"
467
             mysql_pg_unittest_dirs="$mysql_pg_unittest_dirs ../$6"
468
          ],
469
          [AC_FATAL([don't know how to handle plugin dir ]$6)])
470
      fi
471
    ])
472
  fi
473
 ])
474
])
475
476
AC_DEFUN([_MYSQL_EMIT_PLUGIN_ACTIONS],[
477
 ifelse($#, 0, [], $#, 1, [
478
  _MYSQL_EMIT_PLUGIN_ACTION([$1])
479
 ],[
480
  _MYSQL_EMIT_PLUGIN_ACTION([$1])
481
  _MYSQL_EMIT_PLUGIN_ACTIONS(m4_shift($@))
482
 ])
483
])
484
485
AC_DEFUN([_MYSQL_EMIT_PLUGIN_ACTION],[
486
 __MYSQL_EMIT_PLUGIN_ACTION(
487
  [$1],
488
  m4_bpatsubst([$1], -, _),
489
  [MYSQL_PLUGIN_DISABLED_]AS_TR_CPP([$1]),
490
  [MYSQL_PLUGIN_ACTIONS_]AS_TR_CPP([$1])
491
 )
492
])
493
494
495
AC_DEFUN([__MYSQL_EMIT_PLUGIN_ACTION],[
496
 m4_ifdef([$3], [], [
497
  if test "X[$with_plugin_]$2" = Xyes; then
498
    if test "X[$plugin_]$2[_static_target]" = X -a \
499
            "X[$plugin_]$2[_shared_target]" = X; then
500
      AC_MSG_ERROR([that's strange, $1 failed sanity check])
501
    fi
502
    $4
503
  fi
504
 ])
505
])
506
507
508
509
dnl ===========================================================================
510
dnl  Private helper macros
511
dnl ===========================================================================
512
513
514
dnl SYNOPSIS
515
dnl   MYSQL_REQUIRE_PLUGIN([name])
516
dnl
517
dnl DESCRIPTION
518
dnl   Checks that the specified plugin does exist
519
520
AC_DEFUN([MYSQL_REQUIRE_PLUGIN],[
521
 _MYSQL_REQUIRE_PLUGIN([$1], [__MYSQL_PLUGIN_]AS_TR_CPP([$1])[__])
522
])
523
524
define([_MYSQL_REQUIRE_PLUGIN],[
525
 ifdef([$2],[
526
  ifelse($2, [$1], [], [
527
   AC_FATAL([Misspelt MYSQL_PLUGIN declaration for $1])
528
  ])
529
 ],[
530
  AC_FATAL([Missing MYSQL_PLUGIN declaration for $1])
531
 ])
532
])
533
534
535
dnl ---------------------------------------------------------------------------
536
537
538
dnl SYNOPSIS
539
dnl   _MYSQL_EMIT_METAPLUGINS([name,name...])
540
dnl
541
dnl DESCRIPTION
542
dnl   Emits shell code for metaplugins
543
544
AC_DEFUN([_MYSQL_EMIT_METAPLUGINS], [ifelse($#, 0, [], $#, 1,
545
[_MYSQL_EMIT_METAPLUGIN([$1], [__mysql_]m4_bpatsubst($1, -, _)[_plugins__])
546
],
547
[_MYSQL_EMIT_METAPLUGIN([$1], [__mysql_]m4_bpatsubst($1, -, _)[_plugins__])
548
_MYSQL_EMIT_METAPLUGINS(m4_shift($@))])
549
])
550
551
AC_DEFUN([_MYSQL_EMIT_METAPLUGIN], [
552
  [$1] )
553
m4_ifdef([$2], [
554
    mysql_plugins='m4_bpatsubst($2, :, [ ])'
555
],[
556
    mysql_plugins=''
557
])
558
    ;;
559
])
560
561
562
dnl ---------------------------------------------------------------------------
563
564
565
dnl SYNOPSIS
566
dnl   _MYSQL_PLUGAPPEND([name],[to-append])
567
dnl
568
dnl DESCRIPTION
569
dnl   Helper macro for appending to colon-delimited lists
570
dnl   Optinal 3rd argument is for actions only required when defining
571
dnl   macro named for the first time.
572
573
AC_DEFUN([_MYSQL_PLUGAPPEND],[
574
 m4_ifdef([$1],[
575
  m4_define([__plugin_append_tmp__], m4_defn([$1]))
576
  m4_undefine([$1])
577
  m4_define([$1], __plugin_append_tmp__[:$2])
578
  m4_undefine([__plugin_append_tmp__])
579
 ],[
580
  m4_define([$1], [$2])
581
  $3
582
 ])
583
])
584
585
586
dnl SYNOPSIS
587
dnl   _MYSQL_PLUGAPPEND_META([name],[meta,meta...])
588
dnl
589
dnl DESCRIPTION
590
dnl   Helper macro for adding plugins to meta plugins
591
592
AC_DEFUN([_MYSQL_PLUGAPPEND_META],[
593
 ifelse($#, 1, [], [$#:$2], [2:], [], [$2], [all], [
594
  AC_FATAL([protected plugin group: all])
595
 ], [$2], [none], [
596
  AC_FATAL([protected plugin group: none])
597
 ],[
598
  _MYSQL_PLUGAPPEND([__mysql_$1_configs__],[$2])
599
  _MYSQL_PLUGAPPEND([__mysql_]m4_bpatsubst($2, -, _)[_plugins__],[$1], [
600
   _MYSQL_PLUGAPPEND([__mysql_metaplugin_list__],[$2])
601
  ])
602
  _MYSQL_PLUGAPPEND_META([$1], m4_shift(m4_shift($@)))
603
 ])
604
])
605
606
607
dnl ---------------------------------------------------------------------------
608
609
610
dnl SYNOPSIS
611
dnl   MYSQL_LIST_PLUGINS
612
dnl
613
dnl DESCRIPTION
614
dnl   Emits formatted list of declared plugins
615
616
AC_DEFUN([MYSQL_LIST_PLUGINS],[dnl
617
 m4_ifdef([__mysql_plugin_list__],[dnl
618
  _MYSQL_LIST_PLUGINS(m4_bpatsubst(__mysql_plugin_list__, :, [,]))dnl
619
 ])dnl
620
])
621
622
AC_DEFUN([_MYSQL_LIST_PLUGINS],[dnl
623
 ifelse($#, 0, [], $#, 1, [dnl
624
  MYSQL_SHOW_PLUGIN([$1])dnl
625
 ],[dnl
626
  MYSQL_SHOW_PLUGIN([$1])dnl
627
  _MYSQL_LIST_PLUGINS(m4_shift($@))dnl
628
 ])dnl
629
])
630
631
AC_DEFUN([MYSQL_SHOW_PLUGIN],[
632
 _MYSQL_SHOW_PLUGIN(
633
  [$1],
634
  [$1-plugin],
635
  [MYSQL_PLUGIN_NAME_]AS_TR_CPP([$1]),
636
  [MYSQL_PLUGIN_DESC_]AS_TR_CPP([$1]),
637
  [MYSQL_PLUGIN_DEFINE_]AS_TR_CPP([$1]),
638
  [MYSQL_PLUGIN_DIRECTORY_]AS_TR_CPP([$1]),
639
  [MYSQL_PLUGIN_STATIC_]AS_TR_CPP([$1]),
640
  [MYSQL_PLUGIN_DYNAMIC_]AS_TR_CPP([$1]),
641
  [MYSQL_PLUGIN_MANDATORY_]AS_TR_CPP([$1]),
642
  [MYSQL_PLUGIN_DISABLED_]AS_TR_CPP([$1]),
643
  [MYSQL_PLUGIN_ACTIONS_]AS_TR_CPP([$1]),
644
  __mysql_[$1]_configs__,
645
 )
646
])
647
648
AC_DEFUN([_MYSQL_SHOW_PLUGIN],[dnl
649
  === $3 ===
650
  Plugin Name:      [$1]
651
  Description:      $4
652
  Supports build:   _PLUGIN_BUILD_TYPE([$7],[$8])[]dnl
653
m4_ifdef([$12],[
654
  Configurations:   m4_bpatsubst($12, :, [, ])])[]dnl
655
m4_ifdef([$10],[
656
  Status:           disabled])[]dnl
657
m4_ifdef([$9],[
658
  Status:           mandatory])[]dnl
659
])
660
661
AC_DEFUN([_PLUGIN_BUILD_TYPE],
662
[m4_ifdef([$1],[static ]m4_ifdef([$2],[and dnl
663
]))[]m4_ifdef([$2],[dynamic],[m4_ifdef([$1],[],[static])])])
664
665
666
dnl ---------------------------------------------------------------------------
667
668
669
AC_DEFUN([_MYSQL_EMIT_PLUGINS],[
670
 ifelse($#, 0, [], [$#:$1], [1:], [], [
671
  m4_ifdef([MYSQL_PLUGIN_ACTIONS_]AS_TR_CPP([$1]), [], [
672
   m4_define([MYSQL_PLUGIN_ACTIONS_]AS_TR_CPP([$1]),[ ])
673
  ])
674
    [$1] )
675
  m4_ifdef([MYSQL_PLUGIN_DISABLED_]AS_TR_CPP([$1]),[
676
      AC_MSG_ERROR([plugin $1 is disabled])
677
  ],[
678
    _MYSQL_EMIT_PLUGIN_ENABLE([$1], m4_bpatsubst([$1], -, _),
679
      [MYSQL_PLUGIN_NAME_]AS_TR_CPP([$1]),
680
      [MYSQL_PLUGIN_STATIC_]AS_TR_CPP([$1]),
681
      [MYSQL_PLUGIN_DYNAMIC_]AS_TR_CPP([$1]))
682
  ])
683
      ;;
684
  _MYSQL_EMIT_PLUGINS(m4_shift($@))
685
 ])
686
])
687
688
AC_DEFUN([_MYSQL_EMIT_PLUGIN_ENABLE],[
689
    m4_ifdef([$5],m4_ifdef([$4],[
690
      [mysql_plugin_]$2=yes
691
    ],[
692
      AC_MSG_WARN([$3 can only be built as a plugin])
693
    ]),[
694
      [mysql_plugin_]$2=yes
695
    ])      
696
])
697
698
AC_DEFUN([_MYSQL_EMIT_PLUGIN_DEPENDS], [
699
 ifelse($#, 0, [], [$#:$1], [1:], [], [
700
  _MYSQL_EMIT_CHECK_DEPENDS(m4_bpatsubst([$1], -, _), 
701
                            [__mysql_plugdepends_$1__])
702
  _MYSQL_EMIT_PLUGIN_DEPENDS(m4_shift($@))
703
 ])
704
])
705
706
AC_DEFUN([_MYSQL_EMIT_CHECK_DEPENDS], [
707
 m4_ifdef([$2], [
708
   if test "X[$mysql_plugin_]$1" = Xyes -a \
709
           "X[$with_plugin_]$1" != Xno -o \
710
           "X[$with_plugin_]$1" = Xyes; then
711
     _MYSQL_EMIT_PLUGIN_DEPENDENCIES(m4_bpatsubst($2, :, [,]))
712
   fi
713
 ])
714
])
715
716
AC_DEFUN([_MYSQL_EMIT_PLUGIN_DEPENDENCIES], [
717
 ifelse([$1], [], [], [
718
  m4_ifdef([MYSQL_PLUGIN_DISABLED_]AS_TR_CPP([$1]),[
719
       AC_MSG_ERROR([depends upon disabled plugin $1])
720
  ],[
721
       [mysql_plugin_]m4_bpatsubst([$1], -, _)=yes
722
       if test "X[$with_plugin_]m4_bpatsubst([$1], -, _)" = Xno; then
723
         AC_MSG_ERROR([depends upon disabled plugin $1])
724
       fi
725
  ])
726
  _MYSQL_EMIT_PLUGIN_DEPENDENCIES(m4_shift($@))
727
 ])
728
])
729
730
dnl SYNOPSIS
731
dnl   _MYSQL_CHECK_PLUGIN_ARGS([plugin],[plugin]...)
732
dnl
733
dnl DESCRIPTION
734
dnl   Emits shell script for checking configure arguments
735
dnl   Arguments to this macro is default value for selected plugins
736
737
AC_DEFUN([_MYSQL_CHECK_PLUGIN_ARGS],[
738
 __MYSQL_CHECK_PLUGIN_ARGS(m4_default([$1], [none]))
739
])
740
741
AC_DEFUN([__MYSQL_CHECK_PLUGIN_ARGS],[
742
 AC_ARG_WITH([plugins],
743
AS_HELP_STRING([--with-plugins=PLUGIN[[[[[,PLUGIN..]]]]]],
744
               [Plugins to include in mysqld. (default is: $1) Must be a
745
                configuration name or a comma separated list of plugins.])
746
AS_HELP_STRING([],
747
               [Available configurations are:] dnl
748
m4_bpatsubst([none:]m4_ifdef([__mysql_metaplugin_list__],
749
             __mysql_metaplugin_list__:)[all], :, [ ])[.])
750
AS_HELP_STRING([],
751
               [Available plugins are:] dnl
752
m4_bpatsubst(__mysql_plugin_list__, :, [ ])[.])
753
AS_HELP_STRING([--without-plugin-PLUGIN],
754
               [Disable the named plugin from being built. Otherwise, for
755
                plugins which are not selected for inclusion in mysqld will be
756
                built dynamically (if supported)])
757
AS_HELP_STRING([--with-plugin-PLUGIN],
758
               [Forces the named plugin to be linked into mysqld statically.]),
759
 [mysql_plugins="`echo $withval | tr ',.:;*[]' '       '`"],
760
 [mysql_plugins=['$1']])
761
762
m4_divert_once([HELP_VAR_END],[
763
Description of plugins:
764
MYSQL_LIST_PLUGINS])
765
766
  case "$mysql_plugins" in
767
  all )
768
    mysql_plugins='m4_bpatsubst(__mysql_plugin_list__, :, [ ])'
769
    ;;
770
  none )
771
    mysql_plugins=''
772
    ;;
773
m4_ifdef([__mysql_metaplugin_list__],[
774
_MYSQL_EMIT_METAPLUGINS(m4_bpatsubst(__mysql_metaplugin_list__, :, [,]))
775
])
776
  esac
777
778
  for plugin in $mysql_plugins; do
779
    case "$plugin" in
780
    all | none )
781
      AC_MSG_ERROR([bad plugin name: $plugin])
782
      ;;
783
_MYSQL_EMIT_PLUGINS(m4_bpatsubst(__mysql_plugin_list__, :, [,]))
784
    * )
785
      AC_MSG_ERROR([unknown plugin: $plugin])
786
      ;;
787
    esac
788
  done
789
790
  _MYSQL_EMIT_PLUGIN_DEPENDS(m4_bpatsubst(__mysql_plugin_list__, :, [,]))
791
])
792
793
dnl ---------------------------------------------------------------------------
794
dnl Macro: _MYSQL_INCLUDE_LIST
795
dnl
796
dnl SYNOPSIS
797
dnl   _MYSQL_INCLUDE_LIST([filename,filename...])
798
dnl
799
dnl DESCRIPTION
800
dnl   includes all files from the list
801
dnl
802
dnl ---------------------------------------------------------------------------
803
AC_DEFUN([_MYSQL_INCLUDE_LIST],[
804
 ifelse([$1], [], [], [
805
  m4_define([__mysql_include__],[$1])
806
  dnl We have to use builtin(), because sinclude would generate an error
807
  dnl "file $1 does not exists" in aclocal-1.8 - which is a bug, clearly
808
  dnl violating m4 specs, and which is fixed in aclocal-1.9
809
  builtin([include],$1)
810
  m4_undefine([__mysql_include__])
811
  _MYSQL_INCLUDE_LIST(m4_shift($@))
812
 ])
813
])
814
815
dnl ===========================================================================