Skip to content

Add CMake install target along with build options #1

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 1 addition & 11 deletions XInputSimulator/.idea/workspace.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

110 changes: 81 additions & 29 deletions XInputSimulator/CMakeLists.txt
100644 → 100755
Original file line number Diff line number Diff line change
@@ -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)

14 changes: 14 additions & 0 deletions XInputSimulator/XInputSimulator.pc.in
Original file line number Diff line number Diff line change
@@ -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}

1 change: 0 additions & 1 deletion XInputSimulator/XInputSimulator.pro
Original file line number Diff line number Diff line change
@@ -18,7 +18,6 @@ HEADERS += \
xinputsimulator.h \
xinputsimulatorimpl.h \
xinputsimulatorimpllinux.h \
notimplementedexception.h \
xinputsimulatorimplmacos.h \
xinputsimulatorimplwin.h

2 changes: 1 addition & 1 deletion XInputSimulator/notimplementedexception.cpp
Original file line number Diff line number Diff line change
@@ -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()
:
29 changes: 0 additions & 29 deletions XInputSimulator/notimplementedexception.h

This file was deleted.

26 changes: 26 additions & 0 deletions XInputSimulator/xinputsimulator.cpp
Original file line number Diff line number Diff line change
@@ -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**********************//
39 changes: 12 additions & 27 deletions XInputSimulator/xinputsimulator.h
Original file line number Diff line number Diff line change
@@ -20,45 +20,22 @@

#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(){}

public:
XInputSimulator(XInputSimulator&) = delete;
void operator=(XInputSimulator&) = delete;

~XInputSimulator() {
delete implementation;
}

static XInputSimulator & getInstance()
{
static XInputSimulator instance;
~XInputSimulator();

#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 @@ class XInputSimulator

typedef XInputSimulator XIS;


class NotImplementedException : public std::runtime_error
{
public:
NotImplementedException();
};


#endif // XINPUTSIMULATOR_H
1 change: 0 additions & 1 deletion XInputSimulator/xinputsimulatorimpllinux.cpp
Original file line number Diff line number Diff line change
@@ -20,7 +20,6 @@
#include <unistd.h> //usleep

#include "xinputsimulatorimpllinux.h"
#include "notimplementedexception.h"
#include <iostream>

//memset
2 changes: 1 addition & 1 deletion XInputSimulator/xinputsimulatorimplmacos.cpp
Original file line number Diff line number Diff line change
@@ -23,8 +23,8 @@
//sleep
#include <unistd.h>

#include "xinputsimulator.h"
#include "xinputsimulatorimplmacos.h"
#include "notimplementedexception.h"

//#include <QDebug>

2 changes: 1 addition & 1 deletion XInputSimulator/xinputsimulatorimplwin.cpp
Original file line number Diff line number Diff line change
@@ -18,8 +18,8 @@

#ifdef _WIN32

#include "xinputsimulator.h"
#include "xinputsimulatorimplwin.h"
#include "notimplementedexception.h"
#include <iostream>

#include <Windows.h>