gsw 0.2.3

TEOS-10 v3.06.12 Gibbs Seawater Oceanographic Toolbox in Rust
Documentation
diff --git a/setup.py b/setup.py
index 6924b1b..a909a18 100644
--- a/setup.py
+++ b/setup.py
@@ -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},
 }