2) Added env_reader functions (env.hpp and env.cpp) 3) Program looks for a .env on startup and creates one based on user input if not found. 4) Refactored log_parsing and ip_to_geo to use the global env variables for parsing and ip lookup from the local .mmdb database 5) CMakeLists.txt is now cross platform functional 6) Added various cross platform checks for creating .env variables
105 lines
3.3 KiB
CMake
105 lines
3.3 KiB
CMake
cmake_minimum_required(VERSION 3.15)
|
|
project(ParseLogCLI LANGUAGES CXX)
|
|
|
|
# System and compiler configurations
|
|
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
|
set(CMAKE_CXX_STANDARD 17)
|
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
|
|
include(FetchContent)
|
|
|
|
# ==========================================
|
|
# 1. CORE LIBRARY TARGET
|
|
# ==========================================
|
|
add_library(parselog_core
|
|
log_parsing/log_parsing.cpp
|
|
ip_to_geo/ip_to_geo.cpp
|
|
env_reader/env.cpp
|
|
third_party/src/GeoLite2PP.cpp
|
|
third_party/src/GeoLite2PP_error_category.cpp
|
|
)
|
|
|
|
# Include paths for your modules and MaxMind headers
|
|
target_include_directories(parselog_core PRIVATE
|
|
${CMAKE_CURRENT_SOURCE_DIR}/log_parsing
|
|
${CMAKE_CURRENT_SOURCE_DIR}/ip_to_geo
|
|
${CMAKE_CURRENT_SOURCE_DIR}/third_party/include
|
|
)
|
|
|
|
# CROSS-PLATFORM FIXED: Automatically links appropriate binary dependencies based on OS
|
|
if(WIN32)
|
|
if(MSVC)
|
|
# Windows via Visual Studio Compiler
|
|
target_link_libraries(parselog_core PRIVATE
|
|
${CMAKE_CURRENT_SOURCE_DIR}/third_party/lib/maxminddb.lib
|
|
)
|
|
else()
|
|
# Windows via MinGW/GCC Toolchain
|
|
target_link_libraries(parselog_core PRIVATE
|
|
${CMAKE_CURRENT_SOURCE_DIR}/third_party/lib/libmaxminddb.a
|
|
)
|
|
endif()
|
|
|
|
# Windows requires Windows Sockets API linked for libmaxminddb network resolutions
|
|
target_link_libraries(parselog_core PRIVATE ws2_32)
|
|
|
|
elseif(APPLE)
|
|
# macOS Specific Path Integrations (Handles Intel /opt/local and Apple Silicon /opt/homebrew)
|
|
find_library(MAXMIND_LIB maxminddb HINTS /opt/homebrew/lib /usr/local/lib /opt/local/lib)
|
|
|
|
if(MAXMIND_LIB)
|
|
target_link_libraries(parselog_core PRIVATE ${MAXMIND_LIB})
|
|
else()
|
|
# Fallback to local static file repository boundary if brew package is missing
|
|
target_link_libraries(parselog_core PRIVATE
|
|
${CMAKE_CURRENT_SOURCE_DIR}/third_party/lib/libmaxminddb.a
|
|
)
|
|
endif()
|
|
|
|
else()
|
|
# Standard Linux (Ubuntu, Arch Linux, Fedora, etc.)
|
|
target_link_libraries(parselog_core PRIVATE
|
|
${CMAKE_CURRENT_SOURCE_DIR}/third_party/lib/libmaxminddb.a
|
|
)
|
|
endif()
|
|
|
|
# Version definitions needed by your GeoLite2PP wrapper
|
|
target_compile_definitions(parselog_core PRIVATE
|
|
GEOLITE2PP_VERSION="0.0.1"
|
|
)
|
|
|
|
# ==========================================
|
|
# 2. FTXUI Library Download
|
|
# ==========================================
|
|
FetchContent_Declare(
|
|
ftxui
|
|
GIT_REPOSITORY https://github.com/ArthurSonzogni/FTXUI.git
|
|
GIT_TAG v6.1.9
|
|
)
|
|
FetchContent_MakeAvailable(ftxui)
|
|
|
|
# ==========================================
|
|
# 3. APPLICATION EXECUTABLE
|
|
# ==========================================
|
|
add_executable(parselog_cli main.cpp)
|
|
|
|
target_link_libraries(parselog_cli
|
|
PRIVATE
|
|
parselog_core
|
|
ftxui::screen
|
|
ftxui::dom
|
|
ftxui::component
|
|
)
|
|
|
|
# CROSS-PLATFORM FIXED: Output targets route uniformly into the root project space
|
|
set_target_properties(parselog_cli PROPERTIES
|
|
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
|
|
RUNTIME_OUTPUT_DIRECTORY_DEBUG "${CMAKE_CURRENT_SOURCE_DIR}"
|
|
RUNTIME_OUTPUT_DIRECTORY_RELEASE "${CMAKE_CURRENT_SOURCE_DIR}"
|
|
)
|
|
|
|
# ==========================================
|
|
# 4. TEST SUITE
|
|
# ==========================================
|
|
enable_testing()
|