| from enum import Enum |
| |
| # Used for the --wrap-mode command-line argument |
| # |
| # Special wrap modes: |
| # nofallback: Don't download wraps for dependency() fallbacks |
| # nodownload: Don't download wraps for all subproject() calls |
| # |
| # subprojects are used for two purposes: |
| # 1. To download and build dependencies by using .wrap |
| # files if they are not provided by the system. This is |
| # usually expressed via dependency(..., fallback: ...). |
| # 2. To download and build 'copylibs' which are meant to be |
| # used by copying into your project. This is always done |
| # with an explicit subproject() call. |
| # |
| # --wrap-mode=nofallback will never do (1) |
| # --wrap-mode=nodownload will do neither (1) nor (2) |
| # |
| # If you are building from a release tarball, you should be |
| # able to safely use 'nodownload' since upstream is |
| # expected to ship all required sources with the tarball. |
| # |
| # If you are building from a git repository, you will want |
| # to use 'nofallback' so that any 'copylib' wraps will be |
| # download as subprojects. |
| # |
| # --wrap-mode=forcefallback will ignore external dependencies, |
| # even if they match the version requirements, and automatically |
| # use the fallback if one was provided. This is useful for example |
| # to make sure a project builds when using the fallbacks. |
| # |
| # Note that these options do not affect subprojects that |
| # are git submodules since those are only usable in git |
| # repositories, and you almost always want to download them. |
| |
| # This did _not_ work when inside the WrapMode class. |
| # I don't know why. If you can fix this, patches welcome. |
| string_to_value = {'default': 1, |
| 'nofallback': 2, |
| 'nodownload': 3, |
| 'forcefallback': 4, |
| 'nopromote': 5, |
| } |
| |
| class WrapMode(Enum): |
| default = 1 |
| nofallback = 2 |
| nodownload = 3 |
| forcefallback = 4 |
| nopromote = 5 |
| |
| def __str__(self) -> str: |
| return self.name |
| |
| @staticmethod |
| def from_string(mode_name: str) -> 'WrapMode': |
| g = string_to_value[mode_name] |
| return WrapMode(g) |