Skip to content

Commit 8e4d5af

Browse files
committed
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
1 parent 19d5be6 commit 8e4d5af

11 files changed

+137
-101
lines changed

XInputSimulator/.idea/workspace.xml

+1-11
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

XInputSimulator/CMakeLists.txt

100644100755
+81-29
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,93 @@
11
cmake_minimum_required(VERSION 2.8.4)
22
project(XInputSimulator)
3+
set(PROJECT_VERSION 0.1)
4+
5+
option(WITH_PIC "Compile static library as position-independent code" OFF) # Shared library is always PIC
6+
option(BUILD_STATIC_LIBS "Build the static library" ON)
7+
option(BUILD_SHARED_LIBS "Build the shared library" ON)
8+
option(BUILD_MACOS_FATLIB "Build Fat library for both i386 and x86_64 on macOS" ON)
9+
option(BUILD_MANUAL_TEST "Build the test application" ON)
10+
11+
if(BUILD_MACOS_FATLIB)
12+
if (CMAKE_OSX_ARCHITECTURES)
13+
message(FATAL_ERROR "User supplied -DCMAKE_OSX_ARCHITECTURES overrides BUILD_MACOS_FATLIB=ON")
14+
else()
15+
SET(CMAKE_OSX_ARCHITECTURES "x86_64;i386")
16+
endif()
17+
endif()
318

419
# Linux
520
if(UNIX AND NOT APPLE)
6-
find_library(X_11 X11)
7-
find_library(X_TST Xtst)
8-
set(EXTRA_LIBS ${X_11} ${X_TST})
9-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
10-
set(PLATFORM_SOURCE_FILES xinputsimulatorimpllinux.cpp xinputsimulatorimpllinux.h)
21+
find_library(X_11 X11)
22+
find_library(X_TST Xtst)
23+
set(EXTRA_LIBS ${X_11} ${X_TST})
24+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
25+
# Not nice, but I don't know how to have CMake generate all dependencies
26+
# One could run ldd(1) on the .so and extract all deps...
27+
set(PKG_CONFIG_EXTRA_LIBS "-lX11 -lXtst -lXext -lxcb -lXau -pthread -lXdmcp -lrt")
28+
set(PLATFORM_SOURCE_FILES xinputsimulatorimpllinux.cpp xinputsimulatorimpllinux.h)
29+
set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib")
30+
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
1131
endif(UNIX AND NOT APPLE)
1232

