git: ecdb84b12f04 - main - =?utf-8?Q?sysutils/slurm-wlm: Fix: TaskPlugin=3Dtask/pgid in slurm.conf fails on Fr=Q?sysutils/slurm-wlm: Fix: TaskPlugin=3Dtask/pgid in slurm.conf fails on Fr=

From: Vladimir Druzenko <vvd_at_FreeBSD.org>
Date: Sat, 06 Sep 2025 13:37:47 UTC
eeBSD =E2=80=93 plugin unavailable?=
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: vvd
X-Git-Repository: ports
X-Git-Refname: refs/heads/main
X-Git-Reftype: branch
X-Git-Commit: ecdb84b12f0420490ba5ea680e2a8c8b78dc4e06
Auto-Submitted: auto-generated

The branch main has been updated by vvd:

URL: https://cgit.FreeBSD.org/ports/commit/?id=ecdb84b12f0420490ba5ea680e2a8c8b78dc4e06

commit ecdb84b12f0420490ba5ea680e2a8c8b78dc4e06
Author:     Generic Rikka <rikka.goering@outlook.de>
AuthorDate: 2025-09-06 13:31:51 +0000
Commit:     Vladimir Druzenko <vvd@FreeBSD.org>
CommitDate: 2025-09-06 13:37:40 +0000

    sysutils/slurm-wlm: Fix: TaskPlugin=task/pgid in slurm.conf fails on FreeBSD – plugin unavailable
    
    When setting TaskPlugin=task/pgid in slurm.conf, slurmd fails to start
    and reports that the task/pgid plugin is not available in the plugins
    directory.
    
    As far as I know, pgid is an important task plugin in Slurm, used to
    manage process groups. Its absence limits Slurm’s ability to manage
    tasks correctly on FreeBSD.
    
    Upstream bug report: https://support.schedmd.com/show_bug.cgi?id=23659
    
    PR:                     288668
    Differential Revision:  https://reviews.freebsd.org/D52143
    MFH:                    2025Q3
---
 sysutils/slurm-wlm/Makefile                        |   8 +-
 sysutils/slurm-wlm/files/patch-configure           |  11 +-
 .../files/patch-src_plugins_task_pgid_Makefile.in  |  97 +++++++++++++
 .../files/patch-src_plugins_task_pgid_task__pgid.c | 155 +++++++++++++++++++++
 4 files changed, 269 insertions(+), 2 deletions(-)

diff --git a/sysutils/slurm-wlm/Makefile b/sysutils/slurm-wlm/Makefile
index e79c304832ae..a676f4bb7ad2 100644
--- a/sysutils/slurm-wlm/Makefile
+++ b/sysutils/slurm-wlm/Makefile
@@ -1,6 +1,6 @@
 PORTNAME=	slurm
 DISTVERSION=	23.11.7
-PORTREVISION=	9
+PORTREVISION=	10
 CATEGORIES=	sysutils
 MASTER_SITES=	https://download.schedmd.com/slurm/
 PKGNAMESUFFIX=	-wlm
@@ -124,6 +124,12 @@ LLD2FIX=	api plugins/openapi sacctmgr sackd scontrol scrontab scrun	\
 
 .include <bsd.port.options.mk>
 
+post-extract:
+	@${MKDIR} ${WRKSRC}/src/plugins/task/pgid
+# Use an existing plugin's Makefile.in as a template
+	@${CP}	${WRKSRC}/src/plugins/task/cray_aries/Makefile.in \
+		${WRKSRC}/src/plugins/task/pgid/Makefile.in
+
 # Hack around nonfunctional --disable-gtktest flag
 pre-configure-GUI-off:
 	${REINPLACE_CMD} -e 's|min_gtk_version=.*|min_gtk_version=2000.0.0|' \
diff --git a/sysutils/slurm-wlm/files/patch-configure b/sysutils/slurm-wlm/files/patch-configure
index 51cf89bd4981..f95b552a6dab 100644
--- a/sysutils/slurm-wlm/files/patch-configure
+++ b/sysutils/slurm-wlm/files/patch-configure
@@ -1,4 +1,4 @@
---- configure.orig	2023-11-21 22:33:29 UTC
+--- configure.orig	2024-05-21 17:19:51 UTC
 +++ configure
 @@ -5513,7 +5513,7 @@ _ACEOF
  /* end confdefs.h.  */
@@ -240,3 +240,12 @@
  
      else
  printf "%s\n" "#define H5_USE_18_API 1" >>confdefs.h
