summaryrefslogtreecommitdiff
path: root/TelepathyQt4Yell/CMakeLists.txt
blob: 3f0be285773359ba556fce80833301306420936b (plain)
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
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/_gen")

# Set the required flags found in TelepathyDefaults
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${VISIBILITY_HIDDEN_FLAGS} ${COMPILER_COVERAGE_FLAGS} ${DEPRECATED_DECLARATIONS_FLAGS}")
set(LD_FLAGS "${LD_FLAGS} ${VISIBILITY_HIDDEN_FLAGS} ${COMPILER_COVERAGE_FLAGS} ${DEPRECATED_DECLARATIONS_FLAGS}")

# We are building telepathy-qt4-yell
add_definitions(-DBUILDING_TELEPATHY_QT4_YELL)

# Sources for Tp-Qt4
set(telepathy_qt4_yell_SRCS
    call-channel.cpp
    call-channel-internal.h
    channel.cpp
    channel-class-spec.cpp
    channel-factory.cpp
    contact-capabilities.cpp
    requestable-channel-class-spec.cpp
    types.cpp)

# Exported headers for Tp-Qt4
set(telepathy_qt4_yell_HEADERS
    CallChannel
    CallContent
    CallStream
    Channel
    ChannelClassSpec
    ChannelFactory
    ChannelInterfaceCredentialsStorageInterface
    Constants
    ContactCapabilities
    Global
    PendingCallContent
    RequestableChannelClassSpec
    Types
    call-channel.h
    channel.h
    channel-class-spec.h
    channel-factory.h
    constants.h
    contact-capabilities.h
    global.h
    requestable-channel-class-spec.h
    types.h)

# Headers file moc will be run on
set(telepathy_qt4_yell_MOC_SRCS
    call-channel.h
    call-channel-internal.h
    channel.h)

# Generated headers which will be installed and exported
set(telepathy_qt4_yell_gen_HEADERS
    ${CMAKE_CURRENT_BINARY_DIR}/_gen/cli-channel.h
    ${CMAKE_CURRENT_BINARY_DIR}/_gen/constants.h
    ${CMAKE_CURRENT_BINARY_DIR}/_gen/types.h)

# The escape character in MSVC is ^
if(MSVC)
    set(TYPES_INCLUDE ^<TelepathyQt4Yell/Types^> )
    set(GLOBAL_INCLUDE ^<TelepathyQt4Yell/Global^> )
    set(CHANNEL_EXTRA_INCLUDES '^<TelepathyQt4Yell/Types^>,^<TelepathyQt4/Channel^>' )
else(MSVC)
    set(TYPES_INCLUDE '<TelepathyQt4Yell/Types>' )
    set(GLOBAL_INCLUDE '<TelepathyQt4Yell/Global>' )
    set(CHANNEL_EXTRA_INCLUDES '<TelepathyQt4Yell/Types>,<TelepathyQt4/Channel>' )
endif(MSVC)

# Generate the spec files
set(gen_stable_spec_xml ${CMAKE_CURRENT_BINARY_DIR}/_gen/stable-spec.xml)

tpqt4_xincludator(stable-ifaces-includator ${CMAKE_CURRENT_SOURCE_DIR}/stable-interfaces.xml ${gen_stable_spec_xml})

tpqt4_constants_gen(stable-constants ${gen_stable_spec_xml} ${CMAKE_CURRENT_BINARY_DIR}/_gen/constants.h
                    --namespace=Tpy
                    --define-prefix=TP_QT4_YELL_
                    --must-define=IN_TELEPATHY_QT4_YELL_HEADER
                    DEPENDS stable-ifaces-includator)

tpqt4_types_gen(stable-typesgen ${gen_stable_spec_xml}
                ${CMAKE_CURRENT_BINARY_DIR}/_gen/types.h ${CMAKE_CURRENT_BINARY_DIR}/_gen/types-body.hpp
                Tpy TelepathyQt4Yell/types.h TelepathyQt4Yell/Types
                --must-define=IN_TELEPATHY_QT4_YELL_HEADER
                --visibility=TELEPATHY_QT4_YELL_EXPORT
                --extraincludes=${GLOBAL_INCLUDE}
                DEPENDS stable-constants)

# Add the generated types to the library's sources
list(APPEND telepathy_qt4_yell_SRCS ${CMAKE_CURRENT_BINARY_DIR}/_gen/types.h)
list(APPEND telepathy_qt4_yell_SRCS ${CMAKE_CURRENT_BINARY_DIR}/_gen/types-body.hpp)

# For each spec, generate a cli file and add it to the sources (including mocs).
set(SPECS
    channel)
foreach(spec ${SPECS})
    tpqt4_xincludator(${spec}-spec-xincludator ${CMAKE_CURRENT_SOURCE_DIR}/${spec}.xml ${CMAKE_CURRENT_BINARY_DIR}/_gen/spec-${spec}.xml
                      DEPENDS stable-typesgen)
    set(NEW_FILES
        ${CMAKE_CURRENT_BINARY_DIR}/_gen/cli-${spec}-body.hpp
        ${CMAKE_CURRENT_BINARY_DIR}/_gen/cli-${spec}.moc.hpp)
    list(APPEND telepathy_qt4_yell_SRCS ${NEW_FILES})
    list(APPEND telepathy_qt4_yell_generated_specs_mocs "moc-cli-${spec}.moc.hpp")
    set_source_files_properties(${NEW_FILES} PROPERTIES GENERATED true)
