incdirs = '. encoding digest string code sparse_matrix'

def configure(conf):
  conf.check_cxx(header_name = 'stdint.h')

  conf.check_cxx(header_name = 'unordered_map', mandatory = False)
  conf.check_cxx(header_name = 'tr1/unordered_map', mandatory = False)
  conf.check_cxx(header_name = 'ext/hash_map', mandatory = False)
  conf.check_cxx(header_name = 'unordered_set', mandatory = False)
  conf.check_cxx(header_name = 'tr1/unordered_set', mandatory = False)
  conf.check_cxx(header_name = 'ext/hash_set', mandatory = False)

def build(bld):
  bld.install_files('${HPREFIX}/data', [
      'fenwick_tree.h',
      'lru.h',
      'optional.h',
      'serialization.h',
      'serialization/array.h',
      'serialization/base.h',
      'serialization/reflect.h',
      'serialization/string.h',
      'serialization/vector.h',
      'serialization/deque.h',
      'serialization/list.h',
      'serialization/set.h',
      'serialization/map.h',
      'serialization/unordered_map.h',
      'serialization/tr1_unordered_map.h',
      'serialization/unordered_set.h',
      'serialization/tr1_unordered_set.h',
      'serialization/pair.h',
      'serialization/iostream.h',
      'encoding/base64.h',
      'digest/md5.h',
      'config_file.h',
      'string/kmp.h',
      'string/utility.h',
      'string/algorithm.h',
      'string/aho_corasick.h',
      'string/ustring.h',
      'suffix_array/invsa.h',
      'suffix_array/lcp.h',
      'suffix_array/rmq.h',
      'suffix_array/checker.h',
      'code/code.h',
      'sparse_matrix/sparse_matrix.h',
      'unordered_map.h',
      'unordered_set.h',
      'functional_hash.h',
      'intern.h'
      ], relative_trick = True)

  bld.shlib(
    source = [
      'encoding/base64.cpp',
      'digest/md5.cpp',
      'config_file.cpp',
      'string/aho_corasick.cpp',
      'string/ustring.cpp',
      'code/code.cpp',
      'sparse_matrix/sparse_matrix.cpp'
      ],
    target = 'pficommon_data',
    includes = incdirs,
    vnum = bld.env['VERSION'],
    use = 'pficommon_system')

  def t(src):
    tgt = src.split('/')[-1].split('.')[0]
    bld.program(
      features = 'gtest',
      source = src,
      target = tgt,
      includes = incdirs,
      use = 'pficommon_data pficommon_system pficommon_math')

  t('code/code_test.cpp')
  t('string/algorithm_test.cpp')
  t('string/aho_corasick_test.cpp')
  t('string/ustring_test.cpp')
  t('string/utility_test.cpp')
  t('sparse_matrix/sparse_matrix_test.cpp')
  t('intern_test.cpp')
  t('suffix_array/rmq_test.cpp')
  t('lru_test.cpp')
  t('optional_test.cpp')
  t('serialization_test.cpp')
  t('digest/md5_test.cpp')
  t('encoding/base64_test.cpp')
  t('include_test.cpp')
  t('instantiation_test.cpp')
  t('unordered_test.cpp')
