## antimicrox Gamepad to KB+M event mapper
## Copyright (C) 2015 Travis Nickles <[Link]@[Link]>
## Copyright (C) 2020 Jagoda Górska <[Link]@[Link]>
## Copyright (C) 2020 Paweł Kotiuk <kotiuk@[Link]>
##
## 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 <[Link]
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/[Link])
set(antimicrox_SOURCES
src/[Link]
src/[Link]
src/[Link]
src/[Link]
src/[Link]
src/[Link]
src/[Link]
src/[Link]
src/[Link]
src/[Link]
src/[Link]
src/[Link]
src/eventhandlers/[Link]
src/gamecontroller/[Link]
src/gamecontroller/[Link]
src/gamecontroller/[Link]
src/gamecontroller/[Link]
src/gamecontroller/[Link]
src/[Link]
src/[Link]
src/gui/[Link]
src/gui/[Link]
src/gui/[Link]
src/gui/[Link]
src/gui/[Link]
src/gui/[Link]
src/gui/[Link]
src/gui/[Link]
src/gui/[Link]
src/gui/[Link]
src/gui/[Link]
src/gui/[Link]
src/gui/[Link]
src/gui/[Link]
src/gui/[Link]
src/gui/[Link]
src/gui/[Link]
src/gui/[Link]
src/gui/[Link]
src/gui/[Link]
src/gui/[Link]
src/gui/[Link]
src/gui/[Link]
src/gui/[Link]
src/gui/[Link]
src/gui/[Link]
src/gui/[Link]
src/gui/[Link]
src/[Link]
src/[Link]
src/[Link]
src/[Link]
src/[Link]
src/[Link]
src/[Link]
src/[Link]
src/[Link]
src/[Link]
src/[Link]
src/[Link]
src/joybuttontypes/[Link]
src/joybuttontypes/[Link]
src/joybuttontypes/[Link]
src/joybuttontypes/[Link]
src/joybuttontypes/[Link]
src/joybuttontypes/[Link]
src/joybuttontypes/[Link]
src/joybuttontypes/[Link]
src/joybuttontypes/[Link]
src/[Link]
src/[Link]
src/[Link]
src/[Link]
src/[Link]
src/[Link]
src/[Link]
src/[Link]
src/[Link]
src/[Link]
src/[Link]
src/[Link]
src/[Link]
src/[Link]
src/[Link]
src/keyboard/[Link]
src/keyboard/[Link]
src/keyboard/[Link]
src/[Link]
src/[Link]
src/mousedialog/[Link]
src/mousedialog/[Link]
src/mousedialog/[Link]
src/mousedialog/[Link]
src/mousedialog/[Link]
src/mousedialog/[Link]
src/mousedialog/uihelpers/[Link]
src/mousedialog/uihelpers/[Link]
src/mousedialog/uihelpers/[Link]
src/mousedialog/uihelpers/[Link]
src/[Link]
src/[Link]
src/[Link]
src/[Link]
src/[Link]
src/[Link]
src/[Link]
src/[Link]
src/[Link]
src/uihelpers/[Link]
src/uihelpers/[Link]
src/uihelpers/[Link]
src/uihelpers/[Link]
src/uihelpers/[Link]
src/uihelpers/[Link]
src/uihelpers/[Link]
src/uihelpers/[Link]
src/uihelpers/[Link]
src/uihelpers/[Link]
src/[Link]
src/xml/[Link]
src/xml/[Link]
src/xml/[Link]
src/xml/[Link]
src/xml/[Link]
src/xml/[Link]
src/[Link]
src/[Link]
src/[Link]
)
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/[Link]
)
LIST(APPEND antimicrox_HEADERS
src/fakeclasses/xbox360wireless.h
)
endif(ATTACH_FAKE_CLASSES)
set(antimicrox_FORMS
src/gui/[Link]
src/gui/[Link]
src/gui/[Link]
src/gui/[Link]
src/gui/[Link]
src/gui/[Link]
src/gui/[Link]
src/gui/[Link]
src/gui/[Link]
src/gui/[Link]
src/gui/[Link]
src/gui/[Link]
src/gui/[Link]
src/gui/[Link]
src/gui/[Link]
src/gui/[Link]
src/gui/[Link]
src/gui/[Link]
src/gui/[Link]
src/gui/[Link]
src/gui/[Link]
src/gui/[Link]
)
set(antimicrox_RESOURCES src/[Link])
###############################
# PLATFORM-DEPENDENT FILES
###############################
if(UNIX)
if(WITH_X11)
LIST(APPEND antimicrox_SOURCES src/[Link]
src/[Link]
src/[Link]
src/[Link]
src/gui/[Link]
)
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/[Link])
LIST(APPEND antimicrox_HEADERS src/eventhandlers/xtesteventhandler.h)
endif(WITH_XTEST)
endif(WITH_X11)
if(WITH_UINPUT)
LIST(APPEND antimicrox_SOURCES src/[Link]
src/[Link]
src/eventhandlers/[Link]
)
LIST(APPEND antimicrox_HEADERS src/qtuinputkeymapper.h
src/uinputhelper.h
src/eventhandlers/uinputeventhandler.h
)
endif(WITH_UINPUT)
elseif(WIN32)
LIST(APPEND antimicrox_SOURCES
src/[Link]
src/[Link]
src/[Link]
src/gui/[Link]
src/gui/[Link]
src/eventhandlers/[Link]
src/[Link]
)
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/[Link]
)
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-
[Link] DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/icons)
ecm_install_icons(ICONS share/icons/application/24x24/apps/24-apps-
[Link] DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/icons)
ecm_install_icons(ICONS share/icons/application/32x32/apps/32-apps-
[Link] DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/icons)
ecm_install_icons(ICONS share/icons/application/48x48/apps/48-apps-
[Link] DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/icons)
ecm_install_icons(ICONS share/icons/application/64x64/apps/64-apps-
[Link] DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/icons)
ecm_install_icons(ICONS share/icons/application/128x128/apps/128-apps-
[Link] DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/icons)
ecm_install_icons(ICONS share/icons/application/scalable/apps/sc-apps-
[Link] 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 [Link] DESTINATION
"${CMAKE_INSTALL_DATAROOTDIR}/doc/antimicrox")
install(FILES other/[Link] DESTINATION "$
{CMAKE_INSTALL_DATAROOTDIR}/applications")
install(FILES other/[Link] DESTINATION "$
{CMAKE_INSTALL_DATAROOTDIR}/mime/packages")
# Copy current Changelog file to location that the resource file expects.
install(FILES [Link] 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/[Link] 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 "[Link]" HINTS "${SDL2_LIBRARY_DIRS}/../bin")
#these three lines assume SDL2 in standard location TODO do it better
find_path(GCC_DLL "libgcc_s_seh-[Link]" HINTS "${SDL2_LIBRARY_DIRS}/../bin")
find_path(PTHREAD_DLL_DIR "[Link]" HINTS "$
{SDL2_LIBRARY_DIRS}/../bin")
find_path(LIBCPP_DLL_DIR "libstdc++-[Link]" HINTS "${SDL2_LIBRARY_DIRS}/../bin")
list(APPEND DLL_FILES
"${CMAKE_CURRENT_BINARY_DIR}/bin/[Link]"
"${CMAKE_CURRENT_BINARY_DIR}/bin/[Link]"
"${CMAKE_CURRENT_BINARY_DIR}/bin/[Link]"
"${CMAKE_CURRENT_BINARY_DIR}/bin/[Link]"
"${CMAKE_CURRENT_BINARY_DIR}/bin/[Link]"
"${CMAKE_CURRENT_BINARY_DIR}/bin/[Link]"
"${SDL2_DLL_LOCATION_DIR}/[Link]"
"${GCC_DLL}/libgcc_s_seh-[Link]"
"${PTHREAD_DLL_DIR}/[Link]"
"${LIBCPP_DLL_DIR}/libstdc++-[Link]"
)
if(CHECK_FOR_UPDATES)
message("Searching for SSL DLL-s.")
find_path(LIBCRYPTO_DLL_DIR "libcrypto-1_1-[Link]" HINTS "$
{SDL2_LIBRARY_DIRS}/../bin")
find_path(LIBSSL_DLL_DIR "libssl-1_1-[Link]" HINTS "$
{SDL2_LIBRARY_DIRS}/../bin")
list(APPEND DLL_FILES
"${LIBCRYPTO_DLL_DIR}/libcrypto-1_1-[Link]"
"${LIBSSL_DLL_DIR}/libssl-1_1-[Link]"
)
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/[Link]
DESTINATION ./bin/platforms/)
endif(WIN32)
# uninstall target
configure_file(
"${CMAKE_CURRENT_SOURCE_DIR}/cmake_uninstall.[Link]"
"${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 [Link] file using the appropriate variables.
configure_file(
"${PROJECT_SOURCE_DIR}/src/[Link]"
"${PROJECT_BINARY_DIR}/config.h"
)
file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/[Link] 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 [Link])
elseif(WIN32)
install(FILES share/gamecontrollerdb_windows.txt DESTINATION "$
{CMAKE_INSTALL_DATAROOTDIR}/antimicrox/" RENAME [Link])
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 "[Link]
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 <kotiuk@[Link]>")
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/[Link]
add_custom_command(TARGET package_docummentation PRE_BUILD
COMMAND gzip -c -9 -n "${PROJECT_SOURCE_DIR}/[Link]" >
"[Link]" VERBATIM)
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/[Link]" 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\\\\
[Link]")
set(CPACK_NSIS_MUI_ICON "${CPACK_PACKAGE_ICON}")
set(CPACK_NSIS_MUI_UNIICON "${CPACK_PACKAGE_ICON}")
set(CPACK_NSIS_INSTALLED_ICON_NAME "bin\\[Link]")
set(CPACK_NSIS_DISPLAY_NAME "AntiMicroX")
set(CPACK_NSIS_PACKAGE_NAME "AntiMicroX")
set(CPACK_NSIS_HELP_LINK
"http:\\\\\\\\[Link]/AntiMicroX/antimicrox/wiki")
set(CPACK_NSIS_URL_INFO_ABOUT
"http:\\\\\\\\[Link]/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/[Link]
${CMAKE_CURRENT_BINARY_DIR}/assets/nsis/[Link]
)
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)