mirror of
https://github.com/open-source-parsers/jsoncpp.git
synced 2024-12-12 18:10:27 +01:00
64e07e54ed
- renamed SCons glob tool to globtool to avoid clash with python glob module. This prevented running the tests. - check target now works with SCons 1.x
117 lines
3.9 KiB
Python
117 lines
3.9 KiB
Python
# Big issue:
|
|
# emitter depends on doxyfile which is generated from doxyfile.in.
|
|
# build fails after cleaning and relaunching the build.
|
|
|
|
# Todo:
|
|
# Add helper function to environment like for glob
|
|
# Easier passage of header/footer
|
|
# Automatic deduction of index.html path based on custom parameters passed to doxyfile
|
|
|
|
import os
|
|
import os.path
|
|
from fnmatch import fnmatch
|
|
import SCons
|
|
|
|
def Doxyfile_emitter(target, source, env):
|
|
"""
|
|
Modify the target and source lists to use the defaults if nothing
|
|
else has been specified.
|
|
|
|
Dependencies on external HTML documentation references are also
|
|
appended to the source list.
|
|
"""
|
|
doxyfile_template = env.File(env['DOXYFILE_FILE'])
|
|
source.insert(0, doxyfile_template)
|
|
|
|
return target, source
|
|
|
|
def Doxyfile_Builder(target, source, env):
|
|
"""Input:
|
|
DOXYFILE_FILE
|
|
Path of the template file for the output doxyfile
|
|
|
|
DOXYFILE_DICT
|
|
A dictionnary of parameter to append to the generated doxyfile
|
|
"""
|
|
subdir = os.path.split(source[0].abspath)[0]
|
|
doc_top_dir = os.path.split(target[0].abspath)[0]
|
|
doxyfile_path = source[0].abspath
|
|
doxy_file = file( target[0].abspath, 'wt' )
|
|
try:
|
|
# First, output the template file
|
|
try:
|
|
f = file(doxyfile_path, 'rt')
|
|
doxy_file.write( f.read() )
|
|
f.close()
|
|
doxy_file.write( '\n' )
|
|
doxy_file.write( '# Generated content:\n' )
|
|
except:
|
|
raise SCons.Errors.UserError, "Can't read doxygen template file '%s'" % doxyfile_path
|
|
# Then, the input files
|
|
doxy_file.write( 'INPUT = \\\n' )
|
|
for source in source:
|
|
if source.abspath != doxyfile_path: # skip doxyfile path, which is the first source
|
|
doxy_file.write( '"%s" \\\n' % source.abspath )
|
|
doxy_file.write( '\n' )
|
|
# Dot...
|
|
values_dict = { 'HAVE_DOT': env.get('DOT') and 'YES' or 'NO',
|
|
'DOT_PATH': env.get('DOT') and os.path.split(env['DOT'])[0] or '',
|
|
'OUTPUT_DIRECTORY': doc_top_dir,
|
|
'WARN_LOGFILE': target[0].abspath + '-warning.log'}
|
|
values_dict.update( env['DOXYFILE_DICT'] )
|
|
# Finally, output user dictionary values which override any of the previously set parameters.
|
|
for key, value in values_dict.iteritems():
|
|
doxy_file.write ('%s = "%s"\n' % (key, str(value)))
|
|
finally:
|
|
doxy_file.close()
|
|
|
|
def generate(env):
|
|
"""
|
|
Add builders and construction variables for the
|
|
Doxygen tool.
|
|
"""
|
|
## Doxyfile builder
|
|
def doxyfile_message (target, source, env):
|
|
return "creating Doxygen config file '%s'" % target[0]
|
|
|
|
doxyfile_variables = [
|
|
'DOXYFILE_DICT',
|
|
'DOXYFILE_FILE'
|
|
]
|
|
|
|
#doxyfile_action = SCons.Action.Action( Doxyfile_Builder, doxyfile_message,
|
|
# doxyfile_variables )
|
|
doxyfile_action = SCons.Action.Action( Doxyfile_Builder, doxyfile_message)
|
|
|
|
doxyfile_builder = SCons.Builder.Builder( action = doxyfile_action,
|
|
emitter = Doxyfile_emitter )
|
|
|
|
env['BUILDERS']['Doxyfile'] = doxyfile_builder
|
|
env['DOXYFILE_DICT'] = {}
|
|
env['DOXYFILE_FILE'] = 'doxyfile.in'
|
|
|
|
## Doxygen builder
|
|
def Doxygen_emitter(target, source, env):
|
|
output_dir = str( source[0].dir )
|
|
if str(target[0]) == str(source[0]):
|
|
target = env.File( os.path.join( output_dir, 'html', 'index.html' ) )
|
|
return target, source
|
|
|
|
doxygen_action = SCons.Action.Action( [ '$DOXYGEN_COM'] )
|
|
doxygen_builder = SCons.Builder.Builder( action = doxygen_action,
|
|
emitter = Doxygen_emitter )
|
|
env['BUILDERS']['Doxygen'] = doxygen_builder
|
|
env['DOXYGEN_COM'] = '$DOXYGEN $DOXYGEN_FLAGS $SOURCE'
|
|
env['DOXYGEN_FLAGS'] = ''
|
|
env['DOXYGEN'] = 'doxygen'
|
|
|
|
dot_path = env.WhereIs("dot")
|
|
if dot_path:
|
|
env['DOT'] = dot_path
|
|
|
|
def exists(env):
|
|
"""
|
|
Make sure doxygen exists.
|
|
"""
|
|
return env.Detect("doxygen")
|