~drizzle-trunk/drizzle/development

992.1.21 by Monty Taylor
First pass at replacing plugin.m4.
1
#!/usr/bin/python
2
992.1.25 by Monty Taylor
Moved myisam to new plugin system.
3
#  Copyright (C) 2009 Sun Microsystems
4
#
5
#  This program is free software; you can redistribute it and/or modify
6
#  it under the terms of the GNU General Public License as published by
7
#  the Free Software Foundation; version 2 of the License.
8
#
9
#  This program is distributed in the hope that it will be useful,
10
#  but WITHOUT ANY WARRANTY; without even the implied warranty of
11
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12
#  GNU General Public License for more details.
13
#
14
#  You should have received a copy of the GNU General Public License
15
#  along with this program; if not, write to the Free Software
16
#  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
17
1497.3.15 by Monty Taylor
Merged in some stuff from pandora-build.
18
pandora_plugin_file = 'config/pandora-plugin.ini'
992.1.25 by Monty Taylor
Moved myisam to new plugin system.
19
1497.3.15 by Monty Taylor
Merged in some stuff from pandora-build.
20
# Find plugins in the tree and add them to the build system
992.1.21 by Monty Taylor
First pass at replacing plugin.m4.
21
1192.4.1 by Robert Collins
Merged buildsystem change from lifeless.
22
import ConfigParser, os, sys
1241.10.1 by Monty Taylor
Added ability to specify all of the meta information in the plugin.ini file. This allows us to have a streamlined out-of-tree build.
23
import datetime, time
1377.3.6 by Monty Taylor
Set the default plugin version for plugins not specifying a version to be
24
import subprocess
992.1.21 by Monty Taylor
First pass at replacing plugin.m4.
25
1497.3.15 by Monty Taylor
Merged in some stuff from pandora-build.
26
plugin_am_file=None
27
plugin_ac_file=None
1794.2.5 by Monty Taylor
Added support to pandora for finding and including per-plugin documentation.
28
plugin_doc_index=None
992.1.21 by Monty Taylor
First pass at replacing plugin.m4.
29
1093.9.13 by Monty Taylor
pandora-build v0.42 - Started splitting out plugin system into pandora-build
30
class ChangeProtectedFile(object):
31
32
  def __init__(self, fname):
1192.3.11 by Monty Taylor
Fixed a few distcheck issues.
33
    self.bogus_file= False
1093.9.13 by Monty Taylor
pandora-build v0.42 - Started splitting out plugin system into pandora-build
34
    self.real_fname= fname
35
    self.new_fname= "%s.new" % fname
1192.3.11 by Monty Taylor
Fixed a few distcheck issues.
36
    try:
37
      self.new_file= open(self.new_fname,'w+')
38
    except IOError:
39
      self.bogus_file= True
1093.9.13 by Monty Taylor
pandora-build v0.42 - Started splitting out plugin system into pandora-build
40
41
  def write(self, text):
1192.3.11 by Monty Taylor
Fixed a few distcheck issues.
42
    if not self.bogus_file:
43
      self.new_file.write(text)
1093.9.13 by Monty Taylor
pandora-build v0.42 - Started splitting out plugin system into pandora-build
44
45
  # We've written all of this out into .new files, now we only copy them
1497.3.15 by Monty Taylor
Merged in some stuff from pandora-build.
46
  # over the old ones if they are different, so that we don't cause
1093.9.13 by Monty Taylor
pandora-build v0.42 - Started splitting out plugin system into pandora-build
47
  # unnecessary recompiles
48
  def close(self):
1192.4.1 by Robert Collins
Merged buildsystem change from lifeless.
49
    """Return True if the file had changed."""
1192.3.11 by Monty Taylor
Fixed a few distcheck issues.
50
    if self.bogus_file:
51
      return
1192.4.1 by Robert Collins
Merged buildsystem change from lifeless.
52
    self.new_file.seek(0)
53
    new_content = self.new_file.read()
1093.9.13 by Monty Taylor
pandora-build v0.42 - Started splitting out plugin system into pandora-build
54
    self.new_file.close()
1192.4.1 by Robert Collins
Merged buildsystem change from lifeless.
55
    try:
56
        old_file = file(self.real_fname, 'r')
57
        old_content = old_file.read()
58
        old_file.close()
59
    except IOError:
60
        old_content = None
61
    if new_content != old_content:
62
      if old_content != None:
1093.9.13 by Monty Taylor
pandora-build v0.42 - Started splitting out plugin system into pandora-build
63
        os.unlink(self.real_fname)
64
      os.rename(self.new_fname, self.real_fname)
1192.4.1 by Robert Collins
Merged buildsystem change from lifeless.
65
      return True
66
    else:
67
        try:
68
          os.unlink(self.new_fname)
69
        except:
70
          pass
71
72
1192.3.28 by Monty Taylor
pandora-build v0.72 - Moved remaining hard-coded tests into pandora-build
73
def write_external_configure(plugin, plugin_file):
74
  """Write the initial bits of the configure.ac file"""
75
  if not os.path.exists('m4'):
76
    os.mkdir('m4')
77
  plugin_file.write("""
78
AC_PREREQ(2.59)dnl		Minimum Autoconf version required.
79
AC_INIT([%(name)s],[%(version)s],[%(url)s])
80
AC_CONFIG_SRCDIR([%(main_source)s])
81
AC_CONFIG_AUX_DIR(config)
82
1241.9.5 by Monty Taylor
Fixed the plugin script to not bork plugin visibility.
83
PANDORA_CANONICAL_TARGET(less-warnings, warnings-always-on, require-cxx, force-gcc42,skip-visibility)
1192.3.28 by Monty Taylor
pandora-build v0.72 - Moved remaining hard-coded tests into pandora-build
84
85
PANDORA_REQUIRE_LIBPROTOBUF
86
PANDORA_PROTOBUF_REQUIRE_VERSION([2.1.0])
87
PANDORA_REQUIRE_PROTOC
88
89
AC_LANG_PUSH(C++)
90
PANDORA_REQUIRE_PTHREAD
91
PANDORA_REQUIRE_LIBDL
92
AC_LANG_POP
93
94
PANDORA_USE_BETTER_MALLOC
95
96
PANDORA_DRIZZLE_BUILD
97
""" % plugin)
98
99
  write_plugin_ac(plugin, plugin_file)
100
101
  plugin_file.write("""
102
AC_CONFIG_FILES(Makefile)
103
104
AC_OUTPUT
105
106
echo "---"
107
echo "Configuration summary for $PACKAGE_NAME version $VERSION $PANDORA_RELEASE_COMMENT"
108
echo ""
109
echo "   * Installation prefix:       $prefix"
110
echo "   * System type:               $host_vendor-$host_os"
111
echo "   * Host CPU:                  $host_cpu"
112
echo "   * C Compiler:                $CC_VERSION"
113
echo "   * C++ Compiler:              $CXX_VERSION"
114
echo "   * Debug enabled:             $with_debug"
115
echo "   * Warnings as failure:       $ac_cv_warnings_as_errors"
116
echo "   * C++ cstdint location:      $ac_cv_cxx_cstdint"
1497.3.15 by Monty Taylor
Merged in some stuff from pandora-build.
117
echo "   * C++ hash_map location:     $ac_cv_cxx_hash_map"
118
echo "   * C++ hash namespace:        $ac_cv_cxx_hash_namespace"
1192.3.28 by Monty Taylor
pandora-build v0.72 - Moved remaining hard-coded tests into pandora-build
119
echo "   * C++ shared_ptr namespace:  $ac_cv_shared_ptr_namespace"
120
echo ""
121
echo "---"
122
123
  """ % plugin)
124
125
def write_external_makefile(plugin, plugin_file):
126
127
  plugin_file.write("""
128
ACLOCAL_AMFLAGS = -I m4 --force
129
VERSION=$(PANDORA_RELEASE_VERSION)
130
1273.23.1 by Monty Taylor
Merged in latest pandora-build changes. Install plugins in pkglibdir now
131
pkgplugindir=%(pkgplugindir)s
1241.9.3 by Monty Taylor
Fixed the out-of-tree plugin file generation.
132
EXTRA_DIST = plugin.ini
1192.3.53 by Robert Collins
Build fixes from Robert.
133
134
""" % plugin)
1192.3.28 by Monty Taylor
pandora-build v0.72 - Moved remaining hard-coded tests into pandora-build
135
  if plugin['headers'] != "":
136
    plugin_file.write("noinst_HEADERS = %(headers)s\n" % plugin)
1471.3.1 by Monty Taylor
Latest pandora-build. Moves the lint check to only run distcheck.
137
  if plugin['install_headers'] != "":
138
    plugin_file.write("nobase_include_HEADERS += %(install_headers)s\n" % plugin)
1192.3.28 by Monty Taylor
pandora-build v0.72 - Moved remaining hard-coded tests into pandora-build
139
  if plugin['testsuite']:
140
    if plugin.has_key('testsuitedir') and plugin['testsuitedir'] != "":
1241.9.3 by Monty Taylor
Fixed the out-of-tree plugin file generation.
141
      plugin_file.write("EXTRA_DIST += %(testsuitedir)s\n" % plugin)
1192.3.28 by Monty Taylor
pandora-build v0.72 - Moved remaining hard-coded tests into pandora-build
142
  plugin_file.write("""
1471.3.1 by Monty Taylor
Latest pandora-build. Moves the lint check to only run distcheck.
143
pkgplugin_LTLIBRARIES=%(libname)s.la
144
%(libname)s_la_LDFLAGS=-avoid-version -rpath $(pkgplugindir) $(AM_LDFLAGS) %(ldflags)s $(GCOV_LIBS)
145
%(libname)s_la_LIBADD=%(libs)s
146
%(libname)s_la_DEPENDENCIES=%(libs)s
1497.3.15 by Monty Taylor
Merged in some stuff from pandora-build.
147
%(libname)s_la_CPPFLAGS=$(AM_CPPFLAGS) -DPANDORA_DYNAMIC_PLUGIN -DPANDORA_MODULE_NAME=%(module_name)s -DPANDORA_MODULE_AUTHOR='"%(author)s"' -DPANDORA_MODULE_TITLE='"%(title)s"' -DPANDORA_MODULE_VERSION='"%(version)s"' -DPANDORA_MODULE_LICENSE=%(license)s %(cppflags)s
1471.3.1 by Monty Taylor
Latest pandora-build. Moves the lint check to only run distcheck.
148
%(libname)s_la_CXXFLAGS=$(AM_CXXFLAGS) %(cxxflags)s
149
%(libname)s_la_CFLAGS=$(AM_CFLAGS) %(cflags)s
150
%(libname)s_la_SOURCES=%(sources)s
1497.3.15 by Monty Taylor
Merged in some stuff from pandora-build.
151
check_PROGRAMS += %(tests)s
1192.3.28 by Monty Taylor
pandora-build v0.72 - Moved remaining hard-coded tests into pandora-build
152
""" % plugin)
153
  plugin_am_file=os.path.join(plugin['rel_path'],'plugin.am')
154
  if os.path.exists(plugin_am_file):
155
    plugin_file.write('include %s\n' % plugin_am_file)
156
1192.3.7 by Monty Taylor
Added code necessary for building plugins dynamically.
157
def write_external_plugin():
158
  """Return True if the plugin had changed."""
159
  plugin = read_plugin_ini('.')
1471.3.1 by Monty Taylor
Latest pandora-build. Moves the lint check to only run distcheck.
160
  expand_plugin_ini(plugin)
1192.3.28 by Monty Taylor
pandora-build v0.72 - Moved remaining hard-coded tests into pandora-build
161
  plugin_file = ChangeProtectedFile('configure.ac')
162
  write_external_configure(plugin, plugin_file)
1192.3.7 by Monty Taylor
Added code necessary for building plugins dynamically.
163
  result = plugin_file.close()
1192.3.28 by Monty Taylor
pandora-build v0.72 - Moved remaining hard-coded tests into pandora-build
164
  plugin_file = ChangeProtectedFile('Makefile.am')
165
  write_external_makefile(plugin, plugin_file)
1192.3.7 by Monty Taylor
Added code necessary for building plugins dynamically.
166
  # Write some stub configure.ac and Makefile.am files that include the above
167
  result = plugin_file.close() or result
168
  return result
169
1471.3.1 by Monty Taylor
Latest pandora-build. Moves the lint check to only run distcheck.
170
def write_plugin(plugin, plugin_ini_list):
171
  # Since this function is recursive, make sure we're not already in it.
172
  if plugin.has_key('writing_status'):
173
    if plugin['writing_status'] == 'done':
174
      return
175
    else:
1497.3.15 by Monty Taylor
Merged in some stuff from pandora-build.
176
      print "Dependency loop detected with %s" % plugin['name']
1471.3.1 by Monty Taylor
Latest pandora-build. Moves the lint check to only run distcheck.
177
      exit(1)
178
179
  plugin['writing_status'] = 'dependencies'
180
181
  # Write all dependencies first to get around annoying automake bug
1497.3.15 by Monty Taylor
Merged in some stuff from pandora-build.
182
  for dependency in plugin['dependency_list']:
183
    found = False
184
    for find_plugin in plugin_ini_list:
185
      if find_plugin['module_name'] == dependency:
186
        found = True
187
        write_plugin(find_plugin, plugin_ini_list)
188
        break
189
    if found is False:
190
      print "Could not find dependency %s: %s" % (plugin['name'], dependency)
191
      exit(1)
1471.3.1 by Monty Taylor
Latest pandora-build. Moves the lint check to only run distcheck.
192
1192.3.25 by Monty Taylor
It seems to work.
193
  write_plugin_ac(plugin, plugin_ac_file)
194
  write_plugin_am(plugin, plugin_am_file)
1794.2.5 by Monty Taylor
Added support to pandora for finding and including per-plugin documentation.
195
  write_plugin_docs(plugin, plugin_doc_index)
1471.3.1 by Monty Taylor
Latest pandora-build. Moves the lint check to only run distcheck.
196
  plugin['writing_status'] = 'done'
1192.4.1 by Robert Collins
Merged buildsystem change from lifeless.
197
1794.2.5 by Monty Taylor
Added support to pandora for finding and including per-plugin documentation.
198
def write_plugin_docs(plugin, doc_index):
199
  if plugin['docs'] is not None and os.path.isdir("docs/plugins"):
