OS/2 limits a length of a DLL base name up to 8 characters. If a name of a shared library is longer than 8 characters, OS/2 cannot load it. So the option to specify a short name is needed.
* NEWS: Add news for -shortname. * build-aux/ltmain.in(func_mode_help): Add a description for -shortname. (fund_mode_link): Add -shortname. * doc/libtool.texi: Add -shortname item. * m4/libtool.m4: Introduce shortname_cmds for -shortname. --- NEWS | 2 ++ build-aux/ltmain.in | 11 +++++++++++ doc/libtool.texi | 4 ++++ m4/libtool.m4 | 38 ++++++++++++++++++++++++++++++++++---- 4 files changed, 51 insertions(+), 4 deletions(-) diff --git a/NEWS b/NEWS index 081e82f..33beb68 100644 --- a/NEWS +++ b/NEWS @@ -98,6 +98,8 @@ New in 2.4.2 2011-10-17: git version 2.4.1a, Libtool team: package names. This can be used to build some static libraries with PIC objects while building others with non-PIC objects. + - Added -shortname option to specify a short name for a DLL (OS/2 only) + - Initial support for Go, using the gccgo compiler. - On Mac OS X .dylib is now tried as well as .so with diff --git a/build-aux/ltmain.in b/build-aux/ltmain.in index 6151ee9..4e53936 100644 --- a/build-aux/ltmain.in +++ b/build-aux/ltmain.in @@ -1797,6 +1797,7 @@ The following components of LINK-COMMAND are treated specially: -rpath LIBDIR the created library will eventually be installed in LIBDIR -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries -shared only do dynamic linking of libtool libraries + -shortname NAME specify a short name for a DLL(effect on OS/2 only) -shrext SUFFIX override the standard shared library file extension -static do not do any dynamic linking of uninstalled libtool libraries -static-libtool-libs @@ -4827,6 +4828,11 @@ func_mode_link () prev= continue ;; + shortname) + shortname_cmds="$ECHO $arg | cut -b -8" + prev= + continue + ;; shrext) shrext_cmds=$arg prev= @@ -5147,6 +5153,11 @@ func_mode_link () continue ;; + -shortname) + prev=shortname + continue + ;; + -shrext) prev=shrext continue diff --git a/doc/libtool.texi b/doc/libtool.texi index 57b5485..14082ba 100644 --- a/doc/libtool.texi +++ b/doc/libtool.texi @@ -1567,6 +1567,10 @@ In the later case, libtool will signal an error if it was configured with @option{--disable-shared}, or if the host does not support shared libraries. +@item -shortname @var{name} +If @var{name} is specified, replace a name for a DLL with @var{suffix} (effect +on OS/2 only) + @item -shrext @var{suffix} If @var{output-file} is a libtool library, replace the system's standard file name extension for shared libraries with @var{suffix} (most systems diff --git a/m4/libtool.m4 b/m4/libtool.m4 index 37f7d7c..f269fc4 100644 --- a/m4/libtool.m4 +++ b/m4/libtool.m4 @@ -2228,6 +2228,7 @@ BEGIN {RS = " "; FS = "/|\n";} { else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi]) +shortname_cmds= library_names_spec= libname_spec='lib$name' soname_spec= @@ -2732,9 +2733,15 @@ os2*) libname_spec='$name' shrext_cmds=.dll need_lib_prefix=no - library_names_spec='$libname$shared_ext $libname.a' + # OS/2 limits a length of a DLL basename up to 8 characters. + # So there is need to use a short name instead of a original name + # longer than 8 characters. + shortname_cmds='$ECHO $libname | cut -b -8' + library_names_spec='`eval $shortname_cmds`${shared_ext} ${libname}_dll.$libext' dynamic_linker='OS/2 ld.exe' - shlibpath_var=LIBPATH + shlibpath_var=BEGINLIBPATH + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; osf3* | osf4* | osf5*) @@ -2880,6 +2887,7 @@ _LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) _LT_DECL([], [shlibpath_overrides_runpath], [0], [Is shlibpath searched before the hard-coded library search path?]) _LT_DECL([], [libname_spec], [1], [Format of library name prefix]) +_LT_DECL([], [shortname_cmds], [2], [Command to make a short name]) _LT_DECL([], [library_names_spec], [1], [[List of archive names. First name is the real one, the rest are links. The last name is the one that the linker finds with -lNAME]]) @@ -4769,6 +4777,16 @@ _LT_EOF _LT_TAGVAR(link_all_deplibs, $1)=yes ;; + os2*) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + shrext_cmds=".dll" + _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY `eval $shortname_cmds` INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " MULTIPLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' + _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + ;; + interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no @@ -5386,8 +5404,10 @@ _LT_EOF _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' - _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + shrext_cmds=".dll" + _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY `eval $shortname_cmds` INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " MULTIPLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' + _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes ;; osf3*) @@ -6179,6 +6199,16 @@ if test yes != "$_lt_caught_CXX_error"; then _LT_DARWIN_LINKER_FEATURES($1) ;; + os2*) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + shrext_cmds=".dll" + _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY `eval $shortname_cmds` INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " MULTIPLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' + _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + ;; + dgux*) case $cc_basename in ec++*) -- 1.7.3.2