Import ('env')

env = env.Clone ()
env.Append (CPPPATH = '#/libPIDF')

CHECK_SRCS = ['chk_stubs.c']
NORMAL_SRCS = ['FindPidf.c']

COMMON = Split ("""
                 pidf.y.tab.c
                 Avg.c Bin.c Cal.c CoordSys.c CoordSysDef.c DataQual.c 
                 FindPidfPath.c Group.c Image.c Mode.c Moments.c MkOnLine.c
                 newRead.c ReadPidfRec.c Sensor.c Sweep.c Unit.c
                 PitchAngle.c SpinAngle.c SCPotential.c pidf_err_str.c
                 mapPIDF.C BinIndex.c MomentsDef.c FlowIntoDef.c
                 SweepUnits.c ScanUnits.c PidfGroup.c DTNames.c DTNums.c 
                 CalData.c ReadPidf.c Tensor.c TensorDef.c Background.c
                 """)

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

first = env.Command (['pidf.y.tab.c', 'pidf.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 ('pidf.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"])

common_objs = env.Object (COMMON, CPPPATH=env['CPPPATH']) + lex_obj
shared_common_objs = env.SharedObject (COMMON, CPPPATH=env['CPPPATH']) + shared_lex_obj

HEADERS = Split ("libPIDF.h pidf.h pidf_ret.h")

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

env.SDDASBuildLibrary ('libPIDF', NORMAL_SRCS, HEADERS, SHLIBRARIES, True, common_objs, shared_common_objs)
env.SDDASBuildLibrary ('libchkPidf', CHECK_SRCS, HEADERS, SHLIBRARIES, True, common_objs, shared_common_objs)
env.SDDASBuildProgram ('dump_pidf', 'dump_pidf.c', ['PIDF'] + LIBRARIES)
env.Program ('unitsList', 'unitsList.C', LIBS = ['PIDF'] + LIBRARIES + env ['EXTRA_LIBS'], LIBPATH = env ['SDDAS_LIB'])

