Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Infinite loop in finding libraries: https://github.com/kohler/click/blob/master/click-buildtool.in#L824 #465

Open
fasilz opened this issue Sep 29, 2020 · 2 comments

Comments

@fasilz
Copy link

fasilz commented Sep 29, 2020

In Ubuntu bionic, an Element passed its dependencies like so: ELEMENT_LIBS((../lua/libluajit.a -lm -ldl)) && ELEMENT_LIBS(-lpthread), and in elements.conf I see -!lib../lua/libluajit.a;-lm;-ldl & -!lib-lpthread -!lib-lpthread . I see the following (inserting set -x in bin/click-buildtool):

+ libs=../lua/libluajit.a -lm -ldl 
-lpthread 
+ test -n ../lua/libluajit.a -lm -ldl 
-lpthread 
+ echo ../lua/libluajit.a -lm -ldl 
-lpthread 
+ sed s/^\([^ ][^ ]*\) *$/\1 \1/
+ libs=../lua/libluajit.a -lm -ldl 
-lpthread -lpthread
+ echo ../lua/libluajit.a -lm -ldl 
-lpthread -lpthread
+ /bin/grep  [^ ].* [^ ]
+ echo ../lua/libluajit.a -lm -ldl 
-lpthread -lpthread
+ sed / [^ ].* [^ ]/s/^\([^ ][^ ]*\)  *\([^ ][^ ]*\) /\1 \2\\2 /
+ libs=../lua/libluajit.a -lm
-lm -ldl 
-lpthread -lpthread
+ echo ../lua/libluajit.a -lm
-lm -ldl 
-lpthread -lpthread
+ /bin/grep  [^ ].* [^ ]
+ test -n ../lua/libluajit.a -lm
-lm -ldl 
-lpthread -lpthread
+ echo ../lua/libluajit.a -lm
-lm -ldl 
-lpthread -lpthread
+ tsort
+ libs=-lpthread
../lua/libluajit.a
-lm
-ldl

and it builds as expected. In Ubuntu focal, the same code has the following output

+ libs=../lua/libluajit.a -lm -ldl 
-lpthread 
+ test -n ../lua/libluajit.a -lm -ldl 
-lpthread 
+ echo ../lua/libluajit.a -lm -ldl 
-lpthread 
+ sed s/^\([^ ][^ ]*\) *$/\1 \1/
+ libs=../lua/libluajit.a -lm -ldl 
-lpthread -lpthread
+ echo ../lua/libluajit.a -lm -ldl 
-lpthread -lpthread
+ /usr/local/bin/grep  [^ ].* [^ ]
+ echo ../lua/libluajit.a -lm -ldl 
-lpthread -lpthread
+ sed / [^ ].* [^ ]/s/^\([^ ][^ ]*\)  *\([^ ][^ ]*\) /\1 \2\2 /
+ libs=../lua/libluajit.a -lm-lm -ldl 
-lpthread -lpthread
+ echo ../lua/libluajit.a -lm-lm -ldl 
-lpthread -lpthread
+ /usr/local/bin/grep  [^ ].* [^ ]
+ echo ../lua/libluajit.a -lm-lm -ldl 
-lpthread -lpthread
+ sed / [^ ].* [^ ]/s/^\([^ ][^ ]*\)  *\([^ ][^ ]*\) /\1 \2\2 /
+ libs=../lua/libluajit.a -lm-lm-lm-lm -ldl 
-lpthread -lpthread
+ echo ../lua/libluajit.a -lm-lm-lm-lm -ldl 
-lpthread -lpthread
+ /usr/local/bin/grep  [^ ].* [^ ]
+ echo ../lua/libluajit.a -lm-lm-lm-lm -ldl 
-lpthread -lpthread
+ sed / [^ ].* [^ ]/s/^\([^ ][^ ]*\)  *\([^ ][^ ]*\) /\1 \2\2 /
+ libs=../lua/libluajit.a -lm-lm-lm-lm-lm-lm-lm-lm -ldl 
-lpthread -lpthread
+ echo ../lua/libluajit.a -lm-lm-lm-lm-lm-lm-lm-lm -ldl 
-lpthread -lpthread
+ /usr/local/bin/grep  [^ ].* [^ ]
+ echo ../lua/libluajit.a -lm-lm-lm-lm-lm-lm-lm-lm -ldl 
-lpthread -lpthread
+ sed / [^ ].* [^ ]/s/^\([^ ][^ ]*\)  *\([^ ][^ ]*\) /\1 \2\2 /
+ libs=../lua/libluajit.a -lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm -ldl 
-lpthread -lpthread
+ echo ../lua/libluajit.a -lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm -ldl 
-lpthread -lpthread
+ /usr/local/bin/grep  [^ ].* [^ ]
+ echo ../lua/libluajit.a -lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm -ldl 
-lpthread -lpthread
+ sed / [^ ].* [^ ]/s/^\([^ ][^ ]*\)  *\([^ ][^ ]*\) /\1 \2\2 /
+ libs=../lua/libluajit.a -lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm -ldl 
-lpthread -lpthread
+ echo ../lua/libluajit.a -lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm -ldl 
-lpthread -lpthread
+ /usr/local/bin/grep  [^ ].* [^ ]
+ echo ../lua/libluajit.a -lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm -ldl 
-lpthread -lpthread
+ sed / [^ ].* [^ ]/s/^\([^ ][^ ]*\)  *\([^ ][^ ]*\) /\1 \2\2 /
+ libs=../lua/libluajit.a -lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm -ldl 
-lpthread -lpthread
+ /usr/local/bin/grep  [^ ].* [^ ]
+ echo ../lua/libluajit.a -lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm -ldl 
-lpthread -lpthread
+ echo ../lua/libluajit.a -lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm -ldl 
-lpthread -lpthread
+ sed / [^ ].* [^ ]/s/^\([^ ][^ ]*\)  *\([^ ][^ ]*\) /\1 \2\2 /
+ libs=../lua/libluajit.a -lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm -ldl 
-lpthread -lpthread
+ echo ../lua/libluajit.a -lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm-lm -ldl 
-lpthread -lpthread
+ /usr/local/bin/grep  [^ ].* [^ ]
+ sed / [^ ].* [^ ]/s/^\([^ ][^ ]*\)  *\([^ ][^ ]*\) /\1 \2\2 /
@deshmukhrajvardhan
Copy link

I see the same issue
We use this to link a library
ELEMENT_LIBS((../lua/libluajit.a -lm -ldl))

I've noticed other examples have 2 words seperatred by space, we have 3.
And the 2nd words keeps doubling.

@fasilz
Copy link
Author

fasilz commented Sep 29, 2020

passing each lib separately as ELEMENT_LIBS(../lua/libluajit.a) seems to fix this on focal, but still not sure why it behaves differently from bionic.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants