Tue Nov 7 11:36:57 2023 UTC ()
Default to python 3.10 if compiler lacks c11 support.


(nia)
diff -r1.156 -r1.157 pkgsrc/lang/python/pyversion.mk
diff -r1.264 -r1.265 pkgsrc/mk/compiler/gcc.mk

cvs diff -r1.156 -r1.157 pkgsrc/lang/python/pyversion.mk (switch to unified diff)

--- pkgsrc/lang/python/pyversion.mk 2023/10/02 20:10:38 1.156
+++ pkgsrc/lang/python/pyversion.mk 2023/11/07 11:36:57 1.157
@@ -1,295 +1,299 @@ @@ -1,295 +1,299 @@
1# $NetBSD: pyversion.mk,v 1.156 2023/10/02 20:10:38 adam Exp $ 1# $NetBSD: pyversion.mk,v 1.157 2023/11/07 11:36:57 nia 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 38 39 310 311 312 14# Possible values: 27 38 39 310 311 312
15# Default: 311 15# Default: 311
16# 16#
17# === Infrastructure variables === 17# === Infrastructure variables ===
18# 18#
19# PYTHON_VERSION_REQD 19# PYTHON_VERSION_REQD
20# Python version to use. This variable should not be set in 20# Python version to use. This variable should not be set in
21# packages. Normally it is used by bulk build tools. 21# packages. Normally it is used by bulk build tools.
22# 22#
23# Possible: ${PYTHON_VERSIONS_ACCEPTED} 23# Possible: ${PYTHON_VERSIONS_ACCEPTED}
24# Default: ${PYTHON_VERSION_DEFAULT} 24# Default: ${PYTHON_VERSION_DEFAULT}
25# 25#
26# === Package-settable variables === 26# === Package-settable variables ===
27# 27#
28# PYTHON_VERSIONS_ACCEPTED 28# PYTHON_VERSIONS_ACCEPTED
29# The Python versions that are acceptable for the package. The 29# The Python versions that are acceptable for the package. The
30# order of the entries matters, since earlier entries are 30# order of the entries matters, since earlier entries are
31# preferred over later ones. 31# preferred over later ones.
32# 32#
33# Possible values: 312 311 310 39 38 27 33# Possible values: 312 311 310 39 38 27
34# Default: 312 311 310 39 38 27 34# Default: 312 311 310 39 38 27
35# 35#
36# PYTHON_VERSIONS_INCOMPATIBLE 36# PYTHON_VERSIONS_INCOMPATIBLE
37# The Python versions that are NOT acceptable for the package. 37# The Python versions that are NOT acceptable for the package.
38# 38#
39# Possible values: 27 38 39 310 311 312 39# Possible values: 27 38 39 310 311 312
40# Default: (empty) 40# Default: (empty)
41# 41#
42# PYTHON_FOR_BUILD_ONLY 42# PYTHON_FOR_BUILD_ONLY
43# Whether Python is needed only at build time or at run time. 43# Whether Python is needed only at build time or at run time.
44# 44#
45# Possible values: yes no test tool 45# Possible values: yes no test tool
46# Default: no 46# Default: no
47# 47#
48# PYTHON_SELF_CONFLICT 48# PYTHON_SELF_CONFLICT
49# If set to "yes", additional CONFLICTS entries are added for 49# If set to "yes", additional CONFLICTS entries are added for
50# registering a conflict between pyNN-<modulename> packages, 50# registering a conflict between pyNN-<modulename> packages,
51# covering all versions. (Expressing CONFLICTS that are limited 51# covering all versions. (Expressing CONFLICTS that are limited
52# to some versions must be done with a hand-written CONFLICTS 52# to some versions must be done with a hand-written CONFLICTS
53# entry.) 53# entry.)
54# 54#
55# Possible values: yes no 55# Possible values: yes no
56# Default: no 56# Default: no
57# 57#
58# === Defined variables === 58# === Defined variables ===
59# 59#
60# PYTHON_VERSION 60# PYTHON_VERSION
61# Version of python that will be used in this build, as 61# Version of python that will be used in this build, as
62# a three-digit number of major_version * 100 + minor_version. 62# a three-digit number of major_version * 100 + minor_version.
63# 63#
64# Examples: 207, 308, 309, 310, 311, 312 64# Examples: 207, 308, 309, 310, 311, 312
65# 65#
66# PYPKGPREFIX 66# PYPKGPREFIX
67# The prefix to use in PKGNAME for extensions which are meant 67# The prefix to use in PKGNAME for extensions which are meant
68# to be installed for multiple Python versions. 68# to be installed for multiple Python versions.
69# 69#
70# Example: py311 70# Example: py311
71# 71#
72# PYVERSSUFFIX 72# PYVERSSUFFIX
73# The suffix to executables and in the library path, equal to 73# The suffix to executables and in the library path, equal to
74# sys.version[0:3]. 74# sys.version[0:3].
75# 75#
76# Example: 3.11 76# Example: 3.11
77# 77#
78# Keywords: python 78# Keywords: python
79# 79#
80 80
81.if !defined(PYTHON_PYVERSION_MK) 81.if !defined(PYTHON_PYVERSION_MK)
82PYTHON_PYVERSION_MK= defined 82PYTHON_PYVERSION_MK= defined
83 83
84# derive a python version from the package name if possible 84# derive a python version from the package name if possible
85# optionally handled quoted package names 85# optionally handled quoted package names
86.if defined(PKGNAME_REQD) && !empty(PKGNAME_REQD:Mpy[0-9][0-9]-*) || \ 86.if defined(PKGNAME_REQD) && !empty(PKGNAME_REQD:Mpy[0-9][0-9]-*) || \
87 defined(PKGNAME_REQD) && !empty(PKGNAME_REQD:M*-py[0-9][0-9]-*) 87 defined(PKGNAME_REQD) && !empty(PKGNAME_REQD:M*-py[0-9][0-9]-*)
88PYTHON_VERSION_REQD?= ${PKGNAME_REQD:C/(^.*-|^)py([0-9][0-9])-.*/\2/} 88PYTHON_VERSION_REQD?= ${PKGNAME_REQD:C/(^.*-|^)py([0-9][0-9])-.*/\2/}
89.elif defined(PKGNAME_REQD) && !empty(PKGNAME_REQD:Mpy[0-9][0-9][0-9]-*) || \ 89.elif defined(PKGNAME_REQD) && !empty(PKGNAME_REQD:Mpy[0-9][0-9][0-9]-*) || \
90 defined(PKGNAME_REQD) && !empty(PKGNAME_REQD:M*-py[0-9][0-9][0-9]-*) 90 defined(PKGNAME_REQD) && !empty(PKGNAME_REQD:M*-py[0-9][0-9][0-9]-*)
91PYTHON_VERSION_REQD?= ${PKGNAME_REQD:C/(^.*-|^)py([0-9][0-9][0-9])-.*/\2/} 91PYTHON_VERSION_REQD?= ${PKGNAME_REQD:C/(^.*-|^)py([0-9][0-9][0-9])-.*/\2/}
92.elif defined(PKGNAME_OLD) && !empty(PKGNAME_OLD:Mpy[0-9][0-9]-*) || \ 92.elif defined(PKGNAME_OLD) && !empty(PKGNAME_OLD:Mpy[0-9][0-9]-*) || \
93 defined(PKGNAME_OLD) && !empty(PKGNAME_OLD:M*-py[0-9][0-9]-*) 93 defined(PKGNAME_OLD) && !empty(PKGNAME_OLD:M*-py[0-9][0-9]-*)
94PYTHON_VERSION_REQD?= ${PKGNAME_OLD:C/(^.*-|^)py([0-9][0-9])-.*/\2/} 94PYTHON_VERSION_REQD?= ${PKGNAME_OLD:C/(^.*-|^)py([0-9][0-9])-.*/\2/}
95.elif defined(PKGNAME_OLD) && !empty(PKGNAME_OLD:Mpy[0-9][0-9][0-9]-*) || \ 95.elif defined(PKGNAME_OLD) && !empty(PKGNAME_OLD:Mpy[0-9][0-9][0-9]-*) || \
96 defined(PKGNAME_OLD) && !empty(PKGNAME_OLD:M*-py[0-9][0-9][0-9]-*) 96 defined(PKGNAME_OLD) && !empty(PKGNAME_OLD:M*-py[0-9][0-9][0-9]-*)
97PYTHON_VERSION_REQD?= ${PKGNAME_OLD:C/(^.*-|^)py([0-9][0-9][0-9])-.*/\2/} 97PYTHON_VERSION_REQD?= ${PKGNAME_OLD:C/(^.*-|^)py([0-9][0-9][0-9])-.*/\2/}
98.endif 98.endif
99 99
100.include "../../mk/bsd.prefs.mk" 100.include "../../mk/bsd.prefs.mk"
101 101
102BUILD_DEFS+= PYTHON_VERSION_DEFAULT 102BUILD_DEFS+= PYTHON_VERSION_DEFAULT
103BUILD_DEFS_EFFECTS+= PYPACKAGE 103BUILD_DEFS_EFFECTS+= PYPACKAGE
104 104
 105.if ${COMPILER_HAS_C11:Uyes} != "no"
105PYTHON_VERSION_DEFAULT?= 311 106PYTHON_VERSION_DEFAULT?= 311
 107.else
 108PYTHON_VERSION_DEFAULT?= 310
 109.endif
