old_contents: from setuptools import setup, Extension
  from setuptools.command.build_ext import build_ext
  import sys
  
  ext_modules = [
      Extension(
          'pbtest',
          ['py/main.cpp'],
          include_dirs=['include'],
          language='c++',
      ),
  ]
  
  
  class BuildExt(build_ext):
      """A custom build extension for adding compiler-specific options."""
      c_opts = {
          'msvc': ['/EHsc'],
          'unix': ['-std=c++11'],
      }
  
      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, [])
          for ext in self.extensions:
              ext.extra_compile_args = opts
          build_ext.build_extensions(self)
  
  setup(
      name='pbtest',
      version='0.0.1',
      author='Sylvain Corlay',
      author_email='sylvain.corlay@gmail.com',
      url='https://github.com/pybind/pbtest',
      description='A test project using pybind11',
      long_description='',
      ext_modules=ext_modules,
      install_requires=['pybind11'],
      cmdclass={'build_ext': BuildExt},
      zip_safe=False,
  )
  
new_contents: from setuptools import setup, Extension
  from setuptools.command.build_ext import build_ext
  import os, sys
  
  ext_modules = [
      Extension(
          'pbtest',
          ['py/main.cpp'],
          include_dirs=['include'],
          language='c++',
      ),
  ]
  
  def has_flag(compiler, flagname):
      """Return a boolean indicating whether a flag name is supported on
      the specified compiler.
      """
      import tempfile
      fd, fname = tempfile.mkstemp('.cpp', 'main', text=True)
      f = os.fdopen(fd, 'w')
      try:
          f.write('int main (int argc, char **argv) { return 0; }')
      finally:
          f.close()
      try:
          compiler.compile([fname], 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'
      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(cpp_flag(self.compiler))
          for ext in self.extensions:
              ext.extra_compile_args = opts
          build_ext.build_extensions(self)
  
  setup(
      name='pbtest',
      version='0.0.1',
      author='Sylvain Corlay',
      author_email='sylvain.corlay@gmail.com',
      url='https://github.com/pybind/pbtest',
      description='A test project using pybind11',
      long_description='',
      ext_modules=ext_modules,
      install_requires=['pybind11'],
      cmdclass={'build_ext': BuildExt},
      zip_safe=False,
  )
  
subject: Use -std=c++14 flag when available on clang and gcc