Nick Bowler wrote:
> Substituting
> directory variables at configure time is basically impossible to do in a
> manner that is compliant with the GNU coding standards, because the
> standards say that the user can specify prefix on the make command line
> instead of (or in addition to) the configure command line.
> 
>   % ./configure --prefix=/some/where
>   % make prefix=/some/where/else
> 
> to work and I imagine it does not work in your example.

You are apparently referring to
  (1) https://www.gnu.org/prep/standards/standards.html#Configuration
      which lists the configure options,
  (2) https://www.gnu.org/prep/standards/standards.html#Directory-Variables
      which says
        "Installers are expected to override these values when
         calling make (e.g., make prefix=/usr install) or
         configure (e.g., configure --prefix=/usr)."

But there is also
  (3) https://www.gnu.org/prep/standards/standards.html#Standard-Targets
      ‘install’
          If possible, write the install target rule so that it does
          not modify anything in the directory where the program was
          built, provided ‘make all’ has just been done.

So, the ability to run

    make prefix=/usr install

is limited to packages where programs don't need to reference installed
data files. Because when a program needs to reference installed data,
most packages do so by hardcoding the relevant installation directory
somewhere in the executable. This is because the alternatives are often
not viable:
  - Only very few packages provide a "relocatable" installation,
    where the programs will look up the installation directories dynamically.
  - 'make install' is meant to copy built programs from 'make all',
    and replacing hardcoded strings in an executable on-the-fly is not
    portable.

So, for such packages, it is *normal* that the binaries contain the
values of PREFIX, LOCALEDIR, etc. — and passing a different prefix
at 'make install' time cannot change that.

Bruno




Reply via email to