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}