diff --git a/CMakeLists.txt b/CMakeLists.txt index 36cdf21..a4e3137 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -7,6 +7,7 @@ option(NWFLAIM_BUILD_SHARED "Build shared nwflaim libraries" ON) option(NWFLAIM_BUILD_STATIC "Build static nwflaim libraries" OFF) option(NWFLAIM_BUILD_SQL "Build SQL FLAIM library" ON) option(NWFLAIM_BUILD_XFLAIM "Build XML FLAIM library" ON) +option(NWFLAIM_BUILD_TOOLS "Build installable FLAIM command line tools with nw-prefixed names" ON) option(NWFLAIM_WITH_OPENSSL "Build FTK legacy OpenSSL/TLS helpers" ON) option(NWFLAIM_USE_NICI "Build FLAIM NICI/CCS encrypted-storage path" OFF) set(NWFLAIM_SSL_TARGET "" CACHE STRING "Optional SSL/Crypto target, for example mars_nwe::ssl") @@ -17,11 +18,11 @@ set(NWFLAIM_LIBRARY_PREFIX nw CACHE STRING "Library output prefix used to avoid # autotools metadata during the CMake configure step. set(NWFLAIM_FTK_LIBRARY_VERSION 1.2 CACHE STRING "FTK library version from ftk/configure.ac") set(NWFLAIM_FTK_LIBRARY_SOVERSION 1 CACHE STRING "FTK ABI version") -set(NWFLAIM_FLAIM_LIBRARY_VERSION 4.10 CACHE STRING "FLAIM library version from flaim/configure.ac") +set(NWFLAIM_FLAIM_LIBRARY_VERSION 4.62 CACHE STRING "FLAIM library version from flaim/src/flaim.h") set(NWFLAIM_FLAIM_LIBRARY_SOVERSION 4 CACHE STRING "FLAIM ABI version") -set(NWFLAIM_SQL_LIBRARY_VERSION 6.0 CACHE STRING "SQL FLAIM library version from sql/configure.ac") +set(NWFLAIM_SQL_LIBRARY_VERSION 6.00 CACHE STRING "SQL FLAIM library version from sql/src/flaimsql.h") set(NWFLAIM_SQL_LIBRARY_SOVERSION 6 CACHE STRING "SQL FLAIM ABI version") -set(NWFLAIM_XFLAIM_LIBRARY_VERSION 5.2 CACHE STRING "XFLAIM library version from xflaim/configure.ac") +set(NWFLAIM_XFLAIM_LIBRARY_VERSION 5.12 CACHE STRING "XFLAIM library version from xflaim/src/xflaim.h") set(NWFLAIM_XFLAIM_LIBRARY_SOVERSION 5 CACHE STRING "XFLAIM ABI version") if(NOT NWFLAIM_BUILD_SHARED AND NOT NWFLAIM_BUILD_STATIC) @@ -44,6 +45,9 @@ find_package(Threads REQUIRED) find_library(NWFLAIM_RT_LIBRARY rt) find_library(NWFLAIM_DL_LIBRARY dl) find_package(Curses QUIET) +if(NWFLAIM_BUILD_TOOLS AND NOT CURSES_FOUND) + message(FATAL_ERROR "NWFLAIM_BUILD_TOOLS requires curses/ncurses") +endif() set(_nwflaim_ssl_target "") if(NWFLAIM_WITH_OPENSSL) @@ -367,6 +371,46 @@ function(nwflaim_common_target target_name public_include_dir install_include_di endif() endfunction() + +function(nwflaim_common_private_target target_name) + target_compile_features(${target_name} PRIVATE cxx_std_98) + target_compile_definitions(${target_name} PRIVATE ${_nwflaim_common_defs}) + target_include_directories(${target_name} + PRIVATE + "${CMAKE_CURRENT_SOURCE_DIR}/ftk/src" + "${CMAKE_CURRENT_SOURCE_DIR}/flaim/src" + "${CMAKE_CURRENT_SOURCE_DIR}/flaim/util" + "${CMAKE_CURRENT_SOURCE_DIR}/sql/src" + "${CMAKE_CURRENT_SOURCE_DIR}/xflaim/src" + "${CMAKE_CURRENT_SOURCE_DIR}/xflaim/util") + if(NWFLAIM_USE_NICI AND NOT NWFLAIM_NICI_INCLUDE_DIR STREQUAL "") + target_include_directories(${target_name} PRIVATE "${NWFLAIM_NICI_INCLUDE_DIR}") + endif() + target_link_libraries(${target_name} PRIVATE Threads::Threads) + if(CURSES_INCLUDE_DIRS) + target_include_directories(${target_name} PRIVATE ${CURSES_INCLUDE_DIRS}) + elseif(CURSES_INCLUDE_DIR) + target_include_directories(${target_name} PRIVATE ${CURSES_INCLUDE_DIR}) + endif() + if(CURSES_LIBRARIES) + target_link_libraries(${target_name} PRIVATE ${CURSES_LIBRARIES}) + endif() + if(NWFLAIM_RT_LIBRARY) + target_link_libraries(${target_name} PRIVATE "${NWFLAIM_RT_LIBRARY}") + endif() + if(NWFLAIM_DL_LIBRARY) + target_link_libraries(${target_name} PRIVATE "${NWFLAIM_DL_LIBRARY}") + endif() +endfunction() + +function(nwflaim_add_tool target_name output_name library_target) + add_executable(${target_name} ${ARGN}) + set_target_properties(${target_name} PROPERTIES OUTPUT_NAME "${output_name}") + nwflaim_common_private_target(${target_name}) + target_link_libraries(${target_name} PRIVATE ${library_target}) + install(TARGETS ${target_name} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) +endfunction() + function(nwflaim_add_library logical_name output_base public_include_dir install_include_dir library_version library_soversion) if(NWFLAIM_BUILD_SHARED) add_library(${logical_name} SHARED ${ARGN}) @@ -421,6 +465,72 @@ if(NWFLAIM_BUILD_XFLAIM) endif() endif() + +if(NWFLAIM_BUILD_TOOLS) + add_library(flaim_util_objects OBJECT + flaim/util/flm_dlst.cpp + flaim/util/flm_lutl.cpp + flaim/util/sharutil.cpp) + nwflaim_common_private_target(flaim_util_objects) + target_include_directories(flaim_util_objects PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/flaim/util") + + nwflaim_add_tool(flmcheckdb_tool nwflmcheckdb flaim + flaim/util/checkdb.cpp + $) + nwflaim_add_tool(flmrebuild_tool nwflmrebuild flaim + flaim/util/rebuild.cpp + $) + nwflaim_add_tool(flmgigatest_tool nwflmgigatest flaim + flaim/util/gigatest.cpp + $) + nwflaim_add_tool(flmview_tool nwflmview flaim + flaim/util/viewblk.cpp + flaim/util/view.cpp + flaim/util/viewdisp.cpp + flaim/util/viewedit.cpp + flaim/util/viewfhdr.cpp + flaim/util/viewlfil.cpp + flaim/util/viewlhdr.cpp + flaim/util/viewmenu.cpp + flaim/util/viewsrch.cpp + $) + nwflaim_add_tool(flmdbshell_tool nwflmdbshell flaim + flaim/util/dbshell.cpp + flaim/util/flm_edit.cpp + $) + + if(NWFLAIM_BUILD_XFLAIM) + add_library(xflaim_util_objects OBJECT + xflaim/util/flm_dlst.cpp + xflaim/util/flm_lutl.cpp + xflaim/util/sharutil.cpp) + nwflaim_common_private_target(xflaim_util_objects) + target_include_directories(xflaim_util_objects PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/xflaim/util") + + nwflaim_add_tool(xflmcheckdb_tool nwxflmcheckdb xflaim + xflaim/util/checkdb.cpp + $) + nwflaim_add_tool(xflmrebuild_tool nwxflmrebuild xflaim + xflaim/util/rebuild.cpp + $) + nwflaim_add_tool(xflmview_tool nwxflmview xflaim + xflaim/util/viewblk.cpp + xflaim/util/view.cpp + xflaim/util/viewdisp.cpp + xflaim/util/viewedit.cpp + xflaim/util/viewhdr.cpp + xflaim/util/viewlfil.cpp + xflaim/util/viewmenu.cpp + xflaim/util/viewsrch.cpp + $) + nwflaim_add_tool(xflmdbshell_tool nwxflmdbshell xflaim + xflaim/util/fdomedt.cpp + xflaim/util/fshell.cpp + xflaim/util/xshell.cpp + $) + endif() +endif() + # Install public headers below nw-prefixed include directories so they do not # conflict with any system or distro FLAIM headers. set(NWFLAIM_INCLUDE_INSTALL_DIR "${CMAKE_INSTALL_INCLUDEDIR}/nwflaim")