fix overflow in a_linalg_plu
[liba.git] / cmake / FindQuickJS.cmake
blobcf46710f89c3bc13ad9daaf5183ed0d92f2f65e7
1 # .rst:
2 # FindQuickJS
3 # -----------
5 # Find quickjs include dirs and libraries.
7 # Imported Targets
8 # ^^^^^^^^^^^^^^^^
10 # This module defines the following :ref:`Imported Targets <Imported Targets>`:
12 # ``quickjs``
14 # Result Variables
15 # ^^^^^^^^^^^^^^^^
17 # This module defines the following variables:
19 # ``QUICKJS_FOUND``
21 # ``QUICKJS_INCLUDE_DIR``
23 # ``QUICKJS_LIBRARIES``
25 # ``QUICKJS_VERSION``
27 # ``QJSC_EXECUTABLE``
29 # ``QJS_EXECUTABLE``
31 # Cache variables
32 # ^^^^^^^^^^^^^^^
34 # Search results are saved persistently in CMake cache entries:
36 # ``QUICKJS_INCLUDE_DIR``
38 # ``QUICKJS_LTO_LIBRARY``
40 # ``QUICKJS_LIBRARY``
42 # ``QJSC_EXECUTABLE``
44 # ``QJS_EXECUTABLE``
46 include(${CMAKE_ROOT}/Modules/FindPackageHandleStandardArgs.cmake)
47 find_path(QUICKJS_INCLUDE_DIR NAMES quickjs.h PATH_SUFFIXES quickjs)
48 mark_as_advanced(QUICKJS_INCLUDE_DIR)
50 find_program(QJSC_EXECUTABLE NAMES qjsc)
51 mark_as_advanced(QJSC_EXECUTABLE)
53 find_program(QJS_EXECUTABLE NAMES qjs)
54 mark_as_advanced(QJS_EXECUTABLE)
56 if(EXISTS "${QJS_EXECUTABLE}")
57   execute_process(COMMAND ${QJS_EXECUTABLE} -h OUTPUT_VARIABLE QUICKJS_VERSION)
58 elseif(EXISTS "${QJSC_EXECUTABLE}")
59   execute_process(COMMAND ${QJSC_EXECUTABLE} -h OUTPUT_VARIABLE QUICKJS_VERSION)
60 endif()
61 if(QUICKJS_VERSION)
62   string(REGEX REPLACE ".*version[ ]+([^\n ]+).*" "\\1" QUICKJS_VERSION "${QUICKJS_VERSION}")
63 endif()
65 find_library(QUICKJS_LTO_LIBRARY NAMES quickjs.lto PATH_SUFFIXES quickjs)
66 find_library(QUICKJS_LIBRARY NAMES quickjs PATH_SUFFIXES quickjs)
67 mark_as_advanced(QUICKJS_LTO_LIBRARY QUICKJS_LIBRARY)
69 set(QUICKJS_LIBRARY2)
70 get_filename_component(ext "${QUICKJS_LIBRARY}" EXT)
71 if(NOT APPLE AND UNIX)
72   find_library(QUICKJS_MATH_LIBRARY m)
73   mark_as_advanced(QUICKJS_MATH_LIBRARY)
74   if(EXISTS "${QUICKJS_MATH_LIBRARY}")
75     list(APPEND QUICKJS_LIBRARY2 ${QUICKJS_MATH_LIBRARY})
76   else()
77     list(APPEND QUICKJS_LIBRARY2 m)
78   endif()
79   if(ext STREQUAL CMAKE_STATIC_LIBRARY_SUFFIX)
80     list(APPEND QUICKJS_LIBRARY2 ${CMAKE_DL_LIBS})
81   endif()
82 endif()
83 if(ext STREQUAL CMAKE_STATIC_LIBRARY_SUFFIX)
84   find_package(Threads)
85   if(CMAKE_USE_PTHREADS_INIT)
86     list(APPEND QUICKJS_LIBRARY2 pthread)
87   endif()
88 endif()
90 if(EXISTS "${QUICKJS_LIBRARY}")
91   set(QUICKJS_LIBRARIES
92     ${QUICKJS_LIBRARY} ${QUICKJS_LIBRARY2}
93   )
94 endif()
96 find_package_handle_standard_args(QuickJS
97   FOUND_VAR
98     QUICKJS_FOUND
99   REQUIRED_VARS
100     QUICKJS_LIBRARIES
101     QUICKJS_INCLUDE_DIR
102     QJSC_EXECUTABLE
103     QJS_EXECUTABLE
104   VERSION_VAR
105     QUICKJS_VERSION
108 if(QUICKJS_FOUND)
109   if(NOT TARGET quickjs.lto AND EXISTS "${QUICKJS_LTO_LIBRARY}")
110     add_library(quickjs.lto UNKNOWN IMPORTED)
111     set_target_properties(quickjs.lto PROPERTIES
112       IMPORTED_LINK_INTERFACE_LANGUAGES C
113       INTERFACE_INCLUDE_DIRECTORIES "${QUICKJS_INCLUDE_DIR}"
114       IMPORTED_LOCATION "${QUICKJS_LTO_LIBRARY}"
115     )
116     set_property(TARGET quickjs.lto APPEND PROPERTY
117       INTERFACE_LINK_LIBRARIES ${QUICKJS_LIBRARY2}
118     )
119   endif()
120   if(NOT TARGET quickjs AND EXISTS "${QUICKJS_LIBRARY}")
121     add_library(quickjs UNKNOWN IMPORTED)
122     set_target_properties(quickjs PROPERTIES
123       IMPORTED_LINK_INTERFACE_LANGUAGES C
124       INTERFACE_INCLUDE_DIRECTORIES "${QUICKJS_INCLUDE_DIR}"
125       IMPORTED_LOCATION "${QUICKJS_LIBRARY}"
126     )
127     set_property(TARGET quickjs APPEND PROPERTY
128       INTERFACE_LINK_LIBRARIES ${QUICKJS_LIBRARY2}
129     )
130   endif()
131 endif()