Thursday, April 30, 2020

Re: devel/leiningen binary package is broken, port works

On Thu, Apr 30, 2020 at 08:37:09AM -0400, Andrea Fleckenstein wrote:
> running the following with the binary packaged leiningen
> reveals something that doesn't look quite right:
>
> $ DEBUG=1 lein
>
> Leiningen's classpath: :/usr/obj/ports/leiningen-2.9.1/fake-amd64/usr/local/share/leiningen/leiningen-2.9.1-standalone.zip
That path comes from the porter that packaged and committed leiningen
(me).

> Error: Could not find or load main class clojure.main
>
> with the ports version, we get:
>
> $ DEBUG=1 lein
>
> Leiningen's classpath: :/usr/ports/pobj/leiningen-2.9.1/fake-amd64/usr/local/share/leiningen/leiningen-2.9.1-standalone.zip
This is from your local machine, it's different but works because that
path is obviously valid - except mostly for you just like mine above
worked during packaging.

> Applying task help to []
> Leiningen is a tool for working with Clojure projects.
> <snip>
>
> the culprit seems to be related to patches/patch-bin_lein-pkg, excerpted
> here:
>
> @@ -43,7 +43,7 @@ LEIN_JVM_OPTS="${LEIN_JVM_OPTS:-'-Xms64m -Xmx512m'}"
> # If you're not using an uberjar you'll need to list each dependency
> # and add them individually to the classpath/bootclasspath as well.
>
> -LEIN_JAR=/usr/share/java/leiningen-$LEIN_VERSION-standalone.jar
> +LEIN_JAR=${LEIN_DIR}/${JAR_FILE}
>
> LEIN_DIR is defined in the makefile as ${PREFIX}/share/leiningen
>
> can anyone point me in the right direction for fixing this? I don't
> exactly understand how the $PREFIX variable works in ports. the man page
> says it's set to $LOCALBASE, but isn't that just "/usr/local/"?
PREFIX contains DESTDIR, see bsd.port.mk(5) for TRUEPREFIX. The latter
is what ought to be the path once packaged/installed on your system,
the former is build environment specific (DESTDIR) and must therefore
not end up in packages.

Perhaps there is a more clever way to fix this, but diff below fixes
your problem py patching TRUEPREFIX instead of PREFIX: this way
/usr/local/bin/lein ends up with

LEIN_JAR=/usr/local/share/leiningen/leiningen-2.9.1-standalone.zip

and works as expected on *every system*.

Thanks for noticing as well as pointing out the issue at once.

Feedback? OK?


Index: Makefile
===================================================================
RCS file: /cvs/ports/devel/leiningen/Makefile,v
retrieving revision 1.7
diff -u -p -r1.7 Makefile
--- Makefile 29 Nov 2019 01:29:15 -0000 1.7
+++ Makefile 30 Apr 2020 12:52:34 -0000
@@ -5,6 +5,7 @@ COMMENT = Clojure project automation
GH_ACCOUNT = technomancy
GH_PROJECT = leiningen
GH_TAGNAME = 2.9.1
+REVISION = 0

JAR_FILE = ${DISTNAME}-standalone.zip

@@ -32,12 +33,13 @@ NO_TEST = Yes
LEIN = ${WRKSRC}/bin/lein-pkg
DOC_DIR = ${PREFIX}/share/doc/leiningen
LEIN_DIR = ${PREFIX}/share/leiningen
+TRUE_LEIN_DIR = ${TRUEPREFIX}/share/leiningen
BASH_DIR = ${PREFIX}/share/bash_completion.d
ZSH_DIR = ${PREFIX}/share/zsh/site-functions

SUBST_VARS += JAR_FILE \
JAVA_HOME \
- LEIN_DIR
+ TRUE_LEIN_DIR

do-install:
${SUBST_PROGRAM} ${LEIN} ${PREFIX}/bin/lein
Index: patches/patch-bin_lein-pkg
===================================================================
RCS file: /cvs/ports/devel/leiningen/patches/patch-bin_lein-pkg,v
retrieving revision 1.1.1.1
diff -u -p -r1.1.1.1 patch-bin_lein-pkg
--- patches/patch-bin_lein-pkg 29 Nov 2019 01:07:49 -0000 1.1.1.1
+++ patches/patch-bin_lein-pkg 30 Apr 2020 12:52:30 -0000
@@ -28,7 +28,7 @@ Index: bin/lein-pkg
# and add them individually to the classpath/bootclasspath as well.

-LEIN_JAR=/usr/share/java/leiningen-$LEIN_VERSION-standalone.jar
-+LEIN_JAR=${LEIN_DIR}/${JAR_FILE}
++LEIN_JAR=${TRUE_LEIN_DIR}/${JAR_FILE}

# Do not use installed leiningen jar during self-compilation
if ! { [ "$1" = "compile" ] &&

No comments:

Post a Comment