[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Groff] Relocated Groff doesn't work
From: |
Eli Zaretskii |
Subject: |
Re: [Groff] Relocated Groff doesn't work |
Date: |
Fri, 08 May 2015 12:26:18 +0300 |
What, no responses? Not even one?
Ping!
> Date: Fri, 01 May 2015 17:47:59 +0300
> From: Eli Zaretskii <address@hidden>
>
> Hi,
>
> Someone reported to me that the MS-Windows binaries of Groff I made
> available didn't work on their machine. Looking into this issue, that
> person found that setting GROFF_BIN_PATH in the environment to point
> to the directory where the Groff executables lived solved the problem.
>
> The root cause of that is this code in groff.cpp:main:
>
> // we save the original path in GROFF_PATH__ and put it into the
> // environment -- troff will pick it up later.
> char *path = getenv("PATH");
> string e = "GROFF_PATH__";
> e += '=';
> if (path && *path)
> e += path;
> e += '\0';
> if (putenv(strsave(e.contents())))
> fatal("putenv failed");
> char *binpath = getenv("GROFF_BIN_PATH");
> string f = "PATH";
> f += '=';
> if (binpath && *binpath)
> f += binpath;
> else
> f += BINPATH;
>
> What this does is replace $PATH with a list that includes only the
> value of BINPATH recorded at build time. IOW, if Groff is relocated
> to a different place, it will stop working.
>
> This is not a Windows-specific problem, AFAIU, it's just that I
> presume on Posix platforms people usually build Groff and install it
> on the same platform, or use standard directories for which the binary
> was built.
>
> Would the following patch be okay? It works for me.
>
>
> --- src/roff/groff/groff.cpp~2 2015-05-01 16:43:02.571186000 +0300
> +++ src/roff/groff/groff.cpp 2015-05-01 17:37:16.909571100 +0300
> @@ -35,6 +35,7 @@ along with this program. If not, see <ht
> #include "pipeline.h"
> #include "nonposix.h"
> #include "defs.h"
> +#include "relocate.h"
>
> #define GXDITVIEW "gxditview"
>
> @@ -469,8 +470,10 @@ int main(int argc, char **argv)
> f += '=';
> if (binpath && *binpath)
> f += binpath;
> - else
> - f += BINPATH;
> + else {
> + binpath = relocatep(BINPATH);
> + f += binpath;
> + }
> if (path && *path) {
> f += PATH_SEP_CHAR;
> f += path;
>
>