diff --git a/contrib/pkgconf/libpkgconf/personality.c b/contrib/pkgconf/libpkgconf/personality.c --- a/contrib/pkgconf/libpkgconf/personality.c +++ b/contrib/pkgconf/libpkgconf/personality.c @@ -17,6 +17,11 @@ #include #include +#ifdef __FreeBSD__ +# include +# include +#endif + /* * !doc * @@ -77,6 +82,45 @@ free(paths); paths = NULL; } +#elif defined(__FreeBSD__) + pkgconf_buffer_t path1 = PKGCONF_BUFFER_INITIALIZER; + pkgconf_buffer_t path2 = PKGCONF_BUFFER_INITIALIZER; + char const * localbase; + char *str = NULL; + size_t len; + + localbase = getenv("LOCALBASE"); + + if (localbase == NULL) { + if ((str = malloc((len = PATH_MAX) + 1)) == NULL) + err(1, NULL); + while (sysctlbyname("user.localbase", str, &len, NULL, 0) < 0) { + if (errno != ENOMEM) + err(1, "sysctl(user.localbase)"); + if ((str = realloc(str, len + 1)) == NULL) + err(1, NULL); + } + str[len] = '\0'; + localbase = str; + } + + if (localbase == NULL) { + localbase = LOCALBASE; + } + + if (!pkgconf_buffer_append(&path1, localbase) || + !pkgconf_buffer_append(&path1, "/libdata/pkgconfig")) + err(1, NULL); + pkgconf_path_add(pkgconf_buffer_str(&path1), dirlist, false); + + pkgconf_path_add("/usr/libdata/pkgconfig", dirlist, false); + + if (!pkgconf_buffer_append(&path2, localbase) || + !pkgconf_buffer_append(&path2, "/share/pkgconfig")) + err(1, NULL); + pkgconf_path_add(pkgconf_buffer_str(&path2), dirlist, false); + + free(str); #else pkgconf_path_split(PKG_DEFAULT_PATH, dirlist, false); #endif diff --git a/lib/libpkgconf/Makefile b/lib/libpkgconf/Makefile --- a/lib/libpkgconf/Makefile +++ b/lib/libpkgconf/Makefile @@ -16,7 +16,7 @@ WARNS?= 3 CFLAGS+= -DPERSONALITY_PATH=\"/usr/share/pkgconfig/personality.d:/etc/pkgconfig/personality.d:${LOCALBASE:U/usr/local}/etc/pkgconfig/personality.d\" -CFLAGS+= -DPKG_DEFAULT_PATH=\"${LOCALBASE:U/usr/local}/libdata/pkgconfig:/usr/libdata/pkgconfig:${LOCALBASE:U/usr/local}/share/pkgconfig\" +CFLAGS+= -DLOCALBASE=\"${LOCALBASE:U/usr/local}\" CFLAGS+= -DSYSTEM_INCLUDEDIR=\"/usr/include\" CFLAGS+= -DSYSTEM_LIBDIR=\"/usr/lib\" CFLAGS+= -I${SRCTOP}/lib/libpkgconf -I${PKGCONFDIR}