lsof: define linux C library type when using eglibc

Submitted by Ting Liu on July 12, 2012, 6:17 a.m.

Details

Message ID 1342073846-23047-1-git-send-email-b28495@freescale.com
State Superseded
Headers show

Commit Message

Ting Liu July 12, 2012, 6:17 a.m.
From: Ting Liu <b28495@freescale.com>

lsof tries to compile a temp c source file and execute the binary to
determine linux C library type (file Configure, line 2689-2717).
It is inpracticable for cross-compilation and may have build issue on
some distros since it depends on host settings.

Fix below error when building for 64bit target on 64bit host:
[...]
| dsock.c:481:44: error: 'TCP_LISTEN' undeclared (first use in this function)
| dsock.c:482:45: error: 'TCP_CLOSING' undeclared (first use in this function)
[...]
| make: *** [dsock.o] Error 1

The actual issue exists in do_configure:
[...]
Testing C library type with cc ... done
Cannot determine C library type; assuming it is not glibc.

Which is in turn caused by missing 'gnu/stubs-32.h" when compiling
the temp c source file on host:
[...]
fatal error: gnu/stubs-32.h: No such file or directory compilation terminated.

file gnu/stubs-32.h is provided by 32bit glibc.

Signed-off-by: Ting Liu <b28495@freescale.com>
---
 meta/recipes-extended/lsof/lsof_4.85.bb |    7 ++++++-
 1 files changed, 6 insertions(+), 1 deletions(-)

Patch hide | download patch | download mbox

diff --git a/meta/recipes-extended/lsof/lsof_4.85.bb b/meta/recipes-extended/lsof/lsof_4.85.bb
index 5823725..d28d2cb 100644
--- a/meta/recipes-extended/lsof/lsof_4.85.bb
+++ b/meta/recipes-extended/lsof/lsof_4.85.bb
@@ -3,7 +3,7 @@  DESCRIPTION = "Lsof is a Unix-specific diagnostic tool. \
 Its name stands for LiSt Open Files, and it does just that."
 SECTION = "devel"
 LICENSE = "BSD"
-PR = "r1"
+PR = "r2"
 
 SRC_URI = "ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/lsof_${PV}.tar.bz2"
 
@@ -31,6 +31,11 @@  export LSOF_INCLUDE = "${STAGING_INCDIR}"
 do_configure () {
 	export LSOF_AR="${AR} cr"
 	export LSOF_RANLIB="${RANLIB}"
+        if [ "x${EGLIBCVERSION}" != "x" ];then
+                LINUX_CLIB=${EGLIBCVERSION/\./}
+                LINUX_CLIB="-DGLIBCV=${LINUX_CLIB}"
+                export LINUX_CLIB
+        fi
 	yes | ./Configure ${LSOF_OS}
 }
 

Comments

Saul Wold July 12, 2012, 7:30 p.m.
On 07/11/2012 11:17 PM, b28495@freescale.com wrote:
> From: Ting Liu <b28495@freescale.com>
>
> lsof tries to compile a temp c source file and execute the binary to
> determine linux C library type (file Configure, line 2689-2717).
> It is inpracticable for cross-compilation and may have build issue on
> some distros since it depends on host settings.
>
> Fix below error when building for 64bit target on 64bit host:
> [...]
> | dsock.c:481:44: error: 'TCP_LISTEN' undeclared (first use in this function)
> | dsock.c:482:45: error: 'TCP_CLOSING' undeclared (first use in this function)
> [...]
> | make: *** [dsock.o] Error 1
>
> The actual issue exists in do_configure:
> [...]
> Testing C library type with cc ... done
> Cannot determine C library type; assuming it is not glibc.
>
> Which is in turn caused by missing 'gnu/stubs-32.h" when compiling
> the temp c source file on host:
> [...]
> fatal error: gnu/stubs-32.h: No such file or directory compilation terminated.
>
> file gnu/stubs-32.h is provided by 32bit glibc.
>
> Signed-off-by: Ting Liu <b28495@freescale.com>
> ---
>   meta/recipes-extended/lsof/lsof_4.85.bb |    7 ++++++-
>   1 files changed, 6 insertions(+), 1 deletions(-)
>
> diff --git a/meta/recipes-extended/lsof/lsof_4.85.bb b/meta/recipes-extended/lsof/lsof_4.85.bb
> index 5823725..d28d2cb 100644
> --- a/meta/recipes-extended/lsof/lsof_4.85.bb
> +++ b/meta/recipes-extended/lsof/lsof_4.85.bb
> @@ -3,7 +3,7 @@ DESCRIPTION = "Lsof is a Unix-specific diagnostic tool. \
>   Its name stands for LiSt Open Files, and it does just that."
>   SECTION = "devel"
>   LICENSE = "BSD"
> -PR = "r1"
> +PR = "r2"
>
>   SRC_URI = "ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/lsof_${PV}.tar.bz2"
>
> @@ -31,6 +31,11 @@ export LSOF_INCLUDE = "${STAGING_INCDIR}"
>   do_configure () {
>   	export LSOF_AR="${AR} cr"
>   	export LSOF_RANLIB="${RANLIB}"
> +        if [ "x${EGLIBCVERSION}" != "x" ];then
> +                LINUX_CLIB=${EGLIBCVERSION/\./}
> +                LINUX_CLIB="-DGLIBCV=${LINUX_CLIB}"
Does this really do what you intent it to?

why not set the EGLIBCVERSION directly on the second line, what's the 
purpose of the /\./?  It renders the version empty in my tests.

Sau!


> +                export LINUX_CLIB
> +        fi
>   	yes | ./Configure ${LSOF_OS}
>   }
>
>
Khem Raj July 12, 2012, 8:09 p.m.
On Thu, Jul 12, 2012 at 12:30 PM, Saul Wold <sgw@linux.intel.com> wrote:
>
> why not set the EGLIBCVERSION directly on the second line, what's the
> purpose of the /\./?  It renders the version empty in my tests.

