FindOpenShadingLanguage.cmake 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. # - Find OpenShadingLanguage library
  2. # Find the native OpenShadingLanguage includes and library
  3. # This module defines
  4. # OSL_INCLUDE_DIRS, where to find OSL headers, Set when
  5. # OSL_INCLUDE_DIR is found.
  6. # OSL_LIBRARIES, libraries to link against to use OSL.
  7. # OSL_ROOT_DIR, the base directory to search for OSL.
  8. # This can also be an environment variable.
  9. # OSL_COMPILER, full path to OSL script compiler.
  10. # OSL_FOUND, if false, do not try to use OSL.
  11. # OSL_LIBRARY_VERSION_MAJOR, OSL_LIBRARY_VERSION_MINOR, the major
  12. # and minor versions of OSL library if found.
  13. #
  14. #=============================================================================
  15. # Copyright 2014 Blender Foundation.
  16. #
  17. # Distributed under the OSI-approved BSD License (the "License");
  18. # see accompanying file Copyright.txt for details.
  19. #
  20. # This software is distributed WITHOUT ANY WARRANTY; without even the
  21. # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  22. # See the License for more information.
  23. #=============================================================================
  24. # If OSL_ROOT_DIR was defined in the environment, use it.
  25. IF(NOT OSL_ROOT_DIR AND NOT $ENV{OSL_ROOT_DIR} STREQUAL "")
  26. SET(OSL_ROOT_DIR $ENV{OSL_ROOT_DIR})
  27. ENDIF()
  28. SET(_osl_FIND_COMPONENTS
  29. oslcomp
  30. oslexec
  31. oslquery
  32. )
  33. SET(_osl_SEARCH_DIRS
  34. ${OSL_ROOT_DIR}
  35. /usr/local
  36. /sw # Fink
  37. /opt/local # DarwinPorts
  38. /opt/lib/osl
  39. )
  40. FIND_PATH(OSL_INCLUDE_DIR
  41. NAMES
  42. OSL/oslversion.h
  43. HINTS
  44. ${_osl_SEARCH_DIRS}
  45. PATH_SUFFIXES
  46. include
  47. )
  48. SET(_osl_LIBRARIES)
  49. FOREACH(COMPONENT ${_osl_FIND_COMPONENTS})
  50. STRING(TOUPPER ${COMPONENT} UPPERCOMPONENT)
  51. FIND_LIBRARY(OSL_${UPPERCOMPONENT}_LIBRARY
  52. NAMES
  53. ${COMPONENT}
  54. HINTS
  55. ${_osl_SEARCH_DIRS}
  56. PATH_SUFFIXES
  57. lib64 lib
  58. )
  59. LIST(APPEND _osl_LIBRARIES "${OSL_${UPPERCOMPONENT}_LIBRARY}")
  60. ENDFOREACH()
  61. FIND_PROGRAM(OSL_COMPILER oslc
  62. HINTS ${_osl_SEARCH_DIRS}
  63. PATH_SUFFIXES bin)
  64. # handle the QUIETLY and REQUIRED arguments and set OSL_FOUND to TRUE if
  65. # all listed variables are TRUE
  66. INCLUDE(FindPackageHandleStandardArgs)
  67. FIND_PACKAGE_HANDLE_STANDARD_ARGS(OSL DEFAULT_MSG _osl_LIBRARIES OSL_INCLUDE_DIR OSL_COMPILER)
  68. IF(OSL_FOUND)
  69. SET(OSL_LIBRARIES ${_osl_LIBRARIES})
  70. SET(OSL_INCLUDE_DIRS ${OSL_INCLUDE_DIR})
  71. FILE(STRINGS "${OSL_INCLUDE_DIR}/OSL/oslversion.h" OSL_LIBRARY_VERSION_MAJOR
  72. REGEX "^[ \t]*#define[ \t]+OSL_LIBRARY_VERSION_MAJOR[ \t]+[0-9]+.*$")
  73. FILE(STRINGS "${OSL_INCLUDE_DIR}/OSL/oslversion.h" OSL_LIBRARY_VERSION_MINOR
  74. REGEX "^[ \t]*#define[ \t]+OSL_LIBRARY_VERSION_MINOR[ \t]+[0-9]+.*$")
  75. STRING(REGEX REPLACE ".*#define[ \t]+OSL_LIBRARY_VERSION_MAJOR[ \t]+([.0-9]+).*"
  76. "\\1" OSL_LIBRARY_VERSION_MAJOR ${OSL_LIBRARY_VERSION_MAJOR})
  77. STRING(REGEX REPLACE ".*#define[ \t]+OSL_LIBRARY_VERSION_MINOR[ \t]+([.0-9]+).*"
  78. "\\1" OSL_LIBRARY_VERSION_MINOR ${OSL_LIBRARY_VERSION_MINOR})
  79. ENDIF(OSL_FOUND)
  80. MARK_AS_ADVANCED(
  81. OSL_INCLUDE_DIR
  82. )
  83. FOREACH(COMPONENT ${_osl_FIND_COMPONENTS})
  84. STRING(TOUPPER ${COMPONENT} UPPERCOMPONENT)
  85. MARK_AS_ADVANCED(OSL_${UPPERCOMPONENT}_LIBRARY)
  86. ENDFOREACH()