Import('pkgconfig')
Import('uname')
Import('env')
Import('png')
Import('sdl')
Import('gl')

# Basic sources.
libfhi_src = Split("""
    boundary.cpp
    camera.cpp
    color.cpp
    component.cpp
    configfile.cpp
    fixed.cpp
    font.cpp
    getopt.cpp
    light.cpp
    matvec.cpp
    mesh.cpp
    misc.cpp
    orientation.cpp
    point.cpp
    postmodel.cpp
    premodel.cpp
    surface.cpp
    texture.cpp
    """)
libfhi_headers = Split("""
    libfhi.h
    libfhi_attributable.h
    libfhi_boundary.h
    libfhi_camera.h
    libfhi_canonicaldb.h
    libfhi_color.h
    libfhi_component.h
    libfhi_configfile.h
    libfhi_default.h
    libfhi_fixed.h
    libfhi_font.h
    libfhi_getopt.h
    libfhi_light.h
    libfhi_matvec.h
    libfhi_mesh.h
    libfhi_misc.h
    libfhi_orientation.h
    libfhi_point.h
    libfhi_postmodel.h
    libfhi_premodel.h
    libfhi_singleton.h
    libfhi_surface.h
    libfhi_texture.h
    """)

# Test program.
test_src = Split("""
  test.cpp
  """)

# OS-specific sources.
if uname == 'Darwin':
  test_src += Split("""SDLMain.m""")

# PNG sources.
if png:
  libfhi_src += Split("""png.cpp""")
  libfhi_headers += Split("""libfhi_png.h""")

# SDL sources.
if sdl:
  libfhi_src += Split("""sdlsurface.cpp""")
  libfhi_headers += Split("""libfhi_sdlsurface.h""")

# GL sources.
if gl:
  libfhi_src += Split("""glsurface.cpp""")
  libfhi_headers += Split("""libfhi_glsurface.h""")

# Library build.
libfhi = env.Library('fhi', libfhi_src)
libfhi_shared = env.SharedLibrary('fhi', libfhi_src)

# Test program build.
test_prog = env.Program('test', [test_src, libfhi])

# Install rule.
install_libfhi = env.Install(pkgconfig.get_dir_lib(),
    libfhi + libfhi_shared)
install_libfhi_headers = env.Install(dir = pkgconfig.get_dir_inc(),
    source = libfhi_headers)
install_pkgconfig = env.Install(dir = pkgconfig.get_dir_pkgconfig(),
    source = 'libfhi.pc')

# Install functionality.
env.Alias('install', install_libfhi + install_libfhi_headers +
    install_pkgconfig)

# Installing libraries, run ldconfig after install.
if 'install' in COMMAND_LINE_TARGETS:
  env.Execute(action='ldconfig')
