diff --git a/setup.py b/setup.py
index 6924b1b..a909a18 100644
@@ -6,6 +6,7 @@ Minimal setup.py for building gswc.
import os
import shutil
import sys
+import subprocess
import pkg_resources
from setuptools import Extension, setup
@@ -21,36 +22,43 @@ def read(*parts):
class build_ext(_build_ext):
# Extension builder from pandas without the cython stuff
def build_extensions(self):
+ cmd = ["cargo", "cinstall",
+ "--manifest-path", "src/GSW-rs/Cargo.toml",
+ f"--destdir={self.build_temp}",
+ "--prefix=gsw",
+ "--libdir=lib"]
+ rv = subprocess.Popen(cmd).wait()
+ if rv != 0:
+ sys.exit(rv)
+
+ gsw_obj = os.path.join(self.build_temp, "gsw", "lib")
+ if sys.platform == "win32":
+ gsw_obj = os.path.join(gsw_obj, "gsw.lib")
+ else:
+ gsw_obj = os.path.join(gsw_obj, "libgsw.a")
+
+ # private libs to link on windows
+ windows_libs = ["advapi32.lib", "bcrypt.lib", "ws2_32.lib", "userenv.lib", "msvcrt.lib", "ntdll.lib"]
+
numpy_incl = pkg_resources.resource_filename("numpy", "core/include")
for ext in self.extensions:
if hasattr(ext, "include_dirs") and not numpy_incl in ext.include_dirs:
ext.include_dirs.append(numpy_incl)
+
+ if hasattr(ext, "extra_objects") and not gsw_obj in ext.extra_objects:
+ ext.extra_objects.append(gsw_obj)
+ if sys.platform == "win32":
+ ext.extra_objects += windows_libs
+
_build_ext.build_extensions(self)
-# MSVC can't handle C complex, and distutils doesn't seem to be able to
-# let us force C++ compilation of .c files, so we use the following hack for
-# Windows.
-if sys.platform == "win32":
- cext = "cpp"
- shutil.copy(
- "src/c_gsw/gsw_oceanographic_toolbox.c",
- "src/c_gsw/gsw_oceanographic_toolbox.cpp",
- )
- shutil.copy("src/c_gsw/gsw_saar.c", "src/c_gsw/gsw_saar.cpp")
-else:
- cext = "c"
-
-ufunc_src_list = [
- "src/_ufuncs.c",
- "src/c_gsw/gsw_oceanographic_toolbox." + cext,
- "src/c_gsw/gsw_saar." + cext,
-]
+ufunc_src_list = ["src/_ufuncs.c"]
config = {
"ext_modules": [Extension("gsw._gsw_ufuncs", ufunc_src_list)],
- "include_dirs": [os.path.join(rootpath, "src", "c_gsw")],
+ "include_dirs": [os.path.join(rootpath, "src", "GSW-rs", "assets")],
"cmdclass": {"build_ext": build_ext},
}