Import('env Automatic_Library pb pb_name')

def lex_header_gen(env, target, source, for_signature):
    result = f'--header-file={source[0]}.hpp'
    return result

env['LEX_HEADER_GEN'] = lex_header_gen
env.Append(LEXFLAGS=['$LEX_HEADER_GEN'])

def yacc_header_gen(env, target, source, for_signature):
    result = f'--defines={source[0]}.hpp'
    return result

env['YACC_HEADER_GEN'] = yacc_header_gen
env.Append(YACCFLAGS=['$YACC_HEADER_GEN'])

ly=[]
if env['USE_LEX_YACC']:
    env2=env.Copy()
#    env2['LEXFLAGS']="--header-file=Public_Library/Core/Symbolics/PROGRAM_LEX.hpp"
#    env2['YACCFLAGS']="--defines=Public_Library/Core/Symbolics/PROGRAM_YACC.hpp"
    if env['SHARED']: builder=env2.SharedObject
    else: builder=env2.StaticObject
    yy=env.CXXFile(target='#Public_Library/Core/Symbolics/PROGRAM_YACC.yy.cpp',source='Core/Symbolics/PROGRAM_YACC.yy')
    ll=env.CXXFile(target='#Public_Library/Core/Symbolics/PROGRAM_LEX.ll.cpp',source='Core/Symbolics/PROGRAM_LEX.ll')
#    yy=builder('Core/Symbolics/PROGRAM_YACC.yy')
#    ll=builder('Core/Symbolics/PROGRAM_LEX.ll')
#    env.Depends("Core/Symbolics/PROGRAM.cpp",yy)
#    env.Depends("Core/Symbolics/PROGRAM.cpp",ll)
#    ly=yy+ll
#    ly=[i for i in ly if str(i).endswith('.cpp')]

pb['Core']=Automatic_Library(env,'PhysBAM_Core',['Core'],ly)
pb['Rigids']=Automatic_Library(env,'PhysBAM_Rigids',['Rigids'])+pb['Core']
pb['Deformables']=Automatic_Library(env,'PhysBAM_Deformables',['Deformables'])+pb['Rigids']
pb['Solids']=Automatic_Library(env,'PhysBAM_Solids',['Solids'])+pb['Deformables']
pb['Hybrid_Methods']=Automatic_Library(env,'PhysBAM_Hybrid_Methods',['Hybrid_Methods'])+pb['Solids']
pb['Dynamics']=Automatic_Library(env,'PhysBAM_Dynamics',['Dynamics', 'Fluids', 'Compressible', 'Incompressible'])+pb['Solids']

pb_name['Core']=['PhysBAM_Core']
pb_name['Rigids']=['PhysBAM_Rigids']+pb_name['Core']
pb_name['Deformables']=['PhysBAM_Deformables']+pb_name['Rigids']
pb_name['Solids']=['PhysBAM_Solids']+pb_name['Deformables']
pb_name['Hybrid_Methods']=['PhysBAM_Hybrid_Methods']+pb_name['Solids']
pb_name['Dynamics']=['PhysBAM_Dynamics']+pb_name['Solids']
