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:
Ahmad Fatoum 2017-10-01 11:09:18 +02:00
parent 19d5be6dfc
commit 7faf7dfc29
No known key found for this signature in database
GPG Key ID: C3EAC3DE9321D59B
11 changed files with 136 additions and 100 deletions

View File

@ -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>

108
XInputSimulator/CMakeLists.txt Normal file → Executable file
View File

@ -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)

View File

@ -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}

View File

@ -18,7 +18,6 @@ HEADERS += \
xinputsimulator.h \
xinputsimulatorimpl.h \
xinputsimulatorimpllinux.h \
notimplementedexception.h \
xinputsimulatorimplmacos.h \
xinputsimulatorimplwin.h

View File

@ -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()
:

View File

@ -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

View File

@ -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**********************//

View File

@ -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

View File

@ -20,7 +20,6 @@
#include <unistd.h> //usleep
#include "xinputsimulatorimpllinux.h"
#include "notimplementedexception.h"
#include <iostream>
//memset

View File

@ -23,8 +23,8 @@
//sleep
#include <unistd.h>
#include "xinputsimulator.h"
#include "xinputsimulatorimplmacos.h"
#include "notimplementedexception.h"
//#include <QDebug>

View File

@ -18,8 +18,8 @@
#ifdef _WIN32
#include "xinputsimulator.h"
#include "xinputsimulatorimplwin.h"
#include "notimplementedexception.h"
#include <iostream>
#include <Windows.h>