summaryrefslogtreecommitdiff
path: root/lang
diff options
context:
space:
mode:
Diffstat (limited to 'lang')
-rw-r--r--lang/Makefile2
-rw-r--r--lang/chez-scheme/Makefile2
-rw-r--r--lang/chez-scheme/distinfo6
-rw-r--r--lang/gcc11/Makefile2
-rw-r--r--lang/gcc12-devel/files/patch-libgcc_unwind.inc3
-rw-r--r--lang/gcc12/files/patch-libgcc_unwind.inc3
-rw-r--r--lang/gcc13-devel/Makefile2
-rw-r--r--lang/gcc13-devel/distinfo6
-rw-r--r--lang/gcc13-devel/files/patch-libgcc_unwind.inc3
-rw-r--r--lang/gcc13/Makefile2
-rw-r--r--lang/gcc13/files/patch-libgcc_unwind.inc31
-rw-r--r--lang/gcc14-devel/Makefile2
-rw-r--r--lang/gcc14-devel/distinfo6
-rw-r--r--lang/gcc14-devel/files/patch-libgcc_unwind.inc3
-rw-r--r--lang/gcc14/files/patch-libgcc_unwind.inc3
-rw-r--r--lang/gcc15-devel/Makefile3
-rw-r--r--lang/gcc15-devel/distinfo6
-rw-r--r--lang/gcc15-devel/files/patch-libgcc_unwind.inc3
-rw-r--r--lang/gcc15/Makefile189
-rw-r--r--lang/gcc15/distinfo3
-rw-r--r--lang/gcc15/files/patch-arm-unwind-cxx-support106
-rw-r--r--lang/gcc15/files/patch-gcc_Makefile.in19
-rw-r--r--lang/gcc15/files/patch-gcc_configure22
-rw-r--r--lang/gcc15/files/patch-gcc_jit_Make-lang.in14
-rw-r--r--lang/gcc15/files/patch-gfortran-libgcc69
-rw-r--r--lang/gcc15/files/patch-libcxxrt18
-rw-r--r--lang/gcc15/files/patch-libgcc_enable-execute-stack-mprotect.c15
-rw-r--r--lang/gcc15/files/patch-libgcc_unwind.inc31
-rw-r--r--lang/gcc15/files/patch-libsanitizer_asan_asan__linux.cpp23
-rw-r--r--lang/gcc15/files/patch-libsanitizer_asan_asan__thread.cpp13
-rw-r--r--lang/gcc15/files/pkg-message.in13
-rw-r--r--lang/gcc15/pkg-descr3
-rw-r--r--lang/gcc15/pkg-help3
-rw-r--r--lang/gcc15/pkg-plist36
-rw-r--r--lang/gcc16-devel/Makefile194
-rw-r--r--lang/gcc16-devel/distinfo3
-rw-r--r--lang/gcc16-devel/files/patch-arm-unwind-cxx-support106
-rw-r--r--lang/gcc16-devel/files/patch-gcc_Makefile.in19
-rw-r--r--lang/gcc16-devel/files/patch-gcc_configure22
-rw-r--r--lang/gcc16-devel/files/patch-gcc_jit_Make-lang.in14
-rw-r--r--lang/gcc16-devel/files/patch-gfortran-libgcc69
-rw-r--r--lang/gcc16-devel/files/patch-libcxxrt18
-rw-r--r--lang/gcc16-devel/files/patch-libgcc_enable-execute-stack-mprotect.c15
-rw-r--r--lang/gcc16-devel/files/patch-libgcc_unwind.inc31
-rw-r--r--lang/gcc16-devel/files/patch-libsanitizer_asan_asan__linux.cpp23
-rw-r--r--lang/gcc16-devel/files/patch-libsanitizer_asan_asan__thread.cpp13
-rw-r--r--lang/gcc16-devel/files/pkg-message.in13
-rw-r--r--lang/gcc16-devel/pkg-descr3
-rw-r--r--lang/gcc16-devel/pkg-help3
-rw-r--r--lang/gcc16-devel/pkg-plist36
-rw-r--r--lang/ghc/Makefile16
-rw-r--r--lang/ghc/distinfo10
-rw-r--r--lang/ghc/files/fixup-plist.hs30
-rw-r--r--lang/ghc/files/patch-hadrian_hadrian.cabal15
-rw-r--r--lang/ghc/files/patch-hadrian_src_Hadrian_Haskell_Cabal_Parse.hs4
-rw-r--r--lang/ghc/files/patch-libraries_base_GHC_Event_KQueue.hsc45
-rw-r--r--lang/ghc/pkg-plist.hadrian33
-rw-r--r--lang/go124/Makefile2
-rw-r--r--lang/go124/distinfo6
-rw-r--r--lang/julia/Makefile2
-rw-r--r--lang/pharo/Makefile1
-rw-r--r--lang/quickjs-ng/Makefile2
-rw-r--r--lang/quickjs-ng/distinfo6
-rw-r--r--lang/quickjs-ng/files/patch-CMakeLists.txt23
-rw-r--r--lang/quickjs/Makefile3
-rw-r--r--lang/quickjs/distinfo6
-rw-r--r--lang/rizin/Makefile2
-rw-r--r--lang/rizin/distinfo6
-rw-r--r--lang/rizin/files/patch-meson.build11
-rw-r--r--lang/ruby35/Makefile6
-rw-r--r--lang/s7/Makefile.master4
-rw-r--r--lang/s7/distinfo6
72 files changed, 1338 insertions, 148 deletions
diff --git a/lang/Makefile b/lang/Makefile
index b47244907bdd..1ea8c93fb2a9 100644
--- a/lang/Makefile
+++ b/lang/Makefile
@@ -97,7 +97,9 @@
SUBDIR += gcc13-devel
SUBDIR += gcc14
SUBDIR += gcc14-devel
+ SUBDIR += gcc15
SUBDIR += gcc15-devel
+ SUBDIR += gcc16-devel
SUBDIR += gcc6-aux
SUBDIR += gforth
SUBDIR += ghc
diff --git a/lang/chez-scheme/Makefile b/lang/chez-scheme/Makefile
index 094cdd7aabfb..e382680ca7f8 100644
--- a/lang/chez-scheme/Makefile
+++ b/lang/chez-scheme/Makefile
@@ -1,5 +1,5 @@
PORTNAME= chez-scheme
-PORTVERSION= 10.1.0
+PORTVERSION= 10.2.0
DISTVERSIONPREFIX= v
CATEGORIES= lang
MASTER_SITES= https://github.com/cisco/ChezScheme/releases/download/${DISTVERSIONPREFIX}${DISTVERSION}/
diff --git a/lang/chez-scheme/distinfo b/lang/chez-scheme/distinfo
index e886a7eabc66..714481a643ab 100644
--- a/lang/chez-scheme/distinfo
+++ b/lang/chez-scheme/distinfo
@@ -1,3 +1,3 @@
-TIMESTAMP = 1731619280
-SHA256 (csv10.1.0.tar.gz) = 9181a6c8c4ab5e5d32d879ff159d335a50d4f8b388611ae22a263e932c35398b
-SIZE (csv10.1.0.tar.gz) = 9123504
+TIMESTAMP = 1746612550
+SHA256 (csv10.2.0.tar.gz) = b795916d4cfed59240c5f44b1b507a8657efd28e62e72e134d03486e9f3e374a
+SIZE (csv10.2.0.tar.gz) = 9151451
diff --git a/lang/gcc11/Makefile b/lang/gcc11/Makefile
index 202b99b1fa64..0391a84a28df 100644
--- a/lang/gcc11/Makefile
+++ b/lang/gcc11/Makefile
@@ -12,6 +12,8 @@ LICENSE= GPLv3 GPLv3RLE
LICENSE_COMB= multi
ONLY_FOR_ARCHS= aarch64 amd64 armv6 armv7 i386 powerpc powerpc64 powerpc64le riscv64
+DEPRECATED= End-of-life upstream since mid 2024, newer versions available
+EXPIRATION_DATE=2025-07-19
LIB_DEPENDS= libgmp.so:math/gmp \
libmpfr.so:math/mpfr \
diff --git a/lang/gcc12-devel/files/patch-libgcc_unwind.inc b/lang/gcc12-devel/files/patch-libgcc_unwind.inc
index 42155a9ba48e..94fb7f65d5fb 100644
--- a/lang/gcc12-devel/files/patch-libgcc_unwind.inc
+++ b/lang/gcc12-devel/files/patch-libgcc_unwind.inc
@@ -13,6 +13,9 @@ at once).
Linux does not have libthr, so Linux is not affected. Moreover Linux is likely
to build everything with GCC.
+This patch will become obsolete once all supported FreeBSD releases
+include commit 22e564c74eb20e14bd93fd9fdde20e38a29cfcf1.
+
--- libgcc/unwind.inc.orig 2025-04-12 08:18:17 UTC
+++ libgcc/unwind.inc
@@ -212,8 +212,8 @@ _Unwind_ForcedUnwind (struct _Unwind_Exception *exc,
diff --git a/lang/gcc12/files/patch-libgcc_unwind.inc b/lang/gcc12/files/patch-libgcc_unwind.inc
index 42155a9ba48e..94fb7f65d5fb 100644
--- a/lang/gcc12/files/patch-libgcc_unwind.inc
+++ b/lang/gcc12/files/patch-libgcc_unwind.inc
@@ -13,6 +13,9 @@ at once).
Linux does not have libthr, so Linux is not affected. Moreover Linux is likely
to build everything with GCC.
+This patch will become obsolete once all supported FreeBSD releases
+include commit 22e564c74eb20e14bd93fd9fdde20e38a29cfcf1.
+
--- libgcc/unwind.inc.orig 2025-04-12 08:18:17 UTC
+++ libgcc/unwind.inc
@@ -212,8 +212,8 @@ _Unwind_ForcedUnwind (struct _Unwind_Exception *exc,
diff --git a/lang/gcc13-devel/Makefile b/lang/gcc13-devel/Makefile
index a66514428fa5..12715c5e60bc 100644
--- a/lang/gcc13-devel/Makefile
+++ b/lang/gcc13-devel/Makefile
@@ -1,5 +1,5 @@
PORTNAME= gcc
-PORTVERSION= 13.3.1.s20250418
+PORTVERSION= 13.3.1.s20250424
CATEGORIES= lang
MASTER_SITES= GCC/snapshots/${DIST_VERSION}
PKGNAMESUFFIX= ${SUFFIX}-devel
diff --git a/lang/gcc13-devel/distinfo b/lang/gcc13-devel/distinfo
index 2cfd270950e0..b4d4762dd5dd 100644
--- a/lang/gcc13-devel/distinfo
+++ b/lang/gcc13-devel/distinfo
@@ -1,3 +1,3 @@
-TIMESTAMP = 1745138672
-SHA256 (gcc-13-20250418.tar.xz) = 3b7c8c92f0400802df12f250803d9733c775f59c527bf9a01babc60502d60cbb
-SIZE (gcc-13-20250418.tar.xz) = 84528940
+TIMESTAMP = 1745914194
+SHA256 (gcc-13-20250424.tar.xz) = ef2ed6f6aad4033719bf30b17b15b907a5bb6cc393264bfdb36ee502c1cdb21f
+SIZE (gcc-13-20250424.tar.xz) = 84551016
diff --git a/lang/gcc13-devel/files/patch-libgcc_unwind.inc b/lang/gcc13-devel/files/patch-libgcc_unwind.inc
index 42155a9ba48e..94fb7f65d5fb 100644
--- a/lang/gcc13-devel/files/patch-libgcc_unwind.inc
+++ b/lang/gcc13-devel/files/patch-libgcc_unwind.inc
@@ -13,6 +13,9 @@ at once).
Linux does not have libthr, so Linux is not affected. Moreover Linux is likely
to build everything with GCC.
+This patch will become obsolete once all supported FreeBSD releases
+include commit 22e564c74eb20e14bd93fd9fdde20e38a29cfcf1.
+
--- libgcc/unwind.inc.orig 2025-04-12 08:18:17 UTC
+++ libgcc/unwind.inc
@@ -212,8 +212,8 @@ _Unwind_ForcedUnwind (struct _Unwind_Exception *exc,
diff --git a/lang/gcc13/Makefile b/lang/gcc13/Makefile
index fe54d1ef7c13..87a94678dcd1 100644
--- a/lang/gcc13/Makefile
+++ b/lang/gcc13/Makefile
@@ -1,6 +1,6 @@
PORTNAME= gcc
PORTVERSION= 13.3.0
-PORTREVISION= 2
+PORTREVISION= 3
CATEGORIES= lang
MASTER_SITES= GCC
PKGNAMESUFFIX= ${SUFFIX}
diff --git a/lang/gcc13/files/patch-libgcc_unwind.inc b/lang/gcc13/files/patch-libgcc_unwind.inc
new file mode 100644
index 000000000000..94fb7f65d5fb
--- /dev/null
+++ b/lang/gcc13/files/patch-libgcc_unwind.inc
@@ -0,0 +1,31 @@
+GCC generates instructions that require variables to be aligned in memory on
+certain CPUs. Our libthr does not have the required alignment so these CPUs fail
+to execute these instructions. The instructions generation is driven by CPUTYPE.
+Some CPUs are fine to execute these instructions on unaligned data.
+
+This patch explicitly forbids GCC to generate instructions that require
+alignment of the data.
+
+If the entire program is compiled by LLVM or GCC, there is no problem (with GCC
+everything is aligned, with LLVM vmovdqa is not used to assign both variables
+at once).
+
+Linux does not have libthr, so Linux is not affected. Moreover Linux is likely
+to build everything with GCC.
+
+This patch will become obsolete once all supported FreeBSD releases
+include commit 22e564c74eb20e14bd93fd9fdde20e38a29cfcf1.
+
+--- libgcc/unwind.inc.orig 2025-04-12 08:18:17 UTC
++++ libgcc/unwind.inc
+@@ -212,8 +212,8 @@ _Unwind_ForcedUnwind (struct _Unwind_Exception *exc,
+ uw_init_context (&this_context);
+ cur_context = this_context;
+
+- exc->private_1 = (_Unwind_Ptr) stop;
+- exc->private_2 = (_Unwind_Ptr) stop_argument;
++ __builtin_memcpy(&exc->private_1, &stop, sizeof(_Unwind_Ptr));
++ __builtin_memcpy(&exc->private_2, &stop_argument, sizeof(_Unwind_Ptr));
+
+ code = _Unwind_ForcedUnwind_Phase2 (exc, &cur_context, &frames);
+ if (code != _URC_INSTALL_CONTEXT)
diff --git a/lang/gcc14-devel/Makefile b/lang/gcc14-devel/Makefile
index 0f8296485ac9..380cba0092b3 100644
--- a/lang/gcc14-devel/Makefile
+++ b/lang/gcc14-devel/Makefile
@@ -1,5 +1,5 @@
PORTNAME= gcc
-PORTVERSION= 14.2.1.s20250419
+PORTVERSION= 14.2.1.s20250425
PORTEPOCH= 1
CATEGORIES= lang
MASTER_SITES= GCC/snapshots/${DIST_VERSION}
diff --git a/lang/gcc14-devel/distinfo b/lang/gcc14-devel/distinfo
index 1abee7712a26..7eb9e3c68123 100644
--- a/lang/gcc14-devel/distinfo
+++ b/lang/gcc14-devel/distinfo
@@ -1,3 +1,3 @@
-TIMESTAMP = 1745138924
-SHA256 (gcc-14-20250419.tar.xz) = 387ee936ef51312f80ff8be59a8ad84cb77f696682b423f58d011c1364c236de
-SIZE (gcc-14-20250419.tar.xz) = 88251960
+TIMESTAMP = 1745915178
+SHA256 (gcc-14-20250425.tar.xz) = 1994adadb9fa0ddcdadb0a1d0ac44a7530542b352272b8467e8b9f12aacbe97e
+SIZE (gcc-14-20250425.tar.xz) = 88293272
diff --git a/lang/gcc14-devel/files/patch-libgcc_unwind.inc b/lang/gcc14-devel/files/patch-libgcc_unwind.inc
index 42155a9ba48e..94fb7f65d5fb 100644
--- a/lang/gcc14-devel/files/patch-libgcc_unwind.inc
+++ b/lang/gcc14-devel/files/patch-libgcc_unwind.inc
@@ -13,6 +13,9 @@ at once).
Linux does not have libthr, so Linux is not affected. Moreover Linux is likely
to build everything with GCC.
+This patch will become obsolete once all supported FreeBSD releases
+include commit 22e564c74eb20e14bd93fd9fdde20e38a29cfcf1.
+
--- libgcc/unwind.inc.orig 2025-04-12 08:18:17 UTC
+++ libgcc/unwind.inc
@@ -212,8 +212,8 @@ _Unwind_ForcedUnwind (struct _Unwind_Exception *exc,
diff --git a/lang/gcc14/files/patch-libgcc_unwind.inc b/lang/gcc14/files/patch-libgcc_unwind.inc
index 42155a9ba48e..94fb7f65d5fb 100644
--- a/lang/gcc14/files/patch-libgcc_unwind.inc
+++ b/lang/gcc14/files/patch-libgcc_unwind.inc
@@ -13,6 +13,9 @@ at once).
Linux does not have libthr, so Linux is not affected. Moreover Linux is likely
to build everything with GCC.
+This patch will become obsolete once all supported FreeBSD releases
+include commit 22e564c74eb20e14bd93fd9fdde20e38a29cfcf1.
+
--- libgcc/unwind.inc.orig 2025-04-12 08:18:17 UTC
+++ libgcc/unwind.inc
@@ -212,8 +212,8 @@ _Unwind_ForcedUnwind (struct _Unwind_Exception *exc,
diff --git a/lang/gcc15-devel/Makefile b/lang/gcc15-devel/Makefile
index 5caf32b24cd0..4eed868d47df 100644
--- a/lang/gcc15-devel/Makefile
+++ b/lang/gcc15-devel/Makefile
@@ -1,6 +1,5 @@
PORTNAME= gcc
-PORTVERSION= 15.0.1.s20250413
-PORTREVISION= 1
+PORTVERSION= 15.1.1.s20250426
CATEGORIES= lang
MASTER_SITES= GCC/snapshots/${DIST_VERSION}
PKGNAMESUFFIX= ${SUFFIX}-devel
diff --git a/lang/gcc15-devel/distinfo b/lang/gcc15-devel/distinfo
index 26336ce2eb47..c25e126fa010 100644
--- a/lang/gcc15-devel/distinfo
+++ b/lang/gcc15-devel/distinfo
@@ -1,3 +1,3 @@
-TIMESTAMP = 1744619901
-SHA256 (gcc-15-20250413.tar.xz) = f066fb74ce533d167fccb6429dc0819bdcc8eb43a992c8ad49020f8616ae2986
-SIZE (gcc-15-20250413.tar.xz) = 91915660
+TIMESTAMP = 1745914552
+SHA256 (gcc-15-20250426.tar.xz) = 5da29d2cff64251a61fbcc62bf6245710f05d2ccf8f49c8138142da700b699e7
+SIZE (gcc-15-20250426.tar.xz) = 92081764
diff --git a/lang/gcc15-devel/files/patch-libgcc_unwind.inc b/lang/gcc15-devel/files/patch-libgcc_unwind.inc
index 42155a9ba48e..94fb7f65d5fb 100644
--- a/lang/gcc15-devel/files/patch-libgcc_unwind.inc
+++ b/lang/gcc15-devel/files/patch-libgcc_unwind.inc
@@ -13,6 +13,9 @@ at once).
Linux does not have libthr, so Linux is not affected. Moreover Linux is likely
to build everything with GCC.
+This patch will become obsolete once all supported FreeBSD releases
+include commit 22e564c74eb20e14bd93fd9fdde20e38a29cfcf1.
+
--- libgcc/unwind.inc.orig 2025-04-12 08:18:17 UTC
+++ libgcc/unwind.inc
@@ -212,8 +212,8 @@ _Unwind_ForcedUnwind (struct _Unwind_Exception *exc,
diff --git a/lang/gcc15/Makefile b/lang/gcc15/Makefile
new file mode 100644
index 000000000000..c9444e5e22e8
--- /dev/null
+++ b/lang/gcc15/Makefile
@@ -0,0 +1,189 @@
+PORTNAME= gcc
+PORTVERSION= 15.1.0
+CATEGORIES= lang
+MASTER_SITES= GCC
+PKGNAMESUFFIX= ${SUFFIX}
+
+MAINTAINER= salvadore@FreeBSD.org
+COMMENT= GNU Compiler Collection 15
+WWW= https://gcc.gnu.org
+
+LICENSE= GPLv3 GPLv3RLE
+LICENSE_COMB= multi
+
+ONLY_FOR_ARCHS= aarch64 amd64 armv6 armv7 i386 powerpc powerpc64 powerpc64le
+
+LIB_DEPENDS= libgmp.so:math/gmp \
+ libmpfr.so:math/mpfr \
+ libmpc.so:math/mpc
+BUILD_DEPENDS+= ${LOCALBASE}/bin/as:devel/binutils
+RUN_DEPENDS+= ${LOCALBASE}/bin/as:devel/binutils
+.if defined(MAINTAINER_MODE)
+BUILD_DEPENDS+= runtest:misc/dejagnu
+.endif
+
+USES= compiler:c++11-lang cpe gmake iconv libtool makeinfo perl5 tar:xz
+USE_BINUTILS= yes
+USE_PERL5= build
+
+CONFLICTS= gcc15-devel
+
+CPE_VENDOR= gnu
+CPE_VERSION= ${GCC_VERSION}
+
+GCC_VERSION= ${PORTVERSION}
+SUFFIX= ${PORTVERSION:C/([0-9]+).*/\1/}
+CFLAGS:= ${CFLAGS:N-mretpoline} -D__USE_ISOC11
+CXXFLAGS:= ${CXXFLAGS:N-mretpoline}
+
+OPTIONS_DEFINE= GRAPHITE
+OPTIONS_DEFAULT_aarch64=STANDARD_BOOTSTRAP
+OPTIONS_DEFAULT_armv6= STANDARD_BOOTSTRAP
+OPTIONS_DEFAULT_armv7= STANDARD_BOOTSTRAP
+OPTIONS_DEFAULT_amd64= STANDARD_BOOTSTRAP
+OPTIONS_DEFAULT_i386= STANDARD_BOOTSTRAP
+OPTIONS_DEFAULT_powerpc=LTO_BOOTSTRAP
+OPTIONS_DEFAULT_powerpc64=LTO_BOOTSTRAP
+OPTIONS_DEFAULT_powerpc64le=LTO_BOOTSTRAP
+OPTIONS_RADIO= BOOTSTRAP
+OPTIONS_RADIO_BOOTSTRAP= LTO_BOOTSTRAP STANDARD_BOOTSTRAP
+LTO_BOOTSTRAP_DESC= Build using a full LTO bootstrap
+STANDARD_BOOTSTRAP_DESC= Build using a full bootstrap without LTO
+GRAPHITE_DESC= Support for Graphite loop optimizations
+
+.if exists(/usr/lib32/libc.so)
+OPTIONS_DEFINE_amd64+= MULTILIB
+OPTIONS_DEFAULT_amd64+= MULTILIB
+OPTIONS_DEFINE_powerpc64+= MULTILIB
+#OPTIONS_DEFAULT_powerpc64+= MULTILIB # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105010
+MULTILIB_DESC= Build support for 32-bit and 64-bit targets
+MULTILIB_CONFIGURE_ENABLE= multilib
+.else
+CONFIGURE_ARGS+= --disable-multilib
+.endif
+
+.if defined(CPUTYPE) && ${CPUTYPE:Mg[3-5]}
+CFLAGS:= ${CFLAGS:S/mcpu=g/mcpu=G/}
+CXXFLAGS:= ${CFLAGS:S/mcpu=g/mcpu=G/}
+.endif
+
+GRAPHITE_LIB_DEPENDS= libisl.so:devel/isl
+GRAPHITE_CONFIGURE_WITH+= isl
+
+.include <bsd.port.pre.mk>
+
+.if ${ARCH} == amd64
+CONFIGURE_TARGET= x86_64-portbld-${OPSYS:tl}${OSREL}
+
+.elif ${ARCH} == powerpc64
+CONFIGURE_ARGS+= --with-abi=elfv2
+USE_GCC= yes
+
+.elif ${ARCH} == powerpc64le
+USE_GCC= yes
+.endif
+
+.if ${ARCH} == i386
+LANGUAGES:= c,c++,objc,fortran
+.else
+LANGUAGES:= c,c++,objc,fortran,jit
+.endif
+TARGLIB= ${PREFIX}/lib/gcc${SUFFIX}
+TARGLIB32= ${PREFIX}/lib32 # The version information is added later
+LIBEXEC= ${PREFIX}/libexec/gcc${SUFFIX}
+GNU_CONFIGURE= yes
+GNU_CONFIGURE_MANPREFIX=${PREFIX}/share
+CONFIGURE_OUTSOURCE= yes
+.if empty(PORT_OPTIONS:M*BOOTSTRAP)
+CONFIGURE_ARGS+=--disable-bootstrap
+.elif ${PORT_OPTIONS:MLTO_BOOTSTRAP}
+CONFIGURE_ARGS+=--with-build-config=bootstrap-lto-noplugin
+ALL_TARGET= bootstrap-lean
+PIE_UNSAFE= yes
+.else
+CONFIGURE_ARGS+=--with-build-config=bootstrap-debug
+ALL_TARGET= bootstrap-lean
+PIE_UNSAFE= yes
+.endif
+INSTALL_TARGET= install-strip
+.if ${UID} != 0
+BINMODE= 755
+.endif
+CONFIGURE_ARGS+=--disable-nls \
+ --disable-libssp \
+ --enable-gnu-indirect-function \
+ --enable-host-shared \
+ --enable-plugin \
+ --libdir=${TARGLIB} \
+ --libexecdir=${LIBEXEC} \
+ --program-suffix=${SUFFIX} \
+ --with-as=${LOCALBASE}/bin/as \
+ --with-gmp=${LOCALBASE} \
+ --with-gxx-include-dir=${TARGLIB}/include/c++/ \
+ --with-gxx-libcxx-include-dir=/usr/include/c++/v1 \
+ --with-ld=${LOCALBASE}/bin/ld \
+ ${ICONV_CONFIGURE_ARG} \
+ --with-pkgversion="FreeBSD Ports Collection" \
+ --with-system-zlib \
+ --without-zstd
+MAKE_ARGS+= MAKEINFOFLAGS="--no-split"
+USE_LDCONFIG= ${TARGLIB}
+PLIST_SUB+= GCC_VERSION=${GCC_VERSION} \
+ GNU_HOST=${CONFIGURE_TARGET} \
+ SUFFIX=${SUFFIX}
+INFO= gcc${SUFFIX}/cpp \
+ gcc${SUFFIX}/cppinternals \
+ gcc${SUFFIX}/gcc \
+ gcc${SUFFIX}/gccinstall \
+ gcc${SUFFIX}/gccint \
+ gcc${SUFFIX}/gfortran \
+ gcc${SUFFIX}/libgccjit \
+ gcc${SUFFIX}/libgomp
+# Release tarballs (as opposed to snapshots) always carry this.
+INFO+= gcc${SUFFIX}/libquadmath \
+ gcc${SUFFIX}/libitm
+SUB_FILES= pkg-message
+SUB_LIST+= TARGLIB=${TARGLIB}
+
+CONFIGURE_ARGS+=--enable-languages=${LANGUAGES}
+
+.if (${ARCH} == amd64 || ${ARCH} == powerpc64) && ${PORT_OPTIONS:MMULTILIB}
+USE_LDCONFIG32= ${TARGLIB32}/gcc${SUFFIX}
+.endif
+
+pre-everything::
+ @${ECHO_MSG} "Making GCC ${PORTVERSION} for ${CONFIGURE_TARGET} [${LANGUAGES}]"
+
+pre-configure:
+ cd ${WRKSRC} ; contrib/gcc_update --touch
+ @${RM} ${WRKSRC}/gcc/*/*.info*
+
+.if defined(MAINTAINER_MODE)
+full-regression-test: build
+ cd ${TEST_WRKSRC}; ${MAKE_CMD} -sk check \
+ ; ${WRKSRC}/contrib/test_summary
+.endif
+
+post-stage:
+ ${RM} ${STAGEDIR}${PREFIX}/share/man/man7/*
+ ${RM} -r ${STAGEDIR}${TARGLIB}/gcc/*/${GCC_VERSION}/include-fixed/
+ # Install ISO_Fortran_binding.h in an easily findable directory
+ ${MKDIR} ${STAGEDIR}${PREFIX}/include/gcc${SUFFIX}
+ ${INSTALL_DATA} ${STAGEDIR}${PREFIX}/lib/gcc${SUFFIX}/gcc/${CONFIGURE_TARGET}/${GCC_VERSION}/include/ISO_Fortran_binding.h \
+ ${STAGEDIR}${PREFIX}/include/gcc${SUFFIX}
+ # Add target libraries and include files to packaging list.
+ ${RM} ${WRKDIR}/PLIST.lib
+
+.if (${ARCH} == amd64 || ${ARCH} == powerpc64) && ${PORT_OPTIONS:MMULTILIB}
+ ${MKDIR} ${STAGEDIR}${TARGLIB32}
+ ${MV} ${STAGEDIR}${PREFIX}/lib/lib32 ${STAGEDIR}${TARGLIB32}/gcc${SUFFIX}
+.endif
+
+.for d in ${TARGLIB:S/^${PREFIX}\///} ${TARGLIB32:S/^${PREFIX}\///} ${LIBEXEC:S/^${PREFIX}\///}
+ cd ${STAGEDIR}${PREFIX} ; if [ -d $d ]; then \
+ ${FIND} $d -type f -o -type l >>${WRKDIR}/PLIST.lib ;\
+ fi
+.endfor
+ cd ${WRKDIR} ; ${SED} -i -e "/PLIST.lib/ r PLIST.lib" ${TMPPLIST}
+
+.include <bsd.port.post.mk>
diff --git a/lang/gcc15/distinfo b/lang/gcc15/distinfo
new file mode 100644
index 000000000000..3b6b15e9e125
--- /dev/null
+++ b/lang/gcc15/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1745940383
+SHA256 (gcc-15.1.0.tar.xz) = e2b09ec21660f01fecffb715e0120265216943f038d0e48a9868713e54f06cea
+SIZE (gcc-15.1.0.tar.xz) = 98268344
diff --git a/lang/gcc15/files/patch-arm-unwind-cxx-support b/lang/gcc15/files/patch-arm-unwind-cxx-support
new file mode 100644
index 000000000000..ec6959b9655c
--- /dev/null
+++ b/lang/gcc15/files/patch-arm-unwind-cxx-support
@@ -0,0 +1,106 @@
+--- UTC
+Index: gcc/ginclude/unwind-arm-common.h
+===================================================================
+--- gcc/ginclude/unwind-arm-common.h (revision 219113)
++++ gcc/ginclude/unwind-arm-common.h (working copy)
+@@ -82,7 +82,11 @@
+
+ struct _Unwind_Control_Block
+ {
++#ifdef __FreeBSD__
++ unsigned exception_class __attribute__((__mode__(__DI__)));
++#else
+ char exception_class[8];
++#endif
+ void (*exception_cleanup)(_Unwind_Reason_Code, _Unwind_Control_Block *);
+ /* Unwinder cache, private fields for the unwinder's use */
+ struct
+@@ -181,7 +185,11 @@
+
+ /* Support functions for the PR. */
+ #define _Unwind_Exception _Unwind_Control_Block
++#ifdef __FreeBSD__
++ typedef unsigned _Unwind_Exception_Class __attribute__((__mode__(__DI__)));
++#else
+ typedef char _Unwind_Exception_Class[8];
++#endif
+
+ void * _Unwind_GetLanguageSpecificData (_Unwind_Context *);
+ _Unwind_Ptr _Unwind_GetRegionStart (_Unwind_Context *);
+Index: libstdc++-v3/libsupc++/unwind-cxx.h
+===================================================================
+--- libstdc++-v3/libsupc++/unwind-cxx.h (revision 219147)
++++ libstdc++-v3/libsupc++/unwind-cxx.h (working copy)
+@@ -235,7 +235,7 @@
+ return reinterpret_cast<__cxa_dependent_exception *>(exc + 1) - 1;
+ }
+
+-#ifdef __ARM_EABI_UNWINDER__
++#if defined(__ARM_EABI_UNWINDER__) && !defined(__FreeBSD__)
+ static inline bool
+ __is_gxx_exception_class(_Unwind_Exception_Class c)
+ {
+@@ -309,13 +309,7 @@
+ c[6] = 'R';
+ c[7] = '\0';
+ }
+-
+-static inline void*
+-__gxx_caught_object(_Unwind_Exception* eo)
+-{
+- return (void*)eo->barrier_cache.bitpattern[0];
+-}
+-#else // !__ARM_EABI_UNWINDER__
++#else // !__ARM_EABI_UNWINDER__ || __FreeBSD__
+ // This is the primary exception class we report -- "GNUCC++\0".
+ const _Unwind_Exception_Class __gxx_primary_exception_class
+ = ((((((((_Unwind_Exception_Class) 'G'
+@@ -339,6 +333,16 @@
+ << 8 | (_Unwind_Exception_Class) '+')
+ << 8 | (_Unwind_Exception_Class) '\x01');
+
++const _Unwind_Exception_Class __gxx_forced_unwind_class
++= ((((((((_Unwind_Exception_Class) 'G'
++ << 8 | (_Unwind_Exception_Class) 'N')
++ << 8 | (_Unwind_Exception_Class) 'U')
++ << 8 | (_Unwind_Exception_Class) 'C')
++ << 8 | (_Unwind_Exception_Class) 'F')
++ << 8 | (_Unwind_Exception_Class) 'O')
++ << 8 | (_Unwind_Exception_Class) 'R')
++ << 8 | (_Unwind_Exception_Class) '\0');
++
+ static inline bool
+ __is_gxx_exception_class(_Unwind_Exception_Class c)
+ {
+@@ -346,6 +350,12 @@
+ || c == __gxx_dependent_exception_class;
+ }
+
++static inline bool
++__is_gxx_forced_unwind_class(_Unwind_Exception_Class c)
++{
++ return c == __gxx_forced_unwind_class;
++}
++
+ // Only checks for primary or dependent, but not that it is a C++ exception at
+ // all.
+ static inline bool
+@@ -357,7 +367,18 @@
+ #define __GXX_INIT_PRIMARY_EXCEPTION_CLASS(c) c = __gxx_primary_exception_class
+ #define __GXX_INIT_DEPENDENT_EXCEPTION_CLASS(c) \
+ c = __gxx_dependent_exception_class
++#define __GXX_INIT_FORCED_UNWIND_CLASS(c) c = __gxx_forced_unwind_class
++#endif // __ARM_EABI_UNWINDER__ && !__FreeBSD__
+
++#ifdef __ARM_EABI_UNWINDER__
++static inline void*
++__gxx_caught_object(_Unwind_Exception* eo)
++{
++ return (void*)eo->barrier_cache.bitpattern[0];
++}
++
++#else // !__ARM_EABI_UNWINDER__
++
+ // GNU C++ personality routine, Version 0.
+ extern "C" _Unwind_Reason_Code __gxx_personality_v0
+ (int, _Unwind_Action, _Unwind_Exception_Class,
diff --git a/lang/gcc15/files/patch-gcc_Makefile.in b/lang/gcc15/files/patch-gcc_Makefile.in
new file mode 100644
index 000000000000..127c87b1af79
--- /dev/null
+++ b/lang/gcc15/files/patch-gcc_Makefile.in
@@ -0,0 +1,19 @@
+--- gcc/Makefile.in.orig 2024-02-25 22:32:27 UTC
++++ gcc/Makefile.in
+@@ -671,6 +671,8 @@ libsubdir = $(libdir)/gcc/$(real_target_noncanonical)/
+
+ # Directory in which the compiler finds libraries etc.
+ libsubdir = $(libdir)/gcc/$(real_target_noncanonical)/$(version)$(accel_dir_suffix)
++# Directory in which the compiler finds headers.
++libsubincludedir = $(libdir)/gcc/$(target_alias)/$(version)/include
+ # Directory in which the compiler finds executables
+ libexecsubdir = $(libexecdir)/gcc/$(real_target_noncanonical)/$(version)$(accel_dir_suffix)
+ # Directory in which all plugin resources are installed
+@@ -3821,6 +3823,7 @@ installdirs:
+ # $(libdir)/gcc/include isn't currently searched by cpp.
+ installdirs:
+ $(mkinstalldirs) $(DESTDIR)$(libsubdir)
++ $(mkinstalldirs) $(DESTDIR)$(libsubincludedir)
+ $(mkinstalldirs) $(DESTDIR)$(libexecsubdir)
+ $(mkinstalldirs) $(DESTDIR)$(bindir)
+ $(mkinstalldirs) $(DESTDIR)$(includedir)
diff --git a/lang/gcc15/files/patch-gcc_configure b/lang/gcc15/files/patch-gcc_configure
new file mode 100644
index 000000000000..cc60593ba6f7
--- /dev/null
+++ b/lang/gcc15/files/patch-gcc_configure
@@ -0,0 +1,22 @@
+Enable support for .init_array and .fini_array, which FreeBSD supports
+since commit 83aa9cc00c2d83d05a0efe7a1496d8aab4a153bb in the src
+repository.
+
+There __FreeBSD_version is 1000009, so we start enabling the support
+from __FreeBSD_version == 1000010.
+--- gcc/configure.orig 2023-05-11 22:33:34 UTC
++++ gcc/configure
+@@ -24214,6 +24214,13 @@ EOF
+ #else
+ # if defined __sun__ && defined __svr4__
+ /* Solaris ld.so.1 supports .init_array/.fini_array since Solaris 8. */
++# elif defined __FreeBSD__
++# include <sys/param.h>
++# if __FreeBSD_version >= 1000010
++ /* FreeBSD supports .init_array/.fini_array since FreeBSD 10. */
++# else
++# error The C library not known to support .init_array/.fini_array
++# endif
+ # else
+ # error The C library not known to support .init_array/.fini_array
+ # endif
diff --git a/lang/gcc15/files/patch-gcc_jit_Make-lang.in b/lang/gcc15/files/patch-gcc_jit_Make-lang.in
new file mode 100644
index 000000000000..d5fdd6103146
--- /dev/null
+++ b/lang/gcc15/files/patch-gcc_jit_Make-lang.in
@@ -0,0 +1,14 @@
+--- gcc/jit/Make-lang.in.orig 2024-02-25 22:32:31 UTC
++++ gcc/jit/Make-lang.in
+@@ -360,9 +360,9 @@ jit.install-headers: installdirs
+ # Install hooks:
+ jit.install-headers: installdirs
+ $(INSTALL_DATA) $(srcdir)/jit/libgccjit.h \
+- $(DESTDIR)$(includedir)/libgccjit.h
++ $(DESTDIR)$(libsubincludedir)/libgccjit.h
+ $(INSTALL_DATA) $(srcdir)/jit/libgccjit++.h \
+- $(DESTDIR)$(includedir)/libgccjit++.h
++ $(DESTDIR)$(libsubincludedir)/libgccjit++.h
+
+ ifneq (,$(findstring mingw,$(target)))
+ jit.install-common: installdirs jit.install-headers
diff --git a/lang/gcc15/files/patch-gfortran-libgcc b/lang/gcc15/files/patch-gfortran-libgcc
new file mode 100644
index 000000000000..4363c2e11f36
--- /dev/null
+++ b/lang/gcc15/files/patch-gfortran-libgcc
@@ -0,0 +1,69 @@
+GCC has two runtime libraries: The static library libgcc.a (-lgcc) and
+the shared library libgcc_s.so (-lgcc_s). Both implement many of the
+same functions but they also each have their unique functions. When
+gcc links programs and libraries there are three possibilities:
+
+1. gcc -static-libgcc or gcc -static: -lgcc
+ => Just use libgcc.a.
+
+2. gcc -shared-libgcc: -lgcc_s -lgcc
+ => Link with libgcc_s first, so libgcc.a is only used for its unique
+ functions.
+
+3. gcc: -lgcc -Wl,--as-needed -lgcc_s -Wl,--no-as-needed
+ => Link with libgcc.a first so libgcc_s is only used for its unique
+ functions (_Unwind_* functions).
+
+Approach 3 is the default for gcc and it's also what clang and clang++ use;
+approach 2 is the default for gfortran, g++ and probably other front ends.
+
+This patch makes 3 the default for gfortran. It significantly reduces
+the use of libgcc_s. The _Unwind_* functions are also available in the
+old base system libgcc_s which means this reduces the need for
+-rpath /usr/local/lib/gccN in ports that depend on libraries built with
+gfortran. Consider a dependency tree like this:
+
+ prog -> libA -> libgcc_s (old base system libgcc_s is fine)
+ -> libB -> libgcc_s (libB built with gfortran, needs new libgcc_s)
+
+Here prog needs to be linked with -rpath /usr/local/lib/gccN even if it's
+a normal C program compiled with clang. Without -rpath it will fail to
+start because it loads old libgcc_s first as a dependency of libA and then
+it fails to load libB. With this patch libB works with old base system
+libgcc_s or may not need libgcc_s at all, so prog does not need to be
+linked with -rpath.
+
+Upstream is unlikely accept a patch like this because libgfortran calls
+some _Unwind_* functions and so always needs libgcc_s. Also because
+every Fortran program and library links to libgfortran it makes sense
+that option 2 above is the default. On FreeBSD where clang and GCC
+compiled code can be mixed and where multiple libgcc_s may be installed,
+option 3 is just a lot easier to deal with.
+
+The bug that sparked this is PR 208120 (but note there's a lot of
+misleading information in that bug. CMake is not actually doing
+anything wrong.)
+
+--- UTC
+--- gcc/fortran/gfortranspec.cc.orig 2022-01-23 22:32:06.000000000 +0000
++++ gcc/fortran/gfortranspec.cc 2022-02-06 08:56:31.018286000 +0000
+@@ -406,7 +406,7 @@
+ }
+ }
+
+-#ifdef ENABLE_SHARED_LIBGCC
++#if 0
+ if (library)
+ {
+ unsigned int i;
+--- libgfortran/Makefile.in.orig
++++ libgfortran/Makefile.in
+@@ -759,7 +759,7 @@
+ $(LTLDFLAGS) $(LIBQUADLIB) ../libbacktrace/libbacktrace.la \
+ $(HWCAP_LDFLAGS) \
+ $(LIBM) $(extra_darwin_ldflags_libgfortran) \
+- $(version_arg) -Wc,-shared-libgcc
++ $(version_arg)
+
+ libgfortran_la_DEPENDENCIES = $(version_dep) libgfortran.spec $(LIBQUADLIB_DEP)
+ cafexeclib_LTLIBRARIES = libcaf_single.la
diff --git a/lang/gcc15/files/patch-libcxxrt b/lang/gcc15/files/patch-libcxxrt
new file mode 100644
index 000000000000..4225df7aad1e
--- /dev/null
+++ b/lang/gcc15/files/patch-libcxxrt
@@ -0,0 +1,18 @@
+libc++ on FreeBSD always uses PathScale libcxxrt and cannot change to
+LLVM libc++abi without breaking backward compatibility. Besides, mixing
+different C++ ABIs is not supported unless subset via DT_FILTER.
+
+https://github.com/llvm/llvm-project/commit/35479ffb1251
+https://github.com/freebsd/freebsd-src/commit/cf56074e5271
+
+--- gcc/cp/g++spec.cc.orig 2022-07-31 22:32:16 UTC
++++ gcc/cp/g++spec.cc
+@@ -60,7 +60,7 @@ along with GCC; see the file COPYING3. If not see
+ #endif
+
+ #ifndef LIBCXXABI
+-#define LIBCXXABI "c++abi"
++#define LIBCXXABI "cxxrt"
+ #endif
+ #ifndef LIBCXXABI_PROFILE
+ #define LIBCXXABI_PROFILE LIBCXXABI
diff --git a/lang/gcc15/files/patch-libgcc_enable-execute-stack-mprotect.c b/lang/gcc15/files/patch-libgcc_enable-execute-stack-mprotect.c
new file mode 100644
index 000000000000..4645f084fef0
--- /dev/null
+++ b/lang/gcc15/files/patch-libgcc_enable-execute-stack-mprotect.c
@@ -0,0 +1,15 @@
+--- libgcc/enable-execute-stack-mprotect.c.orig 2024-11-23 12:39:04 UTC
++++ libgcc/enable-execute-stack-mprotect.c
+@@ -30,10 +30,11 @@ static int need_enable_exec_stack;
+
+ static int need_enable_exec_stack;
+
+-static void check_enabling (void) __attribute__ ((unused));
+ extern void __enable_execute_stack (void *);
+
+ #if defined __sun__ && defined __svr4__
++static void check_enabling (void) __attribute__ ((unused));
++
+ static void __attribute__ ((constructor))
+ check_enabling (void)
+ {
diff --git a/lang/gcc15/files/patch-libgcc_unwind.inc b/lang/gcc15/files/patch-libgcc_unwind.inc
new file mode 100644
index 000000000000..94fb7f65d5fb
--- /dev/null
+++ b/lang/gcc15/files/patch-libgcc_unwind.inc
@@ -0,0 +1,31 @@
+GCC generates instructions that require variables to be aligned in memory on
+certain CPUs. Our libthr does not have the required alignment so these CPUs fail
+to execute these instructions. The instructions generation is driven by CPUTYPE.
+Some CPUs are fine to execute these instructions on unaligned data.
+
+This patch explicitly forbids GCC to generate instructions that require
+alignment of the data.
+
+If the entire program is compiled by LLVM or GCC, there is no problem (with GCC
+everything is aligned, with LLVM vmovdqa is not used to assign both variables
+at once).
+
+Linux does not have libthr, so Linux is not affected. Moreover Linux is likely
+to build everything with GCC.
+
+This patch will become obsolete once all supported FreeBSD releases
+include commit 22e564c74eb20e14bd93fd9fdde20e38a29cfcf1.
+
+--- libgcc/unwind.inc.orig 2025-04-12 08:18:17 UTC
++++ libgcc/unwind.inc
+@@ -212,8 +212,8 @@ _Unwind_ForcedUnwind (struct _Unwind_Exception *exc,
+ uw_init_context (&this_context);
+ cur_context = this_context;
+
+- exc->private_1 = (_Unwind_Ptr) stop;
+- exc->private_2 = (_Unwind_Ptr) stop_argument;
++ __builtin_memcpy(&exc->private_1, &stop, sizeof(_Unwind_Ptr));
++ __builtin_memcpy(&exc->private_2, &stop_argument, sizeof(_Unwind_Ptr));
+
+ code = _Unwind_ForcedUnwind_Phase2 (exc, &cur_context, &frames);
+ if (code != _URC_INSTALL_CONTEXT)
diff --git a/lang/gcc15/files/patch-libsanitizer_asan_asan__linux.cpp b/lang/gcc15/files/patch-libsanitizer_asan_asan__linux.cpp
new file mode 100644
index 000000000000..f6c16d8730ee
--- /dev/null
+++ b/lang/gcc15/files/patch-libsanitizer_asan_asan__linux.cpp
@@ -0,0 +1,23 @@
+Since the vDSO shared librares on Linux and FreeBSD are called
+differently, the initialization order check fails on FreeBSD.
+This patch fixes it by ignoring [vdso] instead of linux-vdso.so.
+
+GCC gets the original file from the LLVM Project, so this patch should
+probably be upstreamed directly to the LLVM Project rather than to GCC.
+
+
+--- libsanitizer/asan/asan_linux.cpp.orig 2022-11-23 11:22:41 UTC
++++ libsanitizer/asan/asan_linux.cpp
+@@ -148,6 +148,12 @@ static int FindFirstDSOCallback(struct dl_phdr_info *i
+ return 0;
+ # endif
+
++# if SANITIZER_FREEBSD
++ // Ignore vDSO
++ if (internal_strncmp(info->dlpi_name, "[vdso]", sizeof("[vdso]") - 1) == 0)
++ return 0;
++# endif
++
+ *name = info->dlpi_name;
+ return 1;
+ }
diff --git a/lang/gcc15/files/patch-libsanitizer_asan_asan__thread.cpp b/lang/gcc15/files/patch-libsanitizer_asan_asan__thread.cpp
new file mode 100644
index 000000000000..61c0ccf1cd89
--- /dev/null
+++ b/lang/gcc15/files/patch-libsanitizer_asan_asan__thread.cpp
@@ -0,0 +1,13 @@
+--- libsanitizer/asan/asan_thread.cpp.orig 2024-01-12 13:45:52 UTC
++++ libsanitizer/asan/asan_thread.cpp
+@@ -323,7 +323,9 @@ void AsanThread::ClearShadowForThreadStackAndTLS() {
+ if (tls_begin_ != tls_end_) {
+ uptr tls_begin_aligned = RoundDownTo(tls_begin_, ASAN_SHADOW_GRANULARITY);
+ uptr tls_end_aligned = RoundUpTo(tls_end_, ASAN_SHADOW_GRANULARITY);
+- FastPoisonShadow(tls_begin_aligned, tls_end_aligned - tls_begin_aligned, 0);
++ FastPoisonShadowPartialRightRedzone(tls_begin_aligned,
++ tls_end_ - tls_begin_aligned,
++ tls_end_aligned - tls_end_, 0);
+ }
+ }
+
diff --git a/lang/gcc15/files/pkg-message.in b/lang/gcc15/files/pkg-message.in
new file mode 100644
index 000000000000..df3ea725ce59
--- /dev/null
+++ b/lang/gcc15/files/pkg-message.in
@@ -0,0 +1,13 @@
+[
+{ type: install
+ message: <<EOD
+To ensure binaries built with this toolchain find appropriate versions
+of the necessary run-time libraries, you may want to link using
+
+ -Wl,-rpath=%%TARGLIB%%
+
+For ports leveraging USE_GCC, USES=compiler, or USES=fortran this happens
+transparently.
+EOD
+}
+]
diff --git a/lang/gcc15/pkg-descr b/lang/gcc15/pkg-descr
new file mode 100644
index 000000000000..656284b17cdd
--- /dev/null
+++ b/lang/gcc15/pkg-descr
@@ -0,0 +1,3 @@
+GCC, the GNU Compiler Collection, supports a number of languages.
+This port installs the C, C++, and Fortran front ends as gcc15, g++15,
+and gfortran15, respectively.
diff --git a/lang/gcc15/pkg-help b/lang/gcc15/pkg-help
new file mode 100644
index 000000000000..9030bbb28d3f
--- /dev/null
+++ b/lang/gcc15/pkg-help
@@ -0,0 +1,3 @@
+Building this port with LTO_BOOTSTRAP enabled requires significant amounts of
+memory and time. Consider disabling LTO_BOOTSTRAP in favor of STANDARD_BOOTSTRAP
+(or disabling BOOTSTRAP altogether) in case that is a problem.
diff --git a/lang/gcc15/pkg-plist b/lang/gcc15/pkg-plist
new file mode 100644
index 000000000000..8dcc98c6dd52
--- /dev/null
+++ b/lang/gcc15/pkg-plist
@@ -0,0 +1,36 @@
+bin/%%GNU_HOST%%-c++%%SUFFIX%%
+bin/%%GNU_HOST%%-g++%%SUFFIX%%
+bin/%%GNU_HOST%%-gcc%%SUFFIX%%
+bin/%%GNU_HOST%%-gcc-%%GCC_VERSION%%
+bin/%%GNU_HOST%%-gcc-ar%%SUFFIX%%
+bin/%%GNU_HOST%%-gcc-nm%%SUFFIX%%
+bin/%%GNU_HOST%%-gcc-ranlib%%SUFFIX%%
+bin/%%GNU_HOST%%-gfortran%%SUFFIX%%
+bin/c++%%SUFFIX%%
+bin/cpp%%SUFFIX%%
+bin/g++%%SUFFIX%%
+bin/gcc%%SUFFIX%%
+bin/gcc-ar%%SUFFIX%%
+bin/gcc-nm%%SUFFIX%%
+bin/gcc-ranlib%%SUFFIX%%
+bin/gcov%%SUFFIX%%
+bin/gcov-dump%%SUFFIX%%
+bin/gcov-tool%%SUFFIX%%
+bin/gfortran%%SUFFIX%%
+bin/lto-dump%%SUFFIX%%
+include/gcc%%SUFFIX%%/ISO_Fortran_binding.h
+share/man/man1/cpp%%SUFFIX%%.1.gz
+share/man/man1/g++%%SUFFIX%%.1.gz
+share/man/man1/gcc%%SUFFIX%%.1.gz
+share/man/man1/gcov%%SUFFIX%%.1.gz
+share/man/man1/gcov-dump%%SUFFIX%%.1.gz
+share/man/man1/gcov-tool%%SUFFIX%%.1.gz
+share/man/man1/gfortran%%SUFFIX%%.1.gz
+share/man/man1/lto-dump%%SUFFIX%%.1.gz
+share/gcc-%%GCC_VERSION%%/python/libstdcxx/__init__.py
+share/gcc-%%GCC_VERSION%%/python/libstdcxx/v6/__init__.py
+share/gcc-%%GCC_VERSION%%/python/libstdcxx/v6/printers.py
+share/gcc-%%GCC_VERSION%%/python/libstdcxx/v6/xmethods.py
+@postexec if type ccache-update-links >/dev/null 2>&1; then ccache-update-links -v; fi
+@postunexec if type ccache-update-links >/dev/null 2>&1; then ccache-update-links -v; fi
+@comment Insert PLIST.lib here
diff --git a/lang/gcc16-devel/Makefile b/lang/gcc16-devel/Makefile
new file mode 100644
index 000000000000..a16af13a1f09
--- /dev/null
+++ b/lang/gcc16-devel/Makefile
@@ -0,0 +1,194 @@
+PORTNAME= gcc
+PORTVERSION= 16.0.0.s20250427
+CATEGORIES= lang
+MASTER_SITES= GCC/snapshots/${DIST_VERSION}
+PKGNAMESUFFIX= ${SUFFIX}-devel
+DISTNAME= gcc-${DIST_VERSION}
+
+MAINTAINER= salvadore@FreeBSD.org
+COMMENT= GNU Compiler Collection 16
+WWW= https://gcc.gnu.org
+
+LICENSE= GPLv3 GPLv3RLE
+LICENSE_COMB= multi
+
+ONLY_FOR_ARCHS= aarch64 amd64 armv6 armv7 i386 powerpc powerpc64 powerpc64le
+
+LIB_DEPENDS= libgmp.so:math/gmp \
+ libmpfr.so:math/mpfr \
+ libmpc.so:math/mpc
+BUILD_DEPENDS+= ${LOCALBASE}/bin/as:devel/binutils
+RUN_DEPENDS+= ${LOCALBASE}/bin/as:devel/binutils
+.if defined(MAINTAINER_MODE)
+BUILD_DEPENDS+= runtest:misc/dejagnu
+.endif
+
+USES= compiler:c++11-lang cpe gmake iconv libtool makeinfo perl5 tar:xz
+USE_BINUTILS= yes
+USE_PERL5= build
+
+CPE_VENDOR= gnu
+CPE_VERSION= ${GCC_VERSION}
+
+# DIST_VERSION relates to downloads, GCC_VERSION and SUFFIX to names
+# of executables and directories once installed. A PORTVERSION of
+# Y.2.1.s20140817 results in values of Y-20140817, Y.2.1, and Y
+# for these three.
+DIST_VERSION= ${PORTVERSION:C/([0-9]+).*\.s([0-9]+)/\1-\2/}
+GCC_VERSION= ${PORTVERSION:C/(.+)\.s[0-9]{8}/\1/}
+SUFFIX= ${PORTVERSION:C/([0-9]+).*/\1/}
+CFLAGS:= ${CFLAGS:N-mretpoline} -D__USE_ISOC11
+CXXFLAGS:= ${CXXFLAGS:N-mretpoline}
+
+OPTIONS_DEFINE= GRAPHITE
+OPTIONS_DEFAULT_aarch64=STANDARD_BOOTSTRAP
+OPTIONS_DEFAULT_armv6= STANDARD_BOOTSTRAP
+OPTIONS_DEFAULT_armv7= STANDARD_BOOTSTRAP
+OPTIONS_DEFAULT_amd64= STANDARD_BOOTSTRAP
+OPTIONS_DEFAULT_i386= STANDARD_BOOTSTRAP
+OPTIONS_DEFAULT_powerpc=LTO_BOOTSTRAP
+OPTIONS_DEFAULT_powerpc64=LTO_BOOTSTRAP
+OPTIONS_DEFAULT_powerpc64le=LTO_BOOTSTRAP
+OPTIONS_SINGLE= BOOTSTRAP
+OPTIONS_SINGLE_BOOTSTRAP= LTO_BOOTSTRAP STANDARD_BOOTSTRAP
+LTO_BOOTSTRAP_DESC= Build using a full LTO bootstrap
+STANDARD_BOOTSTRAP_DESC= Build using a full bootstrap without LTO
+GRAPHITE_DESC= Support for Graphite loop optimizations
+
+.if exists(/usr/lib32/libc.so)
+OPTIONS_DEFINE_amd64+= MULTILIB
+OPTIONS_DEFAULT_amd64+= MULTILIB
+OPTIONS_DEFINE_powerpc64+= MULTILIB
+#OPTIONS_DEFAULT_powerpc64+= MULTILIB # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105010
+MULTILIB_DESC= Build support for 32-bit and 64-bit targets
+MULTILIB_CONFIGURE_ENABLE= multilib
+.else
+CONFIGURE_ARGS+= --disable-multilib
+.endif
+
+.if defined(CPUTYPE) && ${CPUTYPE:Mg[3-5]}
+CFLAGS:= ${CFLAGS:S/mcpu=g/mcpu=G/}
+CXXFLAGS:= ${CFLAGS:S/mcpu=g/mcpu=G/}
+.endif
+
+GRAPHITE_LIB_DEPENDS= libisl.so:devel/isl
+GRAPHITE_CONFIGURE_WITH+= isl
+
+.include <bsd.port.pre.mk>
+
+.if ${ARCH} == amd64
+CONFIGURE_TARGET= x86_64-portbld-${OPSYS:tl}${OSREL}
+
+.elif ${ARCH} == powerpc64
+CONFIGURE_ARGS+= --with-abi=elfv2
+USE_GCC= yes
+
+.elif ${ARCH} == powerpc64le
+USE_GCC= yes
+.endif
+
+.if ${ARCH} == i386
+LANGUAGES:= c,c++,objc,fortran
+.else
+LANGUAGES:= c,c++,objc,fortran,jit
+.endif
+TARGLIB= ${PREFIX}/lib/gcc${SUFFIX}
+TARGLIB32= ${PREFIX}/lib32 # The version information is added later
+LIBEXEC= ${PREFIX}/libexec/gcc${SUFFIX}
+GNU_CONFIGURE= yes
+GNU_CONFIGURE_MANPREFIX=${PREFIX}/share
+CONFIGURE_OUTSOURCE= yes
+.if ${PORT_OPTIONS:MLTO_BOOTSTRAP}
+CONFIGURE_ARGS+=--with-build-config=bootstrap-lto-noplugin
+ALL_TARGET= bootstrap-lean
+PIE_UNSAFE= yes
+.else
+CONFIGURE_ARGS+=--with-build-config=bootstrap-debug
+ALL_TARGET= bootstrap-lean
+PIE_UNSAFE= yes
+.endif
+INSTALL_TARGET= install-strip
+.if ${UID} != 0
+BINMODE= 755
+.endif
+CONFIGURE_ARGS+=--disable-nls \
+ --disable-libssp \
+ --enable-gnu-indirect-function \
+ --enable-host-shared \
+ --enable-plugin \
+ --libdir=${TARGLIB} \
+ --libexecdir=${LIBEXEC} \
+ --program-suffix=${SUFFIX} \
+ --with-as=${LOCALBASE}/bin/as \
+ --with-gmp=${LOCALBASE} \
+ --with-gxx-include-dir=${TARGLIB}/include/c++/ \
+ --with-gxx-libcxx-include-dir=/usr/include/c++/v1 \
+ --with-ld=${LOCALBASE}/bin/ld \
+ ${ICONV_CONFIGURE_ARG} \
+ --with-pkgversion="FreeBSD Ports Collection" \
+ --with-system-zlib \
+ --without-zstd
+MAKE_ARGS+= MAKEINFOFLAGS="--no-split"
+USE_LDCONFIG= ${TARGLIB}
+PLIST_SUB+= GCC_VERSION=${GCC_VERSION} \
+ GNU_HOST=${CONFIGURE_TARGET} \
+ SUFFIX=${SUFFIX}
+INFO= gcc${SUFFIX}/cpp \
+ gcc${SUFFIX}/cppinternals \
+ gcc${SUFFIX}/gcc \
+ gcc${SUFFIX}/gccinstall \
+ gcc${SUFFIX}/gccint \
+ gcc${SUFFIX}/gfortran \
+ gcc${SUFFIX}/libgccjit \
+ gcc${SUFFIX}/libgomp
+.if ${ARCH} == amd64 || ${ARCH} == i386
+INFO+= gcc${SUFFIX}/libquadmath
+.endif
+.if ${ARCH} == amd64 || ${ARCH} == i386 || ${ARCH} == aarch64 || ${ARCH:Marmv?}
+INFO+= gcc${SUFFIX}/libitm
+.endif
+SUB_FILES= pkg-message
+SUB_LIST+= TARGLIB=${TARGLIB}
+
+CONFIGURE_ARGS+=--enable-languages=${LANGUAGES}
+
+.if (${ARCH} == amd64 || ${ARCH} == powerpc64) && ${PORT_OPTIONS:MMULTILIB}
+USE_LDCONFIG32= ${TARGLIB32}/gcc${SUFFIX}
+.endif
+
+pre-everything::
+ @${ECHO_MSG} "Making GCC ${PORTVERSION} for ${CONFIGURE_TARGET} [${LANGUAGES}]"
+
+pre-configure:
+ cd ${WRKSRC} ; contrib/gcc_update --touch
+ @${RM} ${WRKSRC}/gcc/*/*.info*
+
+.if defined(MAINTAINER_MODE)
+full-regression-test: build
+ cd ${TEST_WRKSRC}; ${MAKE_CMD} -sk check \
+ ; ${WRKSRC}/contrib/test_summary
+.endif
+
+post-stage:
+ ${RM} ${STAGEDIR}${PREFIX}/share/man/man7/*
+ ${RM} -r ${STAGEDIR}${TARGLIB}/gcc/*/${GCC_VERSION}/include-fixed/
+ # Install ISO_Fortran_binding.h in an easily findable directory
+ ${MKDIR} ${STAGEDIR}${PREFIX}/include/gcc${SUFFIX}
+ ${INSTALL_DATA} ${STAGEDIR}${PREFIX}/lib/gcc${SUFFIX}/gcc/${CONFIGURE_TARGET}/${GCC_VERSION}/include/ISO_Fortran_binding.h \
+ ${STAGEDIR}${PREFIX}/include/gcc${SUFFIX}
+ # Add target libraries and include files to packaging list.
+ ${RM} ${WRKDIR}/PLIST.lib
+
+.if (${ARCH} == amd64 || ${ARCH} == powerpc64) && ${PORT_OPTIONS:MMULTILIB}
+ ${MKDIR} ${STAGEDIR}${TARGLIB32}
+ ${MV} ${STAGEDIR}${PREFIX}/lib/lib32 ${STAGEDIR}${TARGLIB32}/gcc${SUFFIX}
+.endif
+
+.for d in ${TARGLIB:S/^${PREFIX}\///} ${TARGLIB32:S/^${PREFIX}\///} ${LIBEXEC:S/^${PREFIX}\///}
+ cd ${STAGEDIR}${PREFIX} ; if [ -d $d ]; then \
+ ${FIND} $d -type f -o -type l >>${WRKDIR}/PLIST.lib ;\
+ fi
+.endfor
+ cd ${WRKDIR} ; ${SED} -i -e "/PLIST.lib/ r PLIST.lib" ${TMPPLIST}
+
+.include <bsd.port.post.mk>
diff --git a/lang/gcc16-devel/distinfo b/lang/gcc16-devel/distinfo
new file mode 100644
index 000000000000..6fcbe70fb548
--- /dev/null
+++ b/lang/gcc16-devel/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1745932552
+SHA256 (gcc-16-20250427.tar.xz) = 545b46c123dcc303c2bcd319ceda174733c30cd4574f8ed732f582c3aba7af5e
+SIZE (gcc-16-20250427.tar.xz) = 92158556
diff --git a/lang/gcc16-devel/files/patch-arm-unwind-cxx-support b/lang/gcc16-devel/files/patch-arm-unwind-cxx-support
new file mode 100644
index 000000000000..ec6959b9655c
--- /dev/null
+++ b/lang/gcc16-devel/files/patch-arm-unwind-cxx-support
@@ -0,0 +1,106 @@
+--- UTC
+Index: gcc/ginclude/unwind-arm-common.h
+===================================================================
+--- gcc/ginclude/unwind-arm-common.h (revision 219113)
++++ gcc/ginclude/unwind-arm-common.h (working copy)
+@@ -82,7 +82,11 @@
+
+ struct _Unwind_Control_Block
+ {
++#ifdef __FreeBSD__
++ unsigned exception_class __attribute__((__mode__(__DI__)));
++#else
+ char exception_class[8];
++#endif
+ void (*exception_cleanup)(_Unwind_Reason_Code, _Unwind_Control_Block *);
+ /* Unwinder cache, private fields for the unwinder's use */
+ struct
+@@ -181,7 +185,11 @@
+
+ /* Support functions for the PR. */
+ #define _Unwind_Exception _Unwind_Control_Block
++#ifdef __FreeBSD__
++ typedef unsigned _Unwind_Exception_Class __attribute__((__mode__(__DI__)));
++#else
+ typedef char _Unwind_Exception_Class[8];
++#endif
+
+ void * _Unwind_GetLanguageSpecificData (_Unwind_Context *);
+ _Unwind_Ptr _Unwind_GetRegionStart (_Unwind_Context *);
+Index: libstdc++-v3/libsupc++/unwind-cxx.h
+===================================================================
+--- libstdc++-v3/libsupc++/unwind-cxx.h (revision 219147)
++++ libstdc++-v3/libsupc++/unwind-cxx.h (working copy)
+@@ -235,7 +235,7 @@
+ return reinterpret_cast<__cxa_dependent_exception *>(exc + 1) - 1;
+ }
+
+-#ifdef __ARM_EABI_UNWINDER__
++#if defined(__ARM_EABI_UNWINDER__) && !defined(__FreeBSD__)
+ static inline bool
+ __is_gxx_exception_class(_Unwind_Exception_Class c)
+ {
+@@ -309,13 +309,7 @@
+ c[6] = 'R';
+ c[7] = '\0';
+ }
+-
+-static inline void*
+-__gxx_caught_object(_Unwind_Exception* eo)
+-{
+- return (void*)eo->barrier_cache.bitpattern[0];
+-}
+-#else // !__ARM_EABI_UNWINDER__
++#else // !__ARM_EABI_UNWINDER__ || __FreeBSD__
+ // This is the primary exception class we report -- "GNUCC++\0".
+ const _Unwind_Exception_Class __gxx_primary_exception_class
+ = ((((((((_Unwind_Exception_Class) 'G'
+@@ -339,6 +333,16 @@
+ << 8 | (_Unwind_Exception_Class) '+')
+ << 8 | (_Unwind_Exception_Class) '\x01');
+
++const _Unwind_Exception_Class __gxx_forced_unwind_class
++= ((((((((_Unwind_Exception_Class) 'G'
++ << 8 | (_Unwind_Exception_Class) 'N')
++ << 8 | (_Unwind_Exception_Class) 'U')
++ << 8 | (_Unwind_Exception_Class) 'C')
++ << 8 | (_Unwind_Exception_Class) 'F')
++ << 8 | (_Unwind_Exception_Class) 'O')
++ << 8 | (_Unwind_Exception_Class) 'R')
++ << 8 | (_Unwind_Exception_Class) '\0');
++
+ static inline bool
+ __is_gxx_exception_class(_Unwind_Exception_Class c)
+ {
+@@ -346,6 +350,12 @@
+ || c == __gxx_dependent_exception_class;
+ }
+
++static inline bool
++__is_gxx_forced_unwind_class(_Unwind_Exception_Class c)
++{
++ return c == __gxx_forced_unwind_class;
++}
++
+ // Only checks for primary or dependent, but not that it is a C++ exception at
+ // all.
+ static inline bool
+@@ -357,7 +367,18 @@
+ #define __GXX_INIT_PRIMARY_EXCEPTION_CLASS(c) c = __gxx_primary_exception_class
+ #define __GXX_INIT_DEPENDENT_EXCEPTION_CLASS(c) \
+ c = __gxx_dependent_exception_class
++#define __GXX_INIT_FORCED_UNWIND_CLASS(c) c = __gxx_forced_unwind_class
++#endif // __ARM_EABI_UNWINDER__ && !__FreeBSD__
+
++#ifdef __ARM_EABI_UNWINDER__
++static inline void*
++__gxx_caught_object(_Unwind_Exception* eo)
++{
++ return (void*)eo->barrier_cache.bitpattern[0];
++}
++
++#else // !__ARM_EABI_UNWINDER__
++
+ // GNU C++ personality routine, Version 0.
+ extern "C" _Unwind_Reason_Code __gxx_personality_v0
+ (int, _Unwind_Action, _Unwind_Exception_Class,
diff --git a/lang/gcc16-devel/files/patch-gcc_Makefile.in b/lang/gcc16-devel/files/patch-gcc_Makefile.in
new file mode 100644
index 000000000000..127c87b1af79
--- /dev/null
+++ b/lang/gcc16-devel/files/patch-gcc_Makefile.in
@@ -0,0 +1,19 @@
+--- gcc/Makefile.in.orig 2024-02-25 22:32:27 UTC
++++ gcc/Makefile.in
+@@ -671,6 +671,8 @@ libsubdir = $(libdir)/gcc/$(real_target_noncanonical)/
+
+ # Directory in which the compiler finds libraries etc.
+ libsubdir = $(libdir)/gcc/$(real_target_noncanonical)/$(version)$(accel_dir_suffix)
++# Directory in which the compiler finds headers.
++libsubincludedir = $(libdir)/gcc/$(target_alias)/$(version)/include
+ # Directory in which the compiler finds executables
+ libexecsubdir = $(libexecdir)/gcc/$(real_target_noncanonical)/$(version)$(accel_dir_suffix)
+ # Directory in which all plugin resources are installed
+@@ -3821,6 +3823,7 @@ installdirs:
+ # $(libdir)/gcc/include isn't currently searched by cpp.
+ installdirs:
+ $(mkinstalldirs) $(DESTDIR)$(libsubdir)
++ $(mkinstalldirs) $(DESTDIR)$(libsubincludedir)
+ $(mkinstalldirs) $(DESTDIR)$(libexecsubdir)
+ $(mkinstalldirs) $(DESTDIR)$(bindir)
+ $(mkinstalldirs) $(DESTDIR)$(includedir)
diff --git a/lang/gcc16-devel/files/patch-gcc_configure b/lang/gcc16-devel/files/patch-gcc_configure
new file mode 100644
index 000000000000..cc60593ba6f7
--- /dev/null
+++ b/lang/gcc16-devel/files/patch-gcc_configure
@@ -0,0 +1,22 @@
+Enable support for .init_array and .fini_array, which FreeBSD supports
+since commit 83aa9cc00c2d83d05a0efe7a1496d8aab4a153bb in the src
+repository.
+
+There __FreeBSD_version is 1000009, so we start enabling the support
+from __FreeBSD_version == 1000010.
+--- gcc/configure.orig 2023-05-11 22:33:34 UTC
++++ gcc/configure
+@@ -24214,6 +24214,13 @@ EOF
+ #else
+ # if defined __sun__ && defined __svr4__
+ /* Solaris ld.so.1 supports .init_array/.fini_array since Solaris 8. */
++# elif defined __FreeBSD__
++# include <sys/param.h>
++# if __FreeBSD_version >= 1000010
++ /* FreeBSD supports .init_array/.fini_array since FreeBSD 10. */
++# else
++# error The C library not known to support .init_array/.fini_array
++# endif
+ # else
+ # error The C library not known to support .init_array/.fini_array
+ # endif
diff --git a/lang/gcc16-devel/files/patch-gcc_jit_Make-lang.in b/lang/gcc16-devel/files/patch-gcc_jit_Make-lang.in
new file mode 100644
index 000000000000..d5fdd6103146
--- /dev/null
+++ b/lang/gcc16-devel/files/patch-gcc_jit_Make-lang.in
@@ -0,0 +1,14 @@
+--- gcc/jit/Make-lang.in.orig 2024-02-25 22:32:31 UTC
++++ gcc/jit/Make-lang.in
+@@ -360,9 +360,9 @@ jit.install-headers: installdirs
+ # Install hooks:
+ jit.install-headers: installdirs
+ $(INSTALL_DATA) $(srcdir)/jit/libgccjit.h \
+- $(DESTDIR)$(includedir)/libgccjit.h
++ $(DESTDIR)$(libsubincludedir)/libgccjit.h
+ $(INSTALL_DATA) $(srcdir)/jit/libgccjit++.h \
+- $(DESTDIR)$(includedir)/libgccjit++.h
++ $(DESTDIR)$(libsubincludedir)/libgccjit++.h
+
+ ifneq (,$(findstring mingw,$(target)))
+ jit.install-common: installdirs jit.install-headers
diff --git a/lang/gcc16-devel/files/patch-gfortran-libgcc b/lang/gcc16-devel/files/patch-gfortran-libgcc
new file mode 100644
index 000000000000..4363c2e11f36
--- /dev/null
+++ b/lang/gcc16-devel/files/patch-gfortran-libgcc
@@ -0,0 +1,69 @@
+GCC has two runtime libraries: The static library libgcc.a (-lgcc) and
+the shared library libgcc_s.so (-lgcc_s). Both implement many of the
+same functions but they also each have their unique functions. When
+gcc links programs and libraries there are three possibilities:
+
+1. gcc -static-libgcc or gcc -static: -lgcc
+ => Just use libgcc.a.
+
+2. gcc -shared-libgcc: -lgcc_s -lgcc
+ => Link with libgcc_s first, so libgcc.a is only used for its unique
+ functions.
+
+3. gcc: -lgcc -Wl,--as-needed -lgcc_s -Wl,--no-as-needed
+ => Link with libgcc.a first so libgcc_s is only used for its unique
+ functions (_Unwind_* functions).
+
+Approach 3 is the default for gcc and it's also what clang and clang++ use;
+approach 2 is the default for gfortran, g++ and probably other front ends.
+
+This patch makes 3 the default for gfortran. It significantly reduces
+the use of libgcc_s. The _Unwind_* functions are also available in the
+old base system libgcc_s which means this reduces the need for
+-rpath /usr/local/lib/gccN in ports that depend on libraries built with
+gfortran. Consider a dependency tree like this:
+
+ prog -> libA -> libgcc_s (old base system libgcc_s is fine)
+ -> libB -> libgcc_s (libB built with gfortran, needs new libgcc_s)
+
+Here prog needs to be linked with -rpath /usr/local/lib/gccN even if it's
+a normal C program compiled with clang. Without -rpath it will fail to
+start because it loads old libgcc_s first as a dependency of libA and then
+it fails to load libB. With this patch libB works with old base system
+libgcc_s or may not need libgcc_s at all, so prog does not need to be
+linked with -rpath.
+
+Upstream is unlikely accept a patch like this because libgfortran calls
+some _Unwind_* functions and so always needs libgcc_s. Also because
+every Fortran program and library links to libgfortran it makes sense
+that option 2 above is the default. On FreeBSD where clang and GCC
+compiled code can be mixed and where multiple libgcc_s may be installed,
+option 3 is just a lot easier to deal with.
+
+The bug that sparked this is PR 208120 (but note there's a lot of
+misleading information in that bug. CMake is not actually doing
+anything wrong.)
+
+--- UTC
+--- gcc/fortran/gfortranspec.cc.orig 2022-01-23 22:32:06.000000000 +0000
++++ gcc/fortran/gfortranspec.cc 2022-02-06 08:56:31.018286000 +0000
+@@ -406,7 +406,7 @@
+ }
+ }
+
+-#ifdef ENABLE_SHARED_LIBGCC
++#if 0
+ if (library)
+ {
+ unsigned int i;
+--- libgfortran/Makefile.in.orig
++++ libgfortran/Makefile.in
+@@ -759,7 +759,7 @@
+ $(LTLDFLAGS) $(LIBQUADLIB) ../libbacktrace/libbacktrace.la \
+ $(HWCAP_LDFLAGS) \
+ $(LIBM) $(extra_darwin_ldflags_libgfortran) \
+- $(version_arg) -Wc,-shared-libgcc
++ $(version_arg)
+
+ libgfortran_la_DEPENDENCIES = $(version_dep) libgfortran.spec $(LIBQUADLIB_DEP)
+ cafexeclib_LTLIBRARIES = libcaf_single.la
diff --git a/lang/gcc16-devel/files/patch-libcxxrt b/lang/gcc16-devel/files/patch-libcxxrt
new file mode 100644
index 000000000000..4225df7aad1e
--- /dev/null
+++ b/lang/gcc16-devel/files/patch-libcxxrt
@@ -0,0 +1,18 @@
+libc++ on FreeBSD always uses PathScale libcxxrt and cannot change to
+LLVM libc++abi without breaking backward compatibility. Besides, mixing
+different C++ ABIs is not supported unless subset via DT_FILTER.
+
+https://github.com/llvm/llvm-project/commit/35479ffb1251
+https://github.com/freebsd/freebsd-src/commit/cf56074e5271
+
+--- gcc/cp/g++spec.cc.orig 2022-07-31 22:32:16 UTC
++++ gcc/cp/g++spec.cc
+@@ -60,7 +60,7 @@ along with GCC; see the file COPYING3. If not see
+ #endif
+
+ #ifndef LIBCXXABI
+-#define LIBCXXABI "c++abi"
++#define LIBCXXABI "cxxrt"
+ #endif
+ #ifndef LIBCXXABI_PROFILE
+ #define LIBCXXABI_PROFILE LIBCXXABI
diff --git a/lang/gcc16-devel/files/patch-libgcc_enable-execute-stack-mprotect.c b/lang/gcc16-devel/files/patch-libgcc_enable-execute-stack-mprotect.c
new file mode 100644
index 000000000000..4645f084fef0
--- /dev/null
+++ b/lang/gcc16-devel/files/patch-libgcc_enable-execute-stack-mprotect.c
@@ -0,0 +1,15 @@
+--- libgcc/enable-execute-stack-mprotect.c.orig 2024-11-23 12:39:04 UTC
++++ libgcc/enable-execute-stack-mprotect.c
+@@ -30,10 +30,11 @@ static int need_enable_exec_stack;
+
+ static int need_enable_exec_stack;
+
+-static void check_enabling (void) __attribute__ ((unused));
+ extern void __enable_execute_stack (void *);
+
+ #if defined __sun__ && defined __svr4__
++static void check_enabling (void) __attribute__ ((unused));
++
+ static void __attribute__ ((constructor))
+ check_enabling (void)
+ {
diff --git a/lang/gcc16-devel/files/patch-libgcc_unwind.inc b/lang/gcc16-devel/files/patch-libgcc_unwind.inc
new file mode 100644
index 000000000000..94fb7f65d5fb
--- /dev/null
+++ b/lang/gcc16-devel/files/patch-libgcc_unwind.inc
@@ -0,0 +1,31 @@
+GCC generates instructions that require variables to be aligned in memory on
+certain CPUs. Our libthr does not have the required alignment so these CPUs fail
+to execute these instructions. The instructions generation is driven by CPUTYPE.
+Some CPUs are fine to execute these instructions on unaligned data.
+
+This patch explicitly forbids GCC to generate instructions that require
+alignment of the data.
+
+If the entire program is compiled by LLVM or GCC, there is no problem (with GCC
+everything is aligned, with LLVM vmovdqa is not used to assign both variables
+at once).
+
+Linux does not have libthr, so Linux is not affected. Moreover Linux is likely
+to build everything with GCC.
+
+This patch will become obsolete once all supported FreeBSD releases
+include commit 22e564c74eb20e14bd93fd9fdde20e38a29cfcf1.
+
+--- libgcc/unwind.inc.orig 2025-04-12 08:18:17 UTC
++++ libgcc/unwind.inc
+@@ -212,8 +212,8 @@ _Unwind_ForcedUnwind (struct _Unwind_Exception *exc,
+ uw_init_context (&this_context);
+ cur_context = this_context;
+
+- exc->private_1 = (_Unwind_Ptr) stop;
+- exc->private_2 = (_Unwind_Ptr) stop_argument;
++ __builtin_memcpy(&exc->private_1, &stop, sizeof(_Unwind_Ptr));
++ __builtin_memcpy(&exc->private_2, &stop_argument, sizeof(_Unwind_Ptr));
+
+ code = _Unwind_ForcedUnwind_Phase2 (exc, &cur_context, &frames);
+ if (code != _URC_INSTALL_CONTEXT)
diff --git a/lang/gcc16-devel/files/patch-libsanitizer_asan_asan__linux.cpp b/lang/gcc16-devel/files/patch-libsanitizer_asan_asan__linux.cpp
new file mode 100644
index 000000000000..f6c16d8730ee
--- /dev/null
+++ b/lang/gcc16-devel/files/patch-libsanitizer_asan_asan__linux.cpp
@@ -0,0 +1,23 @@
+Since the vDSO shared librares on Linux and FreeBSD are called
+differently, the initialization order check fails on FreeBSD.
+This patch fixes it by ignoring [vdso] instead of linux-vdso.so.
+
+GCC gets the original file from the LLVM Project, so this patch should
+probably be upstreamed directly to the LLVM Project rather than to GCC.
+
+
+--- libsanitizer/asan/asan_linux.cpp.orig 2022-11-23 11:22:41 UTC
++++ libsanitizer/asan/asan_linux.cpp
+@@ -148,6 +148,12 @@ static int FindFirstDSOCallback(struct dl_phdr_info *i
+ return 0;
+ # endif
+
++# if SANITIZER_FREEBSD
++ // Ignore vDSO
++ if (internal_strncmp(info->dlpi_name, "[vdso]", sizeof("[vdso]") - 1) == 0)
++ return 0;
++# endif
++
+ *name = info->dlpi_name;
+ return 1;
+ }
diff --git a/lang/gcc16-devel/files/patch-libsanitizer_asan_asan__thread.cpp b/lang/gcc16-devel/files/patch-libsanitizer_asan_asan__thread.cpp
new file mode 100644
index 000000000000..61c0ccf1cd89
--- /dev/null
+++ b/lang/gcc16-devel/files/patch-libsanitizer_asan_asan__thread.cpp
@@ -0,0 +1,13 @@
+--- libsanitizer/asan/asan_thread.cpp.orig 2024-01-12 13:45:52 UTC
++++ libsanitizer/asan/asan_thread.cpp
+@@ -323,7 +323,9 @@ void AsanThread::ClearShadowForThreadStackAndTLS() {
+ if (tls_begin_ != tls_end_) {
+ uptr tls_begin_aligned = RoundDownTo(tls_begin_, ASAN_SHADOW_GRANULARITY);
+ uptr tls_end_aligned = RoundUpTo(tls_end_, ASAN_SHADOW_GRANULARITY);
+- FastPoisonShadow(tls_begin_aligned, tls_end_aligned - tls_begin_aligned, 0);
++ FastPoisonShadowPartialRightRedzone(tls_begin_aligned,
++ tls_end_ - tls_begin_aligned,
++ tls_end_aligned - tls_end_, 0);
+ }
+ }
+
diff --git a/lang/gcc16-devel/files/pkg-message.in b/lang/gcc16-devel/files/pkg-message.in
new file mode 100644
index 000000000000..df3ea725ce59
--- /dev/null
+++ b/lang/gcc16-devel/files/pkg-message.in
@@ -0,0 +1,13 @@
+[
+{ type: install
+ message: <<EOD
+To ensure binaries built with this toolchain find appropriate versions
+of the necessary run-time libraries, you may want to link using
+
+ -Wl,-rpath=%%TARGLIB%%
+
+For ports leveraging USE_GCC, USES=compiler, or USES=fortran this happens
+transparently.
+EOD
+}
+]
diff --git a/lang/gcc16-devel/pkg-descr b/lang/gcc16-devel/pkg-descr
new file mode 100644
index 000000000000..ef9ec53c6ab2
--- /dev/null
+++ b/lang/gcc16-devel/pkg-descr
@@ -0,0 +1,3 @@
+GCC, the GNU Compiler Collection, supports a number of languages.
+This port installs the C, C++, and Fortran front ends as gcc16, g++16,
+and gfortran16, respectively.
diff --git a/lang/gcc16-devel/pkg-help b/lang/gcc16-devel/pkg-help
new file mode 100644
index 000000000000..9030bbb28d3f
--- /dev/null
+++ b/lang/gcc16-devel/pkg-help
@@ -0,0 +1,3 @@
+Building this port with LTO_BOOTSTRAP enabled requires significant amounts of
+memory and time. Consider disabling LTO_BOOTSTRAP in favor of STANDARD_BOOTSTRAP
+(or disabling BOOTSTRAP altogether) in case that is a problem.
diff --git a/lang/gcc16-devel/pkg-plist b/lang/gcc16-devel/pkg-plist
new file mode 100644
index 000000000000..8dcc98c6dd52
--- /dev/null
+++ b/lang/gcc16-devel/pkg-plist
@@ -0,0 +1,36 @@
+bin/%%GNU_HOST%%-c++%%SUFFIX%%
+bin/%%GNU_HOST%%-g++%%SUFFIX%%
+bin/%%GNU_HOST%%-gcc%%SUFFIX%%
+bin/%%GNU_HOST%%-gcc-%%GCC_VERSION%%
+bin/%%GNU_HOST%%-gcc-ar%%SUFFIX%%
+bin/%%GNU_HOST%%-gcc-nm%%SUFFIX%%
+bin/%%GNU_HOST%%-gcc-ranlib%%SUFFIX%%
+bin/%%GNU_HOST%%-gfortran%%SUFFIX%%
+bin/c++%%SUFFIX%%
+bin/cpp%%SUFFIX%%
+bin/g++%%SUFFIX%%
+bin/gcc%%SUFFIX%%
+bin/gcc-ar%%SUFFIX%%
+bin/gcc-nm%%SUFFIX%%
+bin/gcc-ranlib%%SUFFIX%%
+bin/gcov%%SUFFIX%%
+bin/gcov-dump%%SUFFIX%%
+bin/gcov-tool%%SUFFIX%%
+bin/gfortran%%SUFFIX%%
+bin/lto-dump%%SUFFIX%%
+include/gcc%%SUFFIX%%/ISO_Fortran_binding.h
+share/man/man1/cpp%%SUFFIX%%.1.gz
+share/man/man1/g++%%SUFFIX%%.1.gz
+share/man/man1/gcc%%SUFFIX%%.1.gz
+share/man/man1/gcov%%SUFFIX%%.1.gz
+share/man/man1/gcov-dump%%SUFFIX%%.1.gz
+share/man/man1/gcov-tool%%SUFFIX%%.1.gz
+share/man/man1/gfortran%%SUFFIX%%.1.gz
+share/man/man1/lto-dump%%SUFFIX%%.1.gz
+share/gcc-%%GCC_VERSION%%/python/libstdcxx/__init__.py
+share/gcc-%%GCC_VERSION%%/python/libstdcxx/v6/__init__.py
+share/gcc-%%GCC_VERSION%%/python/libstdcxx/v6/printers.py
+share/gcc-%%GCC_VERSION%%/python/libstdcxx/v6/xmethods.py
+@postexec if type ccache-update-links >/dev/null 2>&1; then ccache-update-links -v; fi
+@postunexec if type ccache-update-links >/dev/null 2>&1; then ccache-update-links -v; fi
+@comment Insert PLIST.lib here
diff --git a/lang/ghc/Makefile b/lang/ghc/Makefile
index 5b61a79f7de4..b3f995dd1052 100644
--- a/lang/ghc/Makefile
+++ b/lang/ghc/Makefile
@@ -1,6 +1,6 @@
PORTNAME= ghc
PORTVERSION= ${GHC_VERSION}
-PORTREVISION?= 2
+PORTREVISION?= 0
CATEGORIES= lang haskell
MASTER_SITES= https://www.haskell.org/ghc/dist/${PORTVERSION}/:source \
LOCAL/arrowd/:boot
@@ -75,21 +75,21 @@ GMP_VARS_OFF= hadrian_gmp_arg=--bignum=native
PROFILE_VARS= enable_profile=YES hadrian_setting_profile=True
PROFILE_VARS_OFF= enable_profile=NO hadrian_setting_profile=False
-GHC_VERSION?= 9.6.6
+GHC_VERSION?= 9.6.7
LLVM_VERSION?= 15
BOOT_GHC_VERSION?= 9.2.8
# LLVM version that bootstrap compiler uses
BOOT_LLVM_VERSION?= 12
-BASE_PACKAGES?= Cabal-3.10.3.0 array-0.5.6.0 base-4.18.2.1 binary-0.8.9.1 \
- bytestring-0.11.5.3 containers-0.6.7 deepseq-1.4.8.1 \
- directory-1.3.8.5 exceptions-0.10.7 filepath-1.4.300.1 \
+BASE_PACKAGES?= Cabal-3.10.3.0 array-0.5.8.0 base-4.18.3.0 binary-0.8.9.1 \
+ bytestring-0.11.5.4 containers-0.6.7 deepseq-1.4.8.1 \
+ directory-1.3.8.5 exceptions-0.10.7 filepath-1.4.301.0 \
ghc-${GHC_VERSION} ghc-bignum-1.3 ghc-compact-0.1.0.0 \
ghc-prim-0.10.0 haskeline-0.8.2.1 hpc-0.6.2.0 \
integer-gmp-1.1 mtl-2.3.1 parsec-3.1.16.1 pretty-1.1.3.6 \
process-1.6.19.0 stm-2.5.1.0 template-haskell-2.20.0.0 \
terminfo-0.4.1.6 text-2.0.2 time-1.12.2 \
- transformers-0.6.1.0 unix-2.8.4.0 xhtml-3000.2.2.1
+ transformers-0.6.1.0 unix-2.8.6.0 xhtml-3000.2.2.1
.for pkg in ${BASE_PACKAGES}
PLIST_SUB+= ${pkg:C/-([0-9.])+//:tu}_VERSION=${pkg:C/^([^\.]*-)+//}
@@ -260,10 +260,6 @@ RUNHASKELL?= ${BOOT_INSTALL_DIR}/bin/runhaskell
RUNHASKELL?= ${LOCALBASE}/bin/runhaskell
.endif
-.PHONY: fixup-plist
-fixup-plist:
- ${RUNHASKELL} ${PATCHDIR}/fixup-plist.hs ${.CURDIR}/pkg-plist
-
# Create a bootstrap compiler tar ball: run this in an interactive poudriere jail
# Set all OPTIONS to OFF when generating bootstraps
.PHONY: create-bootstrap
diff --git a/lang/ghc/distinfo b/lang/ghc/distinfo
index f15f3bc36ba3..1bf8de21de8b 100644
--- a/lang/ghc/distinfo
+++ b/lang/ghc/distinfo
@@ -1,14 +1,14 @@
-TIMESTAMP = 1720354511
-SHA256 (ghc-9.6.6-src.tar.xz) = 008f7a04d89ad10baae6486c96645d7d726aaac7e1476199f6dd86c6bd9977ad
-SIZE (ghc-9.6.6-src.tar.xz) = 29443464
+TIMESTAMP = 1746281969
+SHA256 (ghc-9.6.7-src.tar.xz) = d053bf6ce1d588a75cfe8c9316269486e9d8fb89dcdf6fd92836fa2e3df61305
+SIZE (ghc-9.6.7-src.tar.xz) = 31770824
SHA256 (ghc-9.4.8-src.tar.xz) = 0bf407eb67fe3e3c24b0f4c8dea8cb63e07f63ca0f76cf2058565143507ab85e
SIZE (ghc-9.4.8-src.tar.xz) = 28655220
SHA256 (ghc-9.2.8-src.tar.xz) = 5f13d1786bf4fd12f4b45faa37abedb5bb3f36d5e58f7da5307e8bfe88a567a1
SIZE (ghc-9.2.8-src.tar.xz) = 24661260
SHA256 (ghc-8.10.7-src.tar.xz) = e3eef6229ce9908dfe1ea41436befb0455fefb1932559e860ad4c606b0d03c9d
SIZE (ghc-8.10.7-src.tar.xz) = 19932668
-SHA256 (hadrian-9.6.6-boot.tar.gz) = a5a7e6721d693c0e004fecff5745e47b2ec0c703b8378ccc5144e20a76049f95
-SIZE (hadrian-9.6.6-boot.tar.gz) = 1495606
+SHA256 (hadrian-9.6.7-boot.tar.gz) = f81dc59b4aef59c62c645da7be0b1fb8720aba338c80004963a99bc1219d3a05
+SIZE (hadrian-9.6.7-boot.tar.gz) = 1495514
SHA256 (hadrian-9.4.8-boot.tar.gz) = 5eb060655686921b086645dcbdd6268f09bc66baf8cc76fce74dea9b8b55ab5d
SIZE (hadrian-9.4.8-boot.tar.gz) = 1495586
SHA256 (hadrian-9.2.8-boot.tar.gz) = 730412e1c17309670075be8f76dbca9ebadedfa10b758e605f9e67804e9e8ac5
diff --git a/lang/ghc/files/fixup-plist.hs b/lang/ghc/files/fixup-plist.hs
deleted file mode 100644
index 9b6ade1d5aa0..000000000000
--- a/lang/ghc/files/fixup-plist.hs
+++ /dev/null
@@ -1,30 +0,0 @@
-import Data.List
-import System.Environment
-
-main = do
- [pkgplist] <- getArgs
- plistLines <- lines <$> readFile pkgplist
- mapM (putStrLn . processLine2 . processLine1) plistLines
-
-processLine1 l
- | "%%DYNAMIC%%" `isPrefixOf` l ||
- "%%PROFILE%%" `isPrefixOf` l ||
- "%%GMP%%" `isPrefixOf` l ||
- "%%SIMPLE%%" `isPrefixOf` l = l
-
- | ".dyn_hi" `isSuffixOf` l ||
- "/ghc-iserv-dyn" `isSuffixOf` l ||
- ".so" `isSuffixOf` l = "%%DYNAMIC%%" ++ l
-
- | ".p_hi" `isSuffixOf` l ||
- "/ghc-iserv-prof" `isSuffixOf` l ||
- ".p_o" `isSuffixOf` l ||
- "_p.a" `isSuffixOf` l = "%%PROFILE%%" ++ l
-
- | otherwise = l
-
-processLine2 l
- | "%%GMP%%" `isPrefixOf` l ||
- "%%SIMPLE%%" `isPrefixOf` l = l
- | "/libCffi" `isInfixOf` l = "%%NODYNAMIC%%" ++ l
- | otherwise = l
diff --git a/lang/ghc/files/patch-hadrian_hadrian.cabal b/lang/ghc/files/patch-hadrian_hadrian.cabal
new file mode 100644
index 000000000000..7994110951d4
--- /dev/null
+++ b/lang/ghc/files/patch-hadrian_hadrian.cabal
@@ -0,0 +1,15 @@
+Hack the bounds to avoid re-rolling the bootstrap compiler.
+The bound was added due to https://gitlab.haskell.org/ghc/ghc/-/issues/24382
+but we somehow doesn't seem to be affected by this
+
+--- hadrian/hadrian.cabal.orig 2025-03-02 13:05:33 UTC
++++ hadrian/hadrian.cabal
+@@ -155,7 +155,7 @@ executable hadrian
+ , containers >= 0.5 && < 0.7
+ -- N.B. directory >=1.3.9 as earlier versions are
+ -- afflicted by #24382.
+- , directory >= 1.3.9.0 && < 1.4
++ , directory < 1.4
+ , extra >= 1.4.7
+ , filepath
+ , time
diff --git a/lang/ghc/files/patch-hadrian_src_Hadrian_Haskell_Cabal_Parse.hs b/lang/ghc/files/patch-hadrian_src_Hadrian_Haskell_Cabal_Parse.hs
index 1e59fb6d677e..528e592425f4 100644
--- a/lang/ghc/files/patch-hadrian_src_Hadrian_Haskell_Cabal_Parse.hs
+++ b/lang/ghc/files/patch-hadrian_src_Hadrian_Haskell_Cabal_Parse.hs
@@ -1,6 +1,6 @@
---- hadrian/src/Hadrian/Haskell/Cabal/Parse.hs.orig 2024-01-08 13:24:59 UTC
+--- hadrian/src/Hadrian/Haskell/Cabal/Parse.hs.orig 2025-03-02 13:05:33 UTC
+++ hadrian/src/Hadrian/Haskell/Cabal/Parse.hs
-@@ -320,8 +320,8 @@ write_inplace_conf pkg_path res_path pd lbi = do
+@@ -321,8 +321,8 @@ write_inplace_conf pkg_path res_path pd lbi = do
pkg_name = C.display (C.pkgName (CP.sourcePackageId installedPkgInfo))
final_ipi = installedPkgInfo {
Installed.includeDirs = concatMap fixupIncludeDir (Installed.includeDirs installedPkgInfo),
diff --git a/lang/ghc/files/patch-libraries_base_GHC_Event_KQueue.hsc b/lang/ghc/files/patch-libraries_base_GHC_Event_KQueue.hsc
deleted file mode 100644
index 1413a39d9705..000000000000
--- a/lang/ghc/files/patch-libraries_base_GHC_Event_KQueue.hsc
+++ /dev/null
@@ -1,45 +0,0 @@
-https://gitlab.haskell.org/ghc/ghc/-/merge_requests/13276
-
---- libraries/base/GHC/Event/KQueue.hsc.orig 2024-06-30 22:49:26 UTC
-+++ libraries/base/GHC/Event/KQueue.hsc
-@@ -44,8 +44,8 @@ import GHC.Event.Internal (Timeout(..))
- import GHC.Real (quotRem, fromIntegral)
- import GHC.Show (Show(show))
- import GHC.Event.Internal (Timeout(..))
--import System.Posix.Internals (c_close)
--import System.Posix.Types (Fd(..))
-+import System.Posix.Internals (c_close, c_getpid)
-+import System.Posix.Types (Fd(..), CPid)
- import qualified GHC.Event.Array as A
-
- #if defined(netbsd_HOST_OS)
-@@ -73,19 +73,26 @@ data KQueue = KQueue {
- data KQueue = KQueue {
- kqueueFd :: {-# UNPACK #-} !KQueueFd
- , kqueueEvents :: {-# UNPACK #-} !(A.Array Event)
-+ , kqueuePid :: {-# UNPACK #-} !CPid -- ^ pid, used to detect forks
- }
-
- new :: IO E.Backend
- new = do
- kqfd <- kqueue
- events <- A.new 64
-- let !be = E.backend poll modifyFd modifyFdOnce delete (KQueue kqfd events)
-+ pid <- c_getpid
-+ let !be = E.backend poll modifyFd modifyFdOnce delete (KQueue kqfd events pid)
- return be
-
- delete :: KQueue -> IO ()
- delete kq = do
-- _ <- c_close . fromKQueueFd . kqueueFd $ kq
-- return ()
-+ -- detect forks: the queue isn't inherited by a child process created with
-+ -- fork. Hence we mustn't try to close the old fd or we might close a random
-+ -- one (e.g. the one used by timerfd, cf #24672).
-+ pid <- c_getpid
-+ when (pid == kqueuePid kq) $ do
-+ _ <- c_close . fromKQueueFd . kqueueFd $ kq
-+ return ()
-
- modifyFd :: KQueue -> Fd -> E.Event -> E.Event -> IO Bool
- modifyFd kq fd oevt nevt = do
diff --git a/lang/ghc/pkg-plist.hadrian b/lang/ghc/pkg-plist.hadrian
index c022c2dc43b9..cacd6ae91bee 100644
--- a/lang/ghc/pkg-plist.hadrian
+++ b/lang/ghc/pkg-plist.hadrian
@@ -2853,6 +2853,27 @@ lib/ghc-%%GHC_VERSION%%/lib/%%GHC_ARCH%%-freebsd-ghc-%%GHC_VERSION%%/ghc-%%GHC_V
lib/ghc-%%GHC_VERSION%%/lib/%%GHC_ARCH%%-freebsd-ghc-%%GHC_VERSION%%/ghc-%%GHC_VERSION%%/GHC/Data/UnionFind.dyn_hi
lib/ghc-%%GHC_VERSION%%/lib/%%GHC_ARCH%%-freebsd-ghc-%%GHC_VERSION%%/ghc-%%GHC_VERSION%%/GHC/Data/UnionFind.hi
lib/ghc-%%GHC_VERSION%%/lib/%%GHC_ARCH%%-freebsd-ghc-%%GHC_VERSION%%/ghc-%%GHC_VERSION%%/GHC/Data/UnionFind.p_hi
+lib/ghc-%%GHC_VERSION%%/lib/%%GHC_ARCH%%-freebsd-ghc-%%GHC_VERSION%%/ghc-%%GHC_VERSION%%/GHC/Data/Word64Map.dyn_hi
+lib/ghc-%%GHC_VERSION%%/lib/%%GHC_ARCH%%-freebsd-ghc-%%GHC_VERSION%%/ghc-%%GHC_VERSION%%/GHC/Data/Word64Map.hi
+lib/ghc-%%GHC_VERSION%%/lib/%%GHC_ARCH%%-freebsd-ghc-%%GHC_VERSION%%/ghc-%%GHC_VERSION%%/GHC/Data/Word64Map.p_hi
+lib/ghc-%%GHC_VERSION%%/lib/%%GHC_ARCH%%-freebsd-ghc-%%GHC_VERSION%%/ghc-%%GHC_VERSION%%/GHC/Data/Word64Map/Internal.dyn_hi
+lib/ghc-%%GHC_VERSION%%/lib/%%GHC_ARCH%%-freebsd-ghc-%%GHC_VERSION%%/ghc-%%GHC_VERSION%%/GHC/Data/Word64Map/Internal.hi
+lib/ghc-%%GHC_VERSION%%/lib/%%GHC_ARCH%%-freebsd-ghc-%%GHC_VERSION%%/ghc-%%GHC_VERSION%%/GHC/Data/Word64Map/Internal.p_hi
+lib/ghc-%%GHC_VERSION%%/lib/%%GHC_ARCH%%-freebsd-ghc-%%GHC_VERSION%%/ghc-%%GHC_VERSION%%/GHC/Data/Word64Map/Lazy.dyn_hi
+lib/ghc-%%GHC_VERSION%%/lib/%%GHC_ARCH%%-freebsd-ghc-%%GHC_VERSION%%/ghc-%%GHC_VERSION%%/GHC/Data/Word64Map/Lazy.hi
+lib/ghc-%%GHC_VERSION%%/lib/%%GHC_ARCH%%-freebsd-ghc-%%GHC_VERSION%%/ghc-%%GHC_VERSION%%/GHC/Data/Word64Map/Lazy.p_hi
+lib/ghc-%%GHC_VERSION%%/lib/%%GHC_ARCH%%-freebsd-ghc-%%GHC_VERSION%%/ghc-%%GHC_VERSION%%/GHC/Data/Word64Map/Strict.dyn_hi
+lib/ghc-%%GHC_VERSION%%/lib/%%GHC_ARCH%%-freebsd-ghc-%%GHC_VERSION%%/ghc-%%GHC_VERSION%%/GHC/Data/Word64Map/Strict.hi
+lib/ghc-%%GHC_VERSION%%/lib/%%GHC_ARCH%%-freebsd-ghc-%%GHC_VERSION%%/ghc-%%GHC_VERSION%%/GHC/Data/Word64Map/Strict.p_hi
+lib/ghc-%%GHC_VERSION%%/lib/%%GHC_ARCH%%-freebsd-ghc-%%GHC_VERSION%%/ghc-%%GHC_VERSION%%/GHC/Data/Word64Map/Strict/Internal.dyn_hi
+lib/ghc-%%GHC_VERSION%%/lib/%%GHC_ARCH%%-freebsd-ghc-%%GHC_VERSION%%/ghc-%%GHC_VERSION%%/GHC/Data/Word64Map/Strict/Internal.hi
+lib/ghc-%%GHC_VERSION%%/lib/%%GHC_ARCH%%-freebsd-ghc-%%GHC_VERSION%%/ghc-%%GHC_VERSION%%/GHC/Data/Word64Map/Strict/Internal.p_hi
+lib/ghc-%%GHC_VERSION%%/lib/%%GHC_ARCH%%-freebsd-ghc-%%GHC_VERSION%%/ghc-%%GHC_VERSION%%/GHC/Data/Word64Set.dyn_hi
+lib/ghc-%%GHC_VERSION%%/lib/%%GHC_ARCH%%-freebsd-ghc-%%GHC_VERSION%%/ghc-%%GHC_VERSION%%/GHC/Data/Word64Set.hi
+lib/ghc-%%GHC_VERSION%%/lib/%%GHC_ARCH%%-freebsd-ghc-%%GHC_VERSION%%/ghc-%%GHC_VERSION%%/GHC/Data/Word64Set.p_hi
+lib/ghc-%%GHC_VERSION%%/lib/%%GHC_ARCH%%-freebsd-ghc-%%GHC_VERSION%%/ghc-%%GHC_VERSION%%/GHC/Data/Word64Set/Internal.dyn_hi
+lib/ghc-%%GHC_VERSION%%/lib/%%GHC_ARCH%%-freebsd-ghc-%%GHC_VERSION%%/ghc-%%GHC_VERSION%%/GHC/Data/Word64Set/Internal.hi
+lib/ghc-%%GHC_VERSION%%/lib/%%GHC_ARCH%%-freebsd-ghc-%%GHC_VERSION%%/ghc-%%GHC_VERSION%%/GHC/Data/Word64Set/Internal.p_hi
lib/ghc-%%GHC_VERSION%%/lib/%%GHC_ARCH%%-freebsd-ghc-%%GHC_VERSION%%/ghc-%%GHC_VERSION%%/GHC/Driver/Backend.dyn_hi
lib/ghc-%%GHC_VERSION%%/lib/%%GHC_ARCH%%-freebsd-ghc-%%GHC_VERSION%%/ghc-%%GHC_VERSION%%/GHC/Driver/Backend.hi
lib/ghc-%%GHC_VERSION%%/lib/%%GHC_ARCH%%-freebsd-ghc-%%GHC_VERSION%%/ghc-%%GHC_VERSION%%/GHC/Driver/Backend.p_hi
@@ -4182,6 +4203,12 @@ lib/ghc-%%GHC_VERSION%%/lib/%%GHC_ARCH%%-freebsd-ghc-%%GHC_VERSION%%/ghc-%%GHC_V
lib/ghc-%%GHC_VERSION%%/lib/%%GHC_ARCH%%-freebsd-ghc-%%GHC_VERSION%%/ghc-%%GHC_VERSION%%/GHC/Utils/Constants.dyn_hi
lib/ghc-%%GHC_VERSION%%/lib/%%GHC_ARCH%%-freebsd-ghc-%%GHC_VERSION%%/ghc-%%GHC_VERSION%%/GHC/Utils/Constants.hi
lib/ghc-%%GHC_VERSION%%/lib/%%GHC_ARCH%%-freebsd-ghc-%%GHC_VERSION%%/ghc-%%GHC_VERSION%%/GHC/Utils/Constants.p_hi
+lib/ghc-%%GHC_VERSION%%/lib/%%GHC_ARCH%%-freebsd-ghc-%%GHC_VERSION%%/ghc-%%GHC_VERSION%%/GHC/Utils/Containers/Internal/BitUtil.dyn_hi
+lib/ghc-%%GHC_VERSION%%/lib/%%GHC_ARCH%%-freebsd-ghc-%%GHC_VERSION%%/ghc-%%GHC_VERSION%%/GHC/Utils/Containers/Internal/BitUtil.hi
+lib/ghc-%%GHC_VERSION%%/lib/%%GHC_ARCH%%-freebsd-ghc-%%GHC_VERSION%%/ghc-%%GHC_VERSION%%/GHC/Utils/Containers/Internal/BitUtil.p_hi
+lib/ghc-%%GHC_VERSION%%/lib/%%GHC_ARCH%%-freebsd-ghc-%%GHC_VERSION%%/ghc-%%GHC_VERSION%%/GHC/Utils/Containers/Internal/StrictPair.dyn_hi
+lib/ghc-%%GHC_VERSION%%/lib/%%GHC_ARCH%%-freebsd-ghc-%%GHC_VERSION%%/ghc-%%GHC_VERSION%%/GHC/Utils/Containers/Internal/StrictPair.hi
+lib/ghc-%%GHC_VERSION%%/lib/%%GHC_ARCH%%-freebsd-ghc-%%GHC_VERSION%%/ghc-%%GHC_VERSION%%/GHC/Utils/Containers/Internal/StrictPair.p_hi
lib/ghc-%%GHC_VERSION%%/lib/%%GHC_ARCH%%-freebsd-ghc-%%GHC_VERSION%%/ghc-%%GHC_VERSION%%/GHC/Utils/Error.dyn_hi
lib/ghc-%%GHC_VERSION%%/lib/%%GHC_ARCH%%-freebsd-ghc-%%GHC_VERSION%%/ghc-%%GHC_VERSION%%/GHC/Utils/Error.hi
lib/ghc-%%GHC_VERSION%%/lib/%%GHC_ARCH%%-freebsd-ghc-%%GHC_VERSION%%/ghc-%%GHC_VERSION%%/GHC/Utils/Error.p_hi
@@ -4239,6 +4266,12 @@ lib/ghc-%%GHC_VERSION%%/lib/%%GHC_ARCH%%-freebsd-ghc-%%GHC_VERSION%%/ghc-%%GHC_V
lib/ghc-%%GHC_VERSION%%/lib/%%GHC_ARCH%%-freebsd-ghc-%%GHC_VERSION%%/ghc-%%GHC_VERSION%%/GHC/Utils/Trace.dyn_hi
lib/ghc-%%GHC_VERSION%%/lib/%%GHC_ARCH%%-freebsd-ghc-%%GHC_VERSION%%/ghc-%%GHC_VERSION%%/GHC/Utils/Trace.hi
lib/ghc-%%GHC_VERSION%%/lib/%%GHC_ARCH%%-freebsd-ghc-%%GHC_VERSION%%/ghc-%%GHC_VERSION%%/GHC/Utils/Trace.p_hi
+lib/ghc-%%GHC_VERSION%%/lib/%%GHC_ARCH%%-freebsd-ghc-%%GHC_VERSION%%/ghc-%%GHC_VERSION%%/GHC/Utils/Unique.dyn_hi
+lib/ghc-%%GHC_VERSION%%/lib/%%GHC_ARCH%%-freebsd-ghc-%%GHC_VERSION%%/ghc-%%GHC_VERSION%%/GHC/Utils/Unique.hi
+lib/ghc-%%GHC_VERSION%%/lib/%%GHC_ARCH%%-freebsd-ghc-%%GHC_VERSION%%/ghc-%%GHC_VERSION%%/GHC/Utils/Unique.p_hi
+lib/ghc-%%GHC_VERSION%%/lib/%%GHC_ARCH%%-freebsd-ghc-%%GHC_VERSION%%/ghc-%%GHC_VERSION%%/GHC/Utils/Word64.dyn_hi
+lib/ghc-%%GHC_VERSION%%/lib/%%GHC_ARCH%%-freebsd-ghc-%%GHC_VERSION%%/ghc-%%GHC_VERSION%%/GHC/Utils/Word64.hi
+lib/ghc-%%GHC_VERSION%%/lib/%%GHC_ARCH%%-freebsd-ghc-%%GHC_VERSION%%/ghc-%%GHC_VERSION%%/GHC/Utils/Word64.p_hi
lib/ghc-%%GHC_VERSION%%/lib/%%GHC_ARCH%%-freebsd-ghc-%%GHC_VERSION%%/ghc-%%GHC_VERSION%%/GHC/Wasm/ControlFlow.dyn_hi
lib/ghc-%%GHC_VERSION%%/lib/%%GHC_ARCH%%-freebsd-ghc-%%GHC_VERSION%%/ghc-%%GHC_VERSION%%/GHC/Wasm/ControlFlow.hi
lib/ghc-%%GHC_VERSION%%/lib/%%GHC_ARCH%%-freebsd-ghc-%%GHC_VERSION%%/ghc-%%GHC_VERSION%%/GHC/Wasm/ControlFlow.p_hi
diff --git a/lang/go124/Makefile b/lang/go124/Makefile
index b75789bcfa27..6c5877f0e501 100644
--- a/lang/go124/Makefile
+++ b/lang/go124/Makefile
@@ -1,4 +1,4 @@
-DISTVERSION= 1.24.2
+DISTVERSION= 1.24.3
# Always set PORTREVISION explicitly as otherwise they are inherited from lang/go-devel
PORTREVISION= 0
MASTER_SITES= https://golang.org/dl/
diff --git a/lang/go124/distinfo b/lang/go124/distinfo
index 8786b1bdd7d3..86f143a69842 100644
--- a/lang/go124/distinfo
+++ b/lang/go124/distinfo
@@ -1,6 +1,6 @@
-TIMESTAMP = 1743558664
-SHA256 (go1.24.2.src.tar.gz) = 9dc77ffadc16d837a1bf32d99c624cb4df0647cee7b119edd9e7b1bcc05f2e00
-SIZE (go1.24.2.src.tar.gz) = 30787666
+TIMESTAMP = 1746623181
+SHA256 (go1.24.3.src.tar.gz) = 229c08b600b1446798109fae1f569228102c8473caba8104b6418cb5bc032878
+SIZE (go1.24.3.src.tar.gz) = 30789282
SHA256 (go1.23.7.freebsd-arm64.tar.gz) = 2b51c940898fad6708609495b9a27b5869cf5195381fc4a31a013006aa4eb156
SIZE (go1.23.7.freebsd-arm64.tar.gz) = 69903435
SHA256 (go1.23.7.freebsd-amd64.tar.gz) = c0e7a5ff1875eb79d7c2acfa1616718ad892c0b2637d56594fdc3332e313efd4
diff --git a/lang/julia/Makefile b/lang/julia/Makefile
index 529f181eef3b..a0c827ea4f5d 100644
--- a/lang/julia/Makefile
+++ b/lang/julia/Makefile
@@ -1,6 +1,6 @@
PORTNAME= julia
DISTVERSION= 1.10.3
-PORTREVISION= 6
+PORTREVISION= 7
DISTVERSIONSUFFIX= -full
CATEGORIES= lang math
MASTER_SITES= https://github.com/JuliaLang/${PORTNAME}/releases/download/v${DISTVERSION}/
diff --git a/lang/pharo/Makefile b/lang/pharo/Makefile
index 837c5db14e2d..e9cbfdcde9bf 100644
--- a/lang/pharo/Makefile
+++ b/lang/pharo/Makefile
@@ -1,5 +1,6 @@
PORTNAME= pharo
DISTVERSION= 10.2.0
+PORTREVISION= 1
DISTVERSIONSUFFIX= f4c5e2a
CATEGORIES= lang
MASTER_SITES= http://files.pharo.org/vm/pharo-spur64-headless/Linux-x86_64/source/
diff --git a/lang/quickjs-ng/Makefile b/lang/quickjs-ng/Makefile
index e1689f7f08a3..401c3af51810 100644
--- a/lang/quickjs-ng/Makefile
+++ b/lang/quickjs-ng/Makefile
@@ -1,5 +1,5 @@
PORTNAME= quickjs
-DISTVERSION= 0.9.0
+DISTVERSION= 0.10.0
DISTVERSIONPREFIX= v
CATEGORIES= lang devel
PKGNAMESUFFIX= -ng
diff --git a/lang/quickjs-ng/distinfo b/lang/quickjs-ng/distinfo
index 9c1178f5337b..c1ce7d5bc652 100644
--- a/lang/quickjs-ng/distinfo
+++ b/lang/quickjs-ng/distinfo
@@ -1,3 +1,3 @@
-TIMESTAMP = 1746032333
-SHA256 (quickjs-ng-quickjs-v0.9.0_GH0.tar.gz) = 77f9e79b42e2e7cff9517bae612431af47e120730286cb1dcfad0753bc160f10
-SIZE (quickjs-ng-quickjs-v0.9.0_GH0.tar.gz) = 816194
+TIMESTAMP = 1746467397
+SHA256 (quickjs-ng-quickjs-v0.10.0_GH0.tar.gz) = c54007e6ce9893b0074d53feac47c64a362900df20493110800c9e1f5c43427b
+SIZE (quickjs-ng-quickjs-v0.10.0_GH0.tar.gz) = 783751
diff --git a/lang/quickjs-ng/files/patch-CMakeLists.txt b/lang/quickjs-ng/files/patch-CMakeLists.txt
index b8ce45e00734..72d0174b9d0e 100644
--- a/lang/quickjs-ng/files/patch-CMakeLists.txt
+++ b/lang/quickjs-ng/files/patch-CMakeLists.txt
@@ -1,11 +1,28 @@
---- CMakeLists.txt.orig 2025-01-28 23:42:03 UTC
+--- CMakeLists.txt.orig 2025-05-01 21:30:10 UTC
+++ CMakeLists.txt
-@@ -28,8 +28,6 @@ if(NOT MSVC AND NOT IOS)
+@@ -39,8 +39,6 @@ if(NOT MSVC AND NOT IOS)
xcheck_add_c_compiler_flag(-Wall)
if(NOT MSVC AND NOT IOS)
- xcheck_add_c_compiler_flag(-Werror)
- xcheck_add_c_compiler_flag(-Wextra)
endif()
+ xcheck_add_c_compiler_flag(-Wformat=2)
xcheck_add_c_compiler_flag(-Wno-implicit-fallthrough)
- xcheck_add_c_compiler_flag(-Wno-sign-compare)
+@@ -418,10 +416,12 @@ if(NOT IOS)
+
+ if(NOT IOS)
+ file(STRINGS quickjs.h quickjs_h REGEX QJS_VERSION)
+- string(REGEX MATCHALL "([0-9])" QJS_VERSION "${quickjs_h}")
+- list(GET QJS_VERSION 0 QJS_VERSION_MAJOR)
+- list(GET QJS_VERSION 1 QJS_VERSION_MINOR)
+- list(GET QJS_VERSION 2 QJS_VERSION_PATCH)
++ string(REGEX MATCH "QJS_VERSION_MAJOR ([0-9]*)" _ "${quickjs_h}")
++ set(QJS_VERSION_MAJOR ${CMAKE_MATCH_1})
++ string(REGEX MATCH "QJS_VERSION_MINOR ([0-9]*)" _ "${quickjs_h}")
++ set(QJS_VERSION_MINOR ${CMAKE_MATCH_1})
++ string(REGEX MATCH "QJS_VERSION_PATCH ([0-9]*)" _ "${quickjs_h}")
++ set(QJS_VERSION_PATCH ${CMAKE_MATCH_1})
+ set_target_properties(qjs PROPERTIES
+ VERSION ${QJS_VERSION_MAJOR}.${QJS_VERSION_MINOR}.${QJS_VERSION_PATCH}
+ SOVERSION ${QJS_VERSION_MAJOR}
diff --git a/lang/quickjs/Makefile b/lang/quickjs/Makefile
index 2a5783bc4440..0a382adc5215 100644
--- a/lang/quickjs/Makefile
+++ b/lang/quickjs/Makefile
@@ -1,6 +1,5 @@
PORTNAME= quickjs
-DISTVERSION= 2024.01.13-20240727
-PORTREVISION= 2
+DISTVERSION= 2025.04.26-20250426
CATEGORIES= lang devel
#MASTER_SITES= https://bellard.org/${PORTNAME}/
#DISTNAME= ${PORTNAME}-${DISTVERSION:S/./-/g}
diff --git a/lang/quickjs/distinfo b/lang/quickjs/distinfo
index 68c3dc392c63..7637f8f4e79b 100644
--- a/lang/quickjs/distinfo
+++ b/lang/quickjs/distinfo
@@ -1,3 +1,3 @@
-TIMESTAMP = 1739453157
-SHA256 (bellard-quickjs-2024.01.13-20240727-6e2e68fd0896957f92eb6c242a2e048c1ef3cae0_GH0.tar.gz) = 3ceab2edf529ffc4ed4111e613e6878c8ffa4ca792d66a989f6a05fa35f9ec59
-SIZE (bellard-quickjs-2024.01.13-20240727-6e2e68fd0896957f92eb6c242a2e048c1ef3cae0_GH0.tar.gz) = 628637
+TIMESTAMP = 1746485237
+SHA256 (bellard-quickjs-2025.04.26-20250426-6e2e68fd0896957f92eb6c242a2e048c1ef3cae0_GH0.tar.gz) = 3ceab2edf529ffc4ed4111e613e6878c8ffa4ca792d66a989f6a05fa35f9ec59
+SIZE (bellard-quickjs-2025.04.26-20250426-6e2e68fd0896957f92eb6c242a2e048c1ef3cae0_GH0.tar.gz) = 628637
diff --git a/lang/rizin/Makefile b/lang/rizin/Makefile
index bd391e2468ad..84ee28c04047 100644
--- a/lang/rizin/Makefile
+++ b/lang/rizin/Makefile
@@ -1,6 +1,6 @@
PORTNAME= rizin
DISTVERSIONPREFIX= v
-DISTVERSION= 0.8.0
+DISTVERSION= 0.8.1
CATEGORIES= lang security shells
MAINTAINER= arrowd@FreeBSD.org
diff --git a/lang/rizin/distinfo b/lang/rizin/distinfo
index 69536203d5b9..689027e95966 100644
--- a/lang/rizin/distinfo
+++ b/lang/rizin/distinfo
@@ -1,6 +1,6 @@
-TIMESTAMP = 1745908880
-SHA256 (rizinorg-rizin-v0.8.0_GH0.tar.gz) = aab8d392fa6d8af2e8b048bc98f66763bcbaaae55d374a95b03c2232a4dda859
-SIZE (rizinorg-rizin-v0.8.0_GH0.tar.gz) = 8254719
+TIMESTAMP = 1746430615
+SHA256 (rizinorg-rizin-v0.8.1_GH0.tar.gz) = 7dc451968f426e846c04430f7d6d45f1402db8eed1afa902f0631c03f19bc22e
+SIZE (rizinorg-rizin-v0.8.1_GH0.tar.gz) = 8255059
SHA256 (rizinorg-rz-libdemangle-0031d1a_GH0.tar.gz) = 50ddfc40f2b6e80d2bedb56b0f29f796ab4384c2c2f5e84a867ab7bce8b58d66
SIZE (rizinorg-rz-libdemangle-0031d1a_GH0.tar.gz) = 180562
SHA256 (rizinorg-rizin-grammar-c-8158457_GH0.tar.gz) = 77f3a5ced05d6ac70d19d9ad783f04b412b8f61ae7a912f0d06884ff5e284df2
diff --git a/lang/rizin/files/patch-meson.build b/lang/rizin/files/patch-meson.build
deleted file mode 100644
index abea05cec04a..000000000000
--- a/lang/rizin/files/patch-meson.build
+++ /dev/null
@@ -1,11 +0,0 @@
---- meson.build.orig 2025-04-24 18:28:05 UTC
-+++ meson.build
-@@ -321,7 +321,7 @@ endif
- error(subproject_clean_error_msg)
- endif
-
--rizin_grammar_c_dep = dependency('rizin-grammar-c', required: get_option('use_sys_tree_sitter'), static: is_static_build, fallback: [])
-+rizin_grammar_c_dep = dependency('rizin-grammar-c', required: false, static: is_static_build, fallback: [])
- if not rizin_grammar_c_dep.found()
- rizin_grammar_c_proj = subproject('rizin-grammar-c', default_options: ['default_library=static'])
- rizin_grammar_c_dep = rizin_grammar_c_proj.get_variable('rizin_grammar_c_dep')
diff --git a/lang/ruby35/Makefile b/lang/ruby35/Makefile
index 564bb8fface9..cc5866718a21 100644
--- a/lang/ruby35/Makefile
+++ b/lang/ruby35/Makefile
@@ -26,7 +26,11 @@ CPE_UPDATE= p0
USE_LDCONFIG= yes
GNU_CONFIGURE= yes
-# Bug?: With preview1 `./configure --with-ruby-version=minor` sets ruby version string to "3.5+0"
+# Upstream says "+0" is intentionally added to ruby version string
+# ("3.5+0" for example ) with pre-release version.
+# So use --with-ruby-version="${RUBY_VER}" rather than
+# --with-ruby-version=minor until 3.5.0 is released.
+# Reference; https://bugs.ruby-lang.org/issues/21278
CONFIGURE_ARGS= ${RUBY_CONFIGURE_ARGS} \
--disable-rpath \
--enable-install-static-library \
diff --git a/lang/s7/Makefile.master b/lang/s7/Makefile.master
index 019f8a0352bc..528bb554cb8b 100644
--- a/lang/s7/Makefile.master
+++ b/lang/s7/Makefile.master
@@ -1,7 +1,7 @@
PORTNAME= s7
CATEGORIES= lang lisp
# S7_MAJOR_VERSION / S7_MINOR_VERSION / S7_DATE from s7.h
-PORTVERSION= 11.3.20250110
+PORTVERSION= 11.4.20250505
MAINTAINER?= fuz@FreeBSD.org
WWW= https://ccrma.stanford.edu/software/snd/snd/s7.html
@@ -12,7 +12,7 @@ USES= localbase:ldflags
USE_GITLAB= yes
GL_SITE= https://cm-gitlab.stanford.edu
GL_ACCOUNT= bil
-GL_TAGNAME= 3cad48b9b7ae7f104cc3d0db689cf121a691628d
+GL_TAGNAME= f9a99df1cb1470b7daa19daf7148e76363f7bceb
CFLAGS+= -DS7_LOAD_PATH=\"${DATADIR}\" \
-DHAVE_COMPLEX_NUMBERS \
diff --git a/lang/s7/distinfo b/lang/s7/distinfo
index aaac86dc5c09..f47e005d8ac9 100644
--- a/lang/s7/distinfo
+++ b/lang/s7/distinfo
@@ -1,3 +1,3 @@
-TIMESTAMP = 1736525120
-SHA256 (bil-s7-3cad48b9b7ae7f104cc3d0db689cf121a691628d_GL0.tar.gz) = 6293759d657ce1a44f77b5f519f36b54f8f98847efccc7bfd219c78034437c59
-SIZE (bil-s7-3cad48b9b7ae7f104cc3d0db689cf121a691628d_GL0.tar.gz) = 2797386
+TIMESTAMP = 1746427498
+SHA256 (bil-s7-f9a99df1cb1470b7daa19daf7148e76363f7bceb_GL0.tar.gz) = 3833f0226fdeda4691189ee38702aec52ed98d67253a002c21fb671c109e2400
+SIZE (bil-s7-f9a99df1cb1470b7daa19daf7148e76363f7bceb_GL0.tar.gz) = 2818205