about summary refs log tree commit diff
path: root/third_party/immer/setup.py
diff options
context:
space:
mode:
authorVincent Ambo <mail@tazj.in>2020-07-15T07·20+0100
committerVincent Ambo <mail@tazj.in>2020-07-15T07·23+0100
commit1213b086a1015a662ab7ebd658f784534fd3116a (patch)
treed3bc8f3b7f40b8b60f0ef6fbd649cf765f4fdfb6 /third_party/immer/setup.py
parent1390827b9ea1e04bc9863e48930bfd16db3b716e (diff)
parent7f19d641647ac4ef313ed88d6b5c140983ce5436 (diff)
merge(3p/immer): Subtree merge at 'ad3e3556d' as 'third_party/immer' r/1299
Change-Id: I9636a41ad44b4218293833fd3e9456d9b07c731b
Diffstat (limited to 'third_party/immer/setup.py')
-rw-r--r--third_party/immer/setup.py68
1 files changed, 68 insertions, 0 deletions
diff --git a/third_party/immer/setup.py b/third_party/immer/setup.py
new file mode 100644
index 000000000000..98c08449bcc3
--- /dev/null
+++ b/third_party/immer/setup.py
@@ -0,0 +1,68 @@
+
+# immer: immutable data structures for C++
+# Copyright (C) 2016, 2017, 2018 Juan Pedro Bolivar Puente
+#
+# This software is distributed under the Boost Software License, Version 1.0.
+# See accompanying file LICENSE or copy at http://boost.org/LICENSE_1_0.txt
+
+##
+
+import os
+import re
+import sys
+import platform
+import subprocess
+
+from distutils.version import LooseVersion
+from setuptools import setup, Extension
+from setuptools.command.build_ext import build_ext
+
+class CMakeExtension(Extension):
+    def __init__(self, name, sourcedir=''):
+        Extension.__init__(self, name, sources=[])
+        self.sourcedir = os.path.abspath(sourcedir)
+
+class CMakeBuild(build_ext):
+
+    def run(self):
+        try:
+            subprocess.check_output(['cmake', '--version'])
+        except OSError:
+            raise RuntimeError(
+                "CMake must be installed to build the following extensions: " +
+                ", ".join(e.name for e in self.extensions))
+        for ext in self.extensions:
+            self.build_extension(ext)
+
+    def build_extension(self, ext):
+        extdir = os.path.abspath(os.path.dirname(
+            self.get_ext_fullpath(ext.name)))
+        cfg = 'Debug' if self.debug else 'Release'
+        if not os.path.exists(self.build_temp):
+            os.makedirs(self.build_temp)
+        subprocess.check_call([
+            'cmake', ext.sourcedir,
+            '-DCMAKE_BUILD_TYPE=' + cfg,
+            '-DCMAKE_LIBRARY_OUTPUT_DIRECTORY=' + extdir,
+            '-DPYTHON_EXECUTABLE=' + sys.executable,
+            '-DDISABLE_WERROR=1',
+        ], cwd=self.build_temp)
+        subprocess.check_call([
+            'cmake', '--build', '.',
+            '--config', cfg,
+            '--target', 'python',
+        ], cwd=self.build_temp)
+
+setup(
+    name='immer',
+    version='0.0.0',
+    author='Juan Pedro Bolivar Puente',
+    author_email='raskolnikov@gnu.org',
+    description='Efficient immutable data structures',
+    long_description='',
+    packages=['immer'],
+    package_dir={'': 'extra/python'},
+    ext_modules=[CMakeExtension('immer_python_module', sourcedir='.')],
+    cmdclass=dict(build_ext=CMakeBuild),
+    zip_safe=False,
+)