Ping.
On 9/5/23 15:02, Volker Schlecht wrote:
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