|
|
|
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)
|