libtool
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Enhanced OS/2 port


From: Ralf Wildenhues
Subject: Re: Enhanced OS/2 port
Date: Wed, 15 Dec 2010 22:32:04 +0100
User-agent: Mutt/1.5.20 (2010-08-04)

[ adding libtool-patches@; followups can remove libtool@ ]

* KO Myung-Hun wrote on Sun, Nov 28, 2010 at 07:20:32AM CET:
> I've enhanced and fixed libtool 2.4 for OS/2.

Thanks again for working on this.

Generally, we prefer one patch per logical change, and GNU-style
ChangeLog entries.  Also, we should strive to expose bugs in the
testsuite, so that we don't regress.

I understand that just producing a patch at all can be hard work,
so we can help with things (just that takes time ...)
One thing is quite helpful though, and that's how well our testsuite
fares on your system (both without and with the patch).

Also, for nontrivial changes, the FSF needs copyright papers
(more on this off-list).

That said, let's try to get the easier things out of the way:

> --- Makefile.am.org   2010-09-21 16:07:22.000000000 +0900
> +++ Makefile.am       2010-11-27 00:19:56.000000000 +0900
> @@ -324,7 +324,7 @@
>  dist_man1_MANS               = $(srcdir)/doc/libtool.1 
> $(srcdir)/doc/libtoolize.1
>  MAINTAINERCLEANFILES += $(dist_man1_MANS)
>  update_mans = \
> -  PATH=.$(PATH_SEPARATOR)$$PATH; export PATH; \
> +  PATH=".$(PATH_SEPARATOR)$$PATH"; export PATH; \

Good change.

>    $(HELP2MAN) --output=$@
>  $(srcdir)/doc/libtool.1: $(srcdir)/$(auxdir)/ltmain.sh
>       $(update_mans) --help-option=--help-all libtool

> --- libltdl/config/general.m4sh.org   2010-09-01 15:02:44.000000000 +0900
> +++ libltdl/config/general.m4sh       2010-11-27 12:15:52.000000000 +0900
> @@ -296,10 +296,13 @@
>       ;;
>    *)
>       save_IFS="$IFS"
> -     IFS=:
> -     for progdir in $PATH; do
> -       IFS="$save_IFS"
> -       test -x "$progdir/$progname" && break
> +     for pathsep in : ";"; do
> +       IFS="$pathsep"
> +       for progdir in $PATH$pathsep; do
> +      IFS="$save_IFS"
> +      test -x "$progdir/$progname" && break
> +       done
> +       test -n "$progdir" && break
>       done
>       IFS="$save_IFS"
>       test -n "$progdir" || progdir=`pwd`

I don't particularly like guessing here.  Rather, let's store the
configure-computed PATH_SEPARATOR in the generated libtool script
(libtoolize already sets it anyway) and use that.

I'm applying the following patch in your name, and adding you to THANKS:


2010-12-15  KO Myung-Hun <address@hidden>  (tiny change)
            Ralf Wildenhues  <address@hidden>

        Fix PATH_SEPARATOR handling for OS/2.
        * Makefile.am (update_mans): Quote $(PATH_SEPARATOR).
        * libltdl/m4/libtool.m4 (_LT_SETUP): Add _LT_DECL for
        PATH_SEPARATOR.
        * libltdl/config/general.m4sh: Use PATH_SEPARATOR when computing
        $progpath.
        * THANKS: Update.

diff --git a/Makefile.am b/Makefile.am
index 66f38b1..4be353c 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -330,7 +330,7 @@ $(srcdir)/doc/notes.txt: $(srcdir)/doc/notes.texi
 dist_man1_MANS         = $(srcdir)/doc/libtool.1 $(srcdir)/doc/libtoolize.1
 MAINTAINERCLEANFILES   += $(dist_man1_MANS)
 update_mans = \
-  PATH=.$(PATH_SEPARATOR)$$PATH; export PATH; \
+  PATH=".$(PATH_SEPARATOR)$$PATH"; export PATH; \
   $(HELP2MAN) --output=$@
 $(srcdir)/doc/libtool.1: $(srcdir)/$(auxdir)/ltmain.sh
        $(update_mans) --help-option=--help-all libtool
diff --git a/libltdl/config/general.m4sh b/libltdl/config/general.m4sh
index 44a7ce9..40d5413 100644
--- a/libltdl/config/general.m4sh
+++ b/libltdl/config/general.m4sh
@@ -296,7 +296,7 @@ case $progpath in
      ;;
   *)
      save_IFS="$IFS"
-     IFS=:
+     IFS=${PATH_SEPARATOR-:}
      for progdir in $PATH; do
        IFS="$save_IFS"
        test -x "$progdir/$progname" && break
