Here's an update to erlang.port.mk that enables the erlang26 FLAVOR for
erlang ports.

The idea is that if a specific MODERL_VERSION is set on a port, the port
will only be built for that version of erlang, otherwise the port will
be built with erlang25 and erlang26 flavors.

MODERL_VERSION is set for

        * lang/lfe
        * net/rabbitmq
        * lang/elixir
        * benchmarks/tsung

Those are unaffected by this change, and will be transitioned at a later
time.

Unfortunately this change does impact

        * lang/gleam

which needs a minor adaptation to make that work (attached).

With that in place, the devel/rebar3 port can be simplified, because it
can reuse the MODERL_MODULES mechanism, that was largely taken over from
that port.
Also, since erlang/25 and erlang/26 can coexist, so should
rebar3-erlang25 and rebar3-erlang26, thus @option no-default-conflict.

Unfortunately that's a lot of stuff that needs to happen together, and I
had to do some things with @pkpaths and pkgstems that I'm not 100%
certain about, so feedback is highly welcome and probably direly needed
:-)

Tested on amd64.

Index: erlang.port.mk
===================================================================
RCS file: /cvs/ports/lang/erlang/erlang.port.mk,v
retrieving revision 1.34
diff -u -p -r1.34 erlang.port.mk
--- erlang.port.mk	16 Jun 2023 14:21:34 -0000	1.34
+++ erlang.port.mk	1 Jul 2023 14:21:27 -0000
@@ -5,25 +5,35 @@ CATEGORIES +=		lang/erlang
 USE_GMAKE ?=		Yes
 
 # Default Erlang version to use if MODERL_VERSION is not set.
-# XXX: Keep in sync with devel/rebar3/Makefile
 MODERL_DEFAULT_VERSION =25
 
 # If the port already has flavors, append ours to it unless the port requires
 # a specific version of Erlang.
 .if !defined(MODERL_VERSION) && !defined(FLAVORS)
-FLAVORS ?=		erlang25
-.else
-FLAVORS +=		erlang25
+FLAVORS ?=		erlang25 erlang26
+FLAVOR ?=		erlang25
+.elif !defined(MODERL_VERSION)
+FLAVORS +=		erlang25 erlang26
 .endif
 
 FLAVOR?=		# empty
 
 # When no flavor is explicitly set, assume MODERL_DEFAULT_VERSION
+.if ${FLAVOR:Merlang25}
+MODERL_VERSION =	25
+_MODERL_FLAVOR =	${FLAVOR}
+.elif ${FLAVOR:Merlang26}
+MODERL_VERSION =	26
+_MODERL_FLAVOR =	${FLAVOR}
+.else
 MODERL_VERSION ?=	${MODERL_DEFAULT_VERSION}
 _MODERL_FLAVOR ?=	# empty
+.endif
 
 .if ${MODERL_VERSION} == 25
 _MODERL_FLAVOR =	erlang25
+.elif ${MODERL_VERSION} == 26
+_MODERL_FLAVOR =	erlang26
 .else
 ERRORS +=		"Invalid MODERL_VERSION set: ${MODERL_VERSION}."
 .endif
@@ -34,7 +44,7 @@ CONFIGURE_STYLE =	rebar3
 .endif
 
 .if ${CONFIGURE_STYLE} == "rebar3"
-MODERL_BUILD_DEPENDS +=	devel/rebar3
+MODERL_BUILD_DEPENDS +=	rebar3-*-${_MODERL_FLAVOR}:devel/rebar3
 REBAR_BIN ?=		${LOCALBASE}/bin/rebar3-${MODERL_VERSION}
 # Make sure rebar gets called as 'rebar3', otherwise escript tries to call the
 # binary name (e.g. rebar3-25) as the script entrypoint.
Index: Makefile
===================================================================
RCS file: /cvs/ports/devel/rebar3/Makefile,v
retrieving revision 1.11
diff -u -p -r1.11 Makefile
--- Makefile	29 Jun 2023 15:02:00 -0000	1.11
+++ Makefile	1 Jul 2023 14:20:34 -0000
@@ -7,37 +7,26 @@ CATEGORIES =		devel
 HOMEPAGE =		https://www.rebar3.org
 MAINTAINER =		Volker Schlecht <openbsd-po...@schlecht.dev>
 
+REVISION =		0
+
 # APLv2
 PERMIT_PACKAGE =	Yes
 
-FLAVORS =		erlang25 erlang26
-FLAVOR ?=		erlang25
-
-MASTER_SITES1 = 	https://repo.hex.pm/tarballs/
+MODULES =		lang/erlang
 
-.if ${FLAVOR:Merlang25} || ${FLAVOR:Merlang26} 
-_EV =                   ${FLAVOR:C/.*([0-9][0-9]+\$)/\1/}
-RUN_DEPENDS =           lang/erlang/${_EV}
-ERL_VERSION =           ${_EV}
-.else
-ERRORS +=               "Invalid FLAVOR set: ${FLAVOR}"
-.endif
+# Avoid default value of rebar3
+CONFIGURE_STYLE =	None
 
 EXTRACT_ONLY =		rebar3-${GH_TAGNAME}.tar.gz
 
 # for tests
