[OE-core] [PATCH] cmake.bbclass: call cmake with a relative path

Jack Mitchell ml at embed.me.uk
Mon Aug 22 14:34:50 UTC 2016


On 22/08/16 15:27, Clemens Lang wrote:
> From: Thomas Witt <Thomas.Witt at bmw.de>
>
> CMake wants a relative path for CMAKE_INSTALL_*DIR, an absolute path
> breaks cross-compilation. This fact is documented in the following
> ticket: https://cmake.org/Bug/view.php?id=14367
>
> $sysconfdir and $localstatedir are not relative to $prefix, so they are
> still set as absolute paths. With his change ${PROJECT}Targets.cmake
> that are generated by cmakes "export" function will contain relative
> paths instead of absolute ones.
>
> Signed-off-by: Thomas Witt <Thomas.Witt at bmw.de>
> Signed-off-by: Clemens Lang <clemens.lang at bmw-carit.de>
> ---
>  meta/classes/cmake.bbclass | 14 +++++++-------
>  1 file changed, 7 insertions(+), 7 deletions(-)
>
> diff --git a/meta/classes/cmake.bbclass b/meta/classes/cmake.bbclass
> index b18152a..5203d8a 100644
> --- a/meta/classes/cmake.bbclass
> +++ b/meta/classes/cmake.bbclass
> @@ -108,15 +108,15 @@ cmake_do_configure() {
>  	  ${OECMAKE_SITEFILE} \
>  	  ${OECMAKE_SOURCEPATH} \
>  	  -DCMAKE_INSTALL_PREFIX:PATH=${prefix} \
> -	  -DCMAKE_INSTALL_BINDIR:PATH=${bindir} \
> -	  -DCMAKE_INSTALL_SBINDIR:PATH=${sbindir} \
> -	  -DCMAKE_INSTALL_LIBEXECDIR:PATH=${libexecdir} \
> +	  -DCMAKE_INSTALL_BINDIR:PATH=${@os.path.relpath(d.getVar('bindir', True), d.getVar('prefix', True))} \
> +	  -DCMAKE_INSTALL_SBINDIR:PATH=${@os.path.relpath(d.getVar('sbindir', True), d.getVar('prefix', True))} \
> +	  -DCMAKE_INSTALL_LIBEXECDIR:PATH=${@os.path.relpath(d.getVar('libexecdir', True), d.getVar('prefix', True))} \
>  	  -DCMAKE_INSTALL_SYSCONFDIR:PATH=${sysconfdir} \
> -	  -DCMAKE_INSTALL_SHAREDSTATEDIR:PATH=${sharedstatedir} \
> +	  -DCMAKE_INSTALL_SHAREDSTATEDIR:PATH=${@os.path.relpath(d.getVar('sharedstatedir', True), d.  getVar('prefix', True))} \
>  	  -DCMAKE_INSTALL_LOCALSTATEDIR:PATH=${localstatedir} \
> -	  -DCMAKE_INSTALL_LIBDIR:PATH=${libdir} \
> -	  -DCMAKE_INSTALL_INCLUDEDIR:PATH=${includedir} \
> -	  -DCMAKE_INSTALL_DATAROOTDIR:PATH=${datadir} \
> +	  -DCMAKE_INSTALL_LIBDIR:PATH=${@os.path.relpath(d.getVar('libdir', True), d.getVar('prefix', True))} \
> +	  -DCMAKE_INSTALL_INCLUDEDIR:PATH=${@os.path.relpath(d.getVar('includedir', True), d.getVar('prefix', True))} \
> +	  -DCMAKE_INSTALL_DATAROOTDIR:PATH=${@os.path.relpath(d.getVar('datadir', True), d.getVar('prefix', True))} \
>  	  -DCMAKE_INSTALL_SO_NO_EXE=0 \
>  	  -DCMAKE_TOOLCHAIN_FILE=${WORKDIR}/toolchain.cmake \
>  	  -DCMAKE_VERBOSE_MAKEFILE=1 \

Thanks. I've just posted another version which uses inline python too; I 
think your version is nicer though.

Cheers,
Jack.



More information about the Openembedded-core mailing list