1
1
cmake_minimum_required (VERSION 3.1)
2
+ project (docopt.cpp VERSION 0.6.1)
2
3
3
- option (WITH_TESTS "Build tests." OFF )
4
- option (WITH_EXAMPLE "Build example." OFF )
5
- option (WITH_STATIC "Build static libs." ON )
4
+ include (GNUInstallDirs)
6
5
7
- project (docopt.cpp)
8
- include_directories ( " ${PROJECT_SOURCE_DIR} " )
9
-
10
- ########################################################################
11
- # Compiler properties
6
+ #============================================================================
7
+ # Settable options
8
+ #============================================================================
9
+ option (WITH_TESTS "Build tests." OFF )
10
+ option (WITH_EXAMPLE "Build example." OFF )
12
11
12
+ #============================================================================
13
+ # Internal compiler options
14
+ #============================================================================
13
15
# C++ standard
14
16
set (CMAKE_CXX_STANDARD_REQUIRED ON )
15
17
set (CMAKE_CXX_EXTENSIONS OFF )
16
- if (NOT CMAKE_CXX_STANDARD)
18
+ if (NOT CMAKE_CXX_STANDARD OR CMAKE_CXX_STANDARD LESS 11 )
17
19
set (CMAKE_CXX_STANDARD 11)
18
20
endif ()
19
21
20
22
# Suppression of "unknown pragma" warning on GCC
21
23
if (CMAKE_COMPILER_IS_GNUCXX)
22
- set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unknown-pragmas" ) # Code uses #pragma mark
24
+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unknown-pragmas" ) # Code uses #pragma mark
23
25
endif ()
24
26
25
- ########################################################################
26
- # docopt
27
-
28
- set (DOCOPT_SRC
29
- docopt.cpp
27
+ #============================================================================
28
+ # Sources & headers
29
+ #============================================================================
30
+ set (docopt_SOURCES docopt.cpp)
31
+ set (docopt_HEADERS
30
32
docopt.h
31
33
docopt_private.h
32
34
docopt_util.h
33
35
docopt_value.h
34
36
)
35
- if (WITH_STATIC)
36
- add_library (docopt_s STATIC ${DOCOPT_SRC} )
37
- target_include_directories (docopt_s PUBLIC "${PROJECT_SOURCE_DIR} " )
38
- endif ()
39
- add_library (docopt SHARED ${DOCOPT_SRC} )
40
- target_include_directories (docopt PUBLIC "${PROJECT_SOURCE_DIR} " )
41
37
42
- ########################################################################
43
- # tests
38
+ #============================================================================
39
+ # Compile targets
40
+ #============================================================================
41
+ add_library (docopt_o OBJECT ${docopt_SOURCES} ${docopt_HEADERS} )
42
+ set_target_properties (docopt_o PROPERTIES POSITION_INDEPENDENT_CODE TRUE )
43
+
44
+ add_library (docopt SHARED $<TARGET_OBJECTS:docopt_o>)
45
+ add_library (docopt_s STATIC $<TARGET_OBJECTS:docopt_o>)
44
46
45
- if (WITH_EXAMPLE)
47
+ target_include_directories (docopt PUBLIC $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR} > $<INSTALL_INTERFACE:include /docopt>)
48
+ target_include_directories (docopt_s PUBLIC $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR} > $<INSTALL_INTERFACE:include /docopt>)
49
+
50
+ if (NOT MSVC )
51
+ set_target_properties (docopt PROPERTIES OUTPUT_NAME docopt)
52
+ set_target_properties (docopt_s PROPERTIES OUTPUT_NAME docopt)
53
+ endif ()
54
+
55
+ #============================================================================
56
+ # Examples
57
+ #============================================================================
58
+ if (WITH_EXAMPLE)
46
59
add_executable (docopt_example examples/naval_fate.cpp)
47
60
target_link_libraries (docopt_example docopt)
48
61
endif ()
49
62
50
- ########################################################################
51
- # example
52
-
53
- if (WITH_TESTS)
63
+ #============================================================================
64
+ # Tests
65
+ #============================================================================
66
+ if (WITH_TESTS)
54
67
set (TESTPROG "${CMAKE_CURRENT_BINARY_DIR} /run_testcase" )
55
68
set (TESTCASES "${PROJECT_SOURCE_DIR} /testcases.docopt" )
56
69
add_executable (run_testcase run_testcase.cpp)
@@ -63,36 +76,40 @@ if (WITH_TESTS)
63
76
add_test ("Testcases docopt" ${TESTPROG} )
64
77
endif ()
65
78
66
- ########################################################################
67
- # installation
79
+ #============================================================================
80
+ # Install
81
+ #============================================================================
82
+ set (export_name "docopt-targets" )
68
83
69
- INSTALL (TARGETS
70
- docopt
71
- DESTINATION lib)
72
- if (WITH_STATIC)
73
- INSTALL (TARGETS
74
- docopt_s
75
- DESTINATION lib)
76
- endif ()
77
- INSTALL (FILES
78
- docopt.h
79
- docopt_private.h
80
- docopt_util.h
81
- docopt_value.h
82
- DESTINATION include /docopt)
83
- SET (CPACK_PACKAGE_NAME "docopt" )
84
- SET (CPACK_DEBIAN_PACKAGE_DEPENDS "" )
85
- SET (CPACK_RPM_PACKAGE_REQUIRES "" )
86
- SET (CPACK_PACKAGE_DESCRIPTION_SUMMARY "Beautiful command line interfaces" )
87
- SET (CPACK_PACKAGE_VENDOR "Jared Grubb" )
88
- SET (CPACK_PACKAGE_CONTACT ${CPACK_PACKAGE_VENDOR} )
89
- SET (CPACK_PACKAGE_DESCRIPTION_FILE "${PROJECT_SOURCE_DIR} /README.rst" )
90
- SET (CPACK_RESOURCE_FILE_LICENSE "${PROJECT_SOURCE_DIR} /LICENSE-MIT" )
91
- SET (CPACK_PACKAGE_VERSION_MAJOR 0)
92
- SET (CPACK_PACKAGE_VERSION_MINOR 6)
93
- SET (CPACK_PACKAGE_VERSION_PATCH 1)
94
- SET (CPACK_DEBIAN_PACKAGE_SECTION "Development" )
95
- SET (CPACK_RPM_PACKAGE_GROUP "Development/Libraries" )
96
- SET (CPACK_RPM_PACKAGE_LICENSE "MIT" )
97
- SET (CPACK_STRIP_FILES TRUE )
98
- INCLUDE (CPack)
84
+ # Runtime package
85
+ install (TARGETS docopt EXPORT ${export_name} DESTINATION ${CMAKE_INSTALL_LIBDIR} )
86
+
87
+ # Development package
88
+ install (TARGETS docopt_s EXPORT ${export_name} DESTINATION ${CMAKE_INSTALL_LIBDIR} )
89
+ install (FILES ${docopt_HEADERS} DESTINATION include /docopt)
90
+
91
+ # CMake Package
92
+ include (CMakePackageConfigHelpers)
93
+ write_basic_package_version_file("${PROJECT_BINARY_DIR} /docopt-config-version.cmake" COMPATIBILITY SameMajorVersion)
94
+ install (FILES docopt-config.cmake ${PROJECT_BINARY_DIR} /docopt-config-version .cmake DESTINATION "lib/cmake/docopt" )
95
+ install (EXPORT ${export_name} DESTINATION "lib/cmake/docopt" )
96
+
97
+ #============================================================================
98
+ # CPack
99
+ #============================================================================
100
+ set (CPACK_PACKAGE_NAME "docopt" )
101
+ set (CPACK_DEBIAN_PACKAGE_DEPENDS "" )
102
+ set (CPACK_RPM_PACKAGE_REQUIRES "" )
103
+ set (CPACK_PACKAGE_DESCRIPTION_SUMMARY "Beautiful command line interfaces" )
104
+ set (CPACK_PACKAGE_VENDOR "Jared Grubb" )
105
+ set (CPACK_PACKAGE_CONTACT ${CPACK_PACKAGE_VENDOR} )
106
+ set (CPACK_PACKAGE_DESCRIPTION_FILE "${PROJECT_SOURCE_DIR} /README.rst" )
107
+ set (CPACK_RESOURCE_FILE_LICENSE "${PROJECT_SOURCE_DIR} /LICENSE-MIT" )
108
+ set (CPACK_PACKAGE_VERSION_MAJOR ${PROJECT_VERSION_MAJOR} )
109
+ set (CPACK_PACKAGE_VERSION_MINOR ${PROJECT_VERSION_MINOR} )
110
+ set (CPACK_PACKAGE_VERSION_PATCH ${PROJECT_VERSION_PATCH} )
111
+ set (CPACK_DEBIAN_PACKAGE_SECTION "Development" )
112
+ set (CPACK_RPM_PACKAGE_GROUP "Development/Libraries" )
113
+ set (CPACK_RPM_PACKAGE_LICENSE "MIT" )
114
+ set (CPACK_STRIP_FILES TRUE )
115
+ include (CPack)
0 commit comments