68 lines
		
	
	
	
		
			2.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			68 lines
		
	
	
	
		
			2.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
 | 
						|
# 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,
 | 
						|
)
 |