cmake_minimum_required(VERSION 3.1.0) # Threads::Threads is needed

project(fastfetch)

option(BUILD_TESTS "Build test programs" OFF)

execute_process(
    COMMAND git rev-list --count HEAD
    WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
    OUTPUT_VARIABLE GIT_REV_LIST
    OUTPUT_STRIP_TRAILING_WHITESPACE
)
execute_process(
    COMMAND git rev-parse --short HEAD
    WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
    OUTPUT_VARIABLE GIT_REV_PARSE
    OUTPUT_STRIP_TRAILING_WHITESPACE
)

set(PROJECT_VERSION "r${GIT_REV_LIST}.${GIT_REV_PARSE}")

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -O3")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-O3")

if(BUILD_TESTS)
    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=native -mtune=native -pipe -fno-plt -Wconversion -Wpedantic")
endif(BUILD_TESTS)

configure_file(src/fastfetch_config.h.in fastfetch_config.h)

set(THREADS_PREFER_PTHREAD_FLAG ON)
find_package(Threads REQUIRED)

find_package (PkgConfig)

if(${PkgConfig_FOUND})
    pkg_check_modules (GLIB2 glib-2.0)
endif(${PkgConfig_FOUND})

if(NOT DEFINED GLIB2_INCLUDE_DIRS)
    set(GLIB2_INCLUDE_DIRS
        /usr/include/glib-2.0/
        /usr/lib/glib-2.0/include/
    )
endif(NOT DEFINED GLIB2_INCLUDE_DIRS)

include_directories(
    ${PROJECT_BINARY_DIR}
    ${PROJECT_SOURCE_DIR}/src
    ${GLIB2_INCLUDE_DIRS}
)

link_libraries(
    ${CMAKE_DL_LIBS}
    Threads::Threads
)

set(SRCS
    src/util/FFstrbuf.c
    src/util/FFlist.c
    src/common/init.c
    src/common/threading.c
    src/common/io.c
    src/common/processing.c
    src/common/logo.c
    src/common/format.c
    src/common/parsing.c
    src/common/dconf.c
    src/common/detectPlasma.c
    src/common/detectGTK.c
    src/common/detectWMDE.c
    src/modules/break.c
    src/modules/custom.c
    src/modules/title.c
    src/modules/seperator.c
    src/modules/os.c
    src/modules/host.c
    src/modules/kernel.c
    src/modules/uptime.c
    src/modules/packages.c
    src/modules/shell.c
    src/modules/resolution.c
    src/modules/resolution_x11.c
    src/modules/resolution_wayland.c
    src/modules/de.c
    src/modules/wm.c
    src/modules/wmtheme.c
    src/modules/theme.c
    src/modules/icons.c
    src/modules/font.c
    src/modules/terminal.c
    src/modules/terminalfont.c
    src/modules/cpu.c
    src/modules/gpu.c
    src/modules/memory.c
    src/modules/disk.c
    src/modules/battery.c
    src/modules/locale.c
    src/modules/colors.c
)

add_executable(fastfetch
    src/fastfetch.c
    src/util/FFvaluestore.c
    ${SRCS}
)

add_executable(flashfetch
    src/flashfetch.c
    ${SRCS}
)

target_compile_definitions(flashfetch PUBLIC
    FASTFETCH_BUILD_FLASHFETCH
)

if(BUILD_TESTS)
    add_executable(fastfetch-test-performance
        tests/performance.c
        ${SRCS}
    )
endif(BUILD_TESTS)