200
    if not os.path.exists(os.path.join("docs/plugins",plugin["name"])):
201
      os.symlink(os.path.abspath(plugin["docs"]), os.path.join("docs/plugins",plugin["name"]))
202
    doc_index.write("""
1794.2.7 by Monty Taylor
Fixed a couple of options around make dist to make sure all the .rst files
203
   %(name)s/index""" % plugin)
1794.2.5 by Monty Taylor
Added support to pandora for finding and including per-plugin documentation.
204
1192.4.1 by Robert Collins
Merged buildsystem change from lifeless.
205
def write_plugin_ac(plugin, plugin_ac):
206
  #
207
  # Write plugin config instructions into plugin.ac file.
208
  #
992.1.23 by Monty Taylor
New system now runs in parallel to old system.
209
  plugin_ac_file=os.path.join(plugin['rel_path'],'plugin.ac')
210
  plugin_m4_dir=os.path.join(plugin['rel_path'],'m4')
211
  plugin_m4_files=[]
212
  if os.path.exists(plugin_m4_dir) and os.path.isdir(plugin_m4_dir):
213
    for m4_file in os.listdir(plugin_m4_dir):
214
      if os.path.splitext(m4_file)[-1] == '.m4':
215
        plugin_m4_files.append(os.path.join(plugin['rel_path'], m4_file))
1192.3.25 by Monty Taylor
It seems to work.
216
  plugin_ac.write("""
1192.4.1 by Robert Collins
Merged buildsystem change from lifeless.
217
dnl Config for %(title)s
992.1.23 by Monty Taylor
New system now runs in parallel to old system.
218
""" % plugin)
219
  for m4_file in plugin_m4_files:
1093.9.13 by Monty Taylor
pandora-build v0.42 - Started splitting out plugin system into pandora-build
220
    plugin_ac.write('m4_sinclude([%s])\n' % m4_file)
1259.7.5 by Monty Taylor
Removed the apparent ability to disable builtin plugins. We don't actually support it
221
  plugin['plugin_dep_libs']=" ".join(["\${top_builddir}/%s" % f for f in plugin['libs'].split()])
222
1497.3.18 by Monty Taylor
Enables the disabling of a static plugin at compile time. Incidentally,
223
  plugin_ac.write("""
1022.2.4 by Monty Taylor
Fixed turning off plugins.
224
AC_ARG_WITH([%(name_with_dashes)s-plugin],[
1259.7.5 by Monty Taylor
Removed the apparent ability to disable builtin plugins. We don't actually support it
225
dnl indented wierd to make the help output correct
1273.12.6 by Monty Taylor
Added support for disabling plugins
226
AS_HELP_STRING([--with-%(name_with_dashes)s-plugin],[Build %(title)s. @<:@default=%(enabled)s@:>@])
1022.2.4 by Monty Taylor
Fixed turning off plugins.
227
AS_HELP_STRING([--without-%(name_with_dashes)s-plugin],[Disable building %(title)s])
1259.7.5 by Monty Taylor
Removed the apparent ability to disable builtin plugins. We don't actually support it
228
  ],[
229
    with_%(name)s_plugin="$withval"
1273.23.6 by Monty Taylor
Need to be able to actually disable plugins in the build.
230
    AS_IF([test "x$with_%(name)s_plugin" = "xyes"],[
231
      requested_%(name)s_plugin="yes"
232
    ],[
233
      requested_%(name)s_plugin="no"
234
    ])
1259.7.5 by Monty Taylor
Removed the apparent ability to disable builtin plugins. We don't actually support it
235
  ],[
1273.12.6 by Monty Taylor
Added support for disabling plugins
236
    with_%(name)s_plugin="%(enabled)s"
1259.7.5 by Monty Taylor
Removed the apparent ability to disable builtin plugins. We don't actually support it
237
    requested_%(name)s_plugin="no"
238
  ])
239
AC_ARG_ENABLE([%(name_with_dashes)s-plugin],[
240
dnl indented wierd to make the help output correct
1810.4.1 by Andrew Hutchings
Fix plugin --enable/disable messages
241
AS_HELP_STRING([--enable-%(name_with_dashes)s-plugin],[Enable loading %(title)s by default. @<:@default=%(default_yesno)s@:>@])
242
AS_HELP_STRING([--disable-%(name_with_dashes)s-plugin],[Disable loading %(title)s by default.])
992.1.21 by Monty Taylor
First pass at replacing plugin.m4.
243
  ],
1497.3.18 by Monty Taylor
Enables the disabling of a static plugin at compile time. Incidentally,
244
  [enable_%(name)s_plugin="$enableval"],
1259.7.5 by Monty Taylor
Removed the apparent ability to disable builtin plugins. We don't actually support it
245
  [enable_%(name)s_plugin=%(default_yesno)s])
246
992.1.21 by Monty Taylor
First pass at replacing plugin.m4.
247
""" % plugin)
248
  if os.path.exists(plugin_ac_file):
1497.3.15 by Monty Taylor
Merged in some stuff from pandora-build.
249
    plugin_ac.write('m4_sinclude([%s])\n' % plugin_ac_file)
992.1.21 by Monty Taylor
First pass at replacing plugin.m4.
250
  # The plugin author has specified some check to make to determine
1497.3.15 by Monty Taylor
Merged in some stuff from pandora-build.
251
  # if the plugin can be built. If the plugin is turned on and this
992.1.21 by Monty Taylor
First pass at replacing plugin.m4.
252
  # check fails, then configure should error out. If the plugin is not
253
  # turned on, then the normal conditional build stuff should just let
254
  # it silently not build
255
  if plugin['has_build_conditional']:
256
    plugin_ac.write("""
997.2.5 by Monty Taylor
Merged up with trunk properly.
257
AS_IF([test %(build_conditional)s],
1166.1.1 by Monty Taylor
Fixed an accidental logic error that caused any plugin which was availble to be built to be automatically enabled/builtin.
258
      [], dnl build_conditional can only negate
1259.7.5 by Monty Taylor
Removed the apparent ability to disable builtin plugins. We don't actually support it
259
      [
260
        AS_IF([test "x${requested_%(name)s_plugin}" = "xyes"],
261
              [AC_MSG_ERROR([Plugin %(name)s was explicitly requested, yet failed build dependency checks. Aborting!])])
262
        with_%(name)s_plugin=no
263
      ])
1192.3.53 by Robert Collins
Build fixes from Robert.
264
265
""" % plugin)
1192.3.28 by Monty Taylor
pandora-build v0.72 - Moved remaining hard-coded tests into pandora-build
266
  if not plugin['unconditional']:
267
    plugin_ac.write("""
992.1.21 by Monty Taylor
First pass at replacing plugin.m4.
268
AM_CONDITIONAL([%(build_conditional_tag)s],
269
               [test %(build_conditional)s])
1192.3.28 by Monty Taylor
pandora-build v0.72 - Moved remaining hard-coded tests into pandora-build
270
    """ % plugin)
