import re

Import('env')

libpath = ["#/src","#/src/plis",'#/src'] + env['LIBPATH']
libs = env['LIBS'] 
cpppath = ["gtkimageviewer"] + env['CPPPATH'] + ["glib-jsonrpc/"]
cppdefines = ['PACKAGE_DOC_DIR=\'"${PACKAGE_DOC_DIR}"\'',
              'PACKAGE_PLUGIN_DIR=\'"${PACKAGE_PLUGIN_DIR}"\'',
              ]

def file2c(env, target, source):
    out = open(str(target[0]), "wb")
    inp = open(str(source[0]), "rb")

    for line in inp.readlines():
        line = line.rstrip()
        line = re.sub("\\\\", "\\\\", line)
        line = re.sub("\\\"", "\\\"", line)
        line = '"'+line+'\\n"\n'
        out.write(line)
        
    out.close()
    inp.close()

src_giv_image = ['givimage.c',
                 'givplugin.c',
                 ]

src_giv_exe = ["giv.cc",
               "giv-win.cc",
               "giv-info.cc",
               "giv-mark-tree-dialog.cc",
               "giv-contrast.cc",
               "giv-histo.cc",
               "giv-color-map.c",
               "giv-calibrate-dialog.cc",
               "dovtk-lasso.c",
               ]

if ARGUMENTS.get('mingw', 0) or ARGUMENTS.get('mingw64',0):
    res = env.Command("giv.res.obj",
                      ["giv.rc",
                       "giv-logo.ico"
                      ],
                      ["${WINDRES} giv.rc giv.res.obj"],
                      chdir=1)
    src_giv_exe = src_giv_exe + res
    
#env.Program("giv",
#            src)

src_giv_widget =     ["giv-widget.cc",
                      "colormaps.cc",
                      "giv-parser.cc",
                      "GivPainterAgg.cc",
                      "GivPainterCairo.cc",
                      "GivPainterCairoPixbuf.cc",
                      "GivRenderer.cc",
                      "GivStringArray.c",
                      "giv-data.cc",
                      "giv-backstore.cc",
                      "giv-markup.cc",
                      "giv_agg_arrowhead.cc",
                      "giv-settings.cc",
                      "giv-settings-editor.cc",
                      "clipper.cpp"
                      ]

env.Library("giv-widget",
            src_giv_widget,
            CPPDEFINES = cppdefines,
            CPPPATH=cpppath,
            LIBPATH=libpath,
            LIBS=['giv-image']+libs +['plisx','pcre']
            )

giv_image_lib = env.SharedLibrary('giv-image',
                                  src_giv_image,
                                  CPPPATH=cpppath,
                                  CPPDEFINES=cppdefines,
                                  LIBPATH=libpath,
                                  LIBS=env['LIBS']+['plisx', 'pcre'])

giv_exe = env.Program("giv",
                      src_giv_exe,
                      LIBS = (['giv-widget',
                               'giv-image',
                               'libgtkimageviewer_local',
                               'glib-jsonrpc_local',
                               'json-glib_local',
                               'agg'
                               ]
                              + libs +['plisx','pcre']
                              ),
                      LIBPATH = libpath,
                      CPPDEFINES = cppdefines,
                      CPPPATH = cpppath
                      )
env.Depends(giv_exe,
            [giv_image_lib])


for gob in ("giv-win",
            "giv-mark-tree-dialog",
            "giv-info",
            "giv-widget",
            "giv-contrast",
            "giv-histo",
            "giv-calibrate-dialog",
            "giv-settings",
            "giv-settings-editor",
            ) :
    env.Command([gob + ".cc",
                 gob + ".h",
                 gob + "-private.h"
                 ],
                [gob + ".gob"],
                ["gob2 -o ${SOURCES.dir} --for-cpp $SOURCES"]
                )

env.Command("menu-top-xml.i",
            "menu-top.xml",
            file2c)
env.Command("menu-popup-xml.i",
            "menu-popup.xml",
            file2c)
env.Command("copyright.i",
            "copyright.markup",
            file2c)
env.Command("giv-logo.i",
            "../doc/giv-logo.png",
            ["gdk-pixbuf-csource --name=image_giv_icon_inline ../doc/giv-logo.png > giv-logo.i"],
            chdir=1)

if not env['SBOX']:
    env.Command(["giv-color-map.h",
                 "giv-color-map.c"],
                "giv-color-map.vala",
                ["valac -C --pkg=gtk+-2.0  -H giv-color-map.h --vapi=giv-color-map.vapi giv-color-map.vala"],
                chdir=True)

env.SConscript(['agg/SConscript',
                'plis/SConscript',
                'gtkimageviewer/SConscript',
                'plugins/SConscript',
                'glib-jsonrpc/SConscript',
                #            'pcre/SConscript',
                ],
               exports='env')

