From daeab56e4acb22908095632f22504e6d5fdbb84e Mon Sep 17 00:00:00 2001 From: Christian Steger Date: Sat, 4 Jun 2022 00:02:17 +0200 Subject: [PATCH] Setup file adapted for different operating systems --- setup.py | 48 +++++++++++++++++++++++++++++++++++------------- 1 file changed, 35 insertions(+), 13 deletions(-) diff --git a/setup.py b/setup.py index b52895f..e27bdbc 100644 --- a/setup.py +++ b/setup.py @@ -7,47 +7,69 @@ # Load modules import os +import sys from distutils.core import setup from Cython.Distutils import build_ext from distutils.extension import Extension import numpy as np -# ----------------------------------------------------------------------------- -# Settings -# ----------------------------------------------------------------------------- +# Manual settings (NetCDF 3/4 library) +lib_netcdf = ["libnetcdf", "libnetcdf_c++4"] # NetCDF4 +# lib_netcdf = ["libnetcdf_c++"] # NetCDF3 -lib_netcdf = ["/opt/local/lib/libnetcdf.dylib", - "/opt/local/lib/libnetcdf_c++4.dylib"] # NetCDF4 -# lib_netcdf = ["/opt/local/lib/libnetcdf_c++.dylib"] # NetCDF3 - -# ----------------------------------------------------------------------------- +# Operating system dependent settings +path_lib_conda = os.environ["CONDA_PREFIX"] + "/lib/" +if sys.platform in ["linux", "linux2"]: + print("Operating system: Linux") + lib_end = ".so" + libraries_cython = ["m", "pthread"] + include_dirs_cpp = [np.get_include()] + extra_objects_cpp = [path_lib_conda + "libembree3" + lib_end] \ + + [path_lib_conda + i + lib_end for i in lib_netcdf] +elif sys.platform in ["darwin"]: + print("Operating system: Mac OS X") + lib_end = ".dylib" + libraries_cython = ["m", "iomp5", "pthread"] + print("Provide path to NetCDF library (e.g. '/opt/local/lib/')") + path_lib = input() + include_dirs_cpp = [np.get_include()] + extra_objects_cpp = [path_lib_conda + "libembree3" + lib_end] \ + + [path_lib + i + lib_end for i in lib_netcdf] + for i in extra_objects_cpp: + if not os.path.isfile(i): + raise ValueError("Library " + i + " not found") +elif sys.platform in ["win32"]: + print("Operating system: Windows") + raise ValueError("Warning: Package not yet tested for Windows") +else: + raise ValueError("Unsupported operation system") os.environ["CC"] = "gcc" ext_modules = [ Extension("transform", ["horayzon/transform.pyx"], - libraries=["m", "iomp5", "pthread"], + libraries=libraries_cython, extra_compile_args=["-O3", "-ffast-math", "-fopenmp"], extra_link_args=["-fopenmp"], include_dirs=[np.get_include()]), Extension("ecef", ["horayzon/ecef.pyx"], - libraries=["m", "iomp5", "pthread"], + libraries=libraries_cython, extra_compile_args=["-O3", "-ffast-math", "-fopenmp"], extra_link_args=["-fopenmp"], include_dirs=[np.get_include()]), Extension("topo_param", ["horayzon/topo_param.pyx"], - libraries=["m", "iomp5", "pthread"], + libraries=libraries_cython, extra_compile_args=["-O3", "-ffast-math", "-fopenmp"], extra_link_args=["-fopenmp"], include_dirs=[np.get_include()]), Extension( "horizon", sources=["horayzon/horizon.pyx", "horayzon/horizon_comp.cpp"], - include_dirs=[np.get_include(), "/opt/local/include"], - extra_objects=["/opt/local/lib/libembree3.dylib"] + lib_netcdf, + include_dirs=include_dirs_cpp, + extra_objects=extra_objects_cpp, extra_compile_args=["-O3"], language="c++", )