PageRenderTime 56ms CodeModel.GetById 27ms RepoModel.GetById 0ms app.codeStats 1ms

/yt/utilities/lib/setup.py

https://bitbucket.org/mqk/yt
Python | 223 lines | 199 code | 4 blank | 20 comment | 25 complexity | 1dd4a1d2caac4227914504ccff455aeb MD5 | raw file
Possible License(s): GPL-3.0, LGPL-2.1, BSD-3-Clause, MPL-2.0-no-copyleft-exception, GPL-2.0
  1. #!/usr/bin/env python
  2. import setuptools
  3. import os, sys, os.path, glob
  4. def check_for_png():
  5. # First up: HDF5_DIR in environment
  6. if "PNG_DIR" in os.environ:
  7. png_dir = os.environ["PNG_DIR"]
  8. png_inc = os.path.join(png_dir, "include")
  9. png_lib = os.path.join(png_dir, "lib")
  10. print "PNG_LOCATION: PNG_DIR: %s, %s" % (png_inc, png_lib)
  11. return (png_inc, png_lib)
  12. # Next up, we try png.cfg
  13. elif os.path.exists("png.cfg"):
  14. png_dir = open("png.cfg").read().strip()
  15. png_inc = os.path.join(png_dir, "include")
  16. png_lib = os.path.join(png_dir, "lib")
  17. print "PNG_LOCATION: png.cfg: %s, %s" % (png_inc, png_lib)
  18. return (png_inc, png_lib)
  19. # Now we see if ctypes can help us:
  20. try:
  21. import ctypes.util
  22. png_libfile = ctypes.util.find_library("png")
  23. if png_libfile is not None and os.path.isfile(png_libfile):
  24. # Now we've gotten a library, but we'll need to figure out the
  25. # includes if this is going to work. It feels like there is a
  26. # better way to pull off two directory names.
  27. png_dir = os.path.dirname(os.path.dirname(png_libfile))
  28. if os.path.isdir(os.path.join(png_dir, "include")) and \
  29. os.path.isfile(os.path.join(png_dir, "include", "png.h")):
  30. png_inc = os.path.join(png_dir, "include")
  31. png_lib = os.path.join(png_dir, "lib")
  32. print "PNG_LOCATION: png found in: %s, %s" % (png_inc, png_lib)
  33. return png_inc, png_lib
  34. except ImportError:
  35. pass
  36. # X11 is where it's located by default on OSX, although I am slightly
  37. # reluctant to link against that one.
  38. for png_dir in ["/usr/", "/usr/local/", "/usr/X11/"]:
  39. if os.path.isfile(os.path.join(png_dir, "include", "png.h")):
  40. if os.path.isdir(os.path.join(png_dir, "include")) and \
  41. os.path.isfile(os.path.join(png_dir, "include", "png.h")):
  42. png_inc = os.path.join(png_dir, "include")
  43. png_lib = os.path.join(png_dir, "lib")
  44. print "PNG_LOCATION: png found in: %s, %s" % (png_inc, png_lib)
  45. return png_inc, png_lib
  46. print "Reading png location from png.cfg failed."
  47. print "Please place the base directory of your png install in png.cfg and restart."
  48. print "(ex: \"echo '/usr/local/' > png.cfg\" )"
  49. sys.exit(1)
  50. def check_for_freetype():
  51. # First up: environment
  52. if "FTYPE_DIR" in os.environ:
  53. freetype_dir = os.environ["FTYPE_DIR"]
  54. freetype_inc = os.path.join(freetype_dir, "include")
  55. freetype_lib = os.path.join(freetype_dir, "lib")
  56. print "FTYPE_LOCATION: FTYPE_DIR: %s, %s" % (freetype_inc, freetype_lib)
  57. return (freetype_inc, freetype_lib)
  58. # Next up, we try freetype.cfg
  59. elif os.path.exists("freetype.cfg"):
  60. freetype_dir = open("freetype.cfg").read().strip()
  61. freetype_inc = os.path.join(freetype_dir, "include")
  62. freetype_lib = os.path.join(freetype_dir, "lib")
  63. print "FTYPE_LOCATION: freetype.cfg: %s, %s" % (freetype_inc, freetype_lib)
  64. return (freetype_inc, freetype_lib)
  65. # Now we see if ctypes can help us:
  66. try:
  67. import ctypes.util
  68. freetype_libfile = ctypes.util.find_library("freetype")
  69. if freetype_libfile is not None and os.path.isfile(freetype_libfile):
  70. # Now we've gotten a library, but we'll need to figure out the
  71. # includes if this is going to work. It feels like there is a
  72. # better way to pull off two directory names.
  73. freetype_dir = os.path.dirname(os.path.dirname(freetype_libfile))
  74. if os.path.isdir(os.path.join(freetype_dir, "include")) and \
  75. os.path.isfile(os.path.join(freetype_dir, "include", "ft2build.h")):
  76. freetype_inc = os.path.join(freetype_dir, "include")
  77. freetype_lib = os.path.join(freetype_dir, "lib")
  78. print "FTYPE_LOCATION: freetype found in: %s, %s" % (freetype_inc, freetype_lib)
  79. return freetype_inc, freetype_lib
  80. except ImportError:
  81. pass
  82. # X11 is where it's located by default on OSX, although I am slightly
  83. # reluctant to link against that one.
  84. for freetype_dir in ["/usr/", "/usr/local/", "/usr/X11/"]:
  85. if os.path.isfile(os.path.join(freetype_dir, "include", "ft2build.h")):
  86. if os.path.isdir(os.path.join(freetype_dir, "include")) and \
  87. os.path.isfile(os.path.join(freetype_dir, "include", "ft2build.h")):
  88. freetype_inc = os.path.join(freetype_dir, "include")
  89. freetype_lib = os.path.join(freetype_dir, "lib")
  90. print "FTYPE_LOCATION: freetype found in: %s, %s" % (freetype_inc, freetype_lib)
  91. return freetype_inc, freetype_lib
  92. print "Reading freetype location from freetype.cfg failed."
  93. print "Please place the base directory of your freetype install in freetype.cfg and restart."
  94. print "(ex: \"echo '/usr/local/' > freetype.cfg\" )"
  95. print "You can locate this by looking for the file ft2build.h"
  96. sys.exit(1)
  97. def configuration(parent_package='',top_path=None):
  98. from numpy.distutils.misc_util import Configuration
  99. config = Configuration('lib',parent_package,top_path)
  100. png_inc, png_lib = check_for_png()
  101. freetype_inc, freetype_lib = check_for_freetype()
  102. # Because setjmp.h is included by lots of things, and because libpng hasn't
  103. # always properly checked its header files (see
  104. # https://bugzilla.redhat.com/show_bug.cgi?id=494579 ) we simply disable
  105. # support for setjmp.
  106. config.add_extension("CICDeposit",
  107. ["yt/utilities/lib/CICDeposit.pyx"],
  108. libraries=["m"], depends=["yt/utilities/lib/fp_utils.pxd"])
  109. config.add_extension("ContourFinding",
  110. ["yt/utilities/lib/ContourFinding.pyx",
  111. "yt/utilities/lib/union_find.c"],
  112. include_dirs=["yt/utilities/lib/"],
  113. libraries=["m"], depends=["yt/utilities/lib/fp_utils.pxd"])
  114. config.add_extension("DepthFirstOctree",
  115. ["yt/utilities/lib/DepthFirstOctree.pyx"],
  116. libraries=["m"], depends=["yt/utilities/lib/fp_utils.pxd"])
  117. config.add_extension("fortran_reader",
  118. ["yt/utilities/lib/fortran_reader.pyx"],
  119. include_dirs=["yt/utilities/lib/"],
  120. libraries=["m"], depends=["yt/utilities/lib/fp_utils.pxd"])
  121. config.add_extension("freetype_writer",
  122. ["yt/utilities/lib/freetype_writer.pyx"],
  123. include_dirs = [freetype_inc,os.path.join(freetype_inc, "freetype2"),
  124. "yt/utilities/lib"],
  125. library_dirs = [freetype_lib], libraries=["freetype"],
  126. depends=["yt/utilities/lib/freetype_includes.h"])
  127. config.add_extension("geometry_utils",
  128. ["yt/utilities/lib/geometry_utils.pyx"],
  129. extra_compile_args=['-fopenmp'],
  130. extra_link_args=['-fopenmp'],
  131. libraries=["m"], depends=["yt/utilities/lib/fp_utils.pxd"])
  132. config.add_extension("Interpolators",
  133. ["yt/utilities/lib/Interpolators.pyx"],
  134. libraries=["m"], depends=["yt/utilities/lib/fp_utils.pxd"])
  135. config.add_extension("marching_cubes",
  136. ["yt/utilities/lib/marching_cubes.pyx",
  137. "yt/utilities/lib/FixedInterpolator.c"],
  138. include_dirs=["yt/utilities/lib/"],
  139. libraries=["m"],
  140. depends=["yt/utilities/lib/fp_utils.pxd",
  141. "yt/utilities/lib/fixed_interpolator.pxd",
  142. "yt/utilities/lib/FixedInterpolator.h",
  143. ])
  144. config.add_extension("misc_utilities",
  145. ["yt/utilities/lib/misc_utilities.pyx"],
  146. libraries=["m"], depends=["yt/utilities/lib/fp_utils.pxd"])
  147. config.add_extension("Octree",
  148. ["yt/utilities/lib/Octree.pyx"],
  149. libraries=["m"], depends=["yt/utilities/lib/fp_utils.pxd"])
  150. config.add_extension("png_writer",
  151. ["yt/utilities/lib/png_writer.pyx"],
  152. define_macros=[("PNG_SETJMP_NOT_SUPPORTED", True)],
  153. include_dirs=[png_inc],
  154. library_dirs=[png_lib],
  155. libraries=["m", "png"],
  156. depends=["yt/utilities/lib/fp_utils.pxd"]),
  157. config.add_extension("PointsInVolume",
  158. ["yt/utilities/lib/PointsInVolume.pyx"],
  159. libraries=["m"], depends=["yt/utilities/lib/fp_utils.pxd"])
  160. config.add_extension("QuadTree",
  161. ["yt/utilities/lib/QuadTree.pyx"],
  162. libraries=["m"], depends=["yt/utilities/lib/fp_utils.pxd"])
  163. config.add_extension("RayIntegrators",
  164. ["yt/utilities/lib/RayIntegrators.pyx"],
  165. libraries=["m"], depends=["yt/utilities/lib/fp_utils.pxd"])
  166. config.add_extension("VolumeIntegrator",
  167. ["yt/utilities/lib/VolumeIntegrator.pyx",
  168. "yt/utilities/lib/FixedInterpolator.c",
  169. "yt/utilities/lib/kdtree.c"] +
  170. glob.glob("yt/utilities/lib/healpix_*.c"),
  171. include_dirs=["yt/utilities/lib/"],
  172. libraries=["m"],
  173. depends = ["yt/utilities/lib/VolumeIntegrator.pyx",
  174. "yt/utilities/lib/fp_utils.pxd",
  175. "yt/utilities/lib/healpix_interface.pxd",
  176. "yt/utilities/lib/endian_swap.h",
  177. "yt/utilities/lib/FixedInterpolator.h",
  178. "yt/utilities/lib/healpix_vectors.h",
  179. "yt/utilities/lib/kdtree.h",
  180. "yt/utilities/lib/healpix_ang2pix_nest.c",
  181. "yt/utilities/lib/healpix_mk_pix2xy.c",
  182. "yt/utilities/lib/healpix_mk_xy2pix.c",
  183. "yt/utilities/lib/healpix_pix2ang_nest.c",
  184. "yt/utilities/lib/healpix_pix2vec_nest.c",
  185. "yt/utilities/lib/healpix_vec2pix_nest.c"]
  186. )
  187. config.add_extension("grid_traversal",
  188. ["yt/utilities/lib/grid_traversal.pyx",
  189. "yt/utilities/lib/FixedInterpolator.c",
  190. "yt/utilities/lib/kdtree.c"] +
  191. glob.glob("yt/utilities/lib/healpix_*.c"),
  192. include_dirs=["yt/utilities/lib/"],
  193. libraries=["m"],
  194. extra_compile_args=['-fopenmp'],
  195. extra_link_args=['-fopenmp'],
  196. depends = ["yt/utilities/lib/VolumeIntegrator.pyx",
  197. "yt/utilities/lib/fp_utils.pxd",
  198. "yt/utilities/lib/kdtree.h",
  199. "yt/utilities/lib/FixedInterpolator.h",
  200. "yt/utilities/lib/fixed_interpolator.pxd",
  201. "yt/utilities/lib/field_interpolation_tables.pxd",
  202. ]
  203. )
  204. config.add_extension("GridTree",
  205. ["yt/utilities/lib/GridTree.pyx"],
  206. libraries=["m"], depends=["yt/utilities/lib/fp_utils.pxd"])
  207. if os.environ.get("GPERFTOOLS", "no").upper() != "NO":
  208. gpd = os.environ["GPERFTOOLS"]
  209. idir = os.path.join(gpd, "include")
  210. ldir = os.path.join(gpd, "lib")
  211. print "INCLUDE AND LIB DIRS", idir, ldir
  212. config.add_extension("perftools_wrap",
  213. ["yt/utilities/lib/perftools_wrap.pyx"],
  214. libraries=["profiler"],
  215. library_dirs = [ldir],
  216. include_dirs = [idir],
  217. )
  218. config.make_config_py() # installs __config__.py
  219. return config