#!/usr/bin/env python # Mapnik uses the build tool SCons. # This python file is run to compile a plugin # It must be called from the main 'SConstruct' file like: # SConscript('path/to/this/file.py') # see docs at: http://www.scons.org/wiki/SConscript() import os # Here we pull from the SCons environment exported from the main instance Import ('plugin_base') Import ('env') # Give this plugin a name # here this happens to be the same as the directory PLUGIN_NAME = 'hello' # the below install details are also pulled from the # main SConstruct file where configuration happens # clone the environment here # so that if we modify the env it in this file # those changes to not pollute other builds later on... plugin_env = plugin_base.Clone() # Add the cpp files that need to be compiled plugin_sources = Split( """ %(PLUGIN_NAME)s_datasource.cpp %(PLUGIN_NAME)s_featureset.cpp """ % locals() ) # Add any external libraries this plugin should # directly link to libraries = [ '' ] # eg 'libfoo' libraries.append('boost_system%s' % env['BOOST_APPEND']) # link libicuuc, but ICU_LIB_NAME is used custom builds of icu can # have different library names like osx which offers /usr/lib/libicucore.dylib libraries.append(env['ICU_LIB_NAME']) # this is valid if we are building an external plugin as shared library if env['PLUGIN_LINKING'] == 'shared': # plugins can go anywhere, and be registered in custom locations by Mapnik # but the standard location is '/usr/local/lib/mapnik/input' install_dest = env['MAPNIK_INPUT_PLUGINS_DEST'] # only link mapnik if we are build an external shared object libraries.append('mapnik') TARGET = plugin_env.SharedLibrary( # the name of the target to build, eg 'sqlite.input' '../%s' % PLUGIN_NAME, # prefix - normally none used SHLIBPREFIX='', # extension, mapnik expects '.input' SHLIBSUFFIX='.input', # list of source files to compile source=plugin_sources, # libraries to link to LIBS=libraries ) # if the plugin links to libmapnik ensure it is built first Depends(TARGET, env.subst('../../../../src/%s' % env['MAPNIK_LIB_NAME'])) # if 'uninstall' is not passed on the command line # then we actually create the install targets that # scons will install if 'install' is passed as an arg if 'uninstall' not in COMMAND_LINE_TARGETS: env.Install(install_dest, TARGET) env.Alias('install', install_dest) # Return the plugin building options to scons # This is used when statically linking the plugin with mapnik) plugin_obj = { 'LIBS': libraries, 'SOURCES': plugin_sources, } Return('plugin_obj')