Skip to content

Commit

Permalink
Add CMake install target along with build options
Browse files Browse the repository at this point in the history
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
  • Loading branch information
a3f committed Oct 3, 2017
1 parent 19d5be6 commit 7faf7df
Show file tree
Hide file tree
Showing 11 changed files with 137 additions and 101 deletions.
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
Expand Up @@ -18,7 +18,6 @@ HEADERS += \
xinputsimulator.h \
xinputsimulatorimpl.h \
xinputsimulatorimpllinux.h \
notimplementedexception.h \
xinputsimulatorimplmacos.h \
xinputsimulatorimplwin.h

Expand Down
2 changes: 1 addition & 1 deletion XInputSimulator/notimplementedexception.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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()
:
Expand Down
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
Expand Up @@ -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**********************//
Expand Down
39 changes: 12 additions & 27 deletions XInputSimulator/xinputsimulator.h
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand All @@ -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
Expand Up @@ -20,7 +20,6 @@
#include <unistd.h> //usleep

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

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

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

//#include <QDebug>

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

#ifdef _WIN32

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

#include <Windows.h>
Expand Down

0 comments on commit 7faf7df

Please sign in to comment.