mirror of
https://gitlab.freedesktop.org/pkg-config/pkg-config.git
synced 2026-05-22 18:08:16 +02:00
Author: tml Date: 2001-09-29 21:05:25 GMT 2001-09-30 Tor Lillqvist <tml@iki.fi> Changes for "pure" Win32 (without Cygwin or similar) support. The most important differences compared to pkg-config on Unix are: We don't use hardcoded PKGLIBDIR paths but deduce the installation prefix at runtime. Use the normal GLib DLL, not a private copy. Yes, this does introduce a circular dependency, but that can be worked around. * README.win32: New file. * configure.in: Check for Win32. If so, define USE_INSTALLED_GLIB, and don't configure in the included glib-1.2.8. Set GLIB_CFLAGS and GLIB_LIBS assuming that GLib is installed in the same location pkgconfig will be. Check for dirent.h, unistd.h and sys/wait.h headers. * Makefile.am: If USE_INSTALLED_GLIB, use the GLIB_* values set above, and don't make in the glib-1.2.8 subdir. * autogen.sh: Use perl -p -i.bak, works better on Win32 (and Cygwin). * *.c: Conditionalize inclusions of unistd.h and sys/wait.h. * findme.c: Define X_OK on Win32 if necessary. * parse.c * popthelp.c: Minor Win32 portability ifdefs. * parse.c: No need to include <windows.h>. * pkg.c: Don't hardcode PKGLIBDIR, but use g_win32_get_package_installation_directory() to deduce it. (scan_dir): Make a temp copy of dirname with potential superfluous trailing slash removed. The Win32 opendir implementation doesn't always like those. * pkg.h: If USE_INSTALLED_GLIB, include <glib.h> instead of partial-glib.h. * popt.c (execCommand): Don't compile on Win32. * poptconfig.c (configLine): Don't bother with the "exec" stuff on Win32, too complex to port, at least for now. (poptReadDefaultConfig) Don't bother compiling on Win32, this function isn't even called.
70 lines
1.4 KiB
C
70 lines
1.4 KiB
C
/* (C) 1998 Red Hat Software, Inc. -- Licensing details are in the COPYING
|
|
file accompanying popt source distributions, available from
|
|
ftp://ftp.redhat.com/pub/code/popt */
|
|
|
|
#ifdef HAVE_CONFIG_H
|
|
#include "config.h"
|
|
#endif
|
|
|
|
#ifdef HAVE_ALLOCA_H
|
|
# include <alloca.h>
|
|
#else
|
|
# ifdef _AIX
|
|
# pragma alloca
|
|
# endif
|
|
#endif
|
|
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#ifdef HAVE_UNISTD_H
|
|
#include <unistd.h>
|
|
#endif
|
|
#ifdef __NeXT
|
|
/* access macros are not declared in non posix mode in unistd.h -
|
|
don't try to use posix on NeXTstep 3.3 ! */
|
|
#include <libc.h>
|
|
#endif
|
|
|
|
#include "findme.h"
|
|
|
|
#if defined(G_OS_WIN32) && !defined(X_OK)
|
|
#define X_OK 1
|
|
#endif
|
|
|
|
char * findProgramPath(char * argv0) {
|
|
char * path = getenv("PATH");
|
|
char * pathbuf;
|
|
char * start, * chptr;
|
|
char * buf;
|
|
|
|
/* If there is a / in the argv[0], it has to be an absolute
|
|
path */
|
|
if (strchr(argv0, '/'))
|
|
return strdup(argv0);
|
|
|
|
if (!path) return NULL;
|
|
|
|
start = pathbuf = alloca(strlen(path) + 1);
|
|
buf = malloc(strlen(path) + strlen(argv0) + 2);
|
|
strcpy(pathbuf, path);
|
|
|
|
chptr = NULL;
|
|
do {
|
|
if ((chptr = strchr(start, ':')))
|
|
*chptr = '\0';
|
|
sprintf(buf, "%s/%s", start, argv0);
|
|
|
|
if (!access(buf, X_OK))
|
|
return buf;
|
|
|
|
if (chptr)
|
|
start = chptr + 1;
|
|
else
|
|
start = NULL;
|
|
} while (start && *start);
|
|
|
|
free(buf);
|
|
|
|
return NULL;
|
|
}
|