git: 4963e985a45d - main - Mk/cmake.mk: add support for indirect argument

From: Max Brazhnikov <makc_at_FreeBSD.org>
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)