123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- # CMake find_package() module for the OCaml language.
- # Assumes ocamlfind will be used for compilation.
- # http://ocaml.org/
- #
- # Example usage:
- #
- # find_package(OCaml)
- #
- # If successful, the following variables will be defined:
- # OCAMLFIND
- # OCAML_VERSION
- # OCAML_STDLIB_PATH
- # HAVE_OCAMLOPT
- #
- # Also provides find_ocamlfind_package() macro.
- #
- # Example usage:
- #
- # find_ocamlfind_package(ctypes)
- #
- # In any case, the following variables are defined:
- #
- # HAVE_OCAML_${pkg}
- #
- # If successful, the following variables will be defined:
- #
- # OCAML_${pkg}_VERSION
- include( FindPackageHandleStandardArgs )
- find_program(OCAMLFIND
- NAMES ocamlfind)
- if( OCAMLFIND )
- execute_process(
- COMMAND ${OCAMLFIND} ocamlc -version
- OUTPUT_VARIABLE OCAML_VERSION
- OUTPUT_STRIP_TRAILING_WHITESPACE)
- execute_process(
- COMMAND ${OCAMLFIND} ocamlc -where
- OUTPUT_VARIABLE OCAML_STDLIB_PATH
- OUTPUT_STRIP_TRAILING_WHITESPACE)
- execute_process(
- COMMAND ${OCAMLFIND} ocamlc -version
- OUTPUT_QUIET
- RESULT_VARIABLE find_ocaml_result)
- if( find_ocaml_result EQUAL 0 )
- set(HAVE_OCAMLOPT TRUE)
- else()
- set(HAVE_OCAMLOPT FALSE)
- endif()
- endif()
- find_package_handle_standard_args( OCaml DEFAULT_MSG
- OCAMLFIND
- OCAML_VERSION
- OCAML_STDLIB_PATH)
- mark_as_advanced(
- OCAMLFIND)
- function(find_ocamlfind_package pkg)
- CMAKE_PARSE_ARGUMENTS(ARG "OPTIONAL" "VERSION" "" ${ARGN})
- execute_process(
- COMMAND "${OCAMLFIND}" "query" "${pkg}" "-format" "%v"
- RESULT_VARIABLE result
- OUTPUT_VARIABLE version
- ERROR_VARIABLE error
- OUTPUT_STRIP_TRAILING_WHITESPACE
- ERROR_STRIP_TRAILING_WHITESPACE)
- if( NOT result EQUAL 0 AND NOT ARG_OPTIONAL )
- message(FATAL_ERROR ${error})
- endif()
- if( result EQUAL 0 )
- set(found TRUE)
- else()
- set(found FALSE)
- endif()
- if( found AND ARG_VERSION )
- if( version VERSION_LESS ARG_VERSION AND ARG_OPTIONAL )
- # If it's optional and the constraint is not satisfied, pretend
- # it wasn't found.
- set(found FALSE)
- elseif( version VERSION_LESS ARG_VERSION )
- message(FATAL_ERROR
- "ocamlfind package ${pkg} should have version ${ARG_VERSION} or newer")
- endif()
- endif()
- string(TOUPPER ${pkg} pkg)
- set(HAVE_OCAML_${pkg} ${found}
- PARENT_SCOPE)
- set(OCAML_${pkg}_VERSION ${version}
- PARENT_SCOPE)
- endfunction()
|