106PYTHON_VERSIONS_ACCEPTED?= 312 311 310 39 38 27 110PYTHON_VERSIONS_ACCEPTED?= 312 311 310 39 38 27
107PYTHON_VERSIONS_INCOMPATIBLE?= # empty by default 111PYTHON_VERSIONS_INCOMPATIBLE?= # empty by default
108 112
109# transform the list into individual variables 113# transform the list into individual variables
110.for pv in ${PYTHON_VERSIONS_ACCEPTED} 114.for pv in ${PYTHON_VERSIONS_ACCEPTED}
111. if empty(PYTHON_VERSIONS_INCOMPATIBLE:M${pv}) 115. if empty(PYTHON_VERSIONS_INCOMPATIBLE:M${pv})
112_PYTHON_VERSION_${pv}_OK= yes 116_PYTHON_VERSION_${pv}_OK= yes
113_PYTHON_VERSIONS_ACCEPTED+= ${pv} 117_PYTHON_VERSIONS_ACCEPTED+= ${pv}
114. endif 118. endif
115.endfor 119.endfor
116 120
117# 121#
118# choose a python version where to add, 122# choose a python version where to add,
119# try to be intelligent 123# try to be intelligent
120# 124#
121# if a version is explicitly required, take it 125# if a version is explicitly required, take it
122.if defined(PYTHON_VERSION_REQD) 126.if defined(PYTHON_VERSION_REQD)
123# but check if it is acceptable first, error out otherwise 127# but check if it is acceptable first, error out otherwise
124. if defined(_PYTHON_VERSION_${PYTHON_VERSION_REQD}_OK) 128. if defined(_PYTHON_VERSION_${PYTHON_VERSION_REQD}_OK)
125_PYTHON_VERSION= ${PYTHON_VERSION_REQD} 129_PYTHON_VERSION= ${PYTHON_VERSION_REQD}
126. endif 130. endif
127.else 131.else
128# if the default is accepted, it is first choice 132# if the default is accepted, it is first choice
129. if !defined(_PYTHON_VERSION) 133. if !defined(_PYTHON_VERSION)
130. if defined(_PYTHON_VERSION_${PYTHON_VERSION_DEFAULT}_OK) 134. if defined(_PYTHON_VERSION_${PYTHON_VERSION_DEFAULT}_OK)
131_PYTHON_VERSION= ${PYTHON_VERSION_DEFAULT} 135_PYTHON_VERSION= ${PYTHON_VERSION_DEFAULT}
132. endif 136. endif
133. endif 137. endif
134# prefer an already installed version, in order of "accepted" 138# prefer an already installed version, in order of "accepted"
135. if !defined(_PYTHON_VERSION) 139. if !defined(_PYTHON_VERSION)
136. for pv in ${PYTHON_VERSIONS_ACCEPTED} 140. for pv in ${PYTHON_VERSIONS_ACCEPTED}
137. if defined(_PYTHON_VERSION_${pv}_OK) 141. if defined(_PYTHON_VERSION_${pv}_OK)
138_PYTHON_VERSION?= ${pv} 142_PYTHON_VERSION?= ${pv}
139. endif 143. endif
140. endfor 144. endfor
141. endif 145. endif
142.endif 146.endif
143 147
144# 148#
145# Variable assignment for multi-python packages 149# Variable assignment for multi-python packages
146MULTI+= PYTHON_VERSION_REQD=${_PYTHON_VERSION} 150MULTI+= PYTHON_VERSION_REQD=${_PYTHON_VERSION}
147 151
148# No supported version found, annotate to simplify statements below. 152# No supported version found, annotate to simplify statements below.
149.if !defined(_PYTHON_VERSION) 153.if !defined(_PYTHON_VERSION)
150_PYTHON_VERSION= none 154_PYTHON_VERSION= none
151# since no supported version is found and no build will happen, 155# since no supported version is found and no build will happen,
152# choose a numeric default 156# choose a numeric default
153PYTHON_VERSION= 0 157PYTHON_VERSION= 0
154PKG_FAIL_REASON+= "No valid Python version" 158PKG_FAIL_REASON+= "No valid Python version"
155PYPKGPREFIX= none 159PYPKGPREFIX= none
156PYVERSSUFFIX= none 160PYVERSSUFFIX= none
157.else 161.else
158PYTHON_VERSION= ${_PYTHON_VERSION:C/^(.)(.)$/\10\2/} 162PYTHON_VERSION= ${_PYTHON_VERSION:C/^(.)(.)$/\10\2/}
159.endif 163.endif
160 164
161# Additional CONFLICTS 165# Additional CONFLICTS
162.if ${PYTHON_SELF_CONFLICT:U:tl} == "yes" 166.if ${PYTHON_SELF_CONFLICT:U:tl} == "yes"
163. for i in ${PYTHON_VERSIONS_ACCEPTED:N${_PYTHON_VERSION}} 167. for i in ${PYTHON_VERSIONS_ACCEPTED:N${_PYTHON_VERSION}}
164. if empty(PYTHON_VERSIONS_INCOMPATIBLE:M${i}) 168. if empty(PYTHON_VERSIONS_INCOMPATIBLE:M${i})
165CONFLICTS+= ${PKGNAME:S/py${_PYTHON_VERSION}/py${i}/:C/-[0-9].*$/-[0-9]*/} 169CONFLICTS+= ${PKGNAME:S/py${_PYTHON_VERSION}/py${i}/:C/-[0-9].*$/-[0-9]*/}
166. endif 170. endif
167. endfor 171. endfor
168.endif # PYCONFLICTS 172.endif # PYCONFLICTS
169 173
170# 174#
171PLIST_VARS+= py2x py3x 175PLIST_VARS+= py2x py3x
172 176
173.if empty(_PYTHON_VERSION:Mnone) 177.if empty(_PYTHON_VERSION:Mnone)
174PYPACKAGE= python${_PYTHON_VERSION} 178PYPACKAGE= python${_PYTHON_VERSION}
175PYVERSSUFFIX= ${_PYTHON_VERSION:C/^([0-9])/\1./1} 179PYVERSSUFFIX= ${_PYTHON_VERSION:C/^([0-9])/\1./1}
176BUILDLINK_API_DEPENDS.${PYPACKAGE}?= ${PYPACKAGE}>=${PYVERSSUFFIX} 180BUILDLINK_API_DEPENDS.${PYPACKAGE}?= ${PYPACKAGE}>=${PYVERSSUFFIX}
177PYPKGSRCDIR= ../../lang/${PYPACKAGE} 181PYPKGSRCDIR= ../../lang/${PYPACKAGE}
178PYDEPENDENCY= ${BUILDLINK_API_DEPENDS.${PYPACKAGE}:=:${PYPKGSRCDIR}} 182PYDEPENDENCY= ${BUILDLINK_API_DEPENDS.${PYPACKAGE}:=:${PYPKGSRCDIR}}
179PYPKGPREFIX= py${_PYTHON_VERSION} 183PYPKGPREFIX= py${_PYTHON_VERSION}
180.endif 184.endif
181.if !empty(_PYTHON_VERSION:M3*) 185.if !empty(_PYTHON_VERSION:M3*)
182PLIST.py3x= yes 186PLIST.py3x= yes
183.endif 187.endif
184.if !empty(_PYTHON_VERSION:M2*) 188.if !empty(_PYTHON_VERSION:M2*)
185PLIST.py2x= yes 189PLIST.py2x= yes
186.endif 190.endif
187 191
188PTHREAD_OPTS+= require 192PTHREAD_OPTS+= require
189.include "../../mk/pthread.buildlink3.mk" 193.include "../../mk/pthread.buildlink3.mk"
190 194
191PYTHON_FOR_BUILD_ONLY?= no 195PYTHON_FOR_BUILD_ONLY?= no
192.if defined(PYPKGSRCDIR) 196.if defined(PYPKGSRCDIR)
193. if !empty(PYTHON_FOR_BUILD_ONLY:M[tT][oO][oO][lL]) 197. if !empty(PYTHON_FOR_BUILD_ONLY:M[tT][oO][oO][lL])
194TOOL_DEPENDS+= ${PYDEPENDENCY} 198TOOL_DEPENDS+= ${PYDEPENDENCY}
195. elif !empty(PYTHON_FOR_BUILD_ONLY:M[tT][eE][sS][tT]) 199. elif !empty(PYTHON_FOR_BUILD_ONLY:M[tT][eE][sS][tT])
196TEST_DEPENDS+= ${PYDEPENDENCY} 200TEST_DEPENDS+= ${PYDEPENDENCY}
197. else 201. else
198. if !empty(PYTHON_FOR_BUILD_ONLY:M[yY][eE][sS]) 202. if !empty(PYTHON_FOR_BUILD_ONLY:M[yY][eE][sS])
199BUILDLINK_DEPMETHOD.python?= build 203BUILDLINK_DEPMETHOD.python?= build
200. endif 204. endif
201. include "${PYPKGSRCDIR}/buildlink3.mk" 205. include "${PYPKGSRCDIR}/buildlink3.mk"
202. if ${USE_CROSS_COMPILE:U:tl} == "yes" 206. if ${USE_CROSS_COMPILE:U:tl} == "yes"
203TOOL_DEPENDS+= ${PYDEPENDENCY} 207TOOL_DEPENDS+= ${PYDEPENDENCY}
204MAKE_ENV+= PYTHONPATH=${WRKDIR:Q}/.pysite:${_CROSS_DESTDIR:Q}${LOCALBASE:Q}/${PYLIB:Q} 208MAKE_ENV+= PYTHONPATH=${WRKDIR:Q}/.pysite:${_CROSS_DESTDIR:Q}${LOCALBASE:Q}/${PYLIB:Q}
205pre-configure: ${WRKDIR}/.pysite/sitecustomize.py 209pre-configure: ${WRKDIR}/.pysite/sitecustomize.py
206.include "${PYPKGSRCDIR}/platname.mk" 210.include "${PYPKGSRCDIR}/platname.mk"
207${WRKDIR}/.pysite/sitecustomize.py: 211${WRKDIR}/.pysite/sitecustomize.py:
208 @${STEP_MSG} "Creating Python sitecustomize.py for cross-compiling" 212 @${STEP_MSG} "Creating Python sitecustomize.py for cross-compiling"
209 ${RUN} ${MKDIR} ${.TARGET:H} 213 ${RUN} ${MKDIR} ${.TARGET:H}
210 ${RUN} ( \ 214 ${RUN} ( \
211 ${ECHO} "import sys" && \ 215 ${ECHO} "import sys" && \
212 ${PRINTF} "sys.platform = '%s'\\n" ${PY_PLATNAME:Q} && \ 216 ${PRINTF} "sys.platform = '%s'\\n" ${PY_PLATNAME:Q} && \
213 for v in \ 217 for v in \
214 sys.base_exec_prefix \ 218 sys.base_exec_prefix \
215 sys.base_prefix \ 219 sys.base_prefix \
216 sys.exec_prefix \ 220 sys.exec_prefix \
217 sys.prefix \ 221 sys.prefix \
218 ; do \ 222 ; do \
219 ${PRINTF} "%s = '%s'\\n" "$$v" ${LOCALBASE:Q}; \ 223 ${PRINTF} "%s = '%s'\\n" "$$v" ${LOCALBASE:Q}; \
220 done; \ 224 done; \
221 ) >${.TARGET}.tmp 225 ) >${.TARGET}.tmp
222 ${RUN} ${MV} -f ${.TARGET}.tmp ${.TARGET} 226 ${RUN} ${MV} -f ${.TARGET}.tmp ${.TARGET}
223. endif 227. endif
224. endif 228. endif
225.endif 229.endif
226 230
227PYTHONBIN= ${LOCALBASE}/bin/python${PYVERSSUFFIX} 231PYTHONBIN= ${LOCALBASE}/bin/python${PYVERSSUFFIX}
228TOOL_PYTHONBIN= ${TOOLBASE}/bin/python${PYVERSSUFFIX} 232TOOL_PYTHONBIN= ${TOOLBASE}/bin/python${PYVERSSUFFIX}
229.if exists(${TOOL_PYTHONBIN}m) 233.if exists(${TOOL_PYTHONBIN}m)
230PYTHONCONFIG= ${TOOLBASE}/bin/python${PYVERSSUFFIX}m-config 234PYTHONCONFIG= ${TOOLBASE}/bin/python${PYVERSSUFFIX}m-config
231.else 235.else
232PYTHONCONFIG= ${TOOLBASE}/bin/python${PYVERSSUFFIX}-config 236PYTHONCONFIG= ${TOOLBASE}/bin/python${PYVERSSUFFIX}-config
233.endif 237.endif
234PY_COMPILE_ALL= \ 238PY_COMPILE_ALL= \
235 ${TOOL_PYTHONBIN} ${PREFIX}/lib/python${PYVERSSUFFIX}/compileall.py -q 239 ${TOOL_PYTHONBIN} ${PREFIX}/lib/python${PYVERSSUFFIX}/compileall.py -q
236PY_COMPILE_O_ALL= \ 240PY_COMPILE_O_ALL= \
237 ${TOOL_PYTHONBIN} -O ${PREFIX}/lib/python${PYVERSSUFFIX}/compileall.py -q 241 ${TOOL_PYTHONBIN} -O ${PREFIX}/lib/python${PYVERSSUFFIX}/compileall.py -q
238 242
239PYINC= include/python${PYVERSSUFFIX} 243PYINC= include/python${PYVERSSUFFIX}
240PYLIB= lib/python${PYVERSSUFFIX} 244PYLIB= lib/python${PYVERSSUFFIX}
241PYSITELIB= ${PYLIB}/site-packages 245PYSITELIB= ${PYLIB}/site-packages
242 246
243PRINT_PLIST_AWK+= /^${PYINC:S|/|\\/|g}/ \ 247PRINT_PLIST_AWK+= /^${PYINC:S|/|\\/|g}/ \
244 { gsub(/${PYINC:S|/|\\/|g}/, "$${PYINC}") } 248 { gsub(/${PYINC:S|/|\\/|g}/, "$${PYINC}") }
245PRINT_PLIST_AWK+= /^${PYSITELIB:S|/|\\/|g}/ \ 249PRINT_PLIST_AWK+= /^${PYSITELIB:S|/|\\/|g}/ \
246 { gsub(/${PYSITELIB:S|/|\\/|g}/, "$${PYSITELIB}") } 250 { gsub(/${PYSITELIB:S|/|\\/|g}/, "$${PYSITELIB}") }
247PRINT_PLIST_AWK+= /^${PYLIB:S|/|\\/|g}/ \ 251PRINT_PLIST_AWK+= /^${PYLIB:S|/|\\/|g}/ \
248 { gsub(/${PYLIB:S|/|\\/|g}/, "$${PYLIB}") } 252 { gsub(/${PYLIB:S|/|\\/|g}/, "$${PYLIB}") }
249 253
250ALL_ENV+= PYTHON=${TOOL_PYTHONBIN} 254ALL_ENV+= PYTHON=${TOOL_PYTHONBIN}
251.if defined(USE_CMAKE) || defined(BUILD_USES_CMAKE) 255.if defined(USE_CMAKE) || defined(BUILD_USES_CMAKE)
252# used by FindPython 256# used by FindPython
253CMAKE_ARGS+= -DPython_EXECUTABLE:FILEPATH=${TOOL_PYTHONBIN} 257CMAKE_ARGS+= -DPython_EXECUTABLE:FILEPATH=${TOOL_PYTHONBIN}
254CMAKE_ARGS+= -DPython_INCLUDE_DIR:PATH=${BUILDLINK_DIR}/${PYINC} 258CMAKE_ARGS+= -DPython_INCLUDE_DIR:PATH=${BUILDLINK_DIR}/${PYINC}
255# used by FindPython2 259# used by FindPython2
256. if !empty(_PYTHON_VERSION:M2*) 260. if !empty(_PYTHON_VERSION:M2*)
257CMAKE_ARGS+= -DPython2_EXECUTABLE:FILEPATH=${TOOL_PYTHONBIN} 261CMAKE_ARGS+= -DPython2_EXECUTABLE:FILEPATH=${TOOL_PYTHONBIN}
258CMAKE_ARGS+= -DPython2_INCLUDE_DIR:PATH=${BUILDLINK_DIR}/${PYINC} 262CMAKE_ARGS+= -DPython2_INCLUDE_DIR:PATH=${BUILDLINK_DIR}/${PYINC}
259. endif 263. endif
260# used by FindPython3 264# used by FindPython3
261. if !empty(_PYTHON_VERSION:M3*) 265. if !empty(_PYTHON_VERSION:M3*)
262CMAKE_ARGS+= -DPython3_EXECUTABLE:FILEPATH=${TOOL_PYTHONBIN} 266CMAKE_ARGS+= -DPython3_EXECUTABLE:FILEPATH=${TOOL_PYTHONBIN}
263CMAKE_ARGS+= -DPython3_INCLUDE_DIR:PATH=${BUILDLINK_DIR}/${PYINC} 267CMAKE_ARGS+= -DPython3_INCLUDE_DIR:PATH=${BUILDLINK_DIR}/${PYINC}
264. endif 268. endif
265# used by FindPythonInterp.cmake and FindPythonLibs.cmake 269# used by FindPythonInterp.cmake and FindPythonLibs.cmake
266CMAKE_ARGS+= -DPYVERSSUFFIX:STRING=${PYVERSSUFFIX} 270CMAKE_ARGS+= -DPYVERSSUFFIX:STRING=${PYVERSSUFFIX}
267# set this explicitly, as by default it will prefer the built in framework 271# set this explicitly, as by default it will prefer the built in framework
268# on Darwin 272# on Darwin
269CMAKE_ARGS+= -DPYTHON_INCLUDE_DIR:PATH=${BUILDLINK_DIR}/${PYINC} 273CMAKE_ARGS+= -DPYTHON_INCLUDE_DIR:PATH=${BUILDLINK_DIR}/${PYINC}
270CMAKE_ARGS+= -DPYTHON_INCLUDE_PATH:PATH=${BUILDLINK_DIR}/${PYINC} 274CMAKE_ARGS+= -DPYTHON_INCLUDE_PATH:PATH=${BUILDLINK_DIR}/${PYINC}
271CMAKE_ARGS+= -DPYTHON_EXECUTABLE:FILEPATH=${TOOL_PYTHONBIN} 275CMAKE_ARGS+= -DPYTHON_EXECUTABLE:FILEPATH=${TOOL_PYTHONBIN}
272.endif 276.endif
273 277
274_VARGROUPS+= pyversion 278_VARGROUPS+= pyversion
275_USER_VARS.pyversion= PYTHON_VERSION_DEFAULT 279_USER_VARS.pyversion= PYTHON_VERSION_DEFAULT
276_PKG_VARS.pyversion= \ 280_PKG_VARS.pyversion= \
277 PYTHON_VERSIONS_ACCEPTED PYTHON_VERSIONS_INCOMPATIBLE \ 281 PYTHON_VERSIONS_ACCEPTED PYTHON_VERSIONS_INCOMPATIBLE \
278 PYTHON_SELF_CONFLICT PYTHON_FOR_BUILD_ONLY USE_CMAKE BUILD_USES_CMAKE 282 PYTHON_SELF_CONFLICT PYTHON_FOR_BUILD_ONLY USE_CMAKE BUILD_USES_CMAKE
279_SYS_VARS.pyversion= \ 283_SYS_VARS.pyversion= \
280 PYTHON_VERSION PYTHON_VERSION_REQD PYPACKAGE PYVERSSUFFIX PYPKGSRCDIR \ 284 PYTHON_VERSION PYTHON_VERSION_REQD PYPACKAGE PYVERSSUFFIX PYPKGSRCDIR \
281 PYPKGPREFIX PYTHONBIN PYTHONCONFIG PY_COMPILE_ALL \ 285 PYPKGPREFIX PYTHONBIN PYTHONCONFIG PY_COMPILE_ALL \
282 PY_COMPILE_O_ALL PYINC PYLIB PYSITELIB CMAKE_ARGS \ 286 PY_COMPILE_O_ALL PYINC PYLIB PYSITELIB CMAKE_ARGS \
283 TOOL_PYTHONBIN 287 TOOL_PYTHONBIN
284_USE_VARS.pyversion= \ 288_USE_VARS.pyversion= \
285 PKGNAME_REQD PKGNAME_OLD LOCALBASE PREFIX BUILDLINK_DIR PKGNAME 289 PKGNAME_REQD PKGNAME_OLD LOCALBASE PREFIX BUILDLINK_DIR PKGNAME
286_DEF_VARS.pyversion= \ 290_DEF_VARS.pyversion= \
287 CONFLICTS MULTI PLIST_VARS BUILDLINK_API_DEPENDS.${PYPACKAGE} \ 291 CONFLICTS MULTI PLIST_VARS BUILDLINK_API_DEPENDS.${PYPACKAGE} \
288 PYDEPENDENCY PLIST.py2x PLIST.py3x PTHREAD_OPTS TOOL_DEPENDS \ 292 PYDEPENDENCY PLIST.py2x PLIST.py3x PTHREAD_OPTS TOOL_DEPENDS \
289 TEST_DEPENDS BUILDLINK_DEPMETHOD.python PRINT_PLIST_AWK ALL_ENV \ 293 TEST_DEPENDS BUILDLINK_DEPMETHOD.python PRINT_PLIST_AWK ALL_ENV \
290 _PYTHON_VERSIONS_ACCEPTED _PYTHON_VERSION 294 _PYTHON_VERSIONS_ACCEPTED _PYTHON_VERSION
291_IGN_VARS.pyversion= _PYTHON_* 295_IGN_VARS.pyversion= _PYTHON_*
292_LISTED_VARS.pyversion= *_ARGS 296_LISTED_VARS.pyversion= *_ARGS
293_SORTED_VARS.pyversion= *_DEPENDS *_ENV 297_SORTED_VARS.pyversion= *_DEPENDS *_ENV
294 298
295.endif # PYTHON_PYVERSION_MK 299.endif # PYTHON_PYVERSION_MK

cvs diff -r1.264 -r1.265 pkgsrc/mk/compiler/gcc.mk (switch to unified diff)

