15
15
# along with this program; if not, write to the Free Software
16
16
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
18
pandora_plugin_file = 'config/pandora-plugin.ini'
19
# Find plugins in the tree and add them to the build system
20
# Find plugins in the tree and add them to the build system
21
22
import ConfigParser, os, sys
22
23
import datetime, time
27
plugin_ini_fname='plugin.ini'
29
26
plugin_am_file=None
30
27
plugin_ac_file=None
32
plugin_suffix='_plugin'
36
root_plugin_dir='plugin'
37
pkgplugindir='$(libdir)/drizzle'
38
default_install='True'
39
default_plugin_version=''
41
30
class ChangeProtectedFile(object):
146
135
if plugin['headers'] != "":
147
136
plugin_file.write("noinst_HEADERS = %(headers)s\n" % plugin)
137
if plugin['install_headers'] != "":
138
plugin_file.write("nobase_include_HEADERS += %(install_headers)s\n" % plugin)
148
139
if plugin['testsuite']:
149
140
if plugin.has_key('testsuitedir') and plugin['testsuitedir'] != "":
150
141
plugin_file.write("EXTRA_DIST += %(testsuitedir)s\n" % plugin)
151
142
plugin_file.write("""
152
pkgplugin_LTLIBRARIES=%(pname)s.la
153
%(pname)s_la_LDFLAGS=-avoid-version -rpath $(pkgplugindir) $(AM_LDFLAGS) %(ldflags)s $(GCOV_LIBS)
154
%(pname)s_la_LIBADD=%(libs)s
155
%(pname)s_la_DEPENDENCIES=%(libs)s
156
%(pname)s_la_CPPFLAGS=$(AM_CPPFLAGS) -DPANDORA_DYNAMIC_PLUGIN -DPANDORA_MODULE_NAME=%(name)s -DPANDORA_MODULE_AUTHOR="%(author)s" -DPANDORA_MODULE_TITLE="%(title)s" -DPANDORA_MODULE_VERSION="%(version)s" -DPANDORA_MODULE_LICENSE=%(license)s %(cppflags)s
157
%(pname)s_la_CXXFLAGS=$(AM_CXXFLAGS) %(cxxflags)s
158
%(pname)s_la_CFLAGS=$(AM_CFLAGS) %(cflags)s
160
%(pname)s_la_SOURCES=%(sources)s
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
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
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
151
check_PROGRAMS += %(tests)s
163
153
plugin_am_file=os.path.join(plugin['rel_path'],'plugin.am')
164
154
if os.path.exists(plugin_am_file):
177
167
result = plugin_file.close() or result
180
def write_plugin(plugin_dir):
181
"""Return True if the plugin had changed."""
182
plugin = read_plugin_ini(plugin_dir)
183
expand_plugin_ini(plugin, plugin_dir)
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':
176
print "Dependency loop detected with %s" % plugin['name']
179
plugin['writing_status'] = 'dependencies'
181
# Write all dependencies first to get around annoying automake bug
182
for dependency in plugin['dependency_list']:
184
for find_plugin in plugin_ini_list:
185
if find_plugin['module_name'] == dependency:
187
write_plugin(find_plugin, plugin_ini_list)
190
print "Could not find dependency %s: %s" % (plugin['name'], dependency)
184
193
write_plugin_ac(plugin, plugin_ac_file)
185
194
write_plugin_am(plugin, plugin_am_file)
195
write_plugin_docs(plugin, plugin_doc_index)
196
plugin['writing_status'] = 'done'
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"]))
203
%(name)s/index""" % plugin)
187
205
def write_plugin_ac(plugin, plugin_ac):
202
220
plugin_ac.write('m4_sinclude([%s])\n' % m4_file)
203
221
plugin['plugin_dep_libs']=" ".join(["\${top_builddir}/%s" % f for f in plugin['libs'].split()])
207
dnl This plugin is staticly built, which means we cannot live without and it is not
208
dnl possible to disable it. Once it is disableable, we will make it non-static.
209
with_%(name)s_plugin=yes
210
pandora_builtin_list="_drizzled_%(name)s_plugin_,${pandora_builtin_list}"
211
pandora_plugin_libs="${pandora_plugin_libs} \${top_builddir}/%(root_plugin_dir)s/%(pname)s.la"
212
PANDORA_PLUGIN_DEP_LIBS="${PANDORA_PLUGIN_DEP_LIBS} %(plugin_dep_libs)s"
215
if plugin['testsuite']:
217
pandora_plugin_test_list="%(name)s,${pandora_plugin_test_list}"
221
224
AC_ARG_WITH([%(name_with_dashes)s-plugin],[
222
225
dnl indented wierd to make the help output correct
223
226
AS_HELP_STRING([--with-%(name_with_dashes)s-plugin],[Build %(title)s. @<:@default=%(enabled)s@:>@])
236
239
AC_ARG_ENABLE([%(name_with_dashes)s-plugin],[
237
240
dnl indented wierd to make the help output correct
238
AS_HELP_STRING([--enable-%(name_with_dashes)s-plugin],[Build %(title)s. @<:@default=%(default_yesno)s@:>@])
239
AS_HELP_STRING([--disable-%(name_with_dashes)s-plugin],[Disable building %(title)s])
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.])
241
[enable_%(name)s_plugin="$withval"],
244
[enable_%(name)s_plugin="$enableval"],
242
245
[enable_%(name)s_plugin=%(default_yesno)s])
245
248
if os.path.exists(plugin_ac_file):
246
plugin_ac.write('m4_sinclude([%s])\n' % plugin_ac_file)
249
plugin_ac.write('m4_sinclude([%s])\n' % plugin_ac_file)
247
250
# The plugin author has specified some check to make to determine
248
# if the plugin can be built. If the plugin is turned on and this
251
# if the plugin can be built. If the plugin is turned on and this
249
252
# check fails, then configure should error out. If the plugin is not
250
253
# turned on, then the normal conditional build stuff should just let
251
254
# it silently not build
265
268
AM_CONDITIONAL([%(build_conditional_tag)s],
266
269
[test %(build_conditional)s])
268
if not plugin['static']:
270
273
AS_IF([test "x$with_%(name)s_plugin" = "xyes"],
273
if plugin['testsuite']:
275
pandora_plugin_test_list="%(name)s,${pandora_plugin_test_list}"
276
if plugin['testsuite']:
278
pandora_plugin_test_list="%(name)s,${pandora_plugin_test_list}"
282
AS_IF([test "x$enable_%(name)s_plugin" = "xyes"],[
283
pandora_builtin_load_list="%(module_name)s,${pandora_builtin_load_list}"
284
pandora_builtin_load_symbols_list="_drizzled_%(module_name)s_plugin_,${pandora_builtin_load_symbols_list}"
285
PANDORA_PLUGIN_DEP_LIBS="${PANDORA_PLUGIN_DEP_LIBS} %(plugin_dep_libs)s"
287
pandora_builtin_list="%(module_name)s,${pandora_builtin_list}"
288
pandora_builtin_symbols_list="_drizzled_%(module_name)s_plugin_,${pandora_builtin_symbols_list}"
289
pandora_plugin_libs="${pandora_plugin_libs} \${top_builddir}/%(root_plugin_dir)s/%(libname)s.la"
278
293
plugin_ac.write("""
279
294
AS_IF([test "x$enable_%(name)s_plugin" = "xyes"],[
280
295
pandora_default_plugin_list="%(name)s,${pandora_default_plugin_list}"
283
plugin_ac.write(" ])\n")
286
def expand_plugin_ini(plugin, plugin_dir):
298
plugin_ac.write(" ])\n")
300
def fix_file_paths(plugin, files):
301
# TODO: determine path to plugin dir relative to top_srcdir... append it to
302
# source files if they don't already have it
304
if plugin['plugin_dir'] != ".":
305
for file in files.split():
306
if not file.startswith(plugin['rel_path']):
307
file= os.path.join(plugin['rel_path'], file)
308
new_files= "%s %s" % (new_files, file)
310
new_files= " ".join(plugin['sources'].split())
315
def expand_plugin_ini(plugin):
287
316
if plugin['name'] == "**OUT-OF-TREE**":
288
317
print "Out of tree plugins require the name field to be specified in plugin.ini"
291
if plugin_dir == ".":
292
plugin['rel_path']= plugin_dir
320
if plugin['plugin_dir'] == ".":
321
plugin['rel_path']= plugin['plugin_dir']
293
322
plugin['unconditional']=True
295
plugin['rel_path']= plugin_dir[len(top_srcdir)+len(os.path.sep):]
324
plugin['rel_path']= plugin['plugin_dir'][len(config['top_srcdir'])+len(os.path.sep):]
296
325
plugin['unconditional']=False
297
# TODO: determine path to plugin dir relative to top_srcdir... append it to
298
# source files if they don't already have it
299
if plugin['sources'] == "":
300
plugin['sources']="%s.cc" % plugin['name']
302
if plugin_dir != ".":
303
for src in plugin['sources'].split():
304
if not src.startswith(plugin['rel_path']):
305
src= os.path.join(plugin['rel_path'], src)
306
new_sources= "%s %s" % (new_sources, src)
308
new_sources= " ".join(plugin['sources'].split())
309
if new_sources != "":
310
plugin['sources']= new_sources
327
plugin['sources']= fix_file_paths(plugin, plugin['sources'])
311
328
plugin['main_source']= plugin['sources'].split()[0]
314
if plugin_dir != ".":
315
for header in plugin['headers'].split():
316
if not header.startswith(plugin['rel_path']):
317
header= os.path.join(plugin['rel_path'], header)
318
new_headers= "%s %s" % (new_headers, header)
320
new_headers= " ".join(plugin['headers'].split())
321
if new_headers != "":
322
plugin['headers']= new_headers
329
plugin['headers']= fix_file_paths(plugin, plugin['headers'])
330
plugin['install_headers']= fix_file_paths(plugin, plugin['install_headers'])
331
plugin['tests']= fix_file_paths(plugin, plugin['tests'])
324
333
# Make a yes/no version for autoconf help messages
325
334
if plugin['load_by_default']:
326
335
plugin['default_yesno']="yes"
328
337
plugin['default_yesno']="no"
339
if plugin.has_key('extra_dist'):
340
plugin['extra_dist']=" ".join([os.path.join(plugin['rel_path'],f) for f in plugin['extra_dist'].split()])
331
343
plugin['build_conditional_tag']= "BUILD_%s_PLUGIN" % plugin['name'].upper()
332
344
plugin['name_with_dashes']= plugin['name'].replace('_','-')
333
345
if plugin.has_key('build_conditional'):
365
def find_docs(plugin_dir):
366
if os.path.isfile(os.path.join(plugin_dir, "docs", "index.rst")):
367
return os.path.join(plugin_dir, "docs")
353
369
def read_plugin_ini(plugin_dir):
354
370
if plugin_dir == ".":
355
371
plugin_name="**OUT-OF-TREE**"
357
plugin_name=os.path.basename(plugin_dir)
359
plugin_file= os.path.join(plugin_dir,plugin_ini_fname)
360
plugin_defaults= dict(sources="",
373
short_name=os.path.basename(plugin_dir)
374
plugin_name = plugin_dir[plugin_dir.index(config['root_plugin_dir']) + len(config['root_plugin_dir']) + 1:]
375
module_name = plugin_name.replace("/", config['module_name_separator']).replace("\\", config['module_name_separator'])
376
plugin_name = plugin_name.replace("/", config['plugin_name_separator']).replace("\\", config['plugin_name_separator'])
379
plugin_file= os.path.join(plugin_dir,config['plugin_ini_fname'])
380
plugin_defaults= dict(sources="%s.cc" % short_name,
397
422
plugin['enabled']="yes"
398
423
if plugin.has_key('static'):
399
plugin['static']= parser.getboolean('plugin','static')
425
plugin['static']= parser.getboolean('plugin','static')
427
if plugin['static'][:5] == os.sys.platform[:5]:
428
plugin['static']= True
430
plugin['static']= False
400
431
if plugin.has_key('install'):
401
432
plugin['install']= parser.getboolean('plugin','install')
402
433
if plugin.has_key('testsuite'):
403
434
if plugin['testsuite'] == 'disable':
404
435
plugin['testsuite']= False
436
plugin['dist_testsuite']= find_testsuite(plugin_dir)
406
438
plugin_testsuite= find_testsuite(plugin_dir)
407
439
plugin['testsuitedir']=plugin_testsuite
409
441
plugin['testsuite']=True
411
443
plugin['testsuite']=False
413
plugin['cflags']+= extra_cflags
414
plugin['cppflags']+= extra_cppflags
415
plugin['cxxflags']+= extra_cxxflags
417
plugin['pname']= "lib%s%s%s" % (plugin_prefix, plugin['name'], plugin_suffix)
418
plugin['root_plugin_dir']= root_plugin_dir
419
plugin['plugin_prefix']= plugin_prefix
420
plugin['plugin_suffix']= plugin_suffix
421
plugin['pkgplugindir']= pkgplugindir
444
plugin['docs']= find_docs(plugin_dir)
446
plugin['cflags']+= ' ' + config['extra_cflags']
447
plugin['cppflags']+= ' ' + config['extra_cppflags']
448
plugin['cxxflags']+= ' ' + config['extra_cxxflags']
450
plugin['libname']= "lib%s%s%s" % (config['plugin_prefix'],
452
config['plugin_suffix'])
453
if config['force_lowercase_libname']:
454
plugin['libname']= plugin['libname'].lower()
456
plugin['root_plugin_dir']= config['root_plugin_dir']
457
plugin['plugin_prefix']= config['plugin_prefix']
458
plugin['plugin_suffix']= config['plugin_suffix']
459
plugin['pkgplugindir']= config['pkgplugindir']
461
# Dependencies must have a module but dependency aliases are simply added
462
# to the variable passed during compile.
463
plugin['dependency_list'] = plugin['dependencies'].split()
464
dependency_aliases = plugin['dependency_aliases'].split()
465
plugin['dependencies'] = ','.join(plugin['dependency_list'] +
466
plugin['dependency_aliases'].split())
467
dependency_libs = ["%s/lib%s%s.la" % (config['root_plugin_dir'],
468
dependency.lower().replace('::', '_'),
469
config['plugin_suffix'])
470
for dependency in plugin['dependency_list']]
471
plugin['libs'] = " ".join(plugin['libs'].split() + dependency_libs);
473
# Libtool is going to expand:
474
# -DPANDORA_MODULE_AUTHOR='"Padraig O'"'"'Sullivan"'
476
# "-DPANDORA_MODULE_AUTHOR=\"Padraig O'Sullivan\""
477
# So we have to replace internal ''s to '"'"'
478
for key in ('author','title','description','version'):
479
plugin[key]=plugin[key].replace('"','\\"')
480
plugin[key]=plugin[key].replace("'","'\"'\"'")
426
484
def write_plugin_am(plugin, plugin_am):
427
485
"""Write an automake fragment for this plugin.
429
487
:param plugin: The plugin dict.
430
488
:param plugin_am: The file to write to.
438
496
%(rel_path)s/plugin.ini:
499
if plugin.has_key('extra_dist') and plugin['extra_dist'] != "":
500
plugin_am.write("EXTRA_DIST += %(extra_dist)s\n" % plugin)
441
501
if plugin['headers'] != "":
442
502
plugin_am.write("noinst_HEADERS += %(headers)s\n" % plugin)
503
if plugin['install_headers'] != "":
504
plugin_am.write("nobase_include_HEADERS += %(install_headers)s\n" % plugin)
443
505
if plugin['testsuite']:
444
506
if plugin.has_key('testsuitedir') and plugin['testsuitedir'] != "":
445
507
plugin_am.write("EXTRA_DIST += %(rel_path)s/%(testsuitedir)s\n" % plugin)
508
if plugin.has_key('dist_testsuite') and plugin['dist_testsuite'] != "":
509
plugin_am.write("EXTRA_DIST += %(rel_path)s/%(dist_testsuite)s\n" % plugin)
510
if plugin['docs'] is not None:
511
plugin_am.write("EXTRA_DIST += ${top_srcdir}/%(rel_path)s/docs/*.rst\n" % plugin)
446
512
if plugin['static']:
447
513
plugin_am.write("""
448
514
%(root_plugin_dir)s_%(plugin_prefix)s%(name)s_dir=${top_srcdir}/%(rel_path)s
449
515
EXTRA_DIST += %(rel_path)s/plugin.ini
450
516
if %(build_conditional_tag)s
451
noinst_LTLIBRARIES+=%(root_plugin_dir)s/%(pname)s.la
452
%(root_plugin_dir)s_%(pname)s_la_LIBADD=%(libs)s
453
%(root_plugin_dir)s_%(pname)s_la_DEPENDENCIES=%(libs)s
454
%(root_plugin_dir)s_%(pname)s_la_LDFLAGS=$(AM_LDFLAGS) %(ldflags)s $(GCOV_LIBS)
455
%(root_plugin_dir)s_%(pname)s_la_CPPFLAGS=$(AM_CPPFLAGS) -DPANDORA_MODULE_NAME=%(name)s -DPANDORA_MODULE_AUTHOR="%(author)s" -DPANDORA_MODULE_TITLE="%(title)s" -DPANDORA_MODULE_VERSION="%(version)s" -DPANDORA_MODULE_LICENSE=%(license)s %(cppflags)s
456
%(root_plugin_dir)s_%(pname)s_la_CXXFLAGS=$(AM_CXXFLAGS) %(cxxflags)s
457
%(root_plugin_dir)s_%(pname)s_la_CFLAGS=$(AM_CFLAGS) %(cflags)s
459
%(root_plugin_dir)s_%(pname)s_la_SOURCES=%(sources)s
460
PANDORA_DYNAMIC_LDADDS+=${top_builddir}/%(root_plugin_dir)s/%(pname)s.la
517
noinst_LTLIBRARIES+=%(root_plugin_dir)s/%(libname)s.la
518
%(root_plugin_dir)s_%(libname)s_la_LIBADD=%(libs)s
519
%(root_plugin_dir)s_%(libname)s_la_DEPENDENCIES=%(libs)s
520
%(root_plugin_dir)s_%(libname)s_la_LDFLAGS=$(AM_LDFLAGS) %(ldflags)s $(GCOV_LIBS)
521
%(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
522
%(root_plugin_dir)s_%(libname)s_la_CXXFLAGS=$(AM_CXXFLAGS) %(cxxflags)s
523
%(root_plugin_dir)s_%(libname)s_la_CFLAGS=$(AM_CFLAGS) %(cflags)s
524
%(root_plugin_dir)s_%(libname)s_la_SOURCES=%(sources)s
525
check_PROGRAMS += %(tests)s
526
PANDORA_DYNAMIC_LDADDS+=${top_builddir}/%(root_plugin_dir)s/%(libname)s.la
465
531
%(root_plugin_dir)s_%(plugin_prefix)s%(name)s_dir=${top_srcdir}/%(rel_path)s
466
532
EXTRA_DIST += %(rel_path)s/plugin.ini
467
533
if %(build_conditional_tag)s
468
%(library_type)s_LTLIBRARIES+=%(root_plugin_dir)s/%(pname)s.la
469
%(root_plugin_dir)s_%(pname)s_la_LDFLAGS=-avoid-version -rpath $(pkgplugindir) $(AM_LDFLAGS) %(ldflags)s $(GCOV_LIBS)
470
%(root_plugin_dir)s_%(pname)s_la_LIBADD=%(libs)s
471
%(root_plugin_dir)s_%(pname)s_la_DEPENDENCIES=%(libs)s
472
%(root_plugin_dir)s_%(pname)s_la_CPPFLAGS=$(AM_CPPFLAGS) -DPANDORA_DYNAMIC_PLUGIN -DPANDORA_MODULE_NAME=%(name)s -DPANDORA_MODULE_AUTHOR="%(author)s" -DPANDORA_MODULE_TITLE="%(title)s" -DPANDORA_MODULE_VERSION="%(version)s" -DPANDORA_MODULE_LICENSE=%(license)s %(cppflags)s
473
%(root_plugin_dir)s_%(pname)s_la_CXXFLAGS=$(AM_CXXFLAGS) %(cxxflags)s
474
%(root_plugin_dir)s_%(pname)s_la_CFLAGS=$(AM_CFLAGS) %(cflags)s
476
%(root_plugin_dir)s_%(pname)s_la_SOURCES=%(sources)s
534
%(library_type)s_LTLIBRARIES+=%(root_plugin_dir)s/%(libname)s.la
535
%(root_plugin_dir)s_%(libname)s_la_LDFLAGS=-avoid-version -rpath $(pkgplugindir) $(AM_LDFLAGS) %(ldflags)s $(GCOV_LIBS)
536
%(root_plugin_dir)s_%(libname)s_la_LIBADD=%(libs)s
537
%(root_plugin_dir)s_%(libname)s_la_DEPENDENCIES=%(libs)s
538
%(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
539
%(root_plugin_dir)s_%(libname)s_la_CXXFLAGS=$(AM_CXXFLAGS) %(cxxflags)s
540
%(root_plugin_dir)s_%(libname)s_la_CFLAGS=$(AM_CFLAGS) %(cflags)s
541
%(root_plugin_dir)s_%(libname)s_la_SOURCES=%(sources)s
542
check_PROGRAMS += %(tests)s
479
545
plugin_am_file=os.path.join(plugin['rel_path'],'plugin.am')
480
546
if os.path.exists(plugin_am_file):
481
547
plugin_am.write('include %s\n' % plugin_am_file)
553
# Parse the pandora-plugin config file
555
config_defaults= dict(
558
plugin_ini_fname='plugin.ini',
566
default_install='True',
567
default_plugin_version='',
568
default_load_by_default='False',
569
force_lowercase_libname='True',
570
plugin_name_separator='_',
571
module_name_separator='::'
574
config_parser = ConfigParser.ConfigParser(defaults=config_defaults)
575
config_parser.read(pandora_plugin_file)
576
config = dict(config_parser.items('pandora-plugin'))
577
config['force_lowercase_libname']=config_parser.getboolean('pandora-plugin','force_lowercase_libname')
485
579
# I'm 3 seconds away from writing a comprehensive build solution
486
580
if not os.path.exists('config/pandora_vc_revinfo'):
487
581
if os.path.exists('.bzr'):
488
582
bzr_revno= subprocess.Popen(["bzr", "revno"], stdout=subprocess.PIPE).communicate()[0].strip()
489
583
rev_date= datetime.date.fromtimestamp(time.time())
490
default_plugin_version = "%d.%02d.%s" % (rev_date.year, rev_date.month, bzr_revno)
584
config['default_plugin_version'] = "%d.%02d.%s" % (rev_date.year, rev_date.month, bzr_revno)
492
default_plugin_version=datetime.date.fromtimestamp(time.time()).isoformat()
586
config['default_plugin_version']=datetime.date.fromtimestamp(time.time()).isoformat()
494
588
# need to read config/pandora_vc_revno
495
589
pandora_vc_revno=open('config/pandora_vc_revinfo','r').read().split()
518
612
if len(actions) == 0:
519
613
actions.append('write')
521
617
def accumulate_plugins(arg, dirname, fnames):
522
618
# plugin_ini_fname is a name in dirname indicating dirname is a plugin.
523
if plugin_ini_fname in fnames:
619
if config['plugin_ini_fname'] in fnames:
524
620
arg.append(dirname)
525
os.path.walk(os.path.join(top_srcdir,root_plugin_dir),accumulate_plugins,plugin_list)
622
os.path.walk(os.path.join(config['top_srcdir'],
623
config['root_plugin_dir']),
528
627
if not os.path.exists("config/pandora-plugin.am") or "write" in actions:
529
628
plugin_am_file = ChangeProtectedFile(os.path.join('config', 'pandora-plugin.am'))
573
684
for plugin_dir in plugin_list:
574
685
plugin_am_file.write("\\\n\t%s/plugin.ini " % plugin_dir)
575
686
plugin_am_file.write("\n\tcd ${top_srcdir} && python config/pandora-plugin write\n")
689
# Load all plugin.ini files first so we can do dependency tracking.
576
690
for plugin_dir in plugin_list:
577
write_plugin(plugin_dir)
691
plugin = read_plugin_ini(plugin_dir)
692
expand_plugin_ini(plugin)
693
plugin_ini_list.append(plugin)
695
# Check for duplicates
696
plugin_name_list = [plugin['libname'] for plugin in plugin_ini_list]
697
for plugin in plugin_ini_list:
698
if plugin_name_list.count(plugin['libname']) != 1:
699
print "Duplicate module name %s" % plugin['libname']
702
for plugin in plugin_ini_list:
703
write_plugin(plugin, plugin_ini_list)
579
705
if plugin_am_file is not None:
580
706
plugin_am_file.close()
581
707
if plugin_ac_file is not None:
582
708
plugin_ac_file.close()
709
if plugin_doc_index is not None:
710
plugin_doc_index.close()