[PATCH 1/8] Allow more control of redefined prefix behavior
Dan Nicholson
dbn.lists at gmail.com
Sat Apr 20 07:42:18 PDT 2013
Currently the native Win32 builds default to redefining the prefix
variable in .pc files based on their installation paths. This behavior
is not always desired when pkg-config is being used in a traditional
fixed path environment (e.g., /mingw like /usr).
Allow the default to be set via configure switch
--enable/disable-define-prefix, and allow it to be set both ways at
runtime through the --[dont-]define-prefix pkg-config option.
---
configure.ac | 13 +++++++++++++
main.c | 10 +++++++---
parse.c | 6 +++---
pkg-config.1 | 19 ++++++++++++++-----
pkg.h | 6 +++---
5 files changed, 40 insertions(+), 14 deletions(-)
diff --git a/configure.ac b/configure.ac
index 94666a4..4eeaa82 100644
--- a/configure.ac
+++ b/configure.ac
@@ -161,6 +161,19 @@ if test "$cross_compiling" = yes && test "$native_win32" = yes; then
test "x$WINE" != x && TESTS_PKG_CONFIG='${WINE} '"$TESTS_PKG_CONFIG"
fi
+dnl On Windows, the prefix variable in .pc files can be redfined at
+dnl runtime. Allow the default behavior to be controlled.
+AC_MSG_CHECKING([if prefix should be redefined at runtime])
+AC_ARG_ENABLE([define_prefix],
+ [AS_HELP_STRING([--enable-define-prefix],
+ [redefine prefix in .pc files @<:@default=yes on Win32@:>@])],
+ [],
+ [enable_define_prefix=$native_win32])
+AC_MSG_RESULT([$enable_define_prefix])
+AC_DEFINE_UNQUOTED([ENABLE_DEFINE_PREFIX],
+ [`test "x$enable_define_prefix" = xyes && echo TRUE || echo FALSE`],
+ [Define ${prefix} in .pc files at runtime])
+
dnl
dnl Find glib or use internal copy. Required version is 2.16 for
dnl g_win32_get_package_installation_directory_of_module().
diff --git a/main.c b/main.c
index c937efc..f76ac87 100644
--- a/main.c
+++ b/main.c
@@ -462,9 +462,13 @@ static const GOptionEntry options_table[] = {
&output_opt_cb, "print which packages the package requires for static "
"linking", NULL },
#ifdef G_OS_WIN32
- { "dont-define-prefix", 0, 0, G_OPTION_ARG_NONE, &dont_define_prefix,
- "don't try to override the value of prefix for each .pc file found with "
- "a guesstimated value based on the location of the .pc file", NULL },
+ { "define-prefix", 0, 0, G_OPTION_ARG_NONE, &define_prefix,
+ "try to override the value of prefix for each .pc file found with a "
+ "guesstimated value based on the location of the .pc file", NULL },
+ { "dont-define-prefix", 0, G_OPTION_FLAG_REVERSE, G_OPTION_ARG_NONE,
+ &define_prefix, "don't try to override the value of prefix for each .pc "
+ "file found with a guesstimated value based on the location of the .pc "
+ "file", NULL },
{ "prefix-variable", 0, 0, G_OPTION_ARG_STRING, &prefix_variable,
"set the name of the variable that pkg-config automatically sets",
"PREFIX" },
diff --git a/parse.c b/parse.c
index 3b549f8..4e0857d 100644
--- a/parse.c
+++ b/parse.c
@@ -35,7 +35,7 @@
#include <sys/types.h>
#ifdef G_OS_WIN32
-gboolean dont_define_prefix = FALSE;
+gboolean define_prefix = ENABLE_DEFINE_PREFIX;
char *prefix_variable = "prefix";
gboolean msvc_syntax = FALSE;
#endif
@@ -968,7 +968,7 @@ parse_line (Package *pkg, const char *untrimmed, const char *path,
pkg->vars = g_hash_table_new (g_str_hash, g_str_equal);
#ifdef G_OS_WIN32
- if (!dont_define_prefix && strcmp (tag, prefix_variable) == 0)
+ if (define_prefix && strcmp (tag, prefix_variable) == 0)
{
/* This is the prefix variable. Try to guesstimate a value for it
* for this package from the location of the .pc file.
@@ -1025,7 +1025,7 @@ parse_line (Package *pkg, const char *untrimmed, const char *path,
goto cleanup;
}
}
- else if (!dont_define_prefix &&
+ else if (define_prefix &&
orig_prefix != NULL &&
strncmp (p, orig_prefix, strlen (orig_prefix)) == 0 &&
G_IS_DIR_SEPARATOR (p[strlen (orig_prefix)]))
diff --git a/pkg-config.1 b/pkg-config.1
index 90a2128..4e4895a 100644
--- a/pkg-config.1
+++ b/pkg-config.1
@@ -208,14 +208,23 @@ prints \fIfoo.lib\fP. Note that the --libs output consists of flags
for the linker, and should be placed on the cl command line after a
/link switch.
.TP
+.I "--define-prefix"
+.TQ
.I "--dont-define-prefix"
-This option is available only on Windows. It prevents \fIpkg-config\fP
-from automatically trying to override the value of the variable
-"prefix" in each .pc file.
+These options are available only on Windows. They control whether
+.I pkg-config
+overrides the value of the variable "prefix" in each .pc file. With
+\-\-define-prefix,
+.I pkg-config
+uses the installed location of the .pc file to determine the
+prefix. \-\-dont-define-prefix prevents this behavior. The default is
+usually \-\-define-prefix.
.TP
.I "--prefix-variable=PREFIX"
-Also this option is available only on Windows. It sets the name of the
-variable that \fIpkg-config\fP automatically sets as described above.
+This option is available only on Windows. It sets the name of the
+variable that
+.I pkg-config
+overrides instead of "prefix" when using the \-\-define-prefix feature.
.TP
.I "--static"
Output libraries suitable for static linking. That means including
diff --git a/pkg.h b/pkg.h
index 96943a1..74687dc 100644
--- a/pkg.h
+++ b/pkg.h
@@ -134,9 +134,9 @@ extern char *pcsysrootdir;
extern char *pkg_config_pc_path;
#ifdef G_OS_WIN32
-/* If TRUE, do not automatically define "prefix" while
- * parsing each .pc file */
-extern gboolean dont_define_prefix;
+/* If TRUE, define "prefix" in .pc files at runtime. */
+extern gboolean define_prefix;
+
/* The name of the variable that acts as prefix, unless it is "prefix" */
extern char *prefix_variable;
--
1.8.1.4
More information about the pkg-config
mailing list