openwrt/package/libs/readline/Makefile
Jeronimo Pellegrini 0000ba6ab8
libreadlne: create symlinks for .so
Currently, libreadline only installs

```
 /usr/lib/libhistory.so.8 -> libhistory.so.8.2
 /usr/lib/libhistory.so.8.2
 /usr/lib/libreadline.so.8 -> libreadline.so.8.2
 /usr/lib/libreadline.so.8.2
```

But there is no `libreadline.so` or `libhistory.so` available.

So this happens:

```
root@OpenWRT:~# cat a.c
int main() {
}
root@OpenWRT:~# gcc a.c -lreadline
/usr/bin/ld: cannot find -lreadline: No such file or directory
collect2: error: ld returned 1 exit status
```

Unless, of course, one uses `-l:libreadline.so.8`... But that
doesn't help with binaries that try to dynamically open

`libreadline.so`. I have one of those here (the STklos Scheme
compiler -- I didn't make a PR for it because it's far from
being ready, but one issue is that it does use dlopen to use
readline...)

With the symlink, it works:

```
root@OpenWRT:~# ln -s /usr/lib/libreadline.so.8 /usr/lib/libreadline.so
root@OpenWRT:~#
root@OpenWRT:~# gcc a.c -lreadline
root@OpenWRT:~#
```

Another example: when trying to package rlwrap, the build failed
complaining it could not find readline (using `-lreadline`).
It would then be necessary to change rlwrap's `configure.ac`
(and also in all packages that use readline), but it seems
simpler to add the symlinks...

This PR changes the Makefile so it will include the links.

Signed-off-by: Jeronimo Pellegrini <j_p@aleph0.info>
Link: https://github.com/openwrt/openwrt/pull/16445
Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
2024-11-16 17:20:12 +01:00

77 lines
2.1 KiB
Makefile

#
# Copyright (C) 2006-2014 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#
include $(TOPDIR)/rules.mk
PKG_NAME:=readline
PKG_VERSION:=8.2
PKG_RELEASE:=2
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=@GNU/readline
PKG_HASH:=3feb7171f16a84ee82ca18a36d7b9be109a52c04f492a053331d7d1095007c35
PKG_LICENSE:=GPL-3.0-or-later
PKG_LICENSE_FILES:=COPYING
PKG_CPE_ID:=cpe:/a:gnu:readline
PKG_BUILD_PARALLEL:=1
PKG_INSTALL:=1
include $(INCLUDE_DIR)/package.mk
include $(INCLUDE_DIR)/host-build.mk
HOST_BUILD_DEPENDS:=ncurses/host
define Package/libreadline
SECTION:=libs
CATEGORY:=Libraries
TITLE:=Command lines edition library
DEPENDS:=+libncursesw
URL:=http://cnswww.cns.cwru.edu/php/chet/readline/rltop.html
ABI_VERSION:=8
endef
define Package/libreadline/description
The Readline library provides a set of functions for use by applications
that allow users to edit command lines as they are typed in. Both Emacs
and vi editing modes are available. The Readline library includes
additional functions to maintain a list of previously-entered command
lines, to recall and perhaps reedit those lines, and perform csh-like
history expansion on previous commands.
endef
HOST_CONFIGURE_ARGS += --disable-shared --with-pic
CONFIGURE_ARGS += --with-curses --disable-install-examples
HOST_CONFIGURE_VARS += \
bash_cv_termcap_lib=libncurses
CONFIGURE_VARS += \
bash_cv_wcwidth_broken=no \
bash_cv_func_sigsetjmp=yes \
bash_cv_termcap_lib=libncursesw
TARGET_CFLAGS += $(FPIC)
HOST_CFLAGS += $(FPIC)
define Build/InstallDev
$(INSTALL_DIR) $(1)/usr/include
$(CP) $(PKG_INSTALL_DIR)/usr/include/readline $(1)/usr/include/
$(INSTALL_DIR) $(1)/usr/lib/pkgconfig
$(CP) $(PKG_INSTALL_DIR)/usr/lib/lib{history,readline}.{a,so*} $(1)/usr/lib/
$(CP) $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/readline.pc $(1)/usr/lib/pkgconfig/
endef
define Package/libreadline/install
$(INSTALL_DIR) $(1)/usr/lib
$(CP) $(PKG_INSTALL_DIR)/usr/lib/lib{history,readline}.so* $(1)/usr/lib/
endef
$(eval $(call HostBuild))
$(eval $(call BuildPackage,libreadline))