1497.3.18 by Monty Taylor
Enables the disabling of a static plugin at compile time. Incidentally,
271
272
  plugin_ac.write("""
992.1.21 by Monty Taylor
First pass at replacing plugin.m4.
273
AS_IF([test "x$with_%(name)s_plugin" = "xyes"],
1497.3.18 by Monty Taylor
Enables the disabling of a static plugin at compile time. Incidentally,
274
    [
1192.3.53 by Robert Collins
Build fixes from Robert.
275
""" % plugin)
1497.3.18 by Monty Taylor
Enables the disabling of a static plugin at compile time. Incidentally,
276
  if plugin['testsuite']:
277
    plugin_ac.write("""
278
      pandora_plugin_test_list="%(name)s,${pandora_plugin_test_list}"
279
    """ % plugin)
280
  if plugin['static']:
281
    plugin_ac.write("""
282
        AS_IF([test "x$enable_%(name)s_plugin" = "xyes"],[
1530.2.3 by Monty Taylor
Changed the builtin plugin code path to work exactly the same as dynamic.
283
          pandora_builtin_list="%(module_name)s,${pandora_builtin_list}"
284
          pandora_builtin_symbols_list="_drizzled_%(module_name)s_plugin_,${pandora_builtin_symbols_list}"
1497.3.18 by Monty Taylor
Enables the disabling of a static plugin at compile time. Incidentally,
285
          pandora_plugin_libs="${pandora_plugin_libs} \${top_builddir}/%(root_plugin_dir)s/%(libname)s.la"
286
          PANDORA_PLUGIN_DEP_LIBS="${PANDORA_PLUGIN_DEP_LIBS} %(plugin_dep_libs)s"
287
        ])
288
    """ % plugin)
1099.1.16 by Monty Taylor
Added support for conditionally building plugin's test suite if the plugin is built.
289
1497.3.18 by Monty Taylor
Enables the disabling of a static plugin at compile time. Incidentally,
290
  else:
1259.7.5 by Monty Taylor
Removed the apparent ability to disable builtin plugins. We don't actually support it
291
    plugin_ac.write("""
292
        AS_IF([test "x$enable_%(name)s_plugin" = "xyes"],[
293
          pandora_default_plugin_list="%(name)s,${pandora_default_plugin_list}"
294
        ])
1192.3.7 by Monty Taylor
Added code necessary for building plugins dynamically.
295
    """ % plugin)
1497.3.18 by Monty Taylor
Enables the disabling of a static plugin at compile time. Incidentally,
296
  plugin_ac.write("      ])\n")
1093.9.13 by Monty Taylor
pandora-build v0.42 - Started splitting out plugin system into pandora-build
297
1497.3.15 by Monty Taylor
Merged in some stuff from pandora-build.
298
def fix_file_paths(plugin, files):
299
  # TODO: determine path to plugin dir relative to top_srcdir... append it to
300
  # source files if they don't already have it
301
  new_files=""
302
  if plugin['plugin_dir'] != ".":
303
    for file in files.split():
304
      if not file.startswith(plugin['rel_path']):
305
        file= os.path.join(plugin['rel_path'], file)
306
        new_files= "%s %s" % (new_files, file)
307
  else:
308
    new_files= " ".join(plugin['sources'].split())
309
  if new_files != "":
310
    return new_files
311
  return files
1192.4.1 by Robert Collins
Merged buildsystem change from lifeless.
312
1471.3.1 by Monty Taylor
Latest pandora-build. Moves the lint check to only run distcheck.
313
def expand_plugin_ini(plugin):
1273.23.15 by Monty Taylor
Put in error check for out of tree plugin builds.
314
    if plugin['name'] == "**OUT-OF-TREE**":
315
      print "Out of tree plugins require the name field to be specified in plugin.ini"
316
      sys.exit(1)
317
1471.3.1 by Monty Taylor
Latest pandora-build. Moves the lint check to only run distcheck.
318
    if plugin['plugin_dir'] == ".":
319
      plugin['rel_path']= plugin['plugin_dir']
1192.3.28 by Monty Taylor
pandora-build v0.72 - Moved remaining hard-coded tests into pandora-build
320
      plugin['unconditional']=True
321
    else:
1497.3.15 by Monty Taylor
Merged in some stuff from pandora-build.
322
      plugin['rel_path']= plugin['plugin_dir'][len(config['top_srcdir'])+len(os.path.sep):]
1192.3.28 by Monty Taylor
pandora-build v0.72 - Moved remaining hard-coded tests into pandora-build
323
      plugin['unconditional']=False
1497.3.15 by Monty Taylor
Merged in some stuff from pandora-build.
324
325
    plugin['sources']= fix_file_paths(plugin, plugin['sources'])
1192.3.28 by Monty Taylor
pandora-build v0.72 - Moved remaining hard-coded tests into pandora-build
326
    plugin['main_source']= plugin['sources'].split()[0]
1497.3.15 by Monty Taylor
Merged in some stuff from pandora-build.
327
    plugin['headers']= fix_file_paths(plugin, plugin['headers'])
328
    plugin['install_headers']= fix_file_paths(plugin, plugin['install_headers'])
329
    plugin['tests']= fix_file_paths(plugin, plugin['tests'])
330
1192.4.1 by Robert Collins
Merged buildsystem change from lifeless.
331
    # Make a yes/no version for autoconf help messages
1497.3.18 by Monty Taylor
Enables the disabling of a static plugin at compile time. Incidentally,
332
    if plugin['load_by_default'] or plugin['static']:
1192.4.1 by Robert Collins
Merged buildsystem change from lifeless.
333
      plugin['default_yesno']="yes"
334
    else:
335
      plugin['default_yesno']="no"
1192.3.7 by Monty Taylor
Added code necessary for building plugins dynamically.
336
1716.1.1 by Monty Taylor
Added files to the tarball that should be there. Removed some that shouldn't
337
    if plugin.has_key('extra_dist'):
338
      plugin['extra_dist']=" ".join([os.path.join(plugin['rel_path'],f) for f in plugin['extra_dist'].split()])
339
1497.3.15 by Monty Taylor
Merged in some stuff from pandora-build.
340
1192.4.1 by Robert Collins
Merged buildsystem change from lifeless.
341
    plugin['build_conditional_tag']= "BUILD_%s_PLUGIN" % plugin['name'].upper()
342
    plugin['name_with_dashes']= plugin['name'].replace('_','-')
343
    if plugin.has_key('build_conditional'):
344
      plugin['has_build_conditional']=True
1273.12.6 by Monty Taylor
Added support for disabling plugins
345
      plugin['build_conditional']='"x${with_%(name)s_plugin}" = "xyes" -a %(build_conditional)s' % plugin
1192.4.1 by Robert Collins
Merged buildsystem change from lifeless.
346
    else:
347
      plugin['has_build_conditional']=False
348
      plugin['build_conditional']='"x${with_%(name)s_plugin}" = "xyes"' %plugin
1192.3.7 by Monty Taylor
Added code necessary for building plugins dynamically.
349
1273.23.9 by Monty Taylor
Merged in noinst fix for plugins.
350
    if plugin['install']:
1497.3.15 by Monty Taylor
Merged in some stuff from pandora-build.
351
      plugin['library_type']= 'pkgplugin'
1273.23.9 by Monty Taylor
Merged in noinst fix for plugins.
352
    else:
1497.3.15 by Monty Taylor
Merged in some stuff from pandora-build.
353
      plugin['library_type']= 'noinst'
