mirror of
git://git.code.sf.net/p/cdesktopenv/code
synced 2025-03-09 15:50:02 +00:00
Account for multilib Linux installations in imake.
The libc.so file is not always in /usr/lib. On multilib systems, the file we care about could be in /usr/lib64. Likewise, common Linux conventions call for 64-bit libraries to go in lib64 directories, so check there first when on a Linux 64-bit system.
This commit is contained in:
parent
929a5f7327
commit
8d32067a4a
1 changed files with 27 additions and 2 deletions
|
@ -885,7 +885,7 @@ get_distrib(FILE *inFile)
|
||||||
/* would like to know what version of the distribution it is */
|
/* would like to know what version of the distribution it is */
|
||||||
}
|
}
|
||||||
|
|
||||||
static const char *libc_c=
|
static const char libc_c[]=
|
||||||
"#include <stdio.h>\n"
|
"#include <stdio.h>\n"
|
||||||
"#include <ctype.h>\n"
|
"#include <ctype.h>\n"
|
||||||
"\n"
|
"\n"
|
||||||
|
@ -953,11 +953,34 @@ static const char *libc_c=
|
||||||
static void
|
static void
|
||||||
get_libc_version(FILE *inFile)
|
get_libc_version(FILE *inFile)
|
||||||
{
|
{
|
||||||
static char* libcso = "/usr/lib/libc.so";
|
char* libcso = NULL;
|
||||||
struct stat sb;
|
struct stat sb;
|
||||||
char buf[PATH_MAX];
|
char buf[PATH_MAX];
|
||||||
char* ptr;
|
char* ptr;
|
||||||
int libcmajor, libcminor, libcteeny;
|
int libcmajor, libcminor, libcteeny;
|
||||||
|
struct utsname u;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If we are on a 64-bit Linux system and we see /usr/lib64/libc.so,
|
||||||
|
* we should use it. Otherwise go with /usr/lib/libc.so. It is entirely
|
||||||
|
* possible that someone will be running a 32-bit userland on a 64-bit
|
||||||
|
* system.
|
||||||
|
*/
|
||||||
|
if (uname(&u) == -1) {
|
||||||
|
fprintf(stderr, "%s (%d): %s\n", __func__, __LINE__, strerror(errno));
|
||||||
|
abort();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!strcmp(u.sysname, "Linux") &&
|
||||||
|
(!strcmp(u.machine, "x86_64"))) {
|
||||||
|
if (!lstat ("/usr/lib64/libc.so", &sb) && S_ISREG(sb.st_mode)) {
|
||||||
|
libcso = strdup("/usr/lib64/libc.so");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (libcso == NULL) {
|
||||||
|
libcso = strdup("/usr/lib/libc.so");
|
||||||
|
}
|
||||||
|
|
||||||
if (lstat (libcso, &sb) == 0) {
|
if (lstat (libcso, &sb) == 0) {
|
||||||
if (S_ISLNK (sb.st_mode)) {
|
if (S_ISLNK (sb.st_mode)) {
|
||||||
|
@ -1011,6 +1034,8 @@ get_libc_version(FILE *inFile)
|
||||||
abort ();
|
abort ();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
free(libcso);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue