aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGES8
-rw-r--r--Mk/Uses/cmake.mk54
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)