-HEX_MODULES += \
-	meck			0.8.13
+MODERL_MODULES = 	meck	0.8.13
 
 DISTFILES =		rebar3-{}${GH_TAGNAME}.tar.gz
-.for _m _v in ${HEX_MODULES}
-DISTFILES += ${_m}-${_v}.tar:1
-.endfor
 
 BUILD_DEPENDS += 	${RUN_DEPENDS}
 
-SUBST_VARS = 		ERL_VERSION
-
+PORTHOME=		${WRKDIR}
 
 pre-configure:
 	${SUBST_CMD} ${WRKSRC}/bootstrap \
@@ -49,18 +38,9 @@ do-build:
 	cd ${WRKBUILD} && ${SETENV} ${MAKE_ENV} ${WRKSRC}/bootstrap
 
 do-install:
-	${INSTALL_SCRIPT} ${WRKSRC}/rebar3 ${PREFIX}/bin/rebar3-${ERL_VERSION}
+	${INSTALL_SCRIPT} ${WRKSRC}/rebar3 ${PREFIX}/bin/rebar3-${MODERL_VERSION}
 
-PORTHOME=	${WRKDIR}
 do-test:
-.for _m _v in ${HEX_MODULES}
-	mkdir -p ${WRKDIR}/${_m}
-	tar xf ${FULLDISTDIR}/${_m}-${_v}.tar -C ${WRKDIR}/${_m}
-
-	mkdir -p ${WRKSRC}/_checkouts/${_m}
-	tar xzf ${WRKDIR}/${_m}/contents.tar.gz -C ${WRKSRC}/_checkouts/${_m}
-	cp -r ${WRKSRC}/_checkouts/${_m} ${WRKSRC}/_build/default/lib/
-.endfor
 	cd ${WRKSRC} && \
 	    ${SETENV} ${ALL_TEST_ENV} ./rebar3 escriptize && \
 	    ${SETENV} ${ALL_TEST_ENV} ./rebar3 ct
Index: distinfo
===================================================================
RCS file: /cvs/ports/devel/rebar3/distinfo,v
retrieving revision 1.5
diff -u -p -r1.5 distinfo
--- distinfo	29 Jun 2023 15:02:00 -0000	1.5
+++ distinfo	1 Jul 2023 14:20:34 -0000
@@ -1,4 +1,4 @@
-SHA256 (meck-0.8.13.tar) = 008BPBVttRrVfMVWiRuXIOahwd9f4uFa+ZnITWzr6xo=
+SHA256 (hex_modules/meck-0.8.13.tar) = 008BPBVttRrVfMVWiRuXIOahwd9f4uFa+ZnITWzr6xo=
 SHA256 (rebar3-3.22.0.tar.gz) = KLJWA4tEXsgY0swzAAsyF/QqlGIZ7eVatZcFA7/PZkc=
-SIZE (meck-0.8.13.tar) = 34304
+SIZE (hex_modules/meck-0.8.13.tar) = 34304
 SIZE (rebar3-3.22.0.tar.gz) = 797341
Index: patches/patch-apps_rebar_src_rebar_prv_escriptize_erl
===================================================================
RCS file: /cvs/ports/devel/rebar3/patches/patch-apps_rebar_src_rebar_prv_escriptize_erl,v
retrieving revision 1.1
diff -u -p -r1.1 patch-apps_rebar_src_rebar_prv_escriptize_erl
--- patches/patch-apps_rebar_src_rebar_prv_escriptize_erl	15 Mar 2023 13:15:13 -0000	1.1
+++ patches/patch-apps_rebar_src_rebar_prv_escriptize_erl	1 Jul 2023 14:20:34 -0000
@@ -8,7 +8,7 @@ Index: apps/rebar/src/rebar_prv_escripti
      EscriptSections =
          [ {shebang,
 -           def("#!", State, escript_shebang, "#!/usr/bin/env escript\n")}
-+           def("#!", State, escript_shebang, "#!/usr/bin/env escript${ERL_VERSION}\n")}
++           def("#!", State, escript_shebang, "#!/usr/bin/env escript${MODERL_VERSION}\n")}
          , {comment, def("%%", State, escript_comment, "%%\n")}
          , {emu_args, def("%%!", State, escript_emu_args, DefaultEmuArgs)}
          , {archive, Files, []} ],
Index: patches/patch-bootstrap
===================================================================
RCS file: /cvs/ports/devel/rebar3/patches/patch-bootstrap,v
retrieving revision 1.2
diff -u -p -r1.2 patch-bootstrap
--- patches/patch-bootstrap	11 Mar 2022 18:53:09 -0000	1.2
+++ patches/patch-bootstrap	1 Jul 2023 14:20:34 -0000
@@ -5,7 +5,7 @@ Index: bootstrap
 +++ bootstrap
 @@ -1,4 +1,4 @@
 -#!/usr/bin/env escript
