diff --git a/demo/c++/SConscript b/demo/c++/SConscript index 90e9344cc..6c32de5e7 100644 --- a/demo/c++/SConscript +++ b/demo/c++/SConscript @@ -32,13 +32,16 @@ source = Split( demo_env = env.Clone() -headers = env['CPPPATH'] +demo_env['CXXFLAGS'] = copy(env['LIBMAPNIK_CXXFLAGS']) +demo_env.PrependUnique(CPPPATH=copy(env['CAIROMM_CPPPATHS'])) libraries = copy(env['LIBMAPNIK_LIBS']) boost_program_options = 'boost_program_options%s' % env['BOOST_APPEND'] libraries.extend([boost_program_options,'mapnik2']) - -rundemo = demo_env.Program('rundemo', source, CPPPATH=headers, LIBS=libraries, LINKFLAGS=env["CUSTOM_LDFLAGS"]) + +rundemo = demo_env.Program('rundemo', source, LIBS=libraries, LINKFLAGS=env["CUSTOM_LDFLAGS"]) + +Depends(rundemo, env.subst('../../src/%s' % env['MAPNIK_LIB_NAME'])) # we don't install this app because the datasource paths are relative # and we're not going to install the sample data. diff --git a/demo/c++/rundemo.cpp b/demo/c++/rundemo.cpp index b0dbe9d09..4216dd677 100644 --- a/demo/c++/rundemo.cpp +++ b/demo/c++/rundemo.cpp @@ -43,7 +43,7 @@ int main ( int argc , char** argv) { if (argc != 2) { - std::cout << "usage: ./rundemo \nUsually /usr/local/lib/mapnik\n"; + std::cout << "usage: ./rundemo \nUsually /usr/local/lib/mapnik2\n"; std::cout << "Warning: ./rundemo looks for data in ../data/,\nTherefore must be run from within the demo/c++ folder.\n"; return EXIT_SUCCESS; } diff --git a/src/SConscript b/src/SConscript index bcaf895f9..04d368fa3 100644 --- a/src/SConscript +++ b/src/SConscript @@ -40,11 +40,11 @@ def call(cmd, silent=True): def ldconfig(*args,**kwargs): call('ldconfig') - if env['LINKING'] == 'static': lib_env.Append(CXXFLAGS="-fPIC") mapnik_lib_link_flag = '' +libmapnik_cxxflags = copy(lib_env['CXXFLAGS']) ABI_VERSION = env['ABI_VERSION'] @@ -54,10 +54,8 @@ regex = 'boost_regex%s' % env['BOOST_APPEND'] # clear out and re-set libs for this env lib_env['LIBS'] = ['freetype','ltdl','png','tiff','z','jpeg','proj',env['ICU_LIB_NAME'],filesystem,regex] -if env['HAS_CAIRO']: - # add cairo and cairomm-1.0 to libs - lib_env['LIBS'].append('cairomm-1.0') - lib_env['LIBS'].append('cairo') +if len(env['EXTRA_FREETYPE_LIBS']): + lib_env['LIBS'].extend(copy(env['EXTRA_FREETYPE_LIBS'])) if env['XMLPARSER'] == 'libxml2': lib_env['LIBS'].append('xml2') @@ -156,6 +154,7 @@ source = Split( if env['LIBTOOL_SUPPORTS_ADVISE']: env3 = lib_env.Clone() env3.Append(CXXFLAGS='-DLIBTOOL_SUPPORTS_ADVISE') + libmapnik_cxxflags.append('-DLIBTOOL_SUPPORTS_ADVISE') cpp = 'datasource_cache.cpp' if env['LINKING'] == 'static': source.insert(0,env3.StaticObject(cpp)) @@ -190,7 +189,6 @@ source += Split( if env['RUNTIME_LINK'] == "static": source += glob.glob('../agg/src/' + '*.cpp') - #source.append(File('../agg/libagg.a')) # grid backend source += Split( @@ -229,29 +227,28 @@ if env['SVG_RENDERER']: # svg backend svg/process_text_symbolizer.cpp """) lib_env.Append(CXXFLAGS = '-DSVG_RENDERER') + libmapnik_cxxflags.append('-DSVG_RENDERER') if env['HAS_CAIRO']: - # attach libs to library linking environment - try: - cmd = 'pkg-config --libs cairomm-1.0' - if lib_env['RUNTIME_LINK'] == 'static': - cmd += ' --static' - lib_env.ParseConfig(cmd) - env2 = lib_env.Clone() - env2.Append(CXXFLAGS = '-DHAVE_CAIRO') - # attach cflags to specific compile environment - env2.ParseConfig('pkg-config --cflags cairomm-1.0') - fixup = ['cairo_renderer.cpp','graphics.cpp','image_util.cpp'] - for cpp in fixup: - if cpp in source: - source.remove(cpp) - if env['LINKING'] == 'static': - source.insert(0,env2.StaticObject(cpp)) - else: - source.insert(0,env2.SharedObject(cpp)) - except OSError, e: - print '\nFailed to detect cairo/cairomm configuration, please re-run "python scons/scons.py configure"' - sys.exit(1) + lib_env.PrependUnique(LIBPATH=env['CAIROMM_LIBPATHS']) + lib_env.Append(LIBS=env['CAIROMM_LINKFLAGS']) + lib_env.Append(CXXFLAGS = '-DHAVE_CAIRO') + libmapnik_cxxflags.append('-DHAVE_CAIRO') + lib_env.PrependUnique(CPPPATH=copy(env['CAIROMM_CPPPATHS'])) + source.insert(0,'cairo_renderer.cpp') + #cairo_env.PrependUnique(CPPPATH=env['CAIROMM_CPPPATHS']) + # not safe, to much depends on graphics.hpp + #cairo_env = lib_env.Clone() + #cairo_env.Append(CXXFLAGS = '-DHAVE_CAIRO') + #fixup = ['feature_type_style.cpp','load_map.cpp','cairo_renderer.cpp','graphics.cpp','image_util.cpp'] + #for cpp in fixup: + # if cpp in source: + # source.remove(cpp) + # if env['LINKING'] == 'static': + # source.insert(0,cairo_env.StaticObject(cpp)) + # else: + # source.insert(0,cairo_env.SharedObject(cpp)) + if env['XMLPARSER'] == 'tinyxml': source += Split( @@ -268,6 +265,7 @@ elif env['XMLPARSER'] == 'libxml2' and env['HAS_LIBXML2']: """) env2 = lib_env.Clone() env2.Append(CXXFLAGS = '-DHAVE_LIBXML2') + libmapnik_cxxflags.append('-DHAVE_LIBXML2') fixup = ['load_map.cpp','libxml2_loader.cpp'] for cpp in fixup: if cpp in source: @@ -287,8 +285,9 @@ if env['LINKING'] == 'static': else: mapnik = lib_env.SharedLibrary('mapnik2', source, LINKFLAGS=linkflags) -# cache libraries value for other builds to use +# cache library values for other builds to use env['LIBMAPNIK_LIBS'] = copy(lib_env['LIBS']) +env['LIBMAPNIK_CXXFLAGS'] = libmapnik_cxxflags if env['PLATFORM'] != 'Darwin': # Symlink command, only works if both files are in same directory diff --git a/utils/mapnik-config/SConscript b/utils/mapnik-config/SConscript index 82bbcf5a3..8081c1152 100644 --- a/utils/mapnik-config/SConscript +++ b/utils/mapnik-config/SConscript @@ -2,6 +2,7 @@ import re import os import sys +from copy import copy Import('env') @@ -51,31 +52,10 @@ def write_config(configuration,template,config_file): except: pass -# recreate a few dynamic path additions -if config_env['HAS_CAIRO']: - # attach libs to library linking environment - try: - config_env.ParseConfig('pkg-config --libs cairomm-1.0') - config_env.Append(CXXFLAGS = '-DHAVE_CAIRO') - config_env.ParseConfig('pkg-config --cflags cairomm-1.0') - except OSError, e: - print '\nFailed to detect cairo/cairomm configuration, please re-run "python scons/scons.py configure"' - sys.exit(1) - - # todo - refine this list -# todo - custom_cxxflags are being duplicated somewhere cpp_paths = ''.join([' -I%s' % i for i in config_env['CPPPATH'] if not i.startswith('#')]) -other_includes = config_env['CUSTOM_CXXFLAGS'] + config_env['CXXFLAGS'] + cpp_paths -if config_env['XMLPARSER'] == 'libxml2' and config_env['HAS_LIBXML2']: - other_includes.append('-DHAVE_LIBXML2') - -if config_env['SVG_RENDERER']: - other_includes.append('-DSVG_RENDERER') - -if config_env['LIBTOOL_SUPPORTS_ADVISE']: - other_includes.append('-DLIBTOOL_SUPPORTS_ADVISE') +other_includes = config_env['LIBMAPNIK_CXXFLAGS'] + cpp_paths ldflags = config_env['CUSTOM_LDFLAGS'] + ''.join([' -L%s' % i for i in config_env['LIBPATH'] if not i.startswith('#')]) @@ -83,7 +63,6 @@ dep_libs = ''.join([' -l%s' % i for i in env['LIBMAPNIK_LIBS']]) if env['INTERNAL_LIBAGG']: dep_libs = dep_libs.replace('-lagg','') - configuration = { "prefix": config_env['PREFIX'], @@ -106,11 +85,13 @@ write_config(configuration,template,config_file) target_path = os.path.normpath(os.path.join(config_env['INSTALL_PREFIX'],'bin')) full_target = os.path.join(target_path,config_file) +Depends(full_target, env.subst('../../src/%s' % env['MAPNIK_LIB_NAME'])) + if 'install' in COMMAND_LINE_TARGETS: # we must add 'install' catch here because otherwise # custom command will be run when not installing env.Alias('install',full_target) - #Depends(t, env.subst('../../src/%s' % env['MAPNIK_LIB_NAME'])) + env.Command(full_target, config_file, [ Copy("$TARGET","$SOURCE"), @@ -118,9 +99,3 @@ if 'install' in COMMAND_LINE_TARGETS: ]) config_env['create_uninstall_target'](env,os.path.join(target_path,config_file)) - - - - - - diff --git a/utils/ogrindex/SConscript b/utils/ogrindex/SConscript index 2d3aed29d..4e65a3d89 100644 --- a/utils/ogrindex/SConscript +++ b/utils/ogrindex/SConscript @@ -34,19 +34,22 @@ source = Split( headers = ['#plugins/input/ogr'] + env['CPPPATH'] -boost_program_options = 'boost_program_options%s' % env['BOOST_APPEND'] -boost_filesystem = 'boost_filesystem%s' % env['BOOST_APPEND'] -libraries = [boost_program_options,boost_filesystem,env['PLUGINS']['ogr']['lib'],'mapnik2'] +program_env['LIBS'] = [env['PLUGINS']['ogr']['lib']] -boost_system = 'boost_system%s' % env['BOOST_APPEND'] +# Link Library to Dependencies +program_env['LIBS'].append('mapnik2') +program_env['LIBS'].append(env['ICU_LIB_NAME']) +program_env['LIBS'].append('boost_system%s' % env['BOOST_APPEND']) +program_env['LIBS'].append('boost_filesystem%s' % env['BOOST_APPEND']) +program_env['LIBS'].append('boost_program_options%s' % env['BOOST_APPEND']) -if env['HAS_BOOST_SYSTEM']: - libraries.append(boost_system) - -if env['PLATFORM'] == 'Darwin': - libraries.append(env['ICU_LIB_NAME']) +if env['RUNTIME_LINK'] == 'static': + cmd = 'gdal-config --dep-libs' + program_env.ParseConfig(cmd) -ogrindex = program_env.Program('ogrindex', source, CPPPATH=headers, LIBS=libraries, LINKFLAGS=env['CUSTOM_LDFLAGS']) +ogrindex = program_env.Program('ogrindex', source, CPPPATH=headers, LINKFLAGS=env['CUSTOM_LDFLAGS']) + +Depends(ogrindex, env.subst('../../src/%s' % env['MAPNIK_LIB_NAME'])) if 'uninstall' not in COMMAND_LINE_TARGETS: env.Install(os.path.join(env['INSTALL_PREFIX'],'bin'), ogrindex) diff --git a/utils/pgsql2sqlite/SConscript b/utils/pgsql2sqlite/SConscript index 5cd8982a8..177815d81 100644 --- a/utils/pgsql2sqlite/SConscript +++ b/utils/pgsql2sqlite/SConscript @@ -42,9 +42,10 @@ libraries = copy(env['LIBMAPNIK_LIBS']) boost_program_options = 'boost_program_options%s' % env['BOOST_APPEND'] libraries.extend([boost_program_options,'sqlite3','pq','mapnik2']) +pgsql2sqlite = program_env.Program('pgsql2sqlite', source, CPPPATH=headers, LIBS=libraries, LINKFLAGS=env['CUSTOM_LDFLAGS']) +Depends(pgsql2sqlite, env.subst('../../src/%s' % env['MAPNIK_LIB_NAME'])) + if 'uninstall' not in COMMAND_LINE_TARGETS: - pgsql2sqlite = program_env.Program('pgsql2sqlite', source, CPPPATH=headers, LIBS=libraries, LINKFLAGS=env['CUSTOM_LDFLAGS']) - Depends(pgsql2sqlite, env.subst('../../src/%s' % env['MAPNIK_LIB_NAME'])) env.Install(os.path.join(env['INSTALL_PREFIX'],'bin'), pgsql2sqlite) env.Alias('install', os.path.join(env['INSTALL_PREFIX'],'bin')) diff --git a/utils/shapeindex/SConscript b/utils/shapeindex/SConscript index 7bfb1b1ea..d23e6390b 100644 --- a/utils/shapeindex/SConscript +++ b/utils/shapeindex/SConscript @@ -47,6 +47,8 @@ if env['HAS_BOOST_SYSTEM']: shapeindex = program_env.Program('shapeindex', source, CPPPATH=headers, LIBS=libraries, LINKFLAGS=env['CUSTOM_LDFLAGS']) +Depends(shapeindex, env.subst('../../src/%s' % env['MAPNIK_LIB_NAME'])) + if 'uninstall' not in COMMAND_LINE_TARGETS: env.Install(os.path.join(env['INSTALL_PREFIX'],'bin'), shapeindex) env.Alias('install', os.path.join(env['INSTALL_PREFIX'],'bin'))