1 ############################################################################
3 # Copyright 2014 BMW Car IT GmbH
6 # Licensed under the Apache License, Version 2.0 (the "License");
7 # you may not use this file except in compliance with the License.
8 # You may obtain a copy of the License at
10 # http://www.apache.org/licenses/LICENSE-2.0
12 # Unless required by applicable law or agreed to in writing, software
13 # distributed under the License is distributed on an "AS IS" BASIS,
14 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 # See the License for the specific language governing permissions and
16 # limitations under the License.
18 ############################################################################
20 cmake_minimum_required (VERSION 2.6)
22 project(ivi-extension-protocol)
24 find_package(PkgConfig REQUIRED)
25 pkg_check_modules(WAYLAND_CLIENT wayland-client REQUIRED)
26 pkg_check_modules(WAYLAND_SERVER wayland-server REQUIRED)
28 find_program(WAYLAND_SCANNER_EXECUTABLE NAMES wayland-scanner)
31 OUTPUT ivi-application-client-protocol.h
32 COMMAND ${WAYLAND_SCANNER_EXECUTABLE} client-header
33 < ${CMAKE_SOURCE_DIR}/protocol/ivi-application.xml
34 > ${CMAKE_CURRENT_BINARY_DIR}/ivi-application-client-protocol.h
35 DEPENDS ${CMAKE_SOURCE_DIR}/protocol/ivi-application.xml
39 OUTPUT ivi-application-server-protocol.h
40 COMMAND ${WAYLAND_SCANNER_EXECUTABLE} server-header
41 < ${CMAKE_SOURCE_DIR}/protocol/ivi-application.xml
42 > ${CMAKE_CURRENT_BINARY_DIR}/ivi-application-server-protocol.h
43 DEPENDS ${CMAKE_SOURCE_DIR}/protocol/ivi-application.xml
47 OUTPUT ivi-application-protocol.c
48 COMMAND ${WAYLAND_SCANNER_EXECUTABLE} code
49 < ${CMAKE_SOURCE_DIR}/protocol/ivi-application.xml
50 > ${CMAKE_CURRENT_BINARY_DIR}/ivi-application-protocol.c
51 DEPENDS ${CMAKE_SOURCE_DIR}/protocol/ivi-application.xml
55 OUTPUT ivi-controller-client-protocol.h
56 COMMAND ${WAYLAND_SCANNER_EXECUTABLE} client-header
57 < ${CMAKE_SOURCE_DIR}/protocol/ivi-controller.xml
58 > ${CMAKE_CURRENT_BINARY_DIR}/ivi-controller-client-protocol.h
59 DEPENDS ${CMAKE_SOURCE_DIR}/protocol/ivi-controller.xml
63 OUTPUT ivi-controller-server-protocol.h
64 COMMAND ${WAYLAND_SCANNER_EXECUTABLE} server-header
65 < ${CMAKE_SOURCE_DIR}/protocol/ivi-controller.xml
66 > ${CMAKE_CURRENT_BINARY_DIR}/ivi-controller-server-protocol.h
67 DEPENDS ${CMAKE_SOURCE_DIR}/protocol/ivi-controller.xml
71 OUTPUT ivi-controller-protocol.c
72 COMMAND ${WAYLAND_SCANNER_EXECUTABLE} code
73 < ${CMAKE_SOURCE_DIR}/protocol/ivi-controller.xml
74 > ${CMAKE_CURRENT_BINARY_DIR}/ivi-controller-protocol.c
75 DEPENDS ${CMAKE_SOURCE_DIR}/protocol/ivi-controller.xml
79 ${CMAKE_CURRENT_BINARY_DIR}
80 ${WAYLAND_CLIENT_INCLUDE_DIRS}
81 ${WAYLAND_SERVER_INCLUDE_DIRS}
85 ${WAYLAND_CLIENT_LIBRARY_DIRS}
86 ${WAYLAND_SERVER_LIBRARY_DIRS}
89 add_library(${PROJECT_NAME} STATIC
90 ${CMAKE_CURRENT_BINARY_DIR}/ivi-application-client-protocol.h
91 ${CMAKE_CURRENT_BINARY_DIR}/ivi-application-server-protocol.h
92 ${CMAKE_CURRENT_BINARY_DIR}/ivi-application-protocol.c
93 ${CMAKE_CURRENT_BINARY_DIR}/ivi-controller-client-protocol.h
94 ${CMAKE_CURRENT_BINARY_DIR}/ivi-controller-server-protocol.h
95 ${CMAKE_CURRENT_BINARY_DIR}/ivi-controller-protocol.c
99 #=============================================================================================
100 # generate documentation for ivi-application API
101 #=============================================================================================
102 SET(IVI_APP_XML ${CMAKE_CURRENT_SOURCE_DIR}/ivi-application.xml)
103 SET(IVI_APP_CLIENT_H ${CMAKE_CURRENT_BINARY_DIR}/ivi-application-client.h)
104 SET(IVI_APP_SERVER_H ${CMAKE_CURRENT_BINARY_DIR}/ivi-application-server.h)
106 add_custom_target(ivi-application-doc
107 COMMAND wayland-scanner client-header < ${IVI_APP_XML} > ${IVI_APP_CLIENT_H}
108 COMMAND wayland-scanner server-header < ${IVI_APP_XML} > ${IVI_APP_SERVER_H}
110 COMMAND cat ${CMAKE_SOURCE_DIR}/doc/Doxyfile.template
111 | sed 's!___DOC_NAME___!IVI Application API!'
112 | sed 's!___DOC_VERSION___!${IVI_EXTENSION_VERSION}!'
113 | sed 's!___INPUT_FILE___!${IVI_APP_CLIENT_H} ${IVI_APP_SERVER_H}!'
114 | sed 's!___OUTPUT_DIR___!ivi-application-tmp!'
117 COMMAND make --silent -C ivi-application-tmp/latex
119 COMMAND cp ivi-application-tmp/latex/refman.pdf
120 ${CMAKE_BINARY_DIR}/ivi-application-api-${IVI_EXTENSION_VERSION}.pdf
122 DEPENDS ${IVI_APP_XML}
124 COMMENT "Generating ivi-application-api-${IVI_EXTENSION_VERSION}.pdf"
127 #=============================================================================================
128 # generate documentation ivi-controller API
129 #=============================================================================================
130 SET(IVI_CTL_XML ${CMAKE_CURRENT_SOURCE_DIR}/ivi-controller.xml)
131 SET(IVI_CTL_CLIENT_H ${CMAKE_CURRENT_BINARY_DIR}/ivi-controller-client.h)
132 SET(IVI_CTL_SERVER_H ${CMAKE_CURRENT_BINARY_DIR}/ivi-controller-server.h)
134 add_custom_target(ivi-controller-doc
135 COMMAND wayland-scanner client-header < ${IVI_CTL_XML} > ${IVI_CTL_CLIENT_H}
136 COMMAND wayland-scanner server-header < ${IVI_CTL_XML} > ${IVI_CTL_SERVER_H}
138 COMMAND cat ${CMAKE_SOURCE_DIR}/doc/Doxyfile.template
139 | sed 's!___DOC_NAME___!IVI Controller API!'
140 | sed 's!___DOC_VERSION___!${IVI_EXTENSION_VERSION}!'
141 | sed 's!___INPUT_FILE___!${IVI_CTL_CLIENT_H} ${IVI_CTL_SERVER_H}!'
142 | sed 's!___OUTPUT_DIR___!ivi-controller-tmp!'
145 COMMAND make --silent -C ivi-controller-tmp/latex
147 COMMAND cp ivi-controller-tmp/latex/refman.pdf
148 ${CMAKE_BINARY_DIR}/ivi-controller-api-${IVI_EXTENSION_VERSION}.pdf
150 DEPENDS ${IVI_CTL_XML}
152 COMMENT "Generating ivi-controller-api-${IVI_EXTENSION_VERSION}.pdf"