1333
# Apple
1434
if(APPLE)
15-
find_library(APP_SERVICES ApplicationServices)
1635
find_library(CARBON Carbon)
1736
find_library(CORE_FOUNDATION CoreFoundation)
18-
set(EXTRA_LIBS ${APP_SERVICES_LIBRARY} ${CARBON} ${CORE_FOUNDATION})
19-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
20-
set(PLATFORM_SOURCE_FILES xinputsimulatorimplmacos.cpp xinputsimulatorimplmacos.h)
37+
set(EXTRA_LIBS ${CARBON} ${CORE_FOUNDATION})
38+
set(PKG_CONFIG_EXTRA_LIBS "-framework Carbon -framework Core")
39+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
40+
set(PLATFORM_SOURCE_FILES xinputsimulatorimplmacos.cpp xinputsimulatorimplmacos.h)
41+
set(CMAKE_MACOSX_RPATH ON)
2142
endif(APPLE)
22-
23-
# Windows
24-
if(WIN32)
25-
#find_library(USER_32 User32.Lib)
26-
#set(EXTRA_LIBS ${USER_32})
27-
set(PLATFORM_SOURCE_FILES xinputsimulatorimplwin.cpp xinputsimulatorimplwin.h)
28-
endif(WIN32)
29-
30-
set(SOURCE_FILES
31-
main.cpp
32-
notimplementedexception.cpp
33-
notimplementedexception.h
34-
xinputsimulator.cpp
35-
xinputsimulator.h
36-
xinputsimulatorimpl.cpp
37-
xinputsimulatorimpl.h
38-
${PLATFORM_SOURCE_FILES})
39-
40-
add_executable(XInputSimulator ${SOURCE_FILES})
41-
target_link_libraries(XInputSimulator ${EXTRA_LIBS} )
43+
44+
# Windows
45+
if(WIN32)
46+
#find_library(USER_32 User32.Lib)
47+
#set(EXTRA_LIBS ${USER_32})
48+
set(PLATFORM_SOURCE_FILES xinputsimulatorimplwin.cpp xinputsimulatorimplwin.h)
49+
endif(WIN32)
50+
51+
set(SOURCE_FILES
52+
notimplementedexception.cpp
53+
xinputsimulator.cpp
54+
xinputsimulator.h
55+
xinputsimulatorimpl.cpp
56+
xinputsimulatorimpl.h
57+
${PLATFORM_SOURCE_FILES})
58+
59+
link_libraries(${EXTRA_LIBS} )
60+
configure_file(XInputSimulator.pc.in XInputSimulator.pc @ONLY)
61+
62+
if (BUILD_SHARED_LIBS)
63+
add_library(XInputSimulator SHARED ${SOURCE_FILES})
64+
set_property(TARGET XInputSimulator PROPERTY POSITION_INDEPENDENT_CODE ON)
65+
endif()
66+
if (BUILD_STATIC_LIBS)
67+
add_library(XInputSimulator_static STATIC ${SOURCE_FILES})
68+
if (WITH_PIC)
69+
set_property(TARGET XInputSimulator_static PROPERTY POSITION_INDEPENDENT_CODE ON)
70+
endif()
71+
if(NOT WIN32) # Keep lib*.(a|dll) name, but avoid *.lib files overwriting each other on Windows
72+
set_target_properties(XInputSimulator_static PROPERTIES OUTPUT_NAME XInputSimulator)
73+
endif()
74+
endif()
75+
76+
77+
78+
IF (NOT (BUILD_STATIC_LIBS OR BUILD_SHARED_LIBS))
79+
MESSAGE(FATAL_ERROR "Both -DBUILD_SHARED_LIBS=OFF and -DBUILD_STATIC_LIBS=OFF supplied. Nothing to do...")
80+
ENDIF()
81+
82+
if (BUILD_MANUAL_TEST)
83+
add_executable(XInputSimulator_bin main.cpp)
84+
target_link_libraries(XInputSimulator_bin XInputSimulator)
85+
set_target_properties(XInputSimulator_bin PROPERTIES OUTPUT_NAME "XInputSimulator")
86+
endif()
87+
88+
install(FILES ${CMAKE_BINARY_DIR}/XInputSimulator.pc DESTINATION lib/pkgconfig)
89+
install(TARGETS XInputSimulator XInputSimulator_static
90+
LIBRARY DESTINATION lib
91+
ARCHIVE DESTINATION lib)
92+
install(FILES xinputsimulator.h DESTINATION include)
93+

XInputSimulator/XInputSimulator.pc.in

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
prefix=@CMAKE_INSTALL_PREFIX@
2+
exec_prefix=${prefix}
3+
libdir=${exec_prefix}/lib
4+
includedir=${prefix}/include
5+
6+
Name: XInputSimulator
7+
Description: Cross-Platform Simulator mouse and keyboard input
8+
URL: https://github.com/pythoneer/XInputSimulator
9+
Version: @PROJECT_VERSION@
10+
Requires:
11+
Libs: -L${libdir} -lXInputSimulator
12+
Libs.private: @PKG_CONFIG_EXTRA_LIBS@
13+
Cflags: -I${includedir}
14+

XInputSimulator/XInputSimulator.pro

-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ HEADERS += \
1818
xinputsimulator.h \
1919
xinputsimulatorimpl.h \
2020
xinputsimulatorimpllinux.h \
21-
notimplementedexception.h \
2221
xinputsimulatorimplmacos.h \
2322
xinputsimulatorimplwin.h
2423

XInputSimulator/notimplementedexception.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
// You should have received a copy of the GNU Lesser Public License
1616
// along with XInputSimulator. If not, see <http://www.gnu.org/licenses/>.
1717

18-
#include "notimplementedexception.h"
18+
#include "xinputsimulator.h"
1919

2020
NotImplementedException::NotImplementedException()
2121
:

