Patchwork [v5] configure: properly check if -lrt and -lm is needed

login
register
mail settings
Submitter Natanael Copa
Date Sept. 12, 2012, 9:06 a.m.
Message ID <1347440811-13081-1-git-send-email-ncopa@alpinelinux.org>
Download mbox | patch
Permalink /patch/183298/
State New
Headers show

Comments

Natanael Copa - Sept. 12, 2012, 9:06 a.m.
Fixes build against uClibc.

uClibc provides 2 versions of clock_gettime(), one with realtime
support and one without (this is so you can avoid linking in -lrt
unless actually needed). This means that the clock_gettime() don't
need -lrt. We still need it for timer_create() so we check for this
function in addition.

We also need check if -lm is needed for isnan().

Both -lm and -lrt are needed for libs_qga.

Signed-off-by: Natanael Copa <ncopa@alpinelinux.org>
---
Changes v4->v5:

 - Do not exit with error if librt fails.
   Apparently, mingw32 does not use those functions at all so we
   should not exit with error.

   This is how it originally worked.

 configure | 31 +++++++++++++++++++++++++++++--
 1 file changed, 29 insertions(+), 2 deletions(-)
Blue Swirl - Sept. 15, 2012, 5:26 p.m.
Thanks, applied.

On Wed, Sep 12, 2012 at 9:06 AM, Natanael Copa <natanael.copa@gmail.com> wrote:
> Fixes build against uClibc.
>
> uClibc provides 2 versions of clock_gettime(), one with realtime
> support and one without (this is so you can avoid linking in -lrt
> unless actually needed). This means that the clock_gettime() don't
> need -lrt. We still need it for timer_create() so we check for this
> function in addition.
>
> We also need check if -lm is needed for isnan().
>
> Both -lm and -lrt are needed for libs_qga.
>
> Signed-off-by: Natanael Copa <ncopa@alpinelinux.org>
> ---
> Changes v4->v5:
>
>  - Do not exit with error if librt fails.
>    Apparently, mingw32 does not use those functions at all so we
>    should not exit with error.
>
>    This is how it originally worked.
>
>  configure | 31 +++++++++++++++++++++++++++++--
>  1 file changed, 29 insertions(+), 2 deletions(-)
>
> diff --git a/configure b/configure
> index edf9da4..c1ed856 100755
> --- a/configure
> +++ b/configure
> @@ -2624,17 +2624,44 @@ fi
>
>
>  ##########################################
> +# Do we need libm
> +cat > $TMPC << EOF
> +#include <math.h>
> +int main(void) { return isnan(sin(0.0)); }
> +EOF
> +if compile_prog "" "" ; then
> +  :
> +elif compile_prog "" "-lm" ; then
> +  LIBS="-lm $LIBS"
> +  libs_qga="-lm $libs_qga"
> +else
> +  echo
> +  echo "Error: libm check failed"
> +  echo
> +  exit 1
> +fi
> +
> +##########################################
>  # Do we need librt
> +# uClibc provides 2 versions of clock_gettime(), one with realtime
> +# support and one without. This means that the clock_gettime() don't
> +# need -lrt. We still need it for timer_create() so we check for this
> +# function in addition.
>  cat > $TMPC <<EOF
>  #include <signal.h>
>  #include <time.h>
> -int main(void) { return clock_gettime(CLOCK_REALTIME, NULL); }
> +int main(void) {
> +  timer_create(CLOCK_REALTIME, NULL, NULL);
> +  return clock_gettime(CLOCK_REALTIME, NULL);
> +}
>  EOF
>
>  if compile_prog "" "" ; then
>    :
> -elif compile_prog "" "-lrt" ; then
> +# we need pthread for static linking. use previous pthread test result
> +elif compile_prog "" "-lrt $pthread_lib" ; then
>    LIBS="-lrt $LIBS"
> +  libs_qga="-lrt $libs_qga"
>  fi
>
>  if test "$darwin" != "yes" -a "$mingw32" != "yes" -a "$solaris" != yes -a \
> --
> 1.7.12
>

Patch

diff --git a/configure b/configure
index edf9da4..c1ed856 100755
--- a/configure
+++ b/configure
@@ -2624,17 +2624,44 @@  fi
 
 
 ##########################################
+# Do we need libm
+cat > $TMPC << EOF
+#include <math.h>
+int main(void) { return isnan(sin(0.0)); }
+EOF
+if compile_prog "" "" ; then
+  :
+elif compile_prog "" "-lm" ; then
+  LIBS="-lm $LIBS"
+  libs_qga="-lm $libs_qga"
+else
+  echo
+  echo "Error: libm check failed"
+  echo
+  exit 1
+fi
+
+##########################################
 # Do we need librt
+# uClibc provides 2 versions of clock_gettime(), one with realtime
+# support and one without. This means that the clock_gettime() don't
+# need -lrt. We still need it for timer_create() so we check for this
+# function in addition.
 cat > $TMPC <<EOF
 #include <signal.h>
 #include <time.h>
-int main(void) { return clock_gettime(CLOCK_REALTIME, NULL); }
+int main(void) {
+  timer_create(CLOCK_REALTIME, NULL, NULL);
+  return clock_gettime(CLOCK_REALTIME, NULL);
+}
 EOF
 
 if compile_prog "" "" ; then
   :
-elif compile_prog "" "-lrt" ; then
+# we need pthread for static linking. use previous pthread test result 
+elif compile_prog "" "-lrt $pthread_lib" ; then
   LIBS="-lrt $LIBS"
+  libs_qga="-lrt $libs_qga"
 fi
 
 if test "$darwin" != "yes" -a "$mingw32" != "yes" -a "$solaris" != yes -a \