|
Packit |
db3073 |
/*
|
|
Packit |
db3073 |
* Copyright (C) 2001, 2002 Red Hat Inc.
|
|
Packit |
db3073 |
*
|
|
Packit |
db3073 |
* This program is free software; you can redistribute it and/or
|
|
Packit |
db3073 |
* modify it under the terms of the GNU General Public License as
|
|
Packit |
db3073 |
* published by the Free Software Foundation; either version 2 of the
|
|
Packit |
db3073 |
* License, or (at your option) any later version.
|
|
Packit |
db3073 |
*
|
|
Packit |
db3073 |
* This program is distributed in the hope that it will be useful, but
|
|
Packit |
db3073 |
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
Packit |
db3073 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Packit |
db3073 |
* General Public License for more details.
|
|
Packit |
db3073 |
*
|
|
Packit |
db3073 |
* You should have received a copy of the GNU General Public License
|
|
Packit |
db3073 |
* along with this program; if not, write to the Free Software
|
|
Packit |
db3073 |
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
|
Packit |
db3073 |
* 02111-1307, USA.
|
|
Packit |
db3073 |
*/
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
#ifdef HAVE_CONFIG_H
|
|
Packit |
db3073 |
#include "config.h"
|
|
Packit |
db3073 |
#endif
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
#include "pkg.h"
|
|
Packit |
db3073 |
#include "parse.h"
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
#include <stdlib.h>
|
|
Packit |
db3073 |
#include <string.h>
|
|
Packit |
db3073 |
#include <ctype.h>
|
|
Packit |
db3073 |
#include <stdio.h>
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
#ifdef G_OS_WIN32
|
|
Packit |
db3073 |
#define STRICT
|
|
Packit |
db3073 |
#include <windows.h>
|
|
Packit |
db3073 |
#undef STRICT
|
|
Packit |
db3073 |
#endif
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
char *pcsysrootdir = NULL;
|
|
Packit |
db3073 |
char *pkg_config_pc_path = NULL;
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
static gboolean want_my_version = FALSE;
|
|
Packit |
db3073 |
static gboolean want_version = FALSE;
|
|
Packit |
db3073 |
static FlagType pkg_flags = 0;
|
|
Packit |
db3073 |
static gboolean want_list = FALSE;
|
|
Packit |
db3073 |
static gboolean want_static_lib_list = ENABLE_INDIRECT_DEPS;
|
|
Packit |
db3073 |
static gboolean want_short_errors = FALSE;
|
|
Packit |
db3073 |
static gboolean want_uninstalled = FALSE;
|
|
Packit |
db3073 |
static char *variable_name = NULL;
|
|
Packit |
db3073 |
static gboolean want_exists = FALSE;
|
|
Packit |
db3073 |
static gboolean want_provides = FALSE;
|
|
Packit |
db3073 |
static gboolean want_requires = FALSE;
|
|
Packit |
db3073 |
static gboolean want_requires_private = FALSE;
|
|
Packit |
db3073 |
static char *required_atleast_version = NULL;
|
|
Packit |
db3073 |
static char *required_exact_version = NULL;
|
|
Packit |
db3073 |
static char *required_max_version = NULL;
|
|
Packit |
db3073 |
static char *required_pkgconfig_version = NULL;
|
|
Packit |
db3073 |
static gboolean want_silence_errors = FALSE;
|
|
Packit |
db3073 |
static gboolean want_variable_list = FALSE;
|
|
Packit |
db3073 |
static gboolean want_debug_spew = FALSE;
|
|
Packit |
db3073 |
static gboolean want_verbose_errors = FALSE;
|
|
Packit |
db3073 |
static gboolean want_stdout_errors = FALSE;
|
|
Packit |
db3073 |
static gboolean output_opt_set = FALSE;
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
void
|
|
Packit |
db3073 |
debug_spew (const char *format, ...)
|
|
Packit |
db3073 |
{
|
|
Packit |
db3073 |
va_list args;
|
|
Packit |
db3073 |
gchar *str;
|
|
Packit |
db3073 |
FILE* stream;
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
g_return_if_fail (format != NULL);
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
if (!want_debug_spew)
|
|
Packit |
db3073 |
return;
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
va_start (args, format);
|
|
Packit |
db3073 |
str = g_strdup_vprintf (format, args);
|
|
Packit |
db3073 |
va_end (args);
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
if (want_stdout_errors)
|
|
Packit |
db3073 |
stream = stdout;
|
|
Packit |
db3073 |
else
|
|
Packit |
db3073 |
stream = stderr;
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
fputs (str, stream);
|
|
Packit |
db3073 |
fflush (stream);
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
g_free (str);
|
|
Packit |
db3073 |
}
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
void
|
|
Packit |
db3073 |
verbose_error (const char *format, ...)
|
|
Packit |
db3073 |
{
|
|
Packit |
db3073 |
va_list args;
|
|
Packit |
db3073 |
gchar *str;
|
|
Packit |
db3073 |
FILE* stream;
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
g_return_if_fail (format != NULL);
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
if (!want_verbose_errors)
|
|
Packit |
db3073 |
return;
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
va_start (args, format);
|
|
Packit |
db3073 |
str = g_strdup_vprintf (format, args);
|
|
Packit |
db3073 |
va_end (args);
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
if (want_stdout_errors)
|
|
Packit |
db3073 |
stream = stdout;
|
|
Packit |
db3073 |
else
|
|
Packit |
db3073 |
stream = stderr;
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
fputs (str, stream);
|
|
Packit |
db3073 |
fflush (stream);
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
g_free (str);
|
|
Packit |
db3073 |
}
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
static gboolean
|
|
Packit |
db3073 |
define_variable_cb (const char *opt, const char *arg, gpointer data,
|
|
Packit |
db3073 |
GError **error)
|
|
Packit |
db3073 |
{
|
|
Packit |
db3073 |
char *varname;
|
|
Packit |
db3073 |
char *varval;
|
|
Packit |
db3073 |
char *tmp;
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
tmp = g_strdup (arg);
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
varname = tmp;
|
|
Packit |
db3073 |
while (*varname && isspace ((guchar)*varname))
|
|
Packit |
db3073 |
++varname;
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
varval = varname;
|
|
Packit |
db3073 |
while (*varval && *varval != '=' && *varval != ' ')
|
|
Packit |
db3073 |
++varval;
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
while (*varval && (*varval == '=' || *varval == ' '))
|
|
Packit |
db3073 |
{
|
|
Packit |
db3073 |
*varval = '\0';
|
|
Packit |
db3073 |
++varval;
|
|
Packit |
db3073 |
}
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
if (*varval == '\0')
|
|
Packit |
db3073 |
{
|
|
Packit |
db3073 |
fprintf (stderr, "--define-variable argument does not have a value "
|
|
Packit |
db3073 |
"for the variable\n");
|
|
Packit |
db3073 |
exit (1);
|
|
Packit |
db3073 |
}
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
define_global_variable (varname, varval);
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
g_free (tmp);
|
|
Packit |
db3073 |
return TRUE;
|
|
Packit |
db3073 |
}
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
static gboolean
|
|
Packit |
db3073 |
output_opt_cb (const char *opt, const char *arg, gpointer data,
|
|
Packit |
db3073 |
GError **error)
|
|
Packit |
db3073 |
{
|
|
Packit |
db3073 |
static gboolean vercmp_opt_set = FALSE;
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
/* only allow one output mode, with a few exceptions */
|
|
Packit |
db3073 |
if (output_opt_set)
|
|
Packit |
db3073 |
{
|
|
Packit |
db3073 |
gboolean bad_opt = TRUE;
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
/* multiple flag options (--cflags --libs-only-l) allowed */
|
|
Packit |
db3073 |
if (pkg_flags != 0 &&
|
|
Packit |
db3073 |
(strcmp (opt, "--libs") == 0 ||
|
|
Packit |
db3073 |
strcmp (opt, "--libs-only-l") == 0 ||
|
|
Packit |
db3073 |
strcmp (opt, "--libs-only-other") == 0 ||
|
|
Packit |
db3073 |
strcmp (opt, "--libs-only-L") == 0 ||
|
|
Packit |
db3073 |
strcmp (opt, "--cflags") == 0 ||
|
|
Packit |
db3073 |
strcmp (opt, "--cflags-only-I") == 0 ||
|
|
Packit |
db3073 |
strcmp (opt, "--cflags-only-other") == 0))
|
|
Packit |
db3073 |
bad_opt = FALSE;
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
/* --print-requires and --print-requires-private allowed */
|
|
Packit |
db3073 |
if ((want_requires && strcmp (opt, "--print-requires-private") == 0) ||
|
|
Packit |
db3073 |
(want_requires_private && strcmp (opt, "--print-requires") == 0))
|
|
Packit |
db3073 |
bad_opt = FALSE;
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
/* --exists allowed with --atleast/exact/max-version */
|
|
Packit |
db3073 |
if (want_exists && !vercmp_opt_set &&
|
|
Packit |
db3073 |
(strcmp (opt, "--atleast-version") == 0 ||
|
|
Packit |
db3073 |
strcmp (opt, "--exact-version") == 0 ||
|
|
Packit |
db3073 |
strcmp (opt, "--max-version") == 0))
|
|
Packit |
db3073 |
bad_opt = FALSE;
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
if (bad_opt)
|
|
Packit |
db3073 |
{
|
|
Packit |
db3073 |
fprintf (stderr, "Ignoring incompatible output option \"%s\"\n",
|
|
Packit |
db3073 |
opt);
|
|
Packit |
db3073 |
return TRUE;
|
|
Packit |
db3073 |
}
|
|
Packit |
db3073 |
}
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
if (strcmp (opt, "--version") == 0)
|
|
Packit |
db3073 |
want_my_version = TRUE;
|
|
Packit |
db3073 |
else if (strcmp (opt, "--modversion") == 0)
|
|
Packit |
db3073 |
want_version = TRUE;
|
|
Packit |
db3073 |
else if (strcmp (opt, "--libs") == 0)
|
|
Packit |
db3073 |
pkg_flags |= LIBS_ANY;
|
|
Packit |
db3073 |
else if (strcmp (opt, "--libs-only-l") == 0)
|
|
Packit |
db3073 |
pkg_flags |= LIBS_l;
|
|
Packit |
db3073 |
else if (strcmp (opt, "--libs-only-other") == 0)
|
|
Packit |
db3073 |
pkg_flags |= LIBS_OTHER;
|
|
Packit |
db3073 |
else if (strcmp (opt, "--libs-only-L") == 0)
|
|
Packit |
db3073 |
pkg_flags |= LIBS_L;
|
|
Packit |
db3073 |
else if (strcmp (opt, "--cflags") == 0)
|
|
Packit |
db3073 |
pkg_flags |= CFLAGS_ANY;
|
|
Packit |
db3073 |
else if (strcmp (opt, "--cflags-only-I") == 0)
|
|
Packit |
db3073 |
pkg_flags |= CFLAGS_I;
|
|
Packit |
db3073 |
else if (strcmp (opt, "--cflags-only-other") == 0)
|
|
Packit |
db3073 |
pkg_flags |= CFLAGS_OTHER;
|
|
Packit |
db3073 |
else if (strcmp (opt, "--variable") == 0)
|
|
Packit |
db3073 |
variable_name = g_strdup (arg);
|
|
Packit |
db3073 |
else if (strcmp (opt, "--exists") == 0)
|
|
Packit |
db3073 |
want_exists = TRUE;
|
|
Packit |
db3073 |
else if (strcmp (opt, "--print-variables") == 0)
|
|
Packit |
db3073 |
want_variable_list = TRUE;
|
|
Packit |
db3073 |
else if (strcmp (opt, "--uninstalled") == 0)
|
|
Packit |
db3073 |
want_uninstalled = TRUE;
|
|
Packit |
db3073 |
else if (strcmp (opt, "--atleast-version") == 0)
|
|
Packit |
db3073 |
{
|
|
Packit |
db3073 |
required_atleast_version = g_strdup (arg);
|
|
Packit |
db3073 |
want_exists = TRUE;
|
|
Packit |
db3073 |
vercmp_opt_set = TRUE;
|
|
Packit |
db3073 |
}
|
|
Packit |
db3073 |
else if (strcmp (opt, "--exact-version") == 0)
|
|
Packit |
db3073 |
{
|
|
Packit |
db3073 |
required_exact_version = g_strdup (arg);
|
|
Packit |
db3073 |
want_exists = TRUE;
|
|
Packit |
db3073 |
vercmp_opt_set = TRUE;
|
|
Packit |
db3073 |
}
|
|
Packit |
db3073 |
else if (strcmp (opt, "--max-version") == 0)
|
|
Packit |
db3073 |
{
|
|
Packit |
db3073 |
required_max_version = g_strdup (arg);
|
|
Packit |
db3073 |
want_exists = TRUE;
|
|
Packit |
db3073 |
vercmp_opt_set = TRUE;
|
|
Packit |
db3073 |
}
|
|
Packit |
db3073 |
else if (strcmp (opt, "--list-all") == 0)
|
|
Packit |
db3073 |
want_list = TRUE;
|
|
Packit |
db3073 |
else if (strcmp (opt, "--print-provides") == 0)
|
|
Packit |
db3073 |
want_provides = TRUE;
|
|
Packit |
db3073 |
else if (strcmp (opt, "--print-requires") == 0)
|
|
Packit |
db3073 |
want_requires = TRUE;
|
|
Packit |
db3073 |
else if (strcmp (opt, "--print-requires-private") == 0)
|
|
Packit |
db3073 |
want_requires_private = TRUE;
|
|
Packit |
db3073 |
else
|
|
Packit |
db3073 |
return FALSE;
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
output_opt_set = TRUE;
|
|
Packit |
db3073 |
return TRUE;
|
|
Packit |
db3073 |
}
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
static gboolean
|
|
Packit |
db3073 |
pkg_uninstalled (Package *pkg)
|
|
Packit |
db3073 |
{
|
|
Packit |
db3073 |
/* See if > 0 pkgs were uninstalled */
|
|
Packit |
db3073 |
GList *tmp;
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
if (pkg->uninstalled)
|
|
Packit |
db3073 |
return TRUE;
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
tmp = pkg->requires;
|
|
Packit |
db3073 |
while (tmp != NULL)
|
|
Packit |
db3073 |
{
|
|
Packit |
db3073 |
Package *pkg = tmp->data;
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
if (pkg_uninstalled (pkg))
|
|
Packit |
db3073 |
return TRUE;
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
tmp = g_list_next (tmp);
|
|
Packit |
db3073 |
}
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
return FALSE;
|
|
Packit |
db3073 |
}
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
void
|
|
Packit |
db3073 |
print_hashtable_key (gpointer key,
|
|
Packit |
db3073 |
gpointer value,
|
|
Packit |
db3073 |
gpointer user_data)
|
|
Packit |
db3073 |
{
|
|
Packit |
db3073 |
printf("%s\n", (gchar*)key);
|
|
Packit |
db3073 |
}
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
static void
|
|
Packit |
db3073 |
init_pc_path (void)
|
|
Packit |
db3073 |
{
|
|
Packit |
db3073 |
#ifdef G_OS_WIN32
|
|
Packit |
db3073 |
char *instdir, *lpath, *shpath;
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
instdir = g_win32_get_package_installation_directory_of_module (NULL);
|
|
Packit |
db3073 |
if (instdir == NULL)
|
|
Packit |
db3073 |
{
|
|
Packit |
db3073 |
/* This only happens when GetModuleFilename() fails. If it does, that
|
|
Packit |
db3073 |
* failure should be investigated and fixed.
|
|
Packit |
db3073 |
*/
|
|
Packit |
db3073 |
debug_spew ("g_win32_get_package_installation_directory_of_module failed\n");
|
|
Packit |
db3073 |
return;
|
|
Packit |
db3073 |
}
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
lpath = g_build_filename (instdir, "lib", "pkgconfig", NULL);
|
|
Packit |
db3073 |
shpath = g_build_filename (instdir, "share", "pkgconfig", NULL);
|
|
Packit |
db3073 |
pkg_config_pc_path = g_strconcat (lpath, G_SEARCHPATH_SEPARATOR_S, shpath,
|
|
Packit |
db3073 |
NULL);
|
|
Packit |
db3073 |
g_free (instdir);
|
|
Packit |
db3073 |
g_free (lpath);
|
|
Packit |
db3073 |
g_free (shpath);
|
|
Packit |
db3073 |
#else
|
|
Packit |
db3073 |
pkg_config_pc_path = PKG_CONFIG_PC_PATH;
|
|
Packit |
db3073 |
#endif
|
|
Packit |
db3073 |
}
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
static gboolean
|
|
Packit |
db3073 |
process_package_args (const char *cmdline, GList **packages, FILE *log)
|
|
Packit |
db3073 |
{
|
|
Packit |
db3073 |
gboolean success = TRUE;
|
|
Packit |
db3073 |
GList *reqs;
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
reqs = parse_module_list (NULL, cmdline, "(command line arguments)");
|
|
Packit |
db3073 |
if (reqs == NULL)
|
|
Packit |
db3073 |
{
|
|
Packit |
db3073 |
fprintf (stderr, "Must specify package names on the command line\n");
|
|
Packit |
db3073 |
return FALSE;
|
|
Packit |
db3073 |
}
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
for (; reqs != NULL; reqs = g_list_next (reqs))
|
|
Packit |
db3073 |
{
|
|
Packit |
db3073 |
Package *req;
|
|
Packit |
db3073 |
RequiredVersion *ver = reqs->data;
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
/* override requested versions with cmdline options */
|
|
Packit |
db3073 |
if (required_exact_version)
|
|
Packit |
db3073 |
{
|
|
Packit |
db3073 |
g_free (ver->version);
|
|
Packit |
db3073 |
ver->comparison = EQUAL;
|
|
Packit |
db3073 |
ver->version = g_strdup (required_exact_version);
|
|
Packit |
db3073 |
}
|
|
Packit |
db3073 |
else if (required_atleast_version)
|
|
Packit |
db3073 |
{
|
|
Packit |
db3073 |
g_free (ver->version);
|
|
Packit |
db3073 |
ver->comparison = GREATER_THAN_EQUAL;
|
|
Packit |
db3073 |
ver->version = g_strdup (required_atleast_version);
|
|
Packit |
db3073 |
}
|
|
Packit |
db3073 |
else if (required_max_version)
|
|
Packit |
db3073 |
{
|
|
Packit |
db3073 |
g_free (ver->version);
|
|
Packit |
db3073 |
ver->comparison = LESS_THAN_EQUAL;
|
|
Packit |
db3073 |
ver->version = g_strdup (required_max_version);
|
|
Packit |
db3073 |
}
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
if (want_short_errors)
|
|
Packit |
db3073 |
req = get_package_quiet (ver->name);
|
|
Packit |
db3073 |
else
|
|
Packit |
db3073 |
req = get_package (ver->name);
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
if (log != NULL)
|
|
Packit |
db3073 |
{
|
|
Packit |
db3073 |
if (req == NULL)
|
|
Packit |
db3073 |
fprintf (log, "%s NOT-FOUND\n", ver->name);
|
|
Packit |
db3073 |
else
|
|
Packit |
db3073 |
fprintf (log, "%s %s %s\n", ver->name,
|
|
Packit |
db3073 |
comparison_to_str (ver->comparison),
|
|
Packit |
db3073 |
(ver->version == NULL) ? "(null)" : ver->version);
|
|
Packit |
db3073 |
}
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
if (req == NULL)
|
|
Packit |
db3073 |
{
|
|
Packit |
db3073 |
success = FALSE;
|
|
Packit |
db3073 |
verbose_error ("No package '%s' found\n", ver->name);
|
|
Packit |
db3073 |
continue;
|
|
Packit |
db3073 |
}
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
if (!version_test (ver->comparison, req->version, ver->version))
|
|
Packit |
db3073 |
{
|
|
Packit |
db3073 |
success = FALSE;
|
|
Packit |
db3073 |
verbose_error ("Requested '%s %s %s' but version of %s is %s\n",
|
|
Packit |
db3073 |
ver->name,
|
|
Packit |
db3073 |
comparison_to_str (ver->comparison),
|
|
Packit |
db3073 |
ver->version,
|
|
Packit |
db3073 |
req->name,
|
|
Packit |
db3073 |
req->version);
|
|
Packit |
db3073 |
if (req->url)
|
|
Packit |
db3073 |
verbose_error ("You may find new versions of %s at %s\n",
|
|
Packit |
db3073 |
req->name, req->url);
|
|
Packit |
db3073 |
continue;
|
|
Packit |
db3073 |
}
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
*packages = g_list_prepend (*packages, req);
|
|
Packit |
db3073 |
}
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
*packages = g_list_reverse (*packages);
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
return success;
|
|
Packit |
db3073 |
}
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
static const GOptionEntry options_table[] = {
|
|
Packit |
db3073 |
{ "version", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK,
|
|
Packit |
db3073 |
&output_opt_cb, "output version of pkg-config", NULL },
|
|
Packit |
db3073 |
{ "modversion", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK,
|
|
Packit |
db3073 |
&output_opt_cb, "output version for package", NULL },
|
|
Packit |
db3073 |
{ "atleast-pkgconfig-version", 0, 0, G_OPTION_ARG_STRING,
|
|
Packit |
db3073 |
&required_pkgconfig_version,
|
|
Packit |
db3073 |
"require given version of pkg-config", "VERSION" },
|
|
Packit |
db3073 |
{ "libs", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, &output_opt_cb,
|
|
Packit |
db3073 |
"output all linker flags", NULL },
|
|
Packit |
db3073 |
{ "static", 0, 0, G_OPTION_ARG_NONE, &want_static_lib_list,
|
|
Packit |
db3073 |
"output linker flags for static linking", NULL },
|
|
Packit |
db3073 |
{ "short-errors", 0, 0, G_OPTION_ARG_NONE, &want_short_errors,
|
|
Packit |
db3073 |
"print short errors", NULL },
|
|
Packit |
db3073 |
{ "libs-only-l", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK,
|
|
Packit |
db3073 |
&output_opt_cb, "output -l flags", NULL },
|
|
Packit |
db3073 |
{ "libs-only-other", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK,
|
|
Packit |
db3073 |
&output_opt_cb, "output other libs (e.g. -pthread)", NULL },
|
|
Packit |
db3073 |
{ "libs-only-L", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK,
|
|
Packit |
db3073 |
&output_opt_cb, "output -L flags", NULL },
|
|
Packit |
db3073 |
{ "cflags", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, &output_opt_cb,
|
|
Packit |
db3073 |
"output all pre-processor and compiler flags", NULL },
|
|
Packit |
db3073 |
{ "cflags-only-I", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK,
|
|
Packit |
db3073 |
&output_opt_cb, "output -I flags", NULL },
|
|
Packit |
db3073 |
{ "cflags-only-other", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK,
|
|
Packit |
db3073 |
&output_opt_cb, "output cflags not covered by the cflags-only-I option",
|
|
Packit |
db3073 |
NULL },
|
|
Packit |
db3073 |
{ "variable", 0, 0, G_OPTION_ARG_CALLBACK, &output_opt_cb,
|
|
Packit |
db3073 |
"get the value of variable named NAME", "NAME" },
|
|
Packit |
db3073 |
{ "define-variable", 0, 0, G_OPTION_ARG_CALLBACK, &define_variable_cb,
|
|
Packit |
db3073 |
"set variable NAME to VALUE", "NAME=VALUE" },
|
|
Packit |
db3073 |
{ "exists", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, &output_opt_cb,
|
|
Packit |
db3073 |
"return 0 if the module(s) exist", NULL },
|
|
Packit |
db3073 |
{ "print-variables", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK,
|
|
Packit |
db3073 |
&output_opt_cb, "output list of variables defined by the module", NULL },
|
|
Packit |
db3073 |
{ "uninstalled", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK,
|
|
Packit |
db3073 |
&output_opt_cb, "return 0 if the uninstalled version of one or more "
|
|
Packit |
db3073 |
"module(s) or their dependencies will be used", NULL },
|
|
Packit |
db3073 |
{ "atleast-version", 0, 0, G_OPTION_ARG_CALLBACK, &output_opt_cb,
|
|
Packit |
db3073 |
"return 0 if the module is at least version VERSION", "VERSION" },
|
|
Packit |
db3073 |
{ "exact-version", 0, 0, G_OPTION_ARG_CALLBACK, &output_opt_cb,
|
|
Packit |
db3073 |
"return 0 if the module is at exactly version VERSION", "VERSION" },
|
|
Packit |
db3073 |
{ "max-version", 0, 0, G_OPTION_ARG_CALLBACK, &output_opt_cb,
|
|
Packit |
db3073 |
"return 0 if the module is at no newer than version VERSION", "VERSION" },
|
|
Packit |
db3073 |
{ "list-all", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK,
|
|
Packit |
db3073 |
&output_opt_cb, "list all known packages", NULL },
|
|
Packit |
db3073 |
{ "debug", 0, 0, G_OPTION_ARG_NONE, &want_debug_spew,
|
|
Packit |
db3073 |
"show verbose debug information", NULL },
|
|
Packit |
db3073 |
{ "print-errors", 0, 0, G_OPTION_ARG_NONE, &want_verbose_errors,
|
|
Packit |
db3073 |
"show verbose information about missing or conflicting packages "
|
|
Packit |
db3073 |
"(default unless --exists or --atleast/exact/max-version given on the "
|
|
Packit |
db3073 |
"command line)", NULL },
|
|
Packit |
db3073 |
{ "silence-errors", 0, 0, G_OPTION_ARG_NONE, &want_silence_errors,
|
|
Packit |
db3073 |
"be silent about errors (default when --exists or "
|
|
Packit |
db3073 |
"--atleast/exact/max-version given on the command line)", NULL },
|
|
Packit |
db3073 |
{ "errors-to-stdout", 0, 0, G_OPTION_ARG_NONE, &want_stdout_errors,
|
|
Packit |
db3073 |
"print errors from --print-errors to stdout not stderr", NULL },
|
|
Packit |
db3073 |
{ "print-provides", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK,
|
|
Packit |
db3073 |
&output_opt_cb, "print which packages the package provides", NULL },
|
|
Packit |
db3073 |
{ "print-requires", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK,
|
|
Packit |
db3073 |
&output_opt_cb, "print which packages the package requires", NULL },
|
|
Packit |
db3073 |
{ "print-requires-private", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK,
|
|
Packit |
db3073 |
&output_opt_cb, "print which packages the package requires for static "
|
|
Packit |
db3073 |
"linking", NULL },
|
|
Packit |
db3073 |
#ifdef G_OS_WIN32
|
|
Packit |
db3073 |
{ "dont-define-prefix", 0, 0, G_OPTION_ARG_NONE, &dont_define_prefix,
|
|
Packit |
db3073 |
"don't try to override the value of prefix for each .pc file found with "
|
|
Packit |
db3073 |
"a guesstimated value based on the location of the .pc file", NULL },
|
|
Packit |
db3073 |
{ "prefix-variable", 0, 0, G_OPTION_ARG_STRING, &prefix_variable,
|
|
Packit |
db3073 |
"set the name of the variable that pkg-config automatically sets",
|
|
Packit |
db3073 |
"PREFIX" },
|
|
Packit |
db3073 |
{ "msvc-syntax", 0, 0, G_OPTION_ARG_NONE, &msvc_syntax,
|
|
Packit |
db3073 |
"output -l and -L flags for the Microsoft compiler (cl)", NULL },
|
|
Packit |
db3073 |
#endif
|
|
Packit |
db3073 |
{ NULL, 0, 0, 0, NULL, NULL, NULL }
|
|
Packit |
db3073 |
};
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
int
|
|
Packit |
db3073 |
main (int argc, char **argv)
|
|
Packit |
db3073 |
{
|
|
Packit |
db3073 |
GString *str;
|
|
Packit |
db3073 |
GList *packages = NULL;
|
|
Packit |
db3073 |
char *search_path;
|
|
Packit |
db3073 |
char *pcbuilddir;
|
|
Packit |
db3073 |
gboolean need_newline;
|
|
Packit |
db3073 |
FILE *log = NULL;
|
|
Packit |
db3073 |
GError *error = NULL;
|
|
Packit |
db3073 |
GOptionContext *opt_context;
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
/* This is here so that we get debug spew from the start,
|
|
Packit |
db3073 |
* during arg parsing
|
|
Packit |
db3073 |
*/
|
|
Packit |
db3073 |
if (getenv ("PKG_CONFIG_DEBUG_SPEW"))
|
|
Packit |
db3073 |
{
|
|
Packit |
db3073 |
want_debug_spew = TRUE;
|
|
Packit |
db3073 |
want_verbose_errors = TRUE;
|
|
Packit |
db3073 |
want_silence_errors = FALSE;
|
|
Packit |
db3073 |
debug_spew ("PKG_CONFIG_DEBUG_SPEW variable enabling debug spew\n");
|
|
Packit |
db3073 |
}
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
/* Get the built-in search path */
|
|
Packit |
db3073 |
init_pc_path ();
|
|
Packit |
db3073 |
if (pkg_config_pc_path == NULL)
|
|
Packit |
db3073 |
{
|
|
Packit |
db3073 |
/* Even when we override the built-in search path, we still use it later
|
|
Packit |
db3073 |
* to add pc_path to the virtual pkg-config package.
|
|
Packit |
db3073 |
*/
|
|
Packit |
db3073 |
verbose_error ("Failed to get default search path\n");
|
|
Packit |
db3073 |
exit (1);
|
|
Packit |
db3073 |
}
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
search_path = getenv ("PKG_CONFIG_PATH");
|
|
Packit |
db3073 |
if (search_path)
|
|
Packit |
db3073 |
{
|
|
Packit |
db3073 |
add_search_dirs(search_path, G_SEARCHPATH_SEPARATOR_S);
|
|
Packit |
db3073 |
}
|
|
Packit |
db3073 |
if (getenv("PKG_CONFIG_LIBDIR") != NULL)
|
|
Packit |
db3073 |
{
|
|
Packit |
db3073 |
add_search_dirs(getenv("PKG_CONFIG_LIBDIR"), G_SEARCHPATH_SEPARATOR_S);
|
|
Packit |
db3073 |
}
|
|
Packit |
db3073 |
else
|
|
Packit |
db3073 |
{
|
|
Packit |
db3073 |
add_search_dirs(pkg_config_pc_path, G_SEARCHPATH_SEPARATOR_S);
|
|
Packit |
db3073 |
}
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
pcsysrootdir = getenv ("PKG_CONFIG_SYSROOT_DIR");
|
|
Packit |
db3073 |
if (pcsysrootdir)
|
|
Packit |
db3073 |
{
|
|
Packit |
db3073 |
define_global_variable ("pc_sysrootdir", pcsysrootdir);
|
|
Packit |
db3073 |
}
|
|
Packit |
db3073 |
else
|
|
Packit |
db3073 |
{
|
|
Packit |
db3073 |
define_global_variable ("pc_sysrootdir", "/");
|
|
Packit |
db3073 |
}
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
pcbuilddir = getenv ("PKG_CONFIG_TOP_BUILD_DIR");
|
|
Packit |
db3073 |
if (pcbuilddir)
|
|
Packit |
db3073 |
{
|
|
Packit |
db3073 |
define_global_variable ("pc_top_builddir", pcbuilddir);
|
|
Packit |
db3073 |
}
|
|
Packit |
db3073 |
else
|
|
Packit |
db3073 |
{
|
|
Packit |
db3073 |
/* Default appropriate for automake */
|
|
Packit |
db3073 |
define_global_variable ("pc_top_builddir", "$(top_builddir)");
|
|
Packit |
db3073 |
}
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
if (getenv ("PKG_CONFIG_DISABLE_UNINSTALLED"))
|
|
Packit |
db3073 |
{
|
|
Packit |
db3073 |
debug_spew ("disabling auto-preference for uninstalled packages\n");
|
|
Packit |
db3073 |
disable_uninstalled = TRUE;
|
|
Packit |
db3073 |
}
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
/* Parse options */
|
|
Packit |
db3073 |
opt_context = g_option_context_new (NULL);
|
|
Packit |
db3073 |
g_option_context_add_main_entries (opt_context, options_table, NULL);
|
|
Packit |
db3073 |
if (!g_option_context_parse(opt_context, &argc, &argv, &error))
|
|
Packit |
db3073 |
{
|
|
Packit |
db3073 |
fprintf (stderr, "%s\n", error->message);
|
|
Packit |
db3073 |
return 1;
|
|
Packit |
db3073 |
}
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
/* If no output option was set, then --exists is the default. */
|
|
Packit |
db3073 |
if (!output_opt_set)
|
|
Packit |
db3073 |
{
|
|
Packit |
db3073 |
debug_spew ("no output option set, defaulting to --exists\n");
|
|
Packit |
db3073 |
want_exists = TRUE;
|
|
Packit |
db3073 |
}
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
/* Error printing is determined as follows:
|
|
Packit |
db3073 |
* - for all output options besides --exists and --*-version,
|
|
Packit |
db3073 |
* it's on by default and --silence-errors can turn it off
|
|
Packit |
db3073 |
* - for --exists, --*-version, etc. and no options at all,
|
|
Packit |
db3073 |
* it's off by default and --print-errors will turn it on
|
|
Packit |
db3073 |
*/
|
|
Packit |
db3073 |
if (!want_exists)
|
|
Packit |
db3073 |
{
|
|
Packit |
db3073 |
debug_spew ("Error printing enabled by default due to use of output "
|
|
Packit |
db3073 |
"options besides --exists or --atleast/exact/max-version. "
|
|
Packit |
db3073 |
"Value of --silence-errors: %d\n",
|
|
Packit |
db3073 |
want_silence_errors);
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
if (want_silence_errors && getenv ("PKG_CONFIG_DEBUG_SPEW") == NULL)
|
|
Packit |
db3073 |
want_verbose_errors = FALSE;
|
|
Packit |
db3073 |
else
|
|
Packit |
db3073 |
want_verbose_errors = TRUE;
|
|
Packit |
db3073 |
}
|
|
Packit |
db3073 |
else
|
|
Packit |
db3073 |
{
|
|
Packit |
db3073 |
debug_spew ("Error printing disabled by default due to use of output "
|
|
Packit |
db3073 |
"options --exists, --atleast/exact/max-version or no "
|
|
Packit |
db3073 |
"output option at all. Value of --print-errors: %d\n",
|
|
Packit |
db3073 |
want_verbose_errors);
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
/* Leave want_verbose_errors unchanged, reflecting --print-errors */
|
|
Packit |
db3073 |
}
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
if (want_verbose_errors)
|
|
Packit |
db3073 |
debug_spew ("Error printing enabled\n");
|
|
Packit |
db3073 |
else
|
|
Packit |
db3073 |
debug_spew ("Error printing disabled\n");
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
if (want_static_lib_list)
|
|
Packit |
db3073 |
enable_private_libs();
|
|
Packit |
db3073 |
else
|
|
Packit |
db3073 |
disable_private_libs();
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
/* honor Requires.private if any Cflags are requested or any static
|
|
Packit |
db3073 |
* libs are requested */
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
if (pkg_flags & CFLAGS_ANY || want_requires_private || want_exists ||
|
|
Packit |
db3073 |
(want_static_lib_list && (pkg_flags & LIBS_ANY)))
|
|
Packit |
db3073 |
enable_requires_private();
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
/* ignore Requires if no Cflags or Libs are requested */
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
if (pkg_flags == 0 && !want_requires && !want_exists)
|
|
Packit |
db3073 |
disable_requires();
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
if (want_my_version)
|
|
Packit |
db3073 |
{
|
|
Packit |
db3073 |
printf ("%s\n", VERSION);
|
|
Packit |
db3073 |
return 0;
|
|
Packit |
db3073 |
}
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
if (required_pkgconfig_version)
|
|
Packit |
db3073 |
{
|
|
Packit |
db3073 |
if (compare_versions (VERSION, required_pkgconfig_version) >= 0)
|
|
Packit |
db3073 |
return 0;
|
|
Packit |
db3073 |
else
|
|
Packit |
db3073 |
return 1;
|
|
Packit |
db3073 |
}
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
package_init ();
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
if (want_list)
|
|
Packit |
db3073 |
{
|
|
Packit |
db3073 |
print_package_list ();
|
|
Packit |
db3073 |
return 0;
|
|
Packit |
db3073 |
}
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
/* Collect packages from remaining args */
|
|
Packit |
db3073 |
str = g_string_new ("");
|
|
Packit |
db3073 |
while (argc > 1)
|
|
Packit |
db3073 |
{
|
|
Packit |
db3073 |
argc--;
|
|
Packit |
db3073 |
argv++;
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
g_string_append (str, *argv);
|
|
Packit |
db3073 |
g_string_append (str, " ");
|
|
Packit |
db3073 |
}
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
g_option_context_free (opt_context);
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
g_strstrip (str->str);
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
if (getenv("PKG_CONFIG_LOG") != NULL)
|
|
Packit |
db3073 |
{
|
|
Packit |
db3073 |
log = fopen (getenv ("PKG_CONFIG_LOG"), "a");
|
|
Packit |
db3073 |
if (log == NULL)
|
|
Packit |
db3073 |
{
|
|
Packit |
db3073 |
fprintf (stderr, "Cannot open log file: %s\n",
|
|
Packit |
db3073 |
getenv ("PKG_CONFIG_LOG"));
|
|
Packit |
db3073 |
exit (1);
|
|
Packit |
db3073 |
}
|
|
Packit |
db3073 |
}
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
/* find and parse each of the packages specified */
|
|
Packit |
db3073 |
if (!process_package_args (str->str, &packages, log))
|
|
Packit |
db3073 |
return 1;
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
if (log != NULL)
|
|
Packit |
db3073 |
fclose (log);
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
g_string_free (str, TRUE);
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
if (want_exists)
|
|
Packit |
db3073 |
return 0; /* if we got here, all the packages existed. */
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
if (want_variable_list)
|
|
Packit |
db3073 |
{
|
|
Packit |
db3073 |
GList *tmp;
|
|
Packit |
db3073 |
tmp = packages;
|
|
Packit |
db3073 |
while (tmp != NULL)
|
|
Packit |
db3073 |
{
|
|
Packit |
db3073 |
Package *pkg = tmp->data;
|
|
Packit |
db3073 |
if (pkg->vars != NULL)
|
|
Packit |
db3073 |
g_hash_table_foreach(pkg->vars,
|
|
Packit |
db3073 |
&print_hashtable_key,
|
|
Packit |
db3073 |
NULL);
|
|
Packit |
db3073 |
tmp = g_list_next (tmp);
|
|
Packit |
db3073 |
if (tmp) printf ("\n");
|
|
Packit |
db3073 |
}
|
|
Packit |
db3073 |
need_newline = FALSE;
|
|
Packit |
db3073 |
}
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
if (want_uninstalled)
|
|
Packit |
db3073 |
{
|
|
Packit |
db3073 |
/* See if > 0 pkgs (including dependencies recursively) were uninstalled */
|
|
Packit |
db3073 |
GList *tmp;
|
|
Packit |
db3073 |
tmp = packages;
|
|
Packit |
db3073 |
while (tmp != NULL)
|
|
Packit |
db3073 |
{
|
|
Packit |
db3073 |
Package *pkg = tmp->data;
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
if (pkg_uninstalled (pkg))
|
|
Packit |
db3073 |
return 0;
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
tmp = g_list_next (tmp);
|
|
Packit |
db3073 |
}
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
return 1;
|
|
Packit |
db3073 |
}
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
if (want_version)
|
|
Packit |
db3073 |
{
|
|
Packit |
db3073 |
GList *tmp;
|
|
Packit |
db3073 |
tmp = packages;
|
|
Packit |
db3073 |
while (tmp != NULL)
|
|
Packit |
db3073 |
{
|
|
Packit |
db3073 |
Package *pkg = tmp->data;
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
printf ("%s\n", pkg->version);
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
tmp = g_list_next (tmp);
|
|
Packit |
db3073 |
}
|
|
Packit |
db3073 |
}
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
if (want_provides)
|
|
Packit |
db3073 |
{
|
|
Packit |
db3073 |
GList *tmp;
|
|
Packit |
db3073 |
tmp = packages;
|
|
Packit |
db3073 |
while (tmp != NULL)
|
|
Packit |
db3073 |
{
|
|
Packit |
db3073 |
Package *pkg = tmp->data;
|
|
Packit |
db3073 |
char *key;
|
|
Packit |
db3073 |
key = pkg->key;
|
|
Packit |
db3073 |
while (*key == '/')
|
|
Packit |
db3073 |
key++;
|
|
Packit |
db3073 |
if (strlen(key) > 0)
|
|
Packit |
db3073 |
printf ("%s = %s\n", key, pkg->version);
|
|
Packit |
db3073 |
tmp = g_list_next (tmp);
|
|
Packit |
db3073 |
}
|
|
Packit |
db3073 |
}
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
if (want_requires)
|
|
Packit |
db3073 |
{
|
|
Packit |
db3073 |
GList *pkgtmp;
|
|
Packit |
db3073 |
for (pkgtmp = packages; pkgtmp != NULL; pkgtmp = g_list_next (pkgtmp))
|
|
Packit |
db3073 |
{
|
|
Packit |
db3073 |
Package *pkg = pkgtmp->data;
|
|
Packit |
db3073 |
GList *reqtmp;
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
/* process Requires: */
|
|
Packit |
db3073 |
for (reqtmp = pkg->requires; reqtmp != NULL; reqtmp = g_list_next (reqtmp))
|
|
Packit |
db3073 |
{
|
|
Packit |
db3073 |
Package *deppkg = reqtmp->data;
|
|
Packit |
db3073 |
RequiredVersion *req;
|
|
Packit |
db3073 |
req = g_hash_table_lookup(pkg->required_versions, deppkg->key);
|
|
Packit |
db3073 |
if ((req == NULL) || (req->comparison == ALWAYS_MATCH))
|
|
Packit |
db3073 |
printf ("%s\n", deppkg->key);
|
|
Packit |
db3073 |
else
|
|
Packit |
db3073 |
printf ("%s %s %s\n", deppkg->key,
|
|
Packit |
db3073 |
comparison_to_str(req->comparison),
|
|
Packit |
db3073 |
req->version);
|
|
Packit |
db3073 |
}
|
|
Packit |
db3073 |
}
|
|
Packit |
db3073 |
}
|
|
Packit |
db3073 |
if (want_requires_private)
|
|
Packit |
db3073 |
{
|
|
Packit |
db3073 |
GList *pkgtmp;
|
|
Packit |
db3073 |
for (pkgtmp = packages; pkgtmp != NULL; pkgtmp = g_list_next (pkgtmp))
|
|
Packit |
db3073 |
{
|
|
Packit |
db3073 |
Package *pkg = pkgtmp->data;
|
|
Packit |
db3073 |
GList *reqtmp;
|
|
Packit |
db3073 |
/* process Requires.private: */
|
|
Packit |
db3073 |
for (reqtmp = pkg->requires_private; reqtmp != NULL; reqtmp = g_list_next (reqtmp))
|
|
Packit |
db3073 |
{
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
Package *deppkg = reqtmp->data;
|
|
Packit |
db3073 |
RequiredVersion *req;
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
if (g_list_find (pkg->requires, reqtmp->data))
|
|
Packit |
db3073 |
continue;
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
req = g_hash_table_lookup(pkg->required_versions, deppkg->key);
|
|
Packit |
db3073 |
if ((req == NULL) || (req->comparison == ALWAYS_MATCH))
|
|
Packit |
db3073 |
printf ("%s\n", deppkg->key);
|
|
Packit |
db3073 |
else
|
|
Packit |
db3073 |
printf ("%s %s %s\n", deppkg->key,
|
|
Packit |
db3073 |
comparison_to_str(req->comparison),
|
|
Packit |
db3073 |
req->version);
|
|
Packit |
db3073 |
}
|
|
Packit |
db3073 |
}
|
|
Packit |
db3073 |
}
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
/* Print all flags; then print a newline at the end. */
|
|
Packit |
db3073 |
need_newline = FALSE;
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
if (variable_name)
|
|
Packit |
db3073 |
{
|
|
Packit |
db3073 |
char *str = packages_get_var (packages, variable_name);
|
|
Packit |
db3073 |
printf ("%s", str);
|
|
Packit |
db3073 |
g_free (str);
|
|
Packit |
db3073 |
need_newline = TRUE;
|
|
Packit |
db3073 |
}
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
if (pkg_flags != 0)
|
|
Packit |
db3073 |
{
|
|
Packit |
db3073 |
char *str = packages_get_flags (packages, pkg_flags);
|
|
Packit |
db3073 |
printf ("%s", str);
|
|
Packit |
db3073 |
g_free (str);
|
|
Packit |
db3073 |
need_newline = TRUE;
|
|
Packit |
db3073 |
}
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
if (need_newline)
|
|
Packit |
db3073 |
printf ("\n");
|
|
Packit |
db3073 |
|
|
Packit |
db3073 |
return 0;
|
|
Packit |
db3073 |
}
|