From 99ef74c180afc7b4324b0449183f4b512d512868 Mon Sep 17 00:00:00 2001
From: Simon Ward <2798086+wardsimon@users.noreply.github.com>
Date: Wed, 14 Jul 2021 10:53:48 +0200
Subject: [PATCH] Code cleanup & WIN only test

---
 .github/workflows/build_variants.yml | 115 ++++++++++++++-------------
 .gitignore                           |   2 +
 Python_API/Src/CMakeLists.txt        |   2 +-
 setup.py                             |  65 +++++++--------
 4 files changed, 96 insertions(+), 88 deletions(-)

diff --git a/.github/workflows/build_variants.yml b/.github/workflows/build_variants.yml
index fa0003eb..12dcfd02 100644
--- a/.github/workflows/build_variants.yml
+++ b/.github/workflows/build_variants.yml
@@ -6,60 +6,60 @@ on:
     branches: [ simon ]
 
 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/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', '3.10']
-        os: [macos-10.15, macos-11.0]
-        gcc_v: [ 10 ] # Version of GFortran we want to use.
-        exclude:
-          - os: macos-10.15
-            python-version: '3.6'
-          - os: macos-11.0
-            python-version: '3.6'
-          - os: macos-11.0
-            python-version: '3.7'
-
-    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 ./dist/
-        delocate-wheel -w fixed_wheels -v ./dist/*.whl
-
-    - uses: actions/upload-artifact@v2
-      with:
-        name: CrysFML - ${{ matrix.os }} - Python ${{ matrix.python-version }}
-        path: ./fixed_wheels/*.whl
+#  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/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', '3.10']
+#        os: [macos-10.15, macos-11.0]
+#        gcc_v: [ 10 ] # Version of GFortran we want to use.
+#        exclude:
+#          - os: macos-10.15
+#            python-version: '3.6'
+#          - os: macos-11.0
+#            python-version: '3.6'
+#          - os: macos-11.0
+#            python-version: '3.7'
+#
+#    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 ./dist/
+#        delocate-wheel -w fixed_wheels -v ./dist/*.whl
+#
+#    - uses: actions/upload-artifact@v2
+#      with:
+#        name: CrysFML - ${{ matrix.os }} - Python ${{ matrix.python-version }}
+#        path: ./fixed_wheels/*.whl
 
   create-Windows:
     strategy:
@@ -82,7 +82,12 @@ jobs:
         run: pip3 install cmake wheel
 
       - name: Install Fotran
-        run: choco install mingw -y
+        run: |
+          choco install mingw -y
+          choco install msys2 --params "/NoUpdate"
+          echo "::add-path::C:\\tools\\msys64\\usr\\bin"
+          echo "::add-path::C:\\tools\\msys64\\mingw64\\bin"
+          echo "::set-env name=PKG_CONFIG_PATH::/mingw64/lib/pkgconfig"
 
       - name: Build CFML (Windows)
         run: pip3 wheel ./ --no-deps -w ./dist/
diff --git a/.gitignore b/.gitignore
index 1438fbb4..e1651ce6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -44,3 +44,5 @@ build/
 CFML.egg-info/
 
 dist/
+
+*.whl
diff --git a/Python_API/Src/CMakeLists.txt b/Python_API/Src/CMakeLists.txt
index ce5a9f5e..fe763cc4 100644
--- a/Python_API/Src/CMakeLists.txt
+++ b/Python_API/Src/CMakeLists.txt
@@ -31,7 +31,7 @@ set_source_files_properties(forpy_mod.f90 PROPERTIES COMPILE_FLAG "-cpp")
 # Add a dependency to crysfml_common to keep sure that the crysfml_common library will be built first.
 add_dependencies(${LIBRARY_NAME} crysfml_common)
 
-set(COMPATIBLE_VERSIONS 3.8 3.7 3.6 3.5)
+set(COMPATIBLE_VERSIONS 3.10 3.9 3.8 3.7 3.6)
 if (NOT PYTHON_INTERPRETER_PATH)
   set(Python_ADDITIONAL_VERSIONS ${COMPATIBLE_VERSIONS})
   find_package(PythonInterp REQUIRED)
diff --git a/setup.py b/setup.py
index ec11dd57..64918d28 100644
--- a/setup.py
+++ b/setup.py
@@ -1,15 +1,16 @@
+import os
+import pathlib
+import pkgutil
+import shutil
+import struct
+import sys
 from distutils.command.install_data import install_data
+from subprocess import CalledProcessError, check_output, check_call
+
 from setuptools import find_packages, setup, Extension
 from setuptools.command.build_ext import build_ext
 from setuptools.command.install_lib import install_lib
 from setuptools.command.install_scripts import install_scripts
-from subprocess import CalledProcessError, check_output, check_call
-import struct
-import pkgutil
-import pathlib
-import os
-import sys
-import shutil
 
 BITS = struct.calcsize("P") * 8
 PACKAGE_NAME = "crysfml_api"
@@ -25,13 +26,16 @@ print(f'Compiler set to: {COMPILER}')
 # If cmake is a known module, import it and use it tell us its binary directory
 if pkgutil.find_loader('cmake') is not None:
     import cmake
+
     CMAKE_BIN = cmake.CMAKE_BIN_DIR + os.path.sep + 'cmake'
 else:
     CMAKE_BIN = 'cmake'
 
+
 def get_cmake():
     return CMAKE_BIN
 
+
 class CMakeExtension(Extension):
     """
     An extension to run the cmake build
@@ -41,8 +45,8 @@ class CMakeExtension(Extension):
     """
 
     def __init__(self, name, sources=[]):
+        super().__init__(name=name, sources=sources)
 
-        super().__init__(name = name, sources = sources)
 
 class InstallCMakeLibsData(install_data):
     """
@@ -55,17 +59,16 @@ class InstallCMakeLibsData(install_data):
 
     def run(self):
         """
-        Outfiles are the libraries that were built using cmake
+        Out files are the libraries that were built using cmake
         """
-
         # There seems to be no other way to do this; I tried listing the
         # libraries during the execution of the InstallCMakeLibs.run() but
         # setuptools never tracked them, seems like setuptools wants to
         # track the libraries through package data more than anything...
-        # help would be appriciated
 
         self.outfiles = self.distribution.data_files
 
+
 class InstallCMakeLibs(install_lib):
     """
     Get the libraries from the parent distribution, use those as the outfiles
@@ -80,24 +83,20 @@ class InstallCMakeLibs(install_lib):
         """
 
         self.announce("Moving library files", level=3)
-
         # We have already built the libraries in the previous build_ext step
-
         self.skip_build = True
 
-        # bin_dir = self.distribution.bin_dir
-
         # Depending on the files that are generated from your cmake
         # build chain, you may need to change the below code, such that
         # your files are moved to the appropriate location when the installation
         # is run
 
+        # bin_dir = self.distribution.bin_dir
         bin_dir = os.path.abspath(os.path.join(self.distribution.bin_dir, '..'))
 
         libs = [os.path.join(bin_dir, _dir) for _dir in
-                        os.listdir(bin_dir) if
-                        os.path.isdir(os.path.join(bin_dir, _dir))]
-
+                os.listdir(bin_dir) if
+                os.path.isdir(os.path.join(bin_dir, _dir))]
 
         for lib in libs:
             shutil.move(lib, os.path.join(self.build_dir,
@@ -139,6 +138,7 @@ class InstallCMakeLibs(install_lib):
 
         super().run()
 
+
 class InstallCMakeScripts(install_scripts):
     """
     Install the scripts in the build dir
@@ -176,6 +176,7 @@ class InstallCMakeScripts(install_scripts):
 
         super().run()
 
+
 class BuildCMakeExt(build_ext):
     """
     Builds using cmake instead of the python setuptools implicit build
@@ -187,7 +188,7 @@ class BuildCMakeExt(build_ext):
         """
 
         for extension in self.extensions:
-                self.build_cmake(extension)
+            self.build_cmake(extension)
         super().run()
 
     def build_cmake(self, extension: Extension):
@@ -233,9 +234,9 @@ class BuildCMakeExt(build_ext):
         check_call(
             [get_cmake(), "--build", ".", '--target', 'install'] + build_args, cwd=self.build_temp
         )
+
         # Build finished, now copy the files into the copy directory
         # The copy directory is the parent directory of the extension (.pyd)
-
         self.announce("Moving built python module", level=3)
 
         bin_dir = os.path.join(os.getcwd(), COMPILER, 'Python_API', 'CFML_api')
@@ -248,7 +249,6 @@ class BuildCMakeExt(build_ext):
                     os.path.splitext(_pyd)[1] in [".pyd", ".so"]][0]
 
         shutil.move(pyd_path, extension_path)
-
         # After build_ext is run, the following commands will run:
         #
         # install_lib
@@ -259,27 +259,28 @@ class BuildCMakeExt(build_ext):
         # wants to build those libs and scripts as well or move them to a
         # different place. See comments above for additional information
 
+
 setup(name="CFML",
       version="0.0.1",
       author="Simon Ward",
       author_email="simon.ward@ess.eu",
-      description="ManyLinux test of CrysFML",
-      ext_modules=[CMakeExtension(name="crysfml_api")],
+      description="The Crystallographic Fortran Modules Library (CrysFML) is a set of modules containing "
+                  "procedures of interest in Crystallographic applications.",
+      ext_modules=[CMakeExtension(name=PACKAGE_NAME)],
       long_description=open("./README", 'r').read(),
       long_description_content_type="text/markdown",
-      keywords="crystolography, physics, neutron, diffraction",
+      keywords="crystallography, physics, neutron, diffraction",
       classifiers=["Intended Audience :: Developers",
                    "License :: OSI Approved :: "
                    "GNU Lesser General Public License v3 (LGPLv3)",
                    "Natural Language :: English",
-                   "Programming Language :: C",
-                   "Programming Language :: C++",
+                   "Programming Language :: Fortran",
                    "Programming Language :: Python"],
-      license='GPL-3.0',
+      license='LGPL',
       cmdclass={
-          'build_ext': BuildCMakeExt,
-          'install_data': InstallCMakeLibsData,
-          'install_lib': InstallCMakeLibs,
+          'build_ext':       BuildCMakeExt,
+          'install_data':    InstallCMakeLibsData,
+          'install_lib':     InstallCMakeLibs,
           'install_scripts': InstallCMakeScripts
-          }
-    )
+      }
+      )
-- 
GitLab