1273.23.9 by Monty Taylor
Merged in noinst fix for plugins.
354
1192.3.20 by Monty Taylor
Added the testsuite location finding code to support in-plugin-dir test suites.
355
def find_testsuite(plugin_dir):
356
  for testdir in ['drizzle-tests','tests']:
357
    if os.path.isdir(os.path.join(plugin_dir,testdir)):
358
      return testdir
359
  if os.path.isdir(os.path.join('tests','suite',os.path.basename(plugin_dir))):
360
    return ""
361
  return None
1192.4.1 by Robert Collins
Merged buildsystem change from lifeless.
362
1794.2.5 by Monty Taylor
Added support to pandora for finding and including per-plugin documentation.
363
def find_docs(plugin_dir):
364
  if os.path.isfile(os.path.join(plugin_dir, "docs", "index.rst")):
365
    return os.path.join(plugin_dir, "docs")
366
1192.4.1 by Robert Collins
Merged buildsystem change from lifeless.
367
def read_plugin_ini(plugin_dir):
1273.23.15 by Monty Taylor
Put in error check for out of tree plugin builds.
368
    if plugin_dir == ".":
369
      plugin_name="**OUT-OF-TREE**"
370
    else:
1497.3.15 by Monty Taylor
Merged in some stuff from pandora-build.
371
      short_name=os.path.basename(plugin_dir)
372
      plugin_name = plugin_dir[plugin_dir.index(config['root_plugin_dir']) + len(config['root_plugin_dir']) + 1:]
373
      module_name = plugin_name.replace("/", config['module_name_separator']).replace("\\", config['module_name_separator'])
374
      plugin_name = plugin_name.replace("/", config['plugin_name_separator']).replace("\\", config['plugin_name_separator'])
375
376
377
    plugin_file= os.path.join(plugin_dir,config['plugin_ini_fname'])
378
    plugin_defaults= dict(sources="%s.cc" % short_name,
1241.10.1 by Monty Taylor
Added ability to specify all of the meta information in the plugin.ini file. This allows us to have a streamlined out-of-tree build.
379
                          headers="",
1471.3.1 by Monty Taylor
Latest pandora-build. Moves the lint check to only run distcheck.
380
                          install_headers="",
1241.10.1 by Monty Taylor
Added ability to specify all of the meta information in the plugin.ini file. This allows us to have a streamlined out-of-tree build.
381
                          cflags="",
382
                          cppflags="",
383
                          cxxflags="",
384
                          libs="",
385
                          ldflags="",
386
                          author="",
387
                          title="",
388
                          description="",
389
                          license="PLUGIN_LICENSE_GPL",
1273.23.15 by Monty Taylor
Put in error check for out of tree plugin builds.
390
                          name=plugin_name,
1497.3.15 by Monty Taylor
Merged in some stuff from pandora-build.
391
                          module_name=module_name,
392
                          load_by_default=config['default_load_by_default'],
1273.12.6 by Monty Taylor
Added support for disabling plugins
393
                          disabled="False",
1273.23.9 by Monty Taylor
Merged in noinst fix for plugins.
394
                          static="False",
1471.3.1 by Monty Taylor
Latest pandora-build. Moves the lint check to only run distcheck.
395
                          dependencies="",
396
                          dependency_aliases="",
1497.3.15 by Monty Taylor
Merged in some stuff from pandora-build.
397
                          tests="",
398
                          install=config['default_install'])
1241.10.1 by Monty Taylor
Added ability to specify all of the meta information in the plugin.ini file. This allows us to have a streamlined out-of-tree build.
399
    parser=ConfigParser.ConfigParser(defaults= plugin_defaults)
1192.4.1 by Robert Collins
Merged buildsystem change from lifeless.
400
    parser.read(plugin_file)
401
    plugin=dict(parser.items('plugin'))
1471.3.1 by Monty Taylor
Latest pandora-build. Moves the lint check to only run distcheck.
402
    plugin['plugin_dir'] = plugin_dir
1192.3.28 by Monty Taylor
pandora-build v0.72 - Moved remaining hard-coded tests into pandora-build
403
    if plugin_dir == '.':
404
      if not plugin.has_key('url'):
405
        print "External Plugins are required to specifiy a url"
406
        plugin['url']= 'http://launchpad.net/%(name)s' % plugin
407
        sys.exit(1)
408
      if plugin_dir == '.' and not plugin.has_key('version'):
409
        print "External Plugins are required to specifiy a version"
410
        sys.exit(1)
1241.10.1 by Monty Taylor
Added ability to specify all of the meta information in the plugin.ini file. This allows us to have a streamlined out-of-tree build.
411
    if not plugin.has_key('version'):
1497.3.15 by Monty Taylor
Merged in some stuff from pandora-build.
412
      plugin['version'] = config['default_plugin_version']
1192.4.1 by Robert Collins
Merged buildsystem change from lifeless.
413
    if plugin.has_key('load_by_default'):
414
      plugin['load_by_default']=parser.getboolean('plugin','load_by_default')
1273.12.6 by Monty Taylor
Added support for disabling plugins
415
    if plugin.has_key('disabled'):
416
      plugin['disabled']=parser.getboolean('plugin','disabled')
417
    if plugin['disabled']:
418
      plugin['enabled']="no"
419
    else:
420
      plugin['enabled']="yes"
1192.3.7 by Monty Taylor
Added code necessary for building plugins dynamically.
421
    if plugin.has_key('static'):
1861.3.3 by Monty Taylor
Add support platform conditional static plugins.
422
      try:
423
        plugin['static']= parser.getboolean('plugin','static')
424
      except:
425
        if plugin['static'][:5] == os.sys.platform[:5]:
426
          plugin['static']= True
427
        else:
428
          plugin['static']= False
1273.23.9 by Monty Taylor
Merged in noinst fix for plugins.
429
    if plugin.has_key('install'):
430
      plugin['install']= parser.getboolean('plugin','install')
1192.3.20 by Monty Taylor
Added the testsuite location finding code to support in-plugin-dir test suites.
431
    if plugin.has_key('testsuite'):
432
      if plugin['testsuite'] == 'disable':
433
        plugin['testsuite']= False
1716.1.1 by Monty Taylor
Added files to the tarball that should be there. Removed some that shouldn't
434
        plugin['dist_testsuite']= find_testsuite(plugin_dir)
1192.3.20 by Monty Taylor
Added the testsuite location finding code to support in-plugin-dir test suites.
435
    else:
436
      plugin_testsuite= find_testsuite(plugin_dir)
437
      plugin['testsuitedir']=plugin_testsuite
438
      if plugin_testsuite is not None:
439
        plugin['testsuite']=True
440
      else:
441
        plugin['testsuite']=False
1794.2.5 by Monty Taylor
Added support to pandora for finding and including per-plugin documentation.
442
    plugin['docs']= find_docs(plugin_dir)
1192.3.7 by Monty Taylor
Added code necessary for building plugins dynamically.
443
1497.3.15 by Monty Taylor
Merged in some stuff from pandora-build.
444
    plugin['cflags']+= ' ' + config['extra_cflags']
445
    plugin['cppflags']+= ' ' + config['extra_cppflags']
446
    plugin['cxxflags']+= ' ' + config['extra_cxxflags']
