git: 4963e985a45d - main - Mk/cmake.mk: add support for indirect argument
Date: Mon, 08 Apr 2024 09:27:14 UTC
The branch main has been updated by makc: URL: https://cgit.FreeBSD.org/ports/commit/?id=4963e985a45dca57a9dba4d3c39d8862ac9cc185 commit 4963e985a45dca57a9dba4d3c39d8862ac9cc185 Author: Max Brazhnikov <makc@FreeBSD.org> AuthorDate: 2024-04-08 09:15:42 +0000 Commit: Max Brazhnikov <makc@FreeBSD.org> CommitDate: 2024-04-08 09:15:42 +0000 Mk/cmake.mk: add support for indirect argument Add indirect to list of arguments for USES=cmake. cmake:indirect is intended primarily for ports, which use meson or pep517 for build, but rely on cmake underneath. Update documentation while here. Differential Revision: https://reviews.freebsd.org/D44509 --- CHANGES | 8 ++++++++ Mk/Uses/cmake.mk | 54 ++++++++++++++++++++++++++++++++++-------------------- 2 files changed, 42 insertions(+), 20 deletions(-) diff --git a/CHANGES b/CHANGES index b840bc11fdeb..ebfabbffd719 100644 --- a/CHANGES +++ b/CHANGES @@ -10,6 +10,14 @@ in the release notes and/or placed into UPDATING. All ports committers are allowed to commit to this file. +20240408: +AUTHOR: makc@FreeBSD.org + + USES=cmake now supports `indirect' argument. This argument adds cmake binary + to the BUILD_DEPENDS and and exposes CMAKE_ARGS and some other helpers, but + does not run cmake in the configure step. cmake:indirect is intended + primarily for ports which use meson or pep517 for build. + 20240229: AUTHOR: tijl@FreeBSD.org diff --git a/Mk/Uses/cmake.mk b/Mk/Uses/cmake.mk index 8229fa9cbb55..e9a9dc64df58 100644 --- a/Mk/Uses/cmake.mk +++ b/Mk/Uses/cmake.mk @@ -2,9 +2,12 @@ # # Feature: cmake # Usage: USES=cmake or USES=cmake:ARGS -# Valid ARGS: insource, run, noninja, testing +# Valid ARGS: insource, indirect, noninja, run, testing # ARGS description: # insource do not perform an out-of-source build +# indirect do not run cmake for configure step, only add build dependency. +# This should be set only for ports which use other build systems, +# e.g. pep517 or meson, but rely internally on cmake. # noninja don't use ninja instead of make # Setting this should be an exception, and hints to an issue # inside the ports build system. @@ -31,6 +34,7 @@ # CMAKE_OFF Appends -D<var>:bool=OFF to the CMAKE_ARGS. # CMAKE_ARGS - Arguments passed to cmake # Default: see below +# Variables for ports which use cmake for configure # CMAKE_BUILD_TYPE - Type of build (cmake predefined build types). # Projects may have their own build profiles. # CMake supports the following types: Debug, @@ -38,19 +42,28 @@ # Debug and Release profiles respect system # CFLAGS, RelWithDebInfo and MinSizeRel will set # CFLAGS to "-O2 -g" and "-Os -DNDEBUG". -# Default: Release, if WITH_DEBUG is not set, -# Debug otherwise +# Default: Release, if neither WITH_DEBUG nor WITH_DEBUGINFO is set, +# RelWithDebInfo, if WITH_DEBUGINFO is set, +# Debug, if WITH_DEBUG is set. # CMAKE_SOURCE_PATH - Path to the source directory # Default: ${WRKSRC} +# Variables for ports which use cmake for testing +# CMAKE_TESTING_ARGS - Additional arguments passed to cmake on test target. +# CMAKE_TESTING_ON Appends -D<var>:bool=ON to the CMAKE_TESTING_ARGS. +# Default: BUILD_TESTING +# CMAKE_TESTING_OFF Appends -D<var>:bool=OFF to the CMAKE_TESTING_ARGS. +# Default: empty +# CMAKE_TESTING_TARGET - Name of the test target. Default: test # # MAINTAINER: kde@FreeBSD.org .if !defined(_INCLUDE_USES_CMAKE_MK) _INCLUDE_USES_CMAKE_MK= yes -_valid_ARGS= insource run noninja testing _internal +_valid_ARGS= insource indirect noninja run testing _internal _CMAKE_VERSION= 3.28.3 +CMAKE_BIN= ${LOCALBASE}/bin/cmake # Sanity check . for arg in ${cmake_ARGS} @@ -59,12 +72,14 @@ IGNORE= Incorrect 'USES+= cmake:${cmake_ARGS}' usage: argument [${arg}] is not r . endif . endfor -# Check whehter other flags than only '_internal' are passed (this should be equivalent to PORT = devel/cmake-core -. if ${cmake_ARGS} != _internal -CMAKE_BIN= ${LOCALBASE}/bin/cmake +. if !empty(cmake_ARGS:M_internal) +# _internal is intended only for devel/cmake-core +MASTER_SITES?= https://github.com/Kitware/CMake/releases/download/v${DISTVERSION}/ \ + https://www.cmake.org/files/v${DISTVERSION}/ +. else BUILD_DEPENDS+= ${CMAKE_BIN}:devel/cmake-core -. if ${cmake_ARGS:Mrun} +. if !empty(cmake_ARGS:Mrun) RUN_DEPENDS+= ${CMAKE_BIN}:devel/cmake-core . endif @@ -76,12 +91,6 @@ CMAKE_BUILD_TYPE?= RelWithDebInfo CMAKE_BUILD_TYPE?= Release . endif #defined(WITH_DEBUG) -PLIST_SUB+= CMAKE_BUILD_TYPE="${CMAKE_BUILD_TYPE:tl}" - -. if defined(STRIP) && ${STRIP} != "" && !defined(WITH_DEBUG) && !defined(WITH_DEBUGINFO) -INSTALL_TARGET?= install/strip -. endif - CMAKE_ARGS+= -DCMAKE_C_COMPILER:STRING="${CC}" \ -DCMAKE_CXX_COMPILER:STRING="${CXX}" \ -DCMAKE_C_FLAGS:STRING="${CFLAGS}" \ @@ -116,6 +125,17 @@ CMAKE_NOCOLOR= yes . if defined(CMAKE_NOCOLOR) CMAKE_ARGS+= -DCMAKE_COLOR_MAKEFILE:BOOL=OFF . endif +. endif + +. if empty(cmake_ARGS:Mindirect) +. if defined(STRIP) && ${STRIP} != "" && !defined(WITH_DEBUG) && !defined(WITH_DEBUGINFO) +INSTALL_TARGET?= install/strip +. endif +. endif + +# Use cmake for configure stage and for testing +. if empty(cmake_ARGS:M_internal) && empty(cmake_ARGS:Mindirect) +PLIST_SUB+= CMAKE_BUILD_TYPE="${CMAKE_BUILD_TYPE:tl}" _CMAKE_MSG= "===> Performing in-source build" CMAKE_SOURCE_PATH?= ${WRKSRC} @@ -176,10 +196,4 @@ do-test: . endif . endif -. if !empty(cmake_ARGS:M_internal) -MASTER_SITES?= https://github.com/Kitware/CMake/releases/download/v${DISTVERSION}/ \ - https://www.cmake.org/files/v${DISTVERSION}/ - -. endif - .endif #!defined(_INCLUDE_USES_CMAKE_MK)