scons: conditionally add CXXFLAGS for headers needing Cairo support

This commit is contained in:
Dane Springmeyer 2010-07-14 05:08:28 +00:00
parent c2988656df
commit fd8695c107
4 changed files with 40 additions and 17 deletions

View file

@ -322,7 +322,9 @@ pickle_store = [# Scons internal variables
'PYTHON_SYS_PREFIX',
'COLOR_PRINT',
'HAS_BOOST_SYSTEM',
'SVN_REVISION'
'SVN_REVISION',
'HAS_CAIRO',
'HAS_PYCAIRO'
]
# Add all other user configurable options to pickle pickle_store
@ -775,7 +777,7 @@ if not preconfigured:
if env['CAIRO'] and conf.CheckPKGConfig('0.15.0') and conf.CheckPKG('cairomm-1.0'):
env.ParseConfig('pkg-config --libs --cflags cairomm-1.0')
env.Append(CXXFLAGS = '-DHAVE_CAIRO')
env['HAS_CAIRO'] = True
else:
env['SKIPPED_DEPS'].extend(['cairo','cairomm'])
@ -919,7 +921,7 @@ if not preconfigured:
if env['CAIRO'] and conf.CheckPKGConfig('0.15.0') and conf.CheckPKG('pycairo'):
env.ParseConfig('pkg-config --cflags pycairo')
env.Append(CXXFLAGS = '-DHAVE_PYCAIRO')
env['HAS_PYCAIRO'] = True
else:
env['SKIPPED_DEPS'].extend(['pycairo'])

View file

@ -48,7 +48,7 @@ if env['PLATFORM'] == 'Darwin':
libraries.append('boost_regex%s' % env['BOOST_APPEND'])
if env['THREADING'] == 'multi':
libraries.append('boost_thread%s' % env['BOOST_APPEND'])
if '-DHAVE_CAIRO' in env['CXXFLAGS']:
if env['HAS_CAIRO']:
libraries.append([lib for lib in env['LIBS'] if lib.startswith('cairo')])
##### Python linking on OS X is tricky ###
@ -136,13 +136,30 @@ env.Alias(target='install', source=ogcserver_module)
# install the shared object beside the module directory
sources = glob.glob('*.cpp')
if env.get('SVN_REVISION'):
if env['SVN_REVISION']:
sources.remove('mapnik_python.cpp')
env2 = env.Clone();
env2 = env.Clone()
env2.Append(CCFLAGS='-DSVN_REVISION=%s' % env['SVN_REVISION'])
if env['HAS_CAIRO']:
env2.Append(CXXFLAGS = '-DHAVE_CAIRO')
if env['HAS_PYCAIRO']:
env2.Append(CXXFLAGS = '-DHAVE_PYCAIRO')
sources.insert(0,env2.SharedObject('mapnik_python.cpp'))
# install the shared object beside the module directory
_mapnik = env.LoadableModule('mapnik/_mapnik', sources, LIBS=libraries, LDMODULEPREFIX='', LDMODULESUFFIX='.so', CPPPATH=headers,LINKFLAGS=linkflags)
pymapniklib = env.Install(env['PYTHON_INSTALL_LOCATION'] + '/mapnik',_mapnik)
if env['HAS_CAIRO'] or env['HAS_PYCAIRO']:
env2 = env.Clone()
fixup = ['mapnik_image.cpp','python_cairo.cpp']
for cpp in fixup:
if cpp in sources:
sources.remove(cpp)
if env['HAS_CAIRO']:
env2.Append(CXXFLAGS = '-DHAVE_CAIRO')
if env['HAS_PYCAIRO']:
env2.Append(CXXFLAGS = '-DHAVE_PYCAIRO')
for cpp in fixup:
sources.insert(0,env2.SharedObject(cpp))
_mapnik = env.LoadableModule('mapnik/_mapnik2', sources, LIBS=libraries, LDMODULEPREFIX='', LDMODULESUFFIX='.so', CPPPATH=headers,LINKFLAGS=linkflags)
pymapniklib = env.Install(env['PYTHON_INSTALL_LOCATION'] + '/mapnik2',_mapnik)
env.Alias(target='install',source=pymapniklib)

View file

@ -36,7 +36,7 @@ boost_thread = 'boost_thread%s' % env['BOOST_APPEND']
libraries = [boost_thread,'mapnik']
if '-DHAVE_CAIRO' in env['CXXFLAGS']:
if env['HAS_CAIRO'] in env['CXXFLAGS']:
# add cairo and cairomm-1.0 to libs
libraries.append([lib for lib in env['LIBS'] if lib.startswith('cairo')])

View file

@ -38,7 +38,7 @@ regex = 'boost_regex%s' % env['BOOST_APPEND']
libraries = ['freetype','ltdl','png','tiff','z','jpeg','proj',env['ICU_LIB_NAME'],filesystem,regex]
if '-DHAVE_CAIRO' in env['CXXFLAGS']:
if env['HAS_CAIRO']:
# add cairo and cairomm-1.0 to libs
libraries.append([lib for lib in env['LIBS'] if lib.startswith('cairo')])
@ -73,8 +73,8 @@ else: # Linux and others
source = Split(
"""
agg_renderer.cpp
datasource_cache.cpp
color.cpp
datasource_cache.cpp
envelope.cpp
filter_factory.cpp
font_engine_freetype.cpp
@ -111,10 +111,14 @@ source = Split(
)
if 'cairo' in env['LIBS']:
source += Split(
"""
cairo_renderer.cpp
""")
env2 = env.Clone()
env2.Append(CXXFLAGS = '-DHAVE_CAIRO')
fixup = ['cairo_renderer.cpp','graphics.cpp','image_util.cpp']
for cpp in fixup:
if cpp in source:
source.remove(cpp)
for cpp in fixup:
source.insert(0,env2.SharedObject(cpp))
if env['XMLPARSER'] == 'tinyxml':
source += Split(
@ -130,7 +134,6 @@ elif env['XMLPARSER'] == 'libxml2':
libxml2_loader.cpp
""")
mapnik = env.SharedLibrary('mapnik', source, LIBS=libraries, LINKFLAGS=linkflags)
if env['PLATFORM'] != 'Darwin':
# Symlink command, only works if both files are in same directory
@ -158,4 +161,5 @@ else:
env.Alias(target='install', source=env.Install(install_prefix + '/' + env['LIBDIR_SCHEMA'], mapnik))
includes = glob.glob('../include/mapnik/*.hpp')
env.Alias(target='install', source=env.Install(install_prefix+'/include/mapnik', includes))