Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. # CMake find_package() module for the OCaml language.
  2. # Assumes ocamlfind will be used for compilation.
  3. # http://ocaml.org/
  4. #
  5. # Example usage:
  6. #
  7. # find_package(OCaml)
  8. #
  9. # If successful, the following variables will be defined:
  10. # OCAMLFIND
  11. # OCAML_VERSION
  12. # OCAML_STDLIB_PATH
  13. # HAVE_OCAMLOPT
  14. #
  15. # Also provides find_ocamlfind_package() macro.
  16. #
  17. # Example usage:
  18. #
  19. # find_ocamlfind_package(ctypes)
  20. #
  21. # In any case, the following variables are defined:
  22. #
  23. # HAVE_OCAML_${pkg}
  24. #
  25. # If successful, the following variables will be defined:
  26. #
  27. # OCAML_${pkg}_VERSION
  28.  
  29. include( FindPackageHandleStandardArgs )
  30.  
  31. find_program(OCAMLFIND
  32.              NAMES ocamlfind)
  33.  
  34. if( OCAMLFIND )
  35.   execute_process(
  36.     COMMAND ${OCAMLFIND} ocamlc -version
  37.     OUTPUT_VARIABLE OCAML_VERSION
  38.     OUTPUT_STRIP_TRAILING_WHITESPACE)
  39.  
  40.   execute_process(
  41.     COMMAND ${OCAMLFIND} ocamlc -where
  42.     OUTPUT_VARIABLE OCAML_STDLIB_PATH
  43.     OUTPUT_STRIP_TRAILING_WHITESPACE)
  44.  
  45.   execute_process(
  46.     COMMAND ${OCAMLFIND} ocamlc -version
  47.     OUTPUT_QUIET
  48.     RESULT_VARIABLE find_ocaml_result)
  49.   if( find_ocaml_result EQUAL 0 )
  50.     set(HAVE_OCAMLOPT TRUE)
  51.   else()
  52.     set(HAVE_OCAMLOPT FALSE)
  53.   endif()
  54. endif()
  55.  
  56. find_package_handle_standard_args( OCaml DEFAULT_MSG
  57.   OCAMLFIND
  58.   OCAML_VERSION
  59.   OCAML_STDLIB_PATH)
  60.  
  61. mark_as_advanced(
  62.   OCAMLFIND)
  63.  
  64. function(find_ocamlfind_package pkg)
  65.   CMAKE_PARSE_ARGUMENTS(ARG "OPTIONAL" "VERSION" "" ${ARGN})
  66.  
  67.   execute_process(
  68.     COMMAND "${OCAMLFIND}" "query" "${pkg}" "-format" "%v"
  69.     RESULT_VARIABLE result
  70.     OUTPUT_VARIABLE version
  71.     ERROR_VARIABLE error
  72.     OUTPUT_STRIP_TRAILING_WHITESPACE
  73.     ERROR_STRIP_TRAILING_WHITESPACE)
  74.  
  75.   if( NOT result EQUAL 0 AND NOT ARG_OPTIONAL )
  76.     message(FATAL_ERROR ${error})
  77.   endif()
  78.  
  79.   if( result EQUAL 0 )
  80.     set(found TRUE)
  81.   else()
  82.     set(found FALSE)
  83.   endif()
  84.  
  85.   if( found AND ARG_VERSION )
  86.     if( version VERSION_LESS ARG_VERSION AND ARG_OPTIONAL )
  87.       # If it's optional and the constraint is not satisfied, pretend
  88.       # it wasn't found.
  89.       set(found FALSE)
  90.     elseif( version VERSION_LESS ARG_VERSION )
  91.       message(FATAL_ERROR
  92.               "ocamlfind package ${pkg} should have version ${ARG_VERSION} or newer")
  93.     endif()
  94.   endif()
  95.  
  96.   string(TOUPPER ${pkg} pkg)
  97.  
  98.   set(HAVE_OCAML_${pkg} ${found}
  99.       PARENT_SCOPE)
  100.  
  101.   set(OCAML_${pkg}_VERSION ${version}
  102.       PARENT_SCOPE)
  103. endfunction()
  104.