[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Installing a wrapper guile script in <out>/bin
From: |
elaexuotee |
Subject: |
Re: Installing a wrapper guile script in <out>/bin |
Date: |
Thu, 04 Feb 2021 04:17:20 +0900 |
User-agent: |
mblaze/1.1 |
Thank you for the thoughtful input.
Maxime Devos <maximedevos@telenet.be> wrote:
> * forego representing `wrapper-script` as a gexp (using #~), instead represent
> `wrapper-script` as something quasiquoted. Then write this expression to
> a file (with 'write', and include an appropriate shebang line)
> * The procedure ‘program-file’ turns a gexp into a representation of a store
> item.
After spending most of the day figuring out how to manually create and build
derivations. I hit a fundamental problem including that code in a package def
which made me realize that manually embedding scripts is a flawed approach.
The issue is that a script itself has dependencies, e.g. guile, bash, whatever.
Those dependencies also need to show up in the transitive closure of whatever
package embeds this script.
> * Define a wrapper package. See wrap-python3 in packages/python.scm
> for an example. (This option probably has to be combined with one of the
> first two options.)
Your suggestion here eventually set me on the right track. Say we want the
final executable to end up at <out>/bin/X. The basic idea is this:
1) Creat original package with a name like X-lib, and leave <out>/bin/X empty,
2) Write a wrapper script as a gexp argument to program-file. In this gexp we
reference the X-lib package, and finally
3) Create an trivial-build-system package X that includes the program-file
wrapper as an input. The build step will copy this input script to
<out>/bin/X!
This way dependencies are correctly tracked, and there's no need for manual
derivation building hackery.
Anyway, thanks for the pointers! They motivated me to keep pushing until
something worked.