Alien-LibJQ

 view release on metacpan or  search on metacpan

jq/CMakeLists.txt  view on Meta::CPAN

    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(
  OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/src/builtin.inc
  DEPENDS src/builtin.jq
  COMMENT "making src/builtin.inc from src/builtin.jq"
  COMMAND perl ${CMAKE_CURRENT_SOURCE_DIR}/scripts/gen_builtin_inc.pl ${CMAKE_CURRENT_SOURCE_DIR}/src/builtin.jq > ${CMAKE_CURRENT_SOURCE_DIR}/src/builtin.inc
)
set_source_files_properties(src/builtin.c PROPERTIES OBJECT_DEPENDS src/builtin.inc)

if(${WITH_ONIGURUMA} STREQUAL "builtin")
  target_link_libraries(jq PUBLIC onig)
  target_include_directories(jq PUBLIC
  $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/modules/oniguruma/src>
  $<INSTALL_INTERFACE:include>
  )
elseif(HAVE_LIBONIG)
  target_link_libraries(jq PUBLIC oniguruma::onig)
endif()

# src/builtin.c calls setenv, which is not portable on windows
# below check will add a local implementation and compile
if(WIN32 AND MINGW)
  check_symbol_exists(setenv  "stdlib.h"  HAVE_SETENV)
  target_compile_definitions_if_true(HAVE_SETENV)
  if(NOT HAVE_SETENV)
    target_sources(jq PRIVATE
      src/setenv.h src/setenv.c
    )
    message(STATUS "patching src/builtin.c")
    execute_process(
      COMMAND patch -p0 -N --binary -i builtin.c.patch
      WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
    )
  endif()
endif()

add_executable(jq_bin src/main.c src/version.h)
set_target_properties(jq_bin PROPERTIES OUTPUT_NAME jq)
target_link_libraries(jq_bin PRIVATE jq)

if(ENABLE_ALL_STATIC)
  target_link_options(jq_bin PRIVATE -all-static)
endif()

# TODO: support test and build manpage
if(ENABLE_DOCS)
endif()


# TODO: support full packaging
install_library(jq)
install_executable(jq_bin)
install_header(src/jv.h src/jq.h)
install_data(AUTHORS COPYING NEWS README)

# export cmake configurations
install(TARGETS jq onig EXPORT jqTargets)
install(EXPORT jqTargets FILE jqTargets.cmake DESTINATION lib/cmake/jq)
include(CMakePackageConfigHelpers)
# generate the config file that includes the exports
configure_package_config_file(
  ${CMAKE_CURRENT_SOURCE_DIR}/Config.cmake.in
  ${CMAKE_CURRENT_BINARY_DIR}/jqConfig.cmake
  INSTALL_DESTINATION lib/cmake/jq
  NO_SET_AND_CHECK_MACRO
  NO_CHECK_REQUIRED_COMPONENTS_MACRO
)
# generate the version file for the config file
write_basic_package_version_file(
  ${CMAKE_CURRENT_BINARY_DIR}/jqConfigVersion.cmake
  VERSION ${PACKAGE_VERSION}
  COMPATIBILITY AnyNewerVersion
)
# install the configuration file
install(FILES
  ${CMAKE_CURRENT_BINARY_DIR}/jqConfig.cmake
  ${CMAKE_CURRENT_BINARY_DIR}/jqConfigVersion.cmake
  DESTINATION lib/cmake/jq
)

# information in legacy pkgconfig is wrong/missing
#configure_file(${CMAKE_CURRENT_SOURCE_DIR}/jq.pc.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/jq.pc @ONLY)
#install(FILES ${CMAKE_CURRENT_BINARY_DIR}/jq.pc DESTINATION lib/pkgconfig)

#export(EXPORT jqTargets FILE ${CMAKE_CURRENT_BINARY_DIR}/jqTargets.cmake)



( run in 0.783 second using v1.01-cache-2.11-cpan-677af5a14d3 )