Sun Jan 17 15:32:00 2021 UTC ()
If the base GCC isn't enough, and GCC_REQD=4.5 to 6, use gcc6.

gcc4.8,4.9,5 have bugs preventing them from being useful within pkgsrc
for the primary use case that finds them handy:
glibc + FORTIFY + those GCC versions = build failures.

Additionally, requiring fewer versions of GCC is an improvement for
the vast majority of use-cases considered.

We might want to bump this further than gcc6 later on, but this is a
big improvement for CentOS builds.


(maya)
diff -r1.217 -r1.218 pkgsrc/mk/compiler/gcc.mk

cvs diff -r1.217 -r1.218 pkgsrc/mk/compiler/gcc.mk (switch to unified diff)

--- pkgsrc/mk/compiler/gcc.mk 2020/12/05 09:24:00 1.217
+++ pkgsrc/mk/compiler/gcc.mk 2021/01/17 15:32:00 1.218
@@ -1,1150 +1,1123 @@ @@ -1,1150 +1,1123 @@
1# $NetBSD: gcc.mk,v 1.217 2020/12/05 09:24:00 wiz Exp $ 1# $NetBSD: gcc.mk,v 1.218 2021/01/17 15:32:00 maya 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 USE_CROSS_COMPILE \ 65 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 _IGNORE_GCC3CXX _IGNORE_GCC3F77 _IGNORE_GCC3OBJC \ 93 _IGNORE_GCC _IGNORE_GCC3CXX _IGNORE_GCC3F77 _IGNORE_GCC3OBJC \
94 _IS_BUILTIN_GCC \ 94 _IS_BUILTIN_GCC \
95 _LANGUAGES.gcc \ 95 _LANGUAGES.gcc \
96 _LINKER_RPATH_FLAG \ 96 _LINKER_RPATH_FLAG \
97 _NEED_GCC2 _NEED_GCC3 _NEED_GCC34 _NEED_GCC44 \ 97 _NEED_GCC2 _NEED_GCC3 _NEED_GCC34 _NEED_GCC44 \
98 _NEED_GCC48 _NEED_GCC49 _NEED_GCC5 _NEED_GCC6 \ 98 _NEED_GCC6 \ _NEED_GCC7 _NEED_GCC8 _NEED_GCC9 \
99 _NEED_GCC7 _NEED_GCC8 _NEED_GCC9 _NEED_GCC10 \ 99 _NEED_GCC10 \
100 _NEED_GCC_AUX _NEED_NEWER_GCC \ 100 _NEED_GCC_AUX _NEED_NEWER_GCC \
101 _PKGSRC_GCC_VERSION \ 101 _PKGSRC_GCC_VERSION \
102 _USE_GCC_SHLIB _USE_PKGSRC_GCC \ 102 _USE_GCC_SHLIB _USE_PKGSRC_GCC \
103 _WRAP_EXTRA_ARGS.CC \ 103 _WRAP_EXTRA_ARGS.CC \
104 _EXTRA_CC_DIRS \ 104 _EXTRA_CC_DIRS \
105 _CXX_STD_VERSIONS \ 105 _CXX_STD_VERSIONS \
106 ${_CXX_STD_VERSIONS:@std@_CXX_STD_FLAG.${std}@} \ 106 ${_CXX_STD_VERSIONS:@std@_CXX_STD_FLAG.${std}@} \
107 _MKPIE_CFLAGS.gcc _MKPIE_LDFLAGS.gcc \ 107 _MKPIE_CFLAGS.gcc _MKPIE_LDFLAGS.gcc \
108 _FORTIFY_CFLAGS _RELRO_LDFLAGS _STACK_CHECK_CFLAGS \ 108 _FORTIFY_CFLAGS _RELRO_LDFLAGS _STACK_CHECK_CFLAGS \
109 _CTF_CFLAGS \ 109 _CTF_CFLAGS \
110 _GCC_DIR \ 110 _GCC_DIR \
111 _ALIASES.CC _ALIASES.CPP _ALIASES.CXX _ALIASES.FC \ 111 _ALIASES.CC _ALIASES.CPP _ALIASES.CXX _ALIASES.FC \
112 _ALIASES.ADA _ALIASES.GMK _ALIASES.GLK _ALIASES.GBD \ 112 _ALIASES.ADA _ALIASES.GMK _ALIASES.GLK _ALIASES.GBD \
113 _ALIASES.CHP _ALIASES.PRP _ALIASES.GLS _ALIASES.GNT \ 113 _ALIASES.CHP _ALIASES.PRP _ALIASES.GLS _ALIASES.GNT \
114 _COMPILER_ABI_FLAG.32 _COMPILER_ABI_FLAG.64 \ 114 _COMPILER_ABI_FLAG.32 _COMPILER_ABI_FLAG.64 \
115 _COMPILER_ABI_FLAG.n32 _COMPILER_ABI_FLAG.o32 \ 115 _COMPILER_ABI_FLAG.n32 _COMPILER_ABI_FLAG.o32 \
116 _SSP_CFLAGS \ 116 _SSP_CFLAGS \
117 _CXX_STD_FLAG.c++03 _CXX_STD_FLAG.gnu++03 117 _CXX_STD_FLAG.c++03 _CXX_STD_FLAG.gnu++03
118_USE_VARS.gcc= \ 118_USE_VARS.gcc= \
119 MACHINE_ARCH PATH DRAGONFLY_CCVER OPSYS LOCALBASE \ 119 MACHINE_ARCH PATH DRAGONFLY_CCVER OPSYS LOCALBASE \
120 USE_LIBTOOL \ 120 USE_LIBTOOL \
121 LIBABISUFFIX \ 121 LIBABISUFFIX \
122 COMPILER_RPATH_FLAG \ 122 COMPILER_RPATH_FLAG \
123 MACHINE_GNU_PLATFORM \ 123 MACHINE_GNU_PLATFORM \
124 WRKDIR MACHINE_PLATFORM PKGPATH \ 124 WRKDIR MACHINE_PLATFORM PKGPATH \
125 _PKGSRC_MKPIE _PKGSRC_MKREPRO _MKREPRO_CFLAGS.gcc \ 125 _PKGSRC_MKPIE _PKGSRC_MKREPRO _MKREPRO_CFLAGS.gcc \
126 _PKGSRC_USE_FORTIFY _PKGSRC_USE_RELRO _PKGSRC_USE_STACK_CHECK \ 126 _PKGSRC_USE_FORTIFY _PKGSRC_USE_RELRO _PKGSRC_USE_STACK_CHECK \
127 _OPSYS_INCLUDE_DIRS _OPSYS_LIB_DIRS 127 _OPSYS_INCLUDE_DIRS _OPSYS_LIB_DIRS
128_IGN_VARS.gcc= \ 128_IGN_VARS.gcc= \
129 _GCC2_PATTERNS _GCC3_PATTERNS _GCC34_PATTERNS _GCC44_PATTERNS \ 129 _GCC2_PATTERNS _GCC3_PATTERNS _GCC34_PATTERNS _GCC44_PATTERNS \
130 _GCC48_PATTERNS _GCC49_PATTERNS _GCC5_PATTERNS _GCC6_PATTERNS \ 130 _GCC48_PATTERNS _GCC49_PATTERNS _GCC5_PATTERNS _GCC6_PATTERNS \
131 _GCC7_PATTERNS _GCC8_PATTERNS _GCC9_PATTERNS _GCC10_PATTERNS \ 131 _GCC7_PATTERNS _GCC8_PATTERNS _GCC9_PATTERNS _GCC10_PATTERNS \
132 _GCC_AUX_PATTERNS 132 _GCC_AUX_PATTERNS
133_LISTED_VARS.gcc= \ 133_LISTED_VARS.gcc= \
134 MAKEFLAGS IMAKEOPTS LDFLAGS PREPEND_PATH 134 MAKEFLAGS IMAKEOPTS LDFLAGS PREPEND_PATH
135.include "../../mk/bsd.prefs.mk" 135.include "../../mk/bsd.prefs.mk"
136 136
137USE_NATIVE_GCC?= no 137USE_NATIVE_GCC?= no
138USE_PKGSRC_GCC?= no 138USE_PKGSRC_GCC?= no
139USE_PKGSRC_GCC_RUNTIME?=no 139USE_PKGSRC_GCC_RUNTIME?=no
140 140
141GCC_REQD+= 2.8.0 141GCC_REQD+= 2.8.0
142 142
143# gcc2 doesn't support c99 and amd64 143# gcc2 doesn't support c99 and amd64
144.if !empty(USE_LANGUAGES:Mc99) || ${MACHINE_ARCH} == "x86_64" 144.if !empty(USE_LANGUAGES:Mc99) || ${MACHINE_ARCH} == "x86_64"
145GCC_REQD+= 3.0 145GCC_REQD+= 3.0
146.endif 146.endif
147 147
148# Only one compiler defined here supports Ada: lang/gcc5-aux 148# Only one compiler defined here supports Ada: lang/gcc5-aux
149# If the Ada language is requested, force lang/gcc5-aux to be selected 149# If the Ada language is requested, force lang/gcc5-aux to be selected
150.if !empty(USE_LANGUAGES:Mada) 150.if !empty(USE_LANGUAGES:Mada)
151GCC_REQD+= 20120614 151GCC_REQD+= 20120614
152.endif 152.endif
153 153
154# _GCC_DIST_VERSION is the highest version of GCC installed by the pkgsrc 154# _GCC_DIST_VERSION is the highest version of GCC installed by the pkgsrc
155# without the PKGREVISIONs. 155# without the PKGREVISIONs.
156_GCC_DIST_NAME:= gcc10 156_GCC_DIST_NAME:= gcc10
157.include "../../lang/${_GCC_DIST_NAME}/version.mk" 157.include "../../lang/${_GCC_DIST_NAME}/version.mk"
158_GCC_DIST_VERSION:= ${${_GCC_DIST_NAME:tu}_DIST_VERSION} 158_GCC_DIST_VERSION:= ${${_GCC_DIST_NAME:tu}_DIST_VERSION}
159 159
160# _GCC2_PATTERNS matches N s.t. N <= 2.95.3. 160# _GCC2_PATTERNS matches N s.t. N <= 2.95.3.
161_GCC2_PATTERNS= [0-1].* 2.[0-9] 2.[0-9].* 2.[1-8][0-9] 2.[1-8][0-9].* \ 161_GCC2_PATTERNS= [0-1].* 2.[0-9] 2.[0-9].* 2.[1-8][0-9] 2.[1-8][0-9].* \
162 2.9[0-4] 2.9[0-4].* 2.95 2.95.[0-3] 162 2.9[0-4] 2.9[0-4].* 2.95 2.95.[0-3]
163 163
164# _GCC3_PATTERNS matches N s.t. 2.95.3 < N < 3.4. 164# _GCC3_PATTERNS matches N s.t. 2.95.3 < N < 3.4.
165_GCC3_PATTERNS= 2.95.[4-9]* 2.95.[1-9][0-9]* 2.9[6-9] 2.9[6-9].* \ 165_GCC3_PATTERNS= 2.95.[4-9]* 2.95.[1-9][0-9]* 2.9[6-9] 2.9[6-9].* \
166 2.[1-9][0-9][0-9]* 3.[0-3] 3.[0-3].* 166 2.[1-9][0-9][0-9]* 3.[0-3] 3.[0-3].*
167 167
168# _GCC34_PATTERNS matches N s.t. 3.4 <= N < 4. 168# _GCC34_PATTERNS matches N s.t. 3.4 <= N < 4.
169_GCC34_PATTERNS= 3.[4-9] 3.[4-9].* 3.[1-9][0-9]* 169_GCC34_PATTERNS= 3.[4-9] 3.[4-9].* 3.[1-9][0-9]*
170 170
171# _GCC44_PATTERNS matches N s.t. 4.0 <= N < 4.5. 171# _GCC44_PATTERNS matches N s.t. 4.0 <= N < 4.5.
172_GCC44_PATTERNS= 4.[0-4] 4.[0-4].* 172_GCC44_PATTERNS= 4.[0-4] 4.[0-4].*
173 173
174# _GCC48_PATTERNS matches N s.t. 4.5 <= N < 4.9. 174# _GCC6_PATTERNS matches N s.t. 4.5 <= N < 7.
175_GCC48_PATTERNS= 4.[5-8] 4.[5-8].* 175_GCC6_PATTERNS= 4.[5-9] 4.[5-9]* 5 5.* 6 6.*
176 
177# _GCC49_PATTERNS matches N s.t. 4.9 <= N < 4.10. 
178_GCC49_PATTERNS= 4.9 4.9.* 
179 
180# _GCC5_PATTERNS matches N s.t. 5.0 <= N < 6. 
181_GCC5_PATTERNS= 5 5.* 
182 
183# _GCC6_PATTERNS matches N s.t. 6.0 <= N < 7. 
184_GCC6_PATTERNS= 6 6.* 
185 176
186# _GCC7_PATTERNS matches N s.t. 7.0 <= N < 8. 177# _GCC7_PATTERNS matches N s.t. 7.0 <= N < 8.
187_GCC7_PATTERNS= 7 7.* 178_GCC7_PATTERNS= 7 7.*
188 179
189# _GCC8_PATTERNS matches N s.t. 8.0 <= N < 9. 180# _GCC8_PATTERNS matches N s.t. 8.0 <= N < 9.
190_GCC8_PATTERNS= 8 8.* 181_GCC8_PATTERNS= 8 8.*
191 182
192# _GCC9_PATTERNS matches N s.t. 9.0 <= N < 10. 183# _GCC9_PATTERNS matches N s.t. 9.0 <= N < 10.
193_GCC9_PATTERNS= 9 9.* 184_GCC9_PATTERNS= 9 9.*
194 185
195# _GCC10_PATTERNS matches N s.t. 10.0 <= N < 11. 186# _GCC10_PATTERNS matches N s.t. 10.0 <= N < 11.
196_GCC10_PATTERNS= 10 10.* 187_GCC10_PATTERNS= 10 10.*
197 188
198# _GCC_AUX_PATTERNS matches 8-digit date YYYYMMDD* 189# _GCC_AUX_PATTERNS matches 8-digit date YYYYMMDD*
199_GCC_AUX_PATTERNS= 20[1-2][0-9][0-1][0-9][0-3][0-9]* 190_GCC_AUX_PATTERNS= 20[1-2][0-9][0-1][0-9][0-3][0-9]*
200 191
201# Override the default from sys.mk if necessary. 192# Override the default from sys.mk if necessary.
202.if ${CC} == cc && ${GCCBASE:U} && !exists(${GCCBASE}/bin/${CC}) && exists(${GCCBASE}/bin/gcc) 193.if ${CC} == cc && ${GCCBASE:U} && !exists(${GCCBASE}/bin/${CC}) && exists(${GCCBASE}/bin/gcc)
203CC= gcc 194CC= gcc
204.endif 195.endif
205 196
206# _CC is the full path to the compiler named by ${CC} if it can be found. 197# _CC is the full path to the compiler named by ${CC} if it can be found.
207.if !defined(_CC) 198.if !defined(_CC)
208_CC:= ${CC:[1]} 199_CC:= ${CC:[1]}
209. if !empty(GCCBASE) && exists(${GCCBASE}/bin) 200. if !empty(GCCBASE) && exists(${GCCBASE}/bin)
210_EXTRA_CC_DIRS= ${GCCBASE}/bin 201_EXTRA_CC_DIRS= ${GCCBASE}/bin
211. endif 202. endif
212. for _dir_ in ${_EXTRA_CC_DIRS} ${PATH:C/\:/ /g} 203. for _dir_ in ${_EXTRA_CC_DIRS} ${PATH:C/\:/ /g}
213. if empty(_CC:M/*) 204. if empty(_CC:M/*)
214. if exists(${_dir_}/${CC:[1]}) 205. if exists(${_dir_}/${CC:[1]})
215_CC:= ${_dir_}/${CC:[1]} 206_CC:= ${_dir_}/${CC:[1]}
216. endif 207. endif
217. endif 208. endif
218. endfor 209. endfor
219. if empty(USE_CROSS_COMPILE:M[yY][eE][sS]) 210. if empty(USE_CROSS_COMPILE:M[yY][eE][sS])
220# Pass along _CC only if we're working on native packages -- don't pass 211# Pass along _CC only if we're working on native packages -- don't pass
221# the cross-compiler on to submakes for building native packages. 212# the cross-compiler on to submakes for building native packages.
222MAKEFLAGS+= _CC=${_CC:Q} 213MAKEFLAGS+= _CC=${_CC:Q}
223. endif 214. endif
224.endif 215.endif
225 216
226.if !defined(_GCC_VERSION) 217.if !defined(_GCC_VERSION)
227# 218#
228# FIXME: Ideally we'd use PKGSRC_SETENV here, but not enough of the tools 219# FIXME: Ideally we'd use PKGSRC_SETENV here, but not enough of the tools
229# infrastructure is loaded for SETENV to be defined when mk/compiler.mk is 220# infrastructure is loaded for SETENV to be defined when mk/compiler.mk is
230# included first. LC_ALL is required here for similar reasons, as ALL_ENV 221# included first. LC_ALL is required here for similar reasons, as ALL_ENV
231# is not defined at this stage. 222# is not defined at this stage.
232# 223#
233_GCC_VERSION_STRING!= \ 224_GCC_VERSION_STRING!= \
234 ( env LC_ALL=C ${_CC} -v 2>&1 | ${GREP} 'gcc version') 2>/dev/null || ${ECHO} 0 225 ( env LC_ALL=C ${_CC} -v 2>&1 | ${GREP} 'gcc version') 2>/dev/null || ${ECHO} 0
235. if !empty(_GCC_VERSION_STRING:Megcs*) 226. if !empty(_GCC_VERSION_STRING:Megcs*)
236_GCC_VERSION= 2.8.1 # egcs is considered to be gcc-2.8.1. 227_GCC_VERSION= 2.8.1 # egcs is considered to be gcc-2.8.1.
237. elif !empty(DRAGONFLY_CCVER) && ${OPSYS} == "DragonFly" 228. elif !empty(DRAGONFLY_CCVER) && ${OPSYS} == "DragonFly"
238_GCC_VERSION!= env CCVER=${DRAGONFLY_CCVER} ${_CC} -dumpversion 229_GCC_VERSION!= env CCVER=${DRAGONFLY_CCVER} ${_CC} -dumpversion
239. elif !empty(_GCC_VERSION_STRING:Mgcc*) 230. elif !empty(_GCC_VERSION_STRING:Mgcc*)
240_GCC_VERSION!= ${_CC} -dumpversion 231_GCC_VERSION!= ${_CC} -dumpversion
241. else 232. else
242_GCC_VERSION= 0 233_GCC_VERSION= 0
243. endif 234. endif
244.endif 235.endif
245_GCC_PKG= gcc-${_GCC_VERSION:C/-.*$//} 236_GCC_PKG= gcc-${_GCC_VERSION:C/-.*$//}
246 237
247.for _version_ in ${_CXX_STD_VERSIONS} 238.for _version_ in ${_CXX_STD_VERSIONS}
248_CXX_STD_FLAG.${_version_}?= -std=${_version_} 239_CXX_STD_FLAG.${_version_}?= -std=${_version_}
249. if !empty(_GCC_VERSION:M[34].[1234].*) 240. if !empty(_GCC_VERSION:M[34].[1234].*)
250_CXX_STD_FLAG.c++03= -std=c++0x 241_CXX_STD_FLAG.c++03= -std=c++0x
251_CXX_STD_FLAG.gnu++03= -std=gnu++0x 242_CXX_STD_FLAG.gnu++03= -std=gnu++0x
252. endif 243. endif
253.endfor 244.endfor
254 245
255.if !empty(_CC:M${LOCALBASE}/*) 246.if !empty(_CC:M${LOCALBASE}/*)
256_IS_BUILTIN_GCC= NO 247_IS_BUILTIN_GCC= NO
257GCC_REQD+= ${_GCC_VERSION} 248GCC_REQD+= ${_GCC_VERSION}
258.else 249.else
259. if !empty(_CC:M/*) 250. if !empty(_CC:M/*)
260# 251#
261# GCC in older versions of Darwin report "Apple Computer ... based on gcc 252# GCC in older versions of Darwin report "Apple Computer ... based on gcc
262# version ...", so we can't just grep for "^gcc". 253# version ...", so we can't just grep for "^gcc".
263# 254#
264. if ${_GCC_VERSION} != "0" 255. if ${_GCC_VERSION} != "0"
265_IS_BUILTIN_GCC= YES 256_IS_BUILTIN_GCC= YES
266. else 257. else
267_IS_BUILTIN_GCC= NO 258_IS_BUILTIN_GCC= NO
268. endif 259. endif
269. else 260. else
270_IS_BUILTIN_GCC= NO 261_IS_BUILTIN_GCC= NO
271. endif 262. endif
272.endif 263.endif
273 264
274# Distill the GCC_REQD list into a single _GCC_REQD value that is the 265# Distill the GCC_REQD list into a single _GCC_REQD value that is the
275# highest version of GCC required. 266# highest version of GCC required.
276# 267#
277_GCC_STRICTEST_REQD?= none 268_GCC_STRICTEST_REQD?= none
278.for _version_ in ${GCC_REQD} 269.for _version_ in ${GCC_REQD}
279. for _pkg_ in gcc-${_version_} 270. for _pkg_ in gcc-${_version_}
280. if ${_GCC_STRICTEST_REQD} == "none" 271. if ${_GCC_STRICTEST_REQD} == "none"
281_GCC_PKG_SATISFIES_DEP= YES 272_GCC_PKG_SATISFIES_DEP= YES
282. for _vers_ in ${GCC_REQD} 273. for _vers_ in ${GCC_REQD}
283. if !empty(_GCC_PKG_SATISFIES_DEP:M[yY][eE][sS]) 274. if !empty(_GCC_PKG_SATISFIES_DEP:M[yY][eE][sS])
284_GCC_PKG_SATISFIES_DEP!= \ 275_GCC_PKG_SATISFIES_DEP!= \
285 if ${PKG_ADMIN} pmatch 'gcc>=${_vers_}' ${_pkg_} 2>/dev/null; then \ 276 if ${PKG_ADMIN} pmatch 'gcc>=${_vers_}' ${_pkg_} 2>/dev/null; then \
286 ${ECHO} "YES"; \ 277 ${ECHO} "YES"; \
287 else \ 278 else \
288 ${ECHO} "NO"; \ 279 ${ECHO} "NO"; \
289 fi 280 fi
290. endif 281. endif
291. endfor 282. endfor
292. if !empty(_GCC_PKG_SATISFIES_DEP:M[yY][eE][sS]) 283. if !empty(_GCC_PKG_SATISFIES_DEP:M[yY][eE][sS])
293_GCC_STRICTEST_REQD= ${_version_} 284_GCC_STRICTEST_REQD= ${_version_}
294. endif 285. endif
295. endif 286. endif
296. endfor 287. endfor
297.endfor 288.endfor
298_GCC_REQD= ${_GCC_STRICTEST_REQD} 289_GCC_REQD= ${_GCC_STRICTEST_REQD}
299 290
300# Determine whether we require GCC-2.x or GCC-3.x by examining _GCC_REQD. 291# Determine whether we require GCC-2.x or GCC-3.x by examining _GCC_REQD.
301_NEED_GCC2?= no 292_NEED_GCC2?= no
302.for _pattern_ in ${_GCC2_PATTERNS} 293.for _pattern_ in ${_GCC2_PATTERNS}
303. if !empty(_GCC_REQD:M${_pattern_}) 294. if !empty(_GCC_REQD:M${_pattern_})
304_NEED_GCC2= yes 295_NEED_GCC2= yes
305. endif 296. endif
306.endfor 297.endfor
307_NEED_GCC3?= no 298_NEED_GCC3?= no
308.for _pattern_ in ${_GCC3_PATTERNS} 299.for _pattern_ in ${_GCC3_PATTERNS}
309. if !empty(_GCC_REQD:M${_pattern_}) 300. if !empty(_GCC_REQD:M${_pattern_})
310_NEED_GCC3= yes 301_NEED_GCC3= yes
311. endif 302. endif
312.endfor 303.endfor
313_NEED_GCC34?= no 304_NEED_GCC34?= no
314.for _pattern_ in ${_GCC34_PATTERNS} 305.for _pattern_ in ${_GCC34_PATTERNS}
315. if !empty(_GCC_REQD:M${_pattern_}) 306. if !empty(_GCC_REQD:M${_pattern_})
316_NEED_GCC34= yes 307_NEED_GCC34= yes
317. endif 308. endif
318.endfor 309.endfor
319_NEED_GCC44?= no 310_NEED_GCC44?= no
320.for _pattern_ in ${_GCC44_PATTERNS} 311.for _pattern_ in ${_GCC44_PATTERNS}
321. if !empty(_GCC_REQD:M${_pattern_}) 312. if !empty(_GCC_REQD:M${_pattern_})
322_NEED_GCC44= yes 313_NEED_GCC44= yes
323. endif 314. endif
324.endfor 315.endfor
325_NEED_GCC48?= no 
326.for _pattern_ in ${_GCC48_PATTERNS} 
327. if !empty(_GCC_REQD:M${_pattern_}) 
328_NEED_GCC48= yes 
329. endif 
330.endfor 
331_NEED_GCC49?= no 
332.for _pattern_ in ${_GCC49_PATTERNS} 
333. if !empty(_GCC_REQD:M${_pattern_}) 
334_NEED_GCC49= yes 
335. endif 
336.endfor 
337_NEED_GCC5?= no 
338.for _pattern_ in ${_GCC5_PATTERNS} 
339. if !empty(_GCC_REQD:M${_pattern_}) 
340_NEED_GCC5= yes 
341. endif 
342.endfor 
343_NEED_GCC6?= no 316_NEED_GCC6?= no
344.for _pattern_ in ${_GCC6_PATTERNS} 317.for _pattern_ in ${_GCC6_PATTERNS}
345. if !empty(_GCC_REQD:M${_pattern_}) 318. if !empty(_GCC_REQD:M${_pattern_})
346_NEED_GCC6= yes 319_NEED_GCC6= yes
347. endif 320. endif
348.endfor 321.endfor
349_NEED_GCC7?= no 322_NEED_GCC7?= no
350.for _pattern_ in ${_GCC7_PATTERNS} 323.for _pattern_ in ${_GCC7_PATTERNS}
351. if !empty(_GCC_REQD:M${_pattern_}) 324. if !empty(_GCC_REQD:M${_pattern_})
352_NEED_GCC7= yes 325_NEED_GCC7= yes
353. endif 326. endif
354.endfor 327.endfor
355_NEED_GCC8?= no 328_NEED_GCC8?= no
356.for _pattern_ in ${_GCC8_PATTERNS} 329.for _pattern_ in ${_GCC8_PATTERNS}
357. if !empty(_GCC_REQD:M${_pattern_}) 330. if !empty(_GCC_REQD:M${_pattern_})
358_NEED_GCC8= yes 331_NEED_GCC8= yes
359. endif 332. endif
360.endfor 333.endfor
361_NEED_GCC9?= no 334_NEED_GCC9?= no
362.for _pattern_ in ${_GCC9_PATTERNS} 335.for _pattern_ in ${_GCC9_PATTERNS}
363. if !empty(_GCC_REQD:M${_pattern_}) 336. if !empty(_GCC_REQD:M${_pattern_})
364_NEED_GCC9= yes 337_NEED_GCC9= yes
365. endif 338. endif
366.endfor 339.endfor
367_NEED_GCC10?= no 340_NEED_GCC10?= no
368.for _pattern_ in ${_GCC10_PATTERNS} 341.for _pattern_ in ${_GCC10_PATTERNS}
369. if !empty(_GCC_REQD:M${_pattern_}) 342. if !empty(_GCC_REQD:M${_pattern_})
370_NEED_GCC10= yes 343_NEED_GCC10= yes
371. endif 344. endif
372.endfor 345.endfor
373_NEED_GCC_AUX?= no 346_NEED_GCC_AUX?= no
374.for _pattern_ in ${_GCC_AUX_PATTERNS} 347.for _pattern_ in ${_GCC_AUX_PATTERNS}
375. if !empty(_GCC_REQD:M${_pattern_}) 348. if !empty(_GCC_REQD:M${_pattern_})
376_NEED_GCC_AUX= yes 349_NEED_GCC_AUX= yes
377_NEED_NEWER_GCC=NO 350_NEED_NEWER_GCC=NO
378. endif 351. endif
379.endfor 352.endfor
380.if !empty(_NEED_GCC2:M[nN][oO]) && !empty(_NEED_GCC3:M[nN][oO]) && \ 353.if !empty(_NEED_GCC2:M[nN][oO]) && !empty(_NEED_GCC3:M[nN][oO]) && \
381 !empty(_NEED_GCC34:M[nN][oO]) && !empty(_NEED_GCC44:M[nN][oO]) && \ 354 !empty(_NEED_GCC34:M[nN][oO]) && !empty(_NEED_GCC44:M[nN][oO]) && \
382 !empty(_NEED_GCC48:M[nN][oO]) && !empty(_NEED_GCC49:M[nN][oO]) && \ 355 !empty(_NEED_GCC48:M[nN][oO]) && !empty(_NEED_GCC49:M[nN][oO]) && \
383 !empty(_NEED_GCC5:M[nN][oO]) && !empty(_NEED_GCC6:M[nN][oO]) && \ 356 !empty(_NEED_GCC5:M[nN][oO]) && !empty(_NEED_GCC6:M[nN][oO]) && \
384 !empty(_NEED_GCC7:M[nN][oO]) && !empty(_NEED_GCC8:M[nN][oO]) && \ 357 !empty(_NEED_GCC7:M[nN][oO]) && !empty(_NEED_GCC8:M[nN][oO]) && \
385 !empty(_NEED_GCC9:M[nN][oO]) && !empty(_NEED_GCC10:M[nN][oO]) && \ 358 !empty(_NEED_GCC9:M[nN][oO]) && !empty(_NEED_GCC10:M[nN][oO]) && \
386 !empty(_NEED_GCC_AUX:M[nN][oO]) 359 !empty(_NEED_GCC_AUX:M[nN][oO])
387_NEED_GCC8= yes 360_NEED_GCC8= yes
388.endif 361.endif
389 362
390# Assume by default that GCC will only provide a C compiler. 363# Assume by default that GCC will only provide a C compiler.
391LANGUAGES.gcc?= c 364LANGUAGES.gcc?= c
392.if !empty(_NEED_GCC2:M[yY][eE][sS]) 365.if !empty(_NEED_GCC2:M[yY][eE][sS])
393LANGUAGES.gcc= c c++ fortran77 objc 366LANGUAGES.gcc= c c++ fortran77 objc
394.elif !empty(_NEED_GCC3:M[yY][eE][sS]) 367.elif !empty(_NEED_GCC3:M[yY][eE][sS])
395LANGUAGES.gcc= c c++ fortran77 java objc 368LANGUAGES.gcc= c c++ fortran77 java objc
396.elif !empty(_NEED_GCC34:M[yY][eE][sS]) 369.elif !empty(_NEED_GCC34:M[yY][eE][sS])
397LANGUAGES.gcc= c c++ fortran77 objc 370LANGUAGES.gcc= c c++ fortran77 objc
398.elif !empty(_NEED_GCC44:M[yY][eE][sS]) 371.elif !empty(_NEED_GCC44:M[yY][eE][sS])
399LANGUAGES.gcc= c c++ fortran fortran77 java objc 372LANGUAGES.gcc= c c++ fortran fortran77 java objc
400.elif !empty(_NEED_GCC48:M[yY][eE][sS]) 373.elif !empty(_NEED_GCC48:M[yY][eE][sS])
401LANGUAGES.gcc= c c++ fortran fortran77 go java objc obj-c++ 374LANGUAGES.gcc= c c++ fortran fortran77 go java objc obj-c++
402.elif !empty(_NEED_GCC49:M[yY][eE][sS]) 375.elif !empty(_NEED_GCC49:M[yY][eE][sS])
403LANGUAGES.gcc= c c++ fortran fortran77 go java objc obj-c++ 376LANGUAGES.gcc= c c++ fortran fortran77 go java objc obj-c++
404.elif !empty(_NEED_GCC5:M[yY][eE][sS]) 377.elif !empty(_NEED_GCC5:M[yY][eE][sS])
405LANGUAGES.gcc= c c++ fortran fortran77 go java objc obj-c++ 378LANGUAGES.gcc= c c++ fortran fortran77 go java objc obj-c++
406.elif !empty(_NEED_GCC6:M[yY][eE][sS]) 379.elif !empty(_NEED_GCC6:M[yY][eE][sS])
407LANGUAGES.gcc= c c++ fortran fortran77 go java objc obj-c++ 380LANGUAGES.gcc= c c++ fortran fortran77 go java objc obj-c++
408.elif !empty(_NEED_GCC7:M[yY][eE][sS]) 381.elif !empty(_NEED_GCC7:M[yY][eE][sS])
409LANGUAGES.gcc= c c++ fortran fortran77 go java objc obj-c++ 382LANGUAGES.gcc= c c++ fortran fortran77 go java objc obj-c++
410.elif !empty(_NEED_GCC8:M[yY][eE][sS]) 383.elif !empty(_NEED_GCC8:M[yY][eE][sS])
411LANGUAGES.gcc= c c++ fortran fortran77 go java objc obj-c++ 384LANGUAGES.gcc= c c++ fortran fortran77 go java objc obj-c++
412.elif !empty(_NEED_GCC9:M[yY][eE][sS]) 385.elif !empty(_NEED_GCC9:M[yY][eE][sS])
413LANGUAGES.gcc= c c++ fortran fortran77 go java objc obj-c++ 386LANGUAGES.gcc= c c++ fortran fortran77 go java objc obj-c++
414.elif !empty(_NEED_GCC10:M[yY][eE][sS]) 387.elif !empty(_NEED_GCC10:M[yY][eE][sS])
415LANGUAGES.gcc= c c++ fortran fortran77 go java objc obj-c++ 388LANGUAGES.gcc= c c++ fortran fortran77 go java objc obj-c++
416.elif !empty(_NEED_GCC_AUX:M[yY][eE][sS]) 389.elif !empty(_NEED_GCC_AUX:M[yY][eE][sS])
417LANGUAGES.gcc= c c++ fortran fortran77 objc ada 390LANGUAGES.gcc= c c++ fortran fortran77 objc ada
418.endif 391.endif
419_LANGUAGES.gcc= # empty 392_LANGUAGES.gcc= # empty
420.for _lang_ in ${USE_LANGUAGES} 393.for _lang_ in ${USE_LANGUAGES}
421_LANGUAGES.gcc+= ${LANGUAGES.gcc:M${_lang_}} 394_LANGUAGES.gcc+= ${LANGUAGES.gcc:M${_lang_}}
422.endfor 395.endfor
423 396
424_WRAP_EXTRA_ARGS.cc+= -fcommon 397_WRAP_EXTRA_ARGS.cc+= -fcommon
425CWRAPPERS_PREPEND.cc+= -fcommon 398CWRAPPERS_PREPEND.cc+= -fcommon
426 399
427.if !empty(USE_LANGUAGES:Mc99) 400.if !empty(USE_LANGUAGES:Mc99)
428_WRAP_EXTRA_ARGS.CC+= -std=gnu99 401_WRAP_EXTRA_ARGS.CC+= -std=gnu99
429CWRAPPERS_APPEND.cc+= -std=gnu99 402CWRAPPERS_APPEND.cc+= -std=gnu99
430.endif 403.endif
431 404
432.if ${OPSYS} == "NetBSD" 405.if ${OPSYS} == "NetBSD"
433_MKPIE_CFLAGS.gcc= -fPIC 406_MKPIE_CFLAGS.gcc= -fPIC
434# XXX for executables it should be: 407# XXX for executables it should be:
435#_MKPIE_CFLAGS.gcc= -fPIE 408#_MKPIE_CFLAGS.gcc= -fPIE
436# XXX for libraries a sink wrapper around gcc is required and used instead 409# XXX for libraries a sink wrapper around gcc is required and used instead
437_MKPIE_LDFLAGS.gcc= -pie 410_MKPIE_LDFLAGS.gcc= -pie
438.endif 411.endif
439 412
440.if ${_PKGSRC_MKPIE} == "yes" 413.if ${_PKGSRC_MKPIE} == "yes"
441_GCC_CFLAGS+= ${_MKPIE_CFLAGS.gcc} 414_GCC_CFLAGS+= ${_MKPIE_CFLAGS.gcc}
442#_GCC_LDFLAGS+= ${_MKPIE_LDFLAGS.gcc} 415#_GCC_LDFLAGS+= ${_MKPIE_LDFLAGS.gcc}
443CWRAPPERS_APPEND.cc+= ${_MKPIE_CFLAGS.gcc} 416CWRAPPERS_APPEND.cc+= ${_MKPIE_CFLAGS.gcc}
444CWRAPPERS_APPEND.cxx+= ${_MKPIE_CFLAGS.gcc} 417CWRAPPERS_APPEND.cxx+= ${_MKPIE_CFLAGS.gcc}
445# this differs for libraries and executables (handled in mk/cwrappers.mk) 418# this differs for libraries and executables (handled in mk/cwrappers.mk)
446# CWRAPPERS_APPEND.ld+= ${_MKPIE_LDFLAGS.gcc} 419# CWRAPPERS_APPEND.ld+= ${_MKPIE_LDFLAGS.gcc}
447.endif 420.endif
448 421
449.if ${_PKGSRC_MKREPRO} == "yes" 422.if ${_PKGSRC_MKREPRO} == "yes"
450.export WRKDIR 423.export WRKDIR
451# XXX the dollar sign should not be expanded by the shell 424# XXX the dollar sign should not be expanded by the shell
452_GCC_CFLAGS+= -fdebug-prefix-map=$$$$WRKDIR/= 425_GCC_CFLAGS+= -fdebug-prefix-map=$$$$WRKDIR/=
453.endif 426.endif
454 427
455.if ${_PKGSRC_MKREPRO} == "yes" 428.if ${_PKGSRC_MKREPRO} == "yes"
456_GCC_CFLAGS+= ${_MKREPRO_CFLAGS.gcc} 429_GCC_CFLAGS+= ${_MKREPRO_CFLAGS.gcc}
457CWRAPPERS_APPEND.cc+= ${_MKREPRO_CFLAGS.gcc} 430CWRAPPERS_APPEND.cc+= ${_MKREPRO_CFLAGS.gcc}
458.endif 431.endif
459 432
460# The user can choose the level of FORTIFY. 433# The user can choose the level of FORTIFY.
461.if ${PKGSRC_USE_FORTIFY} == "weak" 434.if ${PKGSRC_USE_FORTIFY} == "weak"
462_FORTIFY_CFLAGS= -D_FORTIFY_SOURCE=1 435_FORTIFY_CFLAGS= -D_FORTIFY_SOURCE=1
463.else 436.else
464_FORTIFY_CFLAGS= -D_FORTIFY_SOURCE=2 437_FORTIFY_CFLAGS= -D_FORTIFY_SOURCE=2
465.endif 438.endif
466 439
467.if ${_PKGSRC_USE_FORTIFY} == "yes" 440.if ${_PKGSRC_USE_FORTIFY} == "yes"
468_GCC_CFLAGS+= ${_FORTIFY_CFLAGS} 441_GCC_CFLAGS+= ${_FORTIFY_CFLAGS}
469CWRAPPERS_APPEND.cc+= ${_FORTIFY_CFLAGS} 442CWRAPPERS_APPEND.cc+= ${_FORTIFY_CFLAGS}
470.endif 443.endif
471 444
472# The user can choose the level of RELRO. 445# The user can choose the level of RELRO.
473.if ${PKGSRC_USE_RELRO} == "partial" 446.if ${PKGSRC_USE_RELRO} == "partial"
474_RELRO_LDFLAGS= -Wl,-z,relro 447_RELRO_LDFLAGS= -Wl,-z,relro
475.else 448.else
476_RELRO_LDFLAGS= -Wl,-z,relro -Wl,-z,now 449_RELRO_LDFLAGS= -Wl,-z,relro -Wl,-z,now
477.endif 450.endif
478 451
479_STACK_CHECK_CFLAGS= -fstack-check 452_STACK_CHECK_CFLAGS= -fstack-check
480 453
481.if ${_PKGSRC_USE_STACK_CHECK} == "yes" 454.if ${_PKGSRC_USE_STACK_CHECK} == "yes"
482_GCC_CFLAGS+= ${_STACK_CHECK_CFLAGS} 455_GCC_CFLAGS+= ${_STACK_CHECK_CFLAGS}
483.endif 456.endif
484 457
485_CTF_CFLAGS= -gdwarf-2 458_CTF_CFLAGS= -gdwarf-2
486 459
487# GCC has this annoying behaviour where it advocates in a multi-line 460# GCC has this annoying behaviour where it advocates in a multi-line
488# banner the use of "#include" over "#import" when including headers. 461# banner the use of "#include" over "#import" when including headers.
489# This generates a huge number of warnings when building practically all 462# This generates a huge number of warnings when building practically all
490# Objective-C code where it is convention to use "#import". Suppress 463# Objective-C code where it is convention to use "#import". Suppress
491# the warning if we're building Objective-C code using GCC. 464# the warning if we're building Objective-C code using GCC.
492# 465#
493.if !empty(_LANGUAGES.gcc:Mobjc) 466.if !empty(_LANGUAGES.gcc:Mobjc)
494CFLAGS+= -Wno-import 467CFLAGS+= -Wno-import
495.endif 468.endif
496 469
497CFLAGS+= ${_GCC_CFLAGS} 470CFLAGS+= ${_GCC_CFLAGS}
498 471
499.if !empty(_NEED_GCC2:M[yY][eE][sS]) 472.if !empty(_NEED_GCC2:M[yY][eE][sS])
500# 473#
501# We require gcc-2.x in the lang/gcc2 directory. 474# We require gcc-2.x in the lang/gcc2 directory.
502# 475#
503_GCC_PKGBASE= gcc2 476_GCC_PKGBASE= gcc2
504. if ${PKGPATH} == lang/gcc2 477. if ${PKGPATH} == lang/gcc2
505_IGNORE_GCC= yes 478_IGNORE_GCC= yes
506MAKEFLAGS+= _IGNORE_GCC=yes 479MAKEFLAGS+= _IGNORE_GCC=yes
507. endif 480. endif
508. if !defined(_IGNORE_GCC) && !empty(_LANGUAGES.gcc) 481. if !defined(_IGNORE_GCC) && !empty(_LANGUAGES.gcc)
509_GCC_PKGSRCDIR= ../../lang/gcc2 482_GCC_PKGSRCDIR= ../../lang/gcc2
510_GCC_DEPENDENCY= gcc2>=${_GCC_REQD}:../../lang/gcc2 483_GCC_DEPENDENCY= gcc2>=${_GCC_REQD}:../../lang/gcc2
511. if !empty(_LANGUAGES.gcc:Mc++) || \ 484. if !empty(_LANGUAGES.gcc:Mc++) || \
512 !empty(_LANGUAGES.gcc:Mfortran77) || \ 485 !empty(_LANGUAGES.gcc:Mfortran77) || \
513 !empty(_LANGUAGES.gcc:Mobjc) 486 !empty(_LANGUAGES.gcc:Mobjc)
514_USE_GCC_SHLIB?= yes 487_USE_GCC_SHLIB?= yes
515. endif 488. endif
516. endif 489. endif
517.elif !empty(_NEED_GCC3:M[yY][eE][sS]) 490.elif !empty(_NEED_GCC3:M[yY][eE][sS])
518# 491#
519# We require gcc-3.x in the lang/gcc3-* directories. 492# We require gcc-3.x in the lang/gcc3-* directories.
520# 493#
521_GCC_PKGBASE= gcc3-c 494_GCC_PKGBASE= gcc3-c
522. if ${PKGPATH} == lang/gcc3-c 495. if ${PKGPATH} == lang/gcc3-c
523_IGNORE_GCC= yes 496_IGNORE_GCC= yes
524MAKEFLAGS+= _IGNORE_GCC=yes 497MAKEFLAGS+= _IGNORE_GCC=yes
525. endif 498. endif
526. if !defined(_IGNORE_GCC) && !empty(_LANGUAGES.gcc:Mc) 499. if !defined(_IGNORE_GCC) && !empty(_LANGUAGES.gcc:Mc)
527_GCC_PKGSRCDIR= ../../lang/gcc3-c 500_GCC_PKGSRCDIR= ../../lang/gcc3-c
528_GCC_DEPENDENCY= gcc3-c>=${_GCC_REQD}:../../lang/gcc3-c 501_GCC_DEPENDENCY= gcc3-c>=${_GCC_REQD}:../../lang/gcc3-c
529. endif 502. endif
530.elif !empty(_NEED_GCC34:M[yY][eE][sS]) 503.elif !empty(_NEED_GCC34:M[yY][eE][sS])
531# 504#
532# We require gcc-3.4.x in the lang/gcc34 directory. 505# We require gcc-3.4.x in the lang/gcc34 directory.
533# 506#
534_GCC_PKGBASE= gcc34 507_GCC_PKGBASE= gcc34
535. if ${PKGPATH} == lang/gcc34 508. if ${PKGPATH} == lang/gcc34
536_IGNORE_GCC= yes 509_IGNORE_GCC= yes
537MAKEFLAGS+= _IGNORE_GCC=yes 510MAKEFLAGS+= _IGNORE_GCC=yes
538. endif 511. endif
539. if !defined(_IGNORE_GCC) && !empty(_LANGUAGES.gcc) 512. if !defined(_IGNORE_GCC) && !empty(_LANGUAGES.gcc)
540_GCC_PKGSRCDIR= ../../lang/gcc34 513_GCC_PKGSRCDIR= ../../lang/gcc34
541_GCC_DEPENDENCY= gcc34>=${_GCC_REQD}:../../lang/gcc34 514_GCC_DEPENDENCY= gcc34>=${_GCC_REQD}:../../lang/gcc34
542. if !empty(_LANGUAGES.gcc:Mc++) || \ 515. if !empty(_LANGUAGES.gcc:Mc++) || \
543 !empty(_LANGUAGES.gcc:Mfortran77) || \ 516 !empty(_LANGUAGES.gcc:Mfortran77) || \
544 !empty(_LANGUAGES.gcc:Mobjc) 517 !empty(_LANGUAGES.gcc:Mobjc)
545_USE_GCC_SHLIB?= yes 518_USE_GCC_SHLIB?= yes
546. endif 519. endif
547. endif 520. endif
548.elif !empty(_NEED_GCC44:M[yY][eE][sS]) 521.elif !empty(_NEED_GCC44:M[yY][eE][sS])
549# 522#
550# We require gcc-4.4.x in the lang/gcc44 directory. 523# We require gcc-4.4.x in the lang/gcc44 directory.
551# 524#
552_GCC_PKGBASE= gcc44 525_GCC_PKGBASE= gcc44
553. if ${PKGPATH} == lang/gcc44 526. if ${PKGPATH} == lang/gcc44
554_IGNORE_GCC= yes 527_IGNORE_GCC= yes
555MAKEFLAGS+= _IGNORE_GCC=yes 528MAKEFLAGS+= _IGNORE_GCC=yes
556. endif 529. endif
557. if !defined(_IGNORE_GCC) && !empty(_LANGUAGES.gcc) 530. if !defined(_IGNORE_GCC) && !empty(_LANGUAGES.gcc)
558_GCC_PKGSRCDIR= ../../lang/gcc44 531_GCC_PKGSRCDIR= ../../lang/gcc44
559_GCC_DEPENDENCY= gcc44>=${_GCC_REQD}:../../lang/gcc44 532_GCC_DEPENDENCY= gcc44>=${_GCC_REQD}:../../lang/gcc44
560. if !empty(_LANGUAGES.gcc:Mc++) || \ 533. if !empty(_LANGUAGES.gcc:Mc++) || \
561 !empty(_LANGUAGES.gcc:Mfortran) || \ 534 !empty(_LANGUAGES.gcc:Mfortran) || \
562 !empty(_LANGUAGES.gcc:Mfortran77) || \ 535 !empty(_LANGUAGES.gcc:Mfortran77) || \
563 !empty(_LANGUAGES.gcc:Mobjc) 536 !empty(_LANGUAGES.gcc:Mobjc)
564_USE_GCC_SHLIB?= yes 537_USE_GCC_SHLIB?= yes
565. endif 538. endif
566. endif 539. endif
567.elif !empty(_NEED_GCC48:M[yY][eE][sS]) 540.elif !empty(_NEED_GCC48:M[yY][eE][sS])
568# 541#
569# We require gcc-4.8.x in the lang/gcc48 directory. 542# We require gcc-4.8.x in the lang/gcc48 directory.
570# 543#
571_GCC_PKGBASE= gcc48 544_GCC_PKGBASE= gcc48
572. if ${PKGPATH} == lang/gcc48 545. if ${PKGPATH} == lang/gcc48
573_IGNORE_GCC= yes 546_IGNORE_GCC= yes
574MAKEFLAGS+= _IGNORE_GCC=yes 547MAKEFLAGS+= _IGNORE_GCC=yes
575. endif 548. endif
576. if !defined(_IGNORE_GCC) && !empty(_LANGUAGES.gcc) 549. if !defined(_IGNORE_GCC) && !empty(_LANGUAGES.gcc)
577_GCC_PKGSRCDIR= ../../lang/gcc48 550_GCC_PKGSRCDIR= ../../lang/gcc48
578_GCC_DEPENDENCY= gcc48>=${_GCC_REQD}:../../lang/gcc48 551_GCC_DEPENDENCY= gcc48>=${_GCC_REQD}:../../lang/gcc48
579. if !empty(_LANGUAGES.gcc:Mc++) || \ 552. if !empty(_LANGUAGES.gcc:Mc++) || \
580 !empty(_LANGUAGES.gcc:Mfortran) || \ 553 !empty(_LANGUAGES.gcc:Mfortran) || \
581 !empty(_LANGUAGES.gcc:Mfortran77) || \ 554 !empty(_LANGUAGES.gcc:Mfortran77) || \
582 !empty(_LANGUAGES.gcc:Mgo) || \ 555 !empty(_LANGUAGES.gcc:Mgo) || \
583 !empty(_LANGUAGES.gcc:Mobjc) || \ 556 !empty(_LANGUAGES.gcc:Mobjc) || \
584 !empty(_LANGUAGES.gcc:Mobj-c++) 557 !empty(_LANGUAGES.gcc:Mobj-c++)
585_USE_GCC_SHLIB?= yes 558_USE_GCC_SHLIB?= yes
586. endif 559. endif
587. endif 560. endif
588.elif !empty(_NEED_GCC49:M[yY][eE][sS]) 561.elif !empty(_NEED_GCC49:M[yY][eE][sS])
589# 562#
590# We require gcc-4.9.x in the lang/gcc49-* directory. 563# We require gcc-4.9.x in the lang/gcc49-* directory.
591# 564#
592_GCC_PKGBASE= gcc49 565_GCC_PKGBASE= gcc49
593. if ${PKGPATH} == lang/gcc49 566. if ${PKGPATH} == lang/gcc49
594_IGNORE_GCC= yes 567_IGNORE_GCC= yes
595MAKEFLAGS+= _IGNORE_GCC=yes 568MAKEFLAGS+= _IGNORE_GCC=yes
596. endif 569. endif
597. if !defined(_IGNORE_GCC) && !empty(_LANGUAGES.gcc) 570. if !defined(_IGNORE_GCC) && !empty(_LANGUAGES.gcc)
598_GCC_PKGSRCDIR= ../../lang/gcc49 571_GCC_PKGSRCDIR= ../../lang/gcc49
599_GCC_DEPENDENCY= gcc49>=${_GCC_REQD}:../../lang/gcc49 572_GCC_DEPENDENCY= gcc49>=${_GCC_REQD}:../../lang/gcc49
600. if !empty(_LANGUAGES.gcc:Mc++) || \ 573. if !empty(_LANGUAGES.gcc:Mc++) || \
601 !empty(_LANGUAGES.gcc:Mfortran) || \ 574 !empty(_LANGUAGES.gcc:Mfortran) || \
602 !empty(_LANGUAGES.gcc:Mfortran77) || \ 575 !empty(_LANGUAGES.gcc:Mfortran77) || \
603 !empty(_LANGUAGES.gcc:Mgo) || \ 576 !empty(_LANGUAGES.gcc:Mgo) || \
604 !empty(_LANGUAGES.gcc:Mobjc) || \ 577 !empty(_LANGUAGES.gcc:Mobjc) || \
605 !empty(_LANGUAGES.gcc:Mobj-c++) 578 !empty(_LANGUAGES.gcc:Mobj-c++)
606_USE_GCC_SHLIB?= yes 579_USE_GCC_SHLIB?= yes
607. endif 580. endif
608. endif 581. endif
609.elif !empty(_NEED_GCC5:M[yY][eE][sS]) 582.elif !empty(_NEED_GCC5:M[yY][eE][sS])
610# 583#
611# We require gcc-5.x in the lang/gcc5-* directory. 584# We require gcc-5.x in the lang/gcc5-* directory.
612# 585#
613_GCC_PKGBASE= gcc5 586_GCC_PKGBASE= gcc5
614. if ${PKGPATH} == lang/gcc5 587. if ${PKGPATH} == lang/gcc5
615_IGNORE_GCC= yes 588_IGNORE_GCC= yes
616MAKEFLAGS+= _IGNORE_GCC=yes 589MAKEFLAGS+= _IGNORE_GCC=yes
617. endif 590. endif
618. if !defined(_IGNORE_GCC) && !empty(_LANGUAGES.gcc) 591. if !defined(_IGNORE_GCC) && !empty(_LANGUAGES.gcc)
619_GCC_PKGSRCDIR= ../../lang/gcc5 592_GCC_PKGSRCDIR= ../../lang/gcc5
620_GCC_DEPENDENCY= gcc5>=${_GCC_REQD}:../../lang/gcc5 593_GCC_DEPENDENCY= gcc5>=${_GCC_REQD}:../../lang/gcc5
621. if !empty(_LANGUAGES.gcc:Mc++) || \ 594. if !empty(_LANGUAGES.gcc:Mc++) || \
622 !empty(_LANGUAGES.gcc:Mfortran) || \ 595 !empty(_LANGUAGES.gcc:Mfortran) || \
623 !empty(_LANGUAGES.gcc:Mfortran77) || \ 596 !empty(_LANGUAGES.gcc:Mfortran77) || \
624 !empty(_LANGUAGES.gcc:Mgo) || \ 597 !empty(_LANGUAGES.gcc:Mgo) || \
625 !empty(_LANGUAGES.gcc:Mobjc) || \ 598 !empty(_LANGUAGES.gcc:Mobjc) || \
626 !empty(_LANGUAGES.gcc:Mobj-c++) 599 !empty(_LANGUAGES.gcc:Mobj-c++)
627_USE_GCC_SHLIB?= yes 600_USE_GCC_SHLIB?= yes
628. endif 601. endif
629. endif 602. endif
630.elif !empty(_NEED_GCC6:M[yY][eE][sS]) 603.elif !empty(_NEED_GCC6:M[yY][eE][sS])
631# 604#
632# We require gcc-6.x in the lang/gcc6-* directory. 605# We require gcc-6.x in the lang/gcc6-* directory.
633# 606#
634_GCC_PKGBASE= gcc6 607_GCC_PKGBASE= gcc6
635. if ${PKGPATH} == lang/gcc6 608. if ${PKGPATH} == lang/gcc6
636_IGNORE_GCC= yes 609_IGNORE_GCC= yes
637MAKEFLAGS+= _IGNORE_GCC=yes 610MAKEFLAGS+= _IGNORE_GCC=yes
638. endif 611. endif
639. if !defined(_IGNORE_GCC) && !empty(_LANGUAGES.gcc) 612. if !defined(_IGNORE_GCC) && !empty(_LANGUAGES.gcc)
640_GCC_PKGSRCDIR= ../../lang/gcc6 613_GCC_PKGSRCDIR= ../../lang/gcc6
641_GCC_DEPENDENCY= gcc6>=${_GCC_REQD}:../../lang/gcc6 614_GCC_DEPENDENCY= gcc6>=${_GCC_REQD}:../../lang/gcc6
642. if !empty(_LANGUAGES.gcc:Mc++) || \ 615. if !empty(_LANGUAGES.gcc:Mc++) || \
643 !empty(_LANGUAGES.gcc:Mfortran) || \ 616 !empty(_LANGUAGES.gcc:Mfortran) || \
644 !empty(_LANGUAGES.gcc:Mfortran77) || \ 617 !empty(_LANGUAGES.gcc:Mfortran77) || \
645 !empty(_LANGUAGES.gcc:Mgo) || \ 618 !empty(_LANGUAGES.gcc:Mgo) || \
646 !empty(_LANGUAGES.gcc:Mobjc) || \ 619 !empty(_LANGUAGES.gcc:Mobjc) || \
647 !empty(_LANGUAGES.gcc:Mobj-c++) 620 !empty(_LANGUAGES.gcc:Mobj-c++)
648_USE_GCC_SHLIB?= yes 621_USE_GCC_SHLIB?= yes
649. endif 622. endif
650. endif 623. endif
651.elif !empty(_NEED_GCC7:M[yY][eE][sS]) 624.elif !empty(_NEED_GCC7:M[yY][eE][sS])
652# 625#
653# We require gcc-7.x in the lang/gcc7-* directory. 626# We require gcc-7.x in the lang/gcc7-* directory.
654# 627#
655_GCC_PKGBASE= gcc7 628_GCC_PKGBASE= gcc7
656. if ${PKGPATH} == lang/gcc7 629. if ${PKGPATH} == lang/gcc7
657_IGNORE_GCC= yes 630_IGNORE_GCC= yes
658MAKEFLAGS+= _IGNORE_GCC=yes 631MAKEFLAGS+= _IGNORE_GCC=yes
659. endif 632. endif
660. if !defined(_IGNORE_GCC) && !empty(_LANGUAGES.gcc) 633. if !defined(_IGNORE_GCC) && !empty(_LANGUAGES.gcc)
661_GCC_PKGSRCDIR= ../../lang/gcc7 634_GCC_PKGSRCDIR= ../../lang/gcc7
662_GCC_DEPENDENCY= gcc7>=${_GCC_REQD}:../../lang/gcc7 635_GCC_DEPENDENCY= gcc7>=${_GCC_REQD}:../../lang/gcc7
663. if !empty(_LANGUAGES.gcc:Mc++) || \ 636. if !empty(_LANGUAGES.gcc:Mc++) || \
664 !empty(_LANGUAGES.gcc:Mfortran) || \ 637 !empty(_LANGUAGES.gcc:Mfortran) || \
665 !empty(_LANGUAGES.gcc:Mfortran77) || \ 638 !empty(_LANGUAGES.gcc:Mfortran77) || \
666 !empty(_LANGUAGES.gcc:Mgo) || \ 639 !empty(_LANGUAGES.gcc:Mgo) || \
667 !empty(_LANGUAGES.gcc:Mobjc) || \ 640 !empty(_LANGUAGES.gcc:Mobjc) || \
668 !empty(_LANGUAGES.gcc:Mobj-c++) 641 !empty(_LANGUAGES.gcc:Mobj-c++)
669_USE_GCC_SHLIB?= yes 642_USE_GCC_SHLIB?= yes
670. endif 643. endif
671. endif 644. endif
672.elif !empty(_NEED_GCC8:M[yY][eE][sS]) 645.elif !empty(_NEED_GCC8:M[yY][eE][sS])
673# 646#
674# We require gcc-8.x in the lang/gcc8-* directory. 647# We require gcc-8.x in the lang/gcc8-* directory.
675# 648#
676_GCC_PKGBASE= gcc8 649_GCC_PKGBASE= gcc8
677. if ${PKGPATH} == lang/gcc8 650. if ${PKGPATH} == lang/gcc8
678_IGNORE_GCC= yes 651_IGNORE_GCC= yes
679MAKEFLAGS+= _IGNORE_GCC=yes 652MAKEFLAGS+= _IGNORE_GCC=yes
680. endif 653. endif
681. if !defined(_IGNORE_GCC) && !empty(_LANGUAGES.gcc) 654. if !defined(_IGNORE_GCC) && !empty(_LANGUAGES.gcc)
682_GCC_PKGSRCDIR= ../../lang/gcc8 655_GCC_PKGSRCDIR= ../../lang/gcc8
683_GCC_DEPENDENCY= gcc8>=${_GCC_REQD}:../../lang/gcc8 656_GCC_DEPENDENCY= gcc8>=${_GCC_REQD}:../../lang/gcc8
684. if !empty(_LANGUAGES.gcc:Mc++) || \ 657. if !empty(_LANGUAGES.gcc:Mc++) || \
685 !empty(_LANGUAGES.gcc:Mfortran) || \ 658 !empty(_LANGUAGES.gcc:Mfortran) || \
686 !empty(_LANGUAGES.gcc:Mfortran77) || \ 659 !empty(_LANGUAGES.gcc:Mfortran77) || \
687 !empty(_LANGUAGES.gcc:Mgo) || \ 660 !empty(_LANGUAGES.gcc:Mgo) || \
688 !empty(_LANGUAGES.gcc:Mobjc) || \ 661 !empty(_LANGUAGES.gcc:Mobjc) || \
689 !empty(_LANGUAGES.gcc:Mobj-c++) 662 !empty(_LANGUAGES.gcc:Mobj-c++)
690_USE_GCC_SHLIB?= yes 663_USE_GCC_SHLIB?= yes
691. endif 664. endif
692. endif 665. endif
693.elif !empty(_NEED_GCC9:M[yY][eE][sS]) 666.elif !empty(_NEED_GCC9:M[yY][eE][sS])
694# 667#
695# We require gcc-9.x in the lang/gcc9-* directory. 668# We require gcc-9.x in the lang/gcc9-* directory.
696# 669#
697_GCC_PKGBASE= gcc9 670_GCC_PKGBASE= gcc9
698. if ${PKGPATH} == lang/gcc9 671. if ${PKGPATH} == lang/gcc9
699_IGNORE_GCC= yes 672_IGNORE_GCC= yes
700MAKEFLAGS+= _IGNORE_GCC=yes 673MAKEFLAGS+= _IGNORE_GCC=yes
701. endif 674. endif
702. if !defined(_IGNORE_GCC) && !empty(_LANGUAGES.gcc) 675. if !defined(_IGNORE_GCC) && !empty(_LANGUAGES.gcc)
703_GCC_PKGSRCDIR= ../../lang/gcc9 676_GCC_PKGSRCDIR= ../../lang/gcc9
704_GCC_DEPENDENCY= gcc9>=${_GCC_REQD}:../../lang/gcc9 677_GCC_DEPENDENCY= gcc9>=${_GCC_REQD}:../../lang/gcc9
705. if !empty(_LANGUAGES.gcc:Mc++) || \ 678. if !empty(_LANGUAGES.gcc:Mc++) || \
706 !empty(_LANGUAGES.gcc:Mfortran) || \ 679 !empty(_LANGUAGES.gcc:Mfortran) || \
707 !empty(_LANGUAGES.gcc:Mfortran77) || \ 680 !empty(_LANGUAGES.gcc:Mfortran77) || \
708 !empty(_LANGUAGES.gcc:Mgo) || \ 681 !empty(_LANGUAGES.gcc:Mgo) || \
709 !empty(_LANGUAGES.gcc:Mobjc) || \ 682 !empty(_LANGUAGES.gcc:Mobjc) || \
710 !empty(_LANGUAGES.gcc:Mobj-c++) 683 !empty(_LANGUAGES.gcc:Mobj-c++)
711_USE_GCC_SHLIB?= yes 684_USE_GCC_SHLIB?= yes
712. endif 685. endif
713. endif 686. endif
714.elif !empty(_NEED_GCC10:M[yY][eE][sS]) 687.elif !empty(_NEED_GCC10:M[yY][eE][sS])
715# 688#
716# We require gcc-10.x in the lang/gcc10-* directory. 689# We require gcc-10.x in the lang/gcc10-* directory.
717# 690#
718_GCC_PKGBASE= gcc10 691_GCC_PKGBASE= gcc10
719. if ${PKGPATH} == lang/gcc10 692. if ${PKGPATH} == lang/gcc10
720_IGNORE_GCC= yes 693_IGNORE_GCC= yes
721MAKEFLAGS+= _IGNORE_GCC=yes 694MAKEFLAGS+= _IGNORE_GCC=yes
722. endif 695. endif
723. if !defined(_IGNORE_GCC) && !empty(_LANGUAGES.gcc) 696. if !defined(_IGNORE_GCC) && !empty(_LANGUAGES.gcc)
724_GCC_PKGSRCDIR= ../../lang/gcc10 697_GCC_PKGSRCDIR= ../../lang/gcc10
725_GCC_DEPENDENCY= gcc10>=${_GCC_REQD}:../../lang/gcc10 698_GCC_DEPENDENCY= gcc10>=${_GCC_REQD}:../../lang/gcc10
726. if !empty(_LANGUAGES.gcc:Mc++) || \ 699. if !empty(_LANGUAGES.gcc:Mc++) || \
727 !empty(_LANGUAGES.gcc:Mfortran) || \ 700 !empty(_LANGUAGES.gcc:Mfortran) || \
728 !empty(_LANGUAGES.gcc:Mfortran77) || \ 701 !empty(_LANGUAGES.gcc:Mfortran77) || \
729 !empty(_LANGUAGES.gcc:Mgo) || \ 702 !empty(_LANGUAGES.gcc:Mgo) || \
730 !empty(_LANGUAGES.gcc:Mobjc) || \ 703 !empty(_LANGUAGES.gcc:Mobjc) || \
731 !empty(_LANGUAGES.gcc:Mobj-c++) 704 !empty(_LANGUAGES.gcc:Mobj-c++)
732_USE_GCC_SHLIB?= yes 705_USE_GCC_SHLIB?= yes
733. endif 706. endif
734. endif 707. endif
735.elif !empty(_NEED_GCC_AUX:M[yY][eE][sS]) 708.elif !empty(_NEED_GCC_AUX:M[yY][eE][sS])
736# 709#
737# We require Ada-capable compiler in the lang/gcc5-aux directory. 710# We require Ada-capable compiler in the lang/gcc5-aux directory.
738# 711#
739_GCC_PKGBASE= gcc5-aux 712_GCC_PKGBASE= gcc5-aux
740. if ${PKGPATH} == lang/gcc5-aux 713. if ${PKGPATH} == lang/gcc5-aux
741_IGNORE_GCC= yes 714_IGNORE_GCC= yes
742MAKEFLAGS+= _IGNORE_GCC=yes 715MAKEFLAGS+= _IGNORE_GCC=yes
743. endif 716. endif
744. if !defined(_IGNORE_GCC) && !empty(_LANGUAGES.gcc) 717. if !defined(_IGNORE_GCC) && !empty(_LANGUAGES.gcc)
745_GCC_PKGSRCDIR= ../../lang/gcc5-aux 718_GCC_PKGSRCDIR= ../../lang/gcc5-aux
746_GCC_DEPENDENCY= gcc5-aux>=${_GCC_REQD}:../../lang/gcc5-aux 719_GCC_DEPENDENCY= gcc5-aux>=${_GCC_REQD}:../../lang/gcc5-aux
747. if !empty(_LANGUAGES.gcc:Mc++) || \ 720. if !empty(_LANGUAGES.gcc:Mc++) || \
748 !empty(_LANGUAGES.gcc:Mfortran) || \ 721 !empty(_LANGUAGES.gcc:Mfortran) || \
749 !empty(_LANGUAGES.gcc:Mfortran77) || \ 722 !empty(_LANGUAGES.gcc:Mfortran77) || \
750 !empty(_LANGUAGES.gcc:Mada) || \ 723 !empty(_LANGUAGES.gcc:Mada) || \
751 !empty(_LANGUAGES.gcc:Mobjc) 724 !empty(_LANGUAGES.gcc:Mobjc)
752_USE_GCC_SHLIB?= yes 725_USE_GCC_SHLIB?= yes
753. endif 726. endif
754. endif 727. endif
755.endif 728.endif
756_GCC_DEPENDS= ${_GCC_PKGBASE}>=${_GCC_REQD} 729_GCC_DEPENDS= ${_GCC_PKGBASE}>=${_GCC_REQD}
757 730
758.if !empty(_NEED_GCC3:M[yY][eE][sS]) 731.if !empty(_NEED_GCC3:M[yY][eE][sS])
759. if ${PKGPATH} == "lang/gcc3-c++" 732. if ${PKGPATH} == "lang/gcc3-c++"
760_IGNORE_GCC3CXX= yes 733_IGNORE_GCC3CXX= yes
761MAKEFLAGS+= _IGNORE_GCC3CXX=yes 734MAKEFLAGS+= _IGNORE_GCC3CXX=yes
762. endif 735. endif
763. if !defined(_IGNORE_GCC3CXX) && !empty(_LANGUAGES.gcc:Mc++) 736. if !defined(_IGNORE_GCC3CXX) && !empty(_LANGUAGES.gcc:Mc++)
764_GCC_PKGSRCDIR+= ../../lang/gcc3-c++ 737_GCC_PKGSRCDIR+= ../../lang/gcc3-c++
765_GCC_DEPENDENCY+= gcc3-c++>=${_GCC_REQD}:../../lang/gcc3-c++ 738_GCC_DEPENDENCY+= gcc3-c++>=${_GCC_REQD}:../../lang/gcc3-c++
766_USE_GCC_SHLIB?= yes 739_USE_GCC_SHLIB?= yes
767. endif 740. endif
768. if ${PKGPATH} == lang/gcc3-f77 741. if ${PKGPATH} == lang/gcc3-f77
769_IGNORE_GCC3F77= yes 742_IGNORE_GCC3F77= yes
770MAKEFLAGS+= _IGNORE_GCC3F77=yes 743MAKEFLAGS+= _IGNORE_GCC3F77=yes
771. endif 744. endif
772. if !defined(_IGNORE_GCC3F77) && !empty(_LANGUAGES.gcc:Mfortran77) 745. if !defined(_IGNORE_GCC3F77) && !empty(_LANGUAGES.gcc:Mfortran77)
773_GCC_PKGSRCDIR+= ../../lang/gcc3-f77 746_GCC_PKGSRCDIR+= ../../lang/gcc3-f77
774_GCC_DEPENDENCY+= gcc3-f77>=${_GCC_REQD}:../../lang/gcc3-f77 747_GCC_DEPENDENCY+= gcc3-f77>=${_GCC_REQD}:../../lang/gcc3-f77
775_USE_GCC_SHLIB?= yes 748_USE_GCC_SHLIB?= yes
776. endif 749. endif
777. if ${PKGPATH} == lang/gcc3-objc 750. if ${PKGPATH} == lang/gcc3-objc
778_IGNORE_GCC3OBJC= yes 751_IGNORE_GCC3OBJC= yes
779MAKEFLAGS+= _IGNORE_GCC3OBJC=yes 752MAKEFLAGS+= _IGNORE_GCC3OBJC=yes
780. endif 753. endif
781. if !defined(_IGNORE_GCC3OBJC) && !empty(_LANGUAGES.gcc:Mobjc) 754. if !defined(_IGNORE_GCC3OBJC) && !empty(_LANGUAGES.gcc:Mobjc)
782_GCC_PKGSRCDIR+= ../../lang/gcc3-objc 755_GCC_PKGSRCDIR+= ../../lang/gcc3-objc
783_GCC_DEPENDENCY+= gcc3-objc>=${_GCC_REQD}:../../lang/gcc3-objc 756_GCC_DEPENDENCY+= gcc3-objc>=${_GCC_REQD}:../../lang/gcc3-objc
784_USE_GCC_SHLIB?= yes 757_USE_GCC_SHLIB?= yes
785. endif 758. endif
786.endif 759.endif
787 760
788# When not using the GNU linker, gcc will always link shared libraries against 761# When not using the GNU linker, gcc will always link shared libraries against
789# the shared version of libgcc, and so _USE_GCC_SHLIB needs to be enabled on 762# the shared version of libgcc, and so _USE_GCC_SHLIB needs to be enabled on
790# platforms with non-GNU linkers, such as SunOS. 763# platforms with non-GNU linkers, such as SunOS.
791# 764#
792# However, we cannot simply do this by default as it will create circular 765# However, we cannot simply do this by default as it will create circular
793# dependencies in packages which are required to build gcc itself, and so we 766# dependencies in packages which are required to build gcc itself, and so we
794# enable it based on USE_LIBTOOL for the majority of packages, and support 767# enable it based on USE_LIBTOOL for the majority of packages, and support
795# USE_GCC_RUNTIME for packages which create shared libraries but do not use 768# USE_GCC_RUNTIME for packages which create shared libraries but do not use
796# libtool to do so. 769# libtool to do so.
797# 770#
798.if (${OPSYS} == "Darwin" || ${OPSYS} == "SunOS") && \ 771.if (${OPSYS} == "Darwin" || ${OPSYS} == "SunOS") && \
799 (defined(USE_LIBTOOL) || defined(USE_GCC_RUNTIME)) 772 (defined(USE_LIBTOOL) || defined(USE_GCC_RUNTIME))
800_USE_GCC_SHLIB= yes 773_USE_GCC_SHLIB= yes
801.endif 774.endif
802 775
803.if !empty(USE_NATIVE_GCC:M[yY][eE][sS]) && !empty(_IS_BUILTIN_GCC:M[yY][eE][sS]) 776.if !empty(USE_NATIVE_GCC:M[yY][eE][sS]) && !empty(_IS_BUILTIN_GCC:M[yY][eE][sS])
804_USE_PKGSRC_GCC= no 777_USE_PKGSRC_GCC= no
805.elif !empty(USE_PKGSRC_GCC:M[yY][eE][sS]) 778.elif !empty(USE_PKGSRC_GCC:M[yY][eE][sS])
806# For environments where there is an external gcc too, but pkgsrc 779# For environments where there is an external gcc too, but pkgsrc
807# should use the pkgsrc one for consistency. 780# should use the pkgsrc one for consistency.
808_USE_PKGSRC_GCC= yes 781_USE_PKGSRC_GCC= yes
809.endif 782.endif
810 783
811.if defined(_IGNORE_GCC) 784.if defined(_IGNORE_GCC)
812_USE_PKGSRC_GCC= NO 785_USE_PKGSRC_GCC= NO
813.endif 786.endif
814 787
815.if !defined(_USE_PKGSRC_GCC) 788.if !defined(_USE_PKGSRC_GCC)
816_USE_PKGSRC_GCC= YES 789_USE_PKGSRC_GCC= YES
817. if !empty(_IS_BUILTIN_GCC:M[yY][eE][sS]) 790. if !empty(_IS_BUILTIN_GCC:M[yY][eE][sS])
818_GCC_TEST_DEPENDS= gcc>=${_GCC_REQD} 791_GCC_TEST_DEPENDS= gcc>=${_GCC_REQD}
819_USE_PKGSRC_GCC!= \ 792_USE_PKGSRC_GCC!= \
820 if ${PKG_ADMIN} pmatch '${_GCC_TEST_DEPENDS}' ${_GCC_PKG} 2>/dev/null; then \ 793 if ${PKG_ADMIN} pmatch '${_GCC_TEST_DEPENDS}' ${_GCC_PKG} 2>/dev/null; then \
821 ${ECHO} "NO"; \ 794 ${ECHO} "NO"; \
822 else \ 795 else \
823 ${ECHO} "YES"; \ 796 ${ECHO} "YES"; \
824 fi 797 fi
825. endif 798. endif
826.endif 799.endif
827 800
828# Check if any of the versions of GCC in pkgsrc can satisfy the _GCC_REQD 801# Check if any of the versions of GCC in pkgsrc can satisfy the _GCC_REQD
829# requirement. 802# requirement.
830# 803#
831.if !defined(_NEED_NEWER_GCC) 804.if !defined(_NEED_NEWER_GCC)
832_PKGSRC_GCC_VERSION= ${_GCC_PKGBASE}-${_GCC_DIST_VERSION} 805_PKGSRC_GCC_VERSION= ${_GCC_PKGBASE}-${_GCC_DIST_VERSION}
833_NEED_NEWER_GCC!= \ 806_NEED_NEWER_GCC!= \
834 if ${PKG_ADMIN} pmatch '${_GCC_DEPENDS}' ${_PKGSRC_GCC_VERSION} 2>/dev/null; then \ 807 if ${PKG_ADMIN} pmatch '${_GCC_DEPENDS}' ${_PKGSRC_GCC_VERSION} 2>/dev/null; then \
835 ${ECHO} "NO"; \ 808 ${ECHO} "NO"; \
836 else \ 809 else \
837 ${ECHO} "YES"; \ 810 ${ECHO} "YES"; \
838 fi 811 fi
839#MAKEFLAGS+= _NEED_NEWER_GCC=${_NEED_NEWER_GCC} 812#MAKEFLAGS+= _NEED_NEWER_GCC=${_NEED_NEWER_GCC}
840.endif 813.endif
841.if !empty(_USE_PKGSRC_GCC:M[yY][eE][sS]) && \ 814.if !empty(_USE_PKGSRC_GCC:M[yY][eE][sS]) && \
842 !empty(_NEED_NEWER_GCC:M[yY][eE][sS]) 815 !empty(_NEED_NEWER_GCC:M[yY][eE][sS])
843PKG_FAIL_REASON+= "Unable to satisfy dependency: ${_GCC_DEPENDS}" 816PKG_FAIL_REASON+= "Unable to satisfy dependency: ${_GCC_DEPENDS}"
844.endif 817.endif
845 818
846# GNU ld option used to set the rpath 819# GNU ld option used to set the rpath
847_LINKER_RPATH_FLAG= -R 820_LINKER_RPATH_FLAG= -R
848 821
849# GCC passes rpath directives to the linker using "-Wl,-R". 822# GCC passes rpath directives to the linker using "-Wl,-R".
850_COMPILER_RPATH_FLAG= -Wl,${_LINKER_RPATH_FLAG} 823_COMPILER_RPATH_FLAG= -Wl,${_LINKER_RPATH_FLAG}
851 824
852.if !empty(_USE_PKGSRC_GCC:M[yY][eE][sS]) 825.if !empty(_USE_PKGSRC_GCC:M[yY][eE][sS])
853# 826#
854# Ensure that the correct rpath is passed to the linker if we need to 827# Ensure that the correct rpath is passed to the linker if we need to
855# link against gcc shared libs. 828# link against gcc shared libs.
856# 829#
857_GCC_SUBPREFIX!= \ 830_GCC_SUBPREFIX!= \
858 if ${PKG_INFO} -qe ${_GCC_PKGBASE}; then \ 831 if ${PKG_INFO} -qe ${_GCC_PKGBASE}; then \
859 ${PKG_INFO} -f ${_GCC_PKGBASE} | \ 832 ${PKG_INFO} -f ${_GCC_PKGBASE} | \
860 ${GREP} "File:.*bin/gcc" | \ 833 ${GREP} "File:.*bin/gcc" | \
861 ${GREP} -v "/gcc[0-9][0-9]*-.*" | \ 834 ${GREP} -v "/gcc[0-9][0-9]*-.*" | \
862 ${SED} -e "s/.*File: *//;s/bin\/gcc.*//;q"; \ 835 ${SED} -e "s/.*File: *//;s/bin\/gcc.*//;q"; \
863 else \ 836 else \
864 case ${_CC} in \ 837 case ${_CC} in \
865 ${LOCALBASE}/*) \ 838 ${LOCALBASE}/*) \
866 subprefix="${_CC:H:S/\/bin$//:S/${LOCALBASE}\///:S/${LOCALBASE}//}"; \ 839 subprefix="${_CC:H:S/\/bin$//:S/${LOCALBASE}\///:S/${LOCALBASE}//}"; \
867 case "$${subprefix}" in \ 840 case "$${subprefix}" in \
868 "") ${ECHO} "$${subprefix}" ;; \ 841 "") ${ECHO} "$${subprefix}" ;; \
869 *) ${ECHO} "$${subprefix}/" ;; \ 842 *) ${ECHO} "$${subprefix}/" ;; \
870 esac; \ 843 esac; \
871 ;; \ 844 ;; \
872 *) \ 845 *) \
873 ${ECHO} "_GCC_SUBPREFIX_not_found/"; \ 846 ${ECHO} "_GCC_SUBPREFIX_not_found/"; \
874 ;; \ 847 ;; \
875 esac; \ 848 esac; \
876 fi 849 fi
877_GCC_PREFIX= ${LOCALBASE}/${_GCC_SUBPREFIX} 850_GCC_PREFIX= ${LOCALBASE}/${_GCC_SUBPREFIX}
878_GCC_ARCHDIR!= \ 851_GCC_ARCHDIR!= \
879 if [ -x ${_GCC_PREFIX}bin/gcc ]; then \ 852 if [ -x ${_GCC_PREFIX}bin/gcc ]; then \
880 ${DIRNAME} `${_GCC_PREFIX}bin/gcc -print-libgcc-file-name 2>/dev/null`; \ 853 ${DIRNAME} `${_GCC_PREFIX}bin/gcc -print-libgcc-file-name 2>/dev/null`; \
881 else \ 854 else \
882 ${ECHO} "_GCC_ARCHDIR_not_found"; \ 855 ${ECHO} "_GCC_ARCHDIR_not_found"; \
883 fi 856 fi
884_GCC_LIBDIRS= ${_GCC_ARCHDIR} 857_GCC_LIBDIRS= ${_GCC_ARCHDIR}
885. if empty(USE_PKGSRC_GCC_RUNTIME:M[Yy][Ee][Ss]) 858. if empty(USE_PKGSRC_GCC_RUNTIME:M[Yy][Ee][Ss])
886_GCC_LIBDIRS+= ${_GCC_PREFIX}lib${LIBABISUFFIX} 859_GCC_LIBDIRS+= ${_GCC_PREFIX}lib${LIBABISUFFIX}
887. endif 860. endif
888_GCC_LDFLAGS= # empty 861_GCC_LDFLAGS= # empty
889. for _dir_ in ${_GCC_LIBDIRS:N*not_found*} 862. for _dir_ in ${_GCC_LIBDIRS:N*not_found*}
890_GCC_LDFLAGS+= -L${_dir_} ${COMPILER_RPATH_FLAG}${_dir_} 863_GCC_LDFLAGS+= -L${_dir_} ${COMPILER_RPATH_FLAG}${_dir_}
891. endfor 864. endfor
892.endif 865.endif
893 866
894.if ${_PKGSRC_USE_RELRO} == "yes" 867.if ${_PKGSRC_USE_RELRO} == "yes"
895_GCC_LDFLAGS+= ${_RELRO_LDFLAGS} 868_GCC_LDFLAGS+= ${_RELRO_LDFLAGS}
896CWRAPPERS_APPEND.ld+= ${_RELRO_LDFLAGS} 869CWRAPPERS_APPEND.ld+= ${_RELRO_LDFLAGS}
897.endif 870.endif
898 871
899LDFLAGS+= ${_GCC_LDFLAGS} 872LDFLAGS+= ${_GCC_LDFLAGS}
900 873
901# Point the variables that specify the compiler to the installed 874# Point the variables that specify the compiler to the installed
902# GCC executables. 875# GCC executables.
903# 876#
904_GCC_DIR= ${WRKDIR}/.gcc 877_GCC_DIR= ${WRKDIR}/.gcc
905_GCC_VARS= # empty 878_GCC_VARS= # empty
906 879
907.if !empty(_USE_PKGSRC_GCC:M[yY][eE][sS]) 880.if !empty(_USE_PKGSRC_GCC:M[yY][eE][sS])
908_GCCBINDIR= ${_GCC_PREFIX}bin 881_GCCBINDIR= ${_GCC_PREFIX}bin
909.elif !empty(_IS_BUILTIN_GCC:M[yY][eE][sS]) 882.elif !empty(_IS_BUILTIN_GCC:M[yY][eE][sS])
910_GCCBINDIR= ${_CC:H} 883_GCCBINDIR= ${_CC:H}
911.endif 884.endif
912.if !empty(USE_CROSS_COMPILE:M[yY][eE][sS]) 885.if !empty(USE_CROSS_COMPILE:M[yY][eE][sS])
913_GCC_BIN_PREFIX= ${MACHINE_GNU_PLATFORM}- 886_GCC_BIN_PREFIX= ${MACHINE_GNU_PLATFORM}-
914.endif 887.endif
915_GCC_BIN_PREFIX?= # empty 888_GCC_BIN_PREFIX?= # empty
916GCC_VERSION_SUFFIX?= # empty 889GCC_VERSION_SUFFIX?= # empty
917.if exists(${_GCCBINDIR}/${_GCC_BIN_PREFIX}gcc${GCC_VERSION_SUFFIX}) 890.if exists(${_GCCBINDIR}/${_GCC_BIN_PREFIX}gcc${GCC_VERSION_SUFFIX})
918_GCC_VARS+= CC 891_GCC_VARS+= CC
919_GCC_CC= ${_GCC_DIR}/bin/${_GCC_BIN_PREFIX}gcc${GCC_VERSION_SUFFIX} 892_GCC_CC= ${_GCC_DIR}/bin/${_GCC_BIN_PREFIX}gcc${GCC_VERSION_SUFFIX}
920_ALIASES.CC= cc gcc 893_ALIASES.CC= cc gcc
921CCPATH= ${_GCCBINDIR}/${_GCC_BIN_PREFIX}gcc${GCC_VERSION_SUFFIX} 894CCPATH= ${_GCCBINDIR}/${_GCC_BIN_PREFIX}gcc${GCC_VERSION_SUFFIX}
922PKG_CC:= ${_GCC_CC} 895PKG_CC:= ${_GCC_CC}
923.endif 896.endif
924.if exists(${_GCCBINDIR}/${_GCC_BIN_PREFIX}cpp${GCC_VERSION_SUFFIX}) 897.if exists(${_GCCBINDIR}/${_GCC_BIN_PREFIX}cpp${GCC_VERSION_SUFFIX})
925_GCC_VARS+= CPP 898_GCC_VARS+= CPP
926_GCC_CPP= ${_GCC_DIR}/bin/${_GCC_BIN_PREFIX}cpp${GCC_VERSION_SUFFIX} 899_GCC_CPP= ${_GCC_DIR}/bin/${_GCC_BIN_PREFIX}cpp${GCC_VERSION_SUFFIX}
927_ALIASES.CPP= cpp 900_ALIASES.CPP= cpp
928CPPPATH= ${_GCCBINDIR}/${_GCC_BIN_PREFIX}cpp${GCC_VERSION_SUFFIX} 901CPPPATH= ${_GCCBINDIR}/${_GCC_BIN_PREFIX}cpp${GCC_VERSION_SUFFIX}
929PKG_CPP:= ${_GCC_CPP} 902PKG_CPP:= ${_GCC_CPP}
930.endif 903.endif
931.if exists(${_GCCBINDIR}/${_GCC_BIN_PREFIX}g++${GCC_VERSION_SUFFIX}) 904.if exists(${_GCCBINDIR}/${_GCC_BIN_PREFIX}g++${GCC_VERSION_SUFFIX})
932_GCC_VARS+= CXX 905_GCC_VARS+= CXX
933_GCC_CXX= ${_GCC_DIR}/bin/${_GCC_BIN_PREFIX}g++${GCC_VERSION_SUFFIX} 906_GCC_CXX= ${_GCC_DIR}/bin/${_GCC_BIN_PREFIX}g++${GCC_VERSION_SUFFIX}
934_ALIASES.CXX= c++ g++ 907_ALIASES.CXX= c++ g++
935CXXPATH= ${_GCCBINDIR}/${_GCC_BIN_PREFIX}g++${GCC_VERSION_SUFFIX} 908CXXPATH= ${_GCCBINDIR}/${_GCC_BIN_PREFIX}g++${GCC_VERSION_SUFFIX}
936PKG_CXX:= ${_GCC_CXX} 909PKG_CXX:= ${_GCC_CXX}
937.endif 910.endif
938.if exists(${_GCCBINDIR}/${_GCC_BIN_PREFIX}g77${GCC_VERSION_SUFFIX}) 911.if exists(${_GCCBINDIR}/${_GCC_BIN_PREFIX}g77${GCC_VERSION_SUFFIX})
939_GCC_VARS+= FC 912_GCC_VARS+= FC
940_GCC_FC= ${_GCC_DIR}/bin/${_GCC_BIN_PREFIX}g77${GCC_VERSION_SUFFIX} 913_GCC_FC= ${_GCC_DIR}/bin/${_GCC_BIN_PREFIX}g77${GCC_VERSION_SUFFIX}
941_ALIASES.FC= f77 g77 914_ALIASES.FC= f77 g77
942FC= g77 915FC= g77
943FCPATH= ${_GCCBINDIR}/${_GCC_BIN_PREFIX}g77${GCC_VERSION_SUFFIX} 916FCPATH= ${_GCCBINDIR}/${_GCC_BIN_PREFIX}g77${GCC_VERSION_SUFFIX}
944F77PATH= ${_GCCBINDIR}/${_GCC_BIN_PREFIX}g77${GCC_VERSION_SUFFIX} 917F77PATH= ${_GCCBINDIR}/${_GCC_BIN_PREFIX}g77${GCC_VERSION_SUFFIX}
945PKG_FC:= ${_GCC_FC} 918PKG_FC:= ${_GCC_FC}
946PKGSRC_FORTRAN?= g77 919PKGSRC_FORTRAN?= g77
947.endif 920.endif
948.if exists(${_GCCBINDIR}/${_GCC_BIN_PREFIX}gfortran${GCC_VERSION_SUFFIX}) 921.if exists(${_GCCBINDIR}/${_GCC_BIN_PREFIX}gfortran${GCC_VERSION_SUFFIX})
949_GCC_VARS+= FC 922_GCC_VARS+= FC
950_GCC_FC= ${_GCC_DIR}/bin/${_GCC_BIN_PREFIX}gfortran${GCC_VERSION_SUFFIX} 923_GCC_FC= ${_GCC_DIR}/bin/${_GCC_BIN_PREFIX}gfortran${GCC_VERSION_SUFFIX}
951_ALIASES.FC= gfortran 924_ALIASES.FC= gfortran
952FC= gfortran 925FC= gfortran
953FCPATH= ${_GCCBINDIR}/${_GCC_BIN_PREFIX}gfortran${GCC_VERSION_SUFFIX} 926FCPATH= ${_GCCBINDIR}/${_GCC_BIN_PREFIX}gfortran${GCC_VERSION_SUFFIX}
954F77PATH= ${_GCCBINDIR}/${_GCC_BIN_PREFIX}gfortran${GCC_VERSION_SUFFIX} 927F77PATH= ${_GCCBINDIR}/${_GCC_BIN_PREFIX}gfortran${GCC_VERSION_SUFFIX}
955PKG_FC:= ${_GCC_FC} 928PKG_FC:= ${_GCC_FC}
956PKGSRC_FORTRAN?= gfortran 929PKGSRC_FORTRAN?= gfortran
957.endif 930.endif
958.if exists(${_GCCBINDIR}/${_GCC_BIN_PREFIX}ada) 931.if exists(${_GCCBINDIR}/${_GCC_BIN_PREFIX}ada)
959_GCC_VARS+= ADA GMK GLK GBD CHP PRP GLS GNT 932_GCC_VARS+= ADA GMK GLK GBD CHP PRP GLS GNT
960_GCC_ADA= ${_GCC_DIR}/bin/${_GCC_BIN_PREFIX}ada 933_GCC_ADA= ${_GCC_DIR}/bin/${_GCC_BIN_PREFIX}ada
961_GCC_GMK= ${_GCC_DIR}/bin/${_GCC_BIN_PREFIX}gnatmake 934_GCC_GMK= ${_GCC_DIR}/bin/${_GCC_BIN_PREFIX}gnatmake
962_GCC_GLK= ${_GCC_DIR}/bin/${_GCC_BIN_PREFIX}gnatlink 935_GCC_GLK= ${_GCC_DIR}/bin/${_GCC_BIN_PREFIX}gnatlink
963_GCC_GBD= ${_GCC_DIR}/bin/${_GCC_BIN_PREFIX}gnatbind 936_GCC_GBD= ${_GCC_DIR}/bin/${_GCC_BIN_PREFIX}gnatbind
964_GCC_CHP= ${_GCC_DIR}/bin/${_GCC_BIN_PREFIX}gnatchop 937_GCC_CHP= ${_GCC_DIR}/bin/${_GCC_BIN_PREFIX}gnatchop
965_GCC_PRP= ${_GCC_DIR}/bin/${_GCC_BIN_PREFIX}gnatprep 938_GCC_PRP= ${_GCC_DIR}/bin/${_GCC_BIN_PREFIX}gnatprep
966_GCC_GLS= ${_GCC_DIR}/bin/${_GCC_BIN_PREFIX}gnatls 939_GCC_GLS= ${_GCC_DIR}/bin/${_GCC_BIN_PREFIX}gnatls
967_GCC_GNT= ${_GCC_DIR}/bin/${_GCC_BIN_PREFIX}gnat 940_GCC_GNT= ${_GCC_DIR}/bin/${_GCC_BIN_PREFIX}gnat
968_ALIASES.ADA= ada 941_ALIASES.ADA= ada
969_ALIASES.GMK= gnatmake 942_ALIASES.GMK= gnatmake
970_ALIASES.GLK= gnatlink 943_ALIASES.GLK= gnatlink
971_ALIASES.GBD= gnatbind 944_ALIASES.GBD= gnatbind
972_ALIASES.CHP= gnatchop 945_ALIASES.CHP= gnatchop
973_ALIASES.PRP= gnatprep 946_ALIASES.PRP= gnatprep
974_ALIASES.GLS= gnatls 947_ALIASES.GLS= gnatls
975_ALIASES.GNT= gnat 948_ALIASES.GNT= gnat
976ADAPATH= ${_GCCBINDIR}/${_GCC_BIN_PREFIX}ada 949ADAPATH= ${_GCCBINDIR}/${_GCC_BIN_PREFIX}ada
977GMKPATH= ${_GCCBINDIR}/${_GCC_BIN_PREFIX}gnatmake 950GMKPATH= ${_GCCBINDIR}/${_GCC_BIN_PREFIX}gnatmake
978GLKPATH= ${_GCCBINDIR}/${_GCC_BIN_PREFIX}gnatlink 951GLKPATH= ${_GCCBINDIR}/${_GCC_BIN_PREFIX}gnatlink
979GBDPATH= ${_GCCBINDIR}/${_GCC_BIN_PREFIX}gnatbind 952GBDPATH= ${_GCCBINDIR}/${_GCC_BIN_PREFIX}gnatbind
980CHPPATH= ${_GCCBINDIR}/${_GCC_BIN_PREFIX}gnatchop 953CHPPATH= ${_GCCBINDIR}/${_GCC_BIN_PREFIX}gnatchop
981PRPPATH= ${_GCCBINDIR}/${_GCC_BIN_PREFIX}gnatprep 954PRPPATH= ${_GCCBINDIR}/${_GCC_BIN_PREFIX}gnatprep
982GLSPATH= ${_GCCBINDIR}/${_GCC_BIN_PREFIX}gnatls 955GLSPATH= ${_GCCBINDIR}/${_GCC_BIN_PREFIX}gnatls
983GNTPATH= ${_GCCBINDIR}/${_GCC_BIN_PREFIX}gnat 956GNTPATH= ${_GCCBINDIR}/${_GCC_BIN_PREFIX}gnat
984PKG_ADA:= ${_GCC_ADA} 957PKG_ADA:= ${_GCC_ADA}
985PKG_GMK:= ${_GCC_GMK} 958PKG_GMK:= ${_GCC_GMK}
986PKG_GLK:= ${_GCC_GLK} 959PKG_GLK:= ${_GCC_GLK}
987PKG_GBD:= ${_GCC_GBD} 960PKG_GBD:= ${_GCC_GBD}
988PKG_CHP:= ${_GCC_CHP} 961PKG_CHP:= ${_GCC_CHP}
989PKG_PRP:= ${_GCC_PRP} 962PKG_PRP:= ${_GCC_PRP}
990PKG_GLS:= ${_GCC_GLS} 963PKG_GLS:= ${_GCC_GLS}
991PKG_GNT:= ${_GCC_GNT} 964PKG_GNT:= ${_GCC_GNT}
992PKGSRC_ADA?= ada 965PKGSRC_ADA?= ada
993PKGSRC_GMK?= gnatmake 966PKGSRC_GMK?= gnatmake
994PKGSRC_GLK?= gnatlink 967PKGSRC_GLK?= gnatlink
995PKGSRC_GBD?= gnatbind 968PKGSRC_GBD?= gnatbind
996PKGSRC_CHP?= gnatchop 969PKGSRC_CHP?= gnatchop
997PKGSRC_PRP?= gnatprep 970PKGSRC_PRP?= gnatprep
998PKGSRC_GLS?= gnatls 971PKGSRC_GLS?= gnatls
999PKGSRC_GNT?= gnat 972PKGSRC_GNT?= gnat
1000.endif 973.endif
1001_COMPILER_STRIP_VARS+= ${_GCC_VARS} 974_COMPILER_STRIP_VARS+= ${_GCC_VARS}
1002 975
1003# Pass the required flags to imake to tell it we're using gcc on Solaris. 976# Pass the required flags to imake to tell it we're using gcc on Solaris.
1004.if ${OPSYS} == "SunOS" 977.if ${OPSYS} == "SunOS"
1005IMAKEOPTS+= -DHasGcc2=YES -DHasGcc2ForCplusplus=YES 978IMAKEOPTS+= -DHasGcc2=YES -DHasGcc2ForCplusplus=YES
1006.endif 979.endif
1007 980
1008.if ${OPSYS} == "AIX" 981.if ${OPSYS} == "AIX"
1009# On AIX the GCC toolchain recognizes -maix32 and -maix64, 982# On AIX the GCC toolchain recognizes -maix32 and -maix64,
1010# -m32 or -m64 are not recognized. 983# -m32 or -m64 are not recognized.
1011_COMPILER_ABI_FLAG.32= -maix32 984_COMPILER_ABI_FLAG.32= -maix32
1012_COMPILER_ABI_FLAG.64= -maix64 985_COMPILER_ABI_FLAG.64= -maix64
1013# On HP-UX the GCC toolchain must be specifically targeted to an ABI, 986# On HP-UX the GCC toolchain must be specifically targeted to an ABI,
1014# -m32 or -m64 are not recognized. 987# -m32 or -m64 are not recognized.
1015.elif ${OPSYS} == "HPUX" 988.elif ${OPSYS} == "HPUX"
1016_COMPILER_ABI_FLAG.32= # empty 989_COMPILER_ABI_FLAG.32= # empty
1017_COMPILER_ABI_FLAG.64= # empty 990_COMPILER_ABI_FLAG.64= # empty
1018.elif !empty(MACHINE_ARCH:Mmips*) 991.elif !empty(MACHINE_ARCH:Mmips*)
1019_COMPILER_ABI_FLAG.32= -mabi=n32 # ABI == "32" == "n32" 992_COMPILER_ABI_FLAG.32= -mabi=n32 # ABI == "32" == "n32"
1020_COMPILER_ABI_FLAG.n32= -mabi=n32 993_COMPILER_ABI_FLAG.n32= -mabi=n32
1021_COMPILER_ABI_FLAG.o32= -mabi=32 994_COMPILER_ABI_FLAG.o32= -mabi=32
1022_COMPILER_ABI_FLAG.64= -mabi=64 995_COMPILER_ABI_FLAG.64= -mabi=64
1023.elif !empty(MACHINE_ARCH:Maarch64*) 996.elif !empty(MACHINE_ARCH:Maarch64*)
1024_COMPILER_ABI_FLAG.32= -m32 997_COMPILER_ABI_FLAG.32= -m32
1025_COMPILER_ABI_FLAG.64= # empty 998_COMPILER_ABI_FLAG.64= # empty
1026.else 999.else
1027_COMPILER_ABI_FLAG.32= -m32 1000_COMPILER_ABI_FLAG.32= -m32
1028_COMPILER_ABI_FLAG.64= -m64 1001_COMPILER_ABI_FLAG.64= -m64
1029.endif 1002.endif
1030 1003
1031.if !empty(_USE_PKGSRC_GCC:M[yY][eE][sS]) 1004.if !empty(_USE_PKGSRC_GCC:M[yY][eE][sS])
1032. if exists(${CCPATH}) 1005. if exists(${CCPATH})
1033CC_VERSION_STRING!= ${CCPATH} -v 2>&1 1006CC_VERSION_STRING!= ${CCPATH} -v 2>&1
1034CC_VERSION!= \ 1007CC_VERSION!= \
1035 if ${CCPATH} -dumpversion > /dev/null 2>&1; then \ 1008 if ${CCPATH} -dumpversion > /dev/null 2>&1; then \
1036 ${ECHO} "gcc-`${CCPATH} -dumpversion`"; \ 1009 ${ECHO} "gcc-`${CCPATH} -dumpversion`"; \
1037 else \ 1010 else \
1038 ${ECHO} "gcc-${_GCC_REQD}"; \ 1011 ${ECHO} "gcc-${_GCC_REQD}"; \
1039 fi 1012 fi
1040 1013
1041. else 1014. else
1042CC_VERSION_STRING= ${CC_VERSION} 1015CC_VERSION_STRING= ${CC_VERSION}
1043CC_VERSION= gcc-${_GCC_REQD} 1016CC_VERSION= gcc-${_GCC_REQD}
1044. endif 1017. endif
1045.else 1018.else
1046CC_VERSION_STRING= ${CC_VERSION} 1019CC_VERSION_STRING= ${CC_VERSION}
1047CC_VERSION= ${_GCC_PKG} 1020CC_VERSION= ${_GCC_PKG}
1048.endif 1021.endif
1049 1022
1050# The user can choose the level of stack smashing protection. 1023# The user can choose the level of stack smashing protection.
1051.if empty(CC_VERSION:Mgcc-[1-3].*) 1024.if empty(CC_VERSION:Mgcc-[1-3].*)
1052. if ${PKGSRC_USE_SSP} == "all" 1025. if ${PKGSRC_USE_SSP} == "all"
1053_SSP_CFLAGS= -fstack-protector-all 1026_SSP_CFLAGS= -fstack-protector-all
1054. elif ${PKGSRC_USE_SSP} == "strong" 1027. elif ${PKGSRC_USE_SSP} == "strong"
1055_SSP_CFLAGS= -fstack-protector-strong 1028_SSP_CFLAGS= -fstack-protector-strong
1056. else 1029. else
1057_SSP_CFLAGS= -fstack-protector 1030_SSP_CFLAGS= -fstack-protector
1058. endif 1031. endif
1059.endif 1032.endif
1060 1033
1061# Prepend the path to the compiler to the PATH. 1034# Prepend the path to the compiler to the PATH.
1062.if !empty(_LANGUAGES.gcc) 1035.if !empty(_LANGUAGES.gcc)
1063PREPEND_PATH+= ${_GCC_DIR}/bin 1036PREPEND_PATH+= ${_GCC_DIR}/bin
1064.endif 1037.endif
1065 1038
1066# Add the dependency on GCC. 1039# Add the dependency on GCC.
1067.if !empty(_USE_PKGSRC_GCC:M[yY][eE][sS]) 1040.if !empty(_USE_PKGSRC_GCC:M[yY][eE][sS])
1068. for _dir_ in ${_GCC_PKGSRCDIR} 1041. for _dir_ in ${_GCC_PKGSRCDIR}
1069. include "${_dir_}/buildlink3.mk" 1042. include "${_dir_}/buildlink3.mk"
1070. endfor 1043. endfor
1071.endif 1044.endif
1072 1045
1073# Add dependency on GCC libraries if requested. 1046# Add dependency on GCC libraries if requested.
1074.if (defined(_USE_GCC_SHLIB) && !empty(_USE_GCC_SHLIB:M[Yy][Ee][Ss])) && !empty(USE_PKGSRC_GCC_RUNTIME:M[Yy][Ee][Ss]) 1047.if (defined(_USE_GCC_SHLIB) && !empty(_USE_GCC_SHLIB:M[Yy][Ee][Ss])) && !empty(USE_PKGSRC_GCC_RUNTIME:M[Yy][Ee][Ss])
1075# Special case packages which are themselves a dependency of gcc runtime. 1048# Special case packages which are themselves a dependency of gcc runtime.
1076. if ${PKGPATH} != devel/libtool-base && ${PKGPATH} != devel/binutils && \ 1049. if ${PKGPATH} != devel/libtool-base && ${PKGPATH} != devel/binutils && \
1077 empty(PKGPATH:Mlang/gcc4?) && empty(PKGPATH:Mlang/gcc[5-9]) && \ 1050 empty(PKGPATH:Mlang/gcc4?) && empty(PKGPATH:Mlang/gcc[5-9]) && \
1078 empty(PKGPATH:Mlang/gcc10) 1051 empty(PKGPATH:Mlang/gcc10)
1079. if !empty(_GCC_PKGBASE:Mgcc48) 1052. if !empty(_GCC_PKGBASE:Mgcc48)
1080. include "../../lang/gcc48-libs/buildlink3.mk" 1053. include "../../lang/gcc48-libs/buildlink3.mk"
1081. elif !empty(_GCC_PKGBASE:Mgcc49) 1054. elif !empty(_GCC_PKGBASE:Mgcc49)
1082. include "../../lang/gcc49-libs/buildlink3.mk" 1055. include "../../lang/gcc49-libs/buildlink3.mk"
1083. elif !empty(_GCC_PKGBASE:Mgcc5) 1056. elif !empty(_GCC_PKGBASE:Mgcc5)
1084. include "../../lang/gcc5-libs/buildlink3.mk" 1057. include "../../lang/gcc5-libs/buildlink3.mk"
1085. elif !empty(_GCC_PKGBASE:Mgcc6) 1058. elif !empty(_GCC_PKGBASE:Mgcc6)
1086. include "../../lang/gcc6-libs/buildlink3.mk" 1059. include "../../lang/gcc6-libs/buildlink3.mk"
1087. elif !empty(_GCC_PKGBASE:Mgcc7) 1060. elif !empty(_GCC_PKGBASE:Mgcc7)
1088. include "../../lang/gcc7-libs/buildlink3.mk" 1061. include "../../lang/gcc7-libs/buildlink3.mk"
1089. elif !empty(_GCC_PKGBASE:Mgcc8) 1062. elif !empty(_GCC_PKGBASE:Mgcc8)
1090. include "../../lang/gcc8-libs/buildlink3.mk" 1063. include "../../lang/gcc8-libs/buildlink3.mk"
1091. elif !empty(_GCC_PKGBASE:Mgcc9) 1064. elif !empty(_GCC_PKGBASE:Mgcc9)
1092. include "../../lang/gcc9-libs/buildlink3.mk" 1065. include "../../lang/gcc9-libs/buildlink3.mk"
1093. elif !empty(_GCC_PKGBASE:Mgcc10) 1066. elif !empty(_GCC_PKGBASE:Mgcc10)
1094. include "../../lang/gcc10-libs/buildlink3.mk" 1067. include "../../lang/gcc10-libs/buildlink3.mk"
1095. else 1068. else
1096PKG_FAIL_REASON+= "No USE_PKGSRC_GCC_RUNTIME support for ${CC_VERSION}" 1069PKG_FAIL_REASON+= "No USE_PKGSRC_GCC_RUNTIME support for ${CC_VERSION}"
1097. endif 1070. endif
1098. endif 1071. endif
1099.endif 1072.endif
1100 1073
1101.for _var_ in ${_GCC_VARS} 1074.for _var_ in ${_GCC_VARS}
1102. if !target(${_GCC_${_var_}}) 1075. if !target(${_GCC_${_var_}})
1103override-tools: ${_GCC_${_var_}} 1076override-tools: ${_GCC_${_var_}}
1104${_GCC_${_var_}}: 1077${_GCC_${_var_}}:
1105 ${RUN}${MKDIR} ${.TARGET:H} 1078 ${RUN}${MKDIR} ${.TARGET:H}
1106. if !empty(COMPILER_USE_SYMLINKS:M[Yy][Ee][Ss]) 1079. if !empty(COMPILER_USE_SYMLINKS:M[Yy][Ee][Ss])
1107 ${RUN}${RM} -f ${.TARGET} 1080 ${RUN}${RM} -f ${.TARGET}
1108 ${RUN}${LN} -s ${_GCCBINDIR}/${.TARGET:T} ${.TARGET} 1081 ${RUN}${LN} -s ${_GCCBINDIR}/${.TARGET:T} ${.TARGET}
1109. else 1082. else
1110 ${RUN} \ 1083 ${RUN} \
1111 (${ECHO} '#!${TOOLS_SHELL}'; \ 1084 (${ECHO} '#!${TOOLS_SHELL}'; \
1112 ${ECHO} 'exec ${_GCCBINDIR}/${.TARGET:T} "$$@"'; \ 1085 ${ECHO} 'exec ${_GCCBINDIR}/${.TARGET:T} "$$@"'; \
1113 ) > ${.TARGET} 1086 ) > ${.TARGET}
1114 ${RUN}${CHMOD} +x ${.TARGET} 1087 ${RUN}${CHMOD} +x ${.TARGET}
1115. endif 1088. endif
1116. for _alias_ in ${_ALIASES.${_var_}:S/^/${.TARGET:H}\//} 1089. for _alias_ in ${_ALIASES.${_var_}:S/^/${.TARGET:H}\//}
1117 ${RUN} \ 1090 ${RUN} \
1118 if [ ! -x "${_alias_}" ]; then \ 1091 if [ ! -x "${_alias_}" ]; then \
1119 ${LN} -f -s ${.TARGET:T} ${_alias_}; \ 1092 ${LN} -f -s ${.TARGET:T} ${_alias_}; \
1120 fi 1093 fi
1121. endfor 1094. endfor
1122. endif 1095. endif
1123.endfor 1096.endfor
1124 1097
1125# On systems without a Fortran compiler, pull one in if needed. 1098# On systems without a Fortran compiler, pull one in if needed.
1126PKGSRC_FORTRAN?=gfortran 1099PKGSRC_FORTRAN?=gfortran
1127 1100
1128_GCC_NEEDS_A_FORTRAN= no 1101_GCC_NEEDS_A_FORTRAN= no
1129.if empty(_USE_PKGSRC_GCC:M[yY][eE][sS]) && !(defined(FCPATH) && exists(${FCPATH})) 1102.if empty(_USE_PKGSRC_GCC:M[yY][eE][sS]) && !(defined(FCPATH) && exists(${FCPATH}))
1130_GCC_NEEDS_A_FORTRAN= yes 1103_GCC_NEEDS_A_FORTRAN= yes
1131.else 1104.else
1132. for _pattern_ in 0.* 1.[0-4] 1.[0-4].* 1105. for _pattern_ in 0.* 1.[0-4] 1.[0-4].*
1133. if !empty(MACHINE_PLATFORM:MNetBSD-${_pattern_}-*) 1106. if !empty(MACHINE_PLATFORM:MNetBSD-${_pattern_}-*)
1134_GCC_NEEDS_A_FORTRAN= yes 1107_GCC_NEEDS_A_FORTRAN= yes
1135. endif 1108. endif
1136. endfor 1109. endfor
1137.endif 1110.endif
1138.if !empty(_GCC_NEEDS_A_FORTRAN:M[yY][eE][sS]) 1111.if !empty(_GCC_NEEDS_A_FORTRAN:M[yY][eE][sS])
1139. include "../../mk/compiler/${PKGSRC_FORTRAN}.mk" 1112. include "../../mk/compiler/${PKGSRC_FORTRAN}.mk"
1140.endif 1113.endif
1141 1114
1142.if ${OPSYS} == "Interix" && !empty(_GCCBINDIR:M/opt/gcc.*) 1115.if ${OPSYS} == "Interix" && !empty(_GCCBINDIR:M/opt/gcc.*)
1143COMPILER_INCLUDE_DIRS= ${_GCCBINDIR:H}/include ${_OPSYS_INCLUDE_DIRS} 1116COMPILER_INCLUDE_DIRS= ${_GCCBINDIR:H}/include ${_OPSYS_INCLUDE_DIRS}
1144COMPILER_LIB_DIRS= ${_GCCBINDIR:H}/lib ${_OPSYS_LIB_DIRS} 1117COMPILER_LIB_DIRS= ${_GCCBINDIR:H}/lib ${_OPSYS_LIB_DIRS}
1145.endif 1118.endif
1146 1119
1147#.READONLY: GCC_REQD 1120#.READONLY: GCC_REQD
1148_GCC_REQD_EFFECTIVE:= ${GCC_REQD} 1121_GCC_REQD_EFFECTIVE:= ${GCC_REQD}
1149 1122
1150.endif # COMPILER_GCC_MK 1123.endif # COMPILER_GCC_MK