On Sun, 23 Feb 2014, Jed Brown wrote: > Barry Smith <[email protected]> writes: > > > On Feb 23, 2014, at 12:47 AM, Jed Brown <[email protected]> wrote: > > > >> My configure on 'master' fails with the following. I need to link with > >> -lfl to get the symbol yywrap. I don't know why we haven't been > >> encountering this before. > > > > There was one user report of this a few weeks, but in all the > > previous years I don’t recall this ever being an issue. > > > > I guess you better update maint. > > Testing on petsc-mini.mcs, c2html's configure automatically finds -ll > (/usr/lib/libl.a) and there is no -lfl. We could check for existence of > -lfl and pass in LEXLIB=-lfl if it works, but that could find a libfl > floating around from a different lex implementation. This is really > something c2html's configure should be working out, and when I look, it > really tries (this is why we haven't seen the issue before):
c2html's configure automatically finds -lfl on fedora and ubuntu >>>>>>>>>>>>>>>>>> <fedora> $ locate libfl. /usr/lib64/libfl.a <ubuntu> (next) $ locate libfl. /usr/lib/x86_64-linux-gnu/libfl.a /usr/lib/x86_64-linux-gnu/libfl.so $ nm -Ao /usr/lib/x86_64-linux-gnu/libfl.a /usr/lib/x86_64-linux-gnu/libfl.a:libmain.o:0000000000000000 T main /usr/lib/x86_64-linux-gnu/libfl.a:libmain.o: U yylex /usr/lib/x86_64-linux-gnu/libfl.a:libyywrap.o:0000000000000000 T yywrap $ cat /usr/lib/x86_64-linux-gnu/libfl.so /* GNU ld script * -*- Mode: C -*- * libfl.so --- * Author : Manoj Srivastava ( [email protected] ) * Created On : Mon Sep 11 13:25:55 2006 * Created On Node : glaurung.internal.golden-gryphon.com * Last Modified By : Manoj Srivastava * Last Modified On : Tue Sep 12 03:34:30 2006 * Last Machine Used: glaurung.internal.golden-gryphon.com * Update Count : 2 * Status : Unknown, Use with caution! * HISTORY : * Description : * * GNU ld script * When shared linking is requested, map the request to the PIC static * library, which is the closest we come to a shared library here. * * arch-tag: ce35efb4-3893-42c7-bdcb-56d95beba2ac */ INPUT( /usr/lib/x86_64-linux-gnu/libfl_pic.a ) <<<<<<<<<<<<<<<<<<<<<<<<< So flex doesn't like .so files? Even the .so on ubuntu is a link to a static file. > > configure:1829: checking for yywrap in -lfl > configure:1856: gcc -o conftest -g -O2 conftest.c -lfl >&5 > /usr/lib/gcc/x86_64-unknown-linux-gnu/4.8.2/../../../../lib/libfl.so: > undefined reference to `yylex' > collect2: error: ld returned 1 exit status > configure:1859: $? = 1 > configure: failed program was: > #line 1837 "configure" > #include "confdefs.h" > > /* Override any gcc2 internal prototype to avoid an error. */ > #ifdef __cplusplus > extern "C" > #endif > /* We use char because int might match the return type of a gcc2 > builtin and then its argument prototype would still apply. */ > char yywrap (); > int main () > { > yywrap (); > return 0; > } > configure:1876: result: no > > > Huh, what could be happening here: > > $ nm -D /usr/lib/libfl.so | grep yy > U yylex > 0000000000000740 T yywrap > > > libfl.so defines main, which calls yylex(). We used to have a static > library (libfl.a) in which case linking yywrap did not depend on a > function called yylex (which is supposed to be defined outside > libfl.so). This causes the normal AC_CHECK_LIB(fl, yylex) to fail. $ make flex ./c2html.l gcc -O -I. -I. -DCOMPRESSION=1 -o c2html lex.yy.c ./mymain.c ./colors.c -lfl <ok - try to get .o files for sources to do nm> $ gcc -O -I. -I. -DCOMPRESSION=1 -c lex.yy.c ./mymain.c ./colors.c $ nm -Ao c2html lex.yy.o mymain.o colors.o |grep yylex c2html:0000000000401393 T yylex c2html:0000000000404603 T yylex_destroy lex.yy.o:0000000000000463 T yylex lex.yy.o:00000000000036d3 T yylex_destroy Perhaps the configure test needs to define a 'yylex' symbol in the test code. But there must be a reason why fedora/ubuntu use only .a files [and arch switching to .so is perhaps triggering this breakage] Satish > Now it doesn't delight me that c2html's configure script has been edited > From the one generated by autoconf. I'll check with flex upstream to > figure out what they intend to be used as a configure test now.
