text: 
  from setuptools import find_packages
  from sys import platform as _platform
  import sys
  import glob
  import os
  
  
  from distutils.core import setup
  from distutils.extension import Extension
  from distutils.util import get_platform
  from glob import glob
  
  # monkey-patch for parallel compilation
  import multiprocessing
  import multiprocessing.pool
  
  
  def parallelCCompile(self, sources, output_dir=None, macros=None, include_dirs=None, debug=0, extra_preargs=None, extra_postargs=None, depends=None):
      # those lines are copied from distutils.ccompiler.CCompiler directly
      macros, objects, extra_postargs, pp_opts, build = self._setup_compile(output_dir, macros, include_dirs, sources, depends, extra_postargs)
      cc_args = self._get_cc_args(pp_opts, debug, extra_preargs)
      # parallel code
      N = 2*multiprocessing.cpu_count()# number of parallel compilations
      def _single_compile(obj):
          try: src, ext = build[obj]
          except KeyError: return
          newcc_args = cc_args
          if _platform == "darwin":
            if src.endswith('.cpp'):
              newcc_args = cc_args + ["-stdlib=libc++"]
          self._compile(obj, src, ext, newcc_args, extra_postargs, pp_opts)
      # convert to list, imap is evaluated on-demand
      pool = multiprocessing.pool.ThreadPool(N)
      list(pool.imap(_single_compile,objects))
      return objects
  import distutils.ccompiler
  distutils.ccompiler.CCompiler.compile=parallelCCompile
  
  #see http://stackoverflow.com/a/8719066/295157
  import os
  
  
  platform = get_platform()
  print(platform)
  
  CXX_FLAGS = ''
  CXX_FLAGS += '-DGWEN_COMPILE_STATIC '
  CXX_FLAGS += '-DBT_USE_DOUBLE_PRECISION '
  CXX_FLAGS += '-DBT_ENABLE_ENET '
  CXX_FLAGS += '-DBT_ENABLE_CLSOCKET '
  CXX_FLAGS += '-DB3_DUMP_PYTHON_VERSION '
  CXX_FLAGS += '-DEGL_ADD_PYTHON_INIT '
  CXX_FLAGS += '-DB3_ENABLE_FILEIO_PLUGIN '
  CXX_FLAGS += '-DB3_USE_ZIPFILE_FILEIO '
  CXX_FLAGS += '-DBT_THREADSAFE=1 '
  CXX_FLAGS += '-DSTATIC_LINK_SPD_PLUGIN '
  CXX_FLAGS += '-DPX_PHYSX_STATIC_LIB '
  CXX_FLAGS += '-DBT_ENABLE_PHYSX '
  CXX_FLAGS += '-DPX_FOUNDATION_DLL=0 '
  CXX_FLAGS += '-DPX_COOKING '
  CXX_FLAGS += '-DNDEBUG '
  # CXX_FLAGS += '-DDISABLE_CUDA_PHYSX '
  CXX_FLAGS += '-DPX_PROFILE '
  CXX_FLAGS += '-DPX_SUPPORT_PVD=0 '
  CXX_FLAGS += '-DBT_USE_EGL '
  CXX_FLAGS += '-DPX_SUPPORT_GPU_PHYSX '
  
  CFLAGS =  CXX_FLAGS
  
  
  
  
  EGL_CXX_FLAGS = ''
  
  
  
  # libraries += [current_python]
  
  libraries = []
  include_dirs = ["examples", 
     "src/PhysX/physx/source/common/include",
     "src/PhysX/physx/source/common/src",
      "src/PhysX/physx/source/fastxml/include",
      "src/PhysX/physx/source/filebuf/include",
      "src/PhysX/physx/source/foundation/include",
      "src/PhysX/physx/source/geomutils/include",
      "src/PhysX/physx/source/geomutils/src",
      "src/PhysX/physx/source/geomutils/src/ccd",
      "src/PhysX/physx/source/geomutils/src/common",
      "src/PhysX/physx/source/geomutils/src/contact",
      "src/PhysX/physx/source/geomutils/src/convex",
      "src/PhysX/physx/source/geomutils/src/distance",
      "src/PhysX/physx/source/geomutils/src/gjk",
      "src/PhysX/physx/source/geomutils/src/hf",
      "src/PhysX/physx/source/geomutils/src/intersection",
      "src/PhysX/physx/source/geomutils/src/mesh",
      "src/PhysX/physx/source/geomutils/src/pcm",
      "src/PhysX/physx/source/geomutils/src/sweep",
      "src/PhysX/physx/source/lowlevel/api/include",
      "src/PhysX/physx/source/lowlevel/common/include",
      "src/PhysX/physx/source/lowlevel/common/include/collision",
      "src/PhysX/physx/source/lowlevel/common/include/pipeline",
      "src/PhysX/physx/source/lowlevel/common/include/utils",
      "src/PhysX/physx/source/lowlevel/software/include",
      "src/PhysX/physx/source/lowlevelaabb/include",
      "src/PhysX/physx/source/lowleveldynamics/include",
      "src/PhysX/physx/source/physx/src",
      "src/PhysX/physx/source/physx/src/buffering",
      "src/PhysX/physx/source/physx/src/device",
      "src/PhysX/physx/source/physxcooking/src",
      "src/PhysX/physx/source/physxcooking/src/convex",
      "src/PhysX/physx/source/physxcooking/src/mesh",
      "src/PhysX/physx/source/physxextensions/src",
      "src/PhysX/physx/source/physxextensions/src/serialization/Binary",
      "src/PhysX/physx/source/physxextensions/src/serialization/File",
      "src/PhysX/physx/source/physxextensions/src/serialization/Xml",
      "src/PhysX/physx/source/physxmetadata/core/include",
      "src/PhysX/physx/source/physxmetadata/extensions/include",
      "src/PhysX/physx/source/physxvehicle/src",
      "src/PhysX/physx/source/physxvehicle/src/physxmetadata/include",
      "src/PhysX/physx/source/pvd/include",
      "src/PhysX/physx/source/scenequery/include",
      "src/PhysX/physx/source/simulationcontroller/include",
      "src/PhysX/physx/source/simulationcontroller/src",
      "src/PhysX/physx/include",
      "src/PhysX/physx/include/characterkinematic",
      "src/PhysX/physx/include/common",
      "src/PhysX/physx/include/cooking",
      "src/PhysX/physx/include/extensions",
      "src/PhysX/physx/include/geometry",
      "src/PhysX/physx/include/geomutils",
      "src/PhysX/physx/include/vehicle",
      "src/PhysX/pxshared/include",
      "src/PhysX/physx/include/cudamanager",
      "src/PhysX/physx/source/physxgpu/include"
      ]
      
  
  try:
      import numpy
      NP_DIRS = [numpy.get_include()]
  except:
  	  print("numpy is disabled. getCameraImage maybe slower.")
  else:
  	  print("numpy is enabled.")
  	  CXX_FLAGS += '-DPYBULLET_USE_NUMPY '
  	  for d in NP_DIRS:
  	    print("numpy_include_dirs = %s" % d)
  	  include_dirs += NP_DIRS
  
  sources = ["examples/pybullet/pybullet.c"]\
  +["src/PhysXLowLevelAll.cpp"]\
  +["src/PhysXExtensionAll.cpp"]\
  +["src/PhysX/physx/source/physxextensions/src/ExtDefaultCpuDispatcher.cpp"]\
  +["src/PhysX/physx/source/lowlevel/common/src/pipeline/PxcContactMethodImpl.cpp"]\
  +["src/PhysX/physx/source/lowlevel/common/src/collision/PxcContact.cpp"]\
  +["examples/SharedMemory/physx/PhysXC_API.cpp"]\
  +["examples/SharedMemory/physx/PhysXServerCommandProcessor.cpp"]\
  +["examples/SharedMemory/physx/PhysXUrdfImporter.cpp"]\
  +["examples/SharedMemory/physx/URDF2PhysX.cpp"]\
  +["src/btLinearMathAll.cpp"]\
  +["src/PhysXGeomUtilsAll.cpp"]\
  +["examples/SharedMemory/plugins/eglPlugin/eglRendererVisualShapeConverter.cpp"]\
  +["examples/SharedMemory/plugins/eglPlugin/eglRendererPlugin.cpp"]\
  +["src/PhysX/physx/source/geomutils/src/contact/GuFeatureCode.cpp"]\
  +["src/PhysX/physx/source/geomutils/src/GuSweepMTD.cpp"]\
  +["src/PhysX/physx/source/geomutils/src/GuSweepSharedTests.cpp"]\
  +["src/PhysX/physx/source/geomutils/src/GuSweepTests.cpp"]\
  +["src/PhysX/physx/source/geomutils/src/contact/GuContactBoxBox.cpp"]\
  +["src/PhysX/physx/source/geomutils/src/contact/GuContactCapsuleBox.cpp"]\
  +["src/PhysX/physx/source/geomutils/src/contact/GuContactCapsuleCapsule.cpp"]\
  +["src/PhysX/physx/source/geomutils/src/contact/GuContactCapsuleConvex.cpp"]\
  +["src/PhysX/physx/source/geomutils/src/contact/GuContactCapsuleMesh.cpp"]\
  +["src/PhysX/physx/source/geomutils/src/contact/GuContactConvexConvex.cpp"]\
  +["src/PhysX/physx/source/geomutils/src/contact/GuContactConvexMesh.cpp"]\
  +["src/PhysX/physx/source/geomutils/src/contact/GuContactPlaneBox.cpp"]\
  +["src/PhysX/physx/source/geomutils/src/contact/GuContactPlaneCapsule.cpp"]\
  +["src/PhysX/physx/source/geomutils/src/contact/GuContactPlaneConvex.cpp"]\
  +["src/PhysX/physx/source/geomutils/src/contact/GuContactPolygonPolygon.cpp"]\
  +["src/PhysX/physx/source/geomutils/src/contact/GuContactSphereBox.cpp"]\
  +["src/PhysX/physx/source/geomutils/src/contact/GuContactSphereCapsule.cpp"]\
  +["src/PhysX/physx/source/geomutils/src/contact/GuContactSphereMesh.cpp"]\
  +["src/PhysX/physx/source/geomutils/src/contact/GuContactSpherePlane.cpp"]\
  +["src/PhysX/physx/source/geomutils/src/contact/GuContactSphereSphere.cpp"]\
  +["src/PhysX/physx/source/geomutils/src/mesh/GuBV4_BoxOverlap.cpp"]\
  +["src/PhysX/physx/source/geomutils/src/mesh/GuBV4_CapsuleSweep.cpp"]\
  +["src/PhysX/physx/source/geomutils/src/mesh/GuBV4_CapsuleSweepAA.cpp"]\
  +["src/PhysX/physx/source/geomutils/src/mesh/GuBV4_OBBSweep.cpp"]\
  +["src/PhysX/physx/source/geomutils/src/mesh/GuBV4_Raycast.cpp"]\
  +["src/PhysX/physx/source/geomutils/src/mesh/GuBV4_SphereOverlap.cpp"]\
  +["src/PhysX/physx/source/geomutils/src/mesh/GuBV4_SphereSweep.cpp"]\
  +["src/PhysX/physx/source/geomutils/src/mesh/GuMeshQuery.cpp"]\
  +["src/PhysX/physx/source/geomutils/src/hf/GuHeightField.cpp"]\
  +["src/PhysX/physx/source/geomutils/src/hf/GuHeightFieldUtil.cpp"]\
  +["src/PhysX/physx/source/geomutils/src/mesh/GuBV4.cpp"]\
  +["src/PhysX/physx/source/geomutils/src/mesh/GuBV4Build.cpp"]\
  +["src/PhysX/physx/source/geomutils/src/mesh/GuBV4_AABBSweep.cpp"]\
  +["src/PhysX/physx/source/geomutils/src/mesh/GuMidphaseBV4.cpp"]\
  +["src/PhysX/physx/source/geomutils/src/mesh/GuMidphaseRTree.cpp"]\
  +["src/PhysX/physx/source/geomutils/src/sweep/GuSweepBoxBox.cpp"]\
  +["src/PhysX/physx/source/geomutils/src/sweep/GuSweepBoxSphere.cpp"]\
  +["src/PhysX/physx/source/geomutils/src/sweep/GuSweepBoxTriangle_FeatureBased.cpp"]\
  +["src/PhysX/physx/source/geomutils/src/sweep/GuSweepBoxTriangle_SAT.cpp"]\
  +["src/PhysX/physx/source/geomutils/src/sweep/GuSweepCapsuleBox.cpp"]\
  +["src/PhysX/physx/source/geomutils/src/sweep/GuSweepCapsuleCapsule.cpp"]\
  +["src/PhysX/physx/source/geomutils/src/sweep/GuSweepCapsuleTriangle.cpp"]\
  +["src/PhysX/physx/source/geomutils/src/sweep/GuSweepSphereCapsule.cpp"]\
  +["src/PhysX/physx/source/geomutils/src/sweep/GuSweepSphereSphere.cpp"]\
  +["src/PhysX/physx/source/geomutils/src/sweep/GuSweepSphereTriangle.cpp"]\
  +["src/PhysX/physx/source/geomutils/src/sweep/GuSweepTriangleUtils.cpp"]\
  +["src/PhysX/physx/source/geomutils/src/pcm/GuPCMTriangleContactGen.cpp"]\
  +["src/PhysX/physx/source/geomutils/src/pcm/GuPersistentContactManifold.cpp"]\
  +["src/PhysX/physx/source/geomutils/src/mesh/GuBV32.cpp"]\
  +["src/PhysX/physx/source/geomutils/src/mesh/GuBV32Build.cpp"]\
  +["src/PhysX/physx/source/geomutils/src/mesh/GuOverlapTestsMesh.cpp"]\
  +["src/PhysX/physx/source/geomutils/src/mesh/GuRTree.cpp"]\
  +["src/PhysX/physx/source/geomutils/src/mesh/GuRTreeQueries.cpp"]\
  +["src/PhysX/physx/source/geomutils/src/mesh/GuSweepsMesh.cpp"]\
  +["src/PhysX/physx/source/geomutils/src/mesh/GuTriangleMesh.cpp"]\
  +["src/PhysX/physx/source/geomutils/src/mesh/GuTriangleMeshBV4.cpp"]\
  +["src/PhysX/physx/source/geomutils/src/mesh/GuTriangleMeshRTree.cpp"]\
  +["src/PhysX/physx/source/geomutils/src/pcm/GuPCMContactBoxBox.cpp"]\
  +["src/PhysX/physx/source/geomutils/src/pcm/GuPCMContactBoxConvex.cpp"]\
  +["src/PhysX/physx/source/fastxml/src/PsFastXml.cpp"]\
  +["src/PhysX/physx/source/immediatemode/src/NpImmediateMode.cpp"]\
  +["src/PhysX/physx/source/physxmetadata/core/src/PxAutoGeneratedMetaDataObjects.cpp"]\
  +["src/PhysX/physx/source/physxmetadata/core/src/PxMetaDataObjects.cpp"]\
  +["src/PhysX/physx/source/physxmetadata/extensions/src/PxExtensionAutoGeneratedMetaDataObjects.cpp"]\
  +["src/PhysX/physx/source/task/src/TaskManager.cpp"]\
  +["src/PhysXVehicleAll.cpp"]\
  +["src/PhysX/physx/source/pvd/src/PxPvdProfileZoneClient.cpp"]\
  +["src/PhysX/physx/source/pvd/src/PxPvdUserRenderer.cpp"]\
  +["src/PhysX/physx/source/pvd/src/PxPvdImpl.cpp"]\
  +["src/PhysX/physx/source/pvd/src/PxPvdMemClient.cpp"]\
  +["src/PhysX/physx/source/pvd/src/PxPvdObjectModelMetaData.cpp"]\
  +["src/PhysX/physx/source/pvd/src/PxPvdObjectRegistrar.cpp"]\
  +["src/PhysX/physx/source/pvd/src/PxProfileEventImpl.cpp"]\
  +["src/PhysX/physx/source/pvd/src/PxPvd.cpp"]\
  +["src/PhysX/physx/source/pvd/src/PxPvdDataStream.cpp"]\
  +["src/PhysX/physx/source/pvd/src/PxPvdDefaultFileTransport.cpp"]\
  +["src/PhysX/physx/source/pvd/src/PxPvdDefaultSocketTransport.cpp"]\
  +["src/PhysX/physx/source/physxcooking/src/convex/ConvexHullBuilder.cpp"]\
  +["src/PhysX/physx/source/physxcooking/src/convex/QuickHullConvexHullLib.cpp"]\
  +["src/PhysX/physx/source/physxcooking/src/mesh/TriangleMeshBuilder.cpp"]\
  +["src/PhysXCharacterAll.cpp"]\
  +["src/PhysXCommonAll.cpp"]\
  +["src/PhysXCookingAll.cpp"]\
  +["src/PhysX/physx/source/physxextensions/src/ExtDefaultErrorCallback.cpp"]\
  +["src/PhysX/physx/source/physxextensions/src/serialization/SnSerialization.cpp"]\
  +["src/PhysX/physx/source/physxextensions/src/serialization/Binary/SnConvX.cpp"]\
  +["src/PhysX/physx/source/physxextensions/src/serialization/Binary/SnConvX_Align.cpp"]\
  +["src/PhysX/physx/source/physxextensions/src/serialization/Binary/SnConvX_Convert.cpp"]\
  +["src/PhysX/physx/source/physxextensions/src/serialization/Binary/SnConvX_Error.cpp"]\
  +["src/PhysX/physx/source/physxextensions/src/serialization/Binary/SnConvX_MetaData.cpp"]\
  +["src/PhysX/physx/source/physxextensions/src/serialization/Binary/SnConvX_Output.cpp"]\
  +["src/PhysX/physx/source/physxextensions/src/serialization/Binary/SnConvX_Union.cpp"]\
  +["src/PhysX/physx/source/physxextensions/src/serialization/Binary/SnSerializationContext.cpp"]\
  +["src/PhysX/physx/source/physxextensions/src/serialization/Xml/SnRepXUpgrader.cpp"]\
  +["src/PhysX/physx/source/physxextensions/src/serialization/Xml/SnXmlSerialization.cpp"]\
  +["src/PhysXFoundationAll.cpp"]\
  +["src/PhysXNpSrcAll.cpp"]\
  +["src/PhysXSceneQueryAll.cpp"]\
  +["src/PhysXSimulationControllerAll.cpp"]\
  +["src/PhysX/physx/source/simulationcontroller/src/ScShapeSim.cpp"]\
  +["src/PhysX/physx/source/lowleveldynamics/src/DyTGSContactPrep.cpp"]\
  +["src/PhysX/physx/source/lowleveldynamics/src/DyTGSContactPrepBlock.cpp"]\
  +["src/PhysX/physx/source/lowleveldynamics/src/DyTGSDynamics.cpp"]\
  +["src/PhysX/physx/source/lowlevelaabb/src/BpAABBManager.cpp"]\
  +["src/PhysX/physx/source/lowlevelaabb/src/BpBroadPhase.cpp"]\
  +["src/PhysX/physx/source/lowlevelaabb/src/BpBroadPhaseABP.cpp"]\
  +["src/PhysX/physx/source/lowlevelaabb/src/BpBroadPhaseMBP.cpp"]\
  +["src/PhysX/physx/source/lowlevelaabb/src/BpBroadPhaseSap.cpp"]\
  +["src/PhysX/physx/source/lowlevelaabb/src/BpBroadPhaseSapAux.cpp"]\
  +["src/PhysX/physx/source/lowlevelaabb/src/BpBroadPhaseShared.cpp"]\
  +["src/PhysX/physx/source/lowlevelaabb/src/BpMBPTasks.cpp"]\
  +["src/PhysX/physx/source/lowlevelaabb/src/BpSAPTasks.cpp"]\
  +["src/btBulletCollisionAll.cpp"]\
  +["src/btBulletDynamicsAll.cpp"]\
  +["examples/ExampleBrowser/InProcessExampleBrowser.cpp"]\
  +["examples/TinyRenderer/geometry.cpp"]\
  +["examples/TinyRenderer/model.cpp"]\
  +["examples/TinyRenderer/tgaimage.cpp"]\
  +["examples/TinyRenderer/our_gl.cpp"]\
  +["examples/TinyRenderer/TinyRenderer.cpp"]\
  +["examples/SharedMemory/plugins/pdControlPlugin/pdControlPlugin.cpp"]\
  +["examples/SharedMemory/plugins/collisionFilterPlugin/collisionFilterPlugin.cpp"]\
  +["examples/SharedMemory/plugins/fileIOPlugin/fileIOPlugin.cpp"]\
  +["examples/SharedMemory/b3RobotSimulatorClientAPI_NoDirect.cpp"]\
  +["examples/SharedMemory/IKTrajectoryHelper.cpp"]\
  +["examples/SharedMemory/InProcessMemory.cpp"]\
  +["examples/SharedMemory/PhysicsClient.cpp"]\
  +["examples/SharedMemory/PhysicsServer.cpp"]\
  +["examples/SharedMemory/PhysicsServerExample.cpp"]\
  +["examples/SharedMemory/PhysicsServerExampleBullet2.cpp"]\
  +["examples/SharedMemory/SharedMemoryInProcessPhysicsC_API.cpp"]\
  +["examples/SharedMemory/PhysicsServerSharedMemory.cpp"]\
  +["examples/SharedMemory/PhysicsDirect.cpp"]\
  +["examples/SharedMemory/PhysicsDirectC_API.cpp"]\
  +["examples/SharedMemory/PhysicsServerCommandProcessor.cpp"]\
  +["examples/SharedMemory/PhysicsClientSharedMemory.cpp"]\
  +["examples/SharedMemory/PhysicsClientSharedMemory_C_API.cpp"]\
  +["examples/SharedMemory/PhysicsClientC_API.cpp"]\
  +["examples/SharedMemory/Win32SharedMemory.cpp"]\
  +["examples/SharedMemory/PosixSharedMemory.cpp"]\
  +["examples/SharedMemory/plugins/tinyRendererPlugin/TinyRendererVisualShapeConverter.cpp"]\
  +["examples/SharedMemory/plugins/tinyRendererPlugin/tinyRendererPlugin.cpp"]\
  +["examples/SharedMemory/plugins/stablePDPlugin/BulletConversion.cpp"]\
  +["examples/SharedMemory/plugins/stablePDPlugin/KinTree.cpp"]\
  +["examples/SharedMemory/plugins/stablePDPlugin/MathUtil.cpp"]\
  +["examples/SharedMemory/plugins/stablePDPlugin/RBDModel.cpp"]\
  +["examples/SharedMemory/plugins/stablePDPlugin/RBDUtil.cpp"]\
  +["examples/SharedMemory/plugins/stablePDPlugin/Shape.cpp"]\
  +["examples/SharedMemory/plugins/stablePDPlugin/SpAlg.cpp"]\
  +["examples/SharedMemory/PhysicsClientUDP.cpp"]\
  +["examples/SharedMemory/PhysicsClientUDP_C_API.cpp"]\
  +["examples/SharedMemory/PhysicsClientTCP.cpp"]\
  +["examples/SharedMemory/PhysicsClientTCP_C_API.cpp"]\
  +["examples/SharedMemory/b3PluginManager.cpp"]\
  +["examples/Utils/b3ResourcePath.cpp"]\
  +["examples/Utils/RobotLoggingUtil.cpp"]\
  +["examples/Utils/ChromeTraceUtil.cpp"]\
  +["examples/Utils/b3Clock.cpp"]\
  +["examples/Utils/b3Quickprof.cpp"]\
  +["examples/ThirdPartyLibs/tinyxml2/tinyxml2.cpp"]\
  +["examples/ThirdPartyLibs/Wavefront/tiny_obj_loader.cpp"]\
  +["examples/ThirdPartyLibs/stb_image/stb_image.cpp"]\
  +["examples/ThirdPartyLibs/stb_image/stb_image_write.cpp"]\
  +["examples/ThirdPartyLibs/minizip/ioapi.c"]\
  +["examples/ThirdPartyLibs/minizip/unzip.c"]\
  +["examples/ThirdPartyLibs/minizip/zip.c"]\
  +["examples/ThirdPartyLibs/zlib/adler32.c"]\
  +["examples/ThirdPartyLibs/zlib/compress.c"]\
  +["examples/ThirdPartyLibs/zlib/crc32.c"]\
  +["examples/ThirdPartyLibs/zlib/deflate.c"]\
  +["examples/ThirdPartyLibs/zlib/gzclose.c"]\
  +["examples/ThirdPartyLibs/zlib/gzlib.c"]\
  +["examples/ThirdPartyLibs/zlib/gzread.c"]\
  +["examples/ThirdPartyLibs/zlib/gzwrite.c"]\
  +["examples/ThirdPartyLibs/zlib/infback.c"]\
  +["examples/ThirdPartyLibs/zlib/inffast.c"]\
  +["examples/ThirdPartyLibs/zlib/inflate.c"]\
  +["examples/ThirdPartyLibs/zlib/inftrees.c"]\
  +["examples/ThirdPartyLibs/zlib/trees.c"]\
  +["examples/ThirdPartyLibs/zlib/uncompr.c"]\
  +["examples/ThirdPartyLibs/zlib/zutil.c"]\
  +["examples/Importers/ImportColladaDemo/LoadMeshFromCollada.cpp"]\
  +["examples/Importers/ImportObjDemo/LoadMeshFromObj.cpp"]\
  +["examples/Importers/ImportObjDemo/Wavefront2GLInstanceGraphicsShape.cpp"]\
  +["examples/Importers/ImportMJCFDemo/BulletMJCFImporter.cpp"]\
  +["examples/Importers/ImportURDFDemo/BulletUrdfImporter.cpp"]\
  +["examples/Importers/ImportURDFDemo/MyMultiBodyCreator.cpp"]\
  +["examples/Importers/ImportURDFDemo/URDF2Bullet.cpp"]\
  +["examples/Importers/ImportURDFDemo/UrdfParser.cpp"]\
  +["examples/Importers/ImportURDFDemo/urdfStringSplit.cpp"]\
  +["examples/Importers/ImportMeshUtility/b3ImportMeshUtility.cpp"]\
  +["examples/MultiThreading/b3PosixThreadSupport.cpp"]\
  +["examples/MultiThreading/b3Win32ThreadSupport.cpp"]\
  +["examples/MultiThreading/b3ThreadSupportInterface.cpp"]\
  +["examples/ThirdPartyLibs/enet/callbacks.c"]\
  +["examples/ThirdPartyLibs/enet/compress.c"]\
  +["examples/ThirdPartyLibs/enet/host.c"]\
  +["examples/ThirdPartyLibs/enet/list.c"]\
  +["examples/ThirdPartyLibs/enet/packet.c"]\
  +["examples/ThirdPartyLibs/enet/peer.c"]\
  +["examples/ThirdPartyLibs/enet/protocol.c"]\
  +["examples/ExampleBrowser/OpenGLGuiHelper.cpp"]\
  +["examples/ExampleBrowser/OpenGLExampleBrowser.cpp"]\
  +["examples/ExampleBrowser/CollisionShape2TriangleMesh.cpp"]\
  +["examples/ExampleBrowser/GL_ShapeDrawer.cpp"]\
  +["examples/OpenGLWindow/SimpleOpenGL2Renderer.cpp"]\
  +["examples/OpenGLWindow/GLInstancingRenderer.cpp"]\
  +["examples/OpenGLWindow/SimpleOpenGL3App.cpp"]\
  +["examples/OpenGLWindow/GLPrimitiveRenderer.cpp"]\
  +["examples/OpenGLWindow/TwFonts.cpp"]\
  +["examples/OpenGLWindow/GLRenderToTexture.cpp"]\
  +["examples/OpenGLWindow/LoadShader.cpp"]\
  +["examples/OpenGLWindow/OpenSans.cpp"]\
  +["examples/OpenGLWindow/SimpleCamera.cpp"]\
  +["examples/OpenGLWindow/fontstash.cpp"]\
  +["examples/OpenGLWindow/SimpleOpenGL2App.cpp"]\
  +["examples/OpenGLWindow/opengl_fontstashcallbacks.cpp"]\
  +["examples/ExampleBrowser/GwenGUISupport/GraphingTexture.cpp"]\
  +["examples/ExampleBrowser/GwenGUISupport/GwenProfileWindow.cpp"]\
  +["examples/ExampleBrowser/GwenGUISupport/gwenUserInterface.cpp"]\
  +["examples/ExampleBrowser/GwenGUISupport/GwenParameterInterface.cpp"]\
  +["examples/ExampleBrowser/GwenGUISupport/GwenTextureWindow.cpp"]\
  +["src/Bullet3Common/b3AlignedAllocator.cpp"]\
  +["src/Bullet3Common/b3Logging.cpp"]\
  +["src/Bullet3Common/b3Vector3.cpp"]\
  +["examples/ThirdPartyLibs/clsocket/src/ActiveSocket.cpp"]\
  +["examples/ThirdPartyLibs/clsocket/src/PassiveSocket.cpp"]\
  +["examples/ThirdPartyLibs/clsocket/src/SimpleSocket.cpp"]\
  +["Extras/Serialize/BulletFileLoader/bChunk.cpp"]\
  +["Extras/Serialize/BulletFileLoader/bDNA.cpp"]\
  +["Extras/Serialize/BulletFileLoader/bFile.cpp"]\
  +["Extras/Serialize/BulletFileLoader/btBulletFile.cpp"]\
  +["Extras/Serialize/BulletWorldImporter/btMultiBodyWorldImporter.cpp"]\
  +["Extras/Serialize/BulletWorldImporter/btBulletWorldImporter.cpp"]\
  +["Extras/Serialize/BulletWorldImporter/btWorldImporter.cpp"]\
  +["Extras/InverseDynamics/CloneTreeCreator.cpp"]\
  +["Extras/InverseDynamics/IDRandomUtil.cpp"]\
  +["Extras/InverseDynamics/MultiBodyTreeDebugGraph.cpp"]\
  +["Extras/InverseDynamics/User2InternalIndex.cpp"]\
  +["Extras/InverseDynamics/CoilCreator.cpp"]\
  +["Extras/InverseDynamics/MultiBodyNameMap.cpp"]\
  +["Extras/InverseDynamics/RandomTreeCreator.cpp"]\
  +["Extras/InverseDynamics/btMultiBodyTreeCreator.cpp"]\
  +["Extras/InverseDynamics/DillCreator.cpp"]\
  +["Extras/InverseDynamics/MultiBodyTreeCreator.cpp"]\
  +["Extras/InverseDynamics/SimpleTreeCreator.cpp"]\
  +["Extras/InverseDynamics/invdyn_bullet_comparison.cpp"]\
  +["src/BulletSoftBody/btDefaultSoftBodySolver.cpp"]\
  +["src/BulletSoftBody/btSoftBodyHelpers.cpp"]\
  +["src/BulletSoftBody/btSoftRigidCollisionAlgorithm.cpp"]\
  +["src/BulletSoftBody/btSoftBody.cpp"]\
  +["src/BulletSoftBody/btSoftBodyRigidBodyCollisionConfiguration.cpp"]\
  +["src/BulletSoftBody/btSoftRigidDynamicsWorld.cpp"]\
  +["src/BulletSoftBody/btSoftBodyConcaveCollisionAlgorithm.cpp"]\
  +["src/BulletSoftBody/btSoftMultiBodyDynamicsWorld.cpp"]\
  +["src/BulletSoftBody/btSoftSoftCollisionAlgorithm.cpp"]\
  +["src/BulletInverseDynamics/IDMath.cpp"]\
  +["src/BulletInverseDynamics/MultiBodyTree.cpp"]\
  +["src/BulletInverseDynamics/details/MultiBodyTreeImpl.cpp"]\
  +["src/BulletInverseDynamics/details/MultiBodyTreeInitCache.cpp"]\
  +["examples/ThirdPartyLibs/BussIK/Jacobian.cpp"]\
  +["examples/ThirdPartyLibs/BussIK/LinearR2.cpp"]\
  +["examples/ThirdPartyLibs/BussIK/LinearR3.cpp"]\
  +["examples/ThirdPartyLibs/BussIK/LinearR4.cpp"]\
  +["examples/ThirdPartyLibs/BussIK/MatrixRmn.cpp"]\
  +["examples/ThirdPartyLibs/BussIK/Misc.cpp"]\
  +["examples/ThirdPartyLibs/BussIK/Node.cpp"]\
  +["examples/ThirdPartyLibs/BussIK/Tree.cpp"]\
  +["examples/ThirdPartyLibs/BussIK/VectorRn.cpp"]\
  +["examples/ThirdPartyLibs/Gwen/Anim.cpp"]\
  +["examples/ThirdPartyLibs/Gwen/DragAndDrop.cpp"]\
  +["examples/ThirdPartyLibs/Gwen/Hook.cpp"]\
  +["examples/ThirdPartyLibs/Gwen/ToolTip.cpp"]\
  +["examples/ThirdPartyLibs/Gwen/events.cpp"]\
  +["examples/ThirdPartyLibs/Gwen/BaseRender.cpp"]\
  +["examples/ThirdPartyLibs/Gwen/Gwen.cpp"]\
  +["examples/ThirdPartyLibs/Gwen/Skin.cpp"]\
  +["examples/ThirdPartyLibs/Gwen/Utility.cpp"]\
  +["examples/ThirdPartyLibs/Gwen/inputhandler.cpp"]\
  +["examples/ThirdPartyLibs/Gwen/Controls/Base.cpp"]\
  +["examples/ThirdPartyLibs/Gwen/Controls/Button.cpp"]\
  +["examples/ThirdPartyLibs/Gwen/Controls/Canvas.cpp"]\
  +["examples/ThirdPartyLibs/Gwen/Controls/CheckBox.cpp"]\
  +["examples/ThirdPartyLibs/Gwen/Controls/ColorControls.cpp"]\
  +["examples/ThirdPartyLibs/Gwen/Controls/ColorPicker.cpp"]\
  +["examples/ThirdPartyLibs/Gwen/Controls/ComboBox.cpp"]\
  +["examples/ThirdPartyLibs/Gwen/Controls/CrossSplitter.cpp"]\
  +["examples/ThirdPartyLibs/Gwen/Controls/DockBase.cpp"]\
  +["examples/ThirdPartyLibs/Gwen/Controls/DockedTabControl.cpp"]\
  +["examples/ThirdPartyLibs/Gwen/Controls/Dragger.cpp"]\
  +["examples/ThirdPartyLibs/Gwen/Controls/GroupBox.cpp"]\
  +["examples/ThirdPartyLibs/Gwen/Controls/HSVColorPicker.cpp"]\
  +["examples/ThirdPartyLibs/Gwen/Controls/HorizontalScrollBar.cpp"]\
  +["examples/ThirdPartyLibs/Gwen/Controls/ImagePanel.cpp"]\
  +["examples/ThirdPartyLibs/Gwen/Controls/HorizontalSlider.cpp"]\
  +["examples/ThirdPartyLibs/Gwen/Controls/Label.cpp"]\
  +["examples/ThirdPartyLibs/Gwen/Controls/LabelClickable.cpp"]\
  +["examples/ThirdPartyLibs/Gwen/Controls/ListBox.cpp"]\
  +["examples/ThirdPartyLibs/Gwen/Controls/MenuItem.cpp"]\
  +["examples/ThirdPartyLibs/Gwen/Controls/Menu.cpp"]\
  +["examples/ThirdPartyLibs/Gwen/Controls/MenuStrip.cpp"]\
  +["examples/ThirdPartyLibs/Gwen/Controls/NumericUpDown.cpp"]\
  +["examples/ThirdPartyLibs/Gwen/Controls/PanelListPanel.cpp"]\
  +["examples/ThirdPartyLibs/Gwen/Controls/ProgressBar.cpp"]\
  +["examples/ThirdPartyLibs/Gwen/Controls/Properties.cpp"]\
  +["examples/ThirdPartyLibs/Gwen/Controls/RadioButton.cpp"]\
  +["examples/ThirdPartyLibs/Gwen/Controls/RadioButtonController.cpp"]\
  +["examples/ThirdPartyLibs/Gwen/Controls/ResizableControl.cpp"]\
  +["examples/ThirdPartyLibs/Gwen/Controls/Resizer.cpp"]\
  +["examples/ThirdPartyLibs/Gwen/Controls/RichLabel.cpp"]\
  +["examples/ThirdPartyLibs/Gwen/Controls/ScrollBar.cpp"]\
  +["examples/ThirdPartyLibs/Gwen/Controls/ScrollBarBar.cpp"]\
  +["examples/ThirdPartyLibs/Gwen/Controls/ScrollBarButton.cpp"]\
  +["examples/ThirdPartyLibs/Gwen/Controls/ScrollControl.cpp"]\
  +["examples/ThirdPartyLibs/Gwen/Controls/Slider.cpp"]\
  +["examples/ThirdPartyLibs/Gwen/Controls/SplitterBar.cpp"]\
  +["examples/ThirdPartyLibs/Gwen/Controls/TabButton.cpp"]\
  +["examples/ThirdPartyLibs/Gwen/Controls/TabControl.cpp"]\
  +["examples/ThirdPartyLibs/Gwen/Controls/TabStrip.cpp"]\
  +["examples/ThirdPartyLibs/Gwen/Controls/Text.cpp"]\
  +["examples/ThirdPartyLibs/Gwen/Controls/TextBox.cpp"]\
  +["examples/ThirdPartyLibs/Gwen/Controls/TextBoxNumeric.cpp"]\
  +["examples/ThirdPartyLibs/Gwen/Controls/TreeControl.cpp"]\
  +["examples/ThirdPartyLibs/Gwen/Controls/TreeNode.cpp"]\
  +["examples/ThirdPartyLibs/Gwen/Controls/VerticalScrollBar.cpp"]\
  +["examples/ThirdPartyLibs/Gwen/Controls/VerticalSlider.cpp"]\
  +["examples/ThirdPartyLibs/Gwen/Controls/WindowControl.cpp"]\
  +["examples/ThirdPartyLibs/Gwen/Controls/Dialog/FileOpen.cpp"]\
  +["examples/ThirdPartyLibs/Gwen/Controls/Dialog/FileSave.cpp"]\
  +["examples/ThirdPartyLibs/Gwen/Controls/Dialog/Query.cpp"]\
  +["examples/ThirdPartyLibs/Gwen/Platforms/Null.cpp"]\
  +["examples/ThirdPartyLibs/Gwen/Platforms/Windows.cpp"]\
  +["examples/ThirdPartyLibs/Gwen/Renderers/OpenGL_DebugFont.cpp"]
  
  
  
  egl_renderer_sources = ["examples/SharedMemory/plugins/eglPlugin/eglRendererVisualShapeConverter.cpp"]\
  +["examples/SharedMemory/plugins/eglPlugin/eglRendererPlugin.cpp"]\
  +["examples/Importers/ImportColladaDemo/LoadMeshFromCollada.cpp"]\
  +["examples/Importers/ImportObjDemo/LoadMeshFromObj.cpp"]\
  +["examples/Importers/ImportMeshUtility/b3ImportMeshUtility.cpp"]\
  +["examples/Importers/ImportObjDemo/Wavefront2GLInstanceGraphicsShape.cpp"]\
  +["examples/TinyRenderer/geometry.cpp"]\
  +["examples/TinyRenderer/model.cpp"]\
  +["examples/TinyRenderer/tgaimage.cpp"]\
  +["examples/TinyRenderer/our_gl.cpp"]\
  +["examples/TinyRenderer/TinyRenderer.cpp"]\
  +["examples/ThirdPartyLibs/Wavefront/tiny_obj_loader.cpp"]\
  +["examples/ThirdPartyLibs/stb_image/stb_image.cpp"]\
  +["examples/ThirdPartyLibs/stb_image/stb_image_write.cpp"]\
  +["examples/ThirdPartyLibs/tinyxml2/tinyxml2.cpp"]\
  +["examples/OpenGLWindow/SimpleCamera.cpp"]\
  +["examples/Utils/b3Clock.cpp"]\
  +["examples/Utils/b3ResourcePath.cpp"]\
  +["src/BulletCollision/CollisionShapes/btShapeHull.cpp"]\
  +["src/BulletCollision/CollisionShapes/btConvexHullShape.cpp"]\
  +["src/BulletCollision/CollisionShapes/btBoxShape.cpp"]\
  +["src/BulletCollision/CollisionShapes/btSphereShape.cpp"]\
  +["src/BulletCollision/CollisionShapes/btPolyhedralConvexShape.cpp"]\
  +["src/BulletCollision/CollisionShapes/btConvexShape.cpp"]\
  +["src/BulletCollision/CollisionShapes/btCollisionShape.cpp"]\
  +["src/BulletCollision/CollisionShapes/btConvexPolyhedron.cpp"]\
  +["src/BulletCollision/CollisionShapes/btConvexInternalShape.cpp"]\
  +["src/Bullet3Common/b3Logging.cpp"]\
  +["src/LinearMath/btAlignedAllocator.cpp"]\
  +["src/LinearMath/btConvexHull.cpp"]\
  +["src/LinearMath/btConvexHullComputer.cpp"] \
  +["src/LinearMath/btGeometryUtil.cpp"]\
  +["src/LinearMath/btQuickprof.cpp"] \
  +["src/LinearMath/btThreads.cpp"] \
  +["src/Bullet3Common/b3AlignedAllocator.cpp"] \
  +["examples/ThirdPartyLibs/glad/gl.c"]\
  +["examples/OpenGLWindow/GLInstancingRenderer.cpp"]\
  +["examples/OpenGLWindow/GLRenderToTexture.cpp"] \
  +["examples/OpenGLWindow/LoadShader.cpp"]
  
  # if 'BT_USE_EGL' in CXX_FLAGS:
      # sources += ['examples/ThirdPartyLibs/glad/egl.c']
      # sources += ['examples/OpenGLWindow/EGLOpenGLWindow.cpp']
      # include_dirs += ["examples/ThirdPartyLibs/optionalX11"]
  
  if _platform == "linux" or _platform == "linux2":
      libraries = ['dl','pthread']
      CXX_FLAGS += '-D_LINUX '
      CXX_FLAGS += '-DGLEW_STATIC '
      CXX_FLAGS += '-DGLEW_INIT_OPENGL11_FUNCTIONS=1 '
      CXX_FLAGS += '-DGLEW_DYNAMIC_LOAD_ALL_GLX_FUNCTIONS=1 '
      CXX_FLAGS += '-DDYNAMIC_LOAD_X11_FUNCTIONS '
      CXX_FLAGS += '-DHAS_SOCKLEN_T '
      CXX_FLAGS += '-fno-inline-functions-called-once '
      EGL_CXX_FLAGS += '-DBT_USE_EGL '
      EGL_CXX_FLAGS += '-fPIC ' # for plugins
  
      sources = sources + ["examples/ThirdPartyLibs/enet/unix.c"]\
      +["examples/OpenGLWindow/X11OpenGLWindow.cpp"]\
      +["examples/ThirdPartyLibs/glad/gl.c"]\
      +["src/PhysXFoundationUnix.cpp"]\
      +["examples/ThirdPartyLibs/glad/glx.c"]\
      +["src/PhysX/physx/source/physx/src/device/linux/PhysXIndicatorLinux.cpp"] 
      include_dirs += ["examples/ThirdPartyLibs/optionalX11"]
  
      if 'BT_USE_EGL' in EGL_CXX_FLAGS:
          egl_renderer_sources = egl_renderer_sources\
          +["examples/OpenGLWindow/EGLOpenGLWindow.cpp"]\
          +['examples/ThirdPartyLibs/glad/egl.c']
      else:
          egl_renderer_sources = egl_renderer_sources\
          +["examples/OpenGLWindow/X11OpenGLWindow.cpp"]\
          +["examples/ThirdPartyLibs/glad/glx.c"]
  
  
  elif _platform == "win32":
      print("win32!")
      libraries = ['Ws2_32','Winmm','User32','Opengl32','kernel32','glu32','Gdi32','Comdlg32']
      CXX_FLAGS += '-DWIN32 '
      CXX_FLAGS += '-DGLEW_STATIC '
      sources = sources + ["examples/ThirdPartyLibs/enet/win32.c"]\
      +["examples/OpenGLWindow/Win32Window.cpp"]\
      +["examples/OpenGLWindow/Win32OpenGLWindow.cpp"]\
      +["examples/ThirdPartyLibs/glad/gl.c"]
      sources = sources +["src/PhysX/physx/source/physx/src/windows/NpWindowsDelayLoadHook.cpp"]\
      +["src/PhysXFoundationWindows.cpp"]\
      +["src/PhysX/physx/source/physx/src/device/windows/PhysXIndicatorWindows.cpp"]
  elif _platform == "darwin":
      print("darwin!")
      os.environ['LDFLAGS'] = '-framework Cocoa -stdlib=libc++ -framework OpenGL'
      CXX_FLAGS += '-DB3_NO_PYTHON_FRAMEWORK '
      CXX_FLAGS += '-DHAS_SOCKLEN_T '
      CXX_FLAGS += '-D_DARWIN '
  #    CXX_FLAGS += '-framework Cocoa '
      sources = sources + ["examples/ThirdPartyLibs/enet/unix.c"]\
      +["src/PhysXFoundationUnix.cpp"]\
      +["examples/OpenGLWindow/MacOpenGLWindow.cpp"]\
      +["examples/ThirdPartyLibs/glad/gl.c"]\
      +["examples/OpenGLWindow/MacOpenGLWindowObjC.m"]
      if 'BT_USE_EGL' in EGL_CXX_FLAGS:
          egl_renderer_sources = egl_renderer_sources\
          +["examples/OpenGLWindow/EGLOpenGLWindow.cpp"]\
          +['examples/ThirdPartyLibs/glad/egl.c']
  
          include_dirs += ["examples/ThirdPartyLibs/optionalX11"]
      else:
          egl_renderer_sources = egl_renderer_sources\
          +["examples/OpenGLWindow/X11OpenGLWindow.cpp"]\
          +["examples/ThirdPartyLibs/glad/glx.c"]
  
  else:
      print("bsd!")
      libraries = ['GL','GLEW','pthread']
      os.environ['LDFLAGS'] = '-L/usr/X11R6/lib'
      CXX_FLAGS += '-D_BSD '
      CXX_FLAGS += '-I/usr/X11R6/include '
      CXX_FLAGS += '-DHAS_SOCKLEN_T '
      CXX_FLAGS += '-fno-inline-functions-called-once'
      sources = ["examples/ThirdPartyLibs/enet/unix.c"]\
      +["src/PhysXFoundationUnix.cpp"]\
      +["examples/OpenGLWindow/X11OpenGLWindow.cpp"]\
      +["examples/ThirdPartyLibs/glad/gl.c"]\
      + sources
  
  setup_py_dir = os.path.dirname(os.path.realpath(__file__))
  
  need_files = []
  datadir = "examples/pybullet/gym/pybullet_data"
  
  hh = setup_py_dir + "/" + datadir
  
  for root, dirs, files in os.walk(hh):
      for fn in files:
          ext = os.path.splitext(fn)[1][1:]
          if ext and ext in 'yaml index meta data-00000-of-00001 png gif jpg urdf sdf obj txt mtl dae off stl STL xml '.split():
              fn = root + "/" + fn
              need_files.append(fn[1+len(hh):])
  
  print("found resource files: %i" % len(need_files))
  for n in need_files: print("-- %s" % n)
  print("packages")
  print(find_packages('examples/pybullet/gym'))
  print("-----")
  
  extensions = []
  
  pybullet_ext = Extension("pybullet",
          sources =  sources,
          libraries = libraries,
          extra_compile_args=CXX_FLAGS.split(),
          include_dirs = include_dirs + ["src","examples/ThirdPartyLibs","examples/ThirdPartyLibs/glad", "examples/ThirdPartyLibs/enet/include","examples/ThirdPartyLibs/clsocket/src"]
       )
  extensions.append(pybullet_ext)
  
  
  if 'BT_USE_EGL' in EGL_CXX_FLAGS:
  
  	eglRender = Extension("eglRenderer",
          	sources =  egl_renderer_sources,
          	libraries = libraries,
          	extra_compile_args=(CXX_FLAGS+EGL_CXX_FLAGS ).split(),
          	include_dirs = include_dirs + ["src","examples", "examples/ThirdPartyLibs","examples/ThirdPartyLibs/glad", "examples/ThirdPartyLibs/enet/include","examples/ThirdPartyLibs/clsocket/src"])
  
  	extensions.append(eglRender)
  
  
  setup(
  	name = 'pybullet',
  	version='2.4.3',
  	description='Official Python Interface for the Bullet Physics SDK specialized for Robotics Simulation and Reinforcement Learning',
  	long_description='pybullet is an easy to use Python module for physics simulation, robotics and deep reinforcement learning based on the Bullet Physics SDK. With pybullet you can load articulated bodies from URDF, SDF and other file formats. pybullet provides forward dynamics simulation, inverse dynamics computation, forward and inverse kinematics and collision detection and ray intersection queries. Aside from physics simulation, pybullet supports to rendering, with a CPU renderer and OpenGL visualization and support for virtual reality headsets.',
  	url='https://github.com/bulletphysics/bullet3',
  	author='Erwin Coumans, Yunfei Bai, Jasmine Hsu',
  	author_email='erwincoumans@google.com',
  	license='zlib',
  	platforms='any',
  	keywords=['game development', 'virtual reality', 'physics simulation', 'robotics', 'collision detection', 'opengl'],
  	ext_modules = extensions,
  	classifiers=['Development Status :: 5 - Production/Stable',
                     'License :: OSI Approved :: zlib/libpng License',
                     'Operating System :: Microsoft :: Windows',
                     'Operating System :: POSIX :: Linux',
                     'Operating System :: MacOS',
                     'Intended Audience :: Science/Research',
                     "Programming Language :: Python",
                     'Programming Language :: Python :: 2.7',
                     'Programming Language :: Python :: 3.4',
                     'Programming Language :: Python :: 3.5',
                     'Programming Language :: Python :: 3.6',
                     'Topic :: Games/Entertainment :: Simulation',
                     'Topic :: Scientific/Engineering :: Artificial Intelligence',
                     'Framework :: Robot Framework'],
      package_dir = { '': 'examples/pybullet/gym'},
      packages=[x for x in find_packages('examples/pybullet/gym')],
      package_data = { 'pybullet_data': need_files }
  )
  
  