You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@apr.apache.org by je...@apache.org on 2002/06/24 09:01:19 UTC
cvs commit: apr/test Makefile.in testdso.c
jerenkrantz 2002/06/24 00:01:19
Modified: . CHANGES
dso/unix dso.c
test Makefile.in testdso.c
Log:
Correct shared library support on Darwin to not fatally error out when
a shared library does not exist.
This does retain the Mach-O bundle and Mach-O dynamically linked shared
library support on Darwin.
Also improvements relating to testdso:
- Get testdso to actually link.
- Add support for a second DSO to load in testdso.
- Build mod_test.slo and libmod_test.slo with and without the -module
option. This checks that both types of dynamic libraries can be
loaded.
Revision Changes Path
1.298 +3 -0 apr/CHANGES
Index: CHANGES
===================================================================
RCS file: /home/cvs/apr/CHANGES,v
retrieving revision 1.297
retrieving revision 1.298
diff -u -r1.297 -r1.298
--- CHANGES 22 Jun 2002 08:06:48 -0000 1.297
+++ CHANGES 24 Jun 2002 07:01:18 -0000 1.298
@@ -1,5 +1,8 @@
Changes with APR b1
+ *) Correct shared library support on Darwin to not fatally error out
+ when a shared library does not exist. [Justin Erenkrantz]
+
*) Added optimized atomic CAS support for Linux/x86 (available only
when APR is configured with --enable-nonportable-atomics=yes)
[Brian Pane]
1.55 +7 -2 apr/dso/unix/dso.c
Index: dso.c
===================================================================
RCS file: /home/cvs/apr/dso/unix/dso.c,v
retrieving revision 1.54
retrieving revision 1.55
diff -u -r1.54 -r1.55
--- dso.c 2 May 2002 13:28:24 -0000 1.54
+++ dso.c 24 Jun 2002 07:01:18 -0000 1.55
@@ -124,8 +124,11 @@
#elif defined(DSO_USE_DYLD)
NSObjectFileImage image;
NSModule os_handle = NULL;
+ NSObjectFileImageReturnCode dsoerr;
char* err_msg = NULL;
- if (NSCreateObjectFileImageFromFile(path, &image) == NSObjectFileImageSuccess) {
+ dsoerr = NSCreateObjectFileImageFromFile(path, &image);
+
+ if (dsoerr == NSObjectFileImageSuccess) {
#if defined(NSLINKMODULE_OPTION_RETURN_ON_ERROR) && defined(NSLINKMODULE_OPTION_NONE)
os_handle = NSLinkModule(image, path,
NSLINKMODULE_OPTION_RETURN_ON_ERROR |
@@ -135,7 +138,9 @@
#endif
NSDestroyObjectFileImage(image);
}
- else if (NSAddLibrary(path) == TRUE) {
+ else if ((dsoerr == NSObjectFileImageFormat ||
+ dsoerr == NSObjectFileImageInappropriateFile) &&
+ NSAddLibrary(path) == TRUE) {
os_handle = (NSModule)DYLD_LIBRARY_HANDLE;
}
else {
1.84 +13 -7 apr/test/Makefile.in
Index: Makefile.in
===================================================================
RCS file: /home/cvs/apr/test/Makefile.in,v
retrieving revision 1.83
retrieving revision 1.84
diff -u -r1.83 -r1.84
--- Makefile.in 13 May 2002 16:35:05 -0000 1.83
+++ Makefile.in 24 Jun 2002 07:01:18 -0000 1.84
@@ -55,7 +55,7 @@
LOCAL_LIBS=../libapr.la
-CLEAN_TARGETS = testfile.tmp testdso@EXEEXT@ mod_test.so
+CLEAN_TARGETS = testfile.tmp testdso@EXEEXT@ mod_test.slo
INCDIR=../include
INCLUDES=-I$(INCDIR)
@@ -76,9 +76,8 @@
testfmt@EXEEXT@: testfmt.lo $(LOCAL_LIBS)
$(LINK) testfmt.lo $(LOCAL_LIBS) $(ALL_LIBS)
-### why the export-dynamic?
-testdso@EXEEXT@: testdso.lo mod_test.so $(LOCAL_LIBS)
- $(LINK) -export-dynamic testdso.lo $(LOCAL_LIBS) $(ALL_LIBS)
+testdso@EXEEXT@: testdso.lo mod_test.la libmod_test.la $(LOCAL_LIBS)
+ $(LINK) testdso.lo $(LOCAL_LIBS) $(ALL_LIBS)
testoc@EXEEXT@: testoc.lo occhild@EXEEXT@ $(LOCAL_LIBS)
$(LINK) testoc.lo $(LOCAL_LIBS) $(ALL_LIBS)
@@ -86,9 +85,16 @@
occhild@EXEEXT@: occhild.lo $(LOCAL_LIBS)
$(LINK) occhild.lo $(LOCAL_LIBS) $(ALL_LIBS)
-mod_test.so: mod_test.lo $(LOCAL_LIBS)
- $(LINK) -shared mod_test.o $(LOCAL_LIBS) $(ALL_LIBS)
-
+# FIXME: -prefer-pic is only supported with libtool-1.4+
+mod_test.slo: mod_test.c
+ $(LIBTOOL) --mode=compile $(COMPILE) -prefer-pic -c $< && touch $@
+
+mod_test.la: mod_test.slo $(LOCAL_LIBS)
+ $(LINK) --mode=link $(COMPILE) -rpath $(shell pwd) -avoid-version -module mod_test.lo $(LT_LDFLAGS) $(ALL_LDFLAGS) -o $@
+
+libmod_test.la: mod_test.slo $(LOCAL_LIBS)
+ $(LINK) --mode=link $(COMPILE) -rpath $(shell pwd) -avoid-version mod_test.lo $(LT_LDFLAGS) $(ALL_LDFLAGS) -o $@
+
testargs@EXEEXT@: testargs.lo $(LOCAL_LIBS)
$(LINK) testargs.lo $(LOCAL_LIBS) $(ALL_LIBS)
1.21 +34 -17 apr/test/testdso.c
Index: testdso.c
===================================================================
RCS file: /home/cvs/apr/test/testdso.c,v
retrieving revision 1.20
retrieving revision 1.21
diff -u -r1.20 -r1.21
--- testdso.c 10 May 2002 03:56:19 -0000 1.20
+++ testdso.c 24 Jun 2002 07:01:19 -0000 1.21
@@ -65,22 +65,27 @@
#endif
#ifdef NETWARE
-#define LIB_NAME "mod_test.nlm"
+# define LIB_NAME "mod_test.nlm"
#else
-# ifndef BEOS
-# define LIB_NAME ".libs/mod_test.so"
-# else
+# ifdef BEOS
# define LIB_NAME "mod_test.so"
+# else
+# ifdef DARWIN
+# define LIB_NAME ".libs/mod_test.so"
+# define LIB_NAME2 ".libs/libmod_test.dylib"
+# else
+# define LIB_NAME ".libs/mod_test.so"
+# define LIB_NAME2 ".libs/libmod_test.so"
+# endif
# endif
#endif
-int main (int argc, char ** argv)
+void test_shared_library(const char *libname, apr_pool_t *pool)
{
apr_dso_handle_t *h = NULL;
apr_dso_handle_sym_t func1 = NULL;
apr_dso_handle_sym_t func2 = NULL;
apr_status_t status;
- apr_pool_t *cont;
void (*function)(void);
void (*function1)(int);
int *retval;
@@ -88,19 +93,11 @@
getcwd(filename, 256);
strcat(filename, "/");
- strcat(filename, LIB_NAME);
-
- apr_initialize();
- atexit(apr_terminate);
-
- if (apr_pool_create(&cont, NULL) != APR_SUCCESS) {
- fprintf(stderr, "Couldn't allocate context.");
- exit(-1);
- }
+ strcat(filename, libname);
fprintf(stdout,"Trying to load DSO now.....................");
fflush(stdout);
- if ((status = apr_dso_load(&h, filename, cont)) != APR_SUCCESS){
+ if ((status = apr_dso_load(&h, filename, pool)) != APR_SUCCESS){
char my_error[256];
apr_strerror(status, my_error, sizeof(my_error));
fprintf(stderr, "%s!\n", my_error);
@@ -161,6 +158,26 @@
exit (-1);
}
fprintf(stdout,"OK\n");
-
+}
+
+int main (int argc, char ** argv)
+{
+ apr_pool_t *pool;
+
+ apr_initialize();
+ atexit(apr_terminate);
+
+ if (apr_pool_create(&pool, NULL) != APR_SUCCESS) {
+ fprintf(stderr, "Couldn't allocate context.");
+ exit(-1);
+ }
+
+ fprintf(stdout,"=== Checking module library ===\n");
+ test_shared_library(LIB_NAME, pool);
+#ifdef LIB_NAME2
+ fprintf(stdout,"=== Checking non-module library ===\n");
+ test_shared_library(LIB_NAME2, pool);
+#endif
+
return 0;
}