1*08ab5237SOystein Eftevaag#!/usr/bin/env python 2*08ab5237SOystein Eftevaag 3*08ab5237SOystein Eftevaagimport os 4*08ab5237SOystein Eftevaagimport sys 5*08ab5237SOystein Eftevaagimport subprocess 6*08ab5237SOystein Eftevaagimport shutil 7*08ab5237SOystein Eftevaag 8*08ab5237SOystein EftevaagCMAKE = '@CMAKE_COMMAND@' 9*08ab5237SOystein EftevaagCMAKE_BUILD_TYPE = '@CMAKE_BUILD_TYPE@' 10*08ab5237SOystein EftevaagTMPDIR = '@TMPDIR@' 11*08ab5237SOystein EftevaagSRCDIR = '@SRCDIR@' 12*08ab5237SOystein EftevaagGFLAGS_DIR = '@gflags_BINARY_DIR@' 13*08ab5237SOystein Eftevaag 14*08ab5237SOystein Eftevaagif __name__ == "__main__": 15*08ab5237SOystein Eftevaag if len(sys.argv) != 4: 16*08ab5237SOystein Eftevaag sys.stderr.write(' '.join(['usage:', sys.argv[0], '<test_name> <srcdir> <expect_fail:0|1>\n'])) 17*08ab5237SOystein Eftevaag sys.exit(1) 18*08ab5237SOystein Eftevaag test_name = sys.argv[1] 19*08ab5237SOystein Eftevaag srcdir = sys.argv[2] 20*08ab5237SOystein Eftevaag expect_fail = (sys.argv[3].lower() in ['true', 'yes', 'on', '1']) 21*08ab5237SOystein Eftevaag bindir = os.path.join(TMPDIR, test_name) 22*08ab5237SOystein Eftevaag if TMPDIR == '': 23*08ab5237SOystein Eftevaag sys.stderr.write('Temporary directory not set!\n') 24*08ab5237SOystein Eftevaag sys.exit(1) 25*08ab5237SOystein Eftevaag # create build directory 26*08ab5237SOystein Eftevaag if os.path.isdir(bindir): shutil.rmtree(bindir) 27*08ab5237SOystein Eftevaag os.makedirs(bindir) 28*08ab5237SOystein Eftevaag # configure the build tree 29*08ab5237SOystein Eftevaag if subprocess.call([CMAKE, '-DCMAKE_BUILD_TYPE:STRING='+CMAKE_BUILD_TYPE, 30*08ab5237SOystein Eftevaag '-Dgflags_DIR:PATH='+GFLAGS_DIR, 31*08ab5237SOystein Eftevaag '-DTEST_NAME:STRING='+test_name, srcdir], cwd=bindir) != 0: 32*08ab5237SOystein Eftevaag sys.stderr.write('Failed to configure the build tree!\n') 33*08ab5237SOystein Eftevaag sys.exit(1) 34*08ab5237SOystein Eftevaag # build the test project 35*08ab5237SOystein Eftevaag exit_code = subprocess.call([CMAKE, '--build', bindir, '--config', CMAKE_BUILD_TYPE], cwd=bindir) 36*08ab5237SOystein Eftevaag if expect_fail == True: 37*08ab5237SOystein Eftevaag if exit_code == 0: 38*08ab5237SOystein Eftevaag sys.stderr.write('Build expected to fail, but it succeeded!\n') 39*08ab5237SOystein Eftevaag sys.exit(1) 40*08ab5237SOystein Eftevaag else: 41*08ab5237SOystein Eftevaag sys.stderr.write('Build failed as expected\n') 42*08ab5237SOystein Eftevaag exit_code = 0 43*08ab5237SOystein Eftevaag sys.exit(exit_code) 44