From b262b7bba08043769a93e48bd418e79cbba1763c Mon Sep 17 00:00:00 2001 From: Berk Onat <b.onat@warwick.ac.uk> Date: Tue, 24 Oct 2017 15:49:11 +0100 Subject: [PATCH] Python setup.py with CMake --- LICENSE | 53 +++++++-- pymolfile/molfile/.lipo | Bin 110974 -> 0 bytes .../molfile_plugins/compile/FindNetCDF.cmake | 102 ++++++++++++++++++ setup.py | 62 ++++++++++- 4 files changed, 205 insertions(+), 12 deletions(-) delete mode 100644 pymolfile/molfile/.lipo create mode 100644 pymolfile/molfile/molfile_plugins/compile/FindNetCDF.cmake diff --git a/LICENSE b/LICENSE index 470e42a..a398893 100644 --- a/LICENSE +++ b/LICENSE @@ -1,12 +1,19 @@ LICENSE for pymolfile --------------------- -All files of pymolfile except the files under vmd_molfile_plugins directory -which are licensed below with "LICENSE for VMD molfile_plugins" are -licensed under the following UIUC Open Source License: - +Exceptions for pymolfile LICENSE: +--------------------------------- +- FindNetCDF.cmake is LICENSE with BSD-2 Clause (See section 'LICENSE for + FindNetCDF.cmake file' in the file and below) +- VMD molfile_plugins under molfile_plugins directory are licensed with + UIUC Open Source Licence (See section 'LICENSE for VMD molfile_plugins' + in this file) + +All files of pymolfile except the files listed above are licensed with +UIUC Open Source License at section 'LICENSE for Pymolfile' in this file + +LICENSE for Pymolfile: ----------------------------------------------------------------------------- - University of Illinois Open Source License Copyright 2017 University of Warwick All rights reserved. @@ -41,12 +48,11 @@ THE CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE SOFTWARE. +----------------------------------------------------------------------------- - -LICENSE for VMD molfile_plugins -------------------------------- - +LICENSE for VMD molfile_plugins: +----------------------------------------------------------------------------- University of Illinois Open Source License Copyright 2006 Theoretical and Computational Biophysics Group, All rights reserved. @@ -81,5 +87,34 @@ THE CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE SOFTWARE. +----------------------------------------------------------------------------- + + +LICENSE for FindNetCDF.cmake file: +----------------------------------------------------------------------------- +Copyright Jed Brown +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, this + list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +----------------------------------------------------------------------------- diff --git a/pymolfile/molfile/.lipo b/pymolfile/molfile/.lipo deleted file mode 100644 index 6203b131c0616fd693c105831a2b1b23fb8fa669..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 110974 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 Kft!Ji1Tz6qj8hT- diff --git a/pymolfile/molfile/molfile_plugins/compile/FindNetCDF.cmake b/pymolfile/molfile/molfile_plugins/compile/FindNetCDF.cmake new file mode 100644 index 0000000..669630a --- /dev/null +++ b/pymolfile/molfile/molfile_plugins/compile/FindNetCDF.cmake @@ -0,0 +1,102 @@ +# - Find NetCDF +# Find the native NetCDF includes and library +# +# NETCDF_INCLUDES - where to find netcdf.h, etc +# NETCDF_LIBRARIES - Link these libraries when using NetCDF +# NETCDF_FOUND - True if NetCDF found including required interfaces (see below) +# +# Your package can require certain interfaces to be FOUND by setting these +# +# NETCDF_CXX - require the C++ interface and link the C++ library +# NETCDF_F77 - require the F77 interface and link the fortran library +# NETCDF_F90 - require the F90 interface and link the fortran library +# +# The following are not for general use and are included in +# NETCDF_LIBRARIES if the corresponding option above is set. +# +# NETCDF_LIBRARIES_C - Just the C interface +# NETCDF_LIBRARIES_CXX - C++ interface, if available +# NETCDF_LIBRARIES_F77 - Fortran 77 interface, if available +# NETCDF_LIBRARIES_F90 - Fortran 90 interface, if available +# +# Normal usage would be: +# set (NETCDF_F90 "YES") +# find_package (NetCDF REQUIRED) +# target_link_libraries (uses_f90_interface ${NETCDF_LIBRARIES}) +# target_link_libraries (only_uses_c_interface ${NETCDF_LIBRARIES_C}) + +# Taken from: https://github.com/jedbrown/cmake-modules/blob/master/FindNetCDF.cmake +# +# Below copyright author list is gathered using +# "git shortlog -s FindNetCDF.cmake" +# at Oct 24th, 2017 +# +#Copyright Jed Brown +#All rights reserved. +# +#Redistribution and use in source and binary forms, with or without modification, +#are permitted provided that the following conditions are met: +# +#* Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# +#* Redistributions in binary form must reproduce the above copyright notice, this +# list of conditions and the following disclaimer in the documentation and/or +# other materials provided with the distribution. +# +#THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +#ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +#WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +#DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +#ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +#(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +#LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +#ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +#(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +#SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# + +if (NETCDF_INCLUDES AND NETCDF_LIBRARIES) + # Already in cache, be silent + set (NETCDF_FIND_QUIETLY TRUE) +endif (NETCDF_INCLUDES AND NETCDF_LIBRARIES) + +find_path (NETCDF_INCLUDES netcdf.h + HINTS NETCDF_DIR ENV NETCDF_DIR) + +find_library (NETCDF_LIBRARIES_C NAMES netcdf) +mark_as_advanced(NETCDF_LIBRARIES_C) + +set (NetCDF_has_interfaces "YES") # will be set to NO if we're missing any interfaces +set (NetCDF_libs "${NETCDF_LIBRARIES_C}") + +get_filename_component (NetCDF_lib_dirs "${NETCDF_LIBRARIES_C}" PATH) + +macro (NetCDF_check_interface lang header libs) + if (NETCDF_${lang}) + find_path (NETCDF_INCLUDES_${lang} NAMES ${header} + HINTS "${NETCDF_INCLUDES}" NO_DEFAULT_PATH) + find_library (NETCDF_LIBRARIES_${lang} NAMES ${libs} + HINTS "${NetCDF_lib_dirs}" NO_DEFAULT_PATH) + mark_as_advanced (NETCDF_INCLUDES_${lang} NETCDF_LIBRARIES_${lang}) + if (NETCDF_INCLUDES_${lang} AND NETCDF_LIBRARIES_${lang}) + list (INSERT NetCDF_libs 0 ${NETCDF_LIBRARIES_${lang}}) # prepend so that -lnetcdf is last + else (NETCDF_INCLUDES_${lang} AND NETCDF_LIBRARIES_${lang}) + set (NetCDF_has_interfaces "NO") + message (STATUS "Failed to find NetCDF interface for ${lang}") + endif (NETCDF_INCLUDES_${lang} AND NETCDF_LIBRARIES_${lang}) + endif (NETCDF_${lang}) +endmacro (NetCDF_check_interface) + +NetCDF_check_interface (CXX netcdfcpp.h netcdf_c++) +NetCDF_check_interface (F77 netcdf.inc netcdff) +NetCDF_check_interface (F90 netcdf.mod netcdff) + +set (NETCDF_LIBRARIES "${NetCDF_libs}" CACHE STRING "All NetCDF libraries required for interface level") + +# handle the QUIETLY and REQUIRED arguments and set NETCDF_FOUND to TRUE if +# all listed variables are TRUE +include (FindPackageHandleStandardArgs) +find_package_handle_standard_args (NetCDF DEFAULT_MSG NETCDF_LIBRARIES NETCDF_INCLUDES NetCDF_has_interfaces) + +mark_as_advanced (NETCDF_LIBRARIES NETCDF_INCLUDES) diff --git a/setup.py b/setup.py index c189d0f..6776f7e 100644 --- a/setup.py +++ b/setup.py @@ -14,6 +14,62 @@ except: from Cython.Build import cythonize from Cython.Distutils import build_ext +# from http://www.benjack.io/2017/06/12/python-cpp-tests.html +class CMakeExtension(Extension): + def __init__(self, name, sourcedir=''): + Extension.__init__(self, name, sources=[]) + self.sourcedir = os.path.abspath(sourcedir) + +class CMakeBuild(build_ext): + def run(self): + try: + out = subprocess.check_output(['cmake', '--version']) + except OSError: + raise RuntimeError( + "CMake must be installed to build the following extensions: " + + ", ".join(e.name for e in self.extensions)) + + if platform.system() == "Windows": + cmake_version = LooseVersion(re.search(r'version\s*([\d.]+)', + out.decode()).group(1)) + if cmake_version < '3.1.0': + raise RuntimeError("CMake >= 3.1.0 is required on Windows") + + for ext in self.extensions: + self.build_extension(ext) + + def build_extension(self, ext): + extdir = os.path.abspath( + os.path.dirname(self.get_ext_fullpath(ext.name))) + cmake_args = ['-DCMAKE_LIBRARY_OUTPUT_DIRECTORY=' + extdir, + '-DPYTHON_EXECUTABLE=' + sys.executable] + + cfg = 'Debug' if self.debug else 'Release' + build_args = ['--config', cfg] + + if platform.system() == "Windows": + cmake_args += ['-DCMAKE_LIBRARY_OUTPUT_DIRECTORY_{}={}'.format( + cfg.upper(), + extdir)] + if sys.maxsize > 2**32: + cmake_args += ['-A', 'x64'] + build_args += ['--', '/m'] + else: + cmake_args += ['-DCMAKE_BUILD_TYPE=' + cfg] + build_args += ['--', '-j2'] + + env = os.environ.copy() + env['CXXFLAGS'] = '{} -DVERSION_INFO=\\"{}\\"'.format( + env.get('CXXFLAGS', ''), + self.distribution.get_version()) + if not os.path.exists(self.build_temp): + os.makedirs(self.build_temp) + subprocess.check_call(['cmake', ext.sourcedir] + cmake_args, + cwd=self.build_temp, env=env) + subprocess.check_call(['cmake', '--build', '.'] + build_args, + cwd=self.build_temp) + print() # Add an empty line for cleaner output + def get_ext_filename_without_platform_suffix(filename): name, ext = os.path.splitext(filename) ext_suffix = sysconfig.get_config_var('EXT_SUFFIX') @@ -41,8 +97,8 @@ CLASSIFIERS = [ "Intended Audience :: Developers", "License :: OSI Approved :: University of Illinois Open Source License (UIUC)", "Programming Language :: C", + "Programming Language :: C++", "Programming Language :: Python", - "Programming Language :: Python :: 2", "Programming Language :: Python :: 3", "Topic :: Scientific/Engineering :: Physics", "Topic :: Scientific/Engineering :: Chemistry", @@ -157,7 +213,7 @@ if __name__ == '__main__': # command_extension={'build_ext': BuildExtWithoutPlatformSuffix} #else: # command_extension={} - command_extension={} + command_extension=dict(build_ext=CMakeBuild) setup( name = "pymolfile", @@ -172,7 +228,7 @@ if __name__ == '__main__': packages = find_packages(), cmdclass= command_extension, ext_modules = [ - #libmolfile_plugin_compile(cmake_libmolfile_plugin_compile), + CMakeExtension('molfile', sourcedir='pymolfile/molfile/'), libpymolfile_module, ], py_modules=["pymolfile"], -- GitLab