-+#!/usr/bin/env escript${ERL_VERSION}
++#!/usr/bin/env escript${MODERL_VERSION}
  %% -*- mode: erlang;erlang-indent-level: 4;indent-tabs-mode: nil -*-
  %% ex: ft=erlang ts=4 sw=4 et
  
Index: patches/patch-vendor_relx_priv_templates_bin
===================================================================
RCS file: /cvs/ports/devel/rebar3/patches/patch-vendor_relx_priv_templates_bin,v
retrieving revision 1.1
diff -u -p -r1.1 patch-vendor_relx_priv_templates_bin
--- patches/patch-vendor_relx_priv_templates_bin	15 Mar 2023 13:15:13 -0000	1.1
+++ patches/patch-vendor_relx_priv_templates_bin	1 Jul 2023 14:20:34 -0000
@@ -8,7 +8,7 @@ Index: vendor/relx/priv/templates/bin
          ERTS_DIR="$__erts_dir";
      else
 -        __erl="$(command -v erl)"
-+        __erl="$(command -v erl${ERL_VERSION})"
++        __erl="$(command -v erl${MODERL_VERSION})"
          code="io:format(\"~s\", [code:root_dir()]), halt()."
          __erl_root="$("$__erl" -boot no_dot_erlang -noshell -eval "$code")"
          ERTS_DIR="$__erl_root/erts-$ERTS_VSN"
Index: patches/patch-vendor_relx_priv_templates_extended_bin
===================================================================
RCS file: /cvs/ports/devel/rebar3/patches/patch-vendor_relx_priv_templates_extended_bin,v
retrieving revision 1.1
diff -u -p -r1.1 patch-vendor_relx_priv_templates_extended_bin
--- patches/patch-vendor_relx_priv_templates_extended_bin	15 Mar 2023 13:15:13 -0000	1.1
+++ patches/patch-vendor_relx_priv_templates_extended_bin	1 Jul 2023 14:20:34 -0000
@@ -8,7 +8,7 @@ Index: vendor/relx/priv/templates/extend
          ERTS_DIR="$__erts_dir";
      else
 -        __erl="$(command -v erl)"
-+        __erl="$(command -v erl${ERL_VERSION})"
++        __erl="$(command -v erl${MODERL_VERSION})"
          code="io:format(\"~s\", [code:root_dir()]), halt()."
          __erl_root="$("$__erl" -boot no_dot_erlang -sasl errlog_type error -noshell -eval "$code")"
          ERTS_DIR="$__erl_root/erts-$ERTS_VSN"
Index: pkg/PLIST
===================================================================
RCS file: /cvs/ports/devel/rebar3/pkg/PLIST,v
retrieving revision 1.3
diff -u -p -r1.3 PLIST
--- pkg/PLIST	16 Jan 2023 18:21:24 -0000	1.3
+++ pkg/PLIST	1 Jul 2023 14:20:34 -0000
@@ -1,2 +1,4 @@
 @pkgpath devel/rebar
-bin/rebar3-${ERL_VERSION}
+@conflict rebar3-*-erlang{$MODERL_VERSION}<${V}
+@option no-default-conflict
+bin/rebar3-${MODERL_VERSION}
Index: Makefile
===================================================================
RCS file: /cvs/ports/lang/gleam/Makefile,v
retrieving revision 1.2
diff -u -p -r1.2 Makefile
--- Makefile	13 Jun 2023 20:03:19 -0000	1.2
+++ Makefile	1 Jul 2023 14:53:07 -0000
@@ -3,6 +3,7 @@ COMMENT =		statically typed language for
 GH_ACCOUNT =		gleam-lang
 GH_PROJECT =		gleam
 GH_TAGNAME =		v0.29.0
+REVISION =		0
 
 HOMEPAGE =		https://gleam.run
 
@@ -16,7 +17,6 @@ PERMIT_PACKAGE =	Yes
 MODULES =		devel/cargo \
 			lang/erlang
 BUILD_DEPENDS =		security/rust-ring
-RUN_DEPENDS =		lang/erlang/25
 COMPILER =		base-clang ports-gcc
 WANTLIB += 		${MODCARGO_WANTLIB} m
 
Index: pkg/PLIST
===================================================================
RCS file: /cvs/ports/lang/gleam/pkg/PLIST,v
retrieving revision 1.1.1.1
diff -u -p -r1.1.1.1 PLIST
--- pkg/PLIST	25 Apr 2023 19:50:47 -0000	1.1.1.1
+++ pkg/PLIST	1 Jul 2023 14:53:07 -0000
@@ -1,3 +1,4 @@
+@pkgpath lang/gleam
 @bin bin/gleam
 share/doc/gleam/
 share/doc/gleam/LICENSE

Reply via email to