| # A brief demonstration of using Automake with Libtool. -*-Makefile-*- |
| # |
| AUTOMAKE_OPTIONS = no-dependencies foreign |
| |
| EXTRA_DIST = $(TESTS) acinclude.m4 |
| |
| hardcode_tests = hc-direct hc-libflag hc-libpath hc-minusL |
| CLEANFILES = $(hardcode_tests) |
| |
| # Build a libtool library, libhello.la for installation in libdir. |
| lib_LTLIBRARIES = libhello.la |
| libhello_la_SOURCES = hello.c foo.c |
| libhello_la_LDFLAGS = -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 main.c and libhello.la |
| hell_SOURCES = main.c |
| hell_LDADD = libhello.la |
| |
| # Create a statically linked version of hell. |
| hell_static_SOURCES = 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 = 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: |
| rm -f $@ |
| echo '#! /bin/sh' > $@ |
| echo '-dlopen is unsupported' >> $@ |
| chmod +x $@ |
| endif |
| |
| # Unfortunately, in order to test libtool thoroughly, we need access |
| # to its private directory. |
| objdir = `sed -n -e 's/^objdir=\(.*\)$$/\1/p' ../libtool` |
| |
| TESTS = run.test |
| |
| # The following rules are only for the libtool demo and tests. |
| # Regenerate our acinclude.m4 only if it doesn't exist. |
| $(srcdir)/acinclude.m4: |
| rm -f $(srcdir)/acinclude.m4 |
| cd $(srcdir) && $(LN_S) ../libtool.m4 acinclude.m4 |
| |
| |
| # Test programs to see what gets hardcoded. |
| .PHONY: hardcode |
| hardcode: $(hardcode_tests) |
| hc-direct: $(hell_OBJECTS) $(hell_DEPENDENCIES) |
| @rm -f hc-direct |
| @echo "You may ignore any linking errors from the following command:" |
| @shlib=./$(objdir)/libhello.a; \ |
| eval "`egrep '^library_names' libhello.la`"; \ |
| for lib in $$library_names; do \ |
| shlib="./$(objdir)/$$lib"; \ |
| done; \ |
| echo "$(CC) $(LDFLAGS) -o $@ $(hell_OBJECTS) $$shlib -lm || echo unsupported > $@"; \ |
| eval "$(CC) $(LDFLAGS) -o $@ $(hell_OBJECTS) $$shlib -lm || echo unsupported > $@" |
| |
| # We need to create an alias for $(objdir) so that this test works regardless |
| # of $hardcode_minus_L |
| hc-libflag: $(hell_OBJECTS) $(hell_DEPENDENCIES) |
| rm -rf hc-libflag _hclibs |
| mkdir _hclibs |
| objdir=$(objdir); cd _hclibs && for lib in ../$$objdir/libhello*; do \ |
| $(LN_S) $$lib `echo "$$lib" | sed 's%^.*/%%'` || exit 1; \ |
| done |
| @eval `egrep -e '^(hardcode_.*|wl)=' ../libtool`; \ |
| libdir=`pwd`/$(objdir); \ |
| flag=`eval echo \"$$hardcode_libdir_flag_spec\"`; \ |
| if test -z "$$flag"; then \ |
| echo "echo unsupported > $@"; \ |
| echo unsupported > $@ || status="$$?"; \ |
| else \ |
| echo "$(CC) $(LDFLAGS) -o $@ $(hell_OBJECTS) $$flag -L./_hclibs -lhello -lm"; \ |
| $(CC) $(LDFLAGS) -o $@ $(hell_OBJECTS) $$flag -L./_hclibs -lhello -lm || status="$$?"; \ |
| fi; \ |
| echo "rm -rf _hclibs"; \ |
| rm -rf _hclibs; \ |
| exit $$status |
| |
| hc-libpath: $(hell_OBJECTS) $(hell_DEPENDENCIES) |
| @rm -f hc-libpath |
| @echo "You may ignore any linking errors from the following command:" |
| @eval `egrep -e '^shlibpath_var=' ../libtool`; \ |
| echo "$$shlibpath_var=./$(objdir) $(CC) $(LDFLAGS) -o $@ $(hell_OBJECTS) -lhello -lm || echo unsupported > $@"; \ |
| eval "$$shlibpath_var=./$(objdir) $(CC) $(LDFLAGS) -o $@ $(hell_OBJECTS) -lhello -lm || echo unsupported > $@" |
| |
| hc-minusL: $(hell_OBJECTS) $(hell_DEPENDENCIES) |
| @rm -f hc-minusL |
| $(CC) $(LDFLAGS) -o $@ $(hell_OBJECTS) -L./$(objdir) -lhello -lm |
| |
| $(OBJECTS): libtool |
| libtool: $(LIBTOOL_DEPS) |
| $(SHELL) ./config.status --recheck |