I'd like to pick up on the patches to erlang.port.mk I proposed a while
ago to handle erlang flavours in the same way as lua and ruby do.

At this point, the main motivation is to be able to install rebar3 for both
versions of erlang simultaneously, mainly for my personal entertainment, but
also because it's going to make eventually moving all the erlang ports to
26.x a lot easier :-)

This has been working for quite a while for me now ... Feedback? ok?

On Mon Sep 18, 2023 at 6:52 PM CEST, Volker Schlecht wrote:
[...]
> On 9/5/23 15:02, Volker Schlecht wrote:
[...]
> > On Sat Jul 1, 2023 at 5:02 PM CEST, Volker Schlecht wrote:
[...]
Index: erlang.port.mk
===================================================================
RCS file: /cvs/ports/lang/erlang/erlang.port.mk,v
retrieving revision 1.36
diff -u -p -r1.36 erlang.port.mk
--- erlang.port.mk	27 Sep 2023 21:41:16 -0000	1.36
+++ erlang.port.mk	19 Oct 2023 17:30:09 -0000
@@ -5,29 +5,63 @@ 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
+_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
-.endif
+# Default Erlang flavor to use if MODERL_VERSION is not set,
+# and MODERL_HANDLE_FLAVORS is set.
+_MODERL_DEFAULT_FLAVOR =	erlang${_MODERL_DEFAULT_VERSION}
+
+# Whether the erlang module should automatically add FLAVORs.
+MODERL_HANDLE_FLAVORS ?=	No
 
-FLAVOR?=		# empty
+# This permits adding FLAVORS automatically, unless FLAVORS are
+# already defined or the port defines MODERL_VERSION to tie the port
+# to a specific erlang version.
+.if !defined(MODERL_VERSION)
+.  if ${MODERL_HANDLE_FLAVORS:L:Myes}
 
-# When no flavor is explicitly set, assume MODERL_DEFAULT_VERSION
-MODERL_VERSION ?=	${MODERL_DEFAULT_VERSION}
-_MODERL_FLAVOR ?=	# empty
+# If erlang.port.mk should handle FLAVORS, define a separate FLAVOR
+# for each erlang runtime
+.    if !defined(FLAVORS)
+FLAVORS =	erlang25 erlang26
+.    endif
+
+FULLPKGNAME ?=	${MODERL_PKG_PREFIX}-${PKGNAME}
+
+FLAVOR ?=
+.    if empty(FLAVOR)
+FLAVOR =	${MODERL_DEFAULT_FLAVOR}
+.    endif
+.  endif
+.endif
 
-.if ${MODERL_VERSION} == 25
+MODERL_PKG_PREFIX =	erl${MODERL_VERSION}
+
+.if defined(MODERL_VERSION)
+.  if ${MODERL_VERSION} == 25
 _MODERL_FLAVOR =	erlang25
-.else
+.  elif ${MODERL_VERSION} == 26
+_MODERL_FLAVOR =	erlang26
+.  else
 ERRORS +=		"Invalid MODERL_VERSION set: ${MODERL_VERSION}."
+.  endif
+.else
+# When only flavour is set, derive version
+.  if !empty(FLAVOR)
+.    if ${FLAVOR} == erlang25
+MODERL_VERSION ?=	25
+_MODERL_FLAVOR ?=	erlang25
+.    elif ${FLAVOR} == erlang26
+MODERL_VERSION ?=	26
+_MODERL_FLAVOR ?=	erlang26
+.    endif
+.  endif
 .endif
 
+# Fall back to default
+MODERL_VERSION ?=	${_MODERL_DEFAULT_VERSION}
+_MODERL_FLAVOR ?=	${_MODERL_DEFAULT_FLAVOR}
+
 # If no configure style is set, then assume "rebar3"
 .if ${CONFIGURE_STYLE} == ""
 CONFIGURE_STYLE =	rebar3
@@ -54,6 +88,7 @@ _MODERL_RDEPS +=	${r},${_MODERL_FLAVOR}
 _MODERL_TDEPS +=	${t},${_MODERL_FLAVOR}
 .endfor
 
+
 MODERL_BUILDDEP ?=	Yes
 MODERL_RUNDEP ?=	Yes
 
@@ -94,6 +129,7 @@ MODERL_ERLC =		${LOCALBASE}/bin/erlc${MO
 _MODERL_LINKS +=	erl${MODERL_VERSION} erl \
 			erlc${MODERL_VERSION} erlc \
 			erl_call${MODERL_VERSION} erl_call \
+			epmd${MODERL_VERSION} epmd \
 			escript${MODERL_VERSION} escript
 
 .if !empty(_MODERL_LINKS)
Index: Makefile
===================================================================
RCS file: /cvs/ports/lang/lfe/Makefile,v
retrieving revision 1.2
diff -u -p -r1.2 Makefile
--- Makefile	25 Aug 2023 17:42:45 -0000	1.2
+++ Makefile	19 Oct 2023 17:28:57 -0000
@@ -3,6 +3,7 @@ COMMENT =		Lisp Flavoured Erlang (LFE)
 GH_ACCOUNT =		lfe
 GH_PROJECT =		lfe
 GH_TAGNAME =		2.1.2
+REVISION = 		0
 
 CATEGORIES =		lang
 
Index: Makefile
===================================================================
RCS file: /cvs/ports/devel/rebar3/Makefile,v
retrieving revision 1.13
diff -u -p -r1.13 Makefile
--- Makefile	21 Sep 2023 09:50:04 -0000	1.13
+++ Makefile	19 Oct 2023 17:44:52 -0000
@@ -10,34 +10,14 @@ MAINTAINER =		Volker Schlecht <openbsd-p
 # APLv2
 PERMIT_PACKAGE =	Yes
 
-FLAVORS =		erlang25 erlang26
-FLAVOR ?=		erlang25
-
-SITES.mod = 	https://repo.hex.pm/tarballs/
-
-.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
-
-EXTRACT_ONLY =		rebar3-${GH_TAGNAME}.tar.gz
+MODULES =		lang/erlang
 
 # for tests
-HEX_MODULES += \
-	meck			0.8.13
+MODERL_MODULES += 	meck	0.8.13
+MODERL_HANDLE_FLAVORS=	Yes
+CONFIGURE_STYLE =	None
 
 DISTFILES =		rebar3-{}${GH_TAGNAME}.tar.gz
-.for _m _v in ${HEX_MODULES}
-DISTFILES.mod += ${_m}-${_v}.tar
-.endfor
-
-BUILD_DEPENDS += 	${RUN_DEPENDS}
-
-SUBST_VARS = 		ERL_VERSION
-
 
 pre-configure:
 	${SUBST_CMD} ${WRKSRC}/bootstrap \
@@ -49,18 +29,10 @@ 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.6
diff -u -p -r1.6 distinfo
--- distinfo	2 Sep 2023 10:09:32 -0000	1.6
+++ distinfo	19 Oct 2023 17:44:52 -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.1.tar.gz) = KFW1eEMAhl0uQ8t6E1yyu6FEzxUhTGGQZbkYr8jMbrk=
-SIZE (meck-0.8.13.tar) = 34304
+SIZE (hex_modules/meck-0.8.13.tar) = 34304
 SIZE (rebar3-3.22.1.tar.gz) = 797521
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	19 Oct 2023 17:44:52 -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	19 Oct 2023 17:44:52 -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	19 Oct 2023 17:44:52 -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	19 Oct 2023 17:44:52 -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	19 Oct 2023 17:44:52 -0000
@@ -1,2 +1,3 @@
 @pkgpath devel/rebar
-bin/rebar3-${ERL_VERSION}
+@conflict rebar3-*-erlang${MODERL_VERSION}
+bin/rebar3-${MODERL_VERSION}

Reply via email to