text: from setuptools import setup, Extension
  from setuptools.command.build_ext import build_ext
  import sys
  import setuptools
  
  import os
  from setuptools import setup, find_packages
  
  __version__ = '0.0.12'
  
  
  def read(fname):
      return open(os.path.join(os.path.dirname(__file__), fname)).read()
  
  
  class get_pybind_include(object):
      """Helper class to determine the pybind11 include path
  
      The purpose of this class is to postpone importing pybind11
      until it is actually installed, so that the ``get_include()``
      method can be invoked. """
  
      def __init__(self, user=False):
          self.user = user
  
      def __str__(self):
          import pybind11
          return pybind11.get_include(self.user)
  
  ext_modules = [
      Extension(
          '_cpalgorithm',
  	['src/_cpalgorithm_py.cpp'],
          include_dirs=[
              # Path to pybind11 headers
              get_pybind_include(),
              get_pybind_include(user=True),
  	    'pybind11/include',
  	    'include'
          ],
          language='c++',
          #extra_link_args=['-lgomp'],
  	#extra_compile_args=['-fopenmp']
      ),
  ]
  
  # As of Python 3.6, CCompiler has a `has_flag` method.
  # cf http://bugs.python.org/issue26689
  def has_flag(compiler, flagname):
      """Return a boolean indicating whether a flag name is supported on
      the specified compiler.
      """
      import tempfile
      with tempfile.NamedTemporaryFile('w', suffix='.cpp') as f:
          f.write('int main (int argc, char **argv) { return 0; }')
          try:
              compiler.compile([f.name], extra_postargs=[flagname])
          except setuptools.distutils.errors.CompileError:
              return False
      return True
  
  
  def cpp_flag(compiler):
      """Return the -std=c++[11/14] compiler flag.
  
      The c++14 is prefered over c++11 (when it is available).
      """
      #if has_flag(compiler, '-std=c++14'):
      #   return '-std=c++14'
      if has_flag(compiler, '-std=c++11'):
      #elif has_flag(compiler, '-std=c++11'):
          return '-std=c++11'
      else:
          raise RuntimeError('Unsupported compiler -- at least C++11 support '
                             'is needed!')
  
  
  class BuildExt(build_ext):
      """A custom build extension for adding compiler-specific options."""
      c_opts = {
          'msvc': ['/EHsc'],
          'unix': [],
      }
  
      if sys.platform == 'darwin':
          c_opts['unix'] += ['-stdlib=libc++', '-mmacosx-version-min=10.7']
  
      def build_extensions(self):
          ct = self.compiler.compiler_type
          opts = self.c_opts.get(ct, [])
          if ct == 'unix':
              opts.append('-DVERSION_INFO="%s"' % self.distribution.get_version())
              opts.append(cpp_flag(self.compiler))
              #opts.append('-fopenmp')
              if has_flag(self.compiler, '-fvisibility=hidden'):
                  opts.append('-fvisibility=hidden')
          elif ct == 'msvc':
              opts.append('/DVERSION_INFO=\\"%s\\"' % self.distribution.get_version())
          for ext in self.extensions:
              ext.extra_compile_args = opts
          build_ext.build_extensions(self)
  
  setup(
      name='cpalgorithm',
      version=__version__,
      author='Sadamori Kojaku',
      author_email='freesailing4046@gmail.com',
      description='Algorithm for finding multiple core-periphery pairs in networks',
      long_description="sada",
      url='https://github.com/skojaku/core-periphery-detection',
      ext_modules=ext_modules,
      packages=find_packages(exclude=['contrib', 'docs', 'tests']),
      install_requires=['pybind11>=2.2','networkx>=2.0', 'numpy>=1.14.2', 'simanneal', 'scipy>=1.1.0'],
  #install_requires=['pybind11>=2.2', 'networkx>=2.0', 'numpy>=1.14.2', 'scipy>=1.1.0', 'simanneal'],
      cmdclass={'build_ext': BuildExt},
      zip_safe=False,
      include_package_data=True,
      license='MIT',
      classifiers=[
          'Development Status :: 3 - Alpha',
          'Intended Audience :: Science/Research',
          'Topic :: Software Development',
          'License :: OSI Approved :: MIT License',
          'Programming Language :: Python :: 3.4',
          'Programming Language :: Python :: 3.5',
          'Programming Language :: Python :: 3.6',
      ],
      keywords='network core-periphery structure'
  )
  