endforeach(spec ${SPECS})

# Use the client generator for generating headers out of specs
tpqt4_client_generator(${gen_stable_spec_xml} channel clientchannel TelepathyQt4Yell/channel.h TelepathyQt4Yell/Channel Tpy::Client Tpy IN_TELEPATHY_QT4_YELL_HEADER TELEPATHY_QT4_YELL_EXPORT --mainiface=Tp::Client::ChannelInterface --extraincludes=${CHANNEL_EXTRA_INCLUDES} DEPENDS channel-spec-xincludator)

# Create the library
add_library(telepathy-qt4-yell STATIC ${telepathy_qt4_yell_SRCS})

# generate client moc files
foreach(moc_src ${telepathy_qt4_yell_MOC_SRCS})
    set(generated_file _gen/${moc_src})
    string(REPLACE ".h" ".moc.hpp" generated_file ${generated_file})
    tpqt4_generate_moc_i_target_deps(${CMAKE_CURRENT_SOURCE_DIR}/${moc_src} ${CMAKE_CURRENT_BINARY_DIR}/${generated_file}
                                     ${telepathy_qt4_yell_generated_specs_mocs})
    list(APPEND telepathy_qt4_yell_SRCS ${CMAKE_CURRENT_BINARY_DIR}/${generated_file})
    string(REPLACE ".h" ".moc.hpp" moc_src ${moc_src})
    add_dependencies(telepathy-qt4-yell "moc-${moc_src}")
endforeach(moc_src ${telepathy_qt4_yell_MOC_SRCS})

# Link
target_link_libraries(telepathy-qt4-yell
    ${QT_QTCORE_LIBRARY}
    ${QT_QTDBUS_LIBRARY}
    ${TELEPATHY_QT4_LIBRARIES})

if (ENABLE_COMPILER_COVERAGE)
    target_link_libraries(telepathy-qt4-yell gcov)
endif (ENABLE_COMPILER_COVERAGE)

# Set the correct version number
set_target_properties(telepathy-qt4-yell PROPERTIES
                      SOVERSION ${TP_QT4_YELL_ABI_VERSION}
                      VERSION ${TP_QT4_YELL_LIBRARY_VERSION})

# Install header files
install(FILES ${telepathy_qt4_yell_HEADERS} DESTINATION ${INCLUDE_INSTALL_DIR}/telepathy-1.0/TelepathyQt4Yell COMPONENT headers)
install(FILES ${telepathy_qt4_yell_gen_HEADERS} DESTINATION ${INCLUDE_INSTALL_DIR}/telepathy-1.0/TelepathyQt4Yell/_gen COMPONENT headers)

# Install the library - watch out for the correct components
if (WIN32)
    install(TARGETS telepathy-qt4-yell RUNTIME DESTINATION ${LIB_INSTALL_DIR} COMPONENT mainlibrary
                                  ARCHIVE DESTINATION ${LIB_INSTALL_DIR} COMPONENT headers)
else (WIN32)
    install(TARGETS telepathy-qt4-yell LIBRARY DESTINATION ${LIB_INSTALL_DIR} COMPONENT mainlibrary
                                  ARCHIVE DESTINATION ${LIB_INSTALL_DIR} COMPONENT headers)
endif (WIN32)

# pkg-config file
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/TelepathyQt4Yell.pc.in ${CMAKE_CURRENT_BINARY_DIR}/TelepathyQt4Yell.pc)
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/TelepathyQt4Yell-uninstalled.pc.in ${CMAKE_CURRENT_BINARY_DIR}/TelepathyQt4Yell-uninstalled.pc)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/TelepathyQt4Yell.pc DESTINATION ${LIB_INSTALL_DIR}/pkgconfig COMPONENT headers)

add_subdirectory(Models)

# If Farstream was found, install its pkg-config files as well, and go into the subdirectory
if(FARSTREAM_COMPONENTS_FOUND)
    configure_file(${CMAKE_CURRENT_SOURCE_DIR}/TelepathyQt4YellFarstream.pc.in ${CMAKE_CURRENT_BINARY_DIR}/TelepathyQt4YellFarstream.pc)
    configure_file(${CMAKE_CURRENT_SOURCE_DIR}/TelepathyQt4YellFarstream-uninstalled.pc.in ${CMAKE_CURRENT_BINARY_DIR}/TelepathyQt4YellFarstream-uninstalled.pc)
    install(FILES ${CMAKE_CURRENT_BINARY_DIR}/TelepathyQt4YellFarstream.pc DESTINATION ${LIB_INSTALL_DIR}/pkgconfig COMPONENT farstream_headers)
endif(FARSTREAM_COMPONENTS_FOUND)

add_subdirectory(Farstream)