source: ogBrowser-Git/qtermwidget/CMakeLists.txt

jenkins
Last change on this file was 2ff26a8, checked in by Vadim Troshchinskiy Shmelev <vtroshchinskiy@…>, 2 months ago

fix versioning some more

  • Property mode set to 100644
File size: 10.9 KB
Line 
1cmake_minimum_required(VERSION 3.5 FATAL_ERROR)
2# CMP0000: Call the cmake_minimum_required() command at the beginning of the top-level
3# CMakeLists.txt file even before calling the project() command.
4# The cmake_minimum_required(VERSION) command implicitly invokes the cmake_policy(VERSION)
5# command to specify that the current project code is written for the given range of CMake
6# versions.
7project(qtermwidget)
8
9include(GNUInstallDirs)
10include(GenerateExportHeader)
11include(CMakePackageConfigHelpers)
12include(CheckFunctionExists)
13include(CheckIncludeFile)
14
15option(UPDATE_TRANSLATIONS "Update source translation translations/*.ts files" OFF)
16option(BUILD_EXAMPLE "Build example application. Default OFF." OFF)
17option(QTERMWIDGET_USE_UTEMPTER "Uses libutempter on Linux or libulog on FreeBSD for login records." OFF)
18option(QTERMWIDGET_BUILD_PYTHON_BINDING "Build python binding" OFF)
19option(USE_UTF8PROC "Use libutf8proc for better Unicode support. Default OFF" OFF)
20option(USE_QT5 "Use Qt 5 instead of Qt6 (if available). Default OFF" OFF)
21
22# just change version for releases
23# keep this in sync with the version in pyqt/pyproject.toml
24set(QTERMWIDGET_VERSION_MAJOR "1")
25set(QTERMWIDGET_VERSION_MINOR "3")
26set(QTERMWIDGET_VERSION_PATCH "0")
27
28set(QTERMWIDGET_VERSION "${QTERMWIDGET_VERSION_MAJOR}.${QTERMWIDGET_VERSION_MINOR}.${QTERMWIDGET_VERSION_PATCH}")
29
30# additional cmake files
31set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${PROJECT_SOURCE_DIR}/cmake")
32set(CMAKE_INCLUDE_CURRENT_DIR ON)
33
34# Minimum Versions
35set(QT_MINIMUM_VERSION "5.15.0")
36set(QT6_MINIMUM_VERSION "6.1.0")
37set(LXQTBT_MINIMUM_VERSION "0.10.0")
38
39if (NOT USE_QT5)
40    find_package(Qt6 COMPONENTS Widgets)
41    if (NOT Qt6_FOUND)
42        find_package(Qt5Widgets "${QT_MINIMUM_VERSION}" REQUIRED)
43        find_package(Qt5LinguistTools "${QT_MINIMUM_VERSION}" REQUIRED)
44    endif()
45
46    if (Qt6_FOUND)
47        find_package(Qt6Widgets "${QT6_MINIMUM_VERSION}" REQUIRED)
48        find_package(Qt6LinguistTools "${QT6_MINIMUM_VERSION}" REQUIRED)
49        find_package(Qt6Core5Compat "${QT6_MINIMUM_VERSION}" REQUIRED)
50    endif()
51else()
52    find_package(Qt5Widgets "${QT_MINIMUM_VERSION}" REQUIRED)
53    find_package(Qt5LinguistTools "${QT_MINIMUM_VERSION}" REQUIRED)
54endif()
55
56find_package(lxqt-build-tools ${LXQTBT_MINIMUM_VERSION} QUIET)
57if (NOT lxqt-build-tools_FOUND)
58    find_package(lxqt2-build-tools ${LXQTBT_MINIMUM_VERSION} REQUIRED)
59endif()
60
61if(USE_UTF8PROC)
62    find_package(Utf8Proc REQUIRED)
63endif()
64
65include(LXQtPreventInSourceBuilds)
66include(LXQtTranslateTs)
67include(LXQtCompilerSettings NO_POLICY_SCOPE)
68include(LXQtCreatePkgConfigFile)
69
70if(APPLE)
71    if(CMAKE_VERSION VERSION_GREATER 3.9)
72        cmake_policy(SET CMP0068 NEW)
73        set(CMAKE_BUILD_WITH_INSTALL_NAME_DIR ON)
74    endif()
75endif()
76
77if (NOT Qt6_FOUND)
78    set(QTERMWIDGET_LIBRARY_NAME qtermwidget5)
79else()
80    set(QTERMWIDGET_LIBRARY_NAME qtermwidget6)
81endif()
82
83# main library
84
85set(SRCS
86    lib/BlockArray.cpp
87    lib/ColorScheme.cpp
88    lib/Emulation.cpp
89    lib/Filter.cpp
90    lib/History.cpp
91    lib/HistorySearch.cpp
92    lib/KeyboardTranslator.cpp
93    lib/konsole_wcwidth.cpp
94    lib/kprocess.cpp
95    lib/kpty.cpp
96    lib/kptydevice.cpp
97    lib/kptyprocess.cpp
98    lib/Pty.cpp
99    lib/qtermwidget.cpp
100    lib/Screen.cpp
101    lib/ScreenWindow.cpp
102    lib/SearchBar.cpp
103    lib/Session.cpp
104    lib/ShellCommand.cpp
105    lib/TerminalCharacterDecoder.cpp
106    lib/TerminalDisplay.cpp
107    lib/tools.cpp
108    lib/Vt102Emulation.cpp
109)
110
111# Only the Headers that need to be moc'd go here
112set(HDRS
113    lib/Emulation.h
114    lib/Filter.h
115    lib/HistorySearch.h
116    lib/kprocess.h
117    lib/kptydevice.h
118    lib/kptyprocess.h
119    lib/Pty.h
120    lib/qtermwidget.h
121    lib/ScreenWindow.h
122    lib/SearchBar.h
123    lib/Session.h
124    lib/TerminalDisplay.h
125    lib/Vt102Emulation.h
126)
127
128set(UI
129    lib/SearchBar.ui
130)
131
132# for distribution
133set(HDRS_DISTRIB
134    lib/qtermwidget.h
135    lib/Emulation.h
136    lib/KeyboardTranslator.h
137    lib/Filter.h
138    lib/qtermwidget_interface.h
139)
140
141# dirs
142set(KB_LAYOUT_DIR "${CMAKE_INSTALL_FULL_DATADIR}/${QTERMWIDGET_LIBRARY_NAME}/kb-layouts")
143message(STATUS "Keyboard layouts will be installed in: ${KB_LAYOUT_DIR}")
144
145set(COLORSCHEMES_DIR "${CMAKE_INSTALL_FULL_DATADIR}/${QTERMWIDGET_LIBRARY_NAME}/color-schemes")
146message(STATUS "Color schemes will be installed in: ${COLORSCHEMES_DIR}" )
147
148set(TRANSLATIONS_DIR "${CMAKE_INSTALL_FULL_DATADIR}/${QTERMWIDGET_LIBRARY_NAME}/translations")
149message(STATUS "Translations will be installed in: ${TRANSLATIONS_DIR}")
150
151set(QTERMWIDGET_INCLUDE_DIR "${CMAKE_INSTALL_FULL_INCLUDEDIR}/${QTERMWIDGET_LIBRARY_NAME}")
152
153CHECK_FUNCTION_EXISTS(updwtmpx HAVE_UPDWTMPX)
154
155if (NOT USE_QT5)
156    if (NOT Qt6_FOUND)
157        qt5_wrap_cpp(MOCS ${HDRS})
158        qt5_wrap_ui(UI_SRCS ${UI})
159        set(PKG_CONFIG_REQ "Qt5Widgets")
160    else()
161        qt6_wrap_cpp(MOCS ${HDRS})
162        qt6_wrap_ui(UI_SRCS ${UI})
163        set(PKG_CONFIG_REQ "Qt6Widgets")
164    endif()
165else()
166    qt5_wrap_cpp(MOCS ${HDRS})
167    qt5_wrap_ui(UI_SRCS ${UI})
168    set(PKG_CONFIG_REQ "Qt5Widgets")
169endif()
170
171lxqt_translate_ts(QTERMWIDGET_QM
172    TRANSLATION_DIR "lib/translations"
173    UPDATE_TRANSLATIONS
174        ${UPDATE_TRANSLATIONS}
175    SOURCES
176        ${SRCS} ${HDRS} ${UI}
177    INSTALL_DIR
178        ${TRANSLATIONS_DIR}
179    COMPONENT
180        Runtime
181)
182
183add_library(${QTERMWIDGET_LIBRARY_NAME} SHARED ${SRCS} ${MOCS} ${UI_SRCS} ${QTERMWIDGET_QM})
184if (NOT USE_QT5)
185    if (NOT Qt6_FOUND)
186        target_link_libraries(${QTERMWIDGET_LIBRARY_NAME} Qt5::Widgets)
187    else()
188        target_link_libraries(${QTERMWIDGET_LIBRARY_NAME} Qt6::Widgets)
189        target_link_libraries(${QTERMWIDGET_LIBRARY_NAME} Qt6::Core5Compat)
190    endif()
191else()
192    target_link_libraries(${QTERMWIDGET_LIBRARY_NAME} Qt5::Widgets)
193endif()
194
195set_target_properties( ${QTERMWIDGET_LIBRARY_NAME} PROPERTIES
196                       SOVERSION ${QTERMWIDGET_VERSION_MAJOR}
197                       VERSION ${QTERMWIDGET_VERSION}
198                     )
199
200
201if(APPLE)
202    target_compile_definitions(${QTERMWIDGET_LIBRARY_NAME}
203        PRIVATE
204            "HAVE_UTMPX"
205            "UTMPX_COMPAT"
206    )
207endif()
208
209if(HAVE_UPDWTMPX)
210    target_compile_definitions(${QTERMWIDGET_LIBRARY_NAME}
211        PRIVATE
212            "HAVE_UPDWTMPX"
213    )
214endif()
215
216if (QTERMWIDGET_USE_UTEMPTER)
217    CHECK_INCLUDE_FILE(utempter.h HAVE_UTEMPTER)
218    if (HAVE_UTEMPTER)
219        target_compile_definitions(${QTERMWIDGET_LIBRARY_NAME} PRIVATE
220                "HAVE_UTEMPTER"
221        )
222        find_library(UTEMPTER_LIB NAMES utempter ulog REQUIRED)
223        target_link_libraries(${QTERMWIDGET_LIBRARY_NAME} ${UTEMPTER_LIB})
224    endif()
225endif()
226
227if (UTF8PROC_FOUND)
228    target_compile_definitions(${QTERMWIDGET_LIBRARY_NAME}
229        PRIVATE
230            "HAVE_UTF8PROC"
231    )
232    target_include_directories(${QTERMWIDGET_LIBRARY_NAME}
233        INTERFACE
234            ${UTF8PROC_INCLUDE_DIRS}
235    )
236    target_link_libraries(${QTERMWIDGET_LIBRARY_NAME}
237        ${UTF8PROC_LIBRARIES}
238    )
239    string(APPEND PKG_CONFIG_REQ ", libutf8proc")
240endif()
241
242if(APPLE)
243    set (CMAKE_SKIP_RPATH 1)
244    # this is a must to load the lib correctly
245    set_target_properties(${QTERMWIDGET_LIBRARY_NAME} PROPERTIES INSTALL_NAME_DIR ${CMAKE_INSTALL_FULL_LIBDIR})
246endif()
247
248target_compile_definitions(${QTERMWIDGET_LIBRARY_NAME}
249    PRIVATE
250        "KB_LAYOUT_DIR=\"${KB_LAYOUT_DIR}\""
251        "COLORSCHEMES_DIR=\"${COLORSCHEMES_DIR}\""
252        "TRANSLATIONS_DIR=\"${TRANSLATIONS_DIR}\""
253        "HAVE_POSIX_OPENPT"
254        "HAVE_SYS_TIME_H"
255)
256
257
258generate_export_header(${QTERMWIDGET_LIBRARY_NAME}
259    EXPORT_FILE_NAME "${CMAKE_CURRENT_BINARY_DIR}/lib/qtermwidget_export.h"
260    BASE_NAME QTERMWIDGET
261)
262
263target_include_directories(${QTERMWIDGET_LIBRARY_NAME}
264    PUBLIC
265        "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/lib>"
266        "$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/lib>"
267        "$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/../lib>"
268    INTERFACE
269        "$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>"
270        "$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/${QTERMWIDGET_LIBRARY_NAME}>"
271)
272
273write_basic_package_version_file(
274    "${CMAKE_BINARY_DIR}/${QTERMWIDGET_LIBRARY_NAME}-config-version.cmake"
275    VERSION ${QTERMWIDGET_VERSION}
276    COMPATIBILITY AnyNewerVersion
277)
278
279install(FILES
280    "${CMAKE_BINARY_DIR}/${QTERMWIDGET_LIBRARY_NAME}-config-version.cmake"
281    DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${QTERMWIDGET_LIBRARY_NAME}"
282    COMPONENT Devel
283)
284
285install(EXPORT
286    "${QTERMWIDGET_LIBRARY_NAME}-targets"
287    DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${QTERMWIDGET_LIBRARY_NAME}"
288    COMPONENT Devel
289)
290
291install(FILES
292    ${HDRS_DISTRIB} "${CMAKE_CURRENT_BINARY_DIR}/lib/qtermwidget_export.h" "${CMAKE_BINARY_DIR}/lib/qtermwidget_version.h"
293    DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/${QTERMWIDGET_LIBRARY_NAME}"
294    COMPONENT Devel
295)
296# keyboard layouts
297install(DIRECTORY
298    lib/kb-layouts/
299    DESTINATION "${KB_LAYOUT_DIR}"
300    COMPONENT Runtime
301    FILES_MATCHING PATTERN "*.keytab"
302)
303# color schemes
304install(DIRECTORY
305    lib/color-schemes/
306    DESTINATION "${COLORSCHEMES_DIR}"
307    COMPONENT Runtime
308    FILES_MATCHING PATTERN "*.*schem*"
309)
310
311lxqt_create_pkgconfig_file(
312    PACKAGE_NAME ${QTERMWIDGET_LIBRARY_NAME}
313    DESCRIPTIVE_NAME ${QTERMWIDGET_LIBRARY_NAME}
314    DESCRIPTION "QTermWidget library for Qt ${QTERMWIDGET_VERSION_MAJOR}.x"
315    INCLUDEDIRS ${QTERMWIDGET_LIBRARY_NAME}
316    LIBS ${QTERMWIDGET_LIBRARY_NAME}
317    REQUIRES ${PKG_CONFIG_REQ}
318    VERSION ${QTERMWIDGET_VERSION}
319    INSTALL
320    COMPONENT Devel
321)
322
323configure_file(
324    "${PROJECT_SOURCE_DIR}/cmake/${QTERMWIDGET_LIBRARY_NAME}-config.cmake.in"
325    "${CMAKE_BINARY_DIR}/${QTERMWIDGET_LIBRARY_NAME}-config.cmake"
326    @ONLY
327)
328
329configure_file(
330    "${PROJECT_SOURCE_DIR}/lib/qtermwidget_version.h.in"
331    "${CMAKE_BINARY_DIR}/lib/qtermwidget_version.h"
332    @ONLY
333)
334
335install(FILES
336    "${CMAKE_BINARY_DIR}/${QTERMWIDGET_LIBRARY_NAME}-config.cmake"
337    DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${QTERMWIDGET_LIBRARY_NAME}"
338    COMPONENT Devel
339)
340
341install(TARGETS ${QTERMWIDGET_LIBRARY_NAME}
342    DESTINATION "${CMAKE_INSTALL_LIBDIR}"
343    EXPORT "${QTERMWIDGET_LIBRARY_NAME}-targets"
344    LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
345    PUBLIC_HEADER
346    COMPONENT Runtime
347)
348
349export(TARGETS ${QTERMWIDGET_LIBRARY_NAME}
350    FILE "${CMAKE_BINARY_DIR}/${QTERMWIDGET_LIBRARY_NAME}-targets.cmake"
351    EXPORT_LINK_INTERFACE_LIBRARIES
352)
353# end of main library
354
355
356# example application
357if(BUILD_EXAMPLE)
358    set(EXAMPLE_SRC examples/cpp/main.cpp)
359    add_executable(example ${EXAMPLE_SRC})
360    target_link_libraries(example ${QTERMWIDGET_LIBRARY_NAME})
361endif()
362# end of example application
363
364# python binding
365if (QTERMWIDGET_BUILD_PYTHON_BINDING)
366    message(SEND_ERROR "QTERMWIDGET_BUILD_PYTHON_BINDING is no longer supported. Check README.md for how to build PyQt bindings.")
367endif()
368# end of python binding
369
370
371CONFIGURE_FILE(
372    "${CMAKE_CURRENT_SOURCE_DIR}/cmake/cmake_uninstall.cmake.in"
373    "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
374    IMMEDIATE @ONLY
375)
376ADD_CUSTOM_TARGET(uninstall
377    "${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
378)
Note: See TracBrowser for help on using the repository browser.