You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
exiv2/ci/test_build.py

78 lines
1.9 KiB
Python

#!/usr/bin/python3
# -*- coding: utf-8 -*-
import itertools
import multiprocessing
import os
import shlex
import subprocess
import sys
#: -DEXIV2_BUILD_SHARED_LIBS options
SHARED_LIBS = ["ON", "OFF"]
#: C & C++ compiler as tuples
CCS = ["gcc", "clang"]
#: -DCMAKE_BUILD_TYPE options
BUILD_TYPES = ["Debug", "Release"]
#: Additional parameters for cmake
CMAKE_OPTIONS = os.getenv("CMAKE_OPTIONS") or \
"-DEXIV2_TEAM_EXTRA_WARNINGS=ON -DEXIV2_ENABLE_VIDEO=ON "\
"-DEXIV2_ENABLE_WEBREADY=ON -DEXIV2_BUILD_UNIT_TESTS=ON "\
"-DBUILD_WITH_CCACHE=ON "
#: cpu count
NCPUS = multiprocessing.cpu_count()
def call_wrapper(*args, **kwargs):
"""
Wrapper around subprocess.call which terminates the program on non-zero
return value.
"""
return_code = subprocess.call(*args, **kwargs)
if return_code != 0:
sys.exit(return_code)
# create build directory
os.mkdir("build")
root_dir = os.path.abspath(os.getcwd())
for params in itertools.product(SHARED_LIBS, CCS, BUILD_TYPES):
lib_type, cc, build_type = params
cxx = {"gcc": "g++", "clang": "clang++"}[cc]
cwd = os.path.abspath(os.path.join("build", "_".join(params)))
os.mkdir(cwd)
cmake = "cmake {!s} -DCMAKE_BUILD_TYPE={build_type} "\
"-DBUILD_SHARED_LIBS={lib_type} ../.."\
.format(CMAKE_OPTIONS, build_type=build_type, lib_type=lib_type)
make = "make -j " + str(NCPUS)
make_tests = "make tests"
unit_tests = os.path.join(cwd, "bin", "unit_tests")
# set up environment
env_copy = os.environ.copy()
env_copy["CC"] = cc
env_copy["CXX"] = cxx
# location of the binaries for the new test suite:
env_copy["EXIV2_BINDIR"] = os.path.join(cwd, "bin")
kwargs = {"env": env_copy, "cwd": cwd}
def run(cmd):
call_wrapper(shlex.split(cmd), **kwargs)
run(cmake)
run(make)
run(make_tests)
run(unit_tests)