1273.23.1 by Monty Taylor
Merged in latest pandora-build changes. Install plugins in pkglibdir now
447
1497.3.15 by Monty Taylor
Merged in some stuff from pandora-build.
448
    plugin['libname']= "lib%s%s%s" % (config['plugin_prefix'],
449
                                      plugin['name'],
450
                                      config['plugin_suffix'])
451
    if config['force_lowercase_libname']:
1471.3.1 by Monty Taylor
Latest pandora-build. Moves the lint check to only run distcheck.
452
      plugin['libname']= plugin['libname'].lower()
453
1497.3.15 by Monty Taylor
Merged in some stuff from pandora-build.
454
    plugin['root_plugin_dir']= config['root_plugin_dir']
455
    plugin['plugin_prefix']= config['plugin_prefix']
456
    plugin['plugin_suffix']= config['plugin_suffix']
457
    plugin['pkgplugindir']= config['pkgplugindir']
1273.23.1 by Monty Taylor
Merged in latest pandora-build changes. Install plugins in pkglibdir now
458
1471.3.1 by Monty Taylor
Latest pandora-build. Moves the lint check to only run distcheck.
459
    # Dependencies must have a module but dependency aliases are simply added
460
    # to the variable passed during compile.
1497.3.15 by Monty Taylor
Merged in some stuff from pandora-build.
461
    plugin['dependency_list'] = plugin['dependencies'].split()
462
    dependency_aliases = plugin['dependency_aliases'].split()
463
    plugin['dependencies'] = ','.join(plugin['dependency_list'] +
464
                                      plugin['dependency_aliases'].split())
465
    dependency_libs = ["%s/lib%s%s.la" % (config['root_plugin_dir'],
466
                                          dependency.lower().replace('::', '_'),
467
                                          config['plugin_suffix'])
468
                       for dependency in plugin['dependency_list']]
469
    plugin['libs'] = " ".join(plugin['libs'].split() + dependency_libs);
1471.3.1 by Monty Taylor
Latest pandora-build. Moves the lint check to only run distcheck.
470
471
# Libtool is going to expand:
472
#      -DPANDORA_MODULE_AUTHOR='"Padraig O'"'"'Sullivan"'
473
# to:
474
# "-DPANDORA_MODULE_AUTHOR=\"Padraig O'Sullivan\""
475
# So we have to replace internal ''s to '"'"'
476
    for key in ('author','title','description','version'):
477
      plugin[key]=plugin[key].replace('"','\\"')
478
      plugin[key]=plugin[key].replace("'","'\"'\"'")
1192.4.1 by Robert Collins
Merged buildsystem change from lifeless.
479
    return plugin
480
481
482
def write_plugin_am(plugin, plugin_am):
483
  """Write an automake fragment for this plugin.
1497.3.15 by Monty Taylor
Merged in some stuff from pandora-build.
484
1192.4.1 by Robert Collins
Merged buildsystem change from lifeless.
485
  :param plugin: The plugin dict.
486
  :param plugin_am: The file to write to.
487
  """
488
  # The .plugin.ini.stamp avoids changing the datestamp on plugin.ini which can
489
  # confuse VCS systems.
1192.3.25 by Monty Taylor
It seems to work.
490
  plugin_am.write("""
491
EXTRA_DIST += %(rel_path)s/plugin.ini
1192.4.1 by Robert Collins
Merged buildsystem change from lifeless.
492
493
# Prevent errors when a plugin dir is removed
494
%(rel_path)s/plugin.ini:
1192.3.53 by Robert Collins
Build fixes from Robert.
495
496
""" % plugin)
1716.1.1 by Monty Taylor
Added files to the tarball that should be there. Removed some that shouldn't
497
  if plugin.has_key('extra_dist') and plugin['extra_dist'] != "":
498
    plugin_am.write("EXTRA_DIST += %(extra_dist)s\n" % plugin)
1192.3.7 by Monty Taylor
Added code necessary for building plugins dynamically.
499
  if plugin['headers'] != "":
500
    plugin_am.write("noinst_HEADERS += %(headers)s\n" % plugin)
1471.3.1 by Monty Taylor
Latest pandora-build. Moves the lint check to only run distcheck.
501
  if plugin['install_headers'] != "":
502
    plugin_am.write("nobase_include_HEADERS += %(install_headers)s\n" % plugin)
1192.3.20 by Monty Taylor
Added the testsuite location finding code to support in-plugin-dir test suites.
503
  if plugin['testsuite']:
504
    if plugin.has_key('testsuitedir') and plugin['testsuitedir'] != "":
505
      plugin_am.write("EXTRA_DIST += %(rel_path)s/%(testsuitedir)s\n" % plugin)
1716.1.1 by Monty Taylor
Added files to the tarball that should be there. Removed some that shouldn't
506
  if plugin.has_key('dist_testsuite') and plugin['dist_testsuite'] != "":
507
    plugin_am.write("EXTRA_DIST += %(rel_path)s/%(dist_testsuite)s\n" % plugin)
1794.2.7 by Monty Taylor
Fixed a couple of options around make dist to make sure all the .rst files
508
  if plugin['docs'] is not None:
509
    plugin_am.write("EXTRA_DIST += ${top_srcdir}/%(rel_path)s/docs/*.rst\n" % plugin)
1192.3.7 by Monty Taylor
Added code necessary for building plugins dynamically.
510
  if plugin['static']:
511
    plugin_am.write("""
1273.23.1 by Monty Taylor
Merged in latest pandora-build changes. Install plugins in pkglibdir now
512
%(root_plugin_dir)s_%(plugin_prefix)s%(name)s_dir=${top_srcdir}/%(rel_path)s
1192.4.1 by Robert Collins
Merged buildsystem change from lifeless.
513
EXTRA_DIST += %(rel_path)s/plugin.ini
514
if %(build_conditional_tag)s
1471.3.1 by Monty Taylor
Latest pandora-build. Moves the lint check to only run distcheck.
515
  noinst_LTLIBRARIES+=%(root_plugin_dir)s/%(libname)s.la
516
  %(root_plugin_dir)s_%(libname)s_la_LIBADD=%(libs)s
517
  %(root_plugin_dir)s_%(libname)s_la_DEPENDENCIES=%(libs)s
518
  %(root_plugin_dir)s_%(libname)s_la_LDFLAGS=$(AM_LDFLAGS) %(ldflags)s $(GCOV_LIBS)
1497.3.15 by Monty Taylor
Merged in some stuff from pandora-build.
519
  %(root_plugin_dir)s_%(libname)s_la_CPPFLAGS=$(AM_CPPFLAGS) -DPANDORA_MODULE_NAME=%(module_name)s -DPANDORA_MODULE_AUTHOR='"%(author)s"' -DPANDORA_MODULE_TITLE='"%(title)s"' -DPANDORA_MODULE_VERSION='"%(version)s"' -DPANDORA_MODULE_LICENSE=%(license)s -DPANDORA_MODULE_DEPENDENCIES='"%(dependencies)s"' %(cppflags)s
1471.3.1 by Monty Taylor
Latest pandora-build. Moves the lint check to only run distcheck.
520
  %(root_plugin_dir)s_%(libname)s_la_CXXFLAGS=$(AM_CXXFLAGS) %(cxxflags)s
521
  %(root_plugin_dir)s_%(libname)s_la_CFLAGS=$(AM_CFLAGS) %(cflags)s
522
  %(root_plugin_dir)s_%(libname)s_la_SOURCES=%(sources)s
1497.3.15 by Monty Taylor
Merged in some stuff from pandora-build.
523
  check_PROGRAMS += %(tests)s
1471.3.1 by Monty Taylor
Latest pandora-build. Moves the lint check to only run distcheck.
524
  PANDORA_DYNAMIC_LDADDS+=${top_builddir}/%(root_plugin_dir)s/%(libname)s.la
1192.4.1 by Robert Collins
Merged buildsystem change from lifeless.
525
endif
526
""" % plugin)
1192.3.7 by Monty Taylor
Added code necessary for building plugins dynamically.
527
  else:
