aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/project/ci/dirs.py
diff options
context:
space:
mode:
authorEgor Tensin <Egor.Tensin@gmail.com>2020-03-30 11:56:05 +0300
committerEgor Tensin <Egor.Tensin@gmail.com>2020-03-30 12:03:37 +0300
commit98e3a56296cb9955e49adb09a111f26e07328338 (patch)
treebbbd6a464a809c00398bc12ef4cb472f92b30eab /project/ci/dirs.py
parentproject.cmake: make it --boost aware (diff)
downloadcmake-common-98e3a56296cb9955e49adb09a111f26e07328338.tar.gz
cmake-common-98e3a56296cb9955e49adb09a111f26e07328338.zip
project.ci: dedupe code
Diffstat (limited to 'project/ci/dirs.py')
-rw-r--r--project/ci/dirs.py99
1 files changed, 99 insertions, 0 deletions
diff --git a/project/ci/dirs.py b/project/ci/dirs.py
new file mode 100644
index 0000000..9234df2
--- /dev/null
+++ b/project/ci/dirs.py
@@ -0,0 +1,99 @@
+# Copyright (c) 2020 Egor Tensin <Egor.Tensin@gmail.com>
+# 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 abc
+import os.path
+
+from project.boost.version import Version
+from project.ci.appveyor.generator import Generator, Image
+from project.configuration import Configuration
+from project.platform import Platform
+from project.utils import env
+
+
+class Dirs(abc.ABC):
+ def __init__(self):
+ pass
+
+ @abc.abstractmethod
+ def get_platform(self):
+ pass
+
+ @abc.abstractmethod
+ def get_configuration(self):
+ pass
+
+ @abc.abstractmethod
+ def get_src_dir(self):
+ pass
+
+ @abc.abstractmethod
+ def get_build_dir(self):
+ pass
+
+ def get_boost_version(self):
+ return Version.from_string(env('boost_version'))
+
+ def get_boost_dir(self):
+ return os.path.join(self.get_build_dir(), 'boost')
+
+ def get_cmake_dir(self):
+ return os.path.join(self.get_build_dir(), 'build')
+
+ @abc.abstractmethod
+ def get_cmake_args(self):
+ pass
+
+ def get_boost_help(self):
+ return f'''Download & build Boost on Travis/AppVeyor.
+
+This is similar to running both project.boost.download & project.boost.build,
+but auto-fills some parameters from environment variables.
+
+Boost is built in {self.get_boost_dir()}.
+'''
+
+ def get_cmake_help(self):
+ return f'''Build a CMake project on AppVeyor.
+
+This is similar to running project.cmake.build, but auto-fills some parameters
+from environment variables.
+
+The project is built in {self.get_cmake_dir()}.
+'''
+
+
+class Travis(Dirs):
+ def get_platform(self):
+ return Platform.parse(env('platform'))
+
+ def get_configuration(self):
+ return Configuration.parse(env('configuration'))
+
+ def get_src_dir(self):
+ return env('TRAVIS_BUILD_DIR')
+
+ def get_build_dir(self):
+ return env('HOME')
+
+ def get_cmake_args(self):
+ return []
+
+
+class AppVeyor(Dirs):
+ def get_platform(self):
+ return Platform.parse(env('PLATFORM'))
+
+ def get_configuration(self):
+ return Configuration.parse(env('CONFIGURATION'))
+
+ def get_src_dir(self):
+ return env('APPVEYOR_BUILD_FOLDER')
+
+ def get_build_dir(self):
+ return R'C:\projects'
+
+ def get_cmake_args(self):
+ return ['-G', str(Generator.from_image(Image.get()))]