Blob Blame History Raw
From 0e689e330ac93c77b96b9714ba4df8c90d4e3859 Mon Sep 17 00:00:00 2001
From: Elliott Sales de Andrade <quantum.analyst@gmail.com>
Date: Sat, 16 Mar 2019 00:17:41 -0400
Subject: [PATCH 1/4] Unbundle blosc.

Signed-off-by: Elliott Sales de Andrade <quantum.analyst@gmail.com>
---
 setup.py | 56 +++++++++++---------------------------------------------
 1 file changed, 11 insertions(+), 45 deletions(-)

diff --git a/setup.py b/setup.py
index fc9c699..c552605 100644
--- a/setup.py
+++ b/setup.py
@@ -1,5 +1,6 @@
 from glob import glob
 import os
+import subprocess
 from setuptools import setup, Extension
 import cpuinfo
 import sys
@@ -53,6 +54,12 @@ def error(*msg):
     print('[numcodecs]', *msg, **kwargs)
 
 
+def pkgconfig(name):
+    cflags = os.fsdecode(subprocess.check_output(['pkg-config', '--cflags', name]))
+    libs = os.fsdecode(subprocess.check_output(['pkg-config', '--libs', name]))
+    return cflags.split(), libs.split()
+
+
 def blosc_extension():
     info('setting up Blosc extension')
 
@@ -60,49 +67,8 @@ def blosc_extension():
     define_macros = []
 
     # setup blosc sources
-    blosc_sources = [f for f in glob('c-blosc/blosc/*.c')
-                     if 'avx2' not in f and 'sse2' not in f]
-    include_dirs = [os.path.join('c-blosc', 'blosc')]
-
-    # add internal complibs
-    blosc_sources += glob('c-blosc/internal-complibs/lz4*/*.c')
-    blosc_sources += glob('c-blosc/internal-complibs/snappy*/*.cc')
-    blosc_sources += glob('c-blosc/internal-complibs/zlib*/*.c')
-    blosc_sources += glob('c-blosc/internal-complibs/zstd*/common/*.c')
-    blosc_sources += glob('c-blosc/internal-complibs/zstd*/compress/*.c')
-    blosc_sources += glob('c-blosc/internal-complibs/zstd*/decompress/*.c')
-    blosc_sources += glob('c-blosc/internal-complibs/zstd*/dictBuilder/*.c')
-    include_dirs += [d for d in glob('c-blosc/internal-complibs/*')
-                     if os.path.isdir(d)]
-    include_dirs += [d for d in glob('c-blosc/internal-complibs/*/*')
-                     if os.path.isdir(d)]
-    include_dirs += [d for d in glob('c-blosc/internal-complibs/*/*/*')
-                     if os.path.isdir(d)]
-    define_macros += [('HAVE_LZ4', 1),
-                      ('HAVE_SNAPPY', 1),
-                      ('HAVE_ZLIB', 1),
-                      ('HAVE_ZSTD', 1)]
-    # define_macros += [('CYTHON_TRACE', '1')]
-
-    # SSE2
-    if have_sse2 and not disable_sse2:
-        info('compiling Blosc extension with SSE2 support')
-        extra_compile_args.append('-DSHUFFLE_SSE2_ENABLED')
-        blosc_sources += [f for f in glob('c-blosc/blosc/*.c') if 'sse2' in f]
-        if os.name == 'nt':
-            define_macros += [('__SSE2__', 1)]
-    else:
-        info('compiling Blosc extension without SSE2 support')
-
-    # AVX2
-    if have_avx2 and not disable_avx2:
-        info('compiling Blosc extension with AVX2 support')
-        extra_compile_args.append('-DSHUFFLE_AVX2_ENABLED')
-        blosc_sources += [f for f in glob('c-blosc/blosc/*.c') if 'avx2' in f]
-        if os.name == 'nt':
-            define_macros += [('__AVX2__', 1)]
-    else:
-        info('compiling Blosc extension without AVX2 support')
+    blosc = pkgconfig('blosc')
+    extra_compile_args += blosc[0]
 
     if have_cython:
         sources = ['numcodecs/blosc.pyx']
@@ -112,10 +78,10 @@ def blosc_extension():
     # define extension module
     extensions = [
         Extension('numcodecs.blosc',
-                  sources=sources + blosc_sources,
-                  include_dirs=include_dirs,
+                  sources=sources,
                   define_macros=define_macros,
                   extra_compile_args=extra_compile_args,
+                  extra_link_args=blosc[1],
                   ),
     ]
 
-- 
2.31.1