1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
|
$NetBSD: patch-ae,v 1.22 2022/08/01 18:22:12 wiz Exp $
Libtoolify.
Pass -no-undefined to libtool for building shared library.
Don't ignore failures during installation.
Don't ignore failures building the examples.
Fix race condition so the examples are built *after* the library.
--- Makefile.in.orig 2020-10-29 19:48:14.000000000 +0000
+++ Makefile.in
@@ -18,6 +18,9 @@
RL_LIBRARY_VERSION = @LIBVERSION@
RL_LIBRARY_NAME = readline
+SHLIB_MAJOR = @SHLIB_MAJOR@
+SHLIB_MINOR = @SHLIB_MINOR@
+
PACKAGE = @PACKAGE_NAME@
VERSION = @PACKAGE_VERSION@
@@ -77,6 +80,7 @@ CTAGS = ctags -w
CFLAGS = @CFLAGS@
LOCAL_CFLAGS = @LOCAL_CFLAGS@ -DRL_LIBRARY_VERSION='"$(RL_LIBRARY_VERSION)"' @BRACKETED_PASTE@
CPPFLAGS = @CPPFLAGS@
+LDFLAGS = @LDFLAGS@ -no-undefined
DEFS = @DEFS@ @CROSS_COMPILE@
LOCAL_DEFS = @LOCAL_DEFS@
@@ -104,9 +108,15 @@ install_examples = @EXAMPLES_INSTALL_TAR
${RM} $@
$(CC) -c $(CCFLAGS) $<
+.SUFFIXES: .lo
+.c.lo:
+ ${RM} $@
+ $(LIBTOOL) --tag=CC --mode=compile $(CC) -c $(CCFLAGS) $<
+
# The name of the main library target.
LIBRARY_NAME = libreadline.a
STATIC_LIBS = libreadline.a libhistory.a
+LIBTOOL_LIBS = libreadline.la libhistory.la
# The C code source files for this library.
CSOURCES = $(srcdir)/readline.c $(srcdir)/funmap.c $(srcdir)/keymaps.c \
@@ -163,8 +173,10 @@ TARGETS = @STATIC_TARGET@ @SHARED_TARGET
INSTALL_TARGETS = @STATIC_INSTALL_TARGET@ @SHARED_INSTALL_TARGET@
all: $(TARGETS)
+all-libtool: $(LIBTOOL_LIBS)
-everything: all examples
+everything: all .WAIT examples
+everything-libtool: all-libtool .WAIT examples
asan:
${MAKE} ${MFLAGS} ASAN_CFLAGS='${ASAN_XCFLAGS}' ASAN_LDFLAGS='${ASAN_XLDFLAGS}' everything
@@ -176,17 +188,33 @@ libreadline.a: $(OBJECTS)
$(AR) $(ARFLAGS) $@ $(OBJECTS)
-test -n "$(RANLIB)" && $(RANLIB) $@
+libreadline.la: $(OBJECTS:.o=.lo)
+ $(LIBTOOL) --mode=clean $(RM) $@
+ $(LIBTOOL) --mode=link --tag=CC $(CC) -o $@ $(OBJECTS:.o=.lo) $(TERMCAP_LIB) \
+ -rpath $(libdir) -version-info $(SHLIB_MAJOR):$(SHLIB_MINOR) \
+ $(LDFLAGS)
+
libhistory.a: $(HISTOBJ) xmalloc.o xfree.o
$(RM) $@
$(AR) $(ARFLAGS) $@ $(HISTOBJ) xmalloc.o xfree.o
-test -n "$(RANLIB)" && $(RANLIB) $@
+libhistory.la: $(HISTOBJ:.o=.lo) xmalloc.lo xfree.lo
+ $(LIBTOOL) --mode=clean $(RM) $@
+ $(LIBTOOL) --mode=link --tag=CC $(CC) -o $@ $(HISTOBJ:.o=.lo) xmalloc.lo xfree.lo \
+ -rpath $(libdir) -version-info $(SHLIB_MAJOR):$(SHLIB_MINOR) \
+ $(LDFLAGS)
+
# Since tilde.c is shared between readline and bash, make sure we compile
# it with the right flags when it's built as part of readline
tilde.o: tilde.c
rm -f $@
$(CC) $(CCFLAGS) -DREADLINE_LIBRARY -c $(srcdir)/tilde.c
+tilde.lo: tilde.c
+ $(LIBTOOL) --mode=clean rm -f $@
+ $(LIBTOOL) --mode=compile --tag=CC $(CC) $(CCFLAGS) -DREADLINE_LIBRARY -c $(srcdir)/tilde.c
+
readline: $(OBJECTS) readline.h rldefs.h chardefs.h ./libreadline.a
$(CC) $(CCFLAGS) -DREADLINE_LIBRARY -o $@ $(top_srcdir)/examples/rl.c ./libreadline.a ${TERMCAP_LIB}
@@ -223,8 +251,7 @@ documentation: force
-( cd doc && $(MAKE) $(MFLAGS) )
examples: force
- -test -d examples || mkdir examples
- -(cd examples && ${MAKE} ${MFLAGS} all )
+ (cd examples && ${MAKE} ${MFLAGS} all )
force:
@@ -281,6 +308,12 @@ install-examples: installdirs install-he
uninstall-examples: maybe-uninstall-headers
-( cd examples; ${MAKE} ${MFLAGS} DESTDIR=${DESTDIR} uninstall )
+install-libtool: installdirs $(LIBTOOL_LIBS) install-headers install-doc
+ -$(LIBTOOL) --mode=uninstall $(RM) $(DESTDIR)$(libdir)/libreadline.la
+ $(LIBTOOL) --mode=install $(INSTALL) libreadline.la $(DESTDIR)$(libdir)
+ -$(LIBTOOL) --mode=uninstall $(RM) $(DESTDIR)$(libdir)/libhistory.la
+ $(LIBTOOL) --mode=install $(INSTALL) libhistory.la $(DESTDIR)$(libdir)
+
install-doc: installdirs
$(INSTALL_DATA) $(OTHER_DOCS) $(DESTDIR)$(docdir)
-( if test -d doc ; then \
|