aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/project/configuration.py
blob: 78e6eb9480436a38f7943a149aa3694c62771aef (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# Copyright (c) 2020 Egor Tensin <egor@tensin.name>
# This file is part of the "cmake-common" project.
# For details, see https://github.com/egor-tensin/cmake-common.
# Distributed under the MIT License.

import argparse
from enum import Enum


class Configuration(Enum):
    """Correspond to CMake's default CMAKE_BUILD_TYPE values."""

    DEBUG = "Debug"
    MINSIZEREL = "MinSizeRel"
    RELWITHDEBINFO = "RelWithDebInfo"
    RELEASE = "Release"

    def __str__(self):
        return str(self.value)

    @staticmethod
    def all():
        return tuple(Configuration)

    @staticmethod
    def parse(s):
        try:
            return Configuration(s)
        except ValueError as e:
            raise argparse.ArgumentTypeError(f"invalid configuration: {s}") from e

    def b2_variant(self):
        """Roughly maps CMake's CMAKE_BUILD_TYPE to Boost's variant.

        AFAIK, Boost only supports debug/release, MinSizeRel and RelWithDebInfo
        are hence mapped to "release".  The libraries will still reside in
        install_dir/PLATFORM/CONFIGURATION/lib, if CONFIGURATION is
        MinSizeRel/RelWithDebInfo.
        """
        if self in (Configuration.MINSIZEREL, Configuration.RELWITHDEBINFO):
            return Configuration.RELEASE.b2_variant()
        return str(self).lower()

    def b2_args(self):
        return [f"variant={self.b2_variant()}"]

    def cmake_args(self):
        return [f"-DCMAKE_BUILD_TYPE={self}"]