diff --git a/setup.py b/setup.py
index 3c29fe66be3152a565011a552c72d8a0a742b041..2e082ec6e143c0adf852a31926e65188b3a156a5 100644
--- a/setup.py
+++ b/setup.py
@@ -1,6 +1,10 @@
 #!/usr/bin/env python
 import sys
 import os.path
+import shlex
+import subprocess
+
+from distutils.command.build_clib import build_clib as _build_clib
 
 from setuptools import setup
 from setuptools.command.test import test as TestCommand
@@ -23,6 +27,41 @@ else:
     ext_modules[0].include_dirs.append(here("libsodium/src/libsodium/include"))
 
 
+class build_clib(_build_clib):
+
+    def run(self):
+        # Run ./configure
+        subprocess.check_call(
+            "./configure --disable-debug --disable-dependency-tracking",
+            cwd=here("libsodium"),
+            shell=True,
+        )
+
+        # Parse the Makefile to determine what macros to define
+        with open(here("libsodium/Makefile")) as makefile:
+            for line in makefile:
+                if line.startswith("DEFS"):
+                    defines = [
+                        tuple(shlex.split(i)[0][2:].split("=", 1))
+                        for i in shlex.split(line)
+                        if i.startswith("-D")
+                    ]
+
+        # Configure libsodium using the Makefile defines
+        libraries = []
+        for libname, build_info in self.libraries:
+            if libname == "sodium":
+                # Store the define macros inside the build info
+                macros = dict(build_info.get("macros", []))
+                macros.update(dict(defines))
+                build_info["macros"] = list(macros.items())
+            libraries.append((libname, build_info))
+        self.libraries = libraries
+
+        # Call our normal run
+        return _build_clib.run(self)
+
+
 class PyTest(TestCommand):
     def finalize_options(self):
         TestCommand.finalize_options(self)
@@ -198,20 +237,38 @@ setup(
                     "sodium/version.c",
 
                     # THIS STUFF IS UNDEFINED?
-                    "crypto_scalarmult/curve25519/scalarmult_curve25519_api.c",
                     "crypto_scalarmult/curve25519/ref/base_curve25519_ref.c",
                     "crypto_scalarmult/curve25519/ref/smult_curve25519_ref.c",
                     # "crypto_scalarmult/curve25519/donna_c64/base_curve25519_donna_c64.c",
                     # "crypto_scalarmult/curve25519/donna_c64/smult_curve25519_donna_c64.c",
                     "crypto_stream/salsa20/ref/stream_salsa20_ref.c",
                     "crypto_stream/salsa20/ref/xor_salsa20_ref.c",
+
+                    #
+
+                    # 'crypto_auth/try.c',
+                    #'crypto_box/try.c',
+                    'crypto_generichash/blake2/ref/blake2s-ref.c',
+                    #'crypto_hash/try.c',
+                    #'crypto_hashblocks/try.c',
+                    'crypto_scalarmult/curve25519/donna_c64/base_curve25519_donna_c64.c',
+                    'crypto_scalarmult/curve25519/donna_c64/smult_curve25519_donna_c64.c',
+                    #'crypto_scalarmult/try.c',
+                    #'crypto_secretbox/try.c',
+                    #'crypto_sign/try.c',
+                    'crypto_stream/salsa20/stream_salsa20_api.c',
+                    #'crypto_stream/try.c',
+                    #'crypto_verify/try.c'
                 ]
             ],
         }),
     ],
 
     zip_safe=False,
-    cmdclass={"test": PyTest},
+    cmdclass={
+        "build_clib": build_clib,
+        "test": PyTest,
+    },
 
     classifiers=[
         "Programming Language :: Python :: Implementation :: CPython",