OS/2: command-line length limit (was: Enhanced OS/2 port)
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
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
* 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
[ 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