it has to get rid of (.) e.g. for 2.15 it should be 215 and 2.16 it
should become 216
Ting Liu July 13, 2012, 2:46 a.m.
-----Original Message-----
From: Saul Wold [mailto:sgw@linux.intel.com] 
Sent: Friday, July 13, 2012 3:31 AM
To: Patches and discussions about the oe-core layer
Cc: Liu Ting-B28495; McClintock Matthew-B29882
Subject: Re: [OE-core] [PATCH] lsof: define linux C library type when using eglibc

On 07/11/2012 11:17 PM, b28495@freescale.com wrote:
> From: Ting Liu <b28495@freescale.com>
>
> lsof tries to compile a temp c source file and execute the binary to 
> determine linux C library type (file Configure, line 2689-2717).
> It is inpracticable for cross-compilation and may have build issue on 
> some distros since it depends on host settings.
>
> Fix below error when building for 64bit target on 64bit host:
> [...]
> | dsock.c:481:44: error: 'TCP_LISTEN' undeclared (first use in this 
> | function)
> | dsock.c:482:45: error: 'TCP_CLOSING' undeclared (first use in this 
> | function)
> [...]
> | make: *** [dsock.o] Error 1
>
> The actual issue exists in do_configure:
> [...]
> Testing C library type with cc ... done Cannot determine C library 
> type; assuming it is not glibc.
>
> Which is in turn caused by missing 'gnu/stubs-32.h" when compiling the 
> temp c source file on host:
> [...]
> fatal error: gnu/stubs-32.h: No such file or directory compilation terminated.
>
> file gnu/stubs-32.h is provided by 32bit glibc.
>
> Signed-off-by: Ting Liu <b28495@freescale.com>
> ---
>   meta/recipes-extended/lsof/lsof_4.85.bb |    7 ++++++-
>   1 files changed, 6 insertions(+), 1 deletions(-)
>
> diff --git a/meta/recipes-extended/lsof/lsof_4.85.bb 
> b/meta/recipes-extended/lsof/lsof_4.85.bb
> index 5823725..d28d2cb 100644
> --- a/meta/recipes-extended/lsof/lsof_4.85.bb
> +++ b/meta/recipes-extended/lsof/lsof_4.85.bb
> @@ -3,7 +3,7 @@ DESCRIPTION = "Lsof is a Unix-specific diagnostic tool. \
>   Its name stands for LiSt Open Files, and it does just that."
>   SECTION = "devel"
>   LICENSE = "BSD"
> -PR = "r1"
> +PR = "r2"
>
>   SRC_URI = "ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/lsof_${PV}.tar.bz2"
>
> @@ -31,6 +31,11 @@ export LSOF_INCLUDE = "${STAGING_INCDIR}"
>   do_configure () {
>   	export LSOF_AR="${AR} cr"
>   	export LSOF_RANLIB="${RANLIB}"
> +        if [ "x${EGLIBCVERSION}" != "x" ];then
> +                LINUX_CLIB=${EGLIBCVERSION/\./}
> +                LINUX_CLIB="-DGLIBCV=${LINUX_CLIB}"
Does this really do what you intent it to?

why not set the EGLIBCVERSION directly on the second line, what's the purpose of the /\./?  It renders the version empty in my tests.

Sau!

[Liu Ting-B28495] LINUX_CLIB is set to "-DGLIBCV=213" when lsof can figure out the right Linux c library type. String 213 corresponds to the eglibc version 2.13. the purpose of /\./ is to get rid of '.'.
Here is my test:
-bash-3.2$ EGLIBCVERSION="2.13"
-bash-3.2$ echo ${EGLIBCVERSION/\./}
213
-bash-3.2$
Ting Liu July 13, 2012, 3:37 a.m.
-----Original Message-----
From: Liu Ting-B28495 
Sent: Friday, July 13, 2012 10:47 AM
To: 'Saul Wold'; Patches and discussions about the oe-core layer
Cc: McClintock Matthew-B29882
Subject: RE: [OE-core] [PATCH] lsof: define linux C library type when using eglibc

-----Original Message-----
From: Saul Wold [mailto:sgw@linux.intel.com]
Sent: Friday, July 13, 2012 3:31 AM
To: Patches and discussions about the oe-core layer
Cc: Liu Ting-B28495; McClintock Matthew-B29882
Subject: Re: [OE-core] [PATCH] lsof: define linux C library type when using eglibc

On 07/11/2012 11:17 PM, b28495@freescale.com wrote:
> From: Ting Liu <b28495@freescale.com>
>
> lsof tries to compile a temp c source file and execute the binary to 
> determine linux C library type (file Configure, line 2689-2717).
> It is inpracticable for cross-compilation and may have build issue on 
> some distros since it depends on host settings.
>
> Fix below error when building for 64bit target on 64bit host:
> [...]
> | dsock.c:481:44: error: 'TCP_LISTEN' undeclared (first use in this
> | function)
> | dsock.c:482:45: error: 'TCP_CLOSING' undeclared (first use in this
> | function)
> [...]
> | make: *** [dsock.o] Error 1
>
> The actual issue exists in do_configure:
> [...]
> Testing C library type with cc ... done Cannot determine C library 
> type; assuming it is not glibc.
>
> Which is in turn caused by missing 'gnu/stubs-32.h" when compiling the 
> temp c source file on host:
> [...]
> fatal error: gnu/stubs-32.h: No such file or directory compilation terminated.
>
> file gnu/stubs-32.h is provided by 32bit glibc.
>
> Signed-off-by: Ting Liu <b28495@freescale.com>
> ---
>   meta/recipes-extended/lsof/lsof_4.85.bb |    7 ++++++-
>   1 files changed, 6 insertions(+), 1 deletions(-)
>
> diff --git a/meta/recipes-extended/lsof/lsof_4.85.bb
> b/meta/recipes-extended/lsof/lsof_4.85.bb
> index 5823725..d28d2cb 100644
> --- a/meta/recipes-extended/lsof/lsof_4.85.bb
> +++ b/meta/recipes-extended/lsof/lsof_4.85.bb
> @@ -3,7 +3,7 @@ DESCRIPTION = "Lsof is a Unix-specific diagnostic tool. \
>   Its name stands for LiSt Open Files, and it does just that."
>   SECTION = "devel"
>   LICENSE = "BSD"
> -PR = "r1"
> +PR = "r2"
>
>   SRC_URI = "ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/lsof_${PV}.tar.bz2"
>
> @@ -31,6 +31,11 @@ export LSOF_INCLUDE = "${STAGING_INCDIR}"
>   do_configure () {
>   	export LSOF_AR="${AR} cr"
>   	export LSOF_RANLIB="${RANLIB}"
> +        if [ "x${EGLIBCVERSION}" != "x" ];then
> +                LINUX_CLIB=${EGLIBCVERSION/\./}
> +                LINUX_CLIB="-DGLIBCV=${LINUX_CLIB}"
Does this really do what you intent it to?

why not set the EGLIBCVERSION directly on the second line, what's the purpose of the /\./?  It renders the version empty in my tests.

Sau!

[Liu Ting-B28495] LINUX_CLIB is set to "-DGLIBCV=213" when lsof can figure out the right Linux c library type. String 213 corresponds to the eglibc version 2.13. the purpose of /\./ is to get rid of '.'.
Here is my test:
-bash-3.2$ EGLIBCVERSION="2.13"
-bash-3.2$ echo ${EGLIBCVERSION/\./}
213
-bash-3.2$

[Liu Ting-B28495] ok, I find why it renders the version empty:
In temp/run.configure:
....
export BUILD_STRIP="strip"
do_configure() {
        if [ "x2.13" != "x" ];then
                LINUX_CLIB=${EGLIBCVERSION/\./}
                LINUX_CLIB="-DGLIBCV=${LINUX_CLIB}"
                export LINUX_CLIB
        fi
        yes | ./Configure linux

}

Variable EGLIBCVERSION is expanded instead of exported.