11cmake_minimum_required (VERSION 3.1 )
2+ project (docopt.cpp VERSION 0.6.1)
23
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 )
65
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 )
1211
12+ #============================================================================
13+ # Internal compiler options
14+ #============================================================================
1315# C++ standard
1416set (CMAKE_CXX_STANDARD_REQUIRED ON )
1517set (CMAKE_CXX_EXTENSIONS OFF )
16- if (NOT CMAKE_CXX_STANDARD )
18+ if (NOT CMAKE_CXX_STANDARD OR CMAKE_CXX_STANDARD LESS 11 )
1719 set (CMAKE_CXX_STANDARD 11)
1820endif ()
1921
2022# Suppression of "unknown pragma" warning on GCC
2123if (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
2325endif ()
2426
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
3032 docopt.h
3133 docopt_private.h
3234 docopt_util.h
3335 docopt_value.h
3436 )
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} " )
4137
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 >)
4446
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)
4659 add_executable (docopt_example examples/naval_fate.cpp )
4760 target_link_libraries (docopt_example docopt )
4861endif ()
4962
50- ########################################################################
51- # example
52-
53- if (WITH_TESTS)
63+ #============================================================================
64+ # Tests
65+ # ============================================================================
66+ if (WITH_TESTS)
5467 set (TESTPROG "${CMAKE_CURRENT_BINARY_DIR} /run_testcase" )
5568 set (TESTCASES "${PROJECT_SOURCE_DIR} /testcases.docopt" )
5669 add_executable (run_testcase run_testcase.cpp )
@@ -63,36 +76,40 @@ if (WITH_TESTS)
6376 add_test ("Testcases docopt" ${TESTPROG} )
6477endif ()
6578
66- ########################################################################
67- # installation
79+ #============================================================================
80+ # Install
81+ #============================================================================
82+ set (export_name "docopt-targets" )
6883
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