Skip to content

Commit 5b9a162

Browse files
authored
Merge pull request #1345 from LecrisUT/cmake/maintenance
Allow building with CMake 4.0 and use GNUInstalldirs
2 parents fb37ced + 50cc597 commit 5b9a162

File tree

2 files changed

+49
-58
lines changed

2 files changed

+49
-58
lines changed

zproject_cmake.gsl

Lines changed: 47 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ $(project.GENERATED_WARNING_HEADER:)
1919
########################################################################
2020
# Project setup
2121
########################################################################
22-
cmake_minimum_required(VERSION 2.8.12)
22+
cmake_minimum_required(VERSION 2.8...4.0)
2323
project($(project.name:c))
2424
.if project.use_cxx
2525
enable_language(CXX)
@@ -28,7 +28,8 @@ enable_language(C)
2828
.endif
2929
enable_testing()
3030

31-
set(SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
31+
include(GNUInstallDirs)
32+
3233
set(CMAKE_EXPORT_COMPILE_COMMANDS 1)
3334
# Select flags
3435
if(MSVC)
@@ -48,7 +49,7 @@ set(pkg_config_names_private "")
4849
########################################################################
4950
.if project.stable
5051
if (NOT CMAKE_BUILD_TYPE)
51-
if (EXISTS "${SOURCE_DIR}/.git")
52+
if (EXISTS "${PROJECT_SOURCE_DIR}/.git")
5253
set (CMAKE_BUILD_TYPE Debug)
5354
else ()
5455
# 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))
106107

107108
. endif
108109
.endfor
109-
file(REMOVE "${SOURCE_DIR}/src/platform.h")
110+
file(REMOVE "${PROJECT_SOURCE_DIR}/src/platform.h")
110111

111112
file(WRITE "${PROJECT_BINARY_DIR}/platform.h.in" "
112113
#cmakedefine HAVE_LINUX_WIRELESS_H
@@ -127,9 +128,9 @@ if (WIN32)
127128
if (MSVC AND NOT (CMAKE_CXX_COMPILER_ID MATCHES "Clang"))
128129
enable_language(CXX)
129130
. 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)")
131132
. else
132-
file(GLOB sources "${SOURCE_DIR}/src/*.$(project.source_ext)")
133+
file(GLOB sources "${PROJECT_SOURCE_DIR}/src/*.$(project.source_ext)")
133134
. endif
134135
set_source_files_properties(
135136
${sources}
@@ -156,7 +157,7 @@ if (CYGWIN)
156157
set(MORE_LIBRARIES)
157158
endif()
158159

159-
list(APPEND CMAKE_MODULE_PATH "${SOURCE_DIR}")
160+
list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}")
160161
set(OPTIONAL_LIBRARIES)
161162
set(OPTIONAL_LIBRARIES_STATIC)
162163
.for use where !(implied & private)
@@ -271,15 +272,15 @@ ENDIF (ENABLE_DRAFTS)
271272
. endif
272273

273274
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})
275276

276277
.if count (project.class)
277278
########################################################################
278279
# library
279280
########################################################################
280281

281282

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}")
283284
set ($(project.linkname)_sources
284285
.for class where !draft
285286
. if project.use_cxx
@@ -365,15 +366,12 @@ if ($(PROJECT.PREFIX)_BUILD_SHARED)
365366

366367
install(TARGETS $(project.linkname)
367368
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
371369
)
372370

373371
target_include_directories($(project.linkname)
374372
PUBLIC
375373
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
376-
$<INSTALL_INTERFACE:include>
374+
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
377375
)
378376
endif()
379377

@@ -402,15 +400,12 @@ if ($(PROJECT.PREFIX)_BUILD_STATIC)
402400

403401
install(TARGETS $(project.linkname)-static
404402
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
408403
)
409404

410405
target_include_directories($(project.linkname)-static
411406
PUBLIC
412407
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
413-
$<INSTALL_INTERFACE:include>
408+
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
414409
)
415410
target_compile_definitions($(project.linkname)-static
416411
PUBLIC $(PROJECT.PREFIX)_STATIC
@@ -429,21 +424,21 @@ include(${CMAKE_CURRENT_SOURCE_DIR}/src/CMakeLists-local.txt) # Optional project
429424
set (VERSION "$(->version.major).$(->version.minor).$(->version.patch)")
430425
set (prefix "${CMAKE_INSTALL_PREFIX}")
431426
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}")
434429
IF (ENABLE_DRAFTS)
435430
set (pkg_config_defines "-D$(PROJECT.PREFIX)_BUILD_DRAFT_API=1")
436431
ELSE (ENABLE_DRAFTS)
437432
set (pkg_config_defines "")
438433
ENDIF (ENABLE_DRAFTS)
439434
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"
442437
@ONLY)
443438

444439
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"
447442
)
448443

449444
########################################################################
@@ -453,8 +448,7 @@ include(CMakePackageConfigHelpers)
453448
if (WIN32)
454449
set(CMAKECONFIG_INSTALL_DIR "CMake" CACHE STRING "install path for $(project.linkname)Config.cmake")
455450
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")
458452
endif()
459453

460454
if (NOT CMAKE_VERSION VERSION_LESS 3.0)
@@ -482,9 +476,9 @@ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/$(project.linkname)Config.cmake
482476
add_executable(
483477
$(main.name)
484478
. if project.use_cxx
485-
"${SOURCE_DIR}/src/$(name).$(project.source_ext)"
479+
"${PROJECT_SOURCE_DIR}/src/$(name).$(project.source_ext)"
486480
. else
487-
"${SOURCE_DIR}/src/$(name).$(project.source_ext)"
481+
"${PROJECT_SOURCE_DIR}/src/$(name).$(project.source_ext)"
488482
. endif
489483
)
490484
if (TARGET $(project.linkname))
@@ -517,9 +511,7 @@ target_link_libraries(
517511
)
518512
endif()
519513
. if main.scope = "public"
520-
install(TARGETS $(main.name)
521-
RUNTIME DESTINATION bin
522-
)
514+
install(TARGETS $(main.name))
523515
. endif
524516
.endfor
525517

@@ -610,34 +602,33 @@ include(CTest)
610602
# cleanup
611603
########################################################################
612604
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+
)
614630
endif()
615631

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-
641632
include(ClangFormat OPTIONAL)
642633

643634
########################################################################

zproject_java.gsl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ gsl from "zproject_java_lib.gsl"
2323
.macro generate_wrapper
2424
.output "$(topdir)/$(project.prefix:c)-jni/CMakeLists.txt"
2525
$(project.GENERATED_WARNING_HEADER:)
26-
cmake_minimum_required (VERSION 2.8)
26+
cmake_minimum_required (VERSION 2.8...4.0)
2727

2828
project ($(project.linkname)jni CXX)
2929
enable_language (C)
@@ -959,7 +959,7 @@ $(project.GENERATED_WARNING_HEADER:)
959959
.
960960
.output "$(topdir)/$(project.prefix:c)-jni/android/CMakeLists.txt"
961961
$(project.GENERATED_WARNING_HEADER:)
962-
cmake_minimum_required (VERSION 3.6)
962+
cmake_minimum_required (VERSION 3.6...4.0)
963963

964964
project ($(project.name:c)jni CXX)
965965
enable_language (C)

0 commit comments

Comments
 (0)