528
    plugin_am.write("""
1273.23.1 by Monty Taylor
Merged in latest pandora-build changes. Install plugins in pkglibdir now
529
%(root_plugin_dir)s_%(plugin_prefix)s%(name)s_dir=${top_srcdir}/%(rel_path)s
1192.3.7 by Monty Taylor
Added code necessary for building plugins dynamically.
530
EXTRA_DIST += %(rel_path)s/plugin.ini
531
if %(build_conditional_tag)s
1471.3.1 by Monty Taylor
Latest pandora-build. Moves the lint check to only run distcheck.
532
  %(library_type)s_LTLIBRARIES+=%(root_plugin_dir)s/%(libname)s.la
533
  %(root_plugin_dir)s_%(libname)s_la_LDFLAGS=-avoid-version -rpath $(pkgplugindir) $(AM_LDFLAGS) %(ldflags)s $(GCOV_LIBS)
534
  %(root_plugin_dir)s_%(libname)s_la_LIBADD=%(libs)s
535
  %(root_plugin_dir)s_%(libname)s_la_DEPENDENCIES=%(libs)s
1497.3.15 by Monty Taylor
Merged in some stuff from pandora-build.
536
  %(root_plugin_dir)s_%(libname)s_la_CPPFLAGS=$(AM_CPPFLAGS) -DPANDORA_DYNAMIC_PLUGIN -DPANDORA_MODULE_NAME=%(module_name)s -DPANDORA_MODULE_AUTHOR='"%(author)s"' -DPANDORA_MODULE_TITLE='"%(title)s"' -DPANDORA_MODULE_VERSION='"%(version)s"' -DPANDORA_MODULE_LICENSE=%(license)s -DPANDORA_MODULE_DEPENDENCIES='"%(dependencies)s"' %(cppflags)s
1471.3.1 by Monty Taylor
Latest pandora-build. Moves the lint check to only run distcheck.
537
  %(root_plugin_dir)s_%(libname)s_la_CXXFLAGS=$(AM_CXXFLAGS) %(cxxflags)s
538
  %(root_plugin_dir)s_%(libname)s_la_CFLAGS=$(AM_CFLAGS) %(cflags)s
539
  %(root_plugin_dir)s_%(libname)s_la_SOURCES=%(sources)s
1497.3.15 by Monty Taylor
Merged in some stuff from pandora-build.
540
  check_PROGRAMS += %(tests)s
1192.3.7 by Monty Taylor
Added code necessary for building plugins dynamically.
541
endif
542
""" % plugin)
1192.4.1 by Robert Collins
Merged buildsystem change from lifeless.
543
  plugin_am_file=os.path.join(plugin['rel_path'],'plugin.am')
544
  if os.path.exists(plugin_am_file):
545
    plugin_am.write('include %s\n' % plugin_am_file)
546
1497.3.15 by Monty Taylor
Merged in some stuff from pandora-build.
547
#
548
# MAIN STARTS HERE:
549
#
550
551
# Parse the pandora-plugin config file
552
553
config_defaults= dict(
554
  top_srcdir='.',
555
  top_builddir='.',
556
  plugin_ini_fname='plugin.ini',
557
  plugin_prefix='',
558
  plugin_suffix='',
559
  extra_cflags='',
560
  extra_cppflags='',
561
  extra_cxxflags='',
562
  root_plugin_dir='',
563
  pkgplugindir='',
564
  default_install='True',
565
  default_plugin_version='',
566
  default_load_by_default='False',
567
  force_lowercase_libname='True',
568
  plugin_name_separator='_',
569
  module_name_separator='::'
570
)
571
572
config_parser = ConfigParser.ConfigParser(defaults=config_defaults)
573
config_parser.read(pandora_plugin_file)
574
config = dict(config_parser.items('pandora-plugin'))
575
config['force_lowercase_libname']=config_parser.getboolean('pandora-plugin','force_lowercase_libname')
1192.3.25 by Monty Taylor
It seems to work.
576
1377.3.8 by Monty Taylor
Let's not hardcode bzr.
577
# I'm 3 seconds away from writing a comprehensive build solution
1377.3.7 by Monty Taylor
Read out the vcinfo file if it's there.
578
if not os.path.exists('config/pandora_vc_revinfo'):
1377.3.8 by Monty Taylor
Let's not hardcode bzr.
579
  if os.path.exists('.bzr'):
580
    bzr_revno= subprocess.Popen(["bzr", "revno"], stdout=subprocess.PIPE).communicate()[0].strip()
581
    rev_date= datetime.date.fromtimestamp(time.time())
1497.3.15 by Monty Taylor
Merged in some stuff from pandora-build.
582
    config['default_plugin_version'] = "%d.%02d.%s" % (rev_date.year, rev_date.month, bzr_revno)
1377.3.8 by Monty Taylor
Let's not hardcode bzr.
583
  else:
1497.3.15 by Monty Taylor
Merged in some stuff from pandora-build.
584
    config['default_plugin_version']=datetime.date.fromtimestamp(time.time()).isoformat()
1377.3.6 by Monty Taylor
Set the default plugin version for plugins not specifying a version to be
585
else:
586
  # need to read config/pandora_vc_revno
1377.3.7 by Monty Taylor
Read out the vcinfo file if it's there.
587
  pandora_vc_revno=open('config/pandora_vc_revinfo','r').read().split()
588
  rev_date=""
589
  bzr_revno=""
590
  for revno_line in pandora_vc_revno:
591
    (revno_key,revno_val)= revno_line.split("=")
592
    if revno_key == 'PANDORA_VC_REVNO':
593
      bzr_revno=revno_val.strip()
594
    elif revno_key == 'PANDORA_RELEASE_DATE':
595
      rev_date=revno_val.strip()
596
1497.3.15 by Monty Taylor
Merged in some stuff from pandora-build.
597
  config['default_plugin_version'] = "%s.%s" % (rev_date, bzr_revno)
1377.3.7 by Monty Taylor
Read out the vcinfo file if it's there.
598
1192.3.25 by Monty Taylor
It seems to work.
599
actions=[]
600
for arg in sys.argv:
601
  if arg.startswith('--top_srcdir='):
1497.3.15 by Monty Taylor
Merged in some stuff from pandora-build.
602
    config['top_srcdir']=arg[12:]
1192.3.25 by Monty Taylor
It seems to work.
603
  elif arg.startswith('--top_builddir='):
1497.3.15 by Monty Taylor
Merged in some stuff from pandora-build.
604
    config['top_builddir']=arg[14:]
