~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to config/ac-macros/plugins.m4

  • Committer: brian
  • Date: 2008-06-25 05:29:13 UTC
  • Revision ID: brian@localhost.localdomain-20080625052913-6upwo0jsrl4lnapl
clean slate

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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 ===========================================================================