#!/usr/bin/env python3

import os
import sys
import subprocess
import shutil

CMAKE            = '@CMAKE_COMMAND@'
CMAKE_BUILD_TYPE = '@CMAKE_BUILD_TYPE@'
TMPDIR           = '@TMPDIR@'
SRCDIR           = '@SRCDIR@'
GFLAGS_DIR       = '@gflags_BINARY_DIR@'

if __name__ == "__main__":
  if len(sys.argv) != 4:
    sys.stderr.write(' '.join(['usage:', sys.argv[0], '<test_name> <srcdir> <expect_fail:0|1>\n']))
    sys.exit(1)
  test_name   = sys.argv[1]
  srcdir      = sys.argv[2]
  expect_fail = (sys.argv[3].lower() in ['true', 'yes', 'on', '1'])
  bindir      = os.path.join(TMPDIR, test_name)
  if TMPDIR == '':
    sys.stderr.write('Temporary directory not set!\n')
    sys.exit(1)
  # create build directory
  if os.path.isdir(bindir): shutil.rmtree(bindir)
  os.makedirs(bindir)
  # configure the build tree
  if subprocess.call([CMAKE, '-DCMAKE_BUILD_TYPE:STRING='+CMAKE_BUILD_TYPE,
                             '-Dgflags_DIR:PATH='+GFLAGS_DIR,
                             '-DTEST_NAME:STRING='+test_name, srcdir], cwd=bindir) != 0:
    sys.stderr.write('Failed to configure the build tree!\n')
    sys.exit(1)
  # build the test project
  exit_code = subprocess.call([CMAKE, '--build', bindir, '--config', CMAKE_BUILD_TYPE], cwd=bindir)
  if expect_fail == True:
    if exit_code == 0:
      sys.stderr.write('Build expected to fail, but it succeeded!\n')
      sys.exit(1)
    else:
      sys.stderr.write('Build failed as expected\n')
      exit_code = 0
  sys.exit(exit_code)
