Here's a variation of my original proposal after feedback from sthen@. The key points are:
* Enable erlang26 FLAVOR in erlang.port.mk * Handle FLAVORS for differen erlang version similarly to how ruby and python do things * This actually affects only rebar3. * Being able to install rebar3 for both versions of erlang in parallel is the whole point of this exercise * ... and we can make the rebar3 Makefile a lot simpler. Feedback? ok? On Sat Jul 1, 2023 at 5:02 PM CEST, Volker Schlecht wrote: > 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.35 diff -u -p -r1.35 erlang.port.mk --- erlang.port.mk 23 Aug 2023 15:26:33 -0000 1.35 +++ erlang.port.mk 2 Sep 2023 17:44:06 -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 +# 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 + +# 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} + +# 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 -FLAVOR?= # empty - -# When no flavor is explicitly set, assume MODERL_DEFAULT_VERSION -MODERL_VERSION ?= ${MODERL_DEFAULT_VERSION} -_MODERL_FLAVOR ?= # empty +MODERL_PKG_PREFIX = erl${MODERL_VERSION} -.if ${MODERL_VERSION} == 25 +.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) @@ -128,7 +164,7 @@ pre-build: # https://hex.pm. MASTER_SITE_HEX = https://repo.hex.pm/tarballs/ -MASTER_SITES.erl ?= ${MASTER_SITE_HEX} +MASTER_SITES.erl ?= ${MASTER_SITE_HEX} MODERL_DIST_SUBDIR ?= hex_modules . for _m _v in ${MODERL_MODULES}
Index: Makefile =================================================================== RCS file: /cvs/ports/devel/rebar3/Makefile,v retrieving revision 1.12 diff -u -p -r1.12 Makefile --- Makefile 2 Sep 2023 10:09:32 -0000 1.12 +++ Makefile 2 Sep 2023 17:42:37 -0000 @@ -10,35 +10,18 @@ MAINTAINER = Volker Schlecht <openbsd-p # APLv2 PERMIT_PACKAGE = Yes -FLAVORS = erlang25 erlang26 -FLAVOR ?= erlang25 - -MASTER_SITES1 = 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 += ${_m}-${_v}.tar:1 -.endfor BUILD_DEPENDS += ${RUN_DEPENDS} -SUBST_VARS = ERL_VERSION - - pre-configure: ${SUBST_CMD} ${WRKSRC}/bootstrap \ ${WRKSRC}/apps/rebar/src/rebar_prv_escriptize.erl \ @@ -49,18 +32,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 2 Sep 2023 17:42:37 -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 2 Sep 2023 17:42:37 -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 2 Sep 2023 17:42:37 -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 2 Sep 2023 17:42:37 -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 2 Sep 2023 17:42:37 -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 2 Sep 2023 17:42:37 -0000 @@ -1,2 +1,3 @@ @pkgpath devel/rebar -bin/rebar3-${ERL_VERSION} +@conflict rebar3-*-erlang${MODERL_VERSION} +bin/rebar3-${MODERL_VERSION}
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 2 Sep 2023 17:41:12 -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