+@@ -28035,7 +28030,7 @@ printf "%s\n" "${x_ac_deprecated=no}" >&6; }
+ 
+ 
+ 
+-ac_config_files="$ac_config_files Makefile auxdir/Makefile contribs/Makefile contribs/cray/Makefile contribs/cray/csm/Makefile contribs/cray/slurmsmwd/Makefile contribs/lua/Makefile contribs/nss_slurm/Makefile contribs/openlava/Makefile contribs/pam/Makefile contribs/pam_slurm_adopt/Makefile contribs/perlapi/Makefile contribs/perlapi/libslurm/Makefile contribs/perlapi/libslurm/perl/Makefile.PL contribs/perlapi/libslurmdb/Makefile contribs/perlapi/libslurmdb/perl/Makefile.PL contribs/pmi/Makefile contribs/pmi2/Makefile contribs/seff/Makefile contribs/sgather/Makefile contribs/sjobexit/Makefile contribs/torque/Makefile doc/Makefile doc/html/Makefile doc/html/configurator.easy.html doc/html/configurator.html doc/man/Makefile doc/man/man1/Makefile doc/man/man5/Makefile doc/man/man8/Makefile etc/Makefile src/Makefile src/api/Makefile src/bcast/Makefile src/common/Makefile src/database/Makefile src/interfaces/Makefile src/lua/Makefile src/plugins/Makefile src/plugins/accounting_storage/M
 akefile src/plugins/accounting_storage/common/Makefile src/plugins/accounting_storage/mysql/Makefile src/plugins/accounting_storage/slurmdbd/Makefile src/plugins/acct_gather_energy/Makefile src/plugins/acct_gather_energy/gpu/Makefile src/plugins/acct_gather_energy/ibmaem/Makefile src/plugins/acct_gather_energy/ipmi/Makefile src/plugins/acct_gather_energy/pm_counters/Makefile src/plugins/acct_gather_energy/rapl/Makefile src/plugins/acct_gather_energy/xcc/Makefile src/plugins/acct_gather_filesystem/Makefile src/plugins/acct_gather_filesystem/lustre/Makefile src/plugins/acct_gather_interconnect/Makefile src/plugins/acct_gather_interconnect/ofed/Makefile src/plugins/acct_gather_interconnect/sysfs/Makefile src/plugins/acct_gather_profile/Makefile src/plugins/acct_gather_profile/hdf5/Makefile src/plugins/acct_gather_profile/hdf5/sh5util/Makefile src/plugins/acct_gather_profile/influxdb/Makefile src/plugins/auth/Makefile src/plugins/auth/jwt/Makefile src/plugins/auth/munge/Makefile src/plu
 gins/auth/none/Makefile src/plugins/auth/slu!
 rm/Makefile src/plugins/burst_buffer/Makefile src/plugins/burst_buffer/common/Makefile src/plugins/burst_buffer/datawarp/Makefile src/plugins/burst_buffer/lua/Makefile src/plugins/cgroup/Makefile src/plugins/cgroup/common/Makefile src/plugins/cgroup/v1/Makefile src/plugins/cgroup/v2/Makefile src/plugins/cli_filter/Makefile src/plugins/cli_filter/common/Makefile src/plugins/cli_filter/lua/Makefile src/plugins/cli_filter/syslog/Makefile src/plugins/cli_filter/user_defaults/Makefile src/plugins/core_spec/Makefile src/plugins/core_spec/cray_aries/Makefile src/plugins/cred/Makefile src/plugins/cred/common/Makefile src/plugins/cred/munge/Makefile src/plugins/cred/none/Makefile src/plugins/data_parser/Makefile src/plugins/data_parser/v0.0.39/Makefile src/plugins/data_parser/v0.0.40/Makefile src/plugins/ext_sensors/Makefile src/plugins/ext_sensors/rrd/Makefile src/plugins/gpu/Makefile src/plugins/gpu/common/Makefile src/plugins/gpu/generic/Makefile src/plugins/gpu/nrt/Makefile src/plugins/g
 pu/nvml/Makefile src/plugins/gpu/oneapi/Makefile src/plugins/gpu/rsmi/Makefile src/plugins/gres/Makefile src/plugins/gres/common/Makefile src/plugins/gres/gpu/Makefile src/plugins/gres/mps/Makefile src/plugins/gres/nic/Makefile src/plugins/gres/shard/Makefile src/plugins/hash/Makefile src/plugins/hash/k12/Makefile src/plugins/job_container/Makefile src/plugins/job_container/cncu/Makefile src/plugins/job_container/tmpfs/Makefile src/plugins/job_submit/Makefile src/plugins/job_submit/all_partitions/Makefile src/plugins/job_submit/cray_aries/Makefile src/plugins/job_submit/defaults/Makefile src/plugins/job_submit/logging/Makefile src/plugins/job_submit/lua/Makefile src/plugins/job_submit/partition/Makefile src/plugins/job_submit/pbs/Makefile src/plugins/job_submit/require_timelimit/Makefile src/plugins/job_submit/throttle/Makefile src/plugins/jobacct_gather/Makefile src/plugins/jobacct_gather/cgroup/Makefile src/plugins/jobacct_gather/common/Makefile src/plugins/jobacct_gather/linux/Ma
 kefile src/plugins/jobcomp/Makefile src/plug!
 ins/jobco!
 mp/common/Makefile src/plugins/jobcomp/elasticsearch/Makefile src/plugins/jobcomp/filetxt/Makefile src/plugins/jobcomp/kafka/Makefile src/plugins/jobcomp/lua/Makefile src/plugins/jobcomp/mysql/Makefile src/plugins/jobcomp/script/Makefile src/plugins/mcs/Makefile src/plugins/mcs/account/Makefile src/plugins/mcs/group/Makefile src/plugins/mcs/user/Makefile src/plugins/mpi/Makefile src/plugins/mpi/cray_shasta/Makefile src/plugins/mpi/pmi2/Makefile src/plugins/mpi/pmix/Makefile src/plugins/node_features/Makefile src/plugins/node_features/helpers/Makefile src/plugins/node_features/knl_cray/Makefile src/plugins/node_features/knl_generic/Makefile src/plugins/power/Makefile src/plugins/power/common/Makefile src/plugins/power/cray_aries/Makefile src/plugins/preempt/Makefile src/plugins/preempt/partition_prio/Makefile src/plugins/preempt/qos/Makefile src/plugins/prep/Makefile src/plugins/prep/script/Makefile src/plugins/priority/Makefile src/plugins/priority/basic/Makefile src/plugins/priorit
 y/multifactor/Makefile src/plugins/proctrack/Makefile src/plugins/proctrack/cgroup/Makefile src/plugins/proctrack/cray_aries/Makefile src/plugins/proctrack/linuxproc/Makefile src/plugins/proctrack/pgid/Makefile src/plugins/sched/Makefile src/plugins/sched/backfill/Makefile src/plugins/sched/builtin/Makefile src/plugins/select/Makefile src/plugins/select/cons_tres/Makefile src/plugins/select/cray_aries/Makefile src/plugins/select/linear/Makefile src/plugins/select/other/Makefile src/plugins/serializer/Makefile src/plugins/serializer/json/Makefile src/plugins/serializer/url-encoded/Makefile src/plugins/serializer/yaml/Makefile src/plugins/site_factor/Makefile src/plugins/site_factor/example/Makefile src/plugins/switch/Makefile src/plugins/switch/cray_aries/Makefile src/plugins/switch/hpe_slingshot/Makefile src/plugins/task/Makefile src/plugins/task/affinity/Makefile src/plugins/task/cgroup/Makefile src/plugins/task/cray_aries/Makefile src/plugins/topology/Makefile src/plugins/topology
 /3d_torus/Makefile src/plugins/topology/bloc!
 k/Makefil!
 e src/plugins/topology/common/Makefile src/plugins/topology/default/Makefile src/plugins/topology/tree/Makefile src/sacct/Makefile src/sackd/Makefile src/sacctmgr/Makefile src/salloc/Makefile src/sattach/Makefile src/scrun/Makefile src/sbatch/Makefile src/sbcast/Makefile src/scancel/Makefile src/scontrol/Makefile src/scrontab/Makefile src/sdiag/Makefile src/sinfo/Makefile src/slurmctld/Makefile src/slurmd/Makefile src/slurmd/common/Makefile src/slurmd/slurmd/Makefile src/slurmd/slurmstepd/Makefile src/slurmdbd/Makefile src/slurmrestd/Makefile src/slurmrestd/plugins/Makefile src/slurmrestd/plugins/auth/Makefile src/slurmrestd/plugins/auth/jwt/Makefile src/slurmrestd/plugins/auth/local/Makefile src/slurmrestd/plugins/openapi/Makefile src/slurmrestd/plugins/openapi/dbv0.0.38/Makefile src/slurmrestd/plugins/openapi/dbv0.0.39/Makefile src/slurmrestd/plugins/openapi/slurmctld/Makefile src/slurmrestd/plugins/openapi/slurmdbd/Makefile src/slurmrestd/plugins/openapi/v0.0.38/Makefile src/slur
 mrestd/plugins/openapi/v0.0.39/Makefile src/sprio/Makefile src/squeue/Makefile src/sreport/Makefile src/srun/Makefile src/sshare/Makefile src/sstat/Makefile src/strigger/Makefile src/sview/Makefile testsuite/Makefile testsuite/testsuite.conf.sample testsuite/expect/Makefile testsuite/slurm_unit/Makefile testsuite/slurm_unit/common/Makefile testsuite/slurm_unit/common/bitstring/Makefile testsuite/slurm_unit/common/hostlist/Makefile testsuite/slurm_unit/common/slurm_protocol_defs/Makefile testsuite/slurm_unit/common/slurm_protocol_pack/Makefile testsuite/slurm_unit/common/slurmdb_defs/Makefile testsuite/slurm_unit/common/slurmdb_pack/Makefile"
