[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Libtool needs -input-file option
From: |
Robert Boehne |
Subject: |
Re: Libtool needs -input-file option |
Date: |
Thu, 01 Mar 2001 11:37:11 -0600 |
If there are no objections, I'll go ahead and commit this patch.
Robert Boehne wrote:
>
> Alexandre Oliva wrote:
> >
> > On Feb 20, 2001, Robert Boehne <address@hidden> wrote:
> >
> > > I don't think I can assign the objects to the argument list $0 $1 $2 etc
> > > because that would exceed the same limit as the shell.(?)
> >
> > I think it's ok to do it. IIUC, the command-line length limit only
> > applies to the exec() system call, when it has to set up argc, argv
> > and envvars for the new process in a static memory region.
> >
> > So, we could run a first pass over command-line arguments looking for
> > -lt-input-file filename and expanding them. Bonus points if you can
> > fold this pass into the current argument-list handling loops :-)
> >
>
> I've compiled this list of similar arguments from the systems I have
> handy. The option that my prototype most resembles is -objectlist
> a la IRIX, it is simple, and if we use -objectlist, IRIX users will
> already recognize it.
>
> hp11
> -c filename Arguments to ld
> Linux
> -c filename All arguments to ld (everything else on the command line
> is ignored)
> Tru64
> -input filename Arguments to ld (all are allowed), + nesting up to 20
> levels (!)
> aix 4.3
> -fFileID list of object files, allows wildcards
> irix 6.5
> -objectlist object_list_file list of object files, ignores wildcards
> Sun
> no such option
>
> Now, although I'd love to have the "Bonus points" ;) I have taken
> the easy way out in my current patch. It reads command line options
> just like normal (with one addition), and then parses the *.lo
> objects with a copy of the code that does it with command
> line arguments. It isn't the most elagant solution, BUT
> it is "safer" than altering the mature tested code,
> and we will probably turn that section into a C function
> soon enough. That doesn't mean I wouldn't rewrite it though...
> Here's the patch, as promised.
>
> --
> Robert Boehne Software Engineer
> Ricardo Software Chicago Technical Center
> TEL: (630)789-0003 x. 238
> FAX: (630)789-0127
> email: address@hidden
>
> ------------------------------------------------------------------------
> ChangeLog entry:
> 2001-02-23 Robert Boehne <address@hidden>
>
> * ltmain.in: Add support for the -objectlist option in
> link mode. The option behaves identically to the IRIX
> 6.5 linker option of the same name. Added a description
> of the -objectlist option to the output of
> libtool --mode=link --help
> * doc/libtool.texi (Link mode): Added documentation for
> the -objectlist option in libtool link mode.
>
> Index: ltmain.in
> ===================================================================
> RCS file: /cvsroot/libtool/libtool/ltmain.in,v
> retrieving revision 1.200.2.45
> diff -u -r1.200.2.45 ltmain.in
> --- ltmain.in 2001/02/23 20:11:56 1.200.2.45
> +++ ltmain.in 2001/02/23 23:01:04
> @@ -950,6 +950,113 @@
> prev=
> continue
> ;;
> + objectlist)
> + if test -f "$arg"; then
> + save_arg=$arg
> + moreargs=
> + for fil in `cat $save_arg`
> + do
> +# moreargs="$moreargs $fil"
> + arg=$fil
> + # A libtool-controlled object.
> +
> + # Check to see that this really is a libtool object.
> + if (sed -e '2q' $arg | egrep "^# Generated by .*$PACKAGE")
> >/dev/null 2>&1; then
> + pic_object=
> + non_pic_object=
> +
> + # Read the .lo file
> + # If there is no directory component, then add one.
> + case "$arg" in
> + */* | *\\*) . $arg ;;
> + *) . ./$arg ;;
> + esac
> +
> + if test -z "$pic_object" || \
> + test -z "$non_pic_object" ||
> + test "$pic_object" = none && \
> + test "$non_pic_object" = none; then
> + $echo "$modename: cannot find name of object for \`$arg'"
> 1>&2
> + exit 1
> + fi
> +
> + # Extract subdirectory from the argument.
> + xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'`
> + if test "X$xdir" = "X$arg"; then
> + xdir=
> + else
> + xdir="$xdir/"
> + fi
> +
> + if test "$pic_object" != none; then
> + # Prepend the subdirectory the object is found in.
> + pic_object="$xdir$pic_object"
> +
> + if test "$prev" = dlfiles; then
> + if test "$build_libtool_libs" = yes && test
> "$dlopen_support" = yes; then
> + dlfiles="$dlfiles $pic_object"
> + prev=
> + continue
> + else
> + # If libtool objects are unsupported, then we need to
> preload.
> + prev=dlprefiles
> + fi
> + fi
> +
> + # CHECK ME: I think I busted this. -Ossama
> + if test "$prev" = dlprefiles; then
> + # Preload the old-style object.
> + dlprefiles="$dlprefiles $pic_object"
> + prev=
> + fi
> +
> + # A PIC object.
> + libobjs="$libobjs $pic_object"
> + arg="$pic_object"
> + fi
> +
> + # Non-PIC object.
> + if test "$non_pic_object" != none; then
> + # Prepend the subdirectory the object is found in.
> + non_pic_object="$xdir$non_pic_object"
> +
> + # A standard non-PIC object
> + non_pic_objects="$non_pic_objects $non_pic_object"
> + if test -z "$pic_object" || test "$pic_object" = none ;
> then
> + arg="$non_pic_object"
> + fi
> + fi
> + else
> + # Only an error if not doing a dry-run.
> + if test -z "$run"; then
> + $echo "$modename: \`$arg' is not a valid libtool object"
> 1>&2
> + exit 1
> + else
> + # Dry-run case.
> +
> + # Extract subdirectory from the argument.
> + xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'`
> + if test "X$xdir" = "X$arg"; then
> + xdir=
> + else
> + xdir="$xdir/"
> + fi
> +
> + pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e
> "$lo2o"`
> + non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"`
> + libobjs="$libobjs $pic_object"
> + non_pic_objects="$non_pic_objects $non_pic_object"
> + fi
> + fi
> + done
> + else
> + $echo "$modename: link input file \`$save_arg' does not exist"
> + exit 1
> + fi
> + arg=$save_arg
> + prev=
> + continue
> + ;;
> rpath | xrpath)
> # We need an absolute path.
> case "$arg" in
> @@ -1153,6 +1260,11 @@
> continue
> ;;
>
> + -objectlist)
> + prev=objectlist
> + continue
> + ;;
> +
> -o) prev=output ;;
>
> -release)
> @@ -5072,6 +5184,7 @@
> -no-install link a not-installable executable
> -no-undefined declare that a library does not refer to external symbols
> -o OUTPUT-FILE create OUTPUT-FILE from the specified objects
> + -objectlist FILE Use a list of object files found in FILE to specify
> objects
> -release RELEASE specify package release information
> -rpath LIBDIR the created library will eventually be installed in
> LIBDIR
> -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries
> Index: doc/libtool.texi
> ===================================================================
> RCS file: /cvsroot/libtool/libtool/doc/libtool.texi,v
> retrieving revision 1.86.2.17
> diff -u -r1.86.2.17 libtool.texi
> --- doc/libtool.texi 2001/02/23 20:12:00 1.86.2.17
> +++ doc/libtool.texi 2001/02/23 23:01:05
> @@ -1237,6 +1237,17 @@
> the regular expression @var{regex} are exported.
> By default all symbols are exported.
>
> address@hidden -objectlist @var{input-file}
> +Tells libtool to read a text file to determine the object files
> +to be linked. The @var{input-file} is a text file containing a list
> +of libtool objects (@samp{.lo} files), one per line. This option is
> +used to build arbitrarily large libraries when the libtool command
> +becomes too large for the system to execute. Creating this file can
> +be automated with a command like the following:
> address@hidden
> address@hidden ./ -name \*.lo -print | sed 's/.\///g' > inputfile.txt}
> address@hidden example
> +
> @item address@hidden
> Search @var{libdir} for required libraries that have already been
> installed.
--
Robert Boehne Software Engineer
Ricardo Software Chicago Technical Center
TEL: (630)789-0003 x. 238
FAX: (630)789-0127
email: address@hidden
- Re: Libtool needs -input-file option,
Robert Boehne <=