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.
78 lines
1.9 KiB
Python
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)
|