Sat Mar 25 18:29:45 2023 UTC ()
cmake/python: Set version explicitly with cmake/build.mk

With the old cmake method, USE_CMAKE would cause pyversion.mk to add
variables to CMAKE_ARGS, resulting in the build using the correct
python.  With the new cmake/build.mk, that didn't happen and cmake
would find some python.  If the found python is missing some packages
(that the packges depends on, e.g. py-expat), the build can fail.

Define a variable BUILD_USES_CMAKE when using cmake/build.mk, and
perform cmake-specific processing in pyversion.mk if that is set, in
addition to still doing it if USE_CMAKE is set.

This should be rototilled after the branch; this is an attempt at a
minimally risky fix now.

Resolves failure to build doxygen when python2.7 but not py27-expat is
installed.

Reviewed by wiz@.


(gdt)
diff -r1.7 -r1.8 pkgsrc/devel/cmake/build.mk
diff -r1.146 -r1.147 pkgsrc/lang/python/pyversion.mk

cvs diff -r1.7 -r1.8 pkgsrc/devel/cmake/build.mk (expand / switch to unified diff)

--- pkgsrc/devel/cmake/build.mk 2023/01/25 16:46:37 1.7
+++ pkgsrc/devel/cmake/build.mk 2023/03/25 18:29:44 1.8
@@ -1,14 +1,14 @@ @@ -1,14 +1,14 @@
1# $NetBSD: build.mk,v 1.7 2023/01/25 16:46:37 wiz Exp $ 1# $NetBSD: build.mk,v 1.8 2023/03/25 18:29:44 gdt Exp $
2# 2#
3# This Makefile fragment supports building using the CMake build tool. 3# This Makefile fragment supports building using the CMake build tool.
4# 4#
5# User-settable variables: 5# User-settable variables:
6# 6#
7# CMAKE_GENERATOR 7# CMAKE_GENERATOR
8# Which build tool to use. 8# Which build tool to use.
9# 9#
10# Possible: make ninja 10# Possible: make ninja
11# Default: make 11# Default: make
12# 12#
13# Package-settable variables: 13# Package-settable variables:
14# 14#
@@ -33,26 +33,30 @@ @@ -33,26 +33,30 @@
33# TEST_DIRS 33# TEST_DIRS
34# Directories relative to WRKSRC in which to run the tests. Defaults 34# Directories relative to WRKSRC in which to run the tests. Defaults
35# to CONFIGURE_DIRS. 35# to CONFIGURE_DIRS.
36# 36#
37# INSTALL_DIRS 37# INSTALL_DIRS
38# Directories relative to WRKSRC in which to run the 'install' 38# Directories relative to WRKSRC in which to run the 'install'
39# step. Defaults to CONFIGURE_DIRS. 39# step. Defaults to CONFIGURE_DIRS.
40 40
41CMAKE_REQD?= 0 41CMAKE_REQD?= 0
42.for version in ${CMAKE_REQD} 42.for version in ${CMAKE_REQD}
43TOOL_DEPENDS+= cmake>=${version}:../../devel/cmake 43TOOL_DEPENDS+= cmake>=${version}:../../devel/cmake
44.endfor 44.endfor
45 45
 46# Declare that this package is using cmake, for bl3 files to know
 47# to add to CMAKE_CONFIGURE_ARGS.
 48BUILD_USES_CMAKE= yes
 49
46CMAKE_CONFIGURE_ARGS?= ${CMAKE_ARGS} 50CMAKE_CONFIGURE_ARGS?= ${CMAKE_ARGS}
47 51
48CONFIGURE_ENV+= BUILDLINK_DIR=${BUILDLINK_DIR} 52CONFIGURE_ENV+= BUILDLINK_DIR=${BUILDLINK_DIR}
49 53
50CMAKE_BUILD_DIR?= cmake-pkgsrc-build 54CMAKE_BUILD_DIR?= cmake-pkgsrc-build
51CMAKE_GENERATOR?= make 55CMAKE_GENERATOR?= make
52CMAKE_BUILD_ARGS?= -j ${_MAKE_JOBS_N:U1} 56CMAKE_BUILD_ARGS?= -j ${_MAKE_JOBS_N:U1}
53CMAKE_INSTALL_ARGS?= # empty 57CMAKE_INSTALL_ARGS?= # empty
54.if ${CMAKE_GENERATOR} == "ninja" 58.if ${CMAKE_GENERATOR} == "ninja"
55TOOL_DEPENDS+= ninja-build-[0-9]*:../../devel/ninja-build 59TOOL_DEPENDS+= ninja-build-[0-9]*:../../devel/ninja-build
56_CMAKE_BUILD_SYSTEM?= Ninja 60_CMAKE_BUILD_SYSTEM?= Ninja
57_CMAKE_BUILD_TOOL?= ninja 61_CMAKE_BUILD_TOOL?= ninja
58.else 62.else

cvs diff -r1.146 -r1.147 pkgsrc/lang/python/pyversion.mk (expand / switch to unified diff)

