[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
FYI: abstract libltdl more carefully for MinGW [libtool--devo--1.0--patc
From: |
Gary V. Vaughan |
Subject: |
FYI: abstract libltdl more carefully for MinGW [libtool--devo--1.0--patch-226] |
Date: |
Sun, 3 Oct 2004 14:51:26 +0100 (BST) |
User-agent: |
mailnotify/0.3 |
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Applied to HEAD.
* looking for address@hidden/libtool--devo--1.0--patch-225 to compare with
* comparing to address@hidden/libtool--devo--1.0--patch-225
M libltdl/slist.h
M ChangeLog
M libltdl/argz_.h
M libltdl/lt__dirent.h
M HACKING
M libltdl/lt__alloc.h
* modified files
Index: Changelog
from Ralf Wildenhues <address@hidden>,
Gary V. Vaughan <address@hidden>
* libltdl/lt__alloc.h: Declare exported functions with LT_SCOPE
for mingw32.
* libltdl/lt__dirent.h: Ditto.
* libltdl/argz._h: Ditto. Be careful about not requiring
additional libltdl files when used outside of libltdl.
* libltdl/slist.h: Ditto.
* HACKING: Add a section on libltdl implementation layering.
--- orig/HACKING
+++ mod/HACKING
@@ -100,7 +100,91 @@
variable names. Don't use `return', instead echo the result of a
function and call it from within backquotes.
-6. Release Procedure
+6. Abstraction layers in libltdl
+================================
+
+* The libltdl API uses a layered approach to differentiate internal and
+ external interfaces, among other things. To keep the abstraction
+ consistent, files in a given layer may only use APIs from files in the
+ lower layers. The exception to this is lt__glibc.h which serves a
+ dual purpose, as explained later.
+
+* At the bottom of the stack we have the system abstraction layer,
+ which tries to smooth over the cracks where there are differences
+ between host systems and compilers. config.h is generated at
+ configure time and is not installed; lt_system.h is an installed
+ file and cannot use macros from config.h:
+
+ lt_system.h ../config.h
+
+* Next up is the libc abstraction layer, which provides a uniform api
+ to various system libc interfaces that differ between hosts supported
+ by libtool. Typically, the files that implement this layer begin:
+
+ #if defined(HAVE_CONFIG_H)
+ # include HAVE_CONFIG_H
+ #endif
+ #include "lt_system.h"
+
+ Or if they are installed headers that must work outside the libtool
+ source tree, simply:
+
+ #include <libltdl/lt_system.h>
+
+ This layer's interface is defined by files that are usually named with
+ a leading `lt__':
+
+ ,------------. ,-----------. ,------. ,-------.
+ |lt__dirent.h| |lt__alloc.h| |argz.h| |slist.h|
+ +------------+ +-----------+ +------+ +-------+
+ |lt__dirent.c| |lt__alloc.c| |argz.c| |slist.c|
+ `------------' `-----------' `------' `-------'
+
+ The exceptions here are argz.h and slist.h which are used
+ independently of libltdl in other projects.
+
+* There is also a sub-layer that can be used either by the headers that
+ implement it, in which case its function is to avoid namespace clashes
+ when linked with the GNU C library; Or it can be included by code that
+ wants to program against a glibc like interface, where it also serves
+ the function of pulling in all the glibc-like functionality used by
+ libltdl from a single:
+
+ #include <libltdl/lt__glibc.h>
+
+ It consists of the single file:
+
+ lt__glibc.h
+
+* The next layer are the subsystems of the exported libltdl API, which
+ are defined by files that are named with a leading `lt_' (no double
+ underscore!):
+
+ ,----------. ,-------------.
+ |lt_error.h| |lt_dlloader.h|
+ +----------+ +-------------+
+ |lt_error.c| |lt_dlloader.c|
+ `----------' `-------------'
+
+
+* The top layer of the stack is the libltdl API proper, which includes
+ the subsystems automatically:
+
+ ,------.
+ |ltdl.h|
+ +------+
+ |ltdl.c|
+ `------'
+
+* And finally, there is an additional internal only layer (as evidenced
+ by the `lt__' prefix to the filename!) that defines additional
+ internal interfaces that are not exported to libltdl clients, but are
+ shared between internal files:
+
+ lt__private.h
+
+
+7. Release Procedure
====================
* If you are a libtool maintainer, but have not yet registered your
--- orig/libltdl/argz_.h
+++ mod/libltdl/argz_.h
@@ -35,23 +35,30 @@
#if defined(LTDL)
# include "lt__glibc.h"
+#else
+# define LT_SCOPE
#endif
#if defined(_cplusplus)
extern "C" {
#endif
-error_t argz_append (char **pargz, size_t *pargz_len,
- const char *buf, size_t buf_len);
-error_t argz_create_sep (const char *str, int delim,
- char **pargz, size_t *pargz_len);
-error_t argz_insert (char **pargz, size_t *pargz_len,
- char *before, const char *entry);
-char * argz_next (char *argz, size_t argz_len, const char
*entry);
-void argz_stringify (char *argz, size_t argz_len, int sep);
+LT_SCOPE error_t argz_append (char **pargz, size_t *pargz_len,
+ const char *buf, size_t buf_len);
+LT_SCOPE error_t argz_create_sep(const char *str, int delim,
+ char **pargz, size_t *pargz_len);
+LT_SCOPE error_t argz_insert (char **pargz, size_t *pargz_len,
+ char *before, const char *entry);
+LT_SCOPE char * argz_next (char *argz, size_t argz_len,
+ const char *entry);
+LT_SCOPE void argz_stringify (char *argz, size_t argz_len, int sep);
#if defined(_cplusplus)
}
+#endif
+
+#if !defined(LTDL)
+# undef LT_SCOPE
#endif
#endif /*!defined(LT__ARGZ_H)*/
--- orig/libltdl/lt__alloc.h
+++ mod/libltdl/lt__alloc.h
@@ -45,12 +45,12 @@
/* If set, this function is called when memory allocation has failed. */
extern void (*lt__alloc_die) (void);
-void *lt__malloc (size_t n);
-void *lt__zalloc (size_t n);
-void *lt__realloc (void *mem, size_t n);
-void *lt__memdup (void const *mem, size_t n);
+LT_SCOPE void *lt__malloc (size_t n);
+LT_SCOPE void *lt__zalloc (size_t n);
+LT_SCOPE void *lt__realloc (void *mem, size_t n);
+LT_SCOPE void *lt__memdup (void const *mem, size_t n);
-char *lt__strdup (const char *string);
+LT_SCOPE char *lt__strdup (const char *string);
LT_END_C_DECLS
--- orig/libltdl/lt__dirent.h
+++ mod/libltdl/lt__dirent.h
@@ -86,9 +86,9 @@
} DIR;
-DIR * opendir (const char *path);
-struct dirent * readdir (DIR *entry);
-void closedir (DIR *entry);
+LT_SCOPE DIR * opendir (const char *path);
+LT_SCOPE struct dirent *readdir (DIR *entry);
+LT_SCOPE void closedir (DIR *entry);
LT_END_C_DECLS
--- orig/libltdl/slist.h
+++ mod/libltdl/slist.h
@@ -40,10 +40,15 @@
#if !defined(SLIST_H)
#define SLIST_H 1
-#include <libltdl/lt_system.h>
-
-
-LT_BEGIN_C_DECLS
+#if defined(LTDL)
+# include <libltdl/lt_system.h>
+#else
+# define LT_SCOPE
+#endif
+
+#if defined(_cplusplus)
+extern "C" {
+#endif
typedef struct slist {
struct slist *next; /* chain forward pointer*/
@@ -76,6 +81,12 @@
LT_SCOPE SList *slist_box (const void *userdata);
LT_SCOPE void * slist_unbox (SList *item);
-LT_END_C_DECLS
+#if defined(_cplusplus)
+}
+#endif
+
+#if !defined(LTDL)
+# undef LT_SCOPE
+#endif
#endif /*!defined(SLIST_H)*/
- --
Gary V. Vaughan ())_. address@hidden,gnu.org}
Research Scientist ( '/ http://tkd.kicks-ass.net
GNU Hacker / )= http://www.gnu.org/software/libtool
Technical Author `(_~)_ http://sources.redhat.com/autobook
_________________________________________________________
This patch notification generated by tlaapply version 0.6
http://tkd.kicks-ass.net/arch/address@hidden/cvs-utils--tla--1.0
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.4 (Darwin)
iD8DBQFBYAPeFRMICSmD1gYRAgoYAKCiT6lHiewAaK0R+Ilrrf3O1rPxugCeLts4
wQzintQJrhbiijejlddGCso=
=eFCe
-----END PGP SIGNATURE-----
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- FYI: abstract libltdl more carefully for MinGW [libtool--devo--1.0--patch-226],
Gary V. Vaughan <=