--- pkgsrc/mk/compiler/gcc.mk 2023/11/07 09:54:49 1.264
+++ pkgsrc/mk/compiler/gcc.mk 2023/11/07 11:36:57 1.265
@@ -1,1084 +1,1090 @@ @@ -1,1084 +1,1090 @@
1# $NetBSD: gcc.mk,v 1.264 2023/11/07 09:54:49 nia Exp $ 1# $NetBSD: gcc.mk,v 1.265 2023/11/07 11:36:57 nia Exp $
2# 2#
3# This is the compiler definition for the GNU Compiler Collection. 3# This is the compiler definition for the GNU Compiler Collection.
4# 4#
5# User-settable variables: 5# User-settable variables:
6# 6#
7# GCCBASE 7# GCCBASE
8# If using a native GCC and the compiler is not in $PATH then 8# If using a native GCC and the compiler is not in $PATH then
9# this should be set to the base installation directory. 9# this should be set to the base installation directory.
10# 10#
11# USE_NATIVE_GCC 11# USE_NATIVE_GCC
12# When set to "yes", the native gcc is used, no matter which 12# When set to "yes", the native gcc is used, no matter which
13# compiler version a package requires. 13# compiler version a package requires.
14# 14#
15# USE_PKGSRC_GCC 15# USE_PKGSRC_GCC
16# When set to "yes", use an appropriate version of GCC from 16# When set to "yes", use an appropriate version of GCC from
17# pkgsrc based on GCC_REQD instead of the native compiler. 17# pkgsrc based on GCC_REQD instead of the native compiler.
18# 18#
19# USE_PKGSRC_GCC_RUNTIME 19# USE_PKGSRC_GCC_RUNTIME
20# When set to "yes", the runtime gcc libraries (libgcc, libstdc++ 20# When set to "yes", the runtime gcc libraries (libgcc, libstdc++
21# etc) will be used from pkgsrc rather than the native compiler. 21# etc) will be used from pkgsrc rather than the native compiler.
22# 22#
23# GCC_VERSION_SUFFIX 23# GCC_VERSION_SUFFIX
24# Optional suffix for GCC binaries, i.e. if the installed names are like 24# Optional suffix for GCC binaries, i.e. if the installed names are like
25# /usr/bin/g++-5, /usr/bin/gcc-5 etc. 25# /usr/bin/g++-5, /usr/bin/gcc-5 etc.
26 26
27# Package-settable variables: 27# Package-settable variables:
28# 28#
29# GCC_REQD 29# GCC_REQD
30# The minimum version of the GNU Compiler Collection that is 30# The minimum version of the GNU Compiler Collection that is
31# required to build this package. Setting this variable doesn't 31# required to build this package. Setting this variable doesn't
32# change the compiler that is used for building packages. See 32# change the compiler that is used for building packages. See
33# ONLY_FOR_COMPILER for that purpose. This is a list of version 33# ONLY_FOR_COMPILER for that purpose. This is a list of version
34# numbers, of which the maximum version is the definitive one. 34# numbers, of which the maximum version is the definitive one.
35# 35#
36# This variable can also be set by the user when USE_PKGSRC_GCC 36# This variable can also be set by the user when USE_PKGSRC_GCC
37# is in effect to ensure that a specific compiler is used for 37# is in effect to ensure that a specific compiler is used for
38# packages which do not specify a higher version. 38# packages which do not specify a higher version.
39# 39#
40# USE_GCC_RUNTIME 40# USE_GCC_RUNTIME
41# Packages which build shared libraries but do not use libtool to 41# Packages which build shared libraries but do not use libtool to
42# do so should define this variable. It is used to determine whether 42# do so should define this variable. It is used to determine whether
43# the gcc runtime should be depended upon when a user has enabled 43# the gcc runtime should be depended upon when a user has enabled
44# USE_PKGSRC_GCC_RUNTIME. 44# USE_PKGSRC_GCC_RUNTIME.
45# 45#
46# System-defined variables: 46# System-defined variables:
47# 47#
48# CC_VERSION 48# CC_VERSION
49# A string of the form "gcc-4.3.2" 49# A string of the form "gcc-4.3.2"
50# 50#
51# CC_VERSION_STRING 51# CC_VERSION_STRING
52# The same(?) as CC_VERSION. FIXME: What's the difference between 52# The same(?) as CC_VERSION. FIXME: What's the difference between
53# the two? 53# the two?
54# 54#
55# Keywords: gcc 55# Keywords: gcc
56# 56#
57 57
58.if !defined(COMPILER_GCC_MK) 58.if !defined(COMPILER_GCC_MK)
59COMPILER_GCC_MK= defined 59COMPILER_GCC_MK= defined
60 60
61_VARGROUPS+= gcc 61_VARGROUPS+= gcc
62_USER_VARS.gcc= \ 62_USER_VARS.gcc= \
63 USE_NATIVE_GCC USE_PKGSRC_GCC USE_PKGSRC_GCC_RUNTIME \ 63 USE_NATIVE_GCC USE_PKGSRC_GCC USE_PKGSRC_GCC_RUNTIME \
64 GCCBASE GCC_VERSION_SUFFIX \ 64 GCCBASE GCC_VERSION_SUFFIX \
65 TOOLS_USE_CROSS_COMPILE \ 65 TOOLS_USE_CROSS_COMPILE \
66 PKGSRC_USE_FORTIFY PKGSRC_USE_RELRO PKGSRC_USE_SSP \ 66 PKGSRC_USE_FORTIFY PKGSRC_USE_RELRO PKGSRC_USE_SSP \
67 COMPILER_USE_SYMLINKS CC 67 COMPILER_USE_SYMLINKS CC
68_PKG_VARS.gcc= \ 68_PKG_VARS.gcc= \
69 GCC_REQD USE_GCC_RUNTIME USE_LANGUAGES 69 GCC_REQD USE_GCC_RUNTIME USE_LANGUAGES
70_SYS_VARS.gcc= \ 70_SYS_VARS.gcc= \
71 CC_VERSION CC_VERSION_STRING LANGUAGES.gcc \ 71 CC_VERSION CC_VERSION_STRING LANGUAGES.gcc \
72 CCPATH CPPPATH CXXPATH F77PATH FCPATH \ 72 CCPATH CPPPATH CXXPATH F77PATH FCPATH \
73 PKG_CC PKG_CPP PKG_CXX PKG_FC FC PKGSRC_FORTRAN \ 73 PKG_CC PKG_CPP PKG_CXX PKG_FC FC PKGSRC_FORTRAN \
74 ADAPATH GMKPATH GLKPATH GBDPATH CHPPATH GLSPATH GNTPATH PRPPATH 74 ADAPATH GMKPATH GLKPATH GBDPATH CHPPATH GLSPATH GNTPATH PRPPATH
75_DEF_VARS.gcc= \ 75_DEF_VARS.gcc= \
76 MAKEFLAGS IMAKEOPTS \ 76 MAKEFLAGS IMAKEOPTS \
77 CFLAGS LDFLAGS \ 77 CFLAGS LDFLAGS \
78 PREPEND_PATH \ 78 PREPEND_PATH \
79 COMPILER_INCLUDE_DIRS COMPILER_LIB_DIRS \ 79 COMPILER_INCLUDE_DIRS COMPILER_LIB_DIRS \
80 CWRAPPERS_APPEND.cc CWRAPPERS_APPEND.cxx CWRAPPERS_APPEND.ld \ 80 CWRAPPERS_APPEND.cc CWRAPPERS_APPEND.cxx CWRAPPERS_APPEND.ld \
81 PKG_ADA PKG_GMK PKG_GLK PKG_GBD PKG_CHP PKG_GNT PKG_GLS PKG_PRP \ 81 PKG_ADA PKG_GMK PKG_GLK PKG_GBD PKG_CHP PKG_GNT PKG_GLS PKG_PRP \
82 PKGSRC_ADA PKGSRC_GMK PKGSRC_GLK PKGSRC_GBD PKGSRC_CHP PKGSRC_GNT PKGSRC_GLS PKGSRC_PRP \ 82 PKGSRC_ADA PKGSRC_GMK PKGSRC_GLK PKGSRC_GBD PKGSRC_CHP PKGSRC_GNT PKGSRC_GLS PKGSRC_PRP \
83 _CC _COMPILER_RPATH_FLAG _COMPILER_STRIP_VARS \ 83 _CC _COMPILER_RPATH_FLAG _COMPILER_STRIP_VARS \
84 _GCCBINDIR _GCC_ARCHDIR _GCC_BIN_PREFIX _GCC_CFLAGS \ 84 _GCCBINDIR _GCC_ARCHDIR _GCC_BIN_PREFIX _GCC_CFLAGS \
85 _GCC_CC _GCC_CPP _GCC_CXX _GCC_DEPENDENCY _GCC_DEPENDS \ 85 _GCC_CC _GCC_CPP _GCC_CXX _GCC_DEPENDENCY _GCC_DEPENDS \
86 _GCC_DIST_NAME _GCC_DIST_VERSION \ 86 _GCC_DIST_NAME _GCC_DIST_VERSION \
87 _GCC_FC _GCC_LDFLAGS _GCC_LIBDIRS _GCC_PKG \ 87 _GCC_FC _GCC_LDFLAGS _GCC_LIBDIRS _GCC_PKG \
88 _GCC_PKGBASE _GCC_PKGSRCDIR _GCC_PKG_SATISFIES_DEP \ 88 _GCC_PKGBASE _GCC_PKGSRCDIR _GCC_PKG_SATISFIES_DEP \
89 _GCC_PREFIX _GCC_REQD _GCC_STRICTEST_REQD _GCC_SUBPREFIX \ 89 _GCC_PREFIX _GCC_REQD _GCC_STRICTEST_REQD _GCC_SUBPREFIX \
90 _GCC_TEST_DEPENDS _GCC_NEEDS_A_FORTRAN _GCC_VARS _GCC_VERSION \ 90 _GCC_TEST_DEPENDS _GCC_NEEDS_A_FORTRAN _GCC_VARS _GCC_VERSION \
91 _GCC_VERSION_STRING \ 91 _GCC_VERSION_STRING \
92 _GCC_ADA _GCC_GMK _GCC_GLK _GCC_GBD _GCC_CHP _GCC_GLS _GCC_GNT _GCC_PRP \ 92 _GCC_ADA _GCC_GMK _GCC_GLK _GCC_GBD _GCC_CHP _GCC_GLS _GCC_GNT _GCC_PRP \
93 _IGNORE_GCC \ 93 _IGNORE_GCC \
94 _IS_BUILTIN_GCC \ 94 _IS_BUILTIN_GCC \
95 _LANGUAGES.gcc \ 95 _LANGUAGES.gcc \
96 _LINKER_RPATH_FLAG \ 96 _LINKER_RPATH_FLAG \
97 _NEED_GCC6 _NEED_GCC7 _NEED_GCC8 _NEED_GCC9 \ 97 _NEED_GCC6 _NEED_GCC7 _NEED_GCC8 _NEED_GCC9 \
98 _NEED_GCC10 _NEED_GCC12 _NEED_GCC13 \ 98 _NEED_GCC10 _NEED_GCC12 _NEED_GCC13 \
99 _NEED_GCC_AUX _NEED_NEWER_GCC \ 99 _NEED_GCC_AUX _NEED_NEWER_GCC \
100 _PKGSRC_GCC_VERSION \ 100 _PKGSRC_GCC_VERSION \
101 _USE_GCC_SHLIB _USE_PKGSRC_GCC \ 101 _USE_GCC_SHLIB _USE_PKGSRC_GCC \
102 _WRAP_EXTRA_ARGS.CC \ 102 _WRAP_EXTRA_ARGS.CC \
103 _EXTRA_CC_DIRS \ 103 _EXTRA_CC_DIRS \
104 _C_STD_VERSIONS \ 104 _C_STD_VERSIONS \
105 ${_C_STD_VERSIONS:@std@_C_STD_FLAG.${std}@} \ 105 ${_C_STD_VERSIONS:@std@_C_STD_FLAG.${std}@} \
106 _CXX_STD_VERSIONS \ 106 _CXX_STD_VERSIONS \
107 ${_CXX_STD_VERSIONS:@std@_CXX_STD_FLAG.${std}@} \ 107 ${_CXX_STD_VERSIONS:@std@_CXX_STD_FLAG.${std}@} \
108 _MKPIE_CFLAGS.gcc _MKPIE_LDFLAGS \ 108 _MKPIE_CFLAGS.gcc _MKPIE_LDFLAGS \
109 _FORTIFY_CFLAGS _RELRO_LDFLAGS _STACK_CHECK_CFLAGS \ 109 _FORTIFY_CFLAGS _RELRO_LDFLAGS _STACK_CHECK_CFLAGS \
110 _CTF_CFLAGS \ 110 _CTF_CFLAGS \
111 _GCC_DIR \ 111 _GCC_DIR \
112 _ALIASES.CC _ALIASES.CPP _ALIASES.CXX _ALIASES.FC \ 112 _ALIASES.CC _ALIASES.CPP _ALIASES.CXX _ALIASES.FC \
113 _ALIASES.ADA _ALIASES.GMK _ALIASES.GLK _ALIASES.GBD \ 113 _ALIASES.ADA _ALIASES.GMK _ALIASES.GLK _ALIASES.GBD \
114 _ALIASES.CHP _ALIASES.PRP _ALIASES.GLS _ALIASES.GNT \ 114 _ALIASES.CHP _ALIASES.PRP _ALIASES.GLS _ALIASES.GNT \
115 _COMPILER_ABI_FLAG.32 _COMPILER_ABI_FLAG.64 \ 115 _COMPILER_ABI_FLAG.32 _COMPILER_ABI_FLAG.64 \
116 _COMPILER_ABI_FLAG.n32 _COMPILER_ABI_FLAG.o32 \ 116 _COMPILER_ABI_FLAG.n32 _COMPILER_ABI_FLAG.o32 \
117 _SSP_CFLAGS \ 117 _SSP_CFLAGS \
118 _CXX_STD_FLAG.c++03 _CXX_STD_FLAG.gnu++03 118 _CXX_STD_FLAG.c++03 _CXX_STD_FLAG.gnu++03
119_USE_VARS.gcc= \ 119_USE_VARS.gcc= \
120 MACHINE_ARCH PATH DRAGONFLY_CCVER OPSYS TOOLBASE \ 120 MACHINE_ARCH PATH DRAGONFLY_CCVER OPSYS TOOLBASE \
121 USE_LIBTOOL \ 121 USE_LIBTOOL \
122 LIBABISUFFIX \ 122 LIBABISUFFIX \
123 COMPILER_RPATH_FLAG \ 123 COMPILER_RPATH_FLAG \
124 MACHINE_GNU_PLATFORM \ 124 MACHINE_GNU_PLATFORM \
125 WRKDIR MACHINE_PLATFORM PKGPATH \ 125 WRKDIR MACHINE_PLATFORM PKGPATH \
126 _PKGSRC_MKPIE _PKGSRC_MKREPRO _MKREPRO_CFLAGS.gcc \ 126 _PKGSRC_MKPIE _PKGSRC_MKREPRO _MKREPRO_CFLAGS.gcc \
127 _PKGSRC_USE_FORTIFY _PKGSRC_USE_RELRO _PKGSRC_USE_STACK_CHECK \ 127 _PKGSRC_USE_FORTIFY _PKGSRC_USE_RELRO _PKGSRC_USE_STACK_CHECK \
128 _OPSYS_INCLUDE_DIRS _OPSYS_LIB_DIRS 128 _OPSYS_INCLUDE_DIRS _OPSYS_LIB_DIRS
129_IGN_VARS.gcc= \ 129_IGN_VARS.gcc= \
130 _GCC6_PATTERNS _GCC7_PATTERNS _GCC8_PATTERNS _GCC9_PATTERNS \ 130 _GCC6_PATTERNS _GCC7_PATTERNS _GCC8_PATTERNS _GCC9_PATTERNS \
131 _GCC10_PATTERNS _GCC12_PATTERNS _GCC13_PATTERNS _GCC_AUX_PATTERNS 131 _GCC10_PATTERNS _GCC12_PATTERNS _GCC13_PATTERNS _GCC_AUX_PATTERNS
132_LISTED_VARS.gcc= \ 132_LISTED_VARS.gcc= \
133 MAKEFLAGS IMAKEOPTS LDFLAGS PREPEND_PATH 133 MAKEFLAGS IMAKEOPTS LDFLAGS PREPEND_PATH
134.include "../../mk/bsd.prefs.mk" 134.include "../../mk/bsd.prefs.mk"
135 135
136USE_NATIVE_GCC?= no 136USE_NATIVE_GCC?= no
137USE_PKGSRC_GCC?= no 137USE_PKGSRC_GCC?= no
138USE_PKGSRC_GCC_RUNTIME?=no 138USE_PKGSRC_GCC_RUNTIME?=no
139 139
140# 140#
141# Each successive GCC_REQD has an associated cost below when executing 141# Each successive GCC_REQD has an associated cost below when executing
142# pkg_admin to determine if it's suitable, so only add these incredibly 142# pkg_admin to determine if it's suitable, so only add these incredibly
143# old versions if we haven't already set one. 143# old versions if we haven't already set one.
144# 144#
145.if !defined(GCC_REQD) 145.if !defined(GCC_REQD)
146. if !empty(USE_LANGUAGES:Mc99) || ${MACHINE_ARCH} == "x86_64" 146. if !empty(USE_LANGUAGES:Mc99) || ${MACHINE_ARCH} == "x86_64"
147GCC_REQD+= 3.0 147GCC_REQD+= 3.0
148. else 148. else
149GCC_REQD+= 2.8.0 149GCC_REQD+= 2.8.0
150. endif 150. endif
151.endif 151.endif
152 152
153.include "gcc-style-args.mk" 153.include "gcc-style-args.mk"
154 154
155# 155#
156# Most of the time, GCC adds support for features of new C and C++ 156# Most of the time, GCC adds support for features of new C and C++
157# standards incrementally, so USE_CXX_FEATURES= c++XX is for 157# standards incrementally, so USE_CXX_FEATURES= c++XX is for
158# establishing an idealistic baseline, usually based on compiler 158# establishing an idealistic baseline, usually based on compiler
159# versions shipped with NetBSD. 159# versions shipped with NetBSD.
160# 160#
161# Resources: 161# Resources:
162# https://gcc.gnu.org/projects/cxx-status.html 162# https://gcc.gnu.org/projects/cxx-status.html
163# https://gcc.gnu.org/wiki/C11Status 163# https://gcc.gnu.org/wiki/C11Status
164# https://gcc.gnu.org/c99status.html 164# https://gcc.gnu.org/c99status.html
165# 165#
166 166
167.if !empty(USE_CXX_FEATURES:Mc++20) 167.if !empty(USE_CXX_FEATURES:Mc++20)
168# GCC 10 is chosen because it is planned to be shipped with NetBSD 10, 168# GCC 10 is chosen because it is planned to be shipped with NetBSD 10,
169# so is fairly battle-hardened with pkgsrc. 169# so is fairly battle-hardened with pkgsrc.
170# 170#
171# We hope that it remains OK for most C++20 in the future... 171# We hope that it remains OK for most C++20 in the future...
172GCC_REQD+= 10 172GCC_REQD+= 10
173.endif 173.endif
174 174
175.if !empty(USE_CXX_FEATURES:Mc++17) 175.if !empty(USE_CXX_FEATURES:Mc++17)
176# GCC 7 is chosen because it shipped with NetBSD 9, so is fairly 176# GCC 7 is chosen because it shipped with NetBSD 9, so is fairly
177# battle-hardened with pkgsrc. 177# battle-hardened with pkgsrc.
178GCC_REQD+= 7 178GCC_REQD+= 7
179.endif 179.endif
180 180
181.if !empty(USE_CXX_FEATURES:Mc++14) 181.if !empty(USE_CXX_FEATURES:Mc++14)
182# GCC 5 is chosen because it shipped with NetBSD 8, so is fairly 182# GCC 5 is chosen because it shipped with NetBSD 8, so is fairly
183# battle-hardened with pkgsrc. 183# battle-hardened with pkgsrc.
184GCC_REQD+= 5 184GCC_REQD+= 5
185.endif 185.endif
186 186
187.if !empty(USE_CXX_FEATURES:Mc++11) 187.if !empty(USE_CXX_FEATURES:Mc++11)
188# While gcc "technically" added experimental C++11 support earlier 188# While gcc "technically" added experimental C++11 support earlier
189# (and there was previously a lot of cargo-culted GCC_REQD in pkgsrc 189# (and there was previously a lot of cargo-culted GCC_REQD in pkgsrc
190# as a result), earlier compiler versions are not so well-tested any more. 190# as a result), earlier compiler versions are not so well-tested any more.
191# 191#
192# GCC 4.8 was the version shipped with NetBSD 7 and CentOS 7, so is fairly 192# GCC 4.8 was the version shipped with NetBSD 7 and CentOS 7, so is fairly
193# battle-hardened with pkgsrc. 193# battle-hardened with pkgsrc.
194# 194#
195# Versions before GCC 4.7 do not accept -std=c++11. 195# Versions before GCC 4.7 do not accept -std=c++11.
196GCC_REQD+= 4.8 196GCC_REQD+= 4.8
197.endif 197.endif
198 198
199.if !empty(USE_CXX_FEATURES:Mhas_include) || \ 199.if !empty(USE_CXX_FEATURES:Mhas_include) || \
200 !empty(USE_CC_FEATURES:Mhas_include) 200 !empty(USE_CC_FEATURES:Mhas_include)
201GCC_REQD+= 5 201GCC_REQD+= 5
202.endif 202.endif
203 203
204.if !empty(USE_CC_FEATURES:Mc99) 204.if !empty(USE_CC_FEATURES:Mc99)
205GCC_REQD+= 3 205GCC_REQD+= 3
206.endif 206.endif
207 207
208.if !empty(USE_CC_FEATURES:Mc11) 208.if !empty(USE_CC_FEATURES:Mc11)
209GCC_REQD+= 4.9 209GCC_REQD+= 4.9
210.endif 210.endif
211 211
212.if !empty(USE_CXX_FEATURES:Munique_ptr) 212.if !empty(USE_CXX_FEATURES:Munique_ptr)
213GCC_REQD+= 4.9 213GCC_REQD+= 4.9
214.endif 214.endif
215 215
216.if !empty(USE_CXX_FEATURES:Mregex) 216.if !empty(USE_CXX_FEATURES:Mregex)
217GCC_REQD+= 4.9 217GCC_REQD+= 4.9
218.endif 218.endif
219 219
220.if !empty(USE_CXX_FEATURES:Mput_time) 220.if !empty(USE_CXX_FEATURES:Mput_time)
221GCC_REQD+= 5 221GCC_REQD+= 5
222.endif 222.endif
223 223
224.if !empty(USE_CXX_FEATURES:Mis_trivially_copy_constructible) 224.if !empty(USE_CXX_FEATURES:Mis_trivially_copy_constructible)
225GCC_REQD+= 5 225GCC_REQD+= 5
226.endif 226.endif
227 227
228.if !empty(USE_CXX_FEATURES:Mfilesystem) 228.if !empty(USE_CXX_FEATURES:Mfilesystem)
229# GCC 7 supports filesystem under an experimental header, this is not 229# GCC 7 supports filesystem under an experimental header, this is not
230# part of GCC 7 as shipped with NetBSD 9. 230# part of GCC 7 as shipped with NetBSD 9.
231# 231#
232# GCC 8 supports filesystem with explicit linking to the libstdc++fs 232# GCC 8 supports filesystem with explicit linking to the libstdc++fs
233# library, which many packages do not do. 233# library, which many packages do not do.
234GCC_REQD+= 10 234GCC_REQD+= 10
235.endif 235.endif
236 236
237.if !empty(USE_CXX_FEATURES:Mparallelism_ts) 237.if !empty(USE_CXX_FEATURES:Mparallelism_ts)
238GCC_REQD+= 10 238GCC_REQD+= 10
239.endif 239.endif
240 240
241.if !empty(USE_CXX_FEATURES:Mcharconv) 241.if !empty(USE_CXX_FEATURES:Mcharconv)
242GCC_REQD+= 8 242GCC_REQD+= 8
243.endif 243.endif
244 244
245# Only one compiler defined here supports Ada: lang/gcc6-aux 245# Only one compiler defined here supports Ada: lang/gcc6-aux
246# If the Ada language is requested, force lang/gcc6-aux to be selected 246# If the Ada language is requested, force lang/gcc6-aux to be selected
247.if !empty(USE_LANGUAGES:Mada) 247.if !empty(USE_LANGUAGES:Mada)
248GCC_REQD+= 20160822 248GCC_REQD+= 20160822
249.endif 249.endif
250 250
251# _GCC_DIST_VERSION is the highest version of GCC installed by the pkgsrc 251# _GCC_DIST_VERSION is the highest version of GCC installed by the pkgsrc
252# without the PKGREVISIONs. 252# without the PKGREVISIONs.
253_GCC_DIST_NAME:= gcc13 253_GCC_DIST_NAME:= gcc13
254.include "../../lang/${_GCC_DIST_NAME}/version.mk" 254.include "../../lang/${_GCC_DIST_NAME}/version.mk"
255_GCC_DIST_VERSION:= ${${_GCC_DIST_NAME:tu}_DIST_VERSION} 255_GCC_DIST_VERSION:= ${${_GCC_DIST_NAME:tu}_DIST_VERSION}
256 256
257# _GCC6_PATTERNS matches N s.t. N < 7. 257# _GCC6_PATTERNS matches N s.t. N < 7.
258_GCC6_PATTERNS= 5 6 [0-6].* 258_GCC6_PATTERNS= 5 6 [0-6].*
259 259
260# _GCC7_PATTERNS matches N s.t. 7.0 <= N < 8. 260# _GCC7_PATTERNS matches N s.t. 7.0 <= N < 8.
261_GCC7_PATTERNS= 7 7.* 261_GCC7_PATTERNS= 7 7.*
262 262
263# _GCC8_PATTERNS matches N s.t. 8.0 <= N < 9. 263# _GCC8_PATTERNS matches N s.t. 8.0 <= N < 9.
264_GCC8_PATTERNS= 8 8.* 264_GCC8_PATTERNS= 8 8.*
265 265
266# _GCC9_PATTERNS matches N s.t. 9.0 <= N < 10. 266# _GCC9_PATTERNS matches N s.t. 9.0 <= N < 10.
267_GCC9_PATTERNS= 9 9.* 267_GCC9_PATTERNS= 9 9.*
268 268
269# _GCC10_PATTERNS matches N s.t. 10.0 <= N < 11. 269# _GCC10_PATTERNS matches N s.t. 10.0 <= N < 11.
270_GCC10_PATTERNS= 10 10.* 270_GCC10_PATTERNS= 10 10.*
271 271
272# _GCC12_PATTERNS matches N s.t. 12.0 <= N < 13. 272# _GCC12_PATTERNS matches N s.t. 12.0 <= N < 13.
273# gcc 11.x is not packaged, so depend on gcc12 in that case too 273# gcc 11.x is not packaged, so depend on gcc12 in that case too
274_GCC12_PATTERNS= 11 11.* 12 12.* 274_GCC12_PATTERNS= 11 11.* 12 12.*
275 275
276# _GCC13_PATTERNS matches N s.t. 13.0 <= N < 14. 276# _GCC13_PATTERNS matches N s.t. 13.0 <= N < 14.
277_GCC13_PATTERNS= 13 13.* 277_GCC13_PATTERNS= 13 13.*
278 278
279# _GCC_AUX_PATTERNS matches 8-digit date YYYYMMDD* 279# _GCC_AUX_PATTERNS matches 8-digit date YYYYMMDD*
280_GCC_AUX_PATTERNS= 20[1-2][0-9][0-1][0-9][0-3][0-9]* 280_GCC_AUX_PATTERNS= 20[1-2][0-9][0-1][0-9][0-3][0-9]*
281 281
282# Override the default from sys.mk if necessary. 282# Override the default from sys.mk if necessary.
283.if ${CC} == cc && ${GCCBASE:U} && !exists(${GCCBASE}/bin/${CC}) && exists(${GCCBASE}/bin/gcc) 283.if ${CC} == cc && ${GCCBASE:U} && !exists(${GCCBASE}/bin/${CC}) && exists(${GCCBASE}/bin/gcc)
284CC= gcc 284CC= gcc
285.endif 285.endif
286 286
287# _CC is the full path to the compiler named by ${CC} if it can be found. 287# _CC is the full path to the compiler named by ${CC} if it can be found.
288.if !defined(_CC) 288.if !defined(_CC)
289_CC:= ${CC:[1]} 289_CC:= ${CC:[1]}
290. if !empty(GCCBASE) && exists(${GCCBASE}/bin) 290. if !empty(GCCBASE) && exists(${GCCBASE}/bin)
291_EXTRA_CC_DIRS= ${GCCBASE}/bin 291_EXTRA_CC_DIRS= ${GCCBASE}/bin
292. endif 292. endif
293. for _dir_ in ${_EXTRA_CC_DIRS} ${PATH:C/\:/ /g} 293. for _dir_ in ${_EXTRA_CC_DIRS} ${PATH:C/\:/ /g}
294. if empty(_CC:M/*) 294. if empty(_CC:M/*)
295. if exists(${_dir_}/${CC:[1]}) 295. if exists(${_dir_}/${CC:[1]})
296_CC:= ${_dir_}/${CC:[1]} 296_CC:= ${_dir_}/${CC:[1]}
297. endif 297. endif
298. endif 298. endif
299. endfor 299. endfor
300. if ${TOOLS_USE_CROSS_COMPILE:tl} == "no" 300. if ${TOOLS_USE_CROSS_COMPILE:tl} == "no"
301# Pass along _CC only if we're working on native packages -- don't pass 301# Pass along _CC only if we're working on native packages -- don't pass
302# the cross-compiler on to submakes for building native packages. 302# the cross-compiler on to submakes for building native packages.
303MAKEFLAGS+= _CC=${_CC:Q} 303MAKEFLAGS+= _CC=${_CC:Q}
304. endif 304. endif
305.endif 305.endif
306 306
307.if !defined(_GCC_VERSION) 307.if !defined(_GCC_VERSION)
308# 308#
309# FIXME: Ideally we'd use PKGSRC_SETENV here, but not enough of the tools 309# FIXME: Ideally we'd use PKGSRC_SETENV here, but not enough of the tools
310# infrastructure is loaded for SETENV to be defined when mk/compiler.mk is 310# infrastructure is loaded for SETENV to be defined when mk/compiler.mk is
311# included first. LC_ALL is required here for similar reasons, as ALL_ENV 311# included first. LC_ALL is required here for similar reasons, as ALL_ENV
312# is not defined at this stage. 312# is not defined at this stage.
313# 313#
314_GCC_VERSION_STRING!= \ 314_GCC_VERSION_STRING!= \
315 ( env LC_ALL=C ${_CC} -v 2>&1 | ${GREP} 'gcc version') 2>/dev/null || ${ECHO} 0 315 ( env LC_ALL=C ${_CC} -v 2>&1 | ${GREP} 'gcc version') 2>/dev/null || ${ECHO} 0
316. if !empty(_GCC_VERSION_STRING:Megcs*) 316. if !empty(_GCC_VERSION_STRING:Megcs*)
317_GCC_VERSION= 2.8.1 # egcs is considered to be gcc-2.8.1. 317_GCC_VERSION= 2.8.1 # egcs is considered to be gcc-2.8.1.
318. elif !empty(DRAGONFLY_CCVER) && ${OPSYS} == "DragonFly" 318. elif !empty(DRAGONFLY_CCVER) && ${OPSYS} == "DragonFly"
319_GCC_VERSION!= env CCVER=${DRAGONFLY_CCVER} ${_CC} -dumpversion 319_GCC_VERSION!= env CCVER=${DRAGONFLY_CCVER} ${_CC} -dumpversion
320. elif !empty(_GCC_VERSION_STRING:Mgcc*) 320. elif !empty(_GCC_VERSION_STRING:Mgcc*)
321_GCC_VERSION!= ${_CC} -dumpversion 321_GCC_VERSION!= ${_CC} -dumpversion
322. else 322. else
323_GCC_VERSION= 0 323_GCC_VERSION= 0
324. endif 324. endif
325.endif 325.endif
326_GCC_PKG= gcc-${_GCC_VERSION:C/-.*$//} 326_GCC_PKG= gcc-${_GCC_VERSION:C/-.*$//}
327 327
328.if !empty(_GCC_VERSION:M[23]\..*) || !empty(_GCC_VERSION:M4.[01]\..*) 328.if !empty(_GCC_VERSION:M[23]\..*) || !empty(_GCC_VERSION:M4.[01]\..*)
329# A lot of packages attempt to do this as a workaround for a 329# A lot of packages attempt to do this as a workaround for a
330# well-intentioned default in XCode 12+, but it's a common cause of 330# well-intentioned default in XCode 12+, but it's a common cause of
331# build failures on old versions of Darwin which use gcc and don't 331# build failures on old versions of Darwin which use gcc and don't
332# understand this syntax. 332# understand this syntax.
333# 333#
334# Note that pkgsrc also sets this flag itself for Darwin+clang. 334# Note that pkgsrc also sets this flag itself for Darwin+clang.
335BUILDLINK_TRANSFORM+= rm:-Wno-error=implicit-function-declaration 335BUILDLINK_TRANSFORM+= rm:-Wno-error=implicit-function-declaration
336.endif 336.endif
337 337
 338.if !empty(_GCC_VERSION:M[23]\..*) || !empty(_GCC_VERSION:M4.[0-8]\..*)
 339COMPILER_HAS_C11?= no
 340.else
 341COMPILER_HAS_C11?= yes
 342.endif
 343
338.for _version_ in ${_C_STD_VERSIONS} 344.for _version_ in ${_C_STD_VERSIONS}
339_C_STD_FLAG.${_version_}?= -std=${_version_} 345_C_STD_FLAG.${_version_}?= -std=${_version_}
340.endfor 346.endfor
341# XXX: pkgsrc historically hardcoded c99=gnu99 so we retain that for now, but 347# XXX: pkgsrc historically hardcoded c99=gnu99 so we retain that for now, but
342# we should look at removing this and be explicit in packages where required. 348# we should look at removing this and be explicit in packages where required.
343_C_STD_FLAG.c99= -std=gnu99 349_C_STD_FLAG.c99= -std=gnu99
344 350
345.for _version_ in ${_CXX_STD_VERSIONS} 351.for _version_ in ${_CXX_STD_VERSIONS}
346_CXX_STD_FLAG.${_version_}?= -std=${_version_} 352_CXX_STD_FLAG.${_version_}?= -std=${_version_}
347.endfor 353.endfor
348.if !empty(_GCC_VERSION:M[34].[1234].*) 354.if !empty(_GCC_VERSION:M[34].[1234].*)
349_CXX_STD_FLAG.c++03= -std=c++0x 355_CXX_STD_FLAG.c++03= -std=c++0x
350_CXX_STD_FLAG.gnu++03= -std=gnu++0x 356_CXX_STD_FLAG.gnu++03= -std=gnu++0x
351.endif 357.endif
352 358
353.if !empty(_CC:M${TOOLBASE}/*) 359.if !empty(_CC:M${TOOLBASE}/*)
354_IS_BUILTIN_GCC= NO 360_IS_BUILTIN_GCC= NO
355GCC_REQD+= ${_GCC_VERSION} 361GCC_REQD+= ${_GCC_VERSION}
356.else 362.else
357. if !empty(_CC:M/*) 363. if !empty(_CC:M/*)
358# 364#
359# GCC in older versions of Darwin report "Apple Computer ... based on gcc 365# GCC in older versions of Darwin report "Apple Computer ... based on gcc
360# version ...", so we can't just grep for "^gcc". 366# version ...", so we can't just grep for "^gcc".
361# 367#
362. if ${_GCC_VERSION} != "0" 368. if ${_GCC_VERSION} != "0"
363_IS_BUILTIN_GCC= YES 369_IS_BUILTIN_GCC= YES
364. else 370. else
365_IS_BUILTIN_GCC= NO 371_IS_BUILTIN_GCC= NO
366. endif 372. endif
367. else 373. else
368_IS_BUILTIN_GCC= NO 374_IS_BUILTIN_GCC= NO
369. endif 375. endif
370.endif 376.endif
371 377
372# Distill the GCC_REQD list into a single _GCC_REQD value that is the 378# Distill the GCC_REQD list into a single _GCC_REQD value that is the
373# highest version of GCC required. 379# highest version of GCC required.
374# 380#
375_GCC_STRICTEST_REQD?= none 381_GCC_STRICTEST_REQD?= none
376.for _version_ in ${GCC_REQD} 382.for _version_ in ${GCC_REQD}
377. for _pkg_ in gcc-${_version_} 383. for _pkg_ in gcc-${_version_}
378. if ${_GCC_STRICTEST_REQD} == "none" 384. if ${_GCC_STRICTEST_REQD} == "none"
379_GCC_PKG_SATISFIES_DEP= YES 385_GCC_PKG_SATISFIES_DEP= YES
380. for _vers_ in ${GCC_REQD} 386. for _vers_ in ${GCC_REQD}
381. if !empty(_GCC_PKG_SATISFIES_DEP:M[yY][eE][sS]) 387. if !empty(_GCC_PKG_SATISFIES_DEP:M[yY][eE][sS])
382_GCC_PKG_SATISFIES_DEP!= \ 388_GCC_PKG_SATISFIES_DEP!= \
383 if ${PKG_ADMIN} pmatch 'gcc>=${_vers_}' ${_pkg_} 2>/dev/null; then \ 389 if ${PKG_ADMIN} pmatch 'gcc>=${_vers_}' ${_pkg_} 2>/dev/null; then \
384 ${ECHO} "YES"; \ 390 ${ECHO} "YES"; \
385 else \ 391 else \
386 ${ECHO} "NO"; \ 392 ${ECHO} "NO"; \
387 fi 393 fi
388. endif 394. endif
389. endfor 395. endfor
390. if !empty(_GCC_PKG_SATISFIES_DEP:M[yY][eE][sS]) 396. if !empty(_GCC_PKG_SATISFIES_DEP:M[yY][eE][sS])
391_GCC_STRICTEST_REQD= ${_version_} 397_GCC_STRICTEST_REQD= ${_version_}
392. endif 398. endif
393. endif 399. endif
394. endfor 400. endfor
395.endfor 401.endfor
396_GCC_REQD= ${_GCC_STRICTEST_REQD} 402_GCC_REQD= ${_GCC_STRICTEST_REQD}
397 403
398# Determine which GCC version is required by examining _GCC_REQD. 404# Determine which GCC version is required by examining _GCC_REQD.
399_NEED_GCC6?= no 405_NEED_GCC6?= no
400.for _pattern_ in ${_GCC6_PATTERNS} 406.for _pattern_ in ${_GCC6_PATTERNS}
401. if !empty(_GCC_REQD:M${_pattern_}) 407. if !empty(_GCC_REQD:M${_pattern_})
402# XXX this won't work without adjustments elsewhere because of how 408# XXX this won't work without adjustments elsewhere because of how
403# _GCC_REQD is processed. 409# _GCC_REQD is processed.
404#. if ${OPSYS} == "NetBSD" && ${OPSYS_VERSION} < 089937 410#. if ${OPSYS} == "NetBSD" && ${OPSYS_VERSION} < 089937
405#USE_PKGSRC_GCC= yes 411#USE_PKGSRC_GCC= yes
406#USE_PKGSRC_GCC_RUNTIME= yes 412#USE_PKGSRC_GCC_RUNTIME= yes
407#. endif 413#. endif
408_NEED_GCC6= yes 414_NEED_GCC6= yes
409. if ${ALLOW_NEWER_COMPILER:tl} != "yes" 415. if ${ALLOW_NEWER_COMPILER:tl} != "yes"
410PKG_FAIL_REASON+= "Package requires at least gcc 6 to build" 416PKG_FAIL_REASON+= "Package requires at least gcc 6 to build"
411. endif 417. endif
412. endif 418. endif
413.endfor 419.endfor
414_NEED_GCC7?= no 420_NEED_GCC7?= no
415.for _pattern_ in ${_GCC7_PATTERNS} 421.for _pattern_ in ${_GCC7_PATTERNS}
416. if !empty(_GCC_REQD:M${_pattern_}) 422. if !empty(_GCC_REQD:M${_pattern_})
417. if ${OPSYS} == "NetBSD" && ${OPSYS_VERSION} < 089937 423. if ${OPSYS} == "NetBSD" && ${OPSYS_VERSION} < 089937
418USE_PKGSRC_GCC= yes 424USE_PKGSRC_GCC= yes
419USE_PKGSRC_GCC_RUNTIME= yes 425USE_PKGSRC_GCC_RUNTIME= yes
420. endif 426. endif
421. if ${ALLOW_NEWER_COMPILER:tl} != "yes" 427. if ${ALLOW_NEWER_COMPILER:tl} != "yes"
422PKG_FAIL_REASON+= "Package requires at least gcc 7 to build" 428PKG_FAIL_REASON+= "Package requires at least gcc 7 to build"
423. endif 429. endif
424_NEED_GCC7= yes 430_NEED_GCC7= yes
425. endif 431. endif
426.endfor 432.endfor
427_NEED_GCC8?= no 433_NEED_GCC8?= no
428.for _pattern_ in ${_GCC8_PATTERNS} 434.for _pattern_ in ${_GCC8_PATTERNS}
429. if !empty(_GCC_REQD:M${_pattern_}) 435. if !empty(_GCC_REQD:M${_pattern_})
430. if ${OPSYS} == "NetBSD" && ${OPSYS_VERSION} < 099917 436. if ${OPSYS} == "NetBSD" && ${OPSYS_VERSION} < 099917
431USE_PKGSRC_GCC= yes 437USE_PKGSRC_GCC= yes
432USE_PKGSRC_GCC_RUNTIME= yes 438USE_PKGSRC_GCC_RUNTIME= yes
433. endif 439. endif
434. if ${ALLOW_NEWER_COMPILER:tl} != "yes" 440. if ${ALLOW_NEWER_COMPILER:tl} != "yes"
435PKG_FAIL_REASON+= "Package requires at least gcc 8 to build" 441PKG_FAIL_REASON+= "Package requires at least gcc 8 to build"
436. endif 442. endif
437_NEED_GCC8= yes 443_NEED_GCC8= yes
438. endif 444. endif
439.endfor 445.endfor
440_NEED_GCC9?= no 446_NEED_GCC9?= no
441.for _pattern_ in ${_GCC9_PATTERNS} 447.for _pattern_ in ${_GCC9_PATTERNS}
442. if !empty(_GCC_REQD:M${_pattern_}) 448. if !empty(_GCC_REQD:M${_pattern_})
443. if ${OPSYS} == "NetBSD" && ${OPSYS_VERSION} < 099976 449. if ${OPSYS} == "NetBSD" && ${OPSYS_VERSION} < 099976
444USE_PKGSRC_GCC= yes 450USE_PKGSRC_GCC= yes
445USE_PKGSRC_GCC_RUNTIME= yes 451USE_PKGSRC_GCC_RUNTIME= yes
446. endif 452. endif
447. if ${ALLOW_NEWER_COMPILER:tl} != "yes" 453. if ${ALLOW_NEWER_COMPILER:tl} != "yes"
448PKG_FAIL_REASON+= "Package requires at least gcc 9 to build" 454PKG_FAIL_REASON+= "Package requires at least gcc 9 to build"
449. endif 455. endif
450_NEED_GCC9= yes 456_NEED_GCC9= yes
451. endif 457. endif
452.endfor 458.endfor
453_NEED_GCC10?= no 459_NEED_GCC10?= no
454.for _pattern_ in ${_GCC10_PATTERNS} 460.for _pattern_ in ${_GCC10_PATTERNS}
455. if !empty(_GCC_REQD:M${_pattern_}) 461. if !empty(_GCC_REQD:M${_pattern_})
456. if ${OPSYS} == "NetBSD" && ${OPSYS_VERSION} < 099982 462. if ${OPSYS} == "NetBSD" && ${OPSYS_VERSION} < 099982
457USE_PKGSRC_GCC= yes 463USE_PKGSRC_GCC= yes
458USE_PKGSRC_GCC_RUNTIME= yes 464USE_PKGSRC_GCC_RUNTIME= yes
459. endif 465. endif
460. if ${ALLOW_NEWER_COMPILER:tl} != "yes" 466. if ${ALLOW_NEWER_COMPILER:tl} != "yes"
461PKG_FAIL_REASON+= "Package requires at least gcc 10 to build" 467PKG_FAIL_REASON+= "Package requires at least gcc 10 to build"
462. endif 468. endif
463_NEED_GCC10= yes 469_NEED_GCC10= yes
464. endif 470. endif
465.endfor 471.endfor
466_NEED_GCC12?= no 472_NEED_GCC12?= no
467.for _pattern_ in ${_GCC12_PATTERNS} 473.for _pattern_ in ${_GCC12_PATTERNS}
468. if !empty(_GCC_REQD:M${_pattern_}) 474. if !empty(_GCC_REQD:M${_pattern_})
469# XXX: pin to a version when NetBSD switches to gcc12 475# XXX: pin to a version when NetBSD switches to gcc12
470. if ${OPSYS} == "NetBSD" 476. if ${OPSYS} == "NetBSD"
471USE_PKGSRC_GCC= yes 477USE_PKGSRC_GCC= yes
472USE_PKGSRC_GCC_RUNTIME= yes 478USE_PKGSRC_GCC_RUNTIME= yes
473. endif 479. endif
474. if ${ALLOW_NEWER_COMPILER:tl} != "yes" 480. if ${ALLOW_NEWER_COMPILER:tl} != "yes"
475PKG_FAIL_REASON+= "Package requires at least gcc 12 to build" 481PKG_FAIL_REASON+= "Package requires at least gcc 12 to build"
476. endif 482. endif
477_NEED_GCC12= yes 483_NEED_GCC12= yes
478. endif 484. endif
479.endfor 485.endfor
480_NEED_GCC13?= no 486_NEED_GCC13?= no
481.for _pattern_ in ${_GCC13_PATTERNS} 487.for _pattern_ in ${_GCC13_PATTERNS}
482. if !empty(_GCC_REQD:M${_pattern_}) 488. if !empty(_GCC_REQD:M${_pattern_})
483# XXX: pin to a version when NetBSD switches to gcc13 489# XXX: pin to a version when NetBSD switches to gcc13
484. if ${OPSYS} == "NetBSD" 490. if ${OPSYS} == "NetBSD"
485USE_PKGSRC_GCC= yes 491USE_PKGSRC_GCC= yes
486USE_PKGSRC_GCC_RUNTIME= yes 492USE_PKGSRC_GCC_RUNTIME= yes
487. endif 493. endif
488. if ${ALLOW_NEWER_COMPILER:tl} != "yes" 494. if ${ALLOW_NEWER_COMPILER:tl} != "yes"
489PKG_FAIL_REASON+= "Package requires at least gcc 13 to build" 495PKG_FAIL_REASON+= "Package requires at least gcc 13 to build"
490. endif 496. endif
491_NEED_GCC13= yes 497_NEED_GCC13= yes
492. endif 498. endif
493.endfor 499.endfor
494_NEED_GCC_AUX?= no 500_NEED_GCC_AUX?= no
495.for _pattern_ in ${_GCC_AUX_PATTERNS} 501.for _pattern_ in ${_GCC_AUX_PATTERNS}
496. if !empty(_GCC_REQD:M${_pattern_}) 502. if !empty(_GCC_REQD:M${_pattern_})
497_NEED_GCC_AUX= yes 503_NEED_GCC_AUX= yes
498_NEED_NEWER_GCC=NO 504_NEED_NEWER_GCC=NO
499. endif 505. endif
500.endfor 506.endfor
501.if !empty(_NEED_GCC6:M[nN][oO]) && !empty(_NEED_GCC7:M[nN][oO]) && \ 507.if !empty(_NEED_GCC6:M[nN][oO]) && !empty(_NEED_GCC7:M[nN][oO]) && \
502 !empty(_NEED_GCC8:M[nN][oO]) && !empty(_NEED_GCC9:M[nN][oO]) && \ 508 !empty(_NEED_GCC8:M[nN][oO]) && !empty(_NEED_GCC9:M[nN][oO]) && \
503 !empty(_NEED_GCC10:M[nN][oO]) && !empty(_NEED_GCC12:M[nN][oO]) && \ 509 !empty(_NEED_GCC10:M[nN][oO]) && !empty(_NEED_GCC12:M[nN][oO]) && \
504 !empty(_NEED_GCC13:M[nN][oO]) && !empty(_NEED_GCC_AUX:M[nN][oO]) 510 !empty(_NEED_GCC13:M[nN][oO]) && !empty(_NEED_GCC_AUX:M[nN][oO])
505_NEED_GCC8= yes 511_NEED_GCC8= yes
506.endif 512.endif
507 513
508# April 2022: GCC below 10 from pkgsrc is broken on 32-bit arm NetBSD. 514# April 2022: GCC below 10 from pkgsrc is broken on 32-bit arm NetBSD.
509.if !empty(MACHINE_PLATFORM:MNetBSD-*-earm*) && \ 515.if !empty(MACHINE_PLATFORM:MNetBSD-*-earm*) && \
510 ${OPSYS_VERSION} < 099900 && \ 516 ${OPSYS_VERSION} < 099900 && \
511 (${_NEED_GCC8:tl} == "yes" || ${_NEED_GCC9:tl} == "yes") 517 (${_NEED_GCC8:tl} == "yes" || ${_NEED_GCC9:tl} == "yes")
512_NEED_GCC6= no 518_NEED_GCC6= no
513_NEED_GCC7= no 519_NEED_GCC7= no
514_NEED_GCC8= no 520_NEED_GCC8= no
515_NEED_GCC9= no 521_NEED_GCC9= no
516_NEED_GCC10= yes 522_NEED_GCC10= yes
517_NEED_GCC12= yes 523_NEED_GCC12= yes
518_NEED_GCC13= yes 524_NEED_GCC13= yes
519.endif 525.endif
520 526
521# Assume by default that GCC will only provide a C compiler. 527# Assume by default that GCC will only provide a C compiler.
522LANGUAGES.gcc?= c 528LANGUAGES.gcc?= c
523.if !empty(_NEED_GCC6:M[yY][eE][sS]) 529.if !empty(_NEED_GCC6:M[yY][eE][sS])
524LANGUAGES.gcc= c c++ fortran fortran77 go java objc obj-c++ 530LANGUAGES.gcc= c c++ fortran fortran77 go java objc obj-c++
525.elif !empty(_NEED_GCC7:M[yY][eE][sS]) 531.elif !empty(_NEED_GCC7:M[yY][eE][sS])
526LANGUAGES.gcc= c c++ fortran fortran77 go java objc obj-c++ 532LANGUAGES.gcc= c c++ fortran fortran77 go java objc obj-c++
527.elif !empty(_NEED_GCC8:M[yY][eE][sS]) 533.elif !empty(_NEED_GCC8:M[yY][eE][sS])
528LANGUAGES.gcc= c c++ fortran fortran77 go java objc obj-c++ 534LANGUAGES.gcc= c c++ fortran fortran77 go java objc obj-c++
529.elif !empty(_NEED_GCC9:M[yY][eE][sS]) 535.elif !empty(_NEED_GCC9:M[yY][eE][sS])
530LANGUAGES.gcc= c c++ fortran fortran77 go java objc obj-c++ 536LANGUAGES.gcc= c c++ fortran fortran77 go java objc obj-c++
531.elif !empty(_NEED_GCC10:M[yY][eE][sS]) 537.elif !empty(_NEED_GCC10:M[yY][eE][sS])
532LANGUAGES.gcc= c c++ fortran fortran77 go java objc obj-c++ 538LANGUAGES.gcc= c c++ fortran fortran77 go java objc obj-c++
533.elif !empty(_NEED_GCC12:M[yY][eE][sS]) 539.elif !empty(_NEED_GCC12:M[yY][eE][sS])
534LANGUAGES.gcc= c c++ fortran fortran77 go java objc obj-c++ 540LANGUAGES.gcc= c c++ fortran fortran77 go java objc obj-c++
535.elif !empty(_NEED_GCC13:M[yY][eE][sS]) 541.elif !empty(_NEED_GCC13:M[yY][eE][sS])
536LANGUAGES.gcc= c c++ fortran fortran77 go java objc obj-c++ 542LANGUAGES.gcc= c c++ fortran fortran77 go java objc obj-c++
537.elif !empty(_NEED_GCC_AUX:M[yY][eE][sS]) 543.elif !empty(_NEED_GCC_AUX:M[yY][eE][sS])
538LANGUAGES.gcc= c c++ fortran fortran77 objc ada 544LANGUAGES.gcc= c c++ fortran fortran77 objc ada
539.endif 545.endif
540_LANGUAGES.gcc= # empty 546_LANGUAGES.gcc= # empty
541.for _lang_ in ${USE_LANGUAGES} 547.for _lang_ in ${USE_LANGUAGES}
542_LANGUAGES.gcc+= ${LANGUAGES.gcc:M${_lang_}} 548_LANGUAGES.gcc+= ${LANGUAGES.gcc:M${_lang_}}
543.endfor 549.endfor
544 550
545.if ${_PKGSRC_USE_STACK_CHECK} == "yes" 551.if ${_PKGSRC_USE_STACK_CHECK} == "yes"
546_STACK_CHECK_CFLAGS= -fstack-check 552_STACK_CHECK_CFLAGS= -fstack-check
547_GCC_CFLAGS+= ${_STACK_CHECK_CFLAGS} 553_GCC_CFLAGS+= ${_STACK_CHECK_CFLAGS}
548.elif ${_PKGSRC_USE_STACK_CHECK} == "stack-clash" 554.elif ${_PKGSRC_USE_STACK_CHECK} == "stack-clash"
549_STACK_CHECK_CFLAGS= -fstack-clash-protection 555_STACK_CHECK_CFLAGS= -fstack-clash-protection
550_GCC_CFLAGS+= ${_STACK_CHECK_CFLAGS} 556_GCC_CFLAGS+= ${_STACK_CHECK_CFLAGS}
551.endif 557.endif
552 558
553.if ${_PKGSRC_MKPIE} == "yes" 559.if ${_PKGSRC_MKPIE} == "yes"
554_MKPIE_FCFLAGS= -fPIC 560_MKPIE_FCFLAGS= -fPIC
555. if ${PKGSRC_OVERRIDE_MKPIE:tl} == "no" 561. if ${PKGSRC_OVERRIDE_MKPIE:tl} == "no"
556_GCC_FCFLAGS+= ${_MKPIE_FCFLAGS} 562_GCC_FCFLAGS+= ${_MKPIE_FCFLAGS}
557. endif 563. endif
558.endif 564.endif
559 565
560# GCC has this annoying behaviour where it advocates in a multi-line 566# GCC has this annoying behaviour where it advocates in a multi-line
561# banner the use of "#include" over "#import" when including headers. 567# banner the use of "#include" over "#import" when including headers.
562# This generates a huge number of warnings when building practically all 568# This generates a huge number of warnings when building practically all
563# Objective-C code where it is convention to use "#import". Suppress 569# Objective-C code where it is convention to use "#import". Suppress
564# the warning if we're building Objective-C code using GCC. 570# the warning if we're building Objective-C code using GCC.
565# 571#
566.if !empty(_LANGUAGES.gcc:Mobjc) 572.if !empty(_LANGUAGES.gcc:Mobjc)
567CFLAGS+= -Wno-import 573CFLAGS+= -Wno-import
568.endif 574.endif
569 575
570CFLAGS+= ${_GCC_CFLAGS} 576CFLAGS+= ${_GCC_CFLAGS}
571FCFLAGS+= ${_GCC_FCFLAGS} 577FCFLAGS+= ${_GCC_FCFLAGS}
572 578
573.if !empty(_NEED_GCC6:M[yY][eE][sS]) 579.if !empty(_NEED_GCC6:M[yY][eE][sS])
574# 580#
575# We require gcc-6.x in the lang/gcc6-* directory. 581# We require gcc-6.x in the lang/gcc6-* directory.
576# 582#
577_GCC_PKGBASE= gcc6 583_GCC_PKGBASE= gcc6
578. if ${PKGPATH} == lang/gcc6 584. if ${PKGPATH} == lang/gcc6
579_IGNORE_GCC= yes 585_IGNORE_GCC= yes
580MAKEFLAGS+= _IGNORE_GCC=yes 586MAKEFLAGS+= _IGNORE_GCC=yes
581. endif 587. endif
582. if !defined(_IGNORE_GCC) && !empty(_LANGUAGES.gcc) 588. if !defined(_IGNORE_GCC) && !empty(_LANGUAGES.gcc)
583_GCC_PKGSRCDIR= ../../lang/gcc6 589_GCC_PKGSRCDIR= ../../lang/gcc6
584_GCC_DEPENDENCY= gcc6>=${_GCC_REQD}:../../lang/gcc6 590_GCC_DEPENDENCY= gcc6>=${_GCC_REQD}:../../lang/gcc6
585. if !empty(_LANGUAGES.gcc:Mc++) || \ 591. if !empty(_LANGUAGES.gcc:Mc++) || \
586 !empty(_LANGUAGES.gcc:Mfortran) || \ 592 !empty(_LANGUAGES.gcc:Mfortran) || \
587 !empty(_LANGUAGES.gcc:Mfortran77) || \ 593 !empty(_LANGUAGES.gcc:Mfortran77) || \
588 !empty(_LANGUAGES.gcc:Mgo) || \ 594 !empty(_LANGUAGES.gcc:Mgo) || \
589 !empty(_LANGUAGES.gcc:Mobjc) || \ 595 !empty(_LANGUAGES.gcc:Mobjc) || \
590 !empty(_LANGUAGES.gcc:Mobj-c++) 596 !empty(_LANGUAGES.gcc:Mobj-c++)
591_USE_GCC_SHLIB?= yes 597_USE_GCC_SHLIB?= yes
592. endif 598. endif
593. endif 599. endif
594.elif !empty(_NEED_GCC7:M[yY][eE][sS]) 600.elif !empty(_NEED_GCC7:M[yY][eE][sS])
595# 601#
596# We require gcc-7.x in the lang/gcc7-* directory. 602# We require gcc-7.x in the lang/gcc7-* directory.
597# 603#
598_GCC_PKGBASE= gcc7 604_GCC_PKGBASE= gcc7
599. if ${PKGPATH} == lang/gcc7 605. if ${PKGPATH} == lang/gcc7
600_IGNORE_GCC= yes 606_IGNORE_GCC= yes
601MAKEFLAGS+= _IGNORE_GCC=yes 607MAKEFLAGS+= _IGNORE_GCC=yes
602. endif 608. endif
603. if !defined(_IGNORE_GCC) && !empty(_LANGUAGES.gcc) 609. if !defined(_IGNORE_GCC) && !empty(_LANGUAGES.gcc)
604_GCC_PKGSRCDIR= ../../lang/gcc7 610_GCC_PKGSRCDIR= ../../lang/gcc7
605_GCC_DEPENDENCY= gcc7>=${_GCC_REQD}:../../lang/gcc7 611_GCC_DEPENDENCY= gcc7>=${_GCC_REQD}:../../lang/gcc7
606. if !empty(_LANGUAGES.gcc:Mc++) || \ 612. if !empty(_LANGUAGES.gcc:Mc++) || \
607 !empty(_LANGUAGES.gcc:Mfortran) || \ 613 !empty(_LANGUAGES.gcc:Mfortran) || \
608 !empty(_LANGUAGES.gcc:Mfortran77) || \ 614 !empty(_LANGUAGES.gcc:Mfortran77) || \
609 !empty(_LANGUAGES.gcc:Mgo) || \ 615 !empty(_LANGUAGES.gcc:Mgo) || \
610 !empty(_LANGUAGES.gcc:Mobjc) || \ 616 !empty(_LANGUAGES.gcc:Mobjc) || \
611 !empty(_LANGUAGES.gcc:Mobj-c++) 617 !empty(_LANGUAGES.gcc:Mobj-c++)
612_USE_GCC_SHLIB?= yes 618_USE_GCC_SHLIB?= yes
613. endif 619. endif
614. endif 620. endif
615.elif !empty(_NEED_GCC8:M[yY][eE][sS]) 621.elif !empty(_NEED_GCC8:M[yY][eE][sS])
616# 622#
617# We require gcc-8.x in the lang/gcc8-* directory. 623# We require gcc-8.x in the lang/gcc8-* directory.
618# 624#
619_GCC_PKGBASE= gcc8 625_GCC_PKGBASE= gcc8
620. if ${PKGPATH} == lang/gcc8 626. if ${PKGPATH} == lang/gcc8
621_IGNORE_GCC= yes 627_IGNORE_GCC= yes
622MAKEFLAGS+= _IGNORE_GCC=yes 628MAKEFLAGS+= _IGNORE_GCC=yes
623. endif 629. endif
624. if !defined(_IGNORE_GCC) && !empty(_LANGUAGES.gcc) 630. if !defined(_IGNORE_GCC) && !empty(_LANGUAGES.gcc)
625_GCC_PKGSRCDIR= ../../lang/gcc8 631_GCC_PKGSRCDIR= ../../lang/gcc8
626_GCC_DEPENDENCY= gcc8>=${_GCC_REQD}:../../lang/gcc8 632_GCC_DEPENDENCY= gcc8>=${_GCC_REQD}:../../lang/gcc8
627. if !empty(_LANGUAGES.gcc:Mc++) || \ 633. if !empty(_LANGUAGES.gcc:Mc++) || \
628 !empty(_LANGUAGES.gcc:Mfortran) || \ 634 !empty(_LANGUAGES.gcc:Mfortran) || \
629 !empty(_LANGUAGES.gcc:Mfortran77) || \ 635 !empty(_LANGUAGES.gcc:Mfortran77) || \
630 !empty(_LANGUAGES.gcc:Mgo) || \ 636 !empty(_LANGUAGES.gcc:Mgo) || \
631 !empty(_LANGUAGES.gcc:Mobjc) || \ 637 !empty(_LANGUAGES.gcc:Mobjc) || \
632 !empty(_LANGUAGES.gcc:Mobj-c++) 638 !empty(_LANGUAGES.gcc:Mobj-c++)
633_USE_GCC_SHLIB?= yes 639_USE_GCC_SHLIB?= yes
634. endif 640. endif
635. endif 641. endif
636.elif !empty(_NEED_GCC9:M[yY][eE][sS]) 642.elif !empty(_NEED_GCC9:M[yY][eE][sS])
637# 643#
638# We require gcc-9.x in the lang/gcc9-* directory. 644# We require gcc-9.x in the lang/gcc9-* directory.
639# 645#
640_GCC_PKGBASE= gcc9 646_GCC_PKGBASE= gcc9
641. if ${PKGPATH} == lang/gcc9 647. if ${PKGPATH} == lang/gcc9
642_IGNORE_GCC= yes 648_IGNORE_GCC= yes
643MAKEFLAGS+= _IGNORE_GCC=yes 649MAKEFLAGS+= _IGNORE_GCC=yes
644. endif 650. endif
645. if !defined(_IGNORE_GCC) && !empty(_LANGUAGES.gcc) 651. if !defined(_IGNORE_GCC) && !empty(_LANGUAGES.gcc)
646_GCC_PKGSRCDIR= ../../lang/gcc9 652_GCC_PKGSRCDIR= ../../lang/gcc9
647_GCC_DEPENDENCY= gcc9>=${_GCC_REQD}:../../lang/gcc9 653_GCC_DEPENDENCY= gcc9>=${_GCC_REQD}:../../lang/gcc9
648. if !empty(_LANGUAGES.gcc:Mc++) || \ 654. if !empty(_LANGUAGES.gcc:Mc++) || \
649 !empty(_LANGUAGES.gcc:Mfortran) || \ 655 !empty(_LANGUAGES.gcc:Mfortran) || \
650 !empty(_LANGUAGES.gcc:Mfortran77) || \ 656 !empty(_LANGUAGES.gcc:Mfortran77) || \
651 !empty(_LANGUAGES.gcc:Mgo) || \ 657 !empty(_LANGUAGES.gcc:Mgo) || \
652 !empty(_LANGUAGES.gcc:Mobjc) || \ 658 !empty(_LANGUAGES.gcc:Mobjc) || \
653 !empty(_LANGUAGES.gcc:Mobj-c++) 659 !empty(_LANGUAGES.gcc:Mobj-c++)
654_USE_GCC_SHLIB?= yes 660_USE_GCC_SHLIB?= yes
655. endif 661. endif
656. endif 662. endif
657.elif !empty(_NEED_GCC10:M[yY][eE][sS]) 663.elif !empty(_NEED_GCC10:M[yY][eE][sS])
658# 664#
659# We require gcc-10.x in the lang/gcc10-* directory. 665# We require gcc-10.x in the lang/gcc10-* directory.
660# 666#
661_GCC_PKGBASE= gcc10 667_GCC_PKGBASE= gcc10
662. if ${PKGPATH} == lang/gcc10 668. if ${PKGPATH} == lang/gcc10
663_IGNORE_GCC= yes 669_IGNORE_GCC= yes
664MAKEFLAGS+= _IGNORE_GCC=yes 670MAKEFLAGS+= _IGNORE_GCC=yes
665. endif 671. endif
666. if !defined(_IGNORE_GCC) && !empty(_LANGUAGES.gcc) 672. if !defined(_IGNORE_GCC) && !empty(_LANGUAGES.gcc)
667_GCC_PKGSRCDIR= ../../lang/gcc10 673_GCC_PKGSRCDIR= ../../lang/gcc10
668_GCC_DEPENDENCY= gcc10>=${_GCC_REQD}:../../lang/gcc10 674_GCC_DEPENDENCY= gcc10>=${_GCC_REQD}:../../lang/gcc10
669. if !empty(_LANGUAGES.gcc:Mc++) || \ 675. if !empty(_LANGUAGES.gcc:Mc++) || \
670 !empty(_LANGUAGES.gcc:Mfortran) || \ 676 !empty(_LANGUAGES.gcc:Mfortran) || \
671 !empty(_LANGUAGES.gcc:Mfortran77) || \ 677 !empty(_LANGUAGES.gcc:Mfortran77) || \
672 !empty(_LANGUAGES.gcc:Mgo) || \ 678 !empty(_LANGUAGES.gcc:Mgo) || \
673 !empty(_LANGUAGES.gcc:Mobjc) || \ 679 !empty(_LANGUAGES.gcc:Mobjc) || \
674 !empty(_LANGUAGES.gcc:Mobj-c++) 680 !empty(_LANGUAGES.gcc:Mobj-c++)
675_USE_GCC_SHLIB?= yes 681_USE_GCC_SHLIB?= yes
676. endif 682. endif
677. endif 683. endif
678.elif !empty(_NEED_GCC12:M[yY][eE][sS]) 684.elif !empty(_NEED_GCC12:M[yY][eE][sS])
679# 685#
680# We require gcc-12.x in the lang/gcc12-* directory. 686# We require gcc-12.x in the lang/gcc12-* directory.
681# 687#
682_GCC_PKGBASE= gcc12 688_GCC_PKGBASE= gcc12
683. if ${PKGPATH} == lang/gcc12 689. if ${PKGPATH} == lang/gcc12
684_IGNORE_GCC= yes 690_IGNORE_GCC= yes
685MAKEFLAGS+= _IGNORE_GCC=yes 691MAKEFLAGS+= _IGNORE_GCC=yes
686. endif 692. endif
687. if !defined(_IGNORE_GCC) && !empty(_LANGUAGES.gcc) 693. if !defined(_IGNORE_GCC) && !empty(_LANGUAGES.gcc)
688_GCC_PKGSRCDIR= ../../lang/gcc12 694_GCC_PKGSRCDIR= ../../lang/gcc12
689_GCC_DEPENDENCY= gcc12>=${_GCC_REQD}:../../lang/gcc12 695_GCC_DEPENDENCY= gcc12>=${_GCC_REQD}:../../lang/gcc12
690. if !empty(_LANGUAGES.gcc:Mc++) || \ 696. if !empty(_LANGUAGES.gcc:Mc++) || \
691 !empty(_LANGUAGES.gcc:Mfortran) || \ 697 !empty(_LANGUAGES.gcc:Mfortran) || \
692 !empty(_LANGUAGES.gcc:Mfortran77) || \ 698 !empty(_LANGUAGES.gcc:Mfortran77) || \
693 !empty(_LANGUAGES.gcc:Mgo) || \ 699 !empty(_LANGUAGES.gcc:Mgo) || \
694 !empty(_LANGUAGES.gcc:Mobjc) || \ 700 !empty(_LANGUAGES.gcc:Mobjc) || \
695 !empty(_LANGUAGES.gcc:Mobj-c++) 701 !empty(_LANGUAGES.gcc:Mobj-c++)
696_USE_GCC_SHLIB?= yes 702_USE_GCC_SHLIB?= yes
697. endif 703. endif
698. endif 704. endif
699.elif !empty(_NEED_GCC13:M[yY][eE][sS]) 705.elif !empty(_NEED_GCC13:M[yY][eE][sS])
700# 706#
701# We require gcc-13.x in the lang/gcc13-* directory. 707# We require gcc-13.x in the lang/gcc13-* directory.
702# 708#
703_GCC_PKGBASE= gcc13 709_GCC_PKGBASE= gcc13
704. if ${PKGPATH} == lang/gcc13 710. if ${PKGPATH} == lang/gcc13
705_IGNORE_GCC= yes 711_IGNORE_GCC= yes
706MAKEFLAGS+= _IGNORE_GCC=yes 712MAKEFLAGS+= _IGNORE_GCC=yes
707. endif 713. endif
708. if !defined(_IGNORE_GCC) && !empty(_LANGUAGES.gcc) 714. if !defined(_IGNORE_GCC) && !empty(_LANGUAGES.gcc)
709_GCC_PKGSRCDIR= ../../lang/gcc13 715_GCC_PKGSRCDIR= ../../lang/gcc13
710_GCC_DEPENDENCY= gcc13>=${_GCC_REQD}:../../lang/gcc13 716_GCC_DEPENDENCY= gcc13>=${_GCC_REQD}:../../lang/gcc13
711. if !empty(_LANGUAGES.gcc:Mc++) || \ 717. if !empty(_LANGUAGES.gcc:Mc++) || \
712 !empty(_LANGUAGES.gcc:Mfortran) || \ 718 !empty(_LANGUAGES.gcc:Mfortran) || \
713 !empty(_LANGUAGES.gcc:Mfortran77) || \ 719 !empty(_LANGUAGES.gcc:Mfortran77) || \
714 !empty(_LANGUAGES.gcc:Mgo) || \ 720 !empty(_LANGUAGES.gcc:Mgo) || \
715 !empty(_LANGUAGES.gcc:Mobjc) || \ 721 !empty(_LANGUAGES.gcc:Mobjc) || \
716 !empty(_LANGUAGES.gcc:Mobj-c++) 722 !empty(_LANGUAGES.gcc:Mobj-c++)
717_USE_GCC_SHLIB?= yes 723_USE_GCC_SHLIB?= yes
718. endif 724. endif
719. endif 725. endif
720.elif !empty(_NEED_GCC_AUX:M[yY][eE][sS]) 726.elif !empty(_NEED_GCC_AUX:M[yY][eE][sS])
721# 727#
722# We require Ada-capable compiler in the lang/gcc6-aux directory. 728# We require Ada-capable compiler in the lang/gcc6-aux directory.
723# 729#
724_GCC_PKGBASE= gcc6-aux 730_GCC_PKGBASE= gcc6-aux
725. if ${PKGPATH} == lang/gcc6-aux 731. if ${PKGPATH} == lang/gcc6-aux
726_IGNORE_GCC= yes 732_IGNORE_GCC= yes
727MAKEFLAGS+= _IGNORE_GCC=yes 733MAKEFLAGS+= _IGNORE_GCC=yes
728. endif 734. endif
729. if !defined(_IGNORE_GCC) && !empty(_LANGUAGES.gcc) 735. if !defined(_IGNORE_GCC) && !empty(_LANGUAGES.gcc)
730_GCC_PKGSRCDIR= ../../lang/gcc6-aux 736_GCC_PKGSRCDIR= ../../lang/gcc6-aux
731_GCC_DEPENDENCY= gcc6-aux>=${_GCC_REQD}:../../lang/gcc6-aux 737_GCC_DEPENDENCY= gcc6-aux>=${_GCC_REQD}:../../lang/gcc6-aux
732. if !empty(_LANGUAGES.gcc:Mc++) || \ 738. if !empty(_LANGUAGES.gcc:Mc++) || \
733 !empty(_LANGUAGES.gcc:Mfortran) || \ 739 !empty(_LANGUAGES.gcc:Mfortran) || \
734 !empty(_LANGUAGES.gcc:Mfortran77) || \ 740 !empty(_LANGUAGES.gcc:Mfortran77) || \
735 !empty(_LANGUAGES.gcc:Mada) || \ 741 !empty(_LANGUAGES.gcc:Mada) || \
736 !empty(_LANGUAGES.gcc:Mobjc) 742 !empty(_LANGUAGES.gcc:Mobjc)
737_USE_GCC_SHLIB?= yes 743_USE_GCC_SHLIB?= yes
738. endif 744. endif
739. endif 745. endif
740.endif 746.endif
741_GCC_DEPENDS= ${_GCC_PKGBASE}>=${_GCC_REQD} 747_GCC_DEPENDS= ${_GCC_PKGBASE}>=${_GCC_REQD}
742 748
743# When not using the GNU linker, gcc will always link shared libraries against 749# When not using the GNU linker, gcc will always link shared libraries against
744# the shared version of libgcc, and so _USE_GCC_SHLIB needs to be enabled on 750# the shared version of libgcc, and so _USE_GCC_SHLIB needs to be enabled on
745# platforms with non-GNU linkers, such as SunOS. 751# platforms with non-GNU linkers, such as SunOS.
746# 752#
747# However, we cannot simply do this by default as it will create circular 753# However, we cannot simply do this by default as it will create circular
748# dependencies in packages which are required to build gcc itself, and so we 754# dependencies in packages which are required to build gcc itself, and so we
749# enable it based on USE_LIBTOOL for the majority of packages, and support 755# enable it based on USE_LIBTOOL for the majority of packages, and support
750# USE_GCC_RUNTIME for packages which create shared libraries but do not use 756# USE_GCC_RUNTIME for packages which create shared libraries but do not use
751# libtool to do so. 757# libtool to do so.
752# 758#
753.if (${OPSYS} == "Darwin" || ${OPSYS} == "SunOS") && \ 759.if (${OPSYS} == "Darwin" || ${OPSYS} == "SunOS") && \
754 (defined(USE_LIBTOOL) || defined(USE_GCC_RUNTIME)) 760 (defined(USE_LIBTOOL) || defined(USE_GCC_RUNTIME))
755_USE_GCC_SHLIB= yes 761_USE_GCC_SHLIB= yes
756.endif 762.endif
757 763
758.if !empty(USE_NATIVE_GCC:M[yY][eE][sS]) && !empty(_IS_BUILTIN_GCC:M[yY][eE][sS]) 764.if !empty(USE_NATIVE_GCC:M[yY][eE][sS]) && !empty(_IS_BUILTIN_GCC:M[yY][eE][sS])
759_USE_PKGSRC_GCC= no 765_USE_PKGSRC_GCC= no
760.elif !empty(USE_PKGSRC_GCC:M[yY][eE][sS]) 766.elif !empty(USE_PKGSRC_GCC:M[yY][eE][sS])
761# For environments where there is an external gcc too, but pkgsrc 767# For environments where there is an external gcc too, but pkgsrc
762# should use the pkgsrc one for consistency. 768# should use the pkgsrc one for consistency.
763_USE_PKGSRC_GCC= yes 769_USE_PKGSRC_GCC= yes
764.endif 770.endif
765 771
766.if defined(_IGNORE_GCC) 772.if defined(_IGNORE_GCC)
767_USE_PKGSRC_GCC= NO 773_USE_PKGSRC_GCC= NO
768.endif 774.endif
769 775
770.if !defined(_USE_PKGSRC_GCC) 776.if !defined(_USE_PKGSRC_GCC)
771_USE_PKGSRC_GCC= YES 777_USE_PKGSRC_GCC= YES
772. if !empty(_IS_BUILTIN_GCC:M[yY][eE][sS]) 778. if !empty(_IS_BUILTIN_GCC:M[yY][eE][sS])
773_GCC_TEST_DEPENDS= gcc>=${_GCC_REQD} 779_GCC_TEST_DEPENDS= gcc>=${_GCC_REQD}
774_USE_PKGSRC_GCC!= \ 780_USE_PKGSRC_GCC!= \
775 if ${PKG_ADMIN} pmatch '${_GCC_TEST_DEPENDS}' ${_GCC_PKG} 2>/dev/null; then \ 781 if ${PKG_ADMIN} pmatch '${_GCC_TEST_DEPENDS}' ${_GCC_PKG} 2>/dev/null; then \
776 ${ECHO} "NO"; \ 782 ${ECHO} "NO"; \
777 else \ 783 else \
778 ${ECHO} "YES"; \ 784 ${ECHO} "YES"; \
779 fi 785 fi
780. endif 786. endif
781.endif 787.endif
782 788
783# Check if any of the versions of GCC in pkgsrc can satisfy the _GCC_REQD 789# Check if any of the versions of GCC in pkgsrc can satisfy the _GCC_REQD
784# requirement. 790# requirement.
785# 791#
786.if !defined(_NEED_NEWER_GCC) 792.if !defined(_NEED_NEWER_GCC)
787_PKGSRC_GCC_VERSION= ${_GCC_PKGBASE}-${_GCC_DIST_VERSION} 793_PKGSRC_GCC_VERSION= ${_GCC_PKGBASE}-${_GCC_DIST_VERSION}
788_NEED_NEWER_GCC!= \ 794_NEED_NEWER_GCC!= \
789 if ${PKG_ADMIN} pmatch '${_GCC_DEPENDS}' ${_PKGSRC_GCC_VERSION} 2>/dev/null; then \ 795 if ${PKG_ADMIN} pmatch '${_GCC_DEPENDS}' ${_PKGSRC_GCC_VERSION} 2>/dev/null; then \
790 ${ECHO} "NO"; \ 796 ${ECHO} "NO"; \
791 else \ 797 else \
792 ${ECHO} "YES"; \ 798 ${ECHO} "YES"; \
793 fi 799 fi
794#MAKEFLAGS+= _NEED_NEWER_GCC=${_NEED_NEWER_GCC} 800#MAKEFLAGS+= _NEED_NEWER_GCC=${_NEED_NEWER_GCC}
795.endif 801.endif
796.if !empty(_USE_PKGSRC_GCC:M[yY][eE][sS]) && \ 802.if !empty(_USE_PKGSRC_GCC:M[yY][eE][sS]) && \
797 !empty(_NEED_NEWER_GCC:M[yY][eE][sS]) 803 !empty(_NEED_NEWER_GCC:M[yY][eE][sS])
798PKG_FAIL_REASON+= "Unable to satisfy dependency: ${_GCC_DEPENDS}" 804PKG_FAIL_REASON+= "Unable to satisfy dependency: ${_GCC_DEPENDS}"
799.endif 805.endif
800 806
801.if !empty(_USE_PKGSRC_GCC:M[yY][eE][sS]) 807.if !empty(_USE_PKGSRC_GCC:M[yY][eE][sS])
802# 808#
803# Ensure that the correct rpath is passed to the linker if we need to 809# Ensure that the correct rpath is passed to the linker if we need to
804# link against gcc shared libs. 810# link against gcc shared libs.
805# 811#
806# XXX cross-compilation -- is this TOOLBASE or LOCALBASE? 812# XXX cross-compilation -- is this TOOLBASE or LOCALBASE?
807# 813#
808_GCC_SUBPREFIX!= \ 814_GCC_SUBPREFIX!= \
809 if ${PKG_INFO} -qe ${_GCC_PKGBASE}; then \ 815 if ${PKG_INFO} -qe ${_GCC_PKGBASE}; then \
810 ${PKG_INFO} -f ${_GCC_PKGBASE} | \ 816 ${PKG_INFO} -f ${_GCC_PKGBASE} | \
811 ${GREP} "File:.*bin/gcc" | \ 817 ${GREP} "File:.*bin/gcc" | \
812 ${GREP} -v "/gcc[0-9][0-9]*-.*" | \ 818 ${GREP} -v "/gcc[0-9][0-9]*-.*" | \
813 ${SED} -e "s/.*File: *//;s/bin\/gcc.*//;q"; \ 819 ${SED} -e "s/.*File: *//;s/bin\/gcc.*//;q"; \
814 else \ 820 else \
815 case ${_CC} in \ 821 case ${_CC} in \
816 ${LOCALBASE}/*) \ 822 ${LOCALBASE}/*) \
817 subprefix="${_CC:H:S/\/bin$//:S/${LOCALBASE}\///:S/${LOCALBASE}//}"; \ 823 subprefix="${_CC:H:S/\/bin$//:S/${LOCALBASE}\///:S/${LOCALBASE}//}"; \
818 case "$${subprefix}" in \ 824 case "$${subprefix}" in \
819 "") ${ECHO} "$${subprefix}" ;; \ 825 "") ${ECHO} "$${subprefix}" ;; \
820 *) ${ECHO} "$${subprefix}/" ;; \ 826 *) ${ECHO} "$${subprefix}/" ;; \
821 esac; \ 827 esac; \
822 ;; \ 828 ;; \
823 *) \ 829 *) \
824 ${ECHO} "_GCC_SUBPREFIX_not_found/"; \ 830 ${ECHO} "_GCC_SUBPREFIX_not_found/"; \
825 ;; \ 831 ;; \
826 esac; \ 832 esac; \
827 fi 833 fi
828_GCC_PREFIX= ${LOCALBASE}/${_GCC_SUBPREFIX} 834_GCC_PREFIX= ${LOCALBASE}/${_GCC_SUBPREFIX}
829_GCC_ARCHDIR!= \ 835_GCC_ARCHDIR!= \
830 if [ -x ${_GCC_PREFIX}bin/gcc ]; then \ 836 if [ -x ${_GCC_PREFIX}bin/gcc ]; then \
831 ${DIRNAME} `${_GCC_PREFIX}bin/gcc -print-libgcc-file-name 2>/dev/null`; \ 837 ${DIRNAME} `${_GCC_PREFIX}bin/gcc -print-libgcc-file-name 2>/dev/null`; \
832 else \ 838 else \
833 ${ECHO} "_GCC_ARCHDIR_not_found"; \ 839 ${ECHO} "_GCC_ARCHDIR_not_found"; \
834 fi 840 fi
835_GCC_LIBDIRS= ${_GCC_ARCHDIR} 841_GCC_LIBDIRS= ${_GCC_ARCHDIR}
836. if empty(USE_PKGSRC_GCC_RUNTIME:M[Yy][Ee][Ss]) 842. if empty(USE_PKGSRC_GCC_RUNTIME:M[Yy][Ee][Ss])
837_GCC_LIBDIRS+= ${_GCC_PREFIX}lib${LIBABISUFFIX} 843_GCC_LIBDIRS+= ${_GCC_PREFIX}lib${LIBABISUFFIX}
838. endif 844. endif
839_GCC_LDFLAGS= # empty 845_GCC_LDFLAGS= # empty
840. for _dir_ in ${_GCC_LIBDIRS:N*not_found*} 846. for _dir_ in ${_GCC_LIBDIRS:N*not_found*}
841_GCC_LDFLAGS+= -L${_dir_} ${COMPILER_RPATH_FLAG}${_dir_} 847_GCC_LDFLAGS+= -L${_dir_} ${COMPILER_RPATH_FLAG}${_dir_}
842. endfor 848. endfor
843.endif 849.endif
844 850
845LDFLAGS+= ${_GCC_LDFLAGS} 851LDFLAGS+= ${_GCC_LDFLAGS}
846 852
847# Point the variables that specify the compiler to the installed 853# Point the variables that specify the compiler to the installed
848# GCC executables. 854# GCC executables.
849# 855#
850_GCC_DIR= ${WRKDIR}/.gcc 856_GCC_DIR= ${WRKDIR}/.gcc
851_GCC_VARS= # empty 857_GCC_VARS= # empty
852 858
853.if !empty(_USE_PKGSRC_GCC:M[yY][eE][sS]) 859.if !empty(_USE_PKGSRC_GCC:M[yY][eE][sS])
854_GCCBINDIR= ${_GCC_PREFIX}bin 860_GCCBINDIR= ${_GCC_PREFIX}bin
855.elif !empty(_IS_BUILTIN_GCC:M[yY][eE][sS]) 861.elif !empty(_IS_BUILTIN_GCC:M[yY][eE][sS])
856_GCCBINDIR= ${_CC:H} 862_GCCBINDIR= ${_CC:H}
857.endif 863.endif
858.if !empty(TOOLS_USE_CROSS_COMPILE:M[yY][eE][sS]) 864.if !empty(TOOLS_USE_CROSS_COMPILE:M[yY][eE][sS])
859_GCC_BIN_PREFIX= ${MACHINE_GNU_PLATFORM}- 865_GCC_BIN_PREFIX= ${MACHINE_GNU_PLATFORM}-
860.endif 866.endif
861_GCC_BIN_PREFIX?= # empty 867_GCC_BIN_PREFIX?= # empty
862GCC_VERSION_SUFFIX?= # empty 868GCC_VERSION_SUFFIX?= # empty
863.if exists(${_GCCBINDIR}/${_GCC_BIN_PREFIX}gcc${GCC_VERSION_SUFFIX}) 869.if exists(${_GCCBINDIR}/${_GCC_BIN_PREFIX}gcc${GCC_VERSION_SUFFIX})
864_GCC_VARS+= CC 870_GCC_VARS+= CC
865_GCC_CC= ${_GCC_DIR}/bin/${_GCC_BIN_PREFIX}gcc${GCC_VERSION_SUFFIX} 871_GCC_CC= ${_GCC_DIR}/bin/${_GCC_BIN_PREFIX}gcc${GCC_VERSION_SUFFIX}
866_ALIASES.CC= cc gcc 872_ALIASES.CC= cc gcc
867CCPATH= ${_GCCBINDIR}/${_GCC_BIN_PREFIX}gcc${GCC_VERSION_SUFFIX} 873CCPATH= ${_GCCBINDIR}/${_GCC_BIN_PREFIX}gcc${GCC_VERSION_SUFFIX}
868PKG_CC:= ${_GCC_CC} 874PKG_CC:= ${_GCC_CC}
869.endif 875.endif
870.if exists(${_GCCBINDIR}/${_GCC_BIN_PREFIX}cpp${GCC_VERSION_SUFFIX}) 876.if exists(${_GCCBINDIR}/${_GCC_BIN_PREFIX}cpp${GCC_VERSION_SUFFIX})
871_GCC_VARS+= CPP 877_GCC_VARS+= CPP
872_GCC_CPP= ${_GCC_DIR}/bin/${_GCC_BIN_PREFIX}cpp${GCC_VERSION_SUFFIX} 878_GCC_CPP= ${_GCC_DIR}/bin/${_GCC_BIN_PREFIX}cpp${GCC_VERSION_SUFFIX}
873_ALIASES.CPP= cpp 879_ALIASES.CPP= cpp
874CPPPATH= ${_GCCBINDIR}/${_GCC_BIN_PREFIX}cpp${GCC_VERSION_SUFFIX} 880CPPPATH= ${_GCCBINDIR}/${_GCC_BIN_PREFIX}cpp${GCC_VERSION_SUFFIX}
875PKG_CPP:= ${_GCC_CPP} 881PKG_CPP:= ${_GCC_CPP}
876.endif 882.endif
877.if exists(${_GCCBINDIR}/${_GCC_BIN_PREFIX}g++${GCC_VERSION_SUFFIX}) 883.if exists(${_GCCBINDIR}/${_GCC_BIN_PREFIX}g++${GCC_VERSION_SUFFIX})
878_GCC_VARS+= CXX 884_GCC_VARS+= CXX
879_GCC_CXX= ${_GCC_DIR}/bin/${_GCC_BIN_PREFIX}g++${GCC_VERSION_SUFFIX} 885_GCC_CXX= ${_GCC_DIR}/bin/${_GCC_BIN_PREFIX}g++${GCC_VERSION_SUFFIX}
880_ALIASES.CXX= c++ g++ 886_ALIASES.CXX= c++ g++
881CXXPATH= ${_GCCBINDIR}/${_GCC_BIN_PREFIX}g++${GCC_VERSION_SUFFIX} 887CXXPATH= ${_GCCBINDIR}/${_GCC_BIN_PREFIX}g++${GCC_VERSION_SUFFIX}
882PKG_CXX:= ${_GCC_CXX} 888PKG_CXX:= ${_GCC_CXX}
883.endif 889.endif
884.if exists(${_GCCBINDIR}/${_GCC_BIN_PREFIX}g77${GCC_VERSION_SUFFIX}) 890.if exists(${_GCCBINDIR}/${_GCC_BIN_PREFIX}g77${GCC_VERSION_SUFFIX})
885_GCC_VARS+= FC 891_GCC_VARS+= FC
886_GCC_FC= ${_GCC_DIR}/bin/${_GCC_BIN_PREFIX}g77${GCC_VERSION_SUFFIX} 892_GCC_FC= ${_GCC_DIR}/bin/${_GCC_BIN_PREFIX}g77${GCC_VERSION_SUFFIX}
887_ALIASES.FC= f77 g77 893_ALIASES.FC= f77 g77
888FC= g77 894FC= g77
889FCPATH= ${_GCCBINDIR}/${_GCC_BIN_PREFIX}g77${GCC_VERSION_SUFFIX} 895FCPATH= ${_GCCBINDIR}/${_GCC_BIN_PREFIX}g77${GCC_VERSION_SUFFIX}
890F77PATH= ${_GCCBINDIR}/${_GCC_BIN_PREFIX}g77${GCC_VERSION_SUFFIX} 896F77PATH= ${_GCCBINDIR}/${_GCC_BIN_PREFIX}g77${GCC_VERSION_SUFFIX}
891PKG_FC:= ${_GCC_FC} 897PKG_FC:= ${_GCC_FC}
892PKGSRC_FORTRAN?= g77 898PKGSRC_FORTRAN?= g77
893.endif 899.endif
894.if exists(${_GCCBINDIR}/${_GCC_BIN_PREFIX}gfortran${GCC_VERSION_SUFFIX}) 900.if exists(${_GCCBINDIR}/${_GCC_BIN_PREFIX}gfortran${GCC_VERSION_SUFFIX})
895_GCC_VARS+= FC 901_GCC_VARS+= FC
896_GCC_FC= ${_GCC_DIR}/bin/${_GCC_BIN_PREFIX}gfortran${GCC_VERSION_SUFFIX} 902_GCC_FC= ${_GCC_DIR}/bin/${_GCC_BIN_PREFIX}gfortran${GCC_VERSION_SUFFIX}
897_ALIASES.FC= gfortran 903_ALIASES.FC= gfortran
898FC= gfortran 904FC= gfortran
899FCPATH= ${_GCCBINDIR}/${_GCC_BIN_PREFIX}gfortran${GCC_VERSION_SUFFIX} 905FCPATH= ${_GCCBINDIR}/${_GCC_BIN_PREFIX}gfortran${GCC_VERSION_SUFFIX}
900F77PATH= ${_GCCBINDIR}/${_GCC_BIN_PREFIX}gfortran${GCC_VERSION_SUFFIX} 906F77PATH= ${_GCCBINDIR}/${_GCC_BIN_PREFIX}gfortran${GCC_VERSION_SUFFIX}
901PKG_FC:= ${_GCC_FC} 907PKG_FC:= ${_GCC_FC}
902PKGSRC_FORTRAN?= gfortran 908PKGSRC_FORTRAN?= gfortran
903.endif 909.endif
904.if exists(${_GCCBINDIR}/${_GCC_BIN_PREFIX}ada) 910.if exists(${_GCCBINDIR}/${_GCC_BIN_PREFIX}ada)
905_GCC_VARS+= ADA GMK GLK GBD CHP PRP GLS GNT 911_GCC_VARS+= ADA GMK GLK GBD CHP PRP GLS GNT
906_GCC_ADA= ${_GCC_DIR}/bin/${_GCC_BIN_PREFIX}ada 912_GCC_ADA= ${_GCC_DIR}/bin/${_GCC_BIN_PREFIX}ada
907_GCC_GMK= ${_GCC_DIR}/bin/${_GCC_BIN_PREFIX}gnatmake 913_GCC_GMK= ${_GCC_DIR}/bin/${_GCC_BIN_PREFIX}gnatmake
908_GCC_GLK= ${_GCC_DIR}/bin/${_GCC_BIN_PREFIX}gnatlink 914_GCC_GLK= ${_GCC_DIR}/bin/${_GCC_BIN_PREFIX}gnatlink
909_GCC_GBD= ${_GCC_DIR}/bin/${_GCC_BIN_PREFIX}gnatbind 915_GCC_GBD= ${_GCC_DIR}/bin/${_GCC_BIN_PREFIX}gnatbind
910_GCC_CHP= ${_GCC_DIR}/bin/${_GCC_BIN_PREFIX}gnatchop 916_GCC_CHP= ${_GCC_DIR}/bin/${_GCC_BIN_PREFIX}gnatchop
911_GCC_PRP= ${_GCC_DIR}/bin/${_GCC_BIN_PREFIX}gnatprep 917_GCC_PRP= ${_GCC_DIR}/bin/${_GCC_BIN_PREFIX}gnatprep
912_GCC_GLS= ${_GCC_DIR}/bin/${_GCC_BIN_PREFIX}gnatls 918_GCC_GLS= ${_GCC_DIR}/bin/${_GCC_BIN_PREFIX}gnatls
913_GCC_GNT= ${_GCC_DIR}/bin/${_GCC_BIN_PREFIX}gnat 919_GCC_GNT= ${_GCC_DIR}/bin/${_GCC_BIN_PREFIX}gnat
914_ALIASES.ADA= ada 920_ALIASES.ADA= ada
915_ALIASES.GMK= gnatmake 921_ALIASES.GMK= gnatmake
916_ALIASES.GLK= gnatlink 922_ALIASES.GLK= gnatlink
917_ALIASES.GBD= gnatbind 923_ALIASES.GBD= gnatbind
918_ALIASES.CHP= gnatchop 924_ALIASES.CHP= gnatchop
919_ALIASES.PRP= gnatprep 925_ALIASES.PRP= gnatprep
920_ALIASES.GLS= gnatls 926_ALIASES.GLS= gnatls
921_ALIASES.GNT= gnat 927_ALIASES.GNT= gnat
922ADAPATH= ${_GCCBINDIR}/${_GCC_BIN_PREFIX}ada 928ADAPATH= ${_GCCBINDIR}/${_GCC_BIN_PREFIX}ada
923GMKPATH= ${_GCCBINDIR}/${_GCC_BIN_PREFIX}gnatmake 929GMKPATH= ${_GCCBINDIR}/${_GCC_BIN_PREFIX}gnatmake
924GLKPATH= ${_GCCBINDIR}/${_GCC_BIN_PREFIX}gnatlink 930GLKPATH= ${_GCCBINDIR}/${_GCC_BIN_PREFIX}gnatlink
925GBDPATH= ${_GCCBINDIR}/${_GCC_BIN_PREFIX}gnatbind 931GBDPATH= ${_GCCBINDIR}/${_GCC_BIN_PREFIX}gnatbind
926CHPPATH= ${_GCCBINDIR}/${_GCC_BIN_PREFIX}gnatchop 932CHPPATH= ${_GCCBINDIR}/${_GCC_BIN_PREFIX}gnatchop
927PRPPATH= ${_GCCBINDIR}/${_GCC_BIN_PREFIX}gnatprep 933PRPPATH= ${_GCCBINDIR}/${_GCC_BIN_PREFIX}gnatprep
928GLSPATH= ${_GCCBINDIR}/${_GCC_BIN_PREFIX}gnatls 934GLSPATH= ${_GCCBINDIR}/${_GCC_BIN_PREFIX}gnatls
929GNTPATH= ${_GCCBINDIR}/${_GCC_BIN_PREFIX}gnat 935GNTPATH= ${_GCCBINDIR}/${_GCC_BIN_PREFIX}gnat
930PKG_ADA:= ${_GCC_ADA} 936PKG_ADA:= ${_GCC_ADA}
931PKG_GMK:= ${_GCC_GMK} 937PKG_GMK:= ${_GCC_GMK}
932PKG_GLK:= ${_GCC_GLK} 938PKG_GLK:= ${_GCC_GLK}
933PKG_GBD:= ${_GCC_GBD} 939PKG_GBD:= ${_GCC_GBD}
934PKG_CHP:= ${_GCC_CHP} 940PKG_CHP:= ${_GCC_CHP}
935PKG_PRP:= ${_GCC_PRP} 941PKG_PRP:= ${_GCC_PRP}
936PKG_GLS:= ${_GCC_GLS} 942PKG_GLS:= ${_GCC_GLS}
937PKG_GNT:= ${_GCC_GNT} 943PKG_GNT:= ${_GCC_GNT}
938PKGSRC_ADA?= ada 944PKGSRC_ADA?= ada
939PKGSRC_GMK?= gnatmake 945PKGSRC_GMK?= gnatmake
940PKGSRC_GLK?= gnatlink 946PKGSRC_GLK?= gnatlink
941PKGSRC_GBD?= gnatbind 947PKGSRC_GBD?= gnatbind
942PKGSRC_CHP?= gnatchop 948PKGSRC_CHP?= gnatchop
943PKGSRC_PRP?= gnatprep 949PKGSRC_PRP?= gnatprep
944PKGSRC_GLS?= gnatls 950PKGSRC_GLS?= gnatls
945PKGSRC_GNT?= gnat 951PKGSRC_GNT?= gnat
946.endif 952.endif
947_COMPILER_STRIP_VARS+= ${_GCC_VARS} 953_COMPILER_STRIP_VARS+= ${_GCC_VARS}
948 954
949# Pass the required flags to imake to tell it we're using gcc on Solaris. 955# Pass the required flags to imake to tell it we're using gcc on Solaris.
950.if ${OPSYS} == "SunOS" 956.if ${OPSYS} == "SunOS"
951IMAKEOPTS+= -DHasGcc2=YES -DHasGcc2ForCplusplus=YES 957IMAKEOPTS+= -DHasGcc2=YES -DHasGcc2ForCplusplus=YES
952.endif 958.endif
953 959
954.if ${OPSYS} == "AIX" 960.if ${OPSYS} == "AIX"
955# On AIX the GCC toolchain recognizes -maix32 and -maix64, 961# On AIX the GCC toolchain recognizes -maix32 and -maix64,
956# -m32 or -m64 are not recognized. 962# -m32 or -m64 are not recognized.
957_COMPILER_ABI_FLAG.32= -maix32 963_COMPILER_ABI_FLAG.32= -maix32
958_COMPILER_ABI_FLAG.64= -maix64 964_COMPILER_ABI_FLAG.64= -maix64
959# On HP-UX the GCC toolchain must be specifically targeted to an ABI, 965# On HP-UX the GCC toolchain must be specifically targeted to an ABI,
960# -m32 or -m64 are not recognized. 966# -m32 or -m64 are not recognized.
961.elif ${OPSYS} == "HPUX" 967.elif ${OPSYS} == "HPUX"
962_COMPILER_ABI_FLAG.32= # empty 968_COMPILER_ABI_FLAG.32= # empty
963_COMPILER_ABI_FLAG.64= # empty 969_COMPILER_ABI_FLAG.64= # empty
964.elif !empty(MACHINE_ARCH:Mmips*) 970.elif !empty(MACHINE_ARCH:Mmips*)
965_COMPILER_ABI_FLAG.32= -mabi=n32 # ABI == "32" == "n32" 971_COMPILER_ABI_FLAG.32= -mabi=n32 # ABI == "32" == "n32"
966_COMPILER_ABI_FLAG.n32= -mabi=n32 972_COMPILER_ABI_FLAG.n32= -mabi=n32
967_COMPILER_ABI_FLAG.o32= -mabi=32 973_COMPILER_ABI_FLAG.o32= -mabi=32
968_COMPILER_ABI_FLAG.64= -mabi=64 974_COMPILER_ABI_FLAG.64= -mabi=64
969.elif !empty(MACHINE_ARCH:Maarch64*) 975.elif !empty(MACHINE_ARCH:Maarch64*)
970_COMPILER_ABI_FLAG.32= -m32 976_COMPILER_ABI_FLAG.32= -m32
971_COMPILER_ABI_FLAG.64= # empty 977_COMPILER_ABI_FLAG.64= # empty
972.else 978.else
973_COMPILER_ABI_FLAG.32= -m32 979_COMPILER_ABI_FLAG.32= -m32
974_COMPILER_ABI_FLAG.64= -m64 980_COMPILER_ABI_FLAG.64= -m64
975.endif 981.endif
976 982
977.if !empty(_USE_PKGSRC_GCC:M[yY][eE][sS]) 983.if !empty(_USE_PKGSRC_GCC:M[yY][eE][sS])
978. if exists(${CCPATH}) 984. if exists(${CCPATH})
979CC_VERSION_STRING!= ${CCPATH} -v 2>&1 985CC_VERSION_STRING!= ${CCPATH} -v 2>&1
980CC_VERSION!= \ 986CC_VERSION!= \
981 if ${CCPATH} -dumpversion > /dev/null 2>&1; then \ 987 if ${CCPATH} -dumpversion > /dev/null 2>&1; then \
982 ${ECHO} "gcc-`${CCPATH} -dumpversion`"; \ 988 ${ECHO} "gcc-`${CCPATH} -dumpversion`"; \
983 else \ 989 else \
984 ${ECHO} "gcc-${_GCC_REQD}"; \ 990 ${ECHO} "gcc-${_GCC_REQD}"; \
985 fi 991 fi
986 992
987. else 993. else
988CC_VERSION_STRING= ${CC_VERSION} 994CC_VERSION_STRING= ${CC_VERSION}
989CC_VERSION= gcc-${_GCC_REQD} 995CC_VERSION= gcc-${_GCC_REQD}
990. endif 996. endif
991.else 997.else
992CC_VERSION_STRING= ${CC_VERSION} 998CC_VERSION_STRING= ${CC_VERSION}
993CC_VERSION= ${_GCC_PKG} 999CC_VERSION= ${_GCC_PKG}
994.endif 1000.endif
995 1001
996# Prepend the path to the compiler to the PATH. 1002# Prepend the path to the compiler to the PATH.
997.if !empty(_LANGUAGES.gcc) 1003.if !empty(_LANGUAGES.gcc)
998PREPEND_PATH+= ${_GCC_DIR}/bin 1004PREPEND_PATH+= ${_GCC_DIR}/bin
999.endif 1005.endif
1000 1006
1001# Add the dependency on GCC. 1007# Add the dependency on GCC.
1002.if !empty(_USE_PKGSRC_GCC:M[yY][eE][sS]) 1008.if !empty(_USE_PKGSRC_GCC:M[yY][eE][sS])
1003. for _dir_ in ${_GCC_PKGSRCDIR} 1009. for _dir_ in ${_GCC_PKGSRCDIR}
1004. include "${_dir_}/buildlink3.mk" 1010. include "${_dir_}/buildlink3.mk"
1005. endfor 1011. endfor
1006.endif 1012.endif
1007 1013
1008# Add dependency on GCC libraries if requested. 1014# Add dependency on GCC libraries if requested.
1009.if (defined(_USE_GCC_SHLIB) && !empty(_USE_GCC_SHLIB:M[Yy][Ee][Ss])) && !empty(USE_PKGSRC_GCC_RUNTIME:M[Yy][Ee][Ss]) 1015.if (defined(_USE_GCC_SHLIB) && !empty(_USE_GCC_SHLIB:M[Yy][Ee][Ss])) && !empty(USE_PKGSRC_GCC_RUNTIME:M[Yy][Ee][Ss])
1010# Special case packages which are themselves a dependency of gcc runtime. 1016# Special case packages which are themselves a dependency of gcc runtime.
1011. if ${PKGPATH} != devel/libtool-base && ${PKGPATH} != devel/binutils && \ 1017. if ${PKGPATH} != devel/libtool-base && ${PKGPATH} != devel/binutils && \
1012 empty(PKGPATH:Mlang/gcc4?) && empty(PKGPATH:Mlang/gcc[5-9]) && \ 1018 empty(PKGPATH:Mlang/gcc4?) && empty(PKGPATH:Mlang/gcc[5-9]) && \
1013 empty(PKGPATH:Mlang/gcc10) && empty(PKGPATH:Mlang/gcc12) && \ 1019 empty(PKGPATH:Mlang/gcc10) && empty(PKGPATH:Mlang/gcc12) && \
1014 empty(PKGPATH:Mlang/gcc13) 1020 empty(PKGPATH:Mlang/gcc13)
1015. if !empty(_GCC_PKGBASE:Mgcc6) 1021. if !empty(_GCC_PKGBASE:Mgcc6)
1016. include "../../lang/gcc6-libs/buildlink3.mk" 1022. include "../../lang/gcc6-libs/buildlink3.mk"
1017. elif !empty(_GCC_PKGBASE:Mgcc7) 1023. elif !empty(_GCC_PKGBASE:Mgcc7)
1018. include "../../lang/gcc7-libs/buildlink3.mk" 1024. include "../../lang/gcc7-libs/buildlink3.mk"
1019. elif !empty(_GCC_PKGBASE:Mgcc8) 1025. elif !empty(_GCC_PKGBASE:Mgcc8)
1020. include "../../lang/gcc8-libs/buildlink3.mk" 1026. include "../../lang/gcc8-libs/buildlink3.mk"
1021. elif !empty(_GCC_PKGBASE:Mgcc9) 1027. elif !empty(_GCC_PKGBASE:Mgcc9)
1022. include "../../lang/gcc9-libs/buildlink3.mk" 1028. include "../../lang/gcc9-libs/buildlink3.mk"
1023. elif !empty(_GCC_PKGBASE:Mgcc10) 1029. elif !empty(_GCC_PKGBASE:Mgcc10)
1024. include "../../lang/gcc10-libs/buildlink3.mk" 1030. include "../../lang/gcc10-libs/buildlink3.mk"
1025. elif !empty(_GCC_PKGBASE:Mgcc12) 1031. elif !empty(_GCC_PKGBASE:Mgcc12)
1026. include "../../lang/gcc12-libs/buildlink3.mk" 1032. include "../../lang/gcc12-libs/buildlink3.mk"
1027. elif !empty(_GCC_PKGBASE:Mgcc13) 1033. elif !empty(_GCC_PKGBASE:Mgcc13)
1028. include "../../lang/gcc13-libs/buildlink3.mk" 1034. include "../../lang/gcc13-libs/buildlink3.mk"
1029. else 1035. else
1030PKG_FAIL_REASON+= "No USE_PKGSRC_GCC_RUNTIME support for ${CC_VERSION}" 1036PKG_FAIL_REASON+= "No USE_PKGSRC_GCC_RUNTIME support for ${CC_VERSION}"
1031. endif 1037. endif
1032. endif 1038. endif
1033.endif 1039.endif
1034 1040
1035.for _var_ in ${_GCC_VARS} 1041.for _var_ in ${_GCC_VARS}
1036. if !target(${_GCC_${_var_}}) 1042. if !target(${_GCC_${_var_}})
1037override-tools: ${_GCC_${_var_}} 1043override-tools: ${_GCC_${_var_}}
1038${_GCC_${_var_}}: 1044${_GCC_${_var_}}:
1039 ${RUN}${MKDIR} ${.TARGET:H} 1045 ${RUN}${MKDIR} ${.TARGET:H}
1040. if !empty(COMPILER_USE_SYMLINKS:M[Yy][Ee][Ss]) 1046. if !empty(COMPILER_USE_SYMLINKS:M[Yy][Ee][Ss])
1041 ${RUN}${RM} -f ${.TARGET} 1047 ${RUN}${RM} -f ${.TARGET}
1042 ${RUN}${LN} -s ${_GCCBINDIR}/${.TARGET:T} ${.TARGET} 1048 ${RUN}${LN} -s ${_GCCBINDIR}/${.TARGET:T} ${.TARGET}
1043. else 1049. else
1044 ${RUN} \ 1050 ${RUN} \
1045 (${ECHO} '#!${TOOLS_SHELL}'; \ 1051 (${ECHO} '#!${TOOLS_SHELL}'; \
1046 ${ECHO} 'exec ${_GCCBINDIR}/${.TARGET:T} "$$@"'; \ 1052 ${ECHO} 'exec ${_GCCBINDIR}/${.TARGET:T} "$$@"'; \
1047 ) > ${.TARGET} 1053 ) > ${.TARGET}
1048 ${RUN}${CHMOD} +x ${.TARGET} 1054 ${RUN}${CHMOD} +x ${.TARGET}
1049. endif 1055. endif
1050. for _alias_ in ${_ALIASES.${_var_}:S/^/${.TARGET:H}\//} 1056. for _alias_ in ${_ALIASES.${_var_}:S/^/${.TARGET:H}\//}
1051 ${RUN} \ 1057 ${RUN} \
1052 if [ ! -x "${_alias_}" ]; then \ 1058 if [ ! -x "${_alias_}" ]; then \
1053 ${LN} -f -s ${.TARGET:T} ${_alias_}; \ 1059 ${LN} -f -s ${.TARGET:T} ${_alias_}; \
1054 fi 1060 fi
1055. endfor 1061. endfor
1056. endif 1062. endif
1057.endfor 1063.endfor
1058 1064
1059# On systems without a Fortran compiler, pull one in if needed. 1065# On systems without a Fortran compiler, pull one in if needed.
1060PKGSRC_FORTRAN?=gfortran 1066PKGSRC_FORTRAN?=gfortran
1061 1067
1062_GCC_NEEDS_A_FORTRAN= no 1068_GCC_NEEDS_A_FORTRAN= no
1063.if empty(_USE_PKGSRC_GCC:M[yY][eE][sS]) && !(defined(FCPATH) && exists(${FCPATH})) 1069.if empty(_USE_PKGSRC_GCC:M[yY][eE][sS]) && !(defined(FCPATH) && exists(${FCPATH}))
1064_GCC_NEEDS_A_FORTRAN= yes 1070_GCC_NEEDS_A_FORTRAN= yes
1065.else 1071.else
1066. for _pattern_ in 0.* 1.[0-4] 1.[0-4].* 1072. for _pattern_ in 0.* 1.[0-4] 1.[0-4].*
1067. if !empty(MACHINE_PLATFORM:MNetBSD-${_pattern_}-*) 1073. if !empty(MACHINE_PLATFORM:MNetBSD-${_pattern_}-*)
1068_GCC_NEEDS_A_FORTRAN= yes 1074_GCC_NEEDS_A_FORTRAN= yes
1069. endif 1075. endif
1070. endfor 1076. endfor
1071.endif 1077.endif
1072.if !empty(_GCC_NEEDS_A_FORTRAN:M[yY][eE][sS]) 1078.if !empty(_GCC_NEEDS_A_FORTRAN:M[yY][eE][sS])
1073. include "../../mk/compiler/${PKGSRC_FORTRAN}.mk" 1079. include "../../mk/compiler/${PKGSRC_FORTRAN}.mk"
1074.endif 1080.endif
1075 1081
1076.if ${OPSYS} == "Interix" && !empty(_GCCBINDIR:M/opt/gcc.*) 1082.if ${OPSYS} == "Interix" && !empty(_GCCBINDIR:M/opt/gcc.*)
1077COMPILER_INCLUDE_DIRS= ${_GCCBINDIR:H}/include ${_OPSYS_INCLUDE_DIRS} 1083COMPILER_INCLUDE_DIRS= ${_GCCBINDIR:H}/include ${_OPSYS_INCLUDE_DIRS}
1078COMPILER_LIB_DIRS= ${_GCCBINDIR:H}/lib ${_OPSYS_LIB_DIRS} 1084COMPILER_LIB_DIRS= ${_GCCBINDIR:H}/lib ${_OPSYS_LIB_DIRS}
1079.endif 1085.endif
1080 1086
1081#.READONLY: GCC_REQD 1087#.READONLY: GCC_REQD
1082_GCC_REQD_EFFECTIVE:= ${GCC_REQD} 1088_GCC_REQD_EFFECTIVE:= ${GCC_REQD}
1083 1089
1084.endif # COMPILER_GCC_MK 1090.endif # COMPILER_GCC_MK