OS/2: command-line length limit (was: Enhanced OS/2 port)

2010-12-16 Thread Ralf Wildenhues
Hello again,

* KO Myung-Hun wrote on Sun, Nov 28, 2010 at 07:20:32AM CET:
> --- libltdl/m4/libtool.m4.org 2010-09-22 17:41:18.0 +0900
> +++ libltdl/m4/libtool.m4 2010-11-27 16:03:50.0 +0900
> @@ -1624,6 +1624,9 @@
>lt_cv_sys_max_cmd_len=32768
>  fi
>  ;;
> +  os2*)
> +lt_cv_sys_max_cmd_len=-1
> +;;
>*)
>  lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`
>  if test -n "$lt_cv_sys_max_cmd_len"; then

Is there really no maximum for the command line length on OS/2?
That would be really surprising to me, on a system which limits
it DLL basenames to 8 characters.  ;-)
But if it is so, then the patch is obviously ok.

Or did you do this in order to avoid an expensive check?
What does the check do without the above change?  Does it finish?
Does the machine hang or need a reboot?

I couldn't find good information about this issue on the net.

Thanks,
Ralf



Re: Enhanced OS/2 port

2010-12-16 Thread KO Myung-Hun
Hi/2.

Ralf Wildenhues wrote:
> [ 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).
> 

Thanks for your infos. ^^

> 
> I'm applying the following patch in your name, and adding you to THANKS:
> 
> 
> 2010-12-15  KO Myung-Hun   (tiny change)
>   Ralf Wildenhues  
> 
>   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
> 
> 

Thanks a lot. ^^

> 
> 
>> @@ -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.
> 

Ok, you can ignore this hunk. I've found the cause. This occurs if
sh.exe is in PATH as well as /bin. Removing sh.exe in PATH resolved this
problem.

>># 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 SUFFIXoverride 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.
> 

I attach the patch.

>> @@ -2221,8 +,17 @@
>>  # so we also need to try rm && ln -s.
>>  for linkname
>>  do
>> -  test "$linkname" != "$realname" \
>

Re: Enhanced OS/2 port

2010-12-15 Thread Ralf Wildenhues
* Ralf Wildenhues wrote on Wed, Dec 15, 2010 at 10:32:04PM CET:
> --- 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

Sorry about the glitch, but the above doesn't put double-quotes around
the value in the libtool script.  I'm pushing this followup patch to fix
that.

Cheers,
Ralf

* libltdl/m4/libtool.m4 (_LT_SETUP): Fix quoting for PATH_SEPARATOR.

diff --git a/libltdl/m4/libtool.m4 b/libltdl/m4/libtool.m4
index ab3e16f..59114b4 100644
--- a/libltdl/m4/libtool.m4
+++ b/libltdl/m4/libtool.m4
@@ -146,7 +146,7 @@ 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
+_LT_DECL([], [PATH_SEPARATOR], [1], [The PATH separator for the build 
system])dnl
 dnl
 _LT_DECL([], [host_alias], [0], [The host system])dnl
 _LT_DECL([], [host], [0])dnl



Re: Enhanced OS/2 port

2010-12-15 Thread Ralf Wildenhues
[ 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.0 +0900
> +++ Makefile.am   2010-11-27 00:19:56.0 +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.0 +0900
> +++ libltdl/config/general.m4sh   2010-11-27 12:15:52.0 +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   (tiny change)
Ralf Wildenhues  

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 sy