tech-pkg archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
gcc.mk patch review
Hi folks!
I would like to submit a patch for mk/compiler/gcc.mk for review.
The patch should improve the code that supports the Ada compiler.
Although the changes will not affect existing packages (only some in wip ones) they will be applied after release.
For convenience, the patch is divided into several consecutive parts, and each part has its own description.
Parts are included as attachments:
patch-mk_compiler.mk for mk/compiler.mk
patch-mk_compiler_gcc.mk.1, patch-mk_compiler_gcc.mk.2, patch-mk_compiler_gcc.mk.3 for mk/compiler/gcc.mk
Thanks in advance for your comments/suggestions,
Dmytro
Describe USE_ADA_FEATURES
--- mk/compiler.mk.orig
+++ mk/compiler.mk
@@ -91,6 +91,15 @@
# regex, filesystem, unique_ptr, charconv, parallelism_ts,
# put_time, is_trivially_copy_constructible.
#
+# USE_ADA_FEATURES
+#
+# Declares the Ada compiler features required by the package.
+#
+# This is used to (optionally) install a newer compiler
+# than provided by the system, to or skip building the package.
+#
+# Valid values are: gnat2020, gnat2022, ada2022.
+#
# FORCE_C_STD
#
# Overrides the compiler's default C dialect to ensure that a
Determining the reqired version based on USE_ADA_FEATURES has been moved
to GCC_REQD section
Fix order of code determining version based on GCC_REQD and code based
on USE_LANGUAGES
Minor refactor of the code that determines the required version of GNAT
Eliminate unnecessary code in USE_LANGUAGES section
Remove unjustified use of higher version of GNAT
--- mk/compiler/gcc.mk.orig.0
+++ mk/compiler/gcc.mk.orig.1
@@ -283,6 +283,23 @@
_NEED_GCC_AUX?=no
.if !empty(USE_LANGUAGES:Mada)
_NEED_GCC_AUX=yes
+
+. if !empty(USE_ADA_FEATURES:Mgnat2020)
+# Undocumented GNAT PRO's -gnat2020 switch
+GCC_REQD+= 10
+. endif
+
+. if !empty(USE_ADA_FEATURES:Mgnat2022)
+# First appearance in GNAT 12
+GCC_REQD+= 13
+. endif
+
+. if !empty(USE_ADA_FEATURES:Mada2022)
+# GNAT (as of version 14) really doesn't implement all Ada 2022's features
+# (gnat2022 /= ada2022), so we'll just set the latest available version here
+# until that happens.
+GCC_REQD+= 14
+. endif
.endif
# _GCC_DIST_VERSION is the highest version of GCC installed by the pkgsrc
@@ -610,7 +627,6 @@
_NEED_GCC14= yes
.endif
-# We have fixed set of Ada compilers and languages them provided. So we try to find best possible variant
_NEED_GCC6_AUX?=no
_NEED_GCC10_AUX?=no
_NEED_GCC13_GNAT?=no
@@ -618,15 +634,23 @@
.if ${_NEED_GCC_AUX:tl} == "yes"
USE_PKGSRC_GCC=yes
USE_PKGSRC_GCC_RUNTIME=no
-. if ${ALLOW_NEWER_COMPILER:tl} != "yes"
-PKG_FAIL_REASON+= "Package requires at least gnat 13 to build"
+
+# Switch on GNAT variables based on already determined by GCC_REQD values
+. if ${_NEED_GCC6:tl} == "yes"
+_NEED_GCC6_AUX= yes
+. endif
+. if ${_NEED_GCC7:tl} == "yes" || ${_NEED_GCC8:tl} == "yes" || \
+ ${_NEED_GCC9:tl} == "yes" || ${_NEED_GCC10:tl} == "yes"
+_NEED_GCC10_AUX= yes
. endif
-_NEED_GCC13_GNAT=yes
+. if ${_NEED_GCC12:tl} == "yes" || ${_NEED_GCC13:tl} == "yes"
+_NEED_GCC13_GNAT= yes
+. endif
+. if ${_NEED_GCC14:tl} == "yes"
_NEED_GCC14_GNAT= yes
-. if empty(USE_ADA_FEATURES:Mada2022)
-_NEED_GCC10_AUX=yes
-_NEED_GCC6_AUX=yes
. endif
+
+# We have fixed set of Ada compilers and languages them provided. So we try to find best possible variant
. if !empty(USE_LANGUAGES:Mfortran) || !empty(USE_LANGUAGES:Mfortran77)
. if ${_NEED_GCC10_AUX:tl} == "yes"
_NEED_GCC6_AUX=no
@@ -636,46 +660,19 @@
PKG_FAIL_REASON+= "Package requires fortran compiler"
. endif
. endif
-. if ${_NEED_GCC6_AUX:tl} == "yes" && ${_NEED_GCC6:tl} != "yes"
-_NEED_GCC6_AUX=no
-. endif
-. if ${_NEED_GCC10_AUX:tl} == "yes" && ${_NEED_GCC10:tl} != "yes"
-_NEED_GCC10_AUX=no
-. endif
-. if ${_NEED_GCC13_GNAT:tl} == "yes" && ${_NEED_GCC13:tl} != "yes"
-_NEED_GCC13_GNAT=no
-. endif
-. if ${_NEED_GCC14_GNAT:tl} == "yes" && ${_NEED_GCC14:tl} != "yes"
-_NEED_GCC14_GNAT= no
-. endif
. if !empty(USE_LANGUAGES:Mobjc)
-_NEED_GCC6_AUX=no
-_NEED_GCC10_AUX=no
-_NEED_GCC13_GNAT=no
-_NEED_GCC14_GNAT= no
PKG_FAIL_REASON+= "Package requires objc compiler"
. endif
. if !empty(USE_LANGUAGES:Mobj-c++)
-_NEED_GCC6_AUX=no
-_NEED_GCC10_AUX=no
-_NEED_GCC13_GNAT=no
-_NEED_GCC14_GNAT= no
PKG_FAIL_REASON+= "Package requires obj-c++ compiler"
. endif
. if !empty(USE_LANGUAGES:Mgo)
-_NEED_GCC6_AUX=no
-_NEED_GCC10_AUX=no
-_NEED_GCC13_GNAT=no
-_NEED_GCC14_GNAT= no
PKG_FAIL_REASON+= "Package requires go compiler"
. endif
. if !empty(USE_LANGUAGES:Mjava)
-_NEED_GCC6_AUX=no
-_NEED_GCC10_AUX=no
-_NEED_GCC13_GNAT=no
-_NEED_GCC14_GNAT= no
PKG_FAIL_REASON+= "Package requires java compiler"
. endif
+# It is necessary to turn off all _NEED_GCC[6-14] variables
_NEED_GCC6=no
_NEED_GCC7=no
_NEED_GCC8=no
@@ -684,16 +681,6 @@
_NEED_GCC12=no
_NEED_GCC13=no
_NEED_GCC14= no
-. if ${_NEED_GCC14_GNAT:tl} == "yes"
-_NEED_GCC6_AUX= no
-_NEED_GCC10_AUX= no
-_NEED_GCC13_GNAT= no
-. elif ${_NEED_GCC13_GNAT:tl} == "yes"
-_NEED_GCC6_AUX=no
-_NEED_GCC10_AUX=no
-. elif ${_NEED_GCC10_AUX:tl} == "yes"
-_NEED_GCC6_AUX=no
-. endif
.endif
# Assume by default that GCC will only provide a C compiler.
Fix unnecessary setting of USE_PKGSRC_GCC_RUNTIME.
Since GNAT can only be from pkgsrc, for it setting this variable
has a slightly different meaning: whether to use shared libraries.
Set USE_NATIVE_GCC to "no" in addition to USE_PKGSRC_GCC to "yes"
--- mk/compiler/gcc.mk.orig.1
+++ mk/compiler/gcc.mk.orig.2
@@ -507,7 +507,7 @@
_NEED_GCC7?= no
.for _pattern_ in ${_GCC7_PATTERNS}
. if !empty(_GCC_REQD:M${_pattern_})
-. if ${OPSYS} == "NetBSD" && ${OPSYS_VERSION} < 089937
+. if ${OPSYS} == "NetBSD" && ${OPSYS_VERSION} < 089937 && ${_NEED_GCC_AUX:tl} != "yes"
USE_PKGSRC_GCC= yes
USE_PKGSRC_GCC_RUNTIME= yes
. endif
@@ -520,7 +520,7 @@
_NEED_GCC8?= no
.for _pattern_ in ${_GCC8_PATTERNS}
. if !empty(_GCC_REQD:M${_pattern_})
-. if ${OPSYS} == "NetBSD" && ${OPSYS_VERSION} < 099917
+. if ${OPSYS} == "NetBSD" && ${OPSYS_VERSION} < 099917 && ${_NEED_GCC_AUX:tl} != "yes"
USE_PKGSRC_GCC= yes
USE_PKGSRC_GCC_RUNTIME= yes
. endif
@@ -533,7 +533,7 @@
_NEED_GCC9?= no
.for _pattern_ in ${_GCC9_PATTERNS}
. if !empty(_GCC_REQD:M${_pattern_})
-. if ${OPSYS} == "NetBSD" && ${OPSYS_VERSION} < 099976
+. if ${OPSYS} == "NetBSD" && ${OPSYS_VERSION} < 099976 && ${_NEED_GCC_AUX:tl} != "yes"
USE_PKGSRC_GCC= yes
USE_PKGSRC_GCC_RUNTIME= yes
. endif
@@ -546,7 +546,7 @@
_NEED_GCC10?= no
.for _pattern_ in ${_GCC10_PATTERNS}
. if !empty(_GCC_REQD:M${_pattern_})
-. if ${OPSYS} == "NetBSD" && ${OPSYS_VERSION} < 099982
+. if ${OPSYS} == "NetBSD" && ${OPSYS_VERSION} < 099982 && ${_NEED_GCC_AUX:tl} != "yes"
USE_PKGSRC_GCC= yes
USE_PKGSRC_GCC_RUNTIME= yes
. endif
@@ -559,7 +559,7 @@
_NEED_GCC12?= no
.for _pattern_ in ${_GCC12_PATTERNS}
. if !empty(_GCC_REQD:M${_pattern_})
-. if ${OPSYS} == "NetBSD" && ${OPSYS_VERSION} < 109911
+. if ${OPSYS} == "NetBSD" && ${OPSYS_VERSION} < 109911 && ${_NEED_GCC_AUX:tl} != "yes"
USE_PKGSRC_GCC= yes
USE_PKGSRC_GCC_RUNTIME= yes
. endif
@@ -573,7 +573,7 @@
.for _pattern_ in ${_GCC13_PATTERNS}
. if !empty(_GCC_REQD:M${_pattern_})
# XXX: pin to a version when NetBSD switches to gcc13
-. if ${OPSYS} == "NetBSD"
+. if ${OPSYS} == "NetBSD" && ${_NEED_GCC_AUX:tl} != "yes"
USE_PKGSRC_GCC= yes
USE_PKGSRC_GCC_RUNTIME= yes
. endif
@@ -587,7 +587,7 @@
.for _pattern_ in ${_GCC14_PATTERNS}
. if !empty(_GCC_REQD:M${_pattern_})
# XXX: pin to a version when NetBSD switches to gcc14
-. if ${OPSYS} == "NetBSD"
+. if ${OPSYS} == "NetBSD" && ${_NEED_GCC_AUX:tl} != "yes"
USE_PKGSRC_GCC= yes
USE_PKGSRC_GCC_RUNTIME= yes
. endif
@@ -632,8 +632,9 @@
_NEED_GCC13_GNAT?=no
_NEED_GCC14_GNAT?= no
.if ${_NEED_GCC_AUX:tl} == "yes"
-USE_PKGSRC_GCC=yes
-USE_PKGSRC_GCC_RUNTIME=no
+# Ada compilers are always only from pkgsrc
+USE_NATIVE_GCC= no
+USE_PKGSRC_GCC= yes
# Switch on GNAT variables based on already determined by GCC_REQD values
. if ${_NEED_GCC6:tl} == "yes"
Add automatic handling of shared libraries (support for gcc*-gnat-libs
packages).
Since building Ada libraries as shared libraries requires using GNAT shared
libraries, but not every package needs it, meaning of USE_GCC_RUNTIME for
GNAT is also slightly different: does the package support (need) shared
libraries.
--- mk/compiler/gcc.mk.orig.2
+++ mk/compiler/gcc.mk
@@ -927,10 +927,7 @@
. if !defined(_IGNORE_GCC) && !empty(_LANGUAGES.gcc)
_GCC_PKGSRCDIR= ../../lang/gcc6-aux
_GCC_DEPENDENCY= gcc6-aux>=${_GCC_REQD}:../../lang/gcc6-aux
-. if !empty(_LANGUAGES.gcc:Mc++) || \
- !empty(_LANGUAGES.gcc:Mada)
-_USE_GCC_SHLIB?= no
-. endif
+# gcc6-aux doesn't have a separate package for shared libraries
. endif
.elif !empty(_NEED_GCC10_AUX:M[yY][eE][sS])
#
@@ -944,12 +941,7 @@
. if !defined(_IGNORE_GCC) && !empty(_LANGUAGES.gcc)
_GCC_PKGSRCDIR= ../../lang/gcc10-aux
_GCC_DEPENDENCY= gcc10-aux>=${_GCC_REQD}:../../lang/gcc10-aux
-. if !empty(_LANGUAGES.gcc:Mc++) || \
- !empty(_LANGUAGES.gcc:Mfortran) || \
- !empty(_LANGUAGES.gcc:Mfortran77) || \
- !empty(_LANGUAGES.gcc:Mada)
-_USE_GCC_SHLIB?= no
-. endif
+# gcc10-aux doesn't have a separate package for shared libraries
. endif
.elif !empty(_NEED_GCC13_GNAT:M[yY][eE][sS])
#
@@ -963,7 +955,9 @@
. if !defined(_IGNORE_GCC) && !empty(_LANGUAGES.gcc)
_GCC_PKGSRCDIR= ../../lang/gcc13-gnat
_GCC_DEPENDENCY= gcc13-gnat>=${_GCC_REQD}:../../lang/gcc13-gnat
-_USE_GCC_SHLIB?= no
+. if defined(USE_GCC_RUNTIME)
+_USE_GCC_SHLIB?= yes
+. endif
. endif
.elif !empty(_NEED_GCC14_GNAT:M[yY][eE][sS])
#
@@ -977,7 +971,9 @@
. if !defined(_IGNORE_GCC) && !empty(_LANGUAGES.gcc)
_GCC_PKGSRCDIR= ../../lang/gcc14-gnat
_GCC_DEPENDENCY= gcc14-gnat>=${_GCC_REQD}:../../lang/gcc14-gnat
-_USE_GCC_SHLIB?= no
+. if defined(USE_GCC_RUNTIME)
+_USE_GCC_SHLIB?= yes
+. endif
. endif
.endif
_GCC_DEPENDS= ${_GCC_PKGBASE}>=${_GCC_REQD}
@@ -992,10 +988,12 @@
# USE_GCC_RUNTIME for packages which create shared libraries but do not use
# libtool to do so.
#
+.if ${_NEED_GCC_AUX:tl} != "yes"
.if (${OPSYS} == "Darwin" || ${OPSYS} == "SunOS") && \
(defined(USE_LIBTOOL) || defined(USE_GCC_RUNTIME))
_USE_GCC_SHLIB= yes
.endif
+.endif
.if !empty(USE_NATIVE_GCC:M[yY][eE][sS]) && !empty(_IS_BUILTIN_GCC:M[yY][eE][sS])
_USE_PKGSRC_GCC= no
@@ -1253,10 +1251,15 @@
.if (defined(_USE_GCC_SHLIB) && !empty(_USE_GCC_SHLIB:M[Yy][Ee][Ss])) && !empty(USE_PKGSRC_GCC_RUNTIME:M[Yy][Ee][Ss])
# Special case packages which are themselves a dependency of gcc runtime.
. if ${PKGPATH} != devel/libtool-base && ${PKGPATH} != devel/binutils && \
+ empty(PKGPATH:Mlang/gcc*-aux) && empty(PKGPATH:Mlang/gcc*-gnat) && \
empty(PKGPATH:Mlang/gcc4?) && empty(PKGPATH:Mlang/gcc[5-9]) && \
empty(PKGPATH:Mlang/gcc10) && empty(PKGPATH:Mlang/gcc12) && \
empty(PKGPATH:Mlang/gcc13) && empty(PKGPATH:Mlang/gcc14)
-. if !empty(_GCC_PKGBASE:Mgcc6)
+. if !empty(_GCC_PKGBASE:Mgcc13-gnat)
+. include "../../lang/gcc13-gnat-libs/buildlink3.mk"
+. elif !empty(_GCC_PKGBASE:Mgcc14-gnat)
+. include "../../lang/gcc14-gnat-libs/buildlink3.mk"
+. elif !empty(_GCC_PKGBASE:Mgcc6)
. include "../../lang/gcc6-libs/buildlink3.mk"
. elif !empty(_GCC_PKGBASE:Mgcc7)
. include "../../lang/gcc7-libs/buildlink3.mk"
Home |
Main Index |
Thread Index |
Old Index