@@ -19,7 +19,7 @@ $(project.GENERATED_WARNING_HEADER:)
19
19
########################################################################
20
20
# Project setup
21
21
########################################################################
22
- cmake_minimum_required(VERSION 2.8.12 )
22
+ cmake_minimum_required(VERSION 2.8...4.0 )
23
23
project($(project.name:c))
24
24
.if project.use_cxx
25
25
enable_language(CXX)
@@ -28,7 +28,8 @@ enable_language(C)
28
28
.endif
29
29
enable_testing()
30
30
31
- set(SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
31
+ include(GNUInstallDirs)
32
+
32
33
set(CMAKE_EXPORT_COMPILE_COMMANDS 1)
33
34
# Select flags
34
35
if(MSVC)
@@ -48,7 +49,7 @@ set(pkg_config_names_private "")
48
49
########################################################################
49
50
.if project.stable
50
51
if (NOT CMAKE_BUILD_TYPE)
51
- if (EXISTS "${SOURCE_DIR }/.git")
52
+ if (EXISTS "${PROJECT_SOURCE_DIR }/.git")
52
53
set (CMAKE_BUILD_TYPE Debug)
53
54
else ()
54
55
# http://xit0.org/2013/04/cmake-use-git-branch-and-commit-details-in-project/
@@ -106,7 +107,7 @@ check_symbol_exists($(symbol:) "$(header:)" HAVE_DECL_$(SYMBOL:c))
106
107
107
108
. endif
108
109
.endfor
109
- file(REMOVE "${SOURCE_DIR }/src/platform.h")
110
+ file(REMOVE "${PROJECT_SOURCE_DIR }/src/platform.h")
110
111
111
112
file(WRITE "${PROJECT_BINARY_DIR}/platform.h.in" "
112
113
#cmakedefine HAVE_LINUX_WIRELESS_H
@@ -127,9 +128,9 @@ if (WIN32)
127
128
if (MSVC AND NOT (CMAKE_CXX_COMPILER_ID MATCHES "Clang"))
128
129
enable_language(CXX)
129
130
. if project.use_cxx
130
- file(GLOB sources "${SOURCE_DIR }/src/*.$(project.source_ext)")
131
+ file(GLOB sources "${PROJECT_SOURCE_DIR }/src/*.$(project.source_ext)")
131
132
. else
132
- file(GLOB sources "${SOURCE_DIR }/src/*.$(project.source_ext)")
133
+ file(GLOB sources "${PROJECT_SOURCE_DIR }/src/*.$(project.source_ext)")
133
134
. endif
134
135
set_source_files_properties(
135
136
${sources}
@@ -156,7 +157,7 @@ if (CYGWIN)
156
157
set(MORE_LIBRARIES)
157
158
endif()
158
159
159
- list(APPEND CMAKE_MODULE_PATH "${SOURCE_DIR }")
160
+ list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR }")
160
161
set(OPTIONAL_LIBRARIES)
161
162
set(OPTIONAL_LIBRARIES_STATIC)
162
163
.for use where !(implied & private)
@@ -271,15 +272,15 @@ ENDIF (ENABLE_DRAFTS)
271
272
. endif
272
273
273
274
source_group ("Header Files" FILES ${$(project.prefix)_headers})
274
- install(FILES ${$(project.prefix)_headers} DESTINATION include )
275
+ install(FILES ${$(project.prefix)_headers} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} )
275
276
276
277
.if count (project.class)
277
278
########################################################################
278
279
# library
279
280
########################################################################
280
281
281
282
282
- include_directories("${SOURCE_DIR }/src" "${SOURCE_DIR }/include" "${PROJECT_BINARY_DIR}")
283
+ include_directories("${PROJECT_SOURCE_DIR }/src" "${PROJECT_SOURCE_DIR }/include" "${PROJECT_BINARY_DIR}")
283
284
set ($(project.linkname)_sources
284
285
.for class where !draft
285
286
. if project.use_cxx
@@ -365,15 +366,12 @@ if ($(PROJECT.PREFIX)_BUILD_SHARED)
365
366
366
367
install(TARGETS $(project.linkname)
367
368
EXPORT $(project.linkname)-targets
368
- LIBRARY DESTINATION "lib${LIB_SUFFIX}" # .so file
369
- ARCHIVE DESTINATION "lib${LIB_SUFFIX}" # .lib file
370
- RUNTIME DESTINATION bin # .dll file
371
369
)
372
370
373
371
target_include_directories($(project.linkname)
374
372
PUBLIC
375
373
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
376
- $<INSTALL_INTERFACE:include >
374
+ $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR} >
377
375
)
378
376
endif()
379
377
@@ -402,15 +400,12 @@ if ($(PROJECT.PREFIX)_BUILD_STATIC)
402
400
403
401
install(TARGETS $(project.linkname)-static
404
402
EXPORT $(project.linkname)-targets
405
- LIBRARY DESTINATION "lib${LIB_SUFFIX}" # .so file
406
- ARCHIVE DESTINATION "lib${LIB_SUFFIX}" # .lib file
407
- RUNTIME DESTINATION bin # .dll file
408
403
)
409
404
410
405
target_include_directories($(project.linkname)-static
411
406
PUBLIC
412
407
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
413
- $<INSTALL_INTERFACE:include >
408
+ $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR} >
414
409
)
415
410
target_compile_definitions($(project.linkname)-static
416
411
PUBLIC $(PROJECT.PREFIX)_STATIC
@@ -429,21 +424,21 @@ include(${CMAKE_CURRENT_SOURCE_DIR}/src/CMakeLists-local.txt) # Optional project
429
424
set (VERSION "$(->version.major).$(->version.minor).$(->version.patch)")
430
425
set (prefix "${CMAKE_INSTALL_PREFIX}")
431
426
set (exec_prefix "\\${prefix}")
432
- set (libdir "\\${prefix}/lib${LIB_SUFFIX }")
433
- set (includedir "\\${prefix}/include ")
427
+ set (libdir "\\${prefix}/${CMAKE_INSTALL_LIBDIR }")
428
+ set (includedir "\\${prefix}/${CMAKE_INSTALL_INCLUDEDIR} ")
434
429
IF (ENABLE_DRAFTS)
435
430
set (pkg_config_defines "-D$(PROJECT.PREFIX)_BUILD_DRAFT_API=1")
436
431
ELSE (ENABLE_DRAFTS)
437
432
set (pkg_config_defines "")
438
433
ENDIF (ENABLE_DRAFTS)
439
434
configure_file(
440
- "${SOURCE_DIR }/src/$(project.libname).pc.in"
441
- "${SOURCE_DIR }/src/$(project.libname).pc"
435
+ "${PROJECT_SOURCE_DIR }/src/$(project.libname).pc.in"
436
+ "${PROJECT_SOURCE_DIR }/src/$(project.libname).pc"
442
437
@ONLY)
443
438
444
439
install(
445
- FILES "${SOURCE_DIR }/src/$(project.libname).pc"
446
- DESTINATION "lib${LIB_SUFFIX }/pkgconfig"
440
+ FILES "${PROJECT_SOURCE_DIR }/src/$(project.libname).pc"
441
+ DESTINATION "${CMAKE_INSTALL_LIBDIR }/pkgconfig"
447
442
)
448
443
449
444
########################################################################
@@ -453,8 +448,7 @@ include(CMakePackageConfigHelpers)
453
448
if (WIN32)
454
449
set(CMAKECONFIG_INSTALL_DIR "CMake" CACHE STRING "install path for $(project.linkname)Config.cmake")
455
450
else()
456
- # GNUInstallDirs "DATADIR" wrong here; CMake search path wants "share".
457
- set(CMAKECONFIG_INSTALL_DIR "share/cmake/$(project.linkname)" CACHE STRING "install path for $(project.linkname)Config.cmake")
451
+ set(CMAKECONFIG_INSTALL_DIR "${CMAKE_INSTALL_LIBDIR}/cmake/$(project.linkname)" CACHE STRING "install path for $(project.linkname)Config.cmake")
458
452
endif()
459
453
460
454
if (NOT CMAKE_VERSION VERSION_LESS 3.0)
@@ -482,9 +476,9 @@ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/$(project.linkname)Config.cmake
482
476
add_executable(
483
477
$(main.name)
484
478
. if project.use_cxx
485
- "${SOURCE_DIR }/src/$(name).$(project.source_ext)"
479
+ "${PROJECT_SOURCE_DIR }/src/$(name).$(project.source_ext)"
486
480
. else
487
- "${SOURCE_DIR }/src/$(name).$(project.source_ext)"
481
+ "${PROJECT_SOURCE_DIR }/src/$(name).$(project.source_ext)"
488
482
. endif
489
483
)
490
484
if (TARGET $(project.linkname))
@@ -517,9 +511,7 @@ target_link_libraries(
517
511
)
518
512
endif()
519
513
. if main.scope = "public"
520
- install(TARGETS $(main.name)
521
- RUNTIME DESTINATION bin
522
- )
514
+ install(TARGETS $(main.name))
523
515
. endif
524
516
.endfor
525
517
@@ -610,34 +602,33 @@ include(CTest)
610
602
# cleanup
611
603
########################################################################
612
604
if (NOT TARGET distclean)
613
- add_custom_target (distclean @echo Cleaning for source distribution)
605
+ if (CMAKE_VERSION VERSION_LESS 3.17)
606
+ set(rm_command rm -rf)
607
+ else()
608
+ set(rm_command ${CMAKE_COMMAND} -E rm -rf --)
609
+ endif()
610
+ set(cmake_generated ${PROJECT_BINARY_DIR}/CMakeCache.txt
611
+ ${PROJECT_BINARY_DIR}/cmake_install.cmake
612
+ ${PROJECT_BINARY_DIR}/Makefile
613
+ ${PROJECT_BINARY_DIR}/CMakeFiles
614
+ ${PROJECT_BINARY_DIR}/CTestTestfile.cmake
615
+ ${PROJECT_BINARY_DIR}/DartConfiguration.tcl
616
+ ${PROJECT_BINARY_DIR}/Testing
617
+ ${PROJECT_BINARY_DIR}/compile_commands.json
618
+ ${PROJECT_BINARY_DIR}/platform.h
619
+ ${PROJECT_BINARY_DIR}/src/$(project.libname).pc
620
+ ${PROJECT_BINARY_DIR}/src/$(project.libname).so
621
+ ${PROJECT_BINARY_DIR}/src/$(project.name)_selftest
622
+ .for project.main
623
+ ${PROJECT_BINARY_DIR}/src/$(main.name)
624
+ .endfor
625
+ )
626
+ add_custom_target(distclean
627
+ COMMAND ${rm_command} CMakeTmp ${cmake_generated}
628
+ COMMENT Cleaning for source distribution
629
+ )
614
630
endif()
615
631
616
- set(cmake_generated ${PROJECT_BINARY_DIR}/CMakeCache.txt
617
- ${PROJECT_BINARY_DIR}/cmake_install.cmake
618
- ${PROJECT_BINARY_DIR}/Makefile
619
- ${PROJECT_BINARY_DIR}/CMakeFiles
620
- ${PROJECT_BINARY_DIR}/CTestTestfile.cmake
621
- ${PROJECT_BINARY_DIR}/DartConfiguration.tcl
622
- ${PROJECT_BINARY_DIR}/Testing
623
- ${PROJECT_BINARY_DIR}/compile_commands.json
624
- ${PROJECT_BINARY_DIR}/platform.h
625
- ${PROJECT_BINARY_DIR}/src/$(project.libname).pc
626
- ${PROJECT_BINARY_DIR}/src/$(project.libname).so
627
- ${PROJECT_BINARY_DIR}/src/$(project.name)_selftest
628
- .for project.main
629
- ${PROJECT_BINARY_DIR}/src/$(main.name)
630
- .endfor
631
- )
632
-
633
- add_custom_command(
634
- DEPENDS clean
635
- COMMENT "distribution clean"
636
- COMMAND rm
637
- ARGS -rf CMakeTmp ${cmake_generated}
638
- TARGET distclean
639
- )
640
-
641
632
include(ClangFormat OPTIONAL)
642
633
643
634
########################################################################
0 commit comments