Skip to content
Snippets Groups Projects
Commit 2ccccb3d authored by Patrick MADELA's avatar Patrick MADELA
Browse files

Build python 3.6.13 with Conan

parent c8b88661
No related branches found
No related tags found
No related merge requests found
variables:
PYTHON_VERSION: "3.6.13"
......@@ -7,21 +6,24 @@ stages:
- test
- package
workflow:
rules:
- if: $CI_PIPELINE_SOURCE == "schedule"
- if: $CI_PIPELINE_SOURCE == "web"
- if: $CI_COMMIT_TAG
.build:
stage: build
script:
- yum -y install zlib-devel bzip2-devel openssl-devel readline-devel ncurses-devel sqlite-devel gdbm-devel db4-devel expat-devel libpcap-devel xz-devel pcre-devel libffi-devel tk-devel
- curl -s https://www.python.org/ftp/python/${PYTHON_VERSION}/Python-${PYTHON_VERSION}.tar.xz | tar -xJf -
- cd Python-${PYTHON_VERSION}
- ./configure --prefix=${PYTHON_ROOT}
- make -j 4
- make install
- ln -s python3 ${PYTHON_ROOT}/bin/python
- rm -rf Python-${PYTHON_VERSION}
- conan config init
- conan profile update settings.compiler.libcxx=libstdc++11 default
- conan create . python/${PYTHON_VERSION}@soleil/stable --build -c tools.system.package_manager:mode=install -c tools.system.package_manager:tool=yum -c tools.system.package_manager:sudo=True
- conan install python/${PYTHON_VERSION}@soleil/stable --install-folder ${PYTHON_ROOT}
# Upgrade pip
- unset PYTHONPATH
- ${PYTHON_ROOT}/bin/pip3 install -q --no-cache-dir --upgrade pip
# Fix python shebang to make it independent of install path
- grep -I -r -l "^#\!${PYTHON_ROOT}/bin/python.*$" ${PYTHON_ROOT} | xargs sed -i '1c\#\!/usr/bin/env python'
- grep -I -r -l "^#\!.*/bin/python.*$" ${PYTHON_ROOT} | xargs sed -i '1c\#\!/usr/bin/env python'
# Clean pycache
- find ${PYTHON_ROOT} -iname __pycache__ -print0 | xargs -0 rm -rf
artifacts:
......@@ -41,98 +43,50 @@ stages:
- zip -r --symlinks ../${NAME}.zip *
- 'curl --header "JOB-TOKEN: $CI_JOB_TOKEN" --upload-file ../${NAME}.zip "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/python/${PYTHON_VERSION}/"'
linux-el6-x86_64:
extends: [".build"]
image: gitlab-registry.synchrotron-soleil.fr/software-control-system/containers/dev-docker-tools/dev-el6-gcc44
variables:
NAME: "python-${PYTHON_VERSION}-linux-el6-x86_64"
PYTHON_ROOT: "${CI_PROJECT_DIR}/${NAME}"
test-el6-x86_64:
extends: [".test"]
image: gitlab-registry.synchrotron-soleil.fr/software-control-system/containers/dev-docker-tools/dev-el6-gcc44
variables:
NAME: "python-${PYTHON_VERSION}-linux-el6-x86_64"
needs:
- linux-el6-x86_64
package-el6-x86_64:
extends: [".package"]
image: gitlab-registry.synchrotron-soleil.fr/software-control-system/containers/dev-docker-tools/dev-el6-gcc44
variables:
NAME: "python-${PYTHON_VERSION}-linux-el6-x86_64"
needs:
- linux-el6-x86_64
- test-el6-x86_64
linux-el6-i686:
extends: [".build"]
image: gitlab-registry.synchrotron-soleil.fr/software-control-system/containers/dev-docker-tools/dev-el6-gcc44-x86
variables:
NAME: "python-${PYTHON_VERSION}-${CI_JOB_NAME}"
PYTHON_ROOT: "${CI_PROJECT_DIR}/${NAME}"
test-el6-i686:
extends: [".test"]
image: gitlab-registry.synchrotron-soleil.fr/software-control-system/containers/dev-docker-tools/dev-el6-gcc44-x86
variables:
NAME: "python-${PYTHON_VERSION}-linux-el6-i686"
needs:
- linux-el6-i686
package-el6-i686:
extends: [".package"]
image: gitlab-registry.synchrotron-soleil.fr/software-control-system/containers/dev-docker-tools/dev-el6-gcc44-x86
variables:
NAME: "python-${PYTHON_VERSION}-linux-el6-i686"
needs:
- linux-el6-i686
- test-el6-i686
linux-el7-x86_64:
linux-x86_64:
extends: [".build"]
image: gitlab-registry.synchrotron-soleil.fr/software-control-system/containers/dev-docker-tools/dev-el7-gcc48
image: gitlab-registry.synchrotron-soleil.fr/software-control-system/containers/conan-docker-tools/conan-el6-gcc91
variables:
NAME: "python-${PYTHON_VERSION}-linux-el7-x86_64"
NAME: "python-${PYTHON_VERSION}-linux-x86_64"
PYTHON_ROOT: "${CI_PROJECT_DIR}/${NAME}"
test-el7-x86_64:
test-x86_64:
extends: [".test"]
image: gitlab-registry.synchrotron-soleil.fr/software-control-system/containers/dev-docker-tools/dev-el7-gcc48
image: gitlab-registry.synchrotron-soleil.fr/software-control-system/containers/conan-docker-tools/conan-el6-gcc91
variables:
NAME: "python-${PYTHON_VERSION}-linux-el7-x86_64"
NAME: "python-${PYTHON_VERSION}-linux-x86_64"
needs:
- linux-el7-x86_64
- linux-x86_64
package-el7-x86_64:
package-x86_64:
extends: [".package"]
image: gitlab-registry.synchrotron-soleil.fr/software-control-system/containers/dev-docker-tools/dev-el7-gcc48
image: gitlab-registry.synchrotron-soleil.fr/software-control-system/containers/conan-docker-tools/conan-el6-gcc91
variables:
NAME: "python-${PYTHON_VERSION}-linux-el7-x86_64"
NAME: "python-${PYTHON_VERSION}-linux-x86_64"
needs:
- linux-el7-x86_64
- test-el7-x86_64
- linux-x86_64
- test-x86_64
linux-el7-i686:
linux-i686:
extends: [".build"]
image: gitlab-registry.synchrotron-soleil.fr/software-control-system/containers/dev-docker-tools/dev-el7-gcc48-x86
image: gitlab-registry.synchrotron-soleil.fr/software-control-system/containers/conan-docker-tools/conan-el6-gcc91-x86
variables:
NAME: "python-${PYTHON_VERSION}-${CI_JOB_NAME}"
NAME: "python-${PYTHON_VERSION}-linux-i686"
PYTHON_ROOT: "${CI_PROJECT_DIR}/${NAME}"
test-el7-i686:
test-i686:
extends: [".test"]
image: gitlab-registry.synchrotron-soleil.fr/software-control-system/containers/dev-docker-tools/dev-el7-gcc48-x86
image: gitlab-registry.synchrotron-soleil.fr/software-control-system/containers/conan-docker-tools/conan-el6-gcc91-x86
variables:
NAME: "python-${PYTHON_VERSION}-linux-el7-i686"
NAME: "python-${PYTHON_VERSION}-linux-i686"
needs:
- linux-el7-i686
- linux-i686
package-el7-i686:
package-i686:
extends: [".package"]
image: gitlab-registry.synchrotron-soleil.fr/software-control-system/containers/dev-docker-tools/dev-el7-gcc48-x86
image: gitlab-registry.synchrotron-soleil.fr/software-control-system/containers/conan-docker-tools/conan-el6-gcc91-x86
variables:
NAME: "python-${PYTHON_VERSION}-linux-el7-i686"
NAME: "python-${PYTHON_VERSION}-linux-i686"
needs:
- linux-el7-i686
- test-el7-i686
- linux-i686
- test-i686
......@@ -3,13 +3,9 @@
Pipeline to build Python 3.6.13 on CentOS Docker image
Allows to build Python 3.6.13 for:
* CentOS 6.10 64 bits: [python-3.6.13-linux-el6-x86_64.zip](https://gitlab.synchrotron-soleil.fr/software-control-system/devtools/python3/-/jobs/artifacts/main/download?job=linux-el6-x86_64)
* CentOS 6.10 32 bits: [python-3.6.13-linux-el6-i686.zip](https://gitlab.synchrotron-soleil.fr/software-control-system/devtools/python3/-/jobs/artifacts/main/download?job=linux-el6-i686)
* CentOS 7.9 64 bits: [python-3.6.13-linux-el7-x86_64.zip](https://gitlab.synchrotron-soleil.fr/software-control-system/devtools/python3/-/jobs/artifacts/main/download?job=linux-el7-x86_64)
* CentOS 7.9 32 bits: [python-3.6.13-linux-el7-i686.zip](https://gitlab.synchrotron-soleil.fr/software-control-system/devtools/python3/-/jobs/artifacts/main/download?job=linux-el7-i686)
* CentOS 6.10 64 bits: [python-3.6.13-linux-x86_64.zip](https://gitlab.synchrotron-soleil.fr/software-control-system/devtools/python3/-/jobs/artifacts/3.6.13/download?job=linux-x86_64)
* CentOS 6.10 32 bits: [python-3.6.13-linux-i686.zip](https://gitlab.synchrotron-soleil.fr/software-control-system/devtools/python3/-/jobs/artifacts/3.6.13/download?job=linux-i686)
Build on Docker image:
* gitlab-registry.synchrotron-soleil.fr/software-control-system/containers/dev-docker-tools/dev-el6-gcc44
* gitlab-registry.synchrotron-soleil.fr/software-control-system/containers/dev-docker-tools/dev-el6-gcc44-x86
* gitlab-registry.synchrotron-soleil.fr/software-control-system/containers/dev-docker-tools/dev-el7-gcc48
* gitlab-registry.synchrotron-soleil.fr/software-control-system/containers/dev-docker-tools/dev-el7-gcc48-x86
from conan import ConanFile
from conan.tools.system import package_manager
from conan.errors import ConanInvalidConfiguration
from conans import AutoToolsBuildEnvironment, tools
import os
class PythonConan(ConanFile):
name = "python"
version = "3.6.13"
settings = "os", "compiler", "build_type", "arch"
requires = "openssl/1.1.1s", \
"zlib/1.2.13", \
"bzip2/1.0.8", \
"sqlite3/3.39.4", \
"libdb/5.3.28", \
"expat/2.5.0", \
"libpcap/1.10.1", \
"xz_utils/5.2.5", \
"pcre/8.45", \
"libffi/3.4.3", \
"libuuid/1.0.3",
_autotools = None
def validate(self):
if self.settings.os not in ["Linux"]:
raise ConanInvalidConfiguration("This recipe supports only Linux")
# Install devel package when unable to build correctly from conan
def system_requirements(self):
yum = package_manager.Yum(self)
yum.install(["readline-devel", "ncurses-devel", "gdbm-devel", "tk-devel"])
def source(self):
self.run("curl -s -L -O https://www.python.org/ftp/python/%s/Python-%s.tgz" % (self.version, self.version))
self.run("tar -xzf Python-%s.tgz --strip 1" % self.version)
def _build_configure(self):
if self._autotools:
return self._autotools
self._autotools = AutoToolsBuildEnvironment(self)
self._autotools.include_paths.append(os.path.join(self.deps_cpp_info["openssl"].rootpath, "include"))
self._autotools.library_paths.append(os.path.join(self.deps_cpp_info["openssl"].rootpath, "lib"))
args=[
"--enable-optimizations",
"--with-ssl-default-suites=openssl",
"--with-openssl=%s" % self.deps_cpp_info["openssl"].rootpath
]
self._autotools.configure(args=args)
return self._autotools
def build(self):
env_build = self._build_configure()
env_build.make()
def package(self):
env_build = self._build_configure()
env_build.install()
os.symlink('python3', os.path.join(self.package_folder, 'bin', 'python'))
def package_info(self):
self.cpp_info.libs = tools.collect_libs(self)
self.env_info.PATH.append(os.path.join(self.package_folder, "bin"))
def deploy(self):
self.copy("*", symlinks=True)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment