0% found this document useful (0 votes)
91 views16 pages

CMake Lists

This document contains the CMake configuration file for the antimicrox gamepad to keyboard and mouse event mapper. It specifies the project name, sets compiler flags, checks for C++11 support, and defines options for compiling on different platforms including support for X11, uinput, XTest, and generating udev rules. It also defines version numbers and includes files for GNU install directories and other CMake modules. Platform-independent source files are listed.

Uploaded by

nickcassi.kahhot
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
91 views16 pages

CMake Lists

This document contains the CMake configuration file for the antimicrox gamepad to keyboard and mouse event mapper. It specifies the project name, sets compiler flags, checks for C++11 support, and defines options for compiling on different platforms including support for X11, uinput, XTest, and generating udev rules. It also defines version numbers and includes files for GNU install directories and other CMake modules. Platform-independent source files are listed.

Uploaded by

nickcassi.kahhot
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 16

## antimicrox Gamepad to KB+M event mapper

## Copyright (C) 2015 Travis Nickles <[email protected]>


## Copyright (C) 2020 Jagoda Górska <[email protected]>
## Copyright (C) 2020 Paweł Kotiuk <[email protected]>
##
## This program is free software: you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation, either version 3 of the License, or
## (at your option) any later version.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
## GNU General Public License for more details.
##
## You should have received a copy of the GNU General Public License
## along with this program. If not, see <http://www.gnu.org/licenses/>.

cmake_minimum_required(VERSION 3.12)
project(antimicrox)

if(POLICY CMP0071)
cmake_policy(SET CMP0071 NEW)
endif()

set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH}
"${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules" "${CMAKE_ROOT}/Modules")

set(CMAKE_INCLUDE_CURRENT_DIR ON)

if(UNIX AND NOT APPLE AND CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)


set(CMAKE_INSTALL_PREFIX "/usr" CACHE PATH "force cmake prefix to be set for
/usr" FORCE)
endif(UNIX AND NOT APPLE AND CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)

include(CheckCXXCompilerFlag)
include(GNUInstallDirs)

if(CMAKE_CXX_COMPILER_ID MATCHES "MSVC" AND MSVC_TOOLSET_VERSION GREATER_EQUAL 140)


# MSVC tools v140 and later support c++11 ootb and has no flag to enable it.
set(COMPILER_SUPPORTS_CXX11 1)
set(COMPILER_IS_MSVC 1)
else()
CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11)
endif(CMAKE_CXX_COMPILER_ID MATCHES "MSVC" AND MSVC_TOOLSET_VERSION GREATER_EQUAL
140)

if(NOT COMPILER_SUPPORTS_CXX11)
message(FATAL_ERROR "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support.
Please use a different C++ compiler.")
endif(NOT COMPILER_SUPPORTS_CXX11)

message("Build type: ${CMAKE_BUILD_TYPE}")

if(NOT COMPILER_IS_MSVC)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Wall -g -O0 -fno-omit-
frame-pointer")
if(UNIX AND NOT CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -rdynamic")
endif(UNIX AND NOT CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic -Wall -Wextra -Wcast-align -
Wcast-qual -Wctor-dtor-privacy -Wdisabled-optimization -Wformat=2 -Winit-self -
Wlogical-op -Wmissing-declarations -Wmissing-include-dirs -Wnoexcept -Wold-style-
cast -Woverloaded-virtual -Wredundant-decls -Wstrict-null-sentinel -Wstrict-
overflow=5 -Wundef -Wno-unused -std=c++11")
else()
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP /analyze-
/D_CRT_SECURE_NO_WARNINGS")
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /W3 /GS /Od /sdl /wd4996
/RTC1 /Gd /Oy-")
if(MSVC_TOOLSET_VERSION GREATER_EQUAL 141)
# VS2017 (toolset v141) and later can set /permissive- to disable non-
standard conforming behavior
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /permissive-")
endif(MSVC_TOOLSET_VERSION GREATER_EQUAL 141)
endif(NOT COMPILER_IS_MSVC)

# The version number.


set(ANTIMICROX_MAJOR_VERSION 3)
set(ANTIMICROX_MINOR_VERSION 3)
set(ANTIMICROX_PATCH_VERSION 4)

if(UNIX)
option(WITH_X11 "Compile with support for X11." ON)
option(WITH_UINPUT "Compile with support for uinput. uinput will be usable to
simulate events." ON)
option(INSTALL_UINPUT_UDEV_RULES "Generate udev rules allowing users using
uinput without root permissions." ON)
option(WITH_XTEST "Compile with support for XTest. XTest will be usable to
simulate events." ON)
option(APPDATA "Build project with AppData file support." ON)
endif(UNIX)

if(WIN32)
option(PORTABLE_WIN "Compile app for portability" OFF)
endif(WIN32)

option(UPDATE_TRANSLATIONS "Call lupdate to update translation files from source."


OFF)
option(TRANS_REMOVE_OBSOLETE "Add -noobsolete option to lupdate command to get rid
of old text entries" OFF)
option(ATTACH_FAKE_CLASSES "Fake classes can be used in application to tests
functionalities" OFF)
option(ANTIMICROX_PKG_VERSION "Manually define version of package displayed in info
tab" OFF)
option(CHECK_FOR_UPDATES "Enable checking for updates using GitHub REST API." OFF)
option(BUILD_DOCS "Build documentation" OFF)
option(WITH_TESTS "Allow tests for classes" OFF)

if(WITH_TESTS)
message("Tests enabled")
endif(WITH_TESTS)

if(ANTIMICROX_PKG_VERSION)
message("This build will be marked as: ${ANTIMICROX_PKG_VERSION}")
add_compile_definitions(ANTIMICROX_PKG_VERSION="${ANTIMICROX_PKG_VERSION}")
endif(ANTIMICROX_PKG_VERSION)

if(CHECK_FOR_UPDATES)
message("This build will check for updates using GitHub API.")
add_compile_definitions(CHECK_FOR_UPDATES="${CHECK_FOR_UPDATES}")
endif(CHECK_FOR_UPDATES)

if(UNIX)
if(WITH_XTEST AND NOT WITH_X11)
set(WITH_XTEST OFF)
message("Cannot use XTest without X11. Disabling XTest support.")
endif(WITH_XTEST AND NOT WITH_X11)

if(WITH_XTEST)
message("XTest support allowed for simulating events.")
endif(WITH_XTEST)

if(WITH_UINPUT)
message("uinput support allowed for simulating events.")
else()
set(INSTALL_UINPUT_UDEV_RULES OFF)
endif(WITH_UINPUT)

if(NOT WITH_XTEST AND NOT WITH_UINPUT)


message(FATAL_ERROR "No system is defined for simulating events.")
endif(NOT WITH_XTEST AND NOT WITH_UINPUT)
endif(UNIX)

###############################
# PLATFORM-INDEPENDENT FILES
###############################

set(antimicrox_MAIN src/main.cpp)

set(antimicrox_SOURCES
src/antimicrosettings.cpp
src/antkeymapper.cpp
src/applaunchhelper.cpp
src/autoprofileinfo.cpp
src/axisvaluebox.cpp
src/commandlineutility.cpp
src/common.cpp
src/dpadcontextmenu.cpp
src/dpadpushbutton.cpp
src/dpadpushbuttongroup.cpp
src/event.cpp
src/eventhandlerfactory.cpp
src/eventhandlers/baseeventhandler.cpp
src/gamecontroller/gamecontroller.cpp
src/gamecontroller/gamecontrollerdpad.cpp
src/gamecontroller/gamecontrollerset.cpp
src/gamecontroller/gamecontrollertrigger.cpp
src/gamecontroller/gamecontrollertriggerbutton.cpp
src/gamecontrollerexample.cpp
src/globalvariables.cpp
src/gui/aboutdialog.cpp
src/gui/addeditautoprofiledialog.cpp
src/gui/advancebuttondialog.cpp
src/gui/advancestickassignmentdialog.cpp
src/gui/axiseditdialog.cpp
src/gui/buttoneditdialog.cpp
src/gui/calibration.cpp
src/gui/dpadeditdialog.cpp
src/gui/editalldefaultautoprofiledialog.cpp
src/gui/extraprofilesettingsdialog.cpp
src/gui/flashbuttonwidget.cpp
src/gui/gamecontrollermappingdialog.cpp
src/gui/joyaxiswidget.cpp
src/gui/joybuttonwidget.cpp
src/gui/joycontrolstickeditdialog.cpp
src/gui/joydpadbuttonwidget.cpp
src/gui/joysensoreditdialog.cpp
src/gui/joystickstatuswindow.cpp
src/gui/joytabwidget.cpp
src/gui/joytabwidgetcontainer.cpp
src/gui/mainsettingsdialog.cpp
src/gui/mainwindow.cpp
src/gui/mousesettingsdialog.cpp
src/gui/qkeydisplaydialog.cpp
src/gui/quicksetdialog.cpp
src/gui/setaxisthrottledialog.cpp
src/gui/setnamesdialog.cpp
src/gui/slotitemlistwidget.cpp
src/haptictriggerps5.cpp
src/inputdaemon.cpp
src/inputdevice.cpp
src/inputdevicebitarraystatus.cpp
src/inputdevicecalibration.cpp
src/joyaccelerometersensor.cpp
src/joyaxis.cpp
src/joyaxiscontextmenu.cpp
src/joybuttoncontextmenu.cpp
src/joybuttonmousehelper.cpp
src/joybuttonslot.cpp
src/joybuttonstatusbox.cpp
src/joybuttontypes/joybutton.cpp
src/joybuttontypes/joyaccelerometerbutton.cpp
src/joybuttontypes/joyaxisbutton.cpp
src/joybuttontypes/joycontrolstickbutton.cpp
src/joybuttontypes/joycontrolstickmodifierbutton.cpp
src/joybuttontypes/joydpadbutton.cpp
src/joybuttontypes/joygradientbutton.cpp
src/joybuttontypes/joygyroscopebutton.cpp
src/joybuttontypes/joysensorbutton.cpp
src/joycontrolstick.cpp
src/joycontrolstickbuttonpushbutton.cpp
src/joycontrolstickcontextmenu.cpp
src/joycontrolstickpushbutton.cpp
src/joycontrolstickstatusbox.cpp
src/joydpad.cpp
src/joygyroscopesensor.cpp
src/joysensor.cpp
src/joysensorbuttonpushbutton.cpp
src/joysensorcontextmenu.cpp
src/joysensorfactory.cpp
src/joysensorpreset.cpp
src/joysensorpushbutton.cpp
src/joysensorstatusbox.cpp
src/joystick.cpp
src/keyboard/virtualkeyboardmousewidget.cpp
src/keyboard/virtualkeypushbutton.cpp
src/keyboard/virtualmousepushbutton.cpp
src/localantimicroserver.cpp
src/logger.cpp
src/mousedialog/mouseaxissettingsdialog.cpp
src/mousedialog/mousebuttonsettingsdialog.cpp
src/mousedialog/mousecontrolsticksettingsdialog.cpp
src/mousedialog/mousedpadsettingsdialog.cpp
src/mousedialog/mousesensorsettingsdialog.cpp
src/mousedialog/springmoderegionpreview.cpp
src/mousedialog/uihelpers/mouseaxissettingsdialoghelper.cpp
src/mousedialog/uihelpers/mousebuttonsettingsdialoghelper.cpp
src/mousedialog/uihelpers/mousecontrolsticksettingsdialoghelper.cpp
src/mousedialog/uihelpers/mousedpadsettingsdialoghelper.cpp
src/mousehelper.cpp
src/pt1filter.cpp
src/qtkeymapperbase.cpp
src/sdleventreader.cpp
src/sensorpushbuttongroup.cpp
src/setjoystick.cpp
src/simplekeygrabberbutton.cpp
src/statisticsestimator.cpp
src/stickpushbuttongroup.cpp
src/uihelpers/advancebuttondialoghelper.cpp
src/uihelpers/buttoneditdialoghelper.cpp
src/uihelpers/dpadcontextmenuhelper.cpp
src/uihelpers/dpadeditdialoghelper.cpp
src/uihelpers/gamecontrollermappingdialoghelper.cpp
src/uihelpers/joyaxiscontextmenuhelper.cpp
src/uihelpers/joycontrolstickcontextmenuhelper.cpp
src/uihelpers/joycontrolstickeditdialoghelper.cpp
src/uihelpers/joysensoriothreadhelper.cpp
src/uihelpers/joytabwidgethelper.cpp
src/vdpad.cpp
src/xml/inputdevicexml.cpp
src/xml/joyaxisxml.cpp
src/xml/joybuttonslotxml.cpp
src/xml/joybuttonxml.cpp
src/xml/joydpadxml.cpp
src/xml/setjoystickxml.cpp
src/xmlconfigmigration.cpp
src/xmlconfigreader.cpp
src/xmlconfigwriter.cpp
)

set(antimicrox_HEADERS
src/antimicrosettings.h
src/antkeymapper.h
src/applaunchhelper.h
src/autoprofileinfo.h
src/axisvaluebox.h
src/commandlineutility.h
src/dpadcontextmenu.h
src/dpadpushbutton.h
src/dpadpushbuttongroup.h
src/eventhandlerfactory.h
src/eventhandlers/baseeventhandler.h
src/gamecontroller/gamecontroller.h
src/gamecontroller/gamecontrollerdpad.h
src/gamecontroller/gamecontrollerset.h
src/gamecontroller/gamecontrollertrigger.h
src/gamecontroller/gamecontrollertriggerbutton.h
src/gamecontroller/xml/gamecontrollerdpadxml.h
src/gamecontroller/xml/gamecontrollertriggerxml.h
src/gamecontroller/xml/gamecontrollerxml.h
src/gamecontrollerexample.h
src/globalvariables.h
src/gui/aboutdialog.h
src/gui/addeditautoprofiledialog.h
src/gui/advancebuttondialog.h
src/gui/advancestickassignmentdialog.h
src/gui/axiseditdialog.h
src/gui/buttoneditdialog.h
src/gui/calibration.h
src/gui/dpadeditdialog.h
src/gui/editalldefaultautoprofiledialog.h
src/gui/extraprofilesettingsdialog.h
src/gui/flashbuttonwidget.h
src/gui/gamecontrollermappingdialog.h
src/gui/joyaxiswidget.h
src/gui/joybuttonwidget.h
src/gui/joycontrolstickeditdialog.h
src/gui/joydpadbuttonwidget.h
src/gui/joysensoreditdialog.h
src/gui/joystickstatuswindow.h
src/gui/joytabwidget.h
src/gui/joytabwidgetcontainer.h
src/gui/mainsettingsdialog.h
src/gui/mainwindow.h
src/gui/mousesettingsdialog.h
src/gui/qkeydisplaydialog.h
src/gui/quicksetdialog.h
src/gui/setaxisthrottledialog.h
src/gui/setnamesdialog.h
src/gui/slotitemlistwidget.h
src/haptictriggerps5.h
src/haptictriggermodeps5.h
src/inputdaemon.h
src/inputdevice.h
src/inputdevicebitarraystatus.h
src/inputdevicecalibration.h
src/joyaccelerometersensor.h
src/joyaxis.h
src/joyaxiscontextmenu.h
src/joybuttoncontextmenu.h
src/joybuttonmousehelper.h
src/joybuttonslot.h
src/joybuttonstatusbox.h
src/joybuttontypes/joybutton.h
src/joybuttontypes/joyaccelerometerbutton.h
src/joybuttontypes/joyaxisbutton.h
src/joybuttontypes/joycontrolstickbutton.h
src/joybuttontypes/joycontrolstickmodifierbutton.h
src/joybuttontypes/joydpadbutton.h
src/joybuttontypes/joygradientbutton.h
src/joybuttontypes/joygyroscopebutton.h
src/joybuttontypes/joysensorbutton.h
src/joycontrolstick.h
src/joycontrolstickbuttonpushbutton.h
src/joycontrolstickcontextmenu.h
src/joycontrolstickpushbutton.h
src/joycontrolstickstatusbox.h
src/joydpad.h
src/joygyroscopesensor.h
src/joysensor.h
src/joysensorbuttonpushbutton.h
src/joysensorcontextmenu.h
src/joysensordirection.h
src/joysensorfactory.h
src/joysensorpreset.h
src/joysensorpushbutton.h
src/joysensorstatusbox.h
src/joysensortype.h
src/joystick.h
src/keyboard/virtualkeyboardmousewidget.h
src/keyboard/virtualkeypushbutton.h
src/keyboard/virtualmousepushbutton.h
src/localantimicroserver.h
src/logger.h
src/mousedialog/mouseaxissettingsdialog.h
src/mousedialog/mousebuttonsettingsdialog.h
src/mousedialog/mousecontrolsticksettingsdialog.h
src/mousedialog/mousedpadsettingsdialog.h
src/mousedialog/springmoderegionpreview.h
src/mousedialog/mousesensorsettingsdialog.h
src/mousedialog/uihelpers/mouseaxissettingsdialoghelper.h
src/mousedialog/uihelpers/mousebuttonsettingsdialoghelper.h
src/mousedialog/uihelpers/mousecontrolsticksettingsdialoghelper.h
src/mousedialog/uihelpers/mousedpadsettingsdialoghelper.h
src/mousehelper.h
src/pt1filter.h
src/qtkeymapperbase.h
src/sdleventreader.h
src/sensorpushbuttongroup.h
src/setjoystick.h
src/simplekeygrabberbutton.h
src/statisticsestimator.h
src/stickpushbuttongroup.h
src/uihelpers/advancebuttondialoghelper.h
src/uihelpers/buttoneditdialoghelper.h
src/uihelpers/dpadcontextmenuhelper.h
src/uihelpers/dpadeditdialoghelper.h
src/uihelpers/gamecontrollermappingdialoghelper.h
src/uihelpers/joyaxiscontextmenuhelper.h
src/uihelpers/joycontrolstickcontextmenuhelper.h
src/uihelpers/joycontrolstickeditdialoghelper.h
src/uihelpers/joysensoriothreadhelper.h
src/uihelpers/joytabwidgethelper.h
src/vdpad.h
src/xml/inputdevicexml.h
src/xml/joyaxisxml.h
src/xml/joybuttonslotxml.h
src/xml/joybuttonxml.h
src/xml/joydpadxml.h
src/xml/setjoystickxml.h
src/xmlconfigmigration.h
src/xmlconfigreader.h
src/xmlconfigwriter.h
)

if(ATTACH_FAKE_CLASSES)
LIST(APPEND antimicrox_SOURCES
src/fakeclasses/xbox360wireless.cpp
)

LIST(APPEND antimicrox_HEADERS
src/fakeclasses/xbox360wireless.h
)
endif(ATTACH_FAKE_CLASSES)

set(antimicrox_FORMS
src/gui/aboutdialog.ui
src/gui/addeditautoprofiledialog.ui
src/gui/advancebuttondialog.ui
src/gui/advancestickassignmentdialog.ui
src/gui/axiseditdialog.ui
src/gui/buttoneditdialog.ui
src/gui/calibration.ui
src/gui/capturedwindowinfodialog.ui
src/gui/dpadeditdialog.ui
src/gui/editalldefaultautoprofiledialog.ui
src/gui/extraprofilesettingsdialog.ui
src/gui/gamecontrollermappingdialog.ui
src/gui/joycontrolstickeditdialog.ui
src/gui/joysensoreditdialog.ui
src/gui/joystickstatuswindow.ui
src/gui/mainsettingsdialog.ui
src/gui/mainwindow.ui
src/gui/mousesettingsdialog.ui
src/gui/qkeydisplaydialog.ui
src/gui/quicksetdialog.ui
src/gui/setaxisthrottledialog.ui
src/gui/setnamesdialog.ui
)

set(antimicrox_RESOURCES src/resources.qrc)

###############################
# PLATFORM-DEPENDENT FILES
###############################

if(UNIX)
if(WITH_X11)
LIST(APPEND antimicrox_SOURCES src/x11extras.cpp
src/qtx11keymapper.cpp
src/unixcapturewindowutility.cpp
src/autoprofilewatcher.cpp
src/gui/capturedwindowinfodialog.cpp
)
LIST(APPEND antimicrox_HEADERS src/x11extras.h
src/qtx11keymapper.h
src/unixcapturewindowutility.h
src/autoprofilewatcher.h
src/gui/capturedwindowinfodialog.h
)

if(WITH_XTEST)
LIST(APPEND antimicrox_SOURCES src/eventhandlers/xtesteventhandler.cpp)
LIST(APPEND antimicrox_HEADERS src/eventhandlers/xtesteventhandler.h)
endif(WITH_XTEST)
endif(WITH_X11)

if(WITH_UINPUT)
LIST(APPEND antimicrox_SOURCES src/qtuinputkeymapper.cpp
src/uinputhelper.cpp
src/eventhandlers/uinputeventhandler.cpp
)
LIST(APPEND antimicrox_HEADERS src/qtuinputkeymapper.h
src/uinputhelper.h
src/eventhandlers/uinputeventhandler.h
)
endif(WITH_UINPUT)

elseif(WIN32)
LIST(APPEND antimicrox_SOURCES
src/autoprofilewatcher.cpp
src/winextras.cpp
src/qtwinkeymapper.cpp
src/gui/winappprofiletimerdialog.cpp
src/gui/capturedwindowinfodialog.cpp
src/eventhandlers/winsendinputeventhandler.cpp
src/joykeyrepeathelper.cpp
)
LIST(APPEND antimicrox_HEADERS
src/autoprofilewatcher.h
src/winextras.h
src/qtwinkeymapper.h
src/gui/winappprofiletimerdialog.h
src/gui/capturedwindowinfodialog.h
src/eventhandlers/winsendinputeventhandler.h
src/joykeyrepeathelper.h
)
LIST(APPEND antimicrox_FORMS
src/gui/winappprofiletimerdialog.ui
)
endif(UNIX)

###############################
# DEFINITIONS
###############################

if(UNIX)
if(WITH_X11)
add_definitions(-DWITH_X11)
endif(WITH_X11)

if(WITH_XTEST)
add_definitions(-DWITH_XTEST)
endif(WITH_XTEST)

if(WITH_UINPUT)
add_definitions(-DWITH_UINPUT)
endif(WITH_UINPUT)
endif(UNIX)

###############################
# PACKAGES
###############################

set(QT_REQUIRED_VERSION 5.8)
find_package(Qt5Core ${QT_REQUIRED_VERSION} REQUIRED)
message("Found QT: ${Qt5Core_VERSION_STRING}")
find_package(Qt5Widgets ${QT_REQUIRED_VERSION} REQUIRED)
find_package(Qt5Gui ${QT_REQUIRED_VERSION} REQUIRED)
find_package(Qt5Network ${QT_REQUIRED_VERSION} REQUIRED)
find_package(Qt5LinguistTools ${QT_REQUIRED_VERSION} REQUIRED)
find_package(Qt5Concurrent ${QT_REQUIRED_VERSION} REQUIRED)
set(CMAKE_AUTOMOC TRUE) # required by moc preprocessor used in QT

QT5_WRAP_UI(antimicrox_FORMS_HEADERS ${antimicrox_FORMS})
QT5_ADD_RESOURCES(antimicrox_RESOURCES_RCC ${antimicrox_RESOURCES})
add_subdirectory("share/antimicrox/translations")
set(CMAKE_POSITION_INDEPENDENT_CODE ON)

set(SDL_REQUIRED_VERSION 2.0.6)
find_package(SDL2 REQUIRED)

if(WITH_X11)
find_package(X11 REQUIRED)
endif(WITH_X11)

###############################
# LINKER LIBRARIES
###############################

LIST(APPEND QT_LIBS Qt5::Core)


LIST(APPEND QT_LIBS Qt5::Gui)
LIST(APPEND QT_LIBS Qt5::Widgets)
LIST(APPEND QT_LIBS Qt5::Concurrent)
LIST(APPEND QT_LIBS Qt5::Network)

if(UNIX)
if(WITH_X11)
LIST(APPEND X11_LIBS ${X11_X11_LIB})
LIST(APPEND X11_LIBS ${X11_Xi_LIB})
endif(WITH_X11)

if(WITH_XTEST)
LIST(APPEND EXTRA_LIBS ${X11_XTest_LIB})
endif(WITH_XTEST)

# necessary ifwe use find_package for SDL2


# if(NOT DEFINED SDL2_LIBRARIES)
# set(SDL2_LIBRARIES SDL2::SDL2)
# endif()
elseif (WIN32)
list(APPEND WIN_LIBS "psapi")
endif(UNIX)
include_directories(
${CMAKE_CURRENT_BINARY_DIR}
"${CMAKE_CURRENT_BINARY_DIR}/src"
${PROJECT_SOURCE_DIR}
"${PROJECT_SOURCE_DIR}/src"
"${PROJECT_SOURCE_DIR}/src/gui"
${SDL2_INCLUDE_DIRS}
)

# Store executable in a bin subdir. Needed here so translations can be loaded.


set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/bin")

###############################
# COMPILE & LINK
###############################
if(UNIX)
add_executable(antimicrox
${antimicrox_MAIN}
${antimicrox_HEADERS_MOC}
${antimicrox_SOURCES}
${antimicrox_FORMS_HEADERS}
${antimicrox_RESOURCES_RCC}
)
elseif(WIN32)
# The WIN32 is required to specify a GUI application.
add_executable(antimicrox WIN32
${antimicrox_MAIN}
${antimicrox_HEADERS_MOC}
${antimicrox_SOURCES}
${antimicrox_FORMS_HEADERS}
${antimicrox_RESOURCES_RCC}
src/antimicrox_windows_icon.rc # Embedding icon into Windows executable
)
target_link_libraries(antimicrox
${WIN_LIBS}
)

if(PORTABLE_WIN)
add_definitions(-DWIN_PORTABLE_PACKAGE)
endif()
endif(UNIX)

target_link_libraries(antimicrox
${QT_LIBS}
${X11_LIBS}
${SDL2_LIBRARIES}
${EXTRA_LIBS}
)

target_include_directories(antimicrox PUBLIC
${SDL2_INCLUDE_DIRS}/SDL2
)

###############################
# INSTALL
###############################

# Specify out directory for final executable.


install(TARGETS antimicrox RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}")

if(UNIX)
find_package(ECM REQUIRED NO_MODULE)
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${ECM_MODULE_DIR})
include(ECMInstallIcons)

ecm_install_icons(ICONS share/icons/application/16x16/apps/16-apps-
io.github.antimicrox.antimicrox.png DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/icons)
ecm_install_icons(ICONS share/icons/application/24x24/apps/24-apps-
io.github.antimicrox.antimicrox.png DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/icons)
ecm_install_icons(ICONS share/icons/application/32x32/apps/32-apps-
io.github.antimicrox.antimicrox.png DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/icons)
ecm_install_icons(ICONS share/icons/application/48x48/apps/48-apps-
io.github.antimicrox.antimicrox.png DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/icons)
ecm_install_icons(ICONS share/icons/application/64x64/apps/64-apps-
io.github.antimicrox.antimicrox.png DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/icons)
ecm_install_icons(ICONS share/icons/application/128x128/apps/128-apps-
io.github.antimicrox.antimicrox.png DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/icons)
ecm_install_icons(ICONS share/icons/application/scalable/apps/sc-apps-
io.github.antimicrox.antimicrox.svg DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/icons)

ecm_install_icons(ICONS share/icons/breeze_themed/48-apps-
antimicrox_trayicon.png DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/icons THEME
breeze)
ecm_install_icons(ICONS src/images/48-apps-antimicrox_trayicon.png DESTINATION
${CMAKE_INSTALL_DATAROOTDIR}/icons)

install(FILES CHANGELOG.md DESTINATION


"${CMAKE_INSTALL_DATAROOTDIR}/doc/antimicrox")
install(FILES other/io.github.antimicrox.antimicrox.desktop DESTINATION "$
{CMAKE_INSTALL_DATAROOTDIR}/applications")
install(FILES other/io.github.antimicrox.antimicrox.xml DESTINATION "$
{CMAKE_INSTALL_DATAROOTDIR}/mime/packages")

# Copy current Changelog file to location that the resource file expects.
install(FILES CHANGELOG.md DESTINATION
"${CMAKE_INSTALL_DATAROOTDIR}/antimicrox")
endif(UNIX)

# Add man page for *nix platforms.


if(UNIX)
add_subdirectory(other)

# Only way to force install target to be dependent on manpage.


install(CODE "execute_process(COMMAND ${CMAKE_BUILD_TOOL} manpage
WORKING_DIRECTORY \"${CMAKE_CURRENT_BINARY_DIR}\")")

if(APPDATA)
# Only way to force install target to be dependent on appdata.
install(CODE "execute_process(COMMAND ${CMAKE_BUILD_TOOL} appdata
WORKING_DIRECTORY \"${CMAKE_CURRENT_BINARY_DIR}\")")
endif(APPDATA)
endif(UNIX)

if(UNIX)
if(INSTALL_UINPUT_UDEV_RULES)
message("Udev rules installation enabled.")
install(FILES other/60-antimicrox-uinput.rules DESTINATION
"/usr/lib/udev/rules.d/")
endif(INSTALL_UINPUT_UDEV_RULES)
endif(UNIX)

# Copy libraries needed by Windows


if(WIN32)
add_custom_command(TARGET antimicrox POST_BUILD
COMMAND ${CMAKE_COMMAND} -E echo "dll files linked with antimicrox
executable: $<TARGET_RUNTIME_DLLS:antimicrox> "
COMMAND_EXPAND_LISTS
)
add_custom_command(TARGET antimicrox POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_RUNTIME_DLLS:antimicrox>
$<TARGET_FILE_DIR:antimicrox>
COMMAND_EXPAND_LISTS
)

find_path(SDL2_DLL_LOCATION_DIR "SDL2.dll" HINTS "${SDL2_LIBRARY_DIRS}/../bin")

#these three lines assume SDL2 in standard location TODO do it better


find_path(GCC_DLL "libgcc_s_seh-1.dll" HINTS "${SDL2_LIBRARY_DIRS}/../bin")
find_path(PTHREAD_DLL_DIR "libwinpthread-1.dll" HINTS "$
{SDL2_LIBRARY_DIRS}/../bin")
find_path(LIBCPP_DLL_DIR "libstdc++-6.dll" HINTS "${SDL2_LIBRARY_DIRS}/../bin")
list(APPEND DLL_FILES
"${CMAKE_CURRENT_BINARY_DIR}/bin/Qt5Core.dll"
"${CMAKE_CURRENT_BINARY_DIR}/bin/Qt5Gui.dll"
"${CMAKE_CURRENT_BINARY_DIR}/bin/Qt5Concurrent.dll"
"${CMAKE_CURRENT_BINARY_DIR}/bin/Qt5Network.dll"
"${CMAKE_CURRENT_BINARY_DIR}/bin/Qt5Widgets.dll"
"${CMAKE_CURRENT_BINARY_DIR}/bin/libEGL.dll"
"${SDL2_DLL_LOCATION_DIR}/SDL2.dll"
"${GCC_DLL}/libgcc_s_seh-1.dll"
"${PTHREAD_DLL_DIR}/libwinpthread-1.dll"
"${LIBCPP_DLL_DIR}/libstdc++-6.dll"
)

if(CHECK_FOR_UPDATES)
message("Searching for SSL DLL-s.")
find_path(LIBCRYPTO_DLL_DIR "libcrypto-1_1-x64.dll" HINTS "$
{SDL2_LIBRARY_DIRS}/../bin")
find_path(LIBSSL_DLL_DIR "libssl-1_1-x64.dll" HINTS "$
{SDL2_LIBRARY_DIRS}/../bin")
list(APPEND DLL_FILES
"${LIBCRYPTO_DLL_DIR}/libcrypto-1_1-x64.dll"
"${LIBSSL_DLL_DIR}/libssl-1_1-x64.dll"
)
endif(CHECK_FOR_UPDATES)

install(FILES ${DLL_FILES} TYPE BIN )

# Required platform plugin


get_target_property(QtCore_LOCATION Qt5::Core LOCATION)
get_filename_component(QT_DLL_DIR ${QtCore_LOCATION} PATH)
install(FILES
${QT_DLL_DIR}/../plugins/platforms/qwindows.dll
DESTINATION ./bin/platforms/)
endif(WIN32)
# uninstall target
configure_file(
"${CMAKE_CURRENT_SOURCE_DIR}/cmake_uninstall.cmake.in"
"${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
IMMEDIATE @ONLY)

add_custom_target(uninstall
COMMAND ${CMAKE_COMMAND} -P
${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake)

# Only way to force install target to be dependent on updateqm.


install(CODE "execute_process(COMMAND ${CMAKE_BUILD_TOOL} updateqm
WORKING_DIRECTORY \"${CMAKE_CURRENT_BINARY_DIR}\")")

# Use this to use some variables created here in the actual project.
# Modify the config.h.in file using the appropriate variables.
configure_file(
"${PROJECT_SOURCE_DIR}/src/config.h.in"
"${PROJECT_BINARY_DIR}/config.h"
)

file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/CHANGELOG.md DESTINATION $


{CMAKE_CURRENT_SOURCE_DIR}/src/)

if(WITH_TESTS)
enable_testing()
add_subdirectory(tests)
endif(WITH_TESTS)

# Install SDL database with linked License file


if(UNIX)
install(FILES share/gamecontrollerdb_linux.txt DESTINATION "$
{CMAKE_INSTALL_DATAROOTDIR}/antimicrox/" RENAME gamecontrollerdb.txt)
elseif(WIN32)
install(FILES share/gamecontrollerdb_windows.txt DESTINATION "$
{CMAKE_INSTALL_DATAROOTDIR}/antimicrox/" RENAME gamecontrollerdb.txt)
endif(UNIX)
install(FILES share/LICENSE_SDL_GameControllerDB DESTINATION "$
{CMAKE_INSTALL_DATAROOTDIR}/antimicrox/")

###############################
# PACKAGES BUILDING WITH CPACK
###############################

include(InstallRequiredSystemLibraries)

set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Program used to map keyboard keys and mouse


controls to a gamepad.")
set(CPACK_PACKAGE_HOMEPAGE_URL "https://github.com/AntiMicroX/antimicrox/")

set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE")

set(CPACK_PACKAGE_VERSION_MAJOR "${ANTIMICROX_MAJOR_VERSION}")
set(CPACK_PACKAGE_VERSION_MINOR "${ANTIMICROX_MINOR_VERSION}")
set(CPACK_PACKAGE_VERSION_PATCH "${ANTIMICROX_PATCH_VERSION}")
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
set(CPACK_PACKAGE_VERSION_PATCH "${CPACK_PACKAGE_VERSION_PATCH}-dbg")
endif()

set(CPACK_PACKAGE_FILE_NAME "antimicrox-${ANTIMICROX_MAJOR_VERSION}.$
{ANTIMICROX_MINOR_VERSION}.${ANTIMICROX_PATCH_VERSION}")
if(WIN32)
if(PORTABLE_WIN)
set(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_FILE_NAME}-PortableWindows")
else(PORTABLE_WIN)
set(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_FILE_NAME}-Windows")
endif(PORTABLE_WIN)
endif(WIN32)
set(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_FILE_NAME}-$
{CMAKE_HOST_SYSTEM_PROCESSOR}")

set(CPACK_PACKAGE_INSTALL_DIRECTORY "AntiMicroX")

if(UNIX)
set(CPACK_STRIP_FILES "")
set(CPACK_SOURCE_STRIP_FILES "")
endif()

# Building .deb package


if(CPACK_GENERATOR STREQUAL "DEB")
set(CPACK_DEBIAN_PACKAGE_DEPENDS "qtbase5-dev (>= ${QT_REQUIRED_VERSION}),
libsdl2-2.0-0 (>= ${SDL_REQUIRED_VERSION}), libc6")
set(CPACK_DEBIAN_PACKAGE_MAINTAINER "pktiuk <[email protected]>")
set(CPACK_DEBIAN_PACKAGE_DESCRIPTION "AntiMicroX is a graphical program used to
map gamepad buttons to keyboard, mouse, scripts and macros.

It is a new fork of discontinued AntiMicro.")

message("Preparing documentation for DEB package")


add_custom_target(package_docummentation ALL)

#Compress changelog and save it as share/doc/xournalpp/changelog.Debian.gz


add_custom_command(TARGET package_docummentation PRE_BUILD
COMMAND gzip -c -9 -n "${PROJECT_SOURCE_DIR}/CHANGELOG.md" >
"changelog.gz" VERBATIM)
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/changelog.gz" DESTINATION
"share/doc/antimicrox/")

#Strip binaries from unnecessary notes, comments, etc


add_custom_command(TARGET antimicrox POST_BUILD
COMMAND strip --strip-unneeded --remove-section=.comment --remove-
section=.note "${CMAKE_CURRENT_BINARY_DIR}/bin/antimicrox" VERBATIM)
endif()

if(WIN32 AND NOT UNIX)


if(NOT PORTABLE_WIN)
# We set NSIS as generator for Windows
set(CPACK_GENERATOR NSIS)

# There is a bug in NSI that does not handle full UNIX paths properly.
# Make sure there is at least one set of four backlashes.
set(CPACK_PACKAGE_ICON "${PROJECT_SOURCE_DIR}/src/images\\\\
antimicrox.ico")
set(CPACK_NSIS_MUI_ICON "${CPACK_PACKAGE_ICON}")
set(CPACK_NSIS_MUI_UNIICON "${CPACK_PACKAGE_ICON}")
set(CPACK_NSIS_INSTALLED_ICON_NAME "bin\\antimicrox.exe")

set(CPACK_NSIS_DISPLAY_NAME "AntiMicroX")
set(CPACK_NSIS_PACKAGE_NAME "AntiMicroX")
set(CPACK_NSIS_HELP_LINK
"http:\\\\\\\\github.com/AntiMicroX/antimicrox/wiki")
set(CPACK_NSIS_URL_INFO_ABOUT
"http:\\\\\\\\github.com/AntiMicroX/antimicrox")
set(CPACK_NSIS_MODIFY_PATH ON)
else()
set(CPACK_GENERATOR ZIP)
endif()
endif()

set(CPACK_PACKAGE_EXECUTABLES "antimicrox;AntiMicroX")
set(CPACK_CREATE_DESKTOP_LINKS "antimicrox")
include(CPack)

if(WIN32 AND NOT UNIX AND NOT PORTABLE_WIN)


configure_file(
${PROJECT_SOURCE_DIR}/cmake/modules/NSIS.definitions.nsh.in
${CMAKE_CURRENT_BINARY_DIR}/assets/nsis/NSIS.definitions.nsh
)
endif()

###############################
# DOCS
###############################

if(BUILD_DOCS)
message("Doxygen build enabled")
find_package(Doxygen)

if (DOXYGEN_FOUND)
# set input and output files
set(DOXYGEN_IN ${CMAKE_CURRENT_SOURCE_DIR}/other/Doxyfile_config.in)
set(DOXYGEN_OUT ${CMAKE_CURRENT_BINARY_DIR}/docs/Doxyfile)

# request to configure the file


configure_file(${DOXYGEN_IN} ${DOXYGEN_OUT} @ONLY)

# note the option ALL which allows to build the docs together with the
application
add_custom_target( doxygen_docs ALL
COMMAND ${DOXYGEN_EXECUTABLE} ${DOXYGEN_OUT}
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
COMMENT "Generating API documentation with Doxygen"
VERBATIM )

else (DOXYGEN_FOUND)
message(WARNING "Doxygen need to be installed to generate the doxygen
documentation")
endif (DOXYGEN_FOUND)
endif(BUILD_DOCS)

You might also like