1192.3.25 by Monty Taylor
It seems to work.
605
  elif arg == "--force-all":
606
    actions=['plugin-list','pandora-plugin.am','write']
607
    break
1192.3.7 by Monty Taylor
Added code necessary for building plugins dynamically.
608
  else:
1192.3.25 by Monty Taylor
It seems to work.
609
    actions.append(arg)
610
if len(actions) == 0:
611
  actions.append('write')
612
1497.3.15 by Monty Taylor
Merged in some stuff from pandora-build.
613
plugin_list=[]
614
1192.3.25 by Monty Taylor
It seems to work.
615
def accumulate_plugins(arg, dirname, fnames):
616
  # plugin_ini_fname is a name in dirname indicating dirname is a plugin.
1497.3.15 by Monty Taylor
Merged in some stuff from pandora-build.
617
  if config['plugin_ini_fname'] in fnames:
1192.3.25 by Monty Taylor
It seems to work.
618
    arg.append(dirname)
1497.3.15 by Monty Taylor
Merged in some stuff from pandora-build.
619
620
os.path.walk(os.path.join(config['top_srcdir'],
621
                          config['root_plugin_dir']),
622
             accumulate_plugins,
623
             plugin_list)
1192.3.25 by Monty Taylor
It seems to work.
624
625
if not os.path.exists("config/pandora-plugin.am") or "write" in actions:
626
  plugin_am_file = ChangeProtectedFile(os.path.join('config', 'pandora-plugin.am'))
627
  plugin_am_file.write("""
628
# always the current list, generated every build so keep this lean.
1192.3.74 by Robert Collins
Finish the renaming of plugin.list -> pandora-plugin.list that mtaylor started.
629
# pandora-plugin.list: datestamp preserved list
630
${srcdir}/config/pandora-plugin.list: .plugin.scan
1192.3.25 by Monty Taylor
It seems to work.
631
.plugin.scan:
1192.3.28 by Monty Taylor
pandora-build v0.72 - Moved remaining hard-coded tests into pandora-build
632
	@cd ${top_srcdir} && python config/pandora-plugin plugin-list
1192.3.25 by Monty Taylor
It seems to work.
633
634
# Plugins affect configure; so to prevent configure running twice in a tarball
635
# build (once up front, once with the right list of plugins, we ship the
636
# generated list of plugins and the housekeeping material for that list so it
637
# is likewise not updated.
638
EXTRA_DIST += \
639
	config/pandora-plugin.am \
640
	config/pandora-plugin.ac \
1471.3.1 by Monty Taylor
Latest pandora-build. Moves the lint check to only run distcheck.
641
	config/pandora-plugin \
1497.3.15 by Monty Taylor
Merged in some stuff from pandora-build.
642
	config/pandora-plugin.ini
1192.3.25 by Monty Taylor
It seems to work.
643
644
645
# Seed the list of plugin LDADDS which plugins may extend.
646
PANDORA_DYNAMIC_LDADDS=
647
648
# plugin.stamp: graph dominator for creating all per pandora-plugin.ac/am
649
# files. This is invoked when the code to generate such files has altered.""")
650
651
if not os.path.exists("config/pandora-plugin.ac") or "write" in actions:
652
  plugin_ac_file = ChangeProtectedFile(os.path.join('config', 'pandora-plugin.ac'))
653
  plugin_ac_file.write("dnl Generated file, run make to rebuild\n")
654
1794.2.5 by Monty Taylor
Added support to pandora for finding and including per-plugin documentation.
655
if os.path.exists("docs/plugins"):
656
  if not os.path.exists("docs/plugins/list.rst") or "write" in actions:
657
    plugin_doc_index = ChangeProtectedFile("docs/plugins/list.rst")
658
    plugin_doc_index.write("""
659
Plugin Documentation
660
====================
661
662
.. toctree::
663
   :maxdepth: 2
664
""")
665
1192.4.1 by Robert Collins
Merged buildsystem change from lifeless.
666
1192.3.7 by Monty Taylor
Added code necessary for building plugins dynamically.
667
if os.path.exists('plugin.ini'):
668
  # Are we in a plugin dir which wants to have a self-sufficient build system?
1192.3.25 by Monty Taylor
It seems to work.
669
  plugin_list=['.']
1241.9.3 by Monty Taylor
Fixed the out-of-tree plugin file generation.
670
1192.3.7 by Monty Taylor
Added code necessary for building plugins dynamically.
671
  write_external_plugin()
672
else:
1192.3.25 by Monty Taylor
It seems to work.
673
  plugin_list_file = ChangeProtectedFile(os.path.join('config', 'pandora-plugin.list'))
674
  for p in plugin_list:
675
    plugin_list_file.write(p)
676
    plugin_list_file.write("\n")
1192.3.7 by Monty Taylor
Added code necessary for building plugins dynamically.
677
  plugin_list.sort()
1192.3.25 by Monty Taylor
It seems to work.
678
  plugin_list_file.close()
679
680
if not os.path.exists("config/pandora-plugin.am") or 'write' in actions:
1192.3.74 by Robert Collins
Finish the renaming of plugin.list -> pandora-plugin.list that mtaylor started.
681
  plugin_am_file.write("\n${top_srcdir}/config/pandora-plugin.am: ${top_srcdir}/config/pandora-plugin.list ${top_srcdir}/config/pandora-plugin ")
1192.3.25 by Monty Taylor
It seems to work.
682
  for plugin_dir in plugin_list:
683
    plugin_am_file.write("\\\n\t%s/plugin.ini " % plugin_dir)
1192.3.28 by Monty Taylor
pandora-build v0.72 - Moved remaining hard-coded tests into pandora-build
684
  plugin_am_file.write("\n\tcd ${top_srcdir} && python config/pandora-plugin write\n")
1471.3.1 by Monty Taylor
Latest pandora-build. Moves the lint check to only run distcheck.
685
  plugin_ini_list=[]
686
687
  # Load all plugin.ini files first so we can do dependency tracking.
1192.3.25 by Monty Taylor
It seems to work.
688
  for plugin_dir in plugin_list:
1471.3.1 by Monty Taylor
Latest pandora-build. Moves the lint check to only run distcheck.
689
    plugin = read_plugin_ini(plugin_dir)
690
    expand_plugin_ini(plugin)
691
    plugin_ini_list.append(plugin)
692
1497.3.15 by Monty Taylor
Merged in some stuff from pandora-build.
693
  # Check for duplicates
694
  plugin_name_list = [plugin['libname'] for plugin in plugin_ini_list]
695
  for plugin in plugin_ini_list:
696
    if plugin_name_list.count(plugin['libname']) != 1:
697
      print "Duplicate module name %s" % plugin['libname']
698
      exit(1)
699
1471.3.1 by Monty Taylor
Latest pandora-build. Moves the lint check to only run distcheck.
700
  for plugin in plugin_ini_list:
701
    write_plugin(plugin, plugin_ini_list)
1192.3.25 by Monty Taylor
It seems to work.
702
703
if plugin_am_file is not None:
704
  plugin_am_file.close()
705
if plugin_ac_file is not None:
706
  plugin_ac_file.close()
1794.2.5 by Monty Taylor
Added support to pandora for finding and including per-plugin documentation.
707
if plugin_doc_index is not None:
708
  plugin_doc_index.close()