Alien-LibJQ

 view release on metacpan or  search on metacpan

jq/CMakeLists.txt  view on Meta::CPAN

  HAVE_LOG10
  HAVE_LOG1P
  HAVE_LOG2
  HAVE_LOG
  HAVE_LOGB
  HAVE_MODF
  HAVE_LGAMMA_R
  HAVE_NEARBYINT
  HAVE_NEXTAFTER
  HAVE_NEXTTOWARD
  HAVE_POW10
  HAVE_POW
  HAVE_REMAINDER
  HAVE_RINT
  HAVE_ROUND
  HAVE_SCALB
  HAVE_SCALBLN
  HAVE_SIGNIFICAND
  HAVE_SIN
  HAVE_SINH
  HAVE_SQRT
  HAVE_TAN
  HAVE_TANH
  HAVE_TGAMMA
  HAVE_TRUNC
  HAVE_Y0
  HAVE_Y1
  HAVE_YN
)

CHECK_C_SOURCE_COMPILES("static __thread int x = 1; int main() { return x; }" HAVE___THREAD)
target_compile_definitions_if_true(HAVE___THREAD)

TEST_BIG_ENDIAN(TEST_BYTE_ORDER_BIG_ENDIAN)
if(TEST_BYTE_ORDER_BIG_ENDIAN)
  target_compile_definitions(jq_compiler_flags INTERFACE IEEE_MC68k=1)
else()
  target_compile_definitions(jq_compiler_flags INTERFACE IEEE_8087=1)
endif()

set(HAVE_LIBONIG 0)
if(WITH_ONIGURUMA STREQUAL "builtin")
  message(STATUS "build and link builtin oniguruma library")
  add_subdirectory(modules/oniguruma)
  set(HAVE_LIBONIG 1)
elseif(IS_DIRECTORY ${WITH_ONIGURUMA})
  message(STATUS "link oniguruma library from ${WITH_ONIGURUMA}")
  find_package(oniguruma REQUIRED PATHS ${WITH_ONIGURUMA} NO_DEFAULT_PATH)
else()
  find_package(oniguruma)
endif()
if(oniguruma_FOUND)
  set(HAVE_LIBONIG 1)
endif()
target_compile_definitions_if_true(HAVE_LIBONIG)

add_library(jq
  src/builtin.c src/bytecode.c src/compile.c src/execute.c
  src/jq_test.c src/jv.c src/jv_alloc.c src/jv_aux.c
  src/jv_dtoa.c src/jv_file.c src/jv_parse.c src/jv_print.c
  src/jv_unicode.c src/linker.c src/locfile.c src/util.c
  src/builtin.h src/bytecode.h src/compile.h
  src/exec_stack.h src/jq_parser.h src/jv_alloc.h src/jv_dtoa.h
  src/jv_unicode.h src/jv_utf8_tables.h src/lexer.l src/libm.h
  src/linker.h src/locfile.h src/opcode_list.h src/parser.y
  src/util.h
)
target_link_libraries(jq PUBLIC "$<BUILD_INTERFACE:jq_compiler_flags>")
target_link_libraries(jq PUBLIC -lm)
target_link_options(jq PRIVATE -export-symbols-regex '^j[qv]_' -version-info ${SO_VERSION})
#target_link_options(jq PRIVATE -export-symbols-regex '^j[qv]_')
set_target_properties(jq PROPERTIES
  VERSION ${VERSION}
  SOVERSION ${SO_VERSION}
)
if(HAVE_WIN32)
  target_link_libraries(jq PUBLIC -lshlwapi)
endif()

if(ENABLE_MAINTAINER_MODE)
  FLEX_TARGET(jq_lexer src/lexer.l ${CMAKE_CURRENT_SOURCE_DIR}/src/lexer.c
    COMPILE_FLAGS --warnings=all -d
    DEFINES_FILE ${CMAKE_CURRENT_SOURCE_DIR}/src/lexer.h
  )
  target_sources(jq PRIVATE
    ${FLEX_JQ_LEXER_OUTPUTS} ${FLEX_JQ_LEXER_OUTPUT_HEADER}
    src/parser.h src/parser.c
    src/builtin.inc src/version.h
  )
else()
  target_sources(jq PRIVATE
    src/lexer.h src/lexer.c
    src/parser.h src/parser.c
    src/builtin.inc src/version.h
  )
endif()

if(ENABLE_UBSAN)
  target_compile_options(jq PUBLIC -fsanitize=undefined)
endif()

if(ENABLE_ASAN)
  target_compile_options(jq PUBLIC -fsanitize=address)
  set(NO_VALGRIND ON)
  if(ENABLE_VALGRIND)
    set(NO_VALGRIND OFF)
  else()
    set(NO_VALGRIND ON)
  endif()
endif()

if(ENABLE_GCOV)
  target_compile_options(jq PUBLIC --coverage --no-inline)
endif()

if(ENABLE_ERROR_INJECTION)
  add_library(jq_inject_errors src/inject_errors.c)
  target_link_libraries(jq_inject_errors PRIVATE dl)
  target_link_options(jq_inject_errors PRIVATE -module)
endif()

# TODO: remake src/version.h if and only if the git ID has changed

add_custom_command(



( run in 0.666 second using v1.01-cache-2.11-cpan-501a3233654 )