Hello!
I would like to add MirBSD support to upstream libtool. MirBSD (or MirOS
BSD) is an OS derived from OpenBSD. I want to use version_type=linux
instead of sunos because it works much better, from several years
experience with our own patched version of libtool 1.5.
A notable idiosyncrasy of our runtime linker is that shared libraries
_must_ have a two-digit version (libfoo.so.0.0 for example) to be able to
link against them. In the attached patch, I solved it like this:
library_names_spec='${libname}${release}${shared_ext}${major}.${age}
${libname}${shared_ext}${major}.${age}'
Is this okay or should it be done differently?
However, there is one case where this breaks: When a -release is given but
no -version-info, the $major variable is reset. In ltmain.m4sh, line 6705,
$major is reset to an empty string:
# Clear the version info if we defaulted, and they specified a
release.
if test -z "$vinfo" && test -n "$release"; then
major=
Why is this so? Can this line be safely removed?
--Benny.
From 86a6fd053002cac2a09f090c3b8f810e41409cca Mon Sep 17 00:00:00 2001
From: Benny Siegert <bsieg...@gmail.com>
Date: Wed, 5 Jan 2011 21:46:40 +0100
Subject: [PATCH] Add MirBSD stanzas to m4 files
---
libltdl/m4/libtool.m4 | 48 +++++++++++++++++++++++++++++++++++++++++++++++-
libltdl/m4/ltdl.m4 | 3 +++
2 files changed, 50 insertions(+), 1 deletions(-)
diff --git a/libltdl/m4/libtool.m4 b/libltdl/m4/libtool.m4
index c144755..75ea60c 100644
--- a/libltdl/m4/libtool.m4
+++ b/libltdl/m4/libtool.m4
@@ -1615,7 +1615,7 @@ AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
lt_cv_sys_max_cmd_len=8192;
;;
- netbsd* | freebsd* | openbsd* | darwin* | dragonfly*)
+ netbsd* | freebsd* | mirbsd* | openbsd* | darwin* | dragonfly*)
# This has been around since 386BSD, at least. Likely further.
if test -x /sbin/sysctl; then
lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
@@ -2664,6 +2664,18 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu)
dynamic_linker='GNU/Linux ld.so'
;;
+mirbsd*)
+ version_type=linux
+ sys_lib_search_path_spec="/usr/lib"
+ sys_lib_dlsearch_path_spec="/usr/lib"
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}${major}.${age}
${libname}${shared_ext}${major}.${age}'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ ;;
+
netbsd*)
version_type=sunos
need_lib_prefix=no
@@ -3269,6 +3281,10 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu)
lt_cv_deplibs_check_method=pass_all
;;
+mirbsd*)
+ lt_cv_deplibs_check_method='match_pattern
/lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$'
+ ;;
+
netbsd*)
if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
lt_cv_deplibs_check_method='match_pattern
/lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
@@ -4836,6 +4852,20 @@ _LT_EOF
fi
;;
+ mirbsd*)
+ if test -f /usr/libexec/ld.so; then
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs
$deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib
$libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
netbsd*)
if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
_LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs
$linker_flags -o $lib'
@@ -6517,6 +6547,22 @@ if test "$_lt_caught_CXX_error" != yes; then
_LT_TAGVAR(ld_shlibs, $1)=no
;;
+ mirbsd*)
+ if test -f /usr/libexec/ld.so; then
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects
$libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag
$predep_objects $libobjs $deplibs $postdep_objects $compiler_flags
${wl}-retain-symbols-file,$export_symbols -o $lib'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ _LT_TAGVAR(whole_archive_flag_spec,
$1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+ output_verbose_link_cmd='echo'
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
mvs*)
case $cc_basename in
cxx*)
diff --git a/libltdl/m4/ltdl.m4 b/libltdl/m4/ltdl.m4
index 42e07e9..91daa35 100644
--- a/libltdl/m4/ltdl.m4
+++ b/libltdl/m4/ltdl.m4
@@ -493,6 +493,9 @@ AC_CACHE_CHECK([whether deplibs are loaded by dlopen],
# at 6.2 and later dlopen does load deplibs.
lt_cv_sys_dlopen_deplibs=yes
;;
+ mirbsd*)
+ lt_cv_sys_dlopen_deplibs=yes
+ ;;
netbsd*)
lt_cv_sys_dlopen_deplibs=yes
;;
--
1.7.3.4