diff options
-rw-r--r-- | build_scripts/utils.py | 32 | ||||
-rw-r--r-- | coin_build_instructions.py | 98 | ||||
-rw-r--r-- | coin_test_instructions.py | 80 |
3 files changed, 208 insertions, 2 deletions
diff --git a/build_scripts/utils.py b/build_scripts/utils.py index af40916b7..8ce1b8a51 100644 --- a/build_scripts/utils.py +++ b/build_scripts/utils.py @@ -409,7 +409,7 @@ def make_file_writable_by_owner(path): current_permissions = stat.S_IMODE(os.lstat(path).st_mode) os.chmod(path, current_permissions | stat.S_IWUSR) -def rmtree(dirname): +def rmtree(dirname, ignore=False): def handleRemoveReadonly(func, path, exc): excvalue = exc[1] if func in (os.rmdir, os.remove) and excvalue.errno == errno.EACCES: @@ -417,7 +417,7 @@ def rmtree(dirname): func(path) else: raise - shutil.rmtree(dirname, ignore_errors=False, onerror=handleRemoveReadonly) + shutil.rmtree(dirname, ignore_errors=ignore, onerror=handleRemoveReadonly) def run_process_output(args, initial_env=None): if initial_env is None: @@ -1081,3 +1081,31 @@ def get_python_dict(python_script_path): print("get_python_dict: Couldn't get dict from python " "file: {}.".format(python_script_path)) raise + +def install_pip_dependencies(env_pip, packages): + for p in packages: + run_instruction([env_pip, "install", p], "Failed to install " + p) + +def get_qtci_virtualEnv(python_ver, host): + _pExe = "python" + _env = "env" + str(python_ver) + env_python = _env + "/bin/python" + env_pip = _env + "/bin/pip" + + if host == "Windows": + _pExe = "python.exe" + if python_ver == "3": + _pExe = os.path.join(os.getenv("PYTHON3_PATH"), "python.exe") + env_python = _env + "\\Scripts\\python.exe" + env_pip = _env + "\\Scripts\\pip.exe" + else: + if python_ver == "3": + _pExe = "python3" + return(_pExe, _env, env_pip, env_python) + +def run_instruction(instruction, error): + print("Running Coin instruction: " + ' '.join(str(e) for e in instruction)) + result = subprocess.call(instruction) + if result != 0: + print("ERROR : " + error) + exit(result) diff --git a/coin_build_instructions.py b/coin_build_instructions.py new file mode 100644 index 000000000..d8aa74758 --- /dev/null +++ b/coin_build_instructions.py @@ -0,0 +1,98 @@ +############################################################################# +## +## Copyright (C) 2018 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of PySide2. +## +## $QT_BEGIN_LICENSE:LGPL$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU Lesser General Public License Usage +## Alternatively, this file may be used under the terms of the GNU Lesser +## General Public License version 3 as published by the Free Software +## Foundation and appearing in the file LICENSE.LGPL3 included in the +## packaging of this file. Please review the following information to +## ensure the GNU Lesser General Public License version 3 requirements +## will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 2.0 or (at your option) the GNU General +## Public license version 3 or any later version approved by the KDE Free +## Qt Foundation. The licenses are as published by the Free Software +## Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-2.0.html and +## https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# +from build_scripts.utils import has_option +from build_scripts.utils import option_value +from build_scripts.utils import install_pip_dependencies +from build_scripts.utils import get_qtci_virtualEnv +from build_scripts.utils import run_instruction +from build_scripts.utils import rmtree +import os + +# Values must match COIN thrift +CI_HOST_OS = option_value("os") +CI_TARGET_OS = option_value("targetOs") +CI_HOST_OS_VER = option_value("osver") +CI_ENV_INSTALL_DIR = option_value("instdir") +CI_ENV_AGENT_DIR = option_value("agentdir") +CI_COMPILER = option_value("compiler") +CI_FEATURES = [] +_ci_features = option_value("features") +if _ci_features is not None: + for f in _ci_features.split(', '): + CI_FEATURES.append(f) +CI_RELEASE_CONF = has_option("packaging") + + +def call_setup(python_ver): + _pExe, _env, env_pip, env_python = get_qtci_virtualEnv(python_ver, CI_HOST_OS) + rmtree(_env, True) + run_instruction(["virtualenv", "-p", _pExe, _env], "Failed to create virtualenv") + install_pip_dependencies(env_pip, ["six", "wheel"]) + cmd = [env_python, "setup.py"] + # With 5.11 CI will create two sets of release binaries, one with msvc 2015 and one with msvc 2017 + # we shouldn't release the 2015 version. + if CI_RELEASE_CONF and CI_COMPILER not in ["MSVC2017"]: + cmd += ["bdist_wheel", "--standalone"] + else: + cmd += ["build"] + if CI_HOST_OS == "MacOS": + cmd += ["--qmake=" + CI_ENV_INSTALL_DIR + "/bin/qmake"] + elif CI_HOST_OS == "Windows": + + cmd += ["--qmake=" + CI_ENV_INSTALL_DIR + "\\bin\\qmake.exe", + "--openssl=C:\\openssl\\bin\\openssl"] + else: + cmd += ["--qmake=" + CI_ENV_INSTALL_DIR + "/bin/qmake"] + cmd += ["--build-tests", + "--jobs=4", + "--verbose-build", + "--snapshot-build"] + + run_instruction(cmd, "Failed to run setup.py") + +def run_build_instructions(): + # Uses default python, hopefully we have python2 installed on all hosts + call_setup("") + + # In case of packaging build, we have to build also python3 wheel + if CI_RELEASE_CONF and CI_HOST_OS_VER not in ["RHEL_6_6"]: + call_setup("3") + +if __name__ == "__main__": + run_build_instructions() diff --git a/coin_test_instructions.py b/coin_test_instructions.py new file mode 100644 index 000000000..eb6ee2ad1 --- /dev/null +++ b/coin_test_instructions.py @@ -0,0 +1,80 @@ +############################################################################# +## +## Copyright (C) 2018 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of PySide2. +## +## $QT_BEGIN_LICENSE:LGPL$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU Lesser General Public License Usage +## Alternatively, this file may be used under the terms of the GNU Lesser +## General Public License version 3 as published by the Free Software +## Foundation and appearing in the file LICENSE.LGPL3 included in the +## packaging of this file. Please review the following information to +## ensure the GNU Lesser General Public License version 3 requirements +## will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 2.0 or (at your option) the GNU General +## Public license version 3 or any later version approved by the KDE Free +## Qt Foundation. The licenses are as published by the Free Software +## Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-2.0.html and +## https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# +from build_scripts.utils import has_option +from build_scripts.utils import option_value +from build_scripts.utils import install_pip_dependencies +from build_scripts.utils import get_qtci_virtualEnv +from build_scripts.utils import run_instruction +from build_scripts.utils import rmtree +import os + +# Values must match COIN thrift +CI_HOST_OS = option_value("os") +CI_TARGET_OS = option_value("targetOs") +CI_HOST_OS_VER = option_value("osver") +CI_ENV_INSTALL_DIR = option_value("instdir") +CI_ENV_AGENT_DIR = option_value("agentdir") or "." +CI_COMPILER = option_value("compiler") +CI_FEATURES = [] +_ci_features = option_value("features") +if _ci_features is not None: + for f in _ci_features.split(', '): + CI_FEATURES.append(f) + +CI_RELEASE_CONF = has_option("packaging") + +def call_testrunner(python_ver, buildnro): + _pExe, _env, env_pip, env_python = get_qtci_virtualEnv(python_ver, CI_HOST_OS) + rmtree(_env, True) + run_instruction(["virtualenv", "-p", _pExe, _env], "Failed to create virtualenv") + install_pip_dependencies(env_pip, ["six", "wheel"]) + cmd = [env_python, "testrunner.py", "test", + "--blacklist", "build_history/blacklist.txt", + "--buildno=" + buildnro] + run_instruction(cmd, "Failed to run testrunner.py") + +def run_test_instructions(): + os.chdir(CI_ENV_AGENT_DIR) + call_testrunner("", "0") + # We know that second build was with python3 + if CI_RELEASE_CONF and CI_HOST_OS_VER not in ["RHEL_6_6"]: + call_testrunner("3", "1") + +if __name__ == "__main__": + run_test_instructions() |