2005-07-14 13:05:14 +00:00
|
|
|
/*
|
|
|
|
|
* Copyright (C) 2001, 2002 Red Hat Inc.
|
|
|
|
|
*
|
|
|
|
|
* This program is free software; you can redistribute it and/or
|
|
|
|
|
* modify it under the terms of the GNU General Public License as
|
|
|
|
|
* published by the Free Software Foundation; either version 2 of the
|
|
|
|
|
* License, or (at your option) any later version.
|
|
|
|
|
*
|
|
|
|
|
* This program is distributed in the hope that it will be useful, but
|
|
|
|
|
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
|
|
|
* General Public License for more details.
|
|
|
|
|
*
|
|
|
|
|
* You should have received a copy of the GNU General Public License
|
|
|
|
|
* along with this program; if not, write to the Free Software
|
|
|
|
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
|
|
|
|
* 02111-1307, USA.
|
|
|
|
|
*/
|
|
|
|
|
|
2005-07-14 13:04:01 +00:00
|
|
|
#ifndef PKG_CONFIG_PKG_H
|
|
|
|
|
#define PKG_CONFIG_PKG_H
|
|
|
|
|
|
2001-09-30 Tor Lillqvist <tml@iki.fi>
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.
2005-07-14 13:04:29 +00:00
|
|
|
#ifdef USE_INSTALLED_GLIB
|
|
|
|
|
#include <glib.h>
|
|
|
|
|
#else
|
2005-07-14 13:04:01 +00:00
|
|
|
#include "partial-glib.h"
|
2001-09-30 Tor Lillqvist <tml@iki.fi>
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.
2005-07-14 13:04:29 +00:00
|
|
|
#endif
|
2005-07-14 13:04:01 +00:00
|
|
|
|
|
|
|
|
typedef enum
|
|
|
|
|
{
|
|
|
|
|
LESS_THAN,
|
|
|
|
|
GREATER_THAN,
|
|
|
|
|
LESS_THAN_EQUAL,
|
|
|
|
|
GREATER_THAN_EQUAL,
|
|
|
|
|
EQUAL,
|
|
|
|
|
NOT_EQUAL,
|
|
|
|
|
ALWAYS_MATCH
|
|
|
|
|
} ComparisonType;
|
|
|
|
|
|
|
|
|
|
typedef struct _Package Package;
|
|
|
|
|
typedef struct _RequiredVersion RequiredVersion;
|
|
|
|
|
|
|
|
|
|
struct _RequiredVersion
|
|
|
|
|
{
|
|
|
|
|
char *name;
|
|
|
|
|
ComparisonType comparison;
|
|
|
|
|
char *version;
|
|
|
|
|
Package *owner;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
struct _Package
|
|
|
|
|
{
|
|
|
|
|
char *key; /* filename name */
|
|
|
|
|
char *name; /* human-readable name */
|
|
|
|
|
char *version;
|
|
|
|
|
char *description;
|
2005-07-14 13:05:41 +00:00
|
|
|
char *url;
|
2005-07-14 13:04:01 +00:00
|
|
|
char *pcfiledir; /* directory it was loaded from */
|
|
|
|
|
GSList *requires;
|
2005-06-27 Tollef Fog Heen <tfheen@err.no>
Author: tfheen
Date: 2005-06-27 19:53:05 GMT
2005-06-27 Tollef Fog Heen <tfheen@err.no>
All those Requires.private changes are thanks to James
Henstridge. Thanks!
* check/private-dep.pc, check/public-dep.pc,
check/requires-test.pc: New files, data for the
check-requires-private test.
* check/check-requires-private: New test to check for
Requires.private support.
* check/Makefile.am (EXTRA_DIST, TESTS): Add Requires.private
test.
* pkg.h (struct _Package): Add requires_private
* pkg.c (get_requires_private, fill_list_single_package)
(fill_list, verify_package, verify_package, get_merged)
(get_merged_from_back, get_multi_merged)
(get_multi_merged_from_back, package_get_l_libs)
(packages_get_l_libs, package_get_L_libs, packages_get_L_libs)
(package_get_other_libs, packages_get_other_libs)
(package_get_I_cflags, packages_get_I_cflags)
(package_get_other_cflags, packages_get_other_cflags): Handle
private requires and cascading changes.
* parse.c (parse_requires_private, parse_conflicts)
(parse_package_file): Handle Requires.private
2005-07-14 13:07:31 +00:00
|
|
|
GSList *requires_private;
|
2005-07-14 13:04:01 +00:00
|
|
|
GSList *l_libs;
|
|
|
|
|
char *l_libs_merged;
|
|
|
|
|
GSList *L_libs;
|
|
|
|
|
char *L_libs_merged;
|
2005-07-14 13:05:17 +00:00
|
|
|
GSList *other_libs;
|
2005-07-14 13:04:01 +00:00
|
|
|
char *other_libs_merged;
|
|
|
|
|
GSList *I_cflags;
|
|
|
|
|
char *I_cflags_merged;
|
2005-07-14 13:05:17 +00:00
|
|
|
GSList *other_cflags;
|
2005-07-14 13:04:01 +00:00
|
|
|
char *other_cflags_merged;
|
|
|
|
|
GHashTable *vars;
|
|
|
|
|
GHashTable *required_versions; /* hash from name to RequiredVersion */
|
|
|
|
|
GSList *conflicts; /* list of RequiredVersion */
|
|
|
|
|
gboolean uninstalled; /* used the -uninstalled file */
|
2005-07-14 13:04:45 +00:00
|
|
|
int path_position; /* used to order packages by position in path of their .pc file, lower number means earlier in path */
|
2005-07-14 13:07:18 +00:00
|
|
|
int libs_num; /* Number of times the "Libs" header has been seen */
|
|
|
|
|
int libs_private_num; /* Number of times the "Libs.private" header has been seen */
|
2005-07-14 13:04:01 +00:00
|
|
|
};
|
|
|
|
|
|
2005-07-14 13:05:51 +00:00
|
|
|
Package *get_package (const char *name);
|
2005-10-16 17:31:41 +00:00
|
|
|
Package *get_package_quiet (const char *name);
|
2005-07-14 13:07:18 +00:00
|
|
|
char * package_get_l_libs (Package *pkg);
|
|
|
|
|
char * packages_get_l_libs (GSList *pkgs);
|
|
|
|
|
char * package_get_L_libs (Package *pkg);
|
|
|
|
|
char * packages_get_L_libs (GSList *pkgs);
|
2005-07-14 13:05:51 +00:00
|
|
|
char * package_get_other_libs (Package *pkg);
|
|
|
|
|
char * packages_get_other_libs (GSList *pkgs);
|
2005-07-14 13:07:18 +00:00
|
|
|
char * packages_get_all_libs (GSList *pkgs);
|
2005-07-14 13:05:51 +00:00
|
|
|
char * package_get_I_cflags (Package *pkg);
|
|
|
|
|
char * packages_get_I_cflags (GSList *pkgs);
|
|
|
|
|
char * package_get_other_cflags (Package *pkg);
|
|
|
|
|
char * packages_get_other_cflags (GSList *pkgs);
|
|
|
|
|
char * packages_get_all_cflags (GSList *pkgs);
|
|
|
|
|
char * package_get_var (Package *pkg,
|
|
|
|
|
const char *var);
|
2005-07-14 13:04:01 +00:00
|
|
|
char * packages_get_var (GSList *pkgs,
|
|
|
|
|
const char *var);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void add_search_dir (const char *path);
|
2005-07-14 13:06:23 +00:00
|
|
|
void add_search_dirs (const char *path, const char *separator);
|
2005-07-14 13:04:01 +00:00
|
|
|
void package_init (void);
|
|
|
|
|
int compare_versions (const char * a, const char *b);
|
|
|
|
|
gboolean version_test (ComparisonType comparison,
|
|
|
|
|
const char *a,
|
|
|
|
|
const char *b);
|
|
|
|
|
|
|
|
|
|
const char *comparison_to_str (ComparisonType comparison);
|
|
|
|
|
|
|
|
|
|
void print_package_list (void);
|
|
|
|
|
|
|
|
|
|
void define_global_variable (const char *varname,
|
|
|
|
|
const char *varval);
|
|
|
|
|
|
|
|
|
|
void debug_spew (const char *format, ...);
|
|
|
|
|
void verbose_error (const char *format, ...);
|
|
|
|
|
|
2005-07-14 13:04:19 +00:00
|
|
|
gboolean name_ends_in_uninstalled (const char *str);
|
|
|
|
|
|
2005-08-27 09:17:49 +00:00
|
|
|
void enable_private_libs(void);
|
|
|
|
|
void disable_private_libs(void);
|
2009-03-30 20:40:53 +02:00
|
|
|
void enable_requires_private(void);
|
|
|
|
|
void disable_requires_private(void);
|
2005-08-27 09:17:49 +00:00
|
|
|
|
2005-07-14 13:04:01 +00:00
|
|
|
/* If TRUE, do not automatically prefer uninstalled versions */
|
|
|
|
|
extern gboolean disable_uninstalled;
|
|
|
|
|
|
2008-01-16 23:10:25 +01:00
|
|
|
extern char *pcsysrootdir;
|
|
|
|
|
|
2005-07-14 13:04:37 +00:00
|
|
|
#ifdef G_OS_WIN32
|
|
|
|
|
/* If TRUE, do not automatically define "prefix" while
|
|
|
|
|
* parsing each .pc file */
|
|
|
|
|
extern int dont_define_prefix;
|
|
|
|
|
/* The name of the variable that acts as prefix, unless it is "prefix" */
|
|
|
|
|
extern char *prefix_variable;
|
2005-07-14 13:04:41 +00:00
|
|
|
|
|
|
|
|
/* If TRUE, output flags in MSVC syntax. */
|
|
|
|
|
extern int msvc_syntax;
|
2005-07-14 13:04:37 +00:00
|
|
|
#endif
|
|
|
|
|
|
2005-07-14 13:04:01 +00:00
|
|
|
#endif
|
|
|
|
|
|