Hi! IMO it's an interesting movement in the way of isolation of chicken
hosts. Not for deployment, at least for me, I strongly prefer static builds
for sw distribution.

P.S. Every time I build a new Py and insert it in to PATH, all my venv.s
turns into potato.

вт, 2 дек. 2025 г. в 20:02, Alexey Egorov via Chicken-users <
[email protected]>:

> Hello Chicken users!
>
> I have a program suite written in Chicken, which uses a number of
> eggs, and I want to be able to distribute it without relying on user
> to install all eggs by hand. Or to install them at all, since user's
> Chicken environment is mainly aimed for development and should not be
> affected by third party software that only uses Chicken, without
> providing any Chicken functionality itself.
>
> I understand that my options in this case is either link the binary
> statically, or provide -private-repository flag and put all the eggs'
> dynamic libs beside my binaries. The first solution I just don't like
> very much.
> The -private-repository flag, which enables compiled binaries to load
> extensions from the directory where the binary is located, which is
> not ideal, since in case of manual installation I'd like to have my
> binaries in /bin and libs in /var/lib or /usr/lib or something like
> that.
>
> One possible solution occurred to me: what if we could have a way to
> set -private-repository not only to the location of the compiled
> binary, but to an arbitrary location? I tried to implement this in
> form of new flag -private-repository-path, and it seems to work for my
> case.
>
> I also think that a general solution for creating Chicken environments
> (analogous to e.g. Python's venv) can be based on this.
>
> All that said, I still have some questions:
> 1. Isn't there some more obvious already existing way to do what I
> want, which I overlooked?
> 2. Doesn't the solution I devised break anything? At the first glance
> it doesn't but I still can be missing something obvious
>
> The patch with -private-repository-path for Chicken 5.4.0:
> diff --git a/chicken.h b/chicken.h
> index d0d6be20..3ad33235 100644
> --- a/chicken.h
> +++ b/chicken.h
> @@ -1566,10 +1566,14 @@ typedef void (C_ccall *C_proc)(C_word, C_word
> *) C_noret;
>  #define C_ub_i_pointer_f32_set(p, n)    (*((float *)(p)) = (n))
>  #define C_ub_i_pointer_f64_set(p, n)    (*((double *)(p)) = (n))
>
> -#ifdef C_PRIVATE_REPOSITORY
> -# define C_private_repository()
> C_use_private_repository(C_executable_dirname())
> +#ifdef C_PRIVATE_REPOSITORY_PATH
> +# define C_private_repository()
> C_use_private_repository(C_text(C_PRIVATE_REPOSITORY_PATH))
>  #else
> -# define C_private_repository()
> +# ifdef C_PRIVATE_REPOSITORY
> +#  define C_private_repository()
> C_use_private_repository(C_executable_dirname())
> +# else
> +#  define C_private_repository()
> +# endif
>  #endif
>
>  #ifdef C_GUI
> diff --git a/csc.scm b/csc.scm
> index 1fe896b7..ee3bdfeb 100644
> --- a/csc.scm
> +++ b/csc.scm
> @@ -507,7 +507,8 @@ Usage: #{csc} [OPTION ...] [FILENAME ...]
>      -host                          compile for host when configured for
>                                      cross-compiling
>      -private-repository            load extensions from executable path
> -    -deployed                      link support file to be used from a
> deployed
> +    -private-repository-path PATH  load extensions from PATH
> +    -deployed                      link support file to be used from a
> deployed
>                                      executable (sets `rpath'
> accordingly, if supported
>                                      on this platform)
>      -no-elevation                  embed manifest on Windows to
> supress elevation
> @@ -553,6 +554,9 @@ EOF
>    (define (use-private-repository)
>      (set! compile-options (cons "-DC_PRIVATE_REPOSITORY"
> compile-options)))
>
> +  (define (use-private-repository-path path)
> +    (set! compile-options (cons (sprintf
> "-DC_PRIVATE_REPOSITORY_PATH=\"~A\"" path) compile-options)))
> +
>    (define (generate-target-filename source-filename)
>      (pathname-replace-extension
>       source-filename
> @@ -687,6 +691,10 @@ EOF
>          (set! rest (cdr rest)) ]
>             ((-private-repository)
>          (use-private-repository))
> +           ((-private-repository-path)
> +                (check s rest)
> +        (use-private-repository-path (car rest))
> +        (set! rest (cdr rest)))
>             ((-ignore-repository)
>          (set! ignore-repository #t)
>          (t-options arg))
> --
>
>

Reply via email to