<div dir="ltr"><div style="font-family:verdana,sans-serif" class="gmail_default"><font size="2">Hi all,</font></div><div style="font-family:verdana,sans-serif" class="gmail_default"><font size="2"><br></font></div><div style="font-family:verdana,sans-serif" class="gmail_default"><font size="2">I'm building Dovecot from source of Dovecot 2.3.13. When doing make check, I saw an error:</font></div><div class="gmail_default"><font size="2"><span style="font-family:monospace">make[1]: Entering directory '/home/xxx/rpmbuild/BUILD/xxx/dovecot-2.3.13/src/lib-ssl-iostream'<br>for bin in test-iostream-ssl; do \<br>  if ! /bin/sh ../../run-test.sh ../.. ./$bin; then exit 1; fi; \<br>done<br>collect2: error: ld returned 213 exit status<br>Failed to run: ./test-iostream-ssl</span></font></div><div style="font-family:verdana,sans-serif" class="gmail_default"><font size="2"><br></font></div><div style="font-family:verdana,sans-serif" class="gmail_default"><font size="2">This is my configuration in spec file:</font></div><div class="gmail_default"><span style="font-family:monospace"><font size="2">%configure                       \<br>    INSTALL_DATA="install -c -p -m644" \<br>    --docdir=%{_docdir}/%{name}  \<br>    --disable-static             \<br>    --disable-rpath              \<br>    --with-nss                   \<br>    --with-shadow                \<br>    --with-pam                   \<br>    --with-gssapi=plugin         \<br>    --with-ldap=plugin           \<br>    --with-sql=plugin            \<br>    --with-pgsql                 \<br>    --with-mysql                 \<br>    --with-sqlite                \<br>    --with-zlib                  \<br>    --with-libcap                \<br>    --with-ssl=openssl           \<br>    --with-ssldir=%{ssldir}      \<br>    --with-docs</font></span></div><div style="font-family:verdana,sans-serif" class="gmail_default"><font size="2"><br></font></div><div style="font-family:verdana,sans-serif" class="gmail_default"><font size="2">I installed OpenSSL and Valgrind:</font></div><div class="gmail_default"><span style="font-family:monospace"><font size="2"># yum list installed | egrep "valgrind|openssl"<br>openssl-devel.x86_64                        1:1.1.1g-12.el8_3                        @BaseOS<br>openssl-libs.x86_64                         1:1.1.1g-12.el8_3                        @BaseOS<br>valgrind.x86_64                             1:3.16.0-2.el8                           @AppStream<br>valgrind-devel.x86_64                       1:3.16.0-2.el8                           @AppStream</font></span></div><div style="font-family:verdana,sans-serif" class="gmail_default"><font size="2"><br></font></div><div style="font-family:verdana,sans-serif" class="gmail_default"><font size="2">I investigated the problem and found something:</font></div><div style="font-family:verdana,sans-serif" class="gmail_default"><ul><li><font size="2">Unlike other lib-xxx, libtool doesn't generate executable binary test-iostream-ssl inside lib-ssl-iostream directory. That's a shell script and actual executable binary is inside ./libs directory (<a href="https://www.gnu.org/software/libtool/manual/libtool.html#Linking-executables">https://www.gnu.org/software/libtool/manual/libtool.html#Linking-executables</a>):</font></li></ul><div style="margin-left:40px"><font size="2"><span style="font-family:monospace">$ pwd</span></font><br><font size="2"><span style="font-family:monospace">/home/xxx/rpmbuild/BUILD/xxx/dovecot-2.3.13/src/lib-ssl-iostream</span></font><br><font size="2"><span style="font-family:monospace">$ file test-iostream-ssl</span></font><br><font size="2"><span style="font-family:monospace">test-iostream-ssl: POSIX shell script, ASCII text executable, with very long lines</span></font><br><font size="2"><span style="font-family:monospace">$ file .libs/test-iostream-ssl</span></font><br><font size="2"><span style="font-family:monospace">.libs/test-iostream-ssl: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=c6a800c253c38a7eb78886286ef779d871550a6c, with debug_info, not stripped, too many notes (256)</span></font><br></div><div style="margin-left:40px"><font size="2"><br></font></div><div style="margin-left:40px"><font size="2">That means when running make check, Valgrind will monitor the shell script generated by libtool instead of the actual test code. And error occurs.</font></div></div><div style="font-family:verdana,sans-serif" class="gmail_default"><ul><li><font size="2">To confirm, I changed Makefile a bit:</font></li></ul><div style="margin-left:40px"><font size="2"><span style="font-family:monospace">$ pwd</span></font><br><font size="2"><span style="font-family:monospace">/home/xxx/rpmbuild/BUILD/xxx/dovecot-2.3.13/src/lib-ssl-iostream</span></font><br><font size="2"><span style="font-family:monospace">$ vim Makefile</span></font><br><font size="2"><span style="font-family:monospace">check-local:</span></font><br><font size="2"><span style="font-family:monospace">        for bin in $(test_programs); do \</span></font><br><font size="2"><span style="font-family:monospace">          export LD_LIBRARY_PATH=./.libs; \</span></font><br><font size="2"><span style="font-family:monospace">          if ! $(RUN_TEST) ./.libs/$$bin; then exit 1; fi; \</span></font><br><font size="2"><span style="font-family:monospace">        done</span></font><br></div><font size="2"><br></font></div><div style="font-family:verdana,sans-serif" class="gmail_default"><div style="margin-left:40px"><font size="2">Then do make check:</font><br></div><div style="margin-left:40px"><span style="font-family:monospace"><font size="2">$ cd ~/rpmbuild/BUILD/xxx/dovecot-2.3.13</font><br><font size="2">$ make -C src/lib-ssl-iostream/ clean</font><br><font size="2">$ make -C src/lib-ssl-iostream/ check</font><br><font size="2">make[1]: Entering directory '/home/xxx/rpmbuild/BUILD/xxx/dovecot-2.3.13/src/lib-ssl-iostream'</font><br><font size="2">for bin in test-iostream-ssl; do \</font><br><font size="2">  export LD_LIBRARY_PATH=./.libs; \</font><br><font size="2">  if ! /bin/sh -x ../../run-test.sh ../.. ./.libs/$bin; then exit 1; fi; \</font><br><font size="2">  #if ! /bin/sh -x ../../run-test.sh ../.. ./$bin; then exit 1; fi; \</font><br><font size="2">done</font><br><font size="2">ssl: handshake ....................................................... : ok</font><br><font size="2">ssl: o_stream_get_buffer_avail_size .................................. : ok</font><br><font size="2">ssl: small packets ................................................... : ok</font><br><font size="2">0 / 3 tests failed</font><br><font size="2">+ ret=0</font><br><font size="2">+ test -s test.out~19257</font><br><font size="2">+ test 0 '!=' 0</font><br><font size="2">+ exit 0</font><br><font size="2">+ rm -f test.out~19257</font><br><font size="2">make[1]: Leaving directory '/home/xxx/rpmbuild/BUILD/xxx/dovecot-2.3.13/src/lib-ssl-iostream'</font><br><font size="2">make: Leaving directory '/home/xxx/rpmbuild/BUILD/xxx/dovecot-2.3.13/src/lib-ssl-iostream'</font></span></div></div><div style="font-family:verdana,sans-serif" class="gmail_default"><ul><li><font size="2">According to the manual of libtool, if I use libtool to generate library and executable binary, I should use libtool to execute (or debug or anything else). That will avoid misconfiguration and unexpected errors:</font></li><ul><li><font size="2"><a href="https://www.gnu.org/software/libtool/manual/html_node/Debugging-executables.html#Debugging-executables">https://www.gnu.org/software/libtool/manual/html_node/Debugging-executables.html#Debugging-executables</a></font></li><li><font size="2"><a href="https://stackoverflow.com/a/14186488">https://stackoverflow.com/a/14186488</a></font></li></ul></ul><font size="2"></font></div><div style="font-family:verdana,sans-serif" class="gmail_default"><div style="margin-left:40px"><font size="2">My patch looks like this:</font><br></div><div style="margin-left:40px"><span style="font-family:monospace"><font size="2">diff --git a/src/lib-ssl-iostream/Makefile.am b/src/lib-ssl-iostream/Makefile.am</font></span><br><span style="font-family:monospace"><font size="2">index 5aaea5d..17ebf1d 100644</font></span><br><span style="font-family:monospace"><font size="2">--- a/src/lib-ssl-iostream/Makefile.am</font></span><br><span style="font-family:monospace"><font size="2">+++ b/src/lib-ssl-iostream/Makefile.am</font></span><br><span style="font-family:monospace"><font size="2">@@ -56,6 +56,6 @@ noinst_PROGRAMS = $(test_programs)</font></span><br><span style="font-family:monospace"><font size="2"> </font></span><br><span style="font-family:monospace"><font size="2"> check-local:</font></span><br><span style="font-family:monospace"><font size="2">  for bin in $(test_programs); do \</font></span><br><span style="font-family:monospace"><font size="2">-         if ! $(RUN_TEST) ./$$bin; then exit 1; fi; \</font></span><br><span style="font-family:monospace"><font size="2">+   if ! $(LIBTOOL) --mode execute $(RUN_TEST) ./$$bin; then exit 1; fi; \</font></span><br><span style="font-family:monospace"><font size="2">       done</font></span><br><span style="font-family:monospace"><font size="2"> endif</font></span></div><div style="margin-left:40px"><span style="font-family:monospace"><font size="2"><br></font></span></div><div style="margin-left:40px"><span style="font-family:monospace"><font size="2"><font face="verdana,sans-serif">Result:</font></font></span></div><div style="margin-left:40px"><span style="font-family:monospace"><font size="2">make[2]: Entering directory '/home/xxx/rpmbuild/BUILD/xxx/dovecot-2.3.13/src/lib-ssl-iostream'<br>make  check-local<br>make[3]: Entering directory '/home/xxx/rpmbuild/BUILD/xxx/dovecot-2.3.13/src/lib-ssl-iostream'<br>for bin in test-iostream-ssl; do \<br>  if ! /bin/sh ../../libtool --mode execute /bin/sh ../../run-test.sh ../.. ./$bin; then exit 1; fi; \<br>done<br>ssl: handshake ....................................................... : ok<br>ssl: o_stream_get_buffer_avail_size .................................. : ok<br>ssl: small packets ................................................... : ok<br>0 / 3 tests failed<br>make[3]: Leaving directory '/home/xxx/rpmbuild/BUILD/xxx/dovecot-2.3.13/src/lib-ssl-iostream'<br>make[2]: Leaving directory '/home/xxx/rpmbuild/BUILD/xxx/dovecot-2.3.13/src/lib-ssl-iostream'</font></span></div></div><div style="font-family:verdana,sans-serif" class="gmail_default"><font size="2"><br></font></div><div style="font-family:verdana,sans-serif" class="gmail_default"><font size="2">Can anyone help to correct my understanding and my patch?</font></div><div style="font-family:verdana,sans-serif" class="gmail_default"><font size="2"><br></font></div><div style="font-family:verdana,sans-serif" class="gmail_default"><font size="2">Thanks,</font></div><div style="font-family:verdana,sans-serif" class="gmail_default"><font size="2">Anh Do<br></font></div><div style="font-family:verdana,sans-serif" class="gmail_default"><font size="2"><br></font></div></div>