XInputSimulator/notimplementedexception.h

-29
This file was deleted.

XInputSimulator/xinputsimulator.cpp

+26
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,32 @@
1717

1818
#include "xinputsimulator.h"
1919

20+
#ifdef __linux__
21+
#include "xinputsimulatorimpllinux.h"
22+
#elif __APPLE__
23+
#include "xinputsimulatorimplmacos.h"
24+
#elif _WIN32
25+
#include "xinputsimulatorimplwin.h"
26+
#endif
27+
28+
XInputSimulator & XInputSimulator::getInstance()
29+
{
30+
static XInputSimulator instance;
31+
32+
#ifdef __linux__
33+
instance.implementation = new XInputSimulatorImplLinux;
34+
#elif __APPLE__
35+
instance.implementation = new XInputSimulatorImplMacOs;
36+
#elif _WIN32
37+
instance.implementation = new XInputSimulatorImplWin;
38+
#endif
39+
return instance;
40+
}
41+
42+
XInputSimulator::~XInputSimulator() {
43+
delete implementation;
44+
}
45+
2046

2147
//*************************************************//
2248
//******************M O U S E**********************//

XInputSimulator/xinputsimulator.h

+12-27
Original file line numberDiff line numberDiff line change
@@ -20,45 +20,22 @@
2020

2121
#include <memory>
2222
#include <iostream>
23-
#include "xinputsimulatorimpl.h"
24-
#include "notimplementedexception.h"
25-
26-
#ifdef __linux__
27-
#include "xinputsimulatorimpllinux.h"
28-
#elif __APPLE__
29-
#include "xinputsimulatorimplmacos.h"
30-
#elif _WIN32
31-
#include "xinputsimulatorimplwin.h"
32-
#endif
23+
#include <stdexcept>
3324

3425
class XInputSimulator
3526
{
3627
private:
37-
XInputSimulatorImpl *implementation;
28+
class XInputSimulatorImpl *implementation;
3829

3930
XInputSimulator(){}
4031

4132
public:
4233
XInputSimulator(XInputSimulator&) = delete;
4334
void operator=(XInputSimulator&) = delete;
4435

45-
~XInputSimulator() {
46-
delete implementation;
47-
}
48-
49-
static XInputSimulator & getInstance()
50-
{
51-
static XInputSimulator instance;
36+
~XInputSimulator();
5237

53-
#ifdef __linux__
54-
instance.implementation = new XInputSimulatorImplLinux;
55-
#elif __APPLE__
56-
instance.implementation = new XInputSimulatorImplMacOs;
57-
#elif _WIN32
58-
instance.implementation = new XInputSimulatorImplWin;
59-
#endif
60-
return instance;
61-
}
38+
static XInputSimulator & getInstance();
6239

6340
void mouseMoveTo(int x, int y);
6441
void mouseMoveRelative(int x, int y);
@@ -83,4 +60,12 @@ class XInputSimulator
8360

8461
typedef XInputSimulator XIS;
8562

63+
64+
class NotImplementedException : public std::runtime_error
65+
{
66+
public:
67+
NotImplementedException();
68+
};
69+
70+
8671
#endif // XINPUTSIMULATOR_H

XInputSimulator/xinputsimulatorimpllinux.cpp

-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
#include <unistd.h> //usleep
2121

2222
#include "xinputsimulatorimpllinux.h"
23-
#include "notimplementedexception.h"
2423
#include <iostream>
2524

2625
//memset

XInputSimulator/xinputsimulatorimplmacos.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,8 @@
2323
//sleep
2424
#include <unistd.h>
2525

26+
#include "xinputsimulator.h"
2627
#include "xinputsimulatorimplmacos.h"
27-
#include "notimplementedexception.h"
2828

2929
//#include <QDebug>
3030

XInputSimulator/xinputsimulatorimplwin.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@
1818

1919
#ifdef _WIN32
2020

21+
#include "xinputsimulator.h"
2122
#include "xinputsimulatorimplwin.h"
22-
#include "notimplementedexception.h"
2323
#include <iostream>
2424

2525
#include <Windows.h>

0 commit comments

Comments
 (0)