aboutsummaryrefslogtreecommitdiff
path: root/CMakeLists.txt
blob: 449598ec7cb37a03037fcfc4936121d2ce1e77da (plain) (blame)
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
cmake_minimum_required(VERSION 3.0)
list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake)

# Prepare Plugins
set(PLUGINS omemo;openpgp)
if(DISABLED_PLUGINS)
    list(REMOVE_ITEM PLUGINS ${DISABLED_PLUGINS})
endif(DISABLED_PLUGINS)
if(ENABLED_PLUGINS)
    list(APPEND PLUGINS ${ENABLED_PLUGINS})
endif(ENABLED_PLUGINS)
list(REMOVE_DUPLICATES PLUGINS)

foreach(plugin ${PLUGINS})
    message(STATUS "Building plugin: ${plugin}")
    set(PLUGIN_ENABLED_${plugin} "yes")
endforeach(plugin)

# Prepare instal paths
macro(set_path what val desc)
    if(NOT ${what})
        unset(${what} CACHE)
        set(${what} ${val})
    endif()
    message(STATUS "${desc}: ${${what}}")
endmacro(set_path)

string(REGEX REPLACE "^liblib" "lib" LIBDIR_NAME "lib${LIB_SUFFIX}")
message(STATUS "Installation directory for architecture-independent files: ${CMAKE_INSTALL_PREFIX}")
set_path(EXEC_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}" "Installation directory for architecture-dependent files")
set_path(SHARE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}/share" "Installation directory for read-only architecture-independent data")

set_path(BIN_INSTALL_DIR "${EXEC_INSTALL_PREFIX}/bin" "Installation directory for user executables")
set_path(DATA_INSTALL_DIR "${SHARE_INSTALL_PREFIX}/dino" "Installation directory for dino-specific data")
set_path(DESKTOP_FILE_INSTALL_DIR "${SHARE_INSTALL_PREFIX}/applications" "Installation directory for .desktop files")
set_path(ICON_INSTALL_DIR "${SHARE_INSTALL_PREFIX}/icons" "Installation directory for icons")
set_path(INCLUDE_INSTALL_DIR "${EXEC_INSTALL_PREFIX}/include" "Installation directory for C header files")
set_path(LIB_INSTALL_DIR "${EXEC_INSTALL_PREFIX}/${LIBDIR_NAME}" "Installation directory for object code libraries")
set_path(PLUGIN_INSTALL_DIR "${LIB_INSTALL_DIR}/dino/plugins" "Installation directory for dino plugin object code files")
set_path(VAPI_INSTALL_DIR "${SHARE_INSTALL_PREFIX}/vala/vapi" "Installation directory for Vala API files")

set(TARGET_INSTALL LIBRARY DESTINATION ${LIB_INSTALL_DIR} RUNTIME DESTINATION ${BIN_INSTALL_DIR} PUBLIC_HEADER DESTINATION ${INCLUDE_INSTALL_DIR} ARCHIVE DESTINATION ${LIB_INSTALL_DIR})
set(PLUGIN_INSTALL LIBRARY DESTINATION ${PLUGIN_INSTALL_DIR} RUNTIME DESTINATION ${PLUGIN_INSTALL_DIR})

include(CheckCCompilerFlag)

macro(AddCFlagIfSupported flag)
    string(REGEX REPLACE "[^a-z^A-Z^_^0-9]+" "_" flag_name ${flag})
    CHECK_C_COMPILER_FLAG(${flag} COMPILER_SUPPORTS${flag_name})
    if(${COMPILER_SUPPORTS${flag_name}})
        set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${flag}")
    endif()
endmacro()

macro(AddValaCFlagIfSupported flag)
    string(REGEX REPLACE "[^a-z^A-Z^_^0-9]+" "_" flag_name ${flag})
    CHECK_C_COMPILER_FLAG(${flag} COMPILER_SUPPORTS${flag_name})
    if(${COMPILER_SUPPORTS${flag_name}})
        set(VALA_CFLAGS "${VALA_CFLAGS} ${flag}")
    endif()
endmacro()

if("Ninja" STREQUAL ${CMAKE_GENERATOR})
   AddCFlagIfSupported(-fdiagnostics-color COMPILER_SUPPORTS_fdiagnistics-color)
endif()

AddCFlagIfSupported(-Wall)
AddCFlagIfSupported(-Werror=format-security)

AddValaCFlagIfSupported(-Wno-deprecated-declarations)
AddValaCFlagIfSupported(-Wno-incompatible-pointer-types)
AddValaCFlagIfSupported(-Wno-pointer-sign)
AddValaCFlagIfSupported(-Wno-int-conversion)
AddValaCFlagIfSupported(-Wno-discarded-qualifiers)
AddValaCFlagIfSupported(-Wno-unused-but-set-variable)
AddValaCFlagIfSupported(-Wno-unused-variable)
AddValaCFlagIfSupported(-Wno-unused-function)
AddValaCFlagIfSupported(-Wno-unused-label)

if($ENV{USE_CCACHE})
    # Configure CCache if available
    find_program(CCACHE_FOUND ccache)
    if(CCACHE_FOUND)
        message(STATUS "Using ccache")
        set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ccache)
        set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK ccache)
    endif(CCACHE_FOUND)
endif($ENV{USE_CCACHE})

if(NOT NO_DEBUG)
    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g")
    set(CMAKE_VALA_FLAGS "${CMAKE_VALA_FLAGS} -g")
endif(NOT NO_DEBUG)

set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})

if(NOT VALA_EXECUTABLE)
    unset(VALA_EXECUTABLE CACHE)
endif()

find_package(Vala 0.30 REQUIRED)
if(VALA_VERSION VERSION_GREATER "0.34.90" AND VALA_VERSION VERSION_LESS "0.36.1")
    # Due to a bug on 0.36.0 (and pre-releases), we need to disable FAST_VAPI
    set(DISABLE_FAST_VAPI yes)
endif()

include(${VALA_USE_FILE})
include(MultiFind)
include(GlibCompileResourcesSupport)

set(GTK3_GLOBAL_VERSION 3.22)
set(GLib_GLOBAL_VERSION 2.38)

set(CMAKE_VALA_FLAGS "${CMAKE_VALA_FLAGS} --thread --target-glib=${GLib_GLOBAL_VERSION}")

add_subdirectory(qlite)
add_subdirectory(xmpp-vala)
add_subdirectory(libdino)
add_subdirectory(main)
add_subdirectory(plugins)

# uninstall target
configure_file("${CMAKE_SOURCE_DIR}/cmake/cmake_uninstall.cmake.in" "${CMAKE_BINARY_DIR}/cmake_uninstall.cmake" IMMEDIATE @ONLY)
add_custom_target(uninstall COMMAND ${CMAKE_COMMAND} -P ${CMAKE_BINARY_DIR}/cmake_uninstall.cmake COMMENT "Uninstall the project...")