--- pkgsrc/lang/python/pyversion.mk 2023/01/12 10:56:12 1.146
+++ pkgsrc/lang/python/pyversion.mk 2023/03/25 18:29:44 1.147
@@ -1,14 +1,14 @@ @@ -1,14 +1,14 @@
1# $NetBSD: pyversion.mk,v 1.146 2023/01/12 10:56:12 markd Exp $ 1# $NetBSD: pyversion.mk,v 1.147 2023/03/25 18:29:44 gdt Exp $
2 2
3# This file should be included by packages as a way to depend on 3# This file should be included by packages as a way to depend on
4# python when none of the other methods are appropriate, e.g. a 4# python when none of the other methods are appropriate, e.g. a
5# package that produces a binary that embeds python. 5# package that produces a binary that embeds python.
6# It determines which Python version is used as a dependency for 6# It determines which Python version is used as a dependency for
7# a package. 7# a package.
8# 8#
9# === User-settable variables === 9# === User-settable variables ===
10# 10#
11# PYTHON_VERSION_DEFAULT 11# PYTHON_VERSION_DEFAULT
12# The preferred Python version to use. 12# The preferred Python version to use.
13# 13#
14# Possible values: 27 37 38 39 310 311 14# Possible values: 27 37 38 39 310 311
@@ -201,54 +201,54 @@ PY_COMPILE_O_ALL= \ @@ -201,54 +201,54 @@ PY_COMPILE_O_ALL= \
201 201
202PYINC= include/python${PYVERSSUFFIX} 202PYINC= include/python${PYVERSSUFFIX}
203PYLIB= lib/python${PYVERSSUFFIX} 203PYLIB= lib/python${PYVERSSUFFIX}
204PYSITELIB= ${PYLIB}/site-packages 204PYSITELIB= ${PYLIB}/site-packages
205 205
206PRINT_PLIST_AWK+= /^${PYINC:S|/|\\/|g}/ \ 206PRINT_PLIST_AWK+= /^${PYINC:S|/|\\/|g}/ \
207 { gsub(/${PYINC:S|/|\\/|g}/, "$${PYINC}") } 207 { gsub(/${PYINC:S|/|\\/|g}/, "$${PYINC}") }
208PRINT_PLIST_AWK+= /^${PYSITELIB:S|/|\\/|g}/ \ 208PRINT_PLIST_AWK+= /^${PYSITELIB:S|/|\\/|g}/ \
209 { gsub(/${PYSITELIB:S|/|\\/|g}/, "$${PYSITELIB}") } 209 { gsub(/${PYSITELIB:S|/|\\/|g}/, "$${PYSITELIB}") }
210PRINT_PLIST_AWK+= /^${PYLIB:S|/|\\/|g}/ \ 210PRINT_PLIST_AWK+= /^${PYLIB:S|/|\\/|g}/ \
211 { gsub(/${PYLIB:S|/|\\/|g}/, "$${PYLIB}") } 211 { gsub(/${PYLIB:S|/|\\/|g}/, "$${PYLIB}") }
212 212
213ALL_ENV+= PYTHON=${PYTHONBIN} 213ALL_ENV+= PYTHON=${PYTHONBIN}
214.if defined(USE_CMAKE) 214.if defined(USE_CMAKE) || defined(BUILD_USES_CMAKE)
215# used by FindPython 215# used by FindPython
216CMAKE_ARGS+= -DPython_EXECUTABLE:FILEPATH=${PYTHONBIN} 216CMAKE_ARGS+= -DPython_EXECUTABLE:FILEPATH=${PYTHONBIN}
217CMAKE_ARGS+= -DPython_INCLUDE_DIR:PATH=${BUILDLINK_DIR}/${PYINC} 217CMAKE_ARGS+= -DPython_INCLUDE_DIR:PATH=${BUILDLINK_DIR}/${PYINC}
218# used by FindPython2 218# used by FindPython2
219. if !empty(_PYTHON_VERSION:M2*) 219. if !empty(_PYTHON_VERSION:M2*)
220CMAKE_ARGS+= -DPython2_EXECUTABLE:FILEPATH=${PYTHONBIN} 220CMAKE_ARGS+= -DPython2_EXECUTABLE:FILEPATH=${PYTHONBIN}
221CMAKE_ARGS+= -DPython2_INCLUDE_DIR:PATH=${BUILDLINK_DIR}/${PYINC} 221CMAKE_ARGS+= -DPython2_INCLUDE_DIR:PATH=${BUILDLINK_DIR}/${PYINC}
222. endif 222. endif
223# used by FindPython3 223# used by FindPython3
224. if !empty(_PYTHON_VERSION:M3*) 224. if !empty(_PYTHON_VERSION:M3*)
225CMAKE_ARGS+= -DPython3_EXECUTABLE:FILEPATH=${PYTHONBIN} 225CMAKE_ARGS+= -DPython3_EXECUTABLE:FILEPATH=${PYTHONBIN}
226CMAKE_ARGS+= -DPython3_INCLUDE_DIR:PATH=${BUILDLINK_DIR}/${PYINC} 226CMAKE_ARGS+= -DPython3_INCLUDE_DIR:PATH=${BUILDLINK_DIR}/${PYINC}
227. endif 227. endif
228# used by FindPythonInterp.cmake and FindPythonLibs.cmake 228# used by FindPythonInterp.cmake and FindPythonLibs.cmake
229CMAKE_ARGS+= -DPYVERSSUFFIX:STRING=${PYVERSSUFFIX} 229CMAKE_ARGS+= -DPYVERSSUFFIX:STRING=${PYVERSSUFFIX}
230# set this explicitly, as by default it will prefer the built in framework 230# set this explicitly, as by default it will prefer the built in framework
231# on Darwin 231# on Darwin
232CMAKE_ARGS+= -DPYTHON_INCLUDE_DIR:PATH=${BUILDLINK_DIR}/${PYINC} 232CMAKE_ARGS+= -DPYTHON_INCLUDE_DIR:PATH=${BUILDLINK_DIR}/${PYINC}
233CMAKE_ARGS+= -DPYTHON_INCLUDE_PATH:PATH=${BUILDLINK_DIR}/${PYINC} 233CMAKE_ARGS+= -DPYTHON_INCLUDE_PATH:PATH=${BUILDLINK_DIR}/${PYINC}
234CMAKE_ARGS+= -DPYTHON_EXECUTABLE:FILEPATH=${PYTHONBIN} 234CMAKE_ARGS+= -DPYTHON_EXECUTABLE:FILEPATH=${PYTHONBIN}
235.endif 235.endif
236 236
237_VARGROUPS+= pyversion 237_VARGROUPS+= pyversion
238_USER_VARS.pyversion= PYTHON_VERSION_DEFAULT 238_USER_VARS.pyversion= PYTHON_VERSION_DEFAULT
239_PKG_VARS.pyversion= \ 239_PKG_VARS.pyversion= \
240 PYTHON_VERSIONS_ACCEPTED PYTHON_VERSIONS_INCOMPATIBLE \ 240 PYTHON_VERSIONS_ACCEPTED PYTHON_VERSIONS_INCOMPATIBLE \
241 PYTHON_SELF_CONFLICT PYTHON_FOR_BUILD_ONLY USE_CMAKE 241 PYTHON_SELF_CONFLICT PYTHON_FOR_BUILD_ONLY USE_CMAKE BUILD_USES_CMAKE
242_SYS_VARS.pyversion= \ 242_SYS_VARS.pyversion= \
243 PYTHON_VERSION_REQD PYPACKAGE PYVERSSUFFIX PYPKGSRCDIR \ 243 PYTHON_VERSION_REQD PYPACKAGE PYVERSSUFFIX PYPKGSRCDIR \
244 PYPKGPREFIX PYTHONBIN PYTHONCONFIG PY_COMPILE_ALL \ 244 PYPKGPREFIX PYTHONBIN PYTHONCONFIG PY_COMPILE_ALL \
245 PY_COMPILE_O_ALL PYINC PYLIB PYSITELIB CMAKE_ARGS 245 PY_COMPILE_O_ALL PYINC PYLIB PYSITELIB CMAKE_ARGS
246_USE_VARS.pyversion= \ 246_USE_VARS.pyversion= \
247 PKGNAME_REQD PKGNAME_OLD LOCALBASE PREFIX BUILDLINK_DIR PKGNAME 247 PKGNAME_REQD PKGNAME_OLD LOCALBASE PREFIX BUILDLINK_DIR PKGNAME
248_DEF_VARS.pyversion= \ 248_DEF_VARS.pyversion= \
249 CONFLICTS MULTI PLIST_VARS BUILDLINK_API_DEPENDS.${PYPACKAGE} \ 249 CONFLICTS MULTI PLIST_VARS BUILDLINK_API_DEPENDS.${PYPACKAGE} \
250 PYDEPENDENCY PLIST.py2x PLIST.py3x PTHREAD_OPTS TOOL_DEPENDS \ 250 PYDEPENDENCY PLIST.py2x PLIST.py3x PTHREAD_OPTS TOOL_DEPENDS \
251 TEST_DEPENDS BUILDLINK_DEPMETHOD.python PRINT_PLIST_AWK ALL_ENV \ 251 TEST_DEPENDS BUILDLINK_DEPMETHOD.python PRINT_PLIST_AWK ALL_ENV \
252 _PYTHON_VERSIONS_ACCEPTED _PYTHON_VERSION 252 _PYTHON_VERSIONS_ACCEPTED _PYTHON_VERSION
253_IGN_VARS.pyversion= _PYTHON_* 253_IGN_VARS.pyversion= _PYTHON_*
254_LISTED_VARS.pyversion= *_ARGS 254_LISTED_VARS.pyversion= *_ARGS