/share/cmake/OCIOMacros.cmake

http://github.com/imageworks/OpenColorIO · CMake · 339 lines · 286 code · 27 blank · 26 comment · 17 complexity · e9a2d28bbccdf6543a4f20c4dc1ed634 MD5 · raw file

  1. MACRO(messageonce MSG)
  2. if(CMAKE_FIRST_RUN)
  3. message(STATUS ${MSG})
  4. endif()
  5. ENDMACRO()
  6. MACRO(OCIOFindOpenGL)
  7. if(APPLE)
  8. INCLUDE_DIRECTORIES(/System/Library/Frameworks)
  9. endif()
  10. # Find OpenGL
  11. find_package(OpenGL)
  12. if(OPENGL_FOUND)
  13. message(STATUS "Found OpenGL library ${OPENGL_LIBRARY}")
  14. message(STATUS "Found OpenGL includes ${OPENGL_INCLUDE_DIR}")
  15. else()
  16. message(STATUS "OpenGL not found")
  17. endif()
  18. # Find GLUT
  19. find_package(GLUT)
  20. if(GLUT_FOUND)
  21. message(STATUS "Found GLUT library ${GLUT_LIBRARY}")
  22. else()
  23. message(STATUS "GLUT not found")
  24. endif()
  25. # Find GLEW
  26. set(GLEW_VERSION 1.5.1)
  27. FIND_PATH(GLEW_INCLUDES GL/glew.h
  28. /usr/include
  29. /usr/local/include
  30. /sw/include
  31. /opt/local/include
  32. DOC "The directory where GL/glew.h resides")
  33. FIND_LIBRARY(GLEW_LIBRARIES
  34. NAMES GLEW glew
  35. /usr/lib64
  36. /usr/lib
  37. /usr/local/lib64
  38. /usr/local/lib
  39. /sw/lib
  40. /opt/local/lib
  41. PATHS
  42. DOC "The GLEW library")
  43. if(GLEW_INCLUDES AND GLEW_LIBRARIES)
  44. set(GLEW_FOUND TRUE)
  45. message(STATUS "Found GLEW library ${GLEW_LIBRARIES}")
  46. message(STATUS "Found GLEW includes ${GLEW_INCLUDES}")
  47. else()
  48. message(STATUS "GLEW not found")
  49. set(GLEW_FOUND FALSE)
  50. endif()
  51. ENDMACRO()
  52. MACRO(OCIOFindOpenImageIO)
  53. if(OIIO_PATH)
  54. message(STATUS "OIIO path explicitly specified: ${OIIO_PATH}")
  55. endif()
  56. if(OIIO_INCLUDE_PATH)
  57. message(STATUS "OIIO INCLUDE_PATH explicitly specified: ${OIIO_INCLUDE_PATH}")
  58. endif()
  59. if(OIIO_LIBRARY_PATH)
  60. message(STATUS "OIIO LIBRARY_PATH explicitly specified: ${OIIO_LIBRARY_PATH}")
  61. endif()
  62. FIND_PATH( OIIO_INCLUDES OpenImageIO/version.h
  63. ${OIIO_INCLUDE_PATH}
  64. ${OIIO_PATH}/include/
  65. /usr/include
  66. /usr/local/include
  67. /sw/include
  68. /opt/local/include
  69. DOC "The directory where OpenImageIO/version.h resides")
  70. FIND_LIBRARY(OIIO_LIBRARIES
  71. NAMES OIIO OpenImageIO
  72. PATHS
  73. ${OIIO_LIBRARY_PATH}
  74. ${OIIO_PATH}/lib/
  75. /usr/lib64
  76. /usr/lib
  77. /usr/local/lib64
  78. /usr/local/lib
  79. /sw/lib
  80. /opt/local/lib
  81. DOC "The OIIO library")
  82. if(OIIO_INCLUDES AND OIIO_LIBRARIES)
  83. set(OIIO_FOUND TRUE)
  84. message(STATUS "Found OIIO library ${OIIO_LIBRARIES}")
  85. message(STATUS "Found OIIO includes ${OIIO_INCLUDES}")
  86. else()
  87. set(OIIO_FOUND FALSE)
  88. message(STATUS "OIIO not found. Specify OIIO_PATH to locate it")
  89. endif()
  90. ENDMACRO()
  91. MACRO(OCIOFindPython)
  92. # Set the default python runtime
  93. if(NOT PYTHON)
  94. set(PYHELP "path to Python executable (also used to find headers against which to compile Python bindings)")
  95. set(PYTHON_HEADER Python.h)
  96. set(PYTHON python CACHE FILEPATH ${PYHELP} FORCE)
  97. endif(NOT PYTHON)
  98. if(CMAKE_FIRST_RUN)
  99. message(STATUS "Setting python bin to: ${PYTHON}")
  100. endif()
  101. set(PYTHON_OK YES) # OK until something goes wrong
  102. # Get Python version
  103. execute_process(COMMAND ${PYTHON} -c "from distutils import sysconfig; print(sysconfig.get_python_version())"
  104. OUTPUT_VARIABLE PYTHON_VERSION
  105. RESULT_VARIABLE PYTHON_RETURNVALUE
  106. OUTPUT_STRIP_TRAILING_WHITESPACE
  107. )
  108. if(${PYTHON_RETURNVALUE} EQUAL 0)
  109. # Everything is fine
  110. else()
  111. # TODO: These error strings clobber previous values
  112. set(PYTHON_ERR "${PYTHON} returned ${PYTHON_RETURNVALUE} trying to determine version number.")
  113. set(PYTHON_OK NO)
  114. endif()
  115. # Determine Python UCS version
  116. execute_process(COMMAND ${PYTHON} -c "import sys; print(sys.maxunicode > 65536 and 'ucs4' or 'ucs2')"
  117. OUTPUT_VARIABLE PYTHON_UCS
  118. RESULT_VARIABLE PYTHON_RETURNVALUE
  119. OUTPUT_STRIP_TRAILING_WHITESPACE
  120. )
  121. if(${PYTHON_RETURNVALUE} EQUAL 0)
  122. # Hurray
  123. else()
  124. set(PYTHON_OK NO)
  125. set(PYTHON_ERR "${PYTHON} returned ${PYTHON_RETURNVALUE} trying to determine UCS version.")
  126. endif()
  127. # Locate headers
  128. execute_process(COMMAND ${PYTHON} -c "from distutils import sysconfig; print(':'.join(set(sysconfig.get_config_var('INCLDIRSTOMAKE').split())))"
  129. OUTPUT_VARIABLE PYTHON_INCLUDE_RAW
  130. RESULT_VARIABLE PYTHON_RETURNVALUE
  131. OUTPUT_STRIP_TRAILING_WHITESPACE
  132. )
  133. # Handle errors, and process include path
  134. if(${PYTHON_RETURNVALUE} EQUAL 0)
  135. file(TO_CMAKE_PATH "${PYTHON_INCLUDE_RAW}" PYTHON_INCLUDE)
  136. else()
  137. set(PYTHON_ERR "${PYTHON} returned ${PYTHON_RETURNVALUE} trying to determine header location.")
  138. set(PYTHON_OK NO)
  139. endif()
  140. # Locate Python library
  141. execute_process(COMMAND ${PYTHON} -c "from distutils import sysconfig; print(':'.join(set(sysconfig.get_config_var('LIBPL').split())))"
  142. OUTPUT_VARIABLE PYTHON_LIBRARY_DIRS_RAW
  143. RESULT_VARIABLE PYTHON_RETURNVALUE
  144. OUTPUT_STRIP_TRAILING_WHITESPACE
  145. )
  146. # Handle errors, and process include path
  147. if(${PYTHON_RETURNVALUE} EQUAL 0)
  148. file(TO_CMAKE_PATH "${PYTHON_LIBRARY_DIRS_RAW}" PYTHON_LIBRARY_DIRS)
  149. FIND_LIBRARY(PYTHON_LIBRARY
  150. NAMES "python${PYTHON_VERSION}"
  151. PATHS ${PYTHON_LIBRARY_DIRS}
  152. NO_DEFAULT_PATH # Don't be "helpful" and randomly grab library from /usr/lib etc
  153. )
  154. message("Python library: ${PYTHON_LIBRARY}")
  155. else()
  156. set(PYTHON_ERR "${PYTHON} returned ${PYTHON_RETURNVALUE} trying to determine library path.")
  157. set(PYTHON_OK NO)
  158. endif()
  159. # Construct variant path - a path that sufficiently identifies the
  160. # ABI-compatbility of the built library. See Github issue #236
  161. if(OCIO_PYGLUE_RESPECT_ABI)
  162. # Respect Python major/minor version, and UCS version (unicode
  163. # content system). E.g install into "lib/python2.6/ucs4/site-packages"
  164. set(PYTHON_VARIANT_PATH "lib${LIB_SUFFIX}/python${PYTHON_VERSION}/${PYTHON_UCS}/site-packages")
  165. else()
  166. # Ignore UCS value and install into lib/python2.6/site-packages dir
  167. set(PYTHON_VARIANT_PATH "lib${LIB_SUFFIX}/python${PYTHON_VERSION}/site-packages")
  168. endif()
  169. ENDMACRO()
  170. MACRO(OCIOFindJava)
  171. if(APPLE)
  172. SET(_JAVA_HINTS $ENV{JAVA_HOME}/bin)
  173. SET(_JAVA_PATHS /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands)
  174. FIND_PROGRAM(Java_JAVA_EXECUTABLE
  175. NAMES java
  176. HINTS ${_JAVA_HINTS}
  177. PATHS ${_JAVA_PATHS}
  178. )
  179. IF(Java_JAVA_EXECUTABLE)
  180. EXECUTE_PROCESS(COMMAND ${Java_JAVA_EXECUTABLE} -version
  181. RESULT_VARIABLE res
  182. OUTPUT_VARIABLE var
  183. ERROR_VARIABLE var # sun-java output to stderr
  184. OUTPUT_STRIP_TRAILING_WHITESPACE
  185. ERROR_STRIP_TRAILING_WHITESPACE)
  186. IF( res )
  187. IF(${Java_FIND_REQUIRED})
  188. MESSAGE( FATAL_ERROR "Error executing java -version" )
  189. ELSE()
  190. MESSAGE( STATUS "Warning, could not run java --version")
  191. ENDIF()
  192. ELSE()
  193. # extract major/minor version and patch level from "java -version" output
  194. # Tested on linux using
  195. # 1. Sun / Sun OEM
  196. # 2. OpenJDK 1.6
  197. # 3. GCJ 1.5
  198. # 4. Kaffe 1.4.2
  199. IF(var MATCHES "java version \"[0-9]+\\.[0-9]+\\.[0-9_.]+[oem-]*\".*")
  200. # This is most likely Sun / OpenJDK, or maybe GCJ-java compat layer
  201. STRING( REGEX REPLACE ".* version \"([0-9]+\\.[0-9]+\\.[0-9_.]+)[oem-]*\".*"
  202. "\\1" Java_VERSION_STRING "${var}" )
  203. ELSEIF(var MATCHES "java full version \"kaffe-[0-9]+\\.[0-9]+\\.[0-9_]+\".*")
  204. # Kaffe style
  205. STRING( REGEX REPLACE "java full version \"kaffe-([0-9]+\\.[0-9]+\\.[0-9_]+).*"
  206. "\\1" Java_VERSION_STRING "${var}" )
  207. ELSE()
  208. IF(NOT Java_FIND_QUIETLY)
  209. message(WARNING "regex not supported: ${var}. Please report")
  210. ENDIF(NOT Java_FIND_QUIETLY)
  211. ENDIF()
  212. STRING( REGEX REPLACE "([0-9]+).*" "\\1" Java_VERSION_MAJOR "${Java_VERSION_STRING}" )
  213. STRING( REGEX REPLACE "[0-9]+\\.([0-9]+).*" "\\1" Java_VERSION_MINOR "${Java_VERSION_STRING}" )
  214. STRING( REGEX REPLACE "[0-9]+\\.[0-9]+\\.([0-9]+).*" "\\1" Java_VERSION_PATCH "${Java_VERSION_STRING}" )
  215. # warning tweak version can be empty:
  216. STRING( REGEX REPLACE "[0-9]+\\.[0-9]+\\.[0-9]+\\_?\\.?([0-9]*)$" "\\1" Java_VERSION_TWEAK "${Java_VERSION_STRING}" )
  217. if( Java_VERSION_TWEAK STREQUAL "" ) # check case where tweak is not defined
  218. set(Java_VERSION ${Java_VERSION_MAJOR}.${Java_VERSION_MINOR}.${Java_VERSION_PATCH})
  219. else( )
  220. set(Java_VERSION ${Java_VERSION_MAJOR}.${Java_VERSION_MINOR}.${Java_VERSION_PATCH}.${Java_VERSION_TWEAK})
  221. endif( )
  222. ENDIF()
  223. ENDIF(Java_JAVA_EXECUTABLE)
  224. FIND_PROGRAM(Java_JAR_EXECUTABLE
  225. NAMES jar
  226. HINTS ${_JAVA_HINTS}
  227. PATHS ${_JAVA_PATHS}
  228. )
  229. FIND_PROGRAM(Java_JAVAC_EXECUTABLE
  230. NAMES javac
  231. HINTS ${_JAVA_HINTS}
  232. PATHS ${_JAVA_PATHS}
  233. )
  234. FIND_PROGRAM(Java_JAVAH_EXECUTABLE
  235. NAMES javah
  236. HINTS ${_JAVA_HINTS}
  237. PATHS ${_JAVA_PATHS}
  238. )
  239. FIND_PROGRAM(Java_JAVADOC_EXECUTABLE
  240. NAMES javadoc
  241. HINTS ${_JAVA_HINTS}
  242. PATHS ${_JAVA_PATHS}
  243. )
  244. # Check for everything
  245. include(FindPackageHandleStandardArgs)
  246. find_package_handle_standard_args(Java
  247. REQUIRED_VARS Java_JAVA_EXECUTABLE Java_JAR_EXECUTABLE Java_JAVAC_EXECUTABLE
  248. Java_JAVAH_EXECUTABLE Java_JAVADOC_EXECUTABLE Java_VERSION)
  249. set(Java_FOUND TRUE)
  250. find_package(JNI)
  251. else()
  252. find_package(Java)
  253. find_package(JNI)
  254. endif()
  255. ENDMACRO()
  256. MACRO(ExtractRstCPP INFILE OUTFILE)
  257. add_custom_command(
  258. OUTPUT ${OUTFILE}
  259. COMMAND ${CMAKE_SOURCE_DIR}/share/sphinx/ExtractRstFromSourceCPP.py ${INFILE} ${OUTFILE}
  260. DEPENDS ${INFILE}
  261. COMMENT "Extracting reStructuredText from ${INFILE} (using old process)"
  262. )
  263. ENDMACRO()
  264. MACRO(ExtractRstSimple INFILE OUTFILE)
  265. add_custom_command(
  266. OUTPUT ${OUTFILE}
  267. COMMAND ${CMAKE_SOURCE_DIR}/share/sphinx/ExtractRstFromSourceSimple.py ${INFILE} ${OUTFILE}
  268. DEPENDS ${INFILE}
  269. COMMENT "Extracting reStructuredText from ${INFILE}"
  270. )
  271. ENDMACRO()
  272. MACRO(CopyFiles TARGET)
  273. # parse the macro arguments
  274. PARSE_ARGUMENTS(COPYFILES
  275. "OUTDIR;"
  276. "NOTUSED" ${ARGN})
  277. # get the list of sources from the args
  278. set(FILES ${COPYFILES_DEFAULT_ARGS})
  279. # find the shader compiler
  280. if(NOT COPYFILES_OUTDIR)
  281. set(COPYFILES_OUTDIR ${CMAKE_CURRENT_BINARY_DIR})
  282. endif()
  283. set(${TARGET}_OUTPUT)
  284. foreach(FILE ${FILES})
  285. get_filename_component(_FILE_NAME ${FILE} NAME)
  286. set(OUTFILENAME "${COPYFILES_OUTDIR}/${_FILE_NAME}")
  287. list(APPEND ${TARGET}_OUTPUT ${OUTFILENAME})
  288. add_custom_command(
  289. OUTPUT ${OUTFILENAME}
  290. COMMAND ${CMAKE_COMMAND} -E copy ${FILE} ${OUTFILENAME}
  291. DEPENDS ${FILE}
  292. COMMENT "Copying file ${FILE}\n to ${OUTFILENAME}"
  293. )
  294. endforeach()
  295. ENDMACRO()