Add CMake install target along with build options
Following CMake options have been added with the defaults specified: * -DWITH_PIC=OFF (Compile static library as PIC too) * -DBUILD_STATIC_LIBS=ON * -DBUILD_SHARED_LIBS=ON * -DBUILD_MANUAL_TEST=ON * -DBUILD_MACOS_FATLIB=ON
This commit is contained in:
parent
19d5be6dfc
commit
7faf7dfc29
|
@ -87,16 +87,6 @@
|
|||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file leaf-file-name="xinputsimulatorimpllinux.h" pinned="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/xinputsimulatorimpllinux.h">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state vertical-scroll-proportion="0.0">
|
||||
<caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file leaf-file-name="notimplementedexception.cpp" pinned="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/notimplementedexception.cpp">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
|
@ -506,4 +496,4 @@
|
|||
</provider>
|
||||
</entry>
|
||||
</component>
|
||||
</project>
|
||||
</project>
|
||||
|
|
|
@ -1,41 +1,93 @@
|
|||
cmake_minimum_required(VERSION 2.8.4)
|
||||
project(XInputSimulator)
|
||||
set(PROJECT_VERSION 0.1)
|
||||
|
||||
option(WITH_PIC "Compile static library as position-independent code" OFF) # Shared library is always PIC
|
||||
option(BUILD_STATIC_LIBS "Build the static library" ON)
|
||||
option(BUILD_SHARED_LIBS "Build the shared library" ON)
|
||||
option(BUILD_MACOS_FATLIB "Build Fat library for both i386 and x86_64 on macOS" ON)
|
||||
option(BUILD_MANUAL_TEST "Build the test application" ON)
|
||||
|
||||
if(BUILD_MACOS_FATLIB)
|
||||
if (CMAKE_OSX_ARCHITECTURES)
|
||||
message(FATAL_ERROR "User supplied -DCMAKE_OSX_ARCHITECTURES overrides BUILD_MACOS_FATLIB=ON")
|
||||
else()
|
||||
SET(CMAKE_OSX_ARCHITECTURES "x86_64;i386")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# Linux
|
||||
if(UNIX AND NOT APPLE)
|
||||
find_library(X_11 X11)
|
||||
find_library(X_TST Xtst)
|
||||
set(EXTRA_LIBS ${X_11} ${X_TST})
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
|
||||
set(PLATFORM_SOURCE_FILES xinputsimulatorimpllinux.cpp xinputsimulatorimpllinux.h)
|
||||
find_library(X_11 X11)
|
||||
find_library(X_TST Xtst)
|
||||
set(EXTRA_LIBS ${X_11} ${X_TST})
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
|
||||
# Not nice, but I don't know how to have CMake generate all dependencies
|
||||
# One could run ldd(1) on the .so and extract all deps...
|
||||
set(PKG_CONFIG_EXTRA_LIBS "-lX11 -lXtst -lXext -lxcb -lXau -pthread -lXdmcp -lrt")
|
||||
set(PLATFORM_SOURCE_FILES xinputsimulatorimpllinux.cpp xinputsimulatorimpllinux.h)
|
||||
set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib")
|
||||
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
|
||||
endif(UNIX AND NOT APPLE)
|
||||
|
||||
# Apple
|
||||
if(APPLE)
|
||||
find_library(APP_SERVICES ApplicationServices)
|
||||
find_library(CARBON Carbon)
|
||||
find_library(CORE_FOUNDATION CoreFoundation)
|
||||
set(EXTRA_LIBS ${APP_SERVICES_LIBRARY} ${CARBON} ${CORE_FOUNDATION})
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
|
||||
set(PLATFORM_SOURCE_FILES xinputsimulatorimplmacos.cpp xinputsimulatorimplmacos.h)
|
||||
set(EXTRA_LIBS ${CARBON} ${CORE_FOUNDATION})
|
||||
set(PKG_CONFIG_EXTRA_LIBS "-framework CoreFoundation -framework Carbon")
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
|
||||
set(PLATFORM_SOURCE_FILES xinputsimulatorimplmacos.cpp xinputsimulatorimplmacos.h)
|
||||
set(CMAKE_MACOSX_RPATH ON)
|
||||
endif(APPLE)
|
||||
|
||||
# Windows
|
||||
if(WIN32)
|
||||
#find_library(USER_32 User32.Lib)
|
||||
#set(EXTRA_LIBS ${USER_32})
|
||||
set(PLATFORM_SOURCE_FILES xinputsimulatorimplwin.cpp xinputsimulatorimplwin.h)
|
||||
endif(WIN32)
|
||||
|
||||
set(SOURCE_FILES
|
||||
main.cpp
|
||||
notimplementedexception.cpp
|
||||
notimplementedexception.h
|
||||
xinputsimulator.cpp
|
||||
xinputsimulator.h
|
||||
xinputsimulatorimpl.cpp
|
||||
xinputsimulatorimpl.h
|
||||
${PLATFORM_SOURCE_FILES})
|
||||
|
||||
add_executable(XInputSimulator ${SOURCE_FILES})
|
||||
target_link_libraries(XInputSimulator ${EXTRA_LIBS} )
|
||||
# Windows
|
||||
if(WIN32)
|
||||
#find_library(USER_32 User32.Lib)
|
||||
#set(EXTRA_LIBS ${USER_32})
|
||||
set(PLATFORM_SOURCE_FILES xinputsimulatorimplwin.cpp xinputsimulatorimplwin.h)
|
||||
endif(WIN32)
|
||||
|
||||
set(SOURCE_FILES
|
||||
notimplementedexception.cpp
|
||||
xinputsimulator.cpp
|
||||
xinputsimulator.h
|
||||
xinputsimulatorimpl.cpp
|
||||
xinputsimulatorimpl.h
|
||||
${PLATFORM_SOURCE_FILES})
|
||||
|
||||
link_libraries(${EXTRA_LIBS} )
|
||||
configure_file(XInputSimulator.pc.in XInputSimulator.pc @ONLY)
|
||||
|
||||
if (BUILD_SHARED_LIBS)
|
||||
add_library(XInputSimulator SHARED ${SOURCE_FILES})
|
||||
set_property(TARGET XInputSimulator PROPERTY POSITION_INDEPENDENT_CODE ON)
|
||||
endif()
|
||||
if (BUILD_STATIC_LIBS)
|
||||
add_library(XInputSimulator_static STATIC ${SOURCE_FILES})
|
||||
if (WITH_PIC)
|
||||
set_property(TARGET XInputSimulator_static PROPERTY POSITION_INDEPENDENT_CODE ON)
|
||||
endif()
|
||||
if(NOT WIN32) # Keep lib*.(a|dll) name, but avoid *.lib files overwriting each other on Windows
|
||||
set_target_properties(XInputSimulator_static PROPERTIES OUTPUT_NAME XInputSimulator)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
|
||||
|
||||
IF (NOT (BUILD_STATIC_LIBS OR BUILD_SHARED_LIBS))
|
||||
MESSAGE(FATAL_ERROR "Both -DBUILD_SHARED_LIBS=OFF and -DBUILD_STATIC_LIBS=OFF supplied. Nothing to do...")
|
||||
ENDIF()
|
||||
|
||||
if (BUILD_MANUAL_TEST)
|
||||
add_executable(XInputSimulator_bin main.cpp)
|
||||
target_link_libraries(XInputSimulator_bin XInputSimulator)
|
||||
set_target_properties(XInputSimulator_bin PROPERTIES OUTPUT_NAME "XInputSimulator")
|
||||
endif()
|
||||
|
||||
install(FILES ${CMAKE_BINARY_DIR}/XInputSimulator.pc DESTINATION lib/pkgconfig)
|
||||
install(TARGETS XInputSimulator XInputSimulator_static
|
||||
LIBRARY DESTINATION lib
|
||||
ARCHIVE DESTINATION lib)
|
||||
install(FILES xinputsimulator.h DESTINATION include)
|
||||
|
||||
|
|
|
@ -0,0 +1,14 @@
|
|||
prefix=@CMAKE_INSTALL_PREFIX@
|
||||
exec_prefix=${prefix}
|
||||
libdir=${exec_prefix}/lib
|
||||
includedir=${prefix}/include
|
||||
|
||||
Name: XInputSimulator
|
||||
Description: Cross-Platform Simulator mouse and keyboard input
|
||||
URL: https://github.com/pythoneer/XInputSimulator
|
||||
Version: @PROJECT_VERSION@
|
||||
Requires:
|
||||
Libs: -L${libdir} -lXInputSimulator
|
||||
Libs.private: @PKG_CONFIG_EXTRA_LIBS@
|
||||
Cflags: -I${includedir}
|
||||
|
|
@ -18,7 +18,6 @@ HEADERS += \
|
|||
xinputsimulator.h \
|
||||
xinputsimulatorimpl.h \
|
||||
xinputsimulatorimpllinux.h \
|
||||
notimplementedexception.h \
|
||||
xinputsimulatorimplmacos.h \
|
||||
xinputsimulatorimplwin.h
|
||||
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
// You should have received a copy of the GNU Lesser Public License
|
||||
// along with XInputSimulator. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#include "notimplementedexception.h"
|
||||
#include "xinputsimulator.h"
|
||||
|
||||
NotImplementedException::NotImplementedException()
|
||||
:
|
||||
|
|
|
@ -1,29 +0,0 @@
|
|||
// Copyright 2013 Dustin Bensing
|
||||
|
||||
// This file is part of XInputSimulator.
|
||||
|
||||
// XInputSimulator is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU Lesser Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// any later version.
|
||||
|
||||
// XInputSimulator 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 Lesser Public License for more details.
|
||||
|
||||
// You should have received a copy of the GNU Lesser Public License
|
||||
// along with XInputSimulator. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#ifndef NOTIMPLEMENTEDEXCEPTION_H
|
||||
#define NOTIMPLEMENTEDEXCEPTION_H
|
||||
|
||||
#include <stdexcept>
|
||||
|
||||
class NotImplementedException : public std::runtime_error
|
||||
{
|
||||
public:
|
||||
NotImplementedException();
|
||||
};
|
||||
|
||||
#endif // NOTIMPLEMENTEDEXCEPTION_H
|
|
@ -17,6 +17,32 @@
|
|||
|
||||
#include "xinputsimulator.h"
|
||||
|
||||
#ifdef __linux__
|
||||
#include "xinputsimulatorimpllinux.h"
|
||||
#elif __APPLE__
|
||||
#include "xinputsimulatorimplmacos.h"
|
||||
#elif _WIN32
|
||||
#include "xinputsimulatorimplwin.h"
|
||||
#endif
|
||||
|
||||
XInputSimulator & XInputSimulator::getInstance()
|
||||
{
|
||||
static XInputSimulator instance;
|
||||
|
||||
#ifdef __linux__
|
||||
instance.implementation = new XInputSimulatorImplLinux;
|
||||
#elif __APPLE__
|
||||
instance.implementation = new XInputSimulatorImplMacOs;
|
||||
#elif _WIN32
|
||||
instance.implementation = new XInputSimulatorImplWin;
|
||||
#endif
|
||||
return instance;
|
||||
}
|
||||
|
||||
XInputSimulator::~XInputSimulator() {
|
||||
delete implementation;
|
||||
}
|
||||
|
||||
|
||||
//*************************************************//
|
||||
//******************M O U S E**********************//
|
||||
|
|
|
@ -20,21 +20,12 @@
|
|||
|
||||
#include <memory>
|
||||
#include <iostream>
|
||||
#include "xinputsimulatorimpl.h"
|
||||
#include "notimplementedexception.h"
|
||||
|
||||
#ifdef __linux__
|
||||
#include "xinputsimulatorimpllinux.h"
|
||||
#elif __APPLE__
|
||||
#include "xinputsimulatorimplmacos.h"
|
||||
#elif _WIN32
|
||||
#include "xinputsimulatorimplwin.h"
|
||||
#endif
|
||||
#include <stdexcept>
|
||||
|
||||
class XInputSimulator
|
||||
{
|
||||
private:
|
||||
XInputSimulatorImpl *implementation;
|
||||
class XInputSimulatorImpl *implementation;
|
||||
|
||||
XInputSimulator(){}
|
||||
|
||||
|
@ -42,23 +33,9 @@ public:
|
|||
XInputSimulator(XInputSimulator&) = delete;
|
||||
void operator=(XInputSimulator&) = delete;
|
||||
|
||||
~XInputSimulator() {
|
||||
delete implementation;
|
||||
}
|
||||
~XInputSimulator();
|
||||
|
||||
static XInputSimulator & getInstance()
|
||||
{
|
||||
static XInputSimulator instance;
|
||||
|
||||
#ifdef __linux__
|
||||
instance.implementation = new XInputSimulatorImplLinux;
|
||||
#elif __APPLE__
|
||||
instance.implementation = new XInputSimulatorImplMacOs;
|
||||
#elif _WIN32
|
||||
instance.implementation = new XInputSimulatorImplWin;
|
||||
#endif
|
||||
return instance;
|
||||
}
|
||||
static XInputSimulator & getInstance();
|
||||
|
||||
void mouseMoveTo(int x, int y);
|
||||
void mouseMoveRelative(int x, int y);
|
||||
|
@ -83,4 +60,12 @@ public:
|
|||
|
||||
typedef XInputSimulator XIS;
|
||||
|
||||
|
||||
class NotImplementedException : public std::runtime_error
|
||||
{
|
||||
public:
|
||||
NotImplementedException();
|
||||
};
|
||||
|
||||
|
||||
#endif // XINPUTSIMULATOR_H
|
||||
|
|
|
@ -20,7 +20,6 @@
|
|||
#include <unistd.h> //usleep
|
||||
|
||||
#include "xinputsimulatorimpllinux.h"
|
||||
#include "notimplementedexception.h"
|
||||
#include <iostream>
|
||||
|
||||
//memset
|
||||
|
|
|
@ -23,8 +23,8 @@
|
|||
//sleep
|
||||
#include <unistd.h>
|
||||
|
||||
#include "xinputsimulator.h"
|
||||
#include "xinputsimulatorimplmacos.h"
|
||||
#include "notimplementedexception.h"
|
||||
|
||||
//#include <QDebug>
|
||||
|
||||
|
|
|
@ -18,8 +18,8 @@
|
|||
|
||||
#ifdef _WIN32
|
||||
|
||||
#include "xinputsimulator.h"
|
||||
#include "xinputsimulatorimplwin.h"
|
||||
#include "notimplementedexception.h"
|
||||
#include <iostream>
|
||||
|
||||
#include <Windows.h>
|
||||
|
|
Loading…
Reference in New Issue