Commit 0219b8b6 authored by Jay Painter's avatar Jay Painter

Changed glib.h so it's created by merging glib_pre1.h, glibconfig.h, and

glib_pre2.h.  This eliminates the need to install glibconfig.h in $(includedir)
and fixes some builddir != srcdir when compiling multiple archatecture types
from the same source code. -Jay
parent 4d6f11a6
...@@ -17,12 +17,23 @@ libglib_la_SOURCES = \ ...@@ -17,12 +17,23 @@ libglib_la_SOURCES = \
gstring.c gstring.c
include_HEADERS = \ include_HEADERS = \
glib.h \ glib.h
glibconfig.h
libglib_la_LDFLAGS = -version-info 1:0:0 libglib_la_LDFLAGS = -version-info 1:0:0
INCLUDES = INCLUDES = -I$(top_srcdir)
BUILT_SOURCES = glib.h
glib.h: glibconfig.h glib_pre1.h glib_pre2.h
$(srcdir)/makeglib_h $(srcdir)/glib_pre1.h \
$(top_builddir)/glibconfig.h \
$(srcdir)/glib_pre2.h > $@
EXTRA_DIST = \
glib_pre1.h \
glib_pre2.h \
makeglib_h
noinst_PROGRAMS = testglib noinst_PROGRAMS = testglib
testglib_LDADD = $(top_builddir)/libglib.la testglib_LDADD = $(top_builddir)/libglib.la
...@@ -36,3 +47,5 @@ files: ...@@ -36,3 +47,5 @@ files:
release: release:
$(MAKE) dist distdir=$(PACKAGE)`date +"%y%m%d"` $(MAKE) dist distdir=$(PACKAGE)`date +"%y%m%d"`
$(DEP_FILES) : $(BUILT_SOURCES)
...@@ -85,12 +85,18 @@ libglib_la_SOURCES = \ ...@@ -85,12 +85,18 @@ libglib_la_SOURCES = \
gstring.c gstring.c
include_HEADERS = \ include_HEADERS = \
glib.h \ glib.h
glibconfig.h
libglib_la_LDFLAGS = -version-info 1:0:0 libglib_la_LDFLAGS = -version-info 1:0:0
INCLUDES = INCLUDES = -I$(top_srcdir)
BUILT_SOURCES = glib.h
EXTRA_DIST = \
glib_pre1.h \
glib_pre2.h \
makeglib_h
noinst_PROGRAMS = testglib noinst_PROGRAMS = testglib
testglib_LDADD = $(top_builddir)/libglib.la testglib_LDADD = $(top_builddir)/libglib.la
...@@ -444,6 +450,11 @@ clean-generic maintainer-clean-generic clean mostlyclean distclean \ ...@@ -444,6 +450,11 @@ clean-generic maintainer-clean-generic clean mostlyclean distclean \
maintainer-clean maintainer-clean
glib.h: glibconfig.h glib_pre1.h glib_pre2.h
$(srcdir)/makeglib_h $(srcdir)/glib_pre1.h \
$(top_builddir)/glibconfig.h \
$(srcdir)/glib_pre2.h > $@
.PHONY: files release .PHONY: files release
files: files:
...@@ -454,6 +465,8 @@ files: ...@@ -454,6 +465,8 @@ files:
release: release:
$(MAKE) dist distdir=$(PACKAGE)`date +"%y%m%d"` $(MAKE) dist distdir=$(PACKAGE)`date +"%y%m%d"`
$(DEP_FILES) : $(BUILT_SOURCES)
# Tell versions [3.59,3.63) of GNU make to not export all variables. # Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded. # Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT: .NOEXPORT:
This diff is collapsed.
This diff is collapsed.
/* GLIB - Library of useful routines for C programming
* Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library 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
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, write to the Free
* Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#ifndef __G_LIB_H__
#define __G_LIB_H__
/*
* THIS PORTION PATCHED IN FROM AUTOHEADER
*/
/*
* END AUTOHEADER PATCH-IN
*/
#ifdef USE_DMALLOC
#include "dmalloc.h"
#endif
/* glib provides definitions for the extrema of many
* of the standard types. These are:
* G_MINFLOAT
* G_MAXFLOAT
* G_MINDOUBLE
* G_MAXDOUBLE
* G_MINSHORT
* G_MAXSHORT
* G_MININT
* G_MAXINT
* G_MINLONG
* G_MAXLONG
*/
#ifdef HAVE_FLOAT_H
#include <float.h>
#define G_MINFLOAT FLT_MIN
#define G_MAXFLOAT FLT_MAX
#define G_MINDOUBLE DBL_MIN
#define G_MAXDOUBLE DBL_MAX
#elif HAVE_VALUES_H
#include <values.h>
#define G_MINFLOAT MINFLOAT
#define G_MAXFLOAT MAXFLOAT
#define G_MINDOUBLE MINDOUBLE
#define G_MAXDOUBLE MAXDOUBLE
#endif /* HAVE_VALUES_H */
#ifdef HAVE_LIMITS_H
#include <limits.h>
#define G_MINSHORT SHRT_MIN
#define G_MAXSHORT SHRT_MAX
#define G_MININT INT_MIN
#define G_MAXINT INT_MAX
#define G_MINLONG LONG_MIN
#define G_MAXLONG LONG_MAX
#elif HAVE_VALUES_H
#ifdef HAVE_FLOAT_H
#include <values.h>
#endif /* HAVE_FLOAT_H */
#define G_MINSHORT MINSHORT
#define G_MAXSHORT MAXSHORT
#define G_MININT MININT
#define G_MAXINT MAXINT
#define G_MINLONG MINLONG
#define G_MAXLONG MAXLONG
#endif /* HAVE_VALUES_H */
/* Provide definitions for some commonly used macros.
* These are only provided if they haven't already
* been defined. It is assumed that if they are already
* defined then the current definition is correct.
*/
#ifndef FALSE
#define FALSE 0
#endif /* FALSE */
#ifndef TRUE
#define TRUE 1
#endif /* TRUE */
#ifndef NULL
#define NULL ((void*) 0)
#endif /* NULL */
#ifndef MAX
#define MAX(a, b) (((a) > (b)) ? (a) : (b))
#endif /* MAX */
#ifndef MIN
#define MIN(a, b) (((a) < (b)) ? (a) : (b))
#endif /* MIN */
#ifndef ABS
#define ABS(a) (((a) < 0) ? -(a) : (a))
#endif /* ABS */
#ifndef CLAMP
#define CLAMP(x, low, high) (((x) > (high)) ? (high) : (((x) < (low)) ? (low) : (x)))
#endif /* CLAMP */
#ifndef ATEXIT
#define ATEXIT(proc) (atexit (proc))
#endif /* ATEXIT */
/* Provide macros for easily allocating memory. The macros
* will cast the allocated memory to the specified type
* in order to avoid compiler warnings. (Makes the code neater).
*/
#ifdef __DMALLOC_H__
#define g_new(type,count) ALLOC(type,count)
#define g_new0(type,count) CALLOC(type,count)
#else /* __DMALLOC_H__ */
#define g_new(type, count) \
((type *) g_malloc ((unsigned) sizeof (type) * (count)))
#define g_new0(type, count) \
((type *) g_malloc0 ((unsigned) sizeof (type) * (count)))
#endif /* __DMALLOC_H__ */
#define g_chunk_new(type, chunk) \
((type *) g_mem_chunk_alloc (chunk))
/* Provide macros for error handling. The "assert" macros will
* exit on failur. The "return" macros will exit the current
* function. Two different definitions are given for the macros
* in order to support gcc's __PRETTY_FUNCTION__ capability.
*/
#define g_string(x) #x
#ifdef __GNUC__
#define g_assert(expr) \
if (!(expr)) \
g_error ("file %s: line %d (%s): \"%s\"", \
__FILE__, \
__LINE__, \
__PRETTY_FUNCTION__, \
#expr)
#define g_assert_not_reached() \
g_error ("file %s: line %d (%s): \"should not be reached\"", \
__FILE__, \
__LINE__, \
__PRETTY_FUNCTION__)
#define g_return_if_fail(expr) \
if (!(expr)) \
{ \
g_warning ("file %s: line %d (%s): \"%s\"", \
__FILE__, \
__LINE__, \
__PRETTY_FUNCTION__, \
#expr); \
return; \
}
#define g_return_val_if_fail(expr,val) \
if (!(expr)) \
{ \
g_warning ("file %s: line %d (%s): \"%s\"", \
__FILE__, \
__LINE__, \
__PRETTY_FUNCTION__, \
#expr); \
return val; \
}
#else /* __GNUC__ */
#define g_assert(expr) \
if (!(expr)) \
g_error ("file %s: line %d: \"%s\"", \
__FILE__, \
__LINE__, \
#expr)
#define g_assert_not_reached() \
g_error ("file %s: line %d: \"should not be reached\"", \
__FILE__, \
__LINE__)
#define g_return_if_fail(expr) \
if (!(expr)) \
{ \
g_warning ("file %s: line %d: \"%s\"", \
__FILE__, \
__LINE__, \
#expr); \
return; \
}
#define g_return_val_if_fail(expr, val) \
if (!(expr)) \
{ \
g_warning ("file %s: line %d: \"%s\"", \
__FILE__, \
__LINE__, \
#expr); \
return val; \
}
#endif /* __GNUC__ */
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/* Provide type definitions for commonly used types.
* These are useful because a "gint8" can be adjusted
* to be 1 byte (8 bits) on all platforms. Similarly and
* more importantly, "gint32" can be adjusted to be
* 4 bytes (32 bits) on all platforms.
*/
typedef char gchar;
typedef short gshort;
typedef long glong;
typedef int gint;
typedef char gboolean;
typedef unsigned char guchar;
typedef unsigned short gushort;
typedef unsigned long gulong;
typedef unsigned int guint;
typedef float gfloat;
typedef double gdouble;
/* HAVE_LONG_DOUBLE doesn't work correctly on all platforms.
* Since gldouble isn't used anywhere, just disable it for now */
#if 0
#ifdef HAVE_LONG_DOUBLE
typedef long double gldouble;
#else /* HAVE_LONG_DOUBLE */
typedef double gldouble;
#endif /* HAVE_LONG_DOUBLE */
#endif /* 0 */
typedef void* gpointer;
#if (SIZEOF_CHAR == 1)
typedef signed char gint8;
typedef unsigned char guint8;
#endif /* SIZEOF_CHAR */
#if (SIZEOF_SHORT == 2)
typedef signed short gint16;
typedef unsigned short guint16;
#endif /* SIZEOF_SHORT */
#if (SIZEOF_INT == 4)
typedef signed int gint32;
typedef unsigned int guint32;
#elif (SIZEOF_LONG == 4)
typedef signed long gint32;
typedef unsigned long guint32;
#endif /* SIZEOF_INT */
typedef struct _GList GList;
typedef struct _GSList GSList;
typedef struct _GHashTable GHashTable;
typedef struct _GCache GCache;
typedef struct _GTree GTree;
typedef struct _GTimer GTimer;
typedef struct _GMemChunk GMemChunk;
typedef struct _GListAllocator GListAllocator;
typedef struct _GStringChunk GStringChunk;
typedef struct _GString GString;
typedef struct _GArray GArray;
typedef void (*GFunc) (gpointer data, gpointer user_data);
typedef void (*GHFunc) (gpointer key, gpointer value, gpointer user_data);
typedef guint (*GHashFunc) (gpointer key);
typedef gint (*GCompareFunc) (gpointer a, gpointer b);
typedef gpointer (*GCacheNewFunc) (gpointer key);
typedef gpointer (*GCacheDupFunc) (gpointer value);
typedef void (*GCacheDestroyFunc) (gpointer value);
typedef gint (*GTraverseFunc) (gpointer key,
gpointer value,
gpointer data);
typedef gint (*GSearchFunc) (gpointer key,
gpointer data);
typedef void (*GErrorFunc) (gchar *str);
typedef void (*GWarningFunc) (gchar *str);
typedef void (*GPrintFunc) (gchar *str);
struct _GList
{
gpointer data;
GList *next;
GList *prev;
};
struct _GSList
{
gpointer data;
GSList *next;
};
struct _GString
{
gchar *str;
gint len;
};
struct _GArray
{
gchar *data;
guint len;
};
struct _GHashTable { gint dummy; };
struct _GCache { gint dummy; };
struct _GTree { gint dummy; };
struct _GTimer { gint dummy; };
struct _GMemChunk { gint dummy; };
struct _GListAllocator { gint dummy; };
struct _GStringChunk { gint dummy; };
typedef enum
{
G_IN_ORDER,
G_PRE_ORDER,
G_POST_ORDER
} GTraverseType;
/* Doubly linked lists
*/
GList* g_list_alloc (void);
void g_list_free (GList *list);
void g_list_free_1 (GList *list);
GList* g_list_append (GList *list,
gpointer data);
GList* g_list_prepend (GList *list,
gpointer data);
GList* g_list_insert (GList *list,
gpointer data,
gint position);
GList* g_list_concat (GList *list1,
GList *list2);
GList* g_list_remove (GList *list,
gpointer data);
GList* g_list_remove_link (GList *list,
GList *link);
GList* g_list_reverse (GList *list);
GList* g_list_nth (GList *list,
gint n);
GList* g_list_find (GList *list,
gpointer data);
GList* g_list_last (GList *list);
GList* g_list_first (GList *list);
gint g_list_length (GList *list);
void g_list_foreach (GList *list,
GFunc func,
gpointer user_data);
/* Singly linked lists
*/
GSList* g_slist_alloc (void);
void g_slist_free (GSList *list);
void g_slist_free_1 (GSList *list);
GSList* g_slist_append (GSList *list,
gpointer data);
GSList* g_slist_prepend (GSList *list,
gpointer data);
GSList* g_slist_insert (GSList *list,
gpointer data,
gint position);
GSList* g_slist_concat (GSList *list1,
GSList *list2);
GSList* g_slist_remove (GSList *list,
gpointer data);
GSList* g_slist_remove_link (GSList *list,
GSList *link);
GSList* g_slist_reverse (GSList *list);
GSList* g_slist_nth (GSList *list,
gint n);
GSList* g_slist_find (GSList *list,
gpointer data);
GSList* g_slist_last (GSList *list);
gint g_slist_length (GSList *list);
void g_slist_foreach (GSList *list,
GFunc func,
gpointer user_data);
/* List Allocators
*/
GListAllocator* g_list_allocator_new (void);
void g_list_allocator_free (GListAllocator* allocator);
GListAllocator* g_slist_set_allocator (GListAllocator* allocator);
GListAllocator* g_list_set_allocator (GListAllocator* allocator);
/* Hash tables
*/
GHashTable* g_hash_table_new (GHashFunc hash_func,
GCompareFunc key_compare_func);
void g_hash_table_destroy (GHashTable *hash_table);
void g_hash_table_insert (GHashTable *hash_table,
gpointer key,
gpointer value);
void g_hash_table_remove (GHashTable *hash_table,
gpointer key);
gpointer g_hash_table_lookup (GHashTable *hash_table,
const gpointer key);
void g_hash_table_freeze (GHashTable *hash_table);
void g_hash_table_thaw (GHashTable *hash_table);
void g_hash_table_foreach (GHashTable *hash_table,
GHFunc func,
gpointer user_data);
/* Caches
*/
GCache* g_cache_new (GCacheNewFunc value_new_func,
GCacheDestroyFunc value_destroy_func,
GCacheDupFunc key_dup_func,
GCacheDestroyFunc key_destroy_func,
GHashFunc hash_key_func,
GHashFunc hash_value_func,
GCompareFunc key_compare_func);
void g_cache_destroy (GCache *cache);
gpointer g_cache_insert (GCache *cache,
gpointer key);
void g_cache_remove (GCache *cache,
gpointer value);
void g_cache_key_foreach (GCache *cache,
GHFunc func,
gpointer user_data);
void g_cache_value_foreach (GCache *cache,
GHFunc func,
gpointer user_data);
/* Trees
*/
GTree* g_tree_new (GCompareFunc key_compare_func);
void g_tree_destroy (GTree *tree);
void g_tree_insert (GTree *tree,
gpointer key,
gpointer value);
void g_tree_remove (GTree *tree,
gpointer key);
gpointer g_tree_lookup (GTree *tree,
gpointer key);
void g_tree_traverse (GTree *tree,
GTraverseFunc traverse_func,
GTraverseType traverse_type,
gpointer data);
gpointer g_tree_search (GTree *tree,
GSearchFunc search_func,
gpointer data);
gint g_tree_height (GTree *tree);
gint g_tree_nnodes (GTree *tree);
/* Memory
*/
#ifdef USE_DMALLOC
#define g_malloc(size) (gpointer) MALLOC(size)
#define g_malloc0(size) (gpointer) CALLOC(char,size)
#define g_realloc(mem,size) (gpointer) REALLOC(mem,char,size)
#define g_free(mem) FREE(mem)
#else /* USE_DMALLOC */
gpointer g_malloc (gulong size);
gpointer g_malloc0 (gulong size);
gpointer g_realloc (gpointer mem,
gulong size);
void g_free (gpointer mem);
#endif /* USE_DMALLOC */
void g_mem_profile (void);
void g_mem_check (gpointer mem);
/* "g_mem_chunk_new" creates a new memory chunk.
* Memory chunks are used to allocate pieces of memory which are
* always the same size. Lists are a good example of such a data type.
* The memory chunk allocates and frees blocks of memory as needed.
* Just be sure to call "g_mem_chunk_free" and not "g_free" on data
* allocated in a mem chunk. ("g_free" will most likely cause a seg
* fault...somewhere).
*
* Oh yeah, GMemChunk is an opaque data type. (You don't really
* want to know what's going on inside do you?)
*/
/* ALLOC_ONLY MemChunk's can only allocate memory. The free operation
* is interpreted as a no op. ALLOC_ONLY MemChunk's save 4 bytes per
* atom. (They are also useful for lists which use MemChunk to allocate
* memory but are also part of the MemChunk implementation).
* ALLOC_AND_FREE MemChunk's can allocate and free memory.
*/
#define G_ALLOC_ONLY 1
#define G_ALLOC_AND_FREE 2
GMemChunk* g_mem_chunk_new (gchar *name,
gint atom_size,
gulong area_size,
gint type);