The code.ill.fr has been recreated and upgraded with the latest version this weekend, If you encounter any problem please inform the Helpdesk.

Unverified Commit e453159f authored by Simon Ward's avatar Simon Ward
Browse files

Make platform independent [ci skip]

parent 757e93f9
# Adapted from https://github.com/RalfG/python-wheels-manylinux-build/blob/master/full_workflow_example.yml
name: Build CFML wheels on various systems
name: Python libs
on:
push:
branches: [ simon ]
branches: [ master ]
pull_request:
branches: [ master ]
# schedule:
# # Every day at 1am
# - cron: '0 1 * * *'
jobs:
# create-Linux:
# runs-on: ubuntu-latest
#
# steps:
# - uses: actions/checkout@v2
#
# - name: Build manylinux wheels
# run: docker run -e PLAT=manylinux2010_x86_64 -v `pwd`:/io quay.io/pypa/manylinux2010_x86_64 /io/Scripts/buildscript.sh
#
# - uses: actions/upload-artifact@v2
# with:
# name: CrysFML - Linux
# path: ${{ github.workspace }}/dist/*.whl
#
# create-OSX:
# strategy:
# max-parallel: 4
# matrix:
# python-version: ['3.6', '3.7', '3.8', '3.9']
# os: [macos-10.15]
# gcc_v: [ 10 ] # Version of GFortran we want to use.
## exclude: # Currently only python > 3.8 is supported on macos-11.0 and > 3.6 on macos-10.15
## - os: macos-11.0
## python-version: '3.7'
## - os: macos-11.0
## python-version: '3.8'
#
# runs-on: ${{ matrix.os }}
#
# steps:
# - uses: actions/checkout@v2
#
# - name: Setup python
# uses: actions/setup-python@v1
# with:
# python-version: ${{matrix.python-version}}
#
# - name: Install cmake
# run: pip3 install cmake delocate wheel
#
# - name: Build CFML (OSX)
# env:
# FC: gfortran-${{ matrix.gcc_v }}
# CC: gcc-${{ matrix.gcc_v }}
# run: |
# pip3 wheel ./ --no-deps -w ./old/
# delocate-wheel -w dist -v ./old/*.whl
#
# - uses: actions/upload-artifact@v2
# with:
# name: CrysFML - ${{ matrix.os }} - Python ${{ matrix.python-version }}
# path: ./dist/*.whl
get_Latest:
runs-on: ubuntu-latest
if: "!contains(github.event.head_commit.message, '[ci skip]')"
steps:
- name: Checkout ILL repo
run: |
git clone https://code.ill.fr/scientific-software/crysfml/ ./
git checkout feature-python_api-build_wheels
rm -rf ./.git ./Html
- uses: actions/upload-artifact@v2
with:
name: CrysFML_SRC
path: ${{ github.workspace }}
retention-days: 1
create-Linux:
runs-on: ubuntu-latest
needs: get_Latest
steps:
- uses: actions/download-artifact@v2
with:
name: CrysFML_SRC
- name: Build manylinux wheels
run: |
chmod +x ./Scripts/buildscript.sh
docker run -e PLAT=manylinux2010_x86_64 -v ${{ github.workspace }}:/io quay.io/pypa/manylinux2010_x86_64 /io/Scripts/buildscript.sh
- uses: actions/upload-artifact@v2
with:
name: CrysFML - Linux
path: ${{ github.workspace }}/dist/*.whl
create-OSX:
strategy:
max-parallel: 4
matrix:
python-version: ['3.8']
os: [macos-10.15]
gcc_v: [ 10 ] # Version of GFortran we want to use.
runs-on: ${{ matrix.os }}
needs: get_Latest
steps:
- uses: actions/download-artifact@v2
with:
name: CrysFML_SRC
- name: Setup python
uses: actions/setup-python@v1
with:
python-version: ${{matrix.python-version}}
- name: Install cmake
run: pip3 install cmake delocate wheel
- name: Build CFML (OSX)
env:
FC: gfortran-${{ matrix.gcc_v }}
CC: gcc-${{ matrix.gcc_v }}
run: |
pip3 wheel ./ --no-deps -w ./old/
delocate-wheel -w dist -v ./old/*.whl
- uses: actions/upload-artifact@v2
with:
name: CrysFML - MacOS
path: ./dist/*.whl
create-Windows:
strategy:
......@@ -92,25 +117,25 @@ jobs:
- uses: actions/upload-artifact@v2
with:
name: CrysFML - ${{ matrix.os }} - Python ${{ matrix.python-version }}
name: CrysFML - Windows
path: ./dist/*.whl
# Upload_Artifacts:
# runs-on: ubuntu-latest
# needs: [create-Linux, create-OSX, create-Windows]
# steps:
# - uses: actions/checkout@v2
# - uses: actions/download-artifact@v2
# - name: Upload Artifacts GitHub releases
## if: github.event_name == 'push'
# uses: ncipollo/release-action@v1
# with:
# draft: falase
# prerelease: true
# allowUpdates: true
# replacesArtifacts: true
# token: ${{ secrets.GITHUB_TOKEN }}
# artifacts: "./dist/*.whl"
## tag: ${{ env.BRANCH_NAME }}
## commit: ${{ env.BRANCH_NAME }}
# bodyFile: "RELEASE.md"
Upload_Artifacts:
runs-on: ubuntu-latest
needs: [create-Linux, create-OSX]
steps:
- uses: actions/download-artifact@v2
- name: What is downloaded
run: |
ls -al
- name: Upload Artifacts GitHub releases
uses: ncipollo/release-action@v1
with:
draft: false
prerelease: true
allowUpdates: true
replacesArtifacts: true
token: ${{ secrets.GITHUB_TOKEN }}
artifacts: "./**/*.whl"
tag: "CurrentBuild"
body: "This is a build of the CFML libraries."
......@@ -17,11 +17,11 @@ function repair_wheel {
# Compile wheels
for PYBIN in /opt/python/*/bin; do
# "${PYBIN}/pip" install -r /io/dev-requirements.txt
"${PYBIN}/pip" wheel /io/ --no-deps --use-feature=in-tree-build -w /io/dist/
rm -rf /io/build/
done
#for PYBIN in /opt/python/*/bin; do
export PYBIN=/opt/python/cp38-cp38/bin
"${PYBIN}/pip" wheel /io/ --no-deps --use-feature=in-tree-build -w /io/dist/
rm -rf /io/build/
#done
# Bundle external shared libraries into the wheels
for whl in /io/dist/*.whl; do
......@@ -29,7 +29,6 @@ for whl in /io/dist/*.whl; do
done
# Install packages and test
for PYBIN in /opt/python/*/bin/; do
"${PYBIN}/pip" install CFML --no-index -f /io/dist
# (cd "$HOME"; "${PYBIN}/nosetests" pymanylinuxdemo)
done
\ No newline at end of file
#for PYBIN in /opt/python/*/bin/; do
"${PYBIN}/pip" install CFML --no-index -f /io/dist
#done
\ No newline at end of file
import os
import pathlib
import pkgutil
......@@ -7,6 +8,7 @@ import sys
import setuptools
import distutils.sysconfig as sysconfig
from distutils.core import setup
import distutils.command.build
from distutils.command.install_data import install_data
from subprocess import CalledProcessError, check_output, check_call
......@@ -15,6 +17,23 @@ from setuptools.command.build_ext import build_ext
from setuptools.command.install_lib import install_lib
from setuptools.command.install_scripts import install_scripts
try:
from wheel.bdist_wheel import bdist_wheel as _bdist_wheel
# this overrides standard naming of the wheel to not include
# architecture or python dot version number
class Bdist_wheel(_bdist_wheel):
def finalize_options(self):
_bdist_wheel.finalize_options(self)
self.root_is_pure = False
def get_tag(self):
python, abi, plat = _bdist_wheel.get_tag(self)
python, abi = 'py3', 'none'
return python, abi, plat
except ImportError:
Bdist_wheel = None
BITS = struct.calcsize("P") * 8
PACKAGE_NAME = "crysfml_api"
SOURCE_DIR = '.'
......@@ -42,7 +61,6 @@ def get_cmake():
class CMakeExtension(Extension):
"""
An extension to run the cmake build
This simply overrides the base extension class so that setuptools
doesn't try to build your sources for you
"""
......@@ -54,7 +72,6 @@ class CMakeExtension(Extension):
class InstallCMakeLibsData(install_data):
"""
Just a wrapper to get the install data into the egg-info
Listing the installed files in the egg-info guarantees that
all of the package files will be uninstalled when the user
uninstalls your package through pip
......@@ -72,10 +89,10 @@ class InstallCMakeLibsData(install_data):
self.outfiles = self.distribution.data_files
class InstallCMakeLibs(install_lib):
"""
Get the libraries from the parent distribution, use those as the outfiles
Skip building anything; everything is already built, forward libraries to
the installation step
"""
......@@ -141,6 +158,8 @@ class InstallCMakeLibs(install_lib):
super().run()
pass
class InstallCMakeScripts(install_scripts):
"""
......@@ -192,7 +211,8 @@ class BuildCMakeExt(build_ext):
for extension in self.extensions:
self.build_cmake(extension)
super().run()
# super().run()
pass
def build_cmake(self, extension: Extension):
"""
......@@ -203,10 +223,17 @@ class BuildCMakeExt(build_ext):
build_dir = pathlib.Path(self.build_temp)
extension_path = pathlib.Path(self.get_ext_fullpath(extension.name))
# don't store the abi3 info in filename
extension._file_name = extension._full_name
ext_path = pathlib.Path(self.get_ext_fullpath(extension.name))
ext_ext = os.path.splitext(ext_path)[1]
filename = extension._file_name + ext_ext
extension_path = os.path.join(ext_path.parent, filename)
os.makedirs(build_dir, exist_ok=True)
os.makedirs(extension_path.parent.absolute(), exist_ok=True)
os.makedirs(ext_path.parent.absolute(), exist_ok=True)
# Now that the necessary directories are created, build
......@@ -264,6 +291,16 @@ class BuildCMakeExt(build_ext):
# different place. See comments above for additional information
class BuildCommand(distutils.command.build.build):
def initialize_options(self):
# this overrides the directory names for
# build/lib and build/temp
distutils.command.build.build.initialize_options(self)
self.build_platlib = 'build/lib'
self.build_temp = 'build/temp'
setup(name="CFML",
version="0.0.1",
author="Simon Ward",
......@@ -281,11 +318,14 @@ setup(name="CFML",
"Programming Language :: Fortran",
"Programming Language :: Python"],
license='LGPL',
cpython_tags=None,
cmdclass={
'build': BuildCommand,
'build_ext': BuildCMakeExt,
'install_data': InstallCMakeLibsData,
'install_lib': InstallCMakeLibs,
'install_scripts': InstallCMakeScripts
'install_scripts': InstallCMakeScripts,
'bdist_wheel': Bdist_wheel
},
setup_requires=['wheel']
)
)
\ No newline at end of file
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment