mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-09 12:23:04 +00:00
src: make path to m4 relocatable
Commit a4ede8f85b ("package: make bison
a relocatable package") made Bison relocatable, but in fact it still
contains one absolute reference: the M4 variable, which points to the
M4 program. Let's fix that by using relocate(), see if an M4 binary is
available at the relocated location, and otherwise fallback to the
original M4 location.
See https://lists.gnu.org/r/bison-patches/2020-05/msg00078.html,
and https://lists.gnu.org/r/bison-patches/2020-05/msg00087.html.
* src/files.h, src/files.c (m4path): New.
* src/output.c: Use it.
This commit is contained in:
committed by
Akim Demaille
parent
1ce02e13c3
commit
ed7d5c2b5b
4
NEWS
4
NEWS
@@ -2,6 +2,10 @@ GNU Bison NEWS
|
||||
|
||||
* Noteworthy changes in release ?.? (????-??-??) [?]
|
||||
|
||||
** Changes
|
||||
|
||||
When installed to be relocatable (via configure --enable-relocatable),
|
||||
bison will now also look for a relocated m4.
|
||||
|
||||
* Noteworthy changes in release 3.6.2 (2020-05-17) [stable]
|
||||
|
||||
|
||||
22
src/files.c
22
src/files.c
@@ -22,13 +22,16 @@
|
||||
#include "system.h"
|
||||
|
||||
#include <configmake.h> /* PKGDATADIR */
|
||||
#include <error.h>
|
||||
#include <dirname.h>
|
||||
#include <error.h>
|
||||
#include <get-errno.h>
|
||||
#include <quote.h>
|
||||
#include <quotearg.h>
|
||||
#include <relocatable.h> /* relocate2 */
|
||||
#include <stdio-safer.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/types.h>
|
||||
#include <unistd.h>
|
||||
#include <xstrndup.h>
|
||||
|
||||
#include "complain.h"
|
||||
@@ -421,6 +424,23 @@ pkgdatadir (void)
|
||||
}
|
||||
}
|
||||
|
||||
char const *
|
||||
m4path (void)
|
||||
{
|
||||
char const *m4 = getenv ("M4");
|
||||
if (m4)
|
||||
return m4;
|
||||
|
||||
/* We don't use relocate2() to store the temporary buffer and re-use
|
||||
it, because m4path() is only called once. */
|
||||
char const *m4_relocated = relocate (M4);
|
||||
struct stat buf;
|
||||
if (stat (m4_relocated, &buf) == 0)
|
||||
return m4_relocated;
|
||||
|
||||
return M4;
|
||||
}
|
||||
|
||||
void
|
||||
output_file_names_free (void)
|
||||
{
|
||||
|
||||
@@ -64,6 +64,9 @@ extern char *all_but_ext;
|
||||
/* Where our data files are installed. */
|
||||
char const *pkgdatadir (void);
|
||||
|
||||
/* Where the m4 program is installed. */
|
||||
char const *m4path (void);
|
||||
|
||||
void compute_output_file_names (void);
|
||||
void output_file_names_free (void);
|
||||
|
||||
|
||||
@@ -682,7 +682,7 @@ static void
|
||||
output_skeleton (void)
|
||||
{
|
||||
/* Compute the names of the package data dir and skeleton files. */
|
||||
char const *m4 = (m4 = getenv ("M4")) ? m4 : M4;
|
||||
char const *m4 = m4path ();
|
||||
char const *datadir = pkgdatadir ();
|
||||
char *skeldir = xpath_join (datadir, "skeletons");
|
||||
char *m4sugar = xpath_join (datadir, "m4sugar/m4sugar.m4");
|
||||
|
||||
Reference in New Issue
Block a user