~whdd/whdd/whdd-baltix

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
cmake_minimum_required(VERSION 2.8.4)
include(ExternalProject)
project(whdd)

option(STATIC "Build static binaries" OFF)
option(CLI "Build whdd-cli" OFF)

set(CMAKE_C_FLAGS "-std=gnu99 -pthread -Wall -Wextra -Wno-missing-field-initializers ${CFLAGS}")
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS}")
set(CMAKE_C_FLAGS_DEBUG "-O0 -g -ggdb ${CMAKE_C_FLAGS}")

set(CLI_SRCS
    cli/main.c
    ui_mutual.c
    )

set(CUI_SRCS
    cui/main.c
    cui/ncurses_convenience.c
    cui/vis.c
    ui_mutual.c
    cui/sliding_window_renderer.c
    cui/whole_space_renderer.c
    )

set(LIBDEVCHECK_SRCS
    libdevcheck/procedure.c
    libdevcheck/libdevcheck.c
    libdevcheck/read_test.c
    libdevcheck/utils.c
    libdevcheck/posix_write_zeros.c
    libdevcheck/log.c
    libdevcheck/ata.c
    libdevcheck/scsi.c
    libdevcheck/copy.c
    libdevcheck/copy_read_strategies.c
    libdevcheck/render.c
    libdevcheck/hpa_set.c
    libdevcheck/smart_show.c
    )

include_directories(
    cli
    cui
    libdevcheck
    .
    )

include(CheckSymbolExists)
check_symbol_exists(CLOCK_MONOTONIC_RAW "time.h" HAVE_CLOCK_MONOTONIC_RAW)
configure_file(libdevcheck/config.h.in ${CMAKE_SOURCE_DIR}/config.h)

set_source_files_properties(version.h PROPERTIES GENERATED true HEADER_FILE_ONLY TRUE)
add_custom_target(version ALL)
add_custom_command(TARGET version COMMAND ${CMAKE_SOURCE_DIR}/version.sh ${CMAKE_SOURCE_DIR} ${CMAKE_SOURCE_DIR}/version.h)

if (${CLI})
    add_executable(whdd-cli
        ${CLI_SRCS}
        ${LIBDEVCHECK_SRCS}
        )
    add_dependencies(whdd-cli version)
    target_link_libraries(whdd-cli rt pthread)
    install(TARGETS whdd-cli DESTINATION sbin)
endif(${CLI})

add_executable(whdd
    ${CUI_SRCS}
    ${LIBDEVCHECK_SRCS}
    )

add_dependencies(whdd version)
target_link_libraries(whdd rt pthread)

if (${STATIC})

    # Set vars containing to deps builds
    set(NCURSES_DIR "${CMAKE_CURRENT_SOURCE_DIR}/external/ncurses/install/")
    set(DIALOG_DIR "${CMAKE_CURRENT_SOURCE_DIR}/external/dialog/dialog-prefix/src/dialog/")

    # Set include paths
    include_directories(BEFORE SYSTEM
        ${NCURSES_DIR}/include
        ${NCURSES_DIR}/include/ncursesw
        ${DIALOG_DIR}
        )

    add_subdirectory(external/dialog)
    add_dependencies(whdd dialog)

    add_library(ncurses_lib STATIC IMPORTED)
    set_property(TARGET ncurses_lib PROPERTY IMPORTED_LOCATION "${NCURSES_DIR}/lib/libncursesw.a")
    add_library(menu_lib STATIC IMPORTED)
    set_property(TARGET menu_lib PROPERTY IMPORTED_LOCATION "${NCURSES_DIR}/lib/libmenuw.a")
    add_library(tinfo_lib STATIC IMPORTED)
    set_property(TARGET tinfo_lib PROPERTY IMPORTED_LOCATION "${NCURSES_DIR}/lib/libtinfow.a")
    add_library(dialog_lib STATIC IMPORTED)
    set_property(TARGET dialog_lib PROPERTY IMPORTED_LOCATION "${DIALOG_DIR}/libdialog.a")

    target_link_libraries(whdd dialog_lib)
    target_link_libraries(whdd menu_lib)
    target_link_libraries(whdd ncurses_lib)
    target_link_libraries(whdd tinfo_lib)
    target_link_libraries(whdd dl)
    target_link_libraries(whdd m)

else (${STATIC})

    set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/modules")
    find_package(DIALOG REQUIRED)
    if (NOT DIALOG_FOUND)
        message(FATAL_ERROR "Dialog library not found")
    endif(NOT DIALOG_FOUND)
    include_directories(${DIALOG_INCLUDE_DIRS})

    find_library(MENUW_LIBRARY menuw)
    find_library(TINFO_LIBRARY tinfo)
    find_library(NCURSESW_LIBRARY ncursesw)
    if (NOT (MENUW_LIBRARY AND NCURSESW_LIBRARY))
        message(FATAL_ERROR "Ncurses libraries (ncursesw, menuw) not found")
    endif(NOT (MENUW_LIBRARY AND NCURSESW_LIBRARY))

    if (TINFO_LIBRARY)
        target_link_libraries(whdd ${TINFO_LIBRARY})
    endif (TINFO_LIBRARY)

    target_link_libraries(whdd
        ${DIALOG_LIBRARIES} ${MENUW_LIBRARY} ${NCURSESW_LIBRARY} rt pthread)

    install(TARGETS whdd DESTINATION sbin)

    # Packaging stuff
    # 'make package_source' to make tarball
    set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "WHDD is a diagnostic and recovery tool for block devices.")
    set(CPACK_PACKAGE_VENDOR "Andrey Utkin <andrey.od.utkin@gmail.com>")
    set(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/README")
    set(CPACK_PACKAGE_VERSION ${WHDD_VERSION})
    #set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/COPYING")
    set(CPACK_SOURCE_PACKAGE_FILE_NAME
        "${CMAKE_PROJECT_NAME}-${CPACK_PACKAGE_VERSION}")
    set(CPACK_SOURCE_GENERATOR TBZ2)
    include(CPack)

endif (${STATIC})