cmake_minimum_required(VERSION 3.30) project(cui VERSION 2.1.0) include(GNUInstallDirs) include(CMakePackageConfigHelpers) set(CURSES_NEED_NCURSES TRUE) set(CURSES_NEED_WIDE TRUE) find_package(FLEX REQUIRED) find_package(Curses REQUIRED) configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/include/config.h.in ${CMAKE_CURRENT_BINARY_DIR}/config.h) macro(flex_target_override ALIAS INPUT OUTPUT OPTIONS) add_custom_command( DEPENDS ${INPUT} COMMAND ${FLEX_EXECUTABLE} ARGS ${OPTIONS} -o${OUTPUT} ${INPUT} COMMENT "Generating ${ALIAS}" OUTPUT ${OUTPUT}) endmacro() flex_target_override(XmlScanner ${CMAKE_CURRENT_SOURCE_DIR}/src/xml.l ${CMAKE_CURRENT_BINARY_DIR}/xml.c "-Pxml") flex_target_override(CfgScanner ${CMAKE_CURRENT_SOURCE_DIR}/src/cfg.l ${CMAKE_CURRENT_BINARY_DIR}/cfg.c "-Pcfg") set(SOURCE ${CMAKE_CURRENT_SOURCE_DIR}/src/passwddlg.c ${CMAKE_CURRENT_SOURCE_DIR}/src/menu.c ${CMAKE_CURRENT_SOURCE_DIR}/src/edit.c ${CMAKE_CURRENT_SOURCE_DIR}/src/wrappers.c ${CMAKE_CURRENT_SOURCE_DIR}/src/groupbox.c ${CMAKE_CURRENT_SOURCE_DIR}/src/listview.c ${CMAKE_CURRENT_SOURCE_DIR}/src/inputdlg.c ${CMAKE_CURRENT_SOURCE_DIR}/src/msgbox.c ${CMAKE_CURRENT_SOURCE_DIR}/src/progressbar.c ${CMAKE_CURRENT_SOURCE_DIR}/src/checkbox.c ${CMAKE_CURRENT_SOURCE_DIR}/src/textview.c ${CMAKE_CURRENT_SOURCE_DIR}/src/memo.c ${CMAKE_CURRENT_SOURCE_DIR}/src/listbox.c ${CMAKE_CURRENT_SOURCE_DIR}/src/window.c ${CMAKE_CURRENT_SOURCE_DIR}/src/combobox.c ${CMAKE_CURRENT_SOURCE_DIR}/src/radio.c ${CMAKE_CURRENT_SOURCE_DIR}/src/label.c ${CMAKE_CURRENT_SOURCE_DIR}/src/terminal.c ${CMAKE_CURRENT_SOURCE_DIR}/src/finddlg.c ${CMAKE_CURRENT_SOURCE_DIR}/src/button.c ${CMAKE_CURRENT_SOURCE_DIR}/src/chartools.c) set(SOURCE_UTIL ${CMAKE_CURRENT_SOURCE_DIR}/src/xmlparser.c ${CMAKE_CURRENT_SOURCE_DIR}/src/coproc.c ${CMAKE_CURRENT_SOURCE_DIR}/src/config.c ${CMAKE_CURRENT_BINARY_DIR}/cfg.c ${CMAKE_CURRENT_BINARY_DIR}/xml.c) set(SOURCE_SCRIPT ${CMAKE_CURRENT_SOURCE_DIR}/src/backend.c ${CMAKE_CURRENT_SOURCE_DIR}/src/api.c ${CMAKE_CURRENT_SOURCE_DIR}/src/api_ctrl.c ${CMAKE_CURRENT_SOURCE_DIR}/src/api_util.c ${CMAKE_CURRENT_SOURCE_DIR}/src/stub.c) set(HEADER ${CMAKE_CURRENT_SOURCE_DIR}/include/api_util.h ${CMAKE_CURRENT_SOURCE_DIR}/include/cui-char.h ${CMAKE_CURRENT_SOURCE_DIR}/include/api.h ${CMAKE_CURRENT_SOURCE_DIR}/include/xml.h ${CMAKE_CURRENT_SOURCE_DIR}/include/global.h ${CMAKE_CURRENT_SOURCE_DIR}/include/cui-util.h ${CMAKE_CURRENT_SOURCE_DIR}/include/cui-script.h ${CMAKE_CURRENT_SOURCE_DIR}/include/cfg.h ${CMAKE_CURRENT_SOURCE_DIR}/include/api_ctrl.h ${CMAKE_CURRENT_SOURCE_DIR}/include/cui.h ${CMAKE_CURRENT_BINARY_DIR}/config.h) # base library add_library(${PROJECT_NAME} SHARED ${SOURCE} ${HEADER}) add_library(cui::${PROJECT_NAME} ALIAS ${PROJECT_NAME}) target_include_directories(${PROJECT_NAME} PUBLIC $ $ $ ${CURSES_INCLUDE_DIRS}) target_link_libraries(${PROJECT_NAME} PUBLIC ${CURSES_LIBRARIES}) target_compile_definitions(${PROJECT_NAME} PUBLIC NCURSES_WIDECHAR=1) set_target_properties(${PROJECT_NAME} PROPERTIES VERSION ${CMAKE_PROJECT_VERSION} SOVERSION ${PROJECT_VERSION_MAJOR}) # utils library add_library(${PROJECT_NAME}-util SHARED ${SOURCE_UTIL} ${HEADER}) add_library(cui::${PROJECT_NAME}-util ALIAS ${PROJECT_NAME}-util) target_include_directories(${PROJECT_NAME}-util PUBLIC $ $ $ ${CURSES_INCLUDE_DIRS}) target_link_libraries(${PROJECT_NAME}-util PUBLIC ${CURSES_LIBRARIES} cui::cui) set_target_properties(${PROJECT_NAME}-util PROPERTIES VERSION ${CMAKE_PROJECT_VERSION} SOVERSION ${PROJECT_VERSION_MAJOR}) # script library add_library(${PROJECT_NAME}-script SHARED ${SOURCE_SCRIPT} ${HEADER}) add_library(cui::${PROJECT_NAME}-script ALIAS ${PROJECT_NAME}-script) target_include_directories(${PROJECT_NAME}-script PUBLIC $ $ $ ${CURSES_INCLUDE_DIRS}) target_link_libraries(${PROJECT_NAME}-script PUBLIC ${CURSES_LIBRARIES} cui::cui cui::cui-util) set_target_properties(${PROJECT_NAME}-script PROPERTIES VERSION ${CMAKE_PROJECT_VERSION} SOVERSION ${PROJECT_VERSION_MAJOR}) # installation header and script files install( FILES ${CMAKE_CURRENT_SOURCE_DIR}/include/cui.h ${CMAKE_CURRENT_SOURCE_DIR}/include/cui-char.h ${CMAKE_CURRENT_SOURCE_DIR}/include/cui-util.h ${CMAKE_CURRENT_SOURCE_DIR}/include/cui-script.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) install( FILES ${CMAKE_CURRENT_SOURCE_DIR}/scripts/cuilib DESTINATION /var/install/include) # installation of targets set(LIBCUI_INSTALL_CMAKEDIR "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}") install( TARGETS ${PROJECT_NAME} ${PROJECT_NAME}-util ${PROJECT_NAME}-script EXPORT ${PROJECT_NAME}Targets LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) install(EXPORT ${PROJECT_NAME}Targets FILE ${PROJECT_NAME}Targets.cmake NAMESPACE cui:: DESTINATION ${LIBCUI_INSTALL_CMAKEDIR}) write_basic_package_version_file( "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake" VERSION ${CMAKE_PROJECT_VERSION} COMPATIBILITY AnyNewerVersion) configure_package_config_file( "${CMAKE_CURRENT_SOURCE_DIR}/cmake/${PROJECT_NAME}Config.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake" INSTALL_DESTINATION ${LIBCUI_INSTALL_CMAKEDIR}) install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake" "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake" DESTINATION ${LIBCUI_INSTALL_CMAKEDIR})