*** empty log message ***

This commit is contained in:
Thomas Tanner 1998-11-23 21:26:38 +00:00
parent 405661a0fa
commit a4f2b1f846
14 changed files with 454 additions and 155 deletions

View File

@ -1,3 +1,13 @@
1998-11-22 Thomas Tanner <tanner@gmx.de>
* libltdl: added support for .la files, LGPL license,
K&R compatibility, some API changes and bugfixes
* ltmain.in: renamed -module flag (for compiling) to -force-static,
define -DSTATIC when compiling static .o files,
do not include directories in dld_preloaded_symbols
* mdemo: modified mdemo to work with the new libltdl
* tests/mdemo-exec.test, tests/mdemo-inst.test: use .la files
1998-11-21 Alexandre Oliva <oliva@dcc.unicamp.br>
* libltdl/ltdl.c: replace NULL with 0, so that we don't depend on

View File

@ -5,7 +5,7 @@
# level Makefile.
AUTOMAKE_OPTIONS = no-dependencies foreign
CFLAGS = -module
CFLAGS = -force-static
EXTRA_DIST = acinclude.m4

View File

@ -5,7 +5,9 @@ AM_INIT_AUTOMAKE(libltdl,1.0)
AC_PROG_CC
AM_PROG_LIBTOOL
AC_CHECK_HEADERS(string.h dlfcn.h dl.h)
AC_HEADER_STDC
AC_CHECK_HEADERS(malloc.h dlfcn.h dl.h)
AC_CHECK_FUNCS(strdup)
LIBADD_DL=
AC_CHECK_FUNCS(dlopen, AC_DEFINE(HAVE_LIBDL),
@ -17,5 +19,35 @@ AC_CHECK_FUNCS(dlopen, AC_DEFINE(HAVE_LIBDL),
)
AC_SUBST(LIBADD_DL)
AC_MSG_CHECKING(for underscore before symbols)
AC_CACHE_VAL(libltdl_cv_uscore,[
echo "main(){int i=1;} fnord(){int i=23; int ltuae=42;}" > conftest.c
${CC} conftest.c > /dev/null
if (nm a.out | grep _fnord) > /dev/null; then
libltdl_cv_uscore=yes
else
libltdl_cv_uscore=no
fi])
AC_MSG_RESULT($libltdl_cv_uscore)
rm -f conftest.c a.out
if test $libltdl_cv_uscore = yes; then
if test $ac_cv_func_dlopen = yes -o $ac_cv_lib_dl_dlopen = yes ; then
AC_MSG_CHECKING(whether we have to add an underscore for dlsym)
AC_CACHE_VAL(libltdl_cv_need_uscore,AC_TRY_RUN([
#include <dlfcn.h>
#include <stdio.h>
fnord() { int i=42;}
main() { void *self, *ptr1, *ptr2; self=dlopen(NULL,RTLD_LAZY);
if(self) { ptr1=dlsym(self,"fnord"); ptr2=dlsym(self,"_fnord");
if(ptr1 && !ptr2) exit(0); } exit(1); }
], libltdl_cv_need_uscore=no,
[libltdl_cv_need_uscore=yes AC_DEFINE(NEED_USCORE)],
libltdl_cv_need_uscore=no))
AC_MSG_RESULT($libltdl_cv_need_uscore)
fi
fi
dnl Output the makefile
AC_OUTPUT(Makefile)

View File

@ -2,20 +2,22 @@
Copyright (C) 1998 Thomas Tanner <tanner@gmx.de>
This file is part of GNU Libtool.
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 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 program is distributed in the hope that it will be useful,
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 General Public License for more details.
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 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. */
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.
*/
#define _LTDL_COMPILE_
#include "ltdl.h"
@ -23,7 +25,35 @@ USA. */
#include <string.h>
#endif
#ifdef LT_RENAME
#include <stdio.h>
#ifndef HAVE_STRDUP
static char *
strdup(const char *str)
{
char *tmp;
if (!str)
return str;
tmp = malloc(strlen(str)+1);
if (tmp)
strcpy(tmp, str);
return tmp;
}
#endif
typedef struct lt_dlhandle_t {
struct lt_dlhandle_t *next;
char *filename; /* file name */
char *name; /* module name */
int usage; /* usage */
void *handle; /* system handle */
void *sys; /* system specific data */
} lt_dlhandle_t;
#ifdef STATIC
/* emulate dynamic linking using dld_preloaded_symbols */
@ -35,13 +65,20 @@ struct dld_symlist
extern struct dld_symlist dld_preloaded_symbols[];
static void
sys_dlinit (void)
static int
sys_dlinit ()
{
return 0;
}
static lt_dlhandle
sys_dlopen (char *filename)
static int
sys_dlexit ()
{
return 0;
}
static int
sys_dlopen (handle, filename) lt_dlhandle handle; const char *filename;
{
struct dld_symlist *s = dld_preloaded_symbols;
@ -51,29 +88,28 @@ sys_dlopen (char *filename)
s++;
}
if (!s->name)
return 0;
return (void*)s;
return 1;
handle->handle = s;
return 0;
}
static void
sys_dlclose (lt_dlhandle handle)
static int
sys_dlclose (handle) lt_dlhandle handle;
{
return 0;
}
static void *
sys_dlsym (lt_dlhandle handle, char *symbol)
sys_dlsym (handle, symbol) lt_dlhandle handle; char *symbol;
{
struct dld_symlist *s = (struct dld_symlist*)handle;
struct dld_symlist *s = (struct dld_symlist*)(handle->handle);
if (!s)
return 0;
s++;
while (s->address) {
if (!strncmp(s->name, "ltexp_", 6)) {
char *p = strstr(s->name, "___");
if (p && !strcmp(&p[3], symbol))
return s->address;
}
if (strcmp(s->name, symbol) == 0)
return s->address;
s++;
}
return 0;
@ -88,45 +124,45 @@ sys_dlsym (lt_dlhandle handle, char *symbol)
#include <dlfcn.h>
#endif
#ifdef RTLD_LAZY /* Solaris 2. */
#ifdef RTLD_LAZY
# define DLOPEN_MODE RTLD_LAZY
#else
#ifdef DL_LAZY
# define DLOPEN_MODE DL_LAZY
#else
# define DLOPEN_MODE 1 /* Thats what it says in the man page. */
# define DLOPEN_MODE 1
#endif
#endif
static void
sys_dlinit (void)
static int
sys_dlinit ()
{
return 0;
}
static lt_dlhandle
sys_dlopen (char *filename)
static int
sys_dlexit ()
{
return dlopen(filename, DLOPEN_MODE);
return 0;
}
static void
sys_dlclose (lt_dlhandle handle)
static int
sys_dlopen (handle, filename) lt_dlhandle handle; const char *filename;
{
dlclose(handle);
handle->handle = dlopen(filename, DLOPEN_MODE);
return !(handle->handle);
}
static int
sys_dlclose (handle) lt_dlhandle handle;
{
return dlclose(handle->handle);
}
static void *
sys_dlsym (lt_dlhandle handle, char *symbol)
sys_dlsym (handle, symbol) lt_dlhandle handle; char *symbol;
{
#ifdef __OpenBSD__
char sym[128];
strcpy(sym, "_");
strcat(sym, symbol); /* prefix symbol with leading underscore */
return dlsym(handle, sym);
#else
return dlsym(handle, symbol);
#endif
return dlsym(handle->handle, symbol);
}
#else
@ -138,32 +174,41 @@ sys_dlsym (lt_dlhandle handle, char *symbol)
#include <dl.h>
#endif
static void
sys_dlinit (void)
static int
sys_dlinit ()
{
return 0;
}
static lt_dlhandle
sys_dlopen (char *filename)
static int
sys_dlexit ()
{
return 0;
}
static int
sys_dlopen (handle, filename) lt_dlhandle handle; const char *filename;
{
/* Probably too much BIND_* flags */
return shl_load (filename, BIND_IMMEDIATE || BIND_FIRST ||
handle->handle = shl_load (filename, BIND_IMMEDIATE || BIND_FIRST ||
BIND_TOGETHER || BIND_VERBOSE || DYNAMIC_PATH, 0L);
return !(handle->handle);
}
static void
sys_dlclose (lt_dlhandle handle)
static int
sys_dlclose (handle) lt_dlhandle handle;
{
shl_unload((shl_t) handle);
shl_unload((shl_t) (handle->handle));
return 0;
}
static void *
sys_dlsym (lt_dlhandle handle, char *symbol)
sys_dlsym (handle, symbol) lt_dlhandle handle; char *symbol;
{
int status, i;
struct shl_symbol *sym;
status = shl_getsymbols((shl_t) handle, TYPE_PROCEDURE,
status = shl_getsymbols((shl_t) (handle->handle), TYPE_PROCEDURE,
EXPORT_SYMBOLS, malloc, &sym);
for (i = 0; i < status; i++)
if (strcmp(symbol, sym[i].name) == 0)
@ -176,29 +221,38 @@ sys_dlsym (lt_dlhandle handle, char *symbol)
/* dynamic linking with dld */
static void
sys_dlinit (void)
static int
sys_dlinit ()
{
return 0;
}
static lt_dlhandle
sys_dlopen (char *filename)
static int
sys_dlexit ()
{
if (dld_link (filename))
return 0;
return filename;
return 0;
}
static void
sys_dlclose (lt_dlhandle handle)
static int
sys_dlopen (handle, filename) lt_dlhandle handle; const char *filename;
{
dld_unlink_by_file ((char*)handle, 1);
if (dld_link(filename))
return 1;
handle->handle = filename;
return 0;
}
static int
sys_dlclose (handle) lt_dlhandle handle;
{
dld_unlink_by_file((char*)(handle->handle), 1);
return 0;
}
static void *
sys_dlsym (lt_dlhandle handle, char *symbol)
sys_dlsym (handle, symbol) lt_dlhandle handle; char *symbol;
{
return dld_get_func (symbol);
return dld_get_func(symbol);
}
#else
@ -208,51 +262,68 @@ sys_dlsym (lt_dlhandle handle, char *symbol)
#include <windows.h>
static void
sys_dlinit (void)
static int
sys_dlinit ()
{
return 0;
}
static lt_dlhandle
sys_dlopen (char *filename)
static int
sys_dlexit ()
{
return LoadLibrary(filename);
return 0;
}
static void
sys_dlclose (lt_dlhandle handle)
static int
sys_dlopen (handle, filename) lt_dlhandle handle; const char *filename;
{
FreeLibrary(handle);
handle->handle = LoadLibrary(filename);
return !(handle->handle);
}
static int
sys_dlclose (handle) lt_dlhandle handle;
{
FreeLibrary(handle->handle);
return 0;
}
static void *
sys_dlsym (lt_dlhandle handle, char *symbol)
sys_dlsym (handle, symbol) lt_dlhandle handle; char *symbol;
{
return GetProcAddress(handle, symbol);
return GetProcAddress(handle->handle, symbol);
}
#else
/* no dynamic linking available */
static void
sys_dlinit (void)
static int
sys_dlinit ()
{
return 1; /* dlopen not supported */
}
static lt_dlhandle
sys_dlopen (char *filename)
static int
sys_dlexit ()
{
return 0;
}
static void
sys_dlclose (lt_dlhandle handle)
static int
sys_dlopen (handle, filename) lt_dlhandle handle; const char *filename;
{
return 1; /* always report an error */
}
static int
sys_dlclose (handle) lt_dlhandle handle;
{
return 0;
}
static void *
sys_dlsym (lt_dlhandle handle, char *symbol)
sys_dlsym (handle, symbol) lt_dlhandle handle; char *symbol;
{
return 0;
}
@ -263,27 +334,220 @@ sys_dlsym (lt_dlhandle handle, char *symbol)
#endif
#endif
void
lt_dlinit (void)
static lt_dlhandle handles;
static int initialized = 0;
int
lt_dlinit ()
{
sys_dlinit();
if (initialized) { /* Initialize only at first call. */
initialized++;
return 0;
}
handles = 0;
if (sys_dlinit())
return 1;
initialized = 1;
return 0;
}
int
lt_dlexit ()
{
int error;
if (!initialized)
return 1; /* already deinitialized */
if (initialized != 1) { /* deinitialize only at last call. */
initialized--;
return 0;
}
/* close all modules */
error = 0;
while (handles)
if (lt_dlclose(handles))
error = 1;
initialized = 0;
if (sys_dlexit())
error = 1;
return error;
}
static void
trim (char *dest, const char *s)
{
char *i = rindex(s, '\'');
int len = strlen(s);
if (len > 3 && s[0] == '\'') {
strncpy(dest, &s[1], (i - s) - 1);
dest[len-3] = '\0';
} else
*dest = '\0';
}
lt_dlhandle
lt_dlopen (char *filename)
lt_dlopen (filename) const char *filename;
{
return sys_dlopen(filename);
lt_dlhandle handle, cur;
FILE *file;
char tmp[1024], dir[512];
char *basename, *ext;
/* check whether the module was already opened */
cur = handles;
while (cur && strcmp(cur->filename, filename))
cur = cur->next;
if (cur) {
cur->usage++;
return cur;
}
handle = (lt_dlhandle) malloc(sizeof(lt_dlhandle_t));
if (!handle)
return 0;
basename = rindex(filename, '/'); /* FIXME: portable? */
if (basename)
basename++;
strncpy(dir, filename, basename - filename);
dir[basename - filename] = '\0';
/* check whether we open a libtool module (.la extension) */
ext = rindex(basename, '.');
if (ext && strcmp(ext, ".la") == 0) {
char dlname[256], libdir[512], deps[512];
char fullname[512];
file = fopen(filename, "r"); /* FIXME: portable? */
if (!file) {
free(handle);
return 0;
}
while (!feof(file)) {
if (!fgets(tmp, 1024, file))
break;
if (strncmp(tmp, "libdir=", 7) == 0)
trim(libdir, &tmp[7]);
else
if (strncmp(tmp, "dependency_libs=", 16) == 0)
trim(deps, &tmp[16]);
else
#ifdef STATIC
if (strncmp(tmp, "old_library=", 12) == 0)
trim(dlname, &tmp[12]);
#else
if (strncmp(tmp, "dlname=", 7) == 0)
trim(dlname, &tmp[7]);
#endif
}
fclose(file);
if (!strlen(dlname)) { /* filename not found */
free(handle);
return 0;
}
/* search the module */
#ifdef STATIC
if (sys_dlopen(handle, dlname)) {
free(handle);
return 0;
}
handle->filename = strdup(dlname);
#else
strcpy(fullname, libdir);
strcat(fullname, "/");
strcat(fullname, dlname);
if (sys_dlopen(handle, fullname)) {
strcpy(fullname, dir);
strcat(fullname, dlname);
if (sys_dlopen(handle, fullname)) {
strcpy(fullname, dir);
strcat(fullname, ".libs/");
strcat(fullname, dlname);
if (sys_dlopen(handle, fullname)) {
free(handle);
return 0;
}
}
}
handle->filename = strdup(fullname);
#endif
/* extract the module name from the file name */
strcpy(tmp, basename);
tmp[ext - basename] = '\0';
handle->name = strdup(tmp);
} else {
/* not a libtool module */
if (sys_dlopen(handle, filename)) {
free(handle);
return 0;
}
handle->filename = strdup(filename);
handle->name = 0;
}
handle->usage = 1;
handle->next = handles;
handles = handle;
return handle;
}
void
lt_dlclose (lt_dlhandle handle)
int
lt_dlclose (handle) lt_dlhandle handle;
{
sys_dlclose(handle);
lt_dlhandle cur, last;
/* check whether the handle is valid */
last = cur = handles;
while (cur && handle != cur) {
last = cur;
cur = cur->next;
}
if (!cur)
return 1; /* invalid handle */
handle->usage--;
if (!handle->usage) {
int error;
if (handle != handles)
last->next = handle->next;
else
handles = handle->next;
error = sys_dlclose(handle);
free(handle->filename);
if (handle->name)
free(handle->name);
free(handle);
return error;
}
return 0;
}
void *
lt_dlsym (lt_dlhandle handle, char *symbol)
lt_dlsym (handle, symbol) lt_dlhandle handle; char *symbol;
{
char sym[128];
void *address;
if (handle->name) { /* libtool module */
#ifdef NEED_USCORE
/* prefix symbol with leading underscore */
strcpy(sym, "_");
strcat(sym, handle->name);
#else
strcpy(sym, handle->name);
#endif
strcat(sym, "_LTX_");
strcat(sym, symbol);
/* try "modulename_LTX_symbol" */
address = sys_dlsym(handle, sym);
if (address)
return address;
}
/* otherwise try "symbol" */
#ifdef NEED_USCORE
/* prefix symbol with leading underscore */
strcpy(sym, "_");
strcat(sym, symbol);
return sys_dlsym(handle, sym);
#else
return sys_dlsym(handle, symbol);
#endif
}

View File

@ -2,20 +2,20 @@
Copyright (C) 1998 Thomas Tanner <tanner@gmx.de>
This file is part of GNU Libtool.
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 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 program is distributed in the hope that it will be useful,
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 General Public License for more details.
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 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. */
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.
*/
/* Only include this header file once. */
#ifndef _LTDL_H_
@ -44,12 +44,17 @@ USA. */
# define __P(protos) ()
#endif
#ifdef _LTDL_COMPILE_
typedef struct lt_dlhandle_t *lt_dlhandle;
#else
typedef void *lt_dlhandle;
#endif
__BEGIN_DECLS
void lt_dlinit __P((void));
lt_dlhandle lt_dlopen __P((char *name));
void lt_dlclose __P((lt_dlhandle handle));
int lt_dlinit __P((void));
int lt_dlexit __P((void));
lt_dlhandle lt_dlopen __P((const char *filename));
int lt_dlclose __P((lt_dlhandle handle));
void *lt_dlsym __P((lt_dlhandle handle, char *name));
__END_DECLS

View File

@ -262,7 +262,7 @@ if test -z "$show_help"; then
lastarg=
srcfile="$nonopt"
suppress_output=
module=no
force_static=no
user_target=no
for arg
@ -277,8 +277,8 @@ if test -z "$show_help"; then
user_target=next
;;
-module)
module=yes
-force-static)
force_static=yes
continue
;;
@ -480,9 +480,9 @@ compiler."
fi
fi
# If we have no pic_flag and do not compile a module,
# If we have no pic_flag and do not have -force-static,
# then copy the object into place and finish.
if test -z "$pic_flag" && test "$module" = no; then
if test -z "$pic_flag" && test "$force_static" = no; then
$show "$LN_S $libobj $obj"
if $run $LN_S $libobj $obj; then
exit 0
@ -499,8 +499,7 @@ compiler."
# Only build a position-dependent object if we build old libraries.
if test "$build_old_libs" = yes; then
command="$base_compile $srcfile"
test "$module" = yes && command="$command -DLT_RENAME"
command="$base_compile -DSTATIC $srcfile"
if test "$compiler_c_o" = yes; then
command="$command -o $obj"
output_obj="$obj"
@ -1845,8 +1844,9 @@ dld_preloaded_symbols[] =
fi
for arg in $dlprefiles; do
name=`basename $arg`
echo >> "$objdir/$dlsyms" "\
{\"$arg\", (__ptr_t) 0},"
{\"$name\", (__ptr_t) 0},"
eval "$NM $arg | $global_symbol_pipe > '$nlist'"
if test -f "$nlist"; then

View File

@ -87,9 +87,15 @@ main (int argc, char **argv)
fprintf (stderr, "usage: %s module [module...]\n", argv[0]);
}
lt_dlinit();
if (lt_dlinit() != 0) {
fprintf (stderr, "dlopen not supported\n");
return 1;
}
for (i = 1; i < argc; i++)
if (test_dl(argv[i]))
return 1;
lt_dlexit();
return 0;
}

View File

@ -5,8 +5,6 @@
# level Makefile.
AUTOMAKE_OPTIONS = no-dependencies foreign
CFLAGS = @CFLAGS@ -module
INCLUDES = -I$(srcdir)/../../libltdl
lib_LTLIBRARIES = libfoo1.la libfoo2.la

View File

@ -21,12 +21,9 @@ USA. */
#include <stdio.h>
#include <math.h>
#ifndef PIC /* fixme */
/*#ifdef LT_RENAME */
#define nothing ltexp_foo1___nothing
#define foo1 ltexp_foo1___foo1
#define hello ltexp_foo1___hello
#endif
#define nothing libfoo1_LTX_nothing
#define foo1 libfoo1_LTX_foo1
#define hello libfoo1_LTX_hello
/* Give a global variable definition. */
int nothing;

View File

@ -21,12 +21,9 @@ USA. */
#include <stdio.h>
#include <math.h>
#ifndef PIC /* fixme */
/*#ifdef LT_RENAME */
#define nothing ltexp_foo2___nothing
#define foo2 ltexp_foo2___foo2
#define hello ltexp_foo2___hello
#endif
#define nothing libfoo2_LTX_nothing
#define foo2 libfoo2_LTX_foo2
#define hello libfoo2_LTX_hello
/* Give a global variable definition. */
int nothing;

View File

@ -1,3 +1,3 @@
nothing
hello
foo1
libfoo1_LTX_nothing
libfoo1_LTX_foo1
libfoo1_LTX_hello

View File

@ -1,3 +1,3 @@
nothing
hello
foo2
libfoo2_LTX_nothing
libfoo2_LTX_foo2
libfoo2_LTX_hello

View File

@ -19,19 +19,14 @@ fi
# Check to see if the programs really run.
echo "Executing uninstalled programs in ../mdemo"
old_library1=`sed -n -e "s/^old_library='\(.*\)'/\1/p" ../mdemo/modules/libfoo1.la`
old_library2=`sed -n -e "s/^old_library='\(.*\)'/\1/p" ../mdemo/modules/libfoo2.la`
dlname1=`sed -n -e "s/^dlname='\(.*\)'/\1/p" ../mdemo/modules/libfoo1.la`
dlname2=`sed -n -e "s/^dlname='\(.*\)'/\1/p" ../mdemo/modules/libfoo2.la`
status=0
if ../mdemo/hell.debug modules/.libs/$old_library1 modules/.libs/$old_library2; then :
if ../mdemo/hell.debug ../mdemo/modules/libfoo1.la ../mdemo/modules/libfoo2.la; then :
else
echo "$0: cannot execute ../mdemo/hell.debug" 1>&2
status=1
fi
if ../mdemo/hell ../mdemo/modules/.libs/$dlname1 ../mdemo/modules/.libs/$dlname2; then :
if ../mdemo/hell ../mdemo/modules/libfoo1.la ../mdemo/modules/libfoo2.la; then :
else
echo "$0: cannot execute ../mdemo/hell" 1>&2
status=1

View File

@ -35,19 +35,14 @@ $make install || exit 1
echo "= Executing installed programs"
old_library1=`sed -n -e "s/^old_library='\(.*\)'/\1/p" ../mdemo/modules/libfoo1.la`
old_library2=`sed -n -e "s/^old_library='\(.*\)'/\1/p" ../mdemo/modules/libfoo2.la`
dlname1=`sed -n -e "s/^dlname='\(.*\)'/\1/p" ../mdemo/modules/libfoo1.la`
dlname2=`sed -n -e "s/^dlname='\(.*\)'/\1/p" ../mdemo/modules/libfoo2.la`
status=0
if $prefix/bin/hell.debug modules/.libs/$old_library1 modules/.libs/$old_library2; then :
if $prefix/bin/hell.debug $prefix/lib/libfoo1.la $prefix/lib/libfoo2.la; then :
else
echo "$0: cannot execute $prefix/bin/hell.debug" 1>&2
status=1
fi
if $prefix/bin/hell $prefix/lib/$dlname1 $prefix/lib/$dlname2; then :
if $prefix/bin/hell $prefix/lib/libfoo1.la $prefix/lib/libfoo2.la; then :
else
echo "$0: cannot execute $prefix/bin/hell" 1>&2