# vim: set filetype=python :
Import('*')
linkPlugins=env['linkPlugins']
import os.path 

env.Install('$LIBDIR/py/yade',[
	env.SharedLibrary('WeightedAverage2d',['WeightedAverage2d.cpp'],SHLIBPREFIX=''),
	env.SharedLibrary('_eudoxos',['_eudoxos.cpp'],SHLIBPREFIX='',CXXFLAGS=env['CXXFLAGS']+([] if not os.path.exists('../../brefcom-mm.hh') else ['-include','../brefcom-mm.hh']),LIBS=env['LIBS']+[
		linkPlugins(['Shop','ConcretePM']),
		]),
	env.SharedLibrary('log',['log.cpp'],SHLIBPREFIX=''),
	env.SharedLibrary('_utils',['_utils.cpp'],SHLIBPREFIX='',LIBS=env['LIBS']+[
		linkPlugins(['Shop','ConcretePM','Facet']),
		]),
	env.SharedLibrary('_packPredicates',['pack/_packPredicates.cpp'],SHLIBPREFIX='',
		# link to the symlink to the python module (created in lib/SConstruct; see explanation there)
		LIBS=env['LIBS']+(['_gts__python-module'] if 'YADE_GTS' in env['CPPDEFINES'] else []),
		),
	env.SharedLibrary('_packSpheres',['pack/_packSpheres.cpp'],SHLIBPREFIX='',LIBS=env['LIBS']+[
		linkPlugins(['Shop','SpherePack']),
		])
	# include SpherePadder only optionally
	]+([env.SharedLibrary('_packSpherePadder',env.Combine('packSpherePadder.cpp',['pack/_packSpherePadder.cpp','pack/SpherePadder/SpherePadder.cpp','pack/SpherePadder/TetraMesh.cpp','pack/SpherePadder/CellPartition.cpp']+(['pack/SpherePadder/SpherePackingTriangulation.cpp'] if 'cgal' in env['features'] else [])),SHLIBPREFIX='',LIBS=env['LIBS']+linkPlugins(['SpherePack'])) if 'sphere-padder' in env['features'] else []])+[
	env.SharedLibrary('_packObb',['pack/_packObb.cpp'],SHLIBPREFIX=''),
	env.AlwaysBuild(env.ScanReplace('__init__.py.in')),
	env.AlwaysBuild(env.ScanReplace('config.py.in')),
	env.File('utils.py'),
	env.File('ymport.py'),
	env.File('geom.py'),
	env.File('bodiesHandling.py'),
	env.File('export.py'),
	env.File('eudoxos.py'),
	env.File('plot.py'),
	env.File('params.py'),
	env.File('linterpolation.py'),
	env.File('timing.py'),
	env.File('pack/pack.py'),
	env.File('remote.py'),
	env.File('system.py'),
	env.File('export.py'),
	env.File('post2d.py'),
	env.File('runtime.py'),
	env.File('manpage.py'),
	env.File('_extraDocs.py'),
	env.SharedLibrary('wrapper',['wrapper/yadeWrapper.cpp'],SHLIBPREFIX='',LIBS=linkPlugins(['Shop','Dispatching','InteractionLoop','ParallelEngine','Clump','STLImporter',])),
	env.SharedLibrary('_customConverters',['wrapper/customConverters.cpp'],SHLIBPREFIX='',LIBS=env['LIBS']+linkPlugins(['Dispatching','MatchMaker']+(['GLDrawFunctors','OpenGLRenderer'] if 'opengl' in env['features'] else [])))
])
env.Install('$LIBDIR/py/yade/tests',[
	env.File(env.Glob('tests/*.py'),'tests'),
])

# 3rd party modules:
# ==================
env.Install('$LIBDIR/py',[
	env.SharedLibrary('miniEigen',['mathWrap/miniEigen.cpp'],SHLIBPREFIX='',CPPPATH=env['CPPPATH']+['../lib/'],LIBS=env['LIBS']+['core']),
	env.File('mtTkinter.py','3rd-party/mtTkinter-0.3'),
])

if 'YADE_GTS' in env['CPPDEFINES']:
	env.Install('$LIBDIR/py/gts',[
		env.SharedLibrary('_gts',['3rd-party/pygts-0.3.1/cleanup.c','3rd-party/pygts-0.3.1/edge.c','3rd-party/pygts-0.3.1/face.c','3rd-party/pygts-0.3.1/object.c','3rd-party/pygts-0.3.1/point.c','3rd-party/pygts-0.3.1/pygts.c','3rd-party/pygts-0.3.1/segment.c','3rd-party/pygts-0.3.1/surface.c','3rd-party/pygts-0.3.1/triangle.c','3rd-party/pygts-0.3.1/vertex.c'],SHLIBPREFIX='',CPPDEFINES=env['CPPDEFINES']+['PYGTS_HAS_NUMPY'],CXXFLAGS=env['CXXFLAGS']+['-Wno-all']),
		env.File('3rd-party/pygts-0.3.1/__init__.py'),
		env.File('3rd-party/pygts-0.3.1/pygts.py')
	])
	#
	# the _packPredicates module needs to link to us, but linker by defaults looks for lib*.so files
	# Therefore we will create symlink with that name (in lib/ rather than py/gts, so that it is in the RPATH
	# without further modifications). If the file were copied (installed 2 times), static data would be
	# created twice and it would break python type identification (among other things).
	#
	env.Command('$LIBDIR/lib/lib_gts__python-module.so','$LIBDIR/py/gts/_gts.so','ln -s -f ../py/gts/_gts.so $TARGET')