diff --git a/libltdl/m4/libtool.m4 b/libltdl/m4/libtool.m4
index 1f61140..ab3e16f 100644
--- a/libltdl/m4/libtool.m4
+++ b/libltdl/m4/libtool.m4
@@ -146,6 +146,8 @@ AC_REQUIRE([AC_CANONICAL_BUILD])dnl
 AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl
 AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl
 
+_LT_DECL([], [PATH_SEPARATOR], [0], [The PATH separator for the build 
system])dnl
+dnl
 _LT_DECL([], [host_alias], [0], [The host system])dnl
 _LT_DECL([], [host], [0])dnl
 _LT_DECL([], [host_os], [0])dnl




> @@ -564,6 +567,10 @@

(in func_show_eval)

>      my_cmd="$1"
>      my_fail_exp="${2-:}"
> 
> +    # pdksh 5.2.14-bin-2 for OS/2 does not remove trailing CR
> +    # when a line length is 1022. Maybe 1022 is a magic number ?
> +    my_cmd=`$ECHO "$my_cmd" | $SED s/\r$//`

Ouch.  Where did you hit this?  Can't you fix pdksh instead?
This change unconditionally costs two forks and one exec on almost every
command that libtool issues.  Also, \r is not a portable sed regex.

Does something like this work instead?

       # pdksh 5.2.14-bin-2 for OS/2 does not remove trailing CR
       # when a line length is 1022.
       case $my_cmd in *$'\r')
         my_cmd=`$ECHO "$my_cmd" | $SED s/\r$//` ;;
       esac

What about this?
       cr=$'\r'
       case $my_cmd in *$cr)
         my_cmd=`$ECHO "$my_cmd" | $SED s/\r$//` ;;
       esac

Then we still need to factor setting of $cr, but at least it's not quite
so expensive on other systems.

>      ${opt_silent-false} || {
>        func_quote_for_expand "$my_cmd"
>        eval "func_echo $func_quote_for_expand_result"


> --- libltdl/config/ltmain.m4sh.org    2010-09-22 23:45:18.000000000 +0900
> +++ libltdl/config/ltmain.m4sh        2010-11-27 11:14:12.000000000 +0900
> @@ -395,7 +395,7 @@
>    test "$opt_debug" = : || func_append preserve_args " --debug"
> 
>    case $host in
> -    *cygwin* | *mingw* | *pw32* | *cegcc*)
> +    *cygwin* | *mingw* | *pw32* | *cegcc* | *os2*)

ok.

>        # don't eliminate duplications in $postdeps and $predeps
>        opt_duplicate_compiler_generated_deps=:
>        ;;


> @@ -1638,6 +1638,7 @@
>    -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

This change and associated other hunks should be in a separate patch on
its own, with an accompanying NEWS entry and addition to
doc/libtool.texi.

> @@ -2221,8 +2222,17 @@
>           # so we also need to try rm && ln -s.
>           for linkname
>           do
> -           test "$linkname" != "$realname" \
> -             && func_show_eval "(cd $destdir && { $LN_S -f $realname 
> $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })"
> +           if test "$linkname" != "$realname"; then
> +             case $host_os in
> +             os2*)
> +               # Create import libraries instead of links on OS/2
> +               func_show_eval "(emximp -o $destdir/$linkname 
> $dir/${linkname%%_dll.$libext}.def)"

Can this instead be handled in a similar manner to how import libraries
are handled on MinGW and Cygwin?

Also, hard-coding 'emximp' does not seem like a good idea.  It should be
either searchable or overridable, and the relevant commands should be in
a *_cmds variable in libtool.m4 (see above).

If the DLL is put in the bindir (is that common on OS/2?) then should
the import library reside in libdir (as is common on w32) or alongside
the DLL?

> +               ;;
> +             *)
> +               func_show_eval "(cd $destdir && { $LN_S -f $realname 
> $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })"
> +               ;;
> +             esac
> +           fi
>           done
>         fi
> 
> @@ -4628,6 +4638,11 @@
>         prev=
>         continue
>         ;;
> +     shortname)
> +       shortname_cmds="$ECHO $arg | cut -b -8"

Why do you use a cutoff here?  It would seem to me that if the user
wanted to hard-code the name, then she should have the freedom to set
the length.  Otherwise, I'd prefer to at least not hardcode the 8 here,
but use an _LT_DECL shortname_max or so and set it from libtool.m4
(with 0 denoting no limit, for example).

> +       prev=
> +       continue
> +       ;;
>       shrext)
>         shrext_cmds="$arg"
>         prev=
> @@ -4947,6 +4962,14 @@
>       continue
>       ;;
> 
> +      -shortname)
> +     # 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.

This comment would rather belong to libtool.m4 where shortname_cmds is
set.

> +     prev=shortname
> +     continue
> +     ;;
> +
>        -shrext)
>       prev=shrext
>       continue
[... rest will be reviewed in another mail ...]

Cheers,
Ralf



reply via email to

[Prev in Thread] Current Thread [Next in Thread]