mirror of
git://git.savannah.gnu.org/libtool.git
synced 2024-12-27 07:09:26 +08:00
5dfb0ce7e2
them as libtool modules. Currently loader-preopen.c is linked unconditionally and other appropriate loaders discovered by AC_LTDL_DLLIB are built and linked in: * libltdl/Makefile.am (libltdl_la_SOURCES): Add loader-preopen module. * m4/ltdl.m4 (AC_LTDL_DLLIB): Use AC_LIBOBJ to add appropriate loaders to libltdl. * libltdl/lt_system.h (LT_SCOPE): Moved to here. * libltdl/ltdl.h (lt_dlloader, lt_user_data, lt_module) (lt_module_open, lt_module_close, lt_find_sym, lt_dlloader_exit) (struct lt_user_dlloader, lt_dlloader_next, lt_dlloader_find) (lt_dlloader_name, lt_dlloader_data, lt_dlloader_add) (lt_dlloader_remove): Moved declarations... * libltdl/lt_loader.h: ...to here. * libltdl/ltdl.c: Include lt_loader.h. Move loader implementation code from here... * libltdl/loader-dld_link.c, libltdl/loader-dlopen.c, libltdl/loader-dyld.c, libltdl/loader-load_add_on.c, libltdl/loader-loadlibrary.c, libltdl/loader-preopen.c, libltdl/loader-shl_load.c: ...to here. * tests/cdemo/Makefile.am, tests/demo/Makefile.am, tests/depdemo/Makefile.am, tests/f77demo/Makefile.am, tests/mdemo/Makefile.am, tests/mdemo2/Makefile.am, tests/pdemo/Makefile.am, tests/tagdemo/Makefile.am (AM_CPPFLAGS): Add -I$(top_srcdir)/../.. so that libltdl include files can be written as #include <libltdl/lt_dlloader.h> and found correctly.
157 lines
6.0 KiB
Makefile
157 lines
6.0 KiB
Makefile
## Makefile.am -- Process this file with automake to produce Makefile.in
|
|
##
|
|
## Copyright (C) 2003, 2004 Free Software Foundation
|
|
##
|
|
## 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; see the file COPYING. If not, write to
|
|
## the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
|
## Boston, MA 02111-1307, USA.
|
|
|
|
AUTOMAKE_OPTIONS = no-dependencies foreign
|
|
ACLOCAL_AMFLAGS = -I ../../m4
|
|
AM_CPPFLAGS = -I$(top_srcdir)/../..
|
|
|
|
# Build a libtool library, libhello.la for installation in libdir.
|
|
lib_LTLIBRARIES = libhello.la
|
|
libhello_la_SOURCES = longer_file_name_hello.c longer_file_name_foo.c longer_file_name_foo2.c
|
|
libhello_la_LIBADD = $(LIBM)
|
|
libhello_la_LDFLAGS = -no-undefined -version-info 3:12:1
|
|
|
|
include_HEADERS = foo.h
|
|
|
|
if BINARY_HELLDL
|
|
BUILD_helldl = helldl
|
|
else
|
|
BUILD_helldl =
|
|
endif
|
|
|
|
bin_PROGRAMS = hell hell_static $(BUILD_helldl)
|
|
|
|
# Build hell from longer_file_name_main.c and libhello.la
|
|
hell_SOURCES = longer_file_name_main.c
|
|
hell_LDADD = libhello.la
|
|
|
|
# Create a statically linked version of hell.
|
|
hell_static_SOURCES = longer_file_name_main.c
|
|
hell_static_LDADD = libhello.la
|
|
hell_static_LDFLAGS = $(STATIC)
|
|
|
|
if BINARY_HELLDL
|
|
|
|
# Create a version of hell that does a preloaded dlopen.
|
|
helldl_SOURCES = longer_file_name_dlmain.c
|
|
helldl_LDFLAGS = -export-dynamic -dlpreopen libhello.la
|
|
helldl_DEPENDENCIES = libhello.la
|
|
|
|
else
|
|
|
|
bin_SCRIPTS = helldl
|
|
# create a script that says that -dlopen is not supported
|
|
helldl helldl$(EXEEXT):
|
|
rm -f $@
|
|
echo '#! /bin/sh' > $@
|
|
echo '-dlopen is unsupported' >> $@
|
|
chmod +x $@
|
|
endif
|
|
|
|
$(OBJECTS): libtool
|
|
libtool: $(LIBTOOL_DEPS)
|
|
$(SHELL) ./config.status --recheck
|
|
|
|
#----------------------------------------------------------------------
|
|
# The following declarations are only used in the testsuite:
|
|
#----------------------------------------------------------------------
|
|
|
|
hardcode_tests = hc-direct hc-libflag hc-libpath hc-minusL
|
|
CLEANFILES = $(hardcode_tests)
|
|
|
|
# Unfortunately, in order to test libtool thoroughly, we need access
|
|
# to its private directory.
|
|
objdir = `$(LIBTOOL) --config | sed -n -e 's/^objdir=\(.*\)$$/\1/p'`
|
|
|
|
# Test programs to see what gets hardcoded.
|
|
.PHONY: hardcode
|
|
hardcode: $(hardcode_tests)
|
|
SET_HARDCODE_FLAGS = \
|
|
eval `$(LIBTOOL) --config | sed -n -e '/^hardcode_.*=/p; /^wl=/p'`
|
|
hc-direct: $(hell_OBJECTS) $(hell_DEPENDENCIES) $(libdir)/libhello.la
|
|
@rm -f hc-direct
|
|
@echo "You may ignore any linking errors from the following command:"
|
|
@shlib=./$(objdir)/libhello.a; \
|
|
eval "`grep '^library_names' libhello.la`"; \
|
|
for lib in $$library_names; do \
|
|
shlib="./$(objdir)/$$lib"; \
|
|
done; \
|
|
$(SET_HARDCODE_FLAGS); \
|
|
libdir=$(libdir); \
|
|
flag=`eval echo \"$$hardcode_libdir_flag_spec\"`; \
|
|
echo "$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(hell_OBJECTS) $$shlib $(LIBS) $(LIBM) $$flag || echo unsupported > $@"; \
|
|
eval "$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(hell_OBJECTS) $$shlib $(LIBS) $(LIBM) $$flag || echo unsupported > $@"
|
|
|
|
hc-libflag: $(hell_OBJECTS) $(hell_DEPENDENCIES) $(libdir)/libhello.la
|
|
@$(SET_HARDCODE_FLAGS); \
|
|
libdir=`pwd`/$(objdir); \
|
|
flag=`eval echo \"$$hardcode_libdir_flag_spec\"`; \
|
|
if test -z "$$flag"; then \
|
|
echo "echo unsupported > $@"; \
|
|
echo unsupported > $@ || status="$$?"; \
|
|
else \
|
|
echo "$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(hell_OBJECTS) $$flag -L$(libdir) -lhello $(LIBS) $(LIBM)"; \
|
|
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(hell_OBJECTS) $$flag -L$(libdir) -lhello $(LIBS) $(LIBM) || status="$$?"; \
|
|
fi; \
|
|
exit $$status
|
|
|
|
hc-libpath: $(hell_OBJECTS) $(hell_DEPENDENCIES) $(libdir)/libhello.la
|
|
@rm -f hc-libpath
|
|
@echo "You may ignore any linking errors from the following command:"
|
|
@$(SET_HARDCODE_FLAGS); \
|
|
eval `$(LIBTOOL) --config | grep '^shlibpath_var='`; \
|
|
libdir=$(libdir); \
|
|
flag=`eval echo \"$$hardcode_libdir_flag_spec\"`; \
|
|
echo "$$shlibpath_var=./$(objdir) $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(hell_OBJECTS) -lhello $(LIBS) $(LIBM) $$flag || echo unsupported > $@"; \
|
|
eval "$$shlibpath_var=./$(objdir) $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(hell_OBJECTS) -lhello $(LIBS) $(LIBM) $$flag || echo unsupported > $@"
|
|
|
|
hc-minusL: $(hell_OBJECTS) $(hell_DEPENDENCIES)
|
|
@rm -f hc-minusL
|
|
@$(SET_HARDCODE_FLAGS); \
|
|
libdir=$(libdir); \
|
|
flag=`eval echo \"$$hardcode_libdir_flag_spec\"`; \
|
|
echo "$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(hell_OBJECTS) -L./$(objdir) -lhello $(LIBS) $(LIBM) $$flag || echo unsupported > $@"; \
|
|
eval "$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(hell_OBJECTS) -L./$(objdir) -lhello $(LIBS) $(LIBM) $$flag || echo unsupported > $@"
|
|
|
|
# This is one of the essential tests for deplibs_check_method=pass_all.
|
|
# If this one passes with pass_all, it is likely that pass_all works
|
|
EXTRA_LIBRARIES = libhell0.a
|
|
libhell0_a_SOURCES =
|
|
libhell0_a_LIBADD = longer_file_name_hello.$(OBJEXT) longer_file_name_foo.$(OBJEXT)
|
|
EXTRA_LTLIBRARIES = libhell1.la libhell2.la
|
|
libhell1_la_SOURCES = longer_file_name_hell1.c
|
|
libhell1_la_LIBADD = -L. -lhell0
|
|
libhell1_la_LDFLAGS = -no-undefined -rpath $(libdir)
|
|
libhell1_la_DEPENDENCIES = libhell0.a
|
|
libhell2_la_SOURCES = longer_file_name_hell2.c
|
|
libhell2_la_LIBADD = -L. -lhell0
|
|
libhell2_la_LDFLAGS = -no-undefined -rpath $(libdir)
|
|
libhell2_la_DEPENDENCIES = libhell0.a
|
|
EXTRA_PROGRAMS = hell0
|
|
hell0_SOURCES = longer_file_name_main.c
|
|
hell0_LDADD = libhell1.la libhell2.la $(LIBM)
|
|
|
|
# 'hell0' in EXTRA_PROGRAMS gets translated to 'hell0.exe'; but we
|
|
# must explicitly list the wrapper script 'hell0'. (bin_PROGRAMS
|
|
# are handled seamlessly by automake rules; the extra step is only
|
|
# necessary for EXTRA_PROGRAMS)
|
|
CLEANFILES += $(EXTRA_LIBRARIES) $(EXTRA_LTLIBRARIES) $(EXTRA_PROGRAMS) hell0
|
|
|
|
deplibs-check: hell0
|