import subprocess
from waflib import Options

def options(opt):
  opt.add_option('--disable-database',
                 action = 'store_true',
                 default = False,
                 help = 'disable database')

def configure(conf):
  conf.env.BUILD_MYSQL = False
  if not Options.options.disable_database:
    if conf.check_cfg(path = 'mysql_config',
                      args = '--cflags --libs_r',
                      package = '',
                      uselib_store = 'MYSQL',
                      mandatory = False):
      if conf.check_cxx(header_name = 'mysql.h',
                        use = 'MYSQL',
                        mandatory = False):
        conf.env.BUILD_MYSQL = True

  conf.env.BUILD_PGSQL = False
  if not Options.options.disable_database:
    try:
      incdir = subprocess.check_output(['pg_config', '--includedir-server']).decode()
      libdir = subprocess.check_output(['pg_config', '--libdir']).decode()
      if conf.check_cxx(lib = 'pq',
                        header_name = 'postgres.h',
                        cxxflags = '-I' + incdir,
                        libpath = libdir,
                        uselib_store = 'PGSQL',
                        mandatory = False):
        conf.env.BUILD_PGSQL = True
    except:
      pass

def build(bld):
  bld.install_files('${HPREFIX}/database', [
      'database.h',
      'connection.h',
      'statement.h',
      'type.h',
      'util.h',
      'exception.h'])
  
  t = bld.shlib(
    source = '',
    target = 'pficommon_database',
    vnum = bld.env['VERSION'],
    use = [])
  
  if bld.env.BUILD_MYSQL:
    bld.recurse('mysql')
    t.use.append('pficommon_database_mysql')
  
  if bld.env.BUILD_PGSQL:
    bld.recurse('postgresql')
    t.use.append('pficommon_database_postgresql')

  bld.program(
    features = 'gtest',
    source = 'include_test.cpp',
    target = 'include_test',
    includes = '.')
