Import ('env')

env = env.Clone ()

env.Append (CPPPATH = '#/libVIDF')

SRCS = Split ("""vidf.y.tab.c create_struct.c err_msg.c
                 free_vidf_str.c ParseOldVIDF.c read_idf.c
                 read_idf_mem.c mainVIDF.c GetFromNewVIDF.c
                 mapVIDF.C ReadNewVIDF.C Cache.C""")

yacc = env.CFile (target=['y.tab.c', 'y.tab.h'], source='vidf-parse.y')
lex = env.CFile (target=['lex.yy.c'], source='vidf.l')

first = env.Command (['vidf.y.tab.c', 'vidf.y.tab.h'], 
             [yacc[0], yacc[1], 'sed_cmds'],
             ["sed -f ${SOURCES[2]} ${SOURCES[0]} > ${TARGETS[0]}",
              "sed -f ${SOURCES[2]} ${SOURCES[1]} > ${TARGETS[1]}"])

second = env.Command ('vidf.lex.yy.c', [lex[0], 'sed_cmds'],
            ['sed -f ${SOURCES[1]} ${SOURCES[0]} > $TARGET'])

lex_obj = env.Object (second,
                     CPPDEFINES = env ['CPPDEFINES'] + ["YY_NO_UNPUT"])
shared_lex_obj = env.SharedObject (second,
                     CPPDEFINES = env ['CPPDEFINES'] + ["YY_NO_UNPUT"])

HEADERS = Split ("libVIDF.h vidf_defs.h vidf_codes.h vidf_tensor_defs.h")

LIBRARIES = Flatten ([env ['DBLIBS'], 'Cfg', 'ant', env ['CPPLIB'], env ['LEXLIB'], 'm'])
SHLIBRARIES = Flatten ([env ['DB_SH_LIBS'], 'Cfg', 'ant', env ['LEXLIB'], 'm'])

env.SDDASBuildLibrary ('libVIDF', SRCS, HEADERS, SHLIBRARIES, True, lex_obj, shared_lex_obj)
env.SDDASBuildProgram ('itimes', 'itimes.c', ['VIDF'] + LIBRARIES)
env.SDDASBuildProgram ('dump_vidf', 'dump_vidf.c', ['VIDF'] + LIBRARIES)