++ac_config_files="$ac_config_files Makefile auxdir/Makefile contribs/Makefile contribs/cray/Makefile contribs/cray/csm/Makefile contribs/cray/slurmsmwd/Makefile contribs/lua/Makefile contribs/nss_slurm/Makefile contribs/openlava/Makefile contribs/pam/Makefile contribs/pam_slurm_adopt/Makefile contribs/perlapi/Makefile contribs/perlapi/libslurm/Makefile contribs/perlapi/libslurm/perl/Makefile.PL contribs/perlapi/libslurmdb/Makefile contribs/perlapi/libslurmdb/perl/Makefile.PL contribs/pmi/Makefile contribs/pmi2/Makefile contribs/seff/Makefile contribs/sgather/Makefile contribs/sjobexit/Makefile contribs/torque/Makefile doc/Makefile doc/html/Makefile doc/html/configurator.easy.html doc/html/configurator.html doc/man/Makefile doc/man/man1/Makefile doc/man/man5/Makefile doc/man/man8/Makefile etc/Makefile src/Makefile src/api/Makefile src/bcast/Makefile src/common/Makefile src/database/Makefile src/interfaces/Makefile src/lua/Makefile src/plugins/Makefile src/plugins/accounting_storage/M
 akefile src/plugins/accounting_storage/common/Makefile src/plugins/accounting_storage/mysql/Makefile src/plugins/accounting_storage/slurmdbd/Makefile src/plugins/acct_gather_energy/Makefile src/plugins/acct_gather_energy/gpu/Makefile src/plugins/acct_gather_energy/ibmaem/Makefile src/plugins/acct_gather_energy/ipmi/Makefile src/plugins/acct_gather_energy/pm_counters/Makefile src/plugins/acct_gather_energy/rapl/Makefile src/plugins/acct_gather_energy/xcc/Makefile src/plugins/acct_gather_filesystem/Makefile src/plugins/acct_gather_filesystem/lustre/Makefile src/plugins/acct_gather_interconnect/Makefile src/plugins/acct_gather_interconnect/ofed/Makefile src/plugins/acct_gather_interconnect/sysfs/Makefile src/plugins/acct_gather_profile/Makefile src/plugins/acct_gather_profile/hdf5/Makefile src/plugins/acct_gather_profile/hdf5/sh5util/Makefile src/plugins/acct_gather_profile/influxdb/Makefile src/plugins/auth/Makefile src/plugins/auth/jwt/Makefile src/plugins/auth/munge/Makefile src/plu
 gins/auth/none/Makefile src/plugins/auth/slu!
 rm/Makefile src/plugins/burst_buffer/Makefile src/plugins/burst_buffer/common/Makefile src/plugins/burst_buffer/datawarp/Makefile src/plugins/burst_buffer/lua/Makefile src/plugins/cgroup/Makefile src/plugins/cgroup/common/Makefile src/plugins/cgroup/v1/Makefile src/plugins/cgroup/v2/Makefile src/plugins/cli_filter/Makefile src/plugins/cli_filter/common/Makefile src/plugins/cli_filter/lua/Makefile src/plugins/cli_filter/syslog/Makefile src/plugins/cli_filter/user_defaults/Makefile src/plugins/core_spec/Makefile src/plugins/core_spec/cray_aries/Makefile src/plugins/cred/Makefile src/plugins/cred/common/Makefile src/plugins/cred/munge/Makefile src/plugins/cred/none/Makefile src/plugins/data_parser/Makefile src/plugins/data_parser/v0.0.39/Makefile src/plugins/data_parser/v0.0.40/Makefile src/plugins/ext_sensors/Makefile src/plugins/ext_sensors/rrd/Makefile src/plugins/gpu/Makefile src/plugins/gpu/common/Makefile src/plugins/gpu/generic/Makefile src/plugins/gpu/nrt/Makefile src/plugins/g
 pu/nvml/Makefile src/plugins/gpu/oneapi/Makefile src/plugins/gpu/rsmi/Makefile src/plugins/gres/Makefile src/plugins/gres/common/Makefile src/plugins/gres/gpu/Makefile src/plugins/gres/mps/Makefile src/plugins/gres/nic/Makefile src/plugins/gres/shard/Makefile src/plugins/hash/Makefile src/plugins/hash/k12/Makefile src/plugins/job_container/Makefile src/plugins/job_container/cncu/Makefile src/plugins/job_container/tmpfs/Makefile src/plugins/job_submit/Makefile src/plugins/job_submit/all_partitions/Makefile src/plugins/job_submit/cray_aries/Makefile src/plugins/job_submit/defaults/Makefile src/plugins/job_submit/logging/Makefile src/plugins/job_submit/lua/Makefile src/plugins/job_submit/partition/Makefile src/plugins/job_submit/pbs/Makefile src/plugins/job_submit/require_timelimit/Makefile src/plugins/job_submit/throttle/Makefile src/plugins/jobacct_gather/Makefile src/plugins/jobacct_gather/cgroup/Makefile src/plugins/jobacct_gather/common/Makefile src/plugins/jobacct_gather/linux/Ma
 kefile src/plugins/jobcomp/Makefile src/plug!
 ins/jobco!
 mp/common/Makefile src/plugins/jobcomp/elasticsearch/Makefile src/plugins/jobcomp/filetxt/Makefile src/plugins/jobcomp/kafka/Makefile src/plugins/jobcomp/lua/Makefile src/plugins/jobcomp/mysql/Makefile src/plugins/jobcomp/script/Makefile src/plugins/mcs/Makefile src/plugins/mcs/account/Makefile src/plugins/mcs/group/Makefile src/plugins/mcs/user/Makefile src/plugins/mpi/Makefile src/plugins/mpi/cray_shasta/Makefile src/plugins/mpi/pmi2/Makefile src/plugins/mpi/pmix/Makefile src/plugins/node_features/Makefile src/plugins/node_features/helpers/Makefile src/plugins/node_features/knl_cray/Makefile src/plugins/node_features/knl_generic/Makefile src/plugins/power/Makefile src/plugins/power/common/Makefile src/plugins/power/cray_aries/Makefile src/plugins/preempt/Makefile src/plugins/preempt/partition_prio/Makefile src/plugins/preempt/qos/Makefile src/plugins/prep/Makefile src/plugins/prep/script/Makefile src/plugins/priority/Makefile src/plugins/priority/basic/Makefile src/plugins/priorit
 y/multifactor/Makefile src/plugins/proctrack/Makefile src/plugins/proctrack/cgroup/Makefile src/plugins/proctrack/cray_aries/Makefile src/plugins/proctrack/linuxproc/Makefile src/plugins/proctrack/pgid/Makefile src/plugins/sched/Makefile src/plugins/sched/backfill/Makefile src/plugins/sched/builtin/Makefile src/plugins/select/Makefile src/plugins/select/cons_tres/Makefile src/plugins/select/cray_aries/Makefile src/plugins/select/linear/Makefile src/plugins/select/other/Makefile src/plugins/serializer/Makefile src/plugins/serializer/json/Makefile src/plugins/serializer/url-encoded/Makefile src/plugins/serializer/yaml/Makefile src/plugins/site_factor/Makefile src/plugins/site_factor/example/Makefile src/plugins/switch/Makefile src/plugins/switch/cray_aries/Makefile src/plugins/switch/hpe_slingshot/Makefile src/plugins/task/Makefile src/plugins/task/affinity/Makefile src/plugins/task/cgroup/Makefile src/plugins/task/cray_aries/Makefile src/plugins/task/pgid/Makefile src/plugins/topolog
 y/Makefile src/plugins/topology/3d_torus/Mak!
 efile src!
 /plugins/topology/block/Makefile src/plugins/topology/common/Makefile src/plugins/topology/default/Makefile src/plugins/topology/tree/Makefile src/sacct/Makefile src/sackd/Makefile src/sacctmgr/Makefile src/salloc/Makefile src/sattach/Makefile src/scrun/Makefile src/sbatch/Makefile src/sbcast/Makefile src/scancel/Makefile src/scontrol/Makefile src/scrontab/Makefile src/sdiag/Makefile src/sinfo/Makefile src/slurmctld/Makefile src/slurmd/Makefile src/slurmd/common/Makefile src/slurmd/slurmd/Makefile src/slurmd/slurmstepd/Makefile src/slurmdbd/Makefile src/slurmrestd/Makefile src/slurmrestd/plugins/Makefile src/slurmrestd/plugins/auth/Makefile src/slurmrestd/plugins/auth/jwt/Makefile src/slurmrestd/plugins/auth/local/Makefile src/slurmrestd/plugins/openapi/Makefile src/slurmrestd/plugins/openapi/dbv0.0.38/Makefile src/slurmrestd/plugins/openapi/dbv0.0.39/Makefile src/slurmrestd/plugins/openapi/slurmctld/Makefile src/slurmrestd/plugins/openapi/slurmdbd/Makefile src/slurmrestd/plugins/op
 enapi/v0.0.38/Makefile src/slurmrestd/plugins/openapi/v0.0.39/Makefile src/sprio/Makefile src/squeue/Makefile src/sreport/Makefile src/srun/Makefile src/sshare/Makefile src/sstat/Makefile src/strigger/Makefile src/sview/Makefile testsuite/Makefile testsuite/testsuite.conf.sample testsuite/expect/Makefile testsuite/slurm_unit/Makefile testsuite/slurm_unit/common/Makefile testsuite/slurm_unit/common/bitstring/Makefile testsuite/slurm_unit/common/hostlist/Makefile testsuite/slurm_unit/common/slurm_protocol_defs/Makefile testsuite/slurm_unit/common/slurm_protocol_pack/Makefile testsuite/slurm_unit/common/slurmdb_defs/Makefile testsuite/slurm_unit/common/slurmdb_pack/Makefile"
+ 
+ 
+ cat >confcache <<\_ACEOF
diff --git a/sysutils/slurm-wlm/files/patch-src_plugins_task_pgid_Makefile.in b/sysutils/slurm-wlm/files/patch-src_plugins_task_pgid_Makefile.in
new file mode 100644
index 000000000000..39c103c910ac
--- /dev/null
+++ b/sysutils/slurm-wlm/files/patch-src_plugins_task_pgid_Makefile.in
@@ -0,0 +1,97 @@
+--- src/plugins/task/pgid/Makefile.in.orig	2025-09-03 23:57:14 UTC
++++ src/plugins/task/pgid/Makefile.in
+@@ -181,16 +181,16 @@ LTLIBRARIES = $(pkglib_LTLIBRARIES)
+   }
+ am__installdirs = "$(DESTDIR)$(pkglibdir)"
+ LTLIBRARIES = $(pkglib_LTLIBRARIES)
+-task_cray_aries_la_LIBADD =
+-am_task_cray_aries_la_OBJECTS = task_cray_aries.lo
+-task_cray_aries_la_OBJECTS = $(am_task_cray_aries_la_OBJECTS)
++task_pgid_la_LIBADD =
++am_task_pgid_la_OBJECTS = task_pgid.lo
++task_pgid_la_OBJECTS = $(am_task_pgid_la_OBJECTS)
+ AM_V_lt = $(am__v_lt_@AM_V@)
+ am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+ am__v_lt_0 = --silent
+ am__v_lt_1 = 
+-task_cray_aries_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
++task_pgid_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+ 	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+-	$(AM_CFLAGS) $(CFLAGS) $(task_cray_aries_la_LDFLAGS) \
++	$(AM_CFLAGS) $(CFLAGS) $(task_pgid_la_LDFLAGS) \
+ 	$(LDFLAGS) -o $@
+ AM_V_P = $(am__v_P_@AM_V@)
+ am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+@@ -207,7 +207,7 @@ am__maybe_remake_depfiles = depfiles
+ DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) -I$(top_builddir)/slurm
+ depcomp = $(SHELL) $(top_srcdir)/auxdir/depcomp
+ am__maybe_remake_depfiles = depfiles
+-am__depfiles_remade = ./$(DEPDIR)/task_cray_aries.Plo
++am__depfiles_remade = ./$(DEPDIR)/task_pgid.Plo
+ am__mv = mv -f
+ COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ 	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+@@ -227,7 +227,7 @@ am__v_CCLD_1 = 
+ am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
+ am__v_CCLD_0 = @echo "  CCLD    " $@;
+ am__v_CCLD_1 = 
+-SOURCES = $(task_cray_aries_la_SOURCES)
++SOURCES = $(task_pgid_la_SOURCES)
+ am__can_run_installinfo = \
+   case $$AM_UPDATE_INFO_DIR in \
+     n|no|NO) false;; \
+@@ -514,12 +514,12 @@ PLUGIN_FLAGS = -module -avoid-version --export-dynamic
+ top_srcdir = @top_srcdir@
+ AUTOMAKE_OPTIONS = foreign
+ PLUGIN_FLAGS = -module -avoid-version --export-dynamic
+-AM_CPPFLAGS = -DSLURM_PLUGIN_DEBUG -I$(top_srcdir) -I$(top_srcdir)/src/common $(CRAY_TASK_CPPFLAGS)
+-pkglib_LTLIBRARIES = task_cray_aries.la
++AM_CPPFLAGS = -DSLURM_PLUGIN_DEBUG -I$(top_srcdir) -I$(top_srcdir)/src/common $(CRAY_TASK_CPPFLAGS) -I$(top_srcdir)/src/interfaces -I$(top_srcdir)/src/plugins/task -I$(top_srcdir)/src/slurmd -I$(top_srcdir)/src/slurmd/slurmstepd
++pkglib_LTLIBRARIES = task_pgid.la
+ 
+ # Null task plugin.
+-task_cray_aries_la_SOURCES = task_cray_aries.c
+-task_cray_aries_la_LDFLAGS = $(PLUGIN_FLAGS) $(CRAY_TASK_LDFLAGS) \
++task_pgid_la_SOURCES = task_pgid.c
++task_pgid_la_LDFLAGS = $(PLUGIN_FLAGS) $(CRAY_TASK_LDFLAGS) \
+ 	$(NUMA_LIBS)
+ 
+ all: all-am
+@@ -591,8 +591,8 @@ clean-pkglibLTLIBRARIES:
+ 	  rm -f $${locs}; \
+ 	}
+ 
+-task_cray_aries.la: $(task_cray_aries_la_OBJECTS) $(task_cray_aries_la_DEPENDENCIES) $(EXTRA_task_cray_aries_la_DEPENDENCIES) 
+-	$(AM_V_CCLD)$(task_cray_aries_la_LINK) -rpath $(pkglibdir) $(task_cray_aries_la_OBJECTS) $(task_cray_aries_la_LIBADD) $(LIBS)
++task_pgid.la: $(task_pgid_la_OBJECTS) $(task_pgid_la_DEPENDENCIES) $(EXTRA_task_pgid_la_DEPENDENCIES)
++	$(AM_V_CCLD)$(task_pgid_la_LINK) -rpath $(pkglibdir) $(task_pgid_la_OBJECTS) $(task_pgid_la_LIBADD) $(LIBS)
+ 
+ mostlyclean-compile:
+ 	-rm -f *.$(OBJEXT)
+@@ -600,7 +600,7 @@ distclean-compile:
+ distclean-compile:
+ 	-rm -f *.tab.c
+ 
+-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/task_cray_aries.Plo@am__quote@ # am--include-marker
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/task_pgid.Plo@am__quote@ # am--include-marker
+ 
+ $(am__depfiles_remade):
+ 	@$(MKDIR_P) $(@D)
+@@ -729,7 +729,7 @@ distclean: distclean-am
+ 	mostlyclean-am
+ 
+ distclean: distclean-am
+-		-rm -f ./$(DEPDIR)/task_cray_aries.Plo
++		-rm -f ./$(DEPDIR)/task_pgid.Plo
+ 	-rm -f Makefile
+ distclean-am: clean-am distclean-compile distclean-generic \
+ 	distclean-tags
+@@ -775,7 +775,7 @@ maintainer-clean: maintainer-clean-am
+ installcheck-am:
+ 
+ maintainer-clean: maintainer-clean-am
+-		-rm -f ./$(DEPDIR)/task_cray_aries.Plo
++		-rm -f ./$(DEPDIR)/task_pgid.Plo
+ 	-rm -f Makefile
+ maintainer-clean-am: distclean-am maintainer-clean-generic
+ 
diff --git a/sysutils/slurm-wlm/files/patch-src_plugins_task_pgid_task__pgid.c b/sysutils/slurm-wlm/files/patch-src_plugins_task_pgid_task__pgid.c
new file mode 100644
index 000000000000..0433aeaab02f
--- /dev/null
+++ b/sysutils/slurm-wlm/files/patch-src_plugins_task_pgid_task__pgid.c
@@ -0,0 +1,155 @@
+--- src/plugins/task/pgid/task_pgid.c.orig     2025-09-03 23:58:57 UTC
++++ src/plugins/task/pgid/task_pgid.c
+@@ -0,0 +1,152 @@
++#include "slurm_xlator.h"
++#include "log.h"
++#include "xmalloc.h"
++#include "task.h"   /* interface declarations */
++
++/* these two pull in batch_job_launch_msg_t, launch_tasks_request_msg_t,
++   stepd_step_task_info_t, etc. */
++#include "src/common/slurm_protocol_api.h"
++#include "src/slurmd/slurmstepd/slurmstepd_job.h"
++
++#include <sys/types.h>
++#include <signal.h>
++#include <unistd.h>
++#include <errno.h>
++#include <string.h>
++
++/* Required plugin identifiers (exported) */
++__attribute__((visibility("default"))) const char     plugin_name[]    = "PGID task plugin for FreeBSD";
++__attribute__((visibility("default"))) const char     plugin_type[]    = "task/pgid";
++__attribute__((visibility("default"))) const uint32_t plugin_version   = SLURM_VERSION_NUMBER;
++
++/* Required generic plugin entry points */
++int init(void)  { slurm_info("task/pgid: init");  return SLURM_SUCCESS; }
++int fini(void)  { slurm_info("task/pgid: fini");  return SLURM_SUCCESS; }
++
++static pid_t job_pgid = -1;
++
++/* ==== Required task_* API (must all be present) ==== */
++
++/* Called when slurmd receives a batch launch request */
++int task_p_slurmd_batch_request(batch_job_launch_msg_t *req)
++{
++    (void)req;
++    return SLURM_SUCCESS;
++}
++
++/* Called when slurmd receives a general launch request */
++int task_p_slurmd_launch_request(launch_tasks_request_msg_t *req,
++                                 uint32_t node_id, char **err_msg)
++{
++    (void)req; (void)node_id; (void)err_msg;
++    return SLURM_SUCCESS;
++}
++
++int task_p_slurmd_suspend_job(uint32_t job_id)
++{
++    (void)job_id;
++    return SLURM_SUCCESS;
++}
++
++int task_p_slurmd_resume_job(uint32_t job_id)
++{
++    (void)job_id;
++    return SLURM_SUCCESS;
++}
++
++/* Before setuid to the job user */
++int task_p_pre_setuid(stepd_step_rec_t *step)
++{
++    (void)step;
++    return SLURM_SUCCESS;
++}
++
++/* Called in privileged context before launch */
++int task_p_pre_launch_priv(stepd_step_rec_t *step,
++                           uint32_t node_tid, uint32_t global_tid)
++{
++    (void)step; (void)node_tid; (void)global_tid;
++    return SLURM_SUCCESS;
++}
++
++int task_p_pre_launch(stepd_step_rec_t *step)
++{
++    pid_t cur = getpid();
++
++    /* Case A: no PGID recorded yet for this step -> become the group leader */
++    if (step->pgid <= 0) {
++        if (setpgid(0, 0) < 0) {
++            /* If a sibling beat us to it, join that PGID instead */
++            if (errno == EACCES || errno == EPERM || errno == EEXIST) {
++                /* Someone created a group already; query our pgid and store it */
++                pid_t pg = getpgid(0);
++                if (pg < 0) {
++                    slurm_error("task/pgid: getpgid failed after race: %s", strerror(errno));
++                    return SLURM_ERROR;
++                }
++                step->pgid = pg;
++                slurm_debug("task/pgid: joined existing PGID %d (race)", step->pgid);
++                return SLURM_SUCCESS;
++            }
++            slurm_error("task/pgid: setpgid(0,0) failed for leader pid=%d: %s", (int)cur, strerror(errno));
++            return SLURM_ERROR;
++        }
++        step->pgid = getpgid(0);
++        if (step->pgid < 0) {
++            slurm_error("task/pgid: getpgid failed after creating group: %s", strerror(errno));
++            return SLURM_ERROR;
++        }
++        slurm_debug("task/pgid: created step PGID %d (leader pid=%d)", step->pgid, (int)cur);
++        return SLURM_SUCCESS;
++    }
++
++    /* Case B: PGID exists -> join it */
++    if (setpgid(0, step->pgid) < 0) {
++        /* ESRCH: parent/leader not visible yet; tiny retry helps on fast forks */
++        if (errno == ESRCH) {
++            usleep(1000); /* 1 ms backoff */
++            if (setpgid(0, step->pgid) == 0) {
++                slurm_debug("task/pgid: joined PGID %d after retry", step->pgid);
++                return SLURM_SUCCESS;
++            }
++        }
++        slurm_error("task/pgid: setpgid(0,%d) failed: %s", step->pgid, strerror(errno));
++        return SLURM_ERROR;
++    }
++    slurm_debug("task/pgid: joined existing PGID %d", step->pgid);
++    return SLURM_SUCCESS;
++}
++
++/* After a task terminates */
++int task_p_post_term(stepd_step_rec_t *step, stepd_step_task_info_t *task)
++{
++    (void)step; (void)task;
++    return SLURM_SUCCESS;
++}
++
++/* After the whole step finishes */
++int task_p_post_step(stepd_step_rec_t *step)
++{
++    (void)step;
++    return SLURM_SUCCESS;
++}
++
++/* Allow plugin to track additional PIDs if needed */
++int task_p_add_pid(pid_t pid)
++{
++    (void)pid;
++    return SLURM_SUCCESS;
++}
++
++int task_p_signal(stepd_step_rec_t *step, int sig)
++{
++    if (step && step->pgid > 1) {
++        slurm_debug("task/pgid: sending signal %d to PGID %d", sig, step->pgid);
++        if (killpg((pid_t)step->pgid, sig) < 0) {
++            slurm_error("task/pgid: killpg(%d) failed: %s", step->pgid, strerror(errno));
++            return SLURM_ERROR;
++        }
++    }
++    return SLURM_SUCCESS;
++}
++int task_p_fini(stepd_step_rec_t *step) { (void)step; return SLURM_SUCCESS; }