Patchwork [meta-multimedia,v2] libmusicbrainz: workaround for build-native/do_configure

login
register
mail settings
Submitter Tim Orling
Date Feb. 27, 2014, 4:03 p.m.
Message ID <1393516986-25391-1-git-send-email-ticotimo@gmail.com>
Download mbox | patch
Permalink /patch/67597/
State Accepted, archived
Headers show

Comments

Tim Orling - Feb. 27, 2014, 4:03 p.m.
From: Tim Orling <TicoTimo@gmail.com>

Changes in v2:
    bump PR to r2 rather than drop (doh!)

Signed-off-by: Tim Orling <TicoTimo@gmail.com>
---
 .../musicbrainz/libmusicbrainz_git.bb              | 50 +++++++++++++++++++++-
 1 file changed, 48 insertions(+), 2 deletions(-)
Martin Jansa - March 11, 2014, 2:26 p.m.
On Thu, Feb 27, 2014 at 08:03:06AM -0800, Tim Orling wrote:
> From: Tim Orling <TicoTimo@gmail.com>
> 
> Changes in v2:
>     bump PR to r2 rather than drop (doh!)
> 
> Signed-off-by: Tim Orling <TicoTimo@gmail.com>
> ---
>  .../musicbrainz/libmusicbrainz_git.bb              | 50 +++++++++++++++++++++-
>  1 file changed, 48 insertions(+), 2 deletions(-)
> 
> diff --git a/meta-multimedia/recipes-multimedia/musicbrainz/libmusicbrainz_git.bb b/meta-multimedia/recipes-multimedia/musicbrainz/libmusicbrainz_git.bb
> index f6a8f53..2928587 100644
> --- a/meta-multimedia/recipes-multimedia/musicbrainz/libmusicbrainz_git.bb
> +++ b/meta-multimedia/recipes-multimedia/musicbrainz/libmusicbrainz_git.bb
> @@ -6,7 +6,7 @@ LIC_FILES_CHKSUM = "file://COPYING.txt;md5=fbc093901857fcd118f065f900982c24"
>  DEPENDS = "expat neon"
>  
>  PV = "5.0.1+git${SRCPV}"
> -PR = "r1"
> +PR = "r2"
>  
>  SRCREV = "0749dd0a35b4a54316da064475863a4ac6e28e7e"
>  SRC_URI = "git://github.com/metabrainz/libmusicbrainz.git \
> @@ -30,9 +30,55 @@ do_configure_prepend() {
>            -DCMAKE_C_COMPILER=${BUILD_CC} \
>            -DCMAKE_CXX_FLAGS=${BUILD_CXXFLAGS} \
>            -DCMAKE_CXX_COMPILER=${BUILD_CXX} \
> -          ..
> +          ${S} 
>      make make-c-interface
>      cd ..
> +
> +    # the first thing cmake_do_configure does is delete ${B}
> +    # stash it first
> +    cp -r build-native ..
> +}
> +
> +# recreate default here, with work around for build-native
> +cmake_do_configure() {
> +	if [ "${OECMAKE_BUILDPATH}" -o "${OECMAKE_SOURCEPATH}" ]; then
> +		bbnote "cmake.bbclass no longer uses OECMAKE_SOURCEPATH and OECMAKE_BUILDPATH.  The default behaviour is now out-of-tree builds with B=WORKDIR/build."
> +	fi
> +
> +	if [ "${S}" != "${B}" ]; then
> +		rm -rf ${B}
> +		mkdir -p ${B}
> +		cd ${B}
> +	fi
> +
> +	# bring build-native back into build/
> +	mv ../build-native .
> +
> +	# Just like autotools cmake can use a site file to cache result that need generated binaries to run
> +	if [ -e ${WORKDIR}/site-file.cmake ] ; then
> +		OECMAKE_SITEFILE=" -C ${WORKDIR}/site-file.cmake"
> +	else
> +		OECMAKE_SITEFILE=""
> +	fi
> +
> +	cmake \
> +	  ${OECMAKE_SITEFILE} \
> +	  ${S} \
> +	  -DCMAKE_INSTALL_PREFIX:PATH=${prefix} \
> +	  -DCMAKE_INSTALL_BINDIR:PATH=${bindir} \
> +	  -DCMAKE_INSTALL_SBINDIR:PATH=${sbindir} \
> +	  -DCMAKE_INSTALL_LIBEXECDIR:PATH=${libexecdir} \
> +	  -DCMAKE_INSTALL_SYSCONFDIR:PATH=${sysconfdir} \
> +	  -DCMAKE_INSTALL_SHAREDSTATEDIR:PATH=${sharedstatedir} \
> +	  -DCMAKE_INSTALL_LOCALSTATEDIR:PATH=${localstatedir} \
> +	  -DCMAKE_INSTALL_LIBDIR:PATH=${libdir} \
> +	  -DCMAKE_INSTALL_INCLUDEDIR:PATH=${includedir} \
> +	  -DCMAKE_INSTALL_DATAROOTDIR:PATH=${datadir} \
> +	  -DCMAKE_INSTALL_SO_NO_EXE=0 \
> +	  -DCMAKE_TOOLCHAIN_FILE=${WORKDIR}/toolchain.cmake \
> +	  -DCMAKE_VERBOSE_MAKEFILE=1 \
> +	  ${EXTRA_OECMAKE} \
> +	  -Wno-dev
>  }

There is still some issue with this patch applied:

ERROR: Function failed: do_configure (log file is located at /home/jenkins/oe/shr-core-branches/shr-core/tmp-eglibc/work/core2-64-oe-linux/libmusicbrainz/5.0.1+gitAUTOINC+0749dd0a35-r2/temp/log.do_configure.20744)
ERROR: Logfile of failure stored in: /home/jenkins/oe/shr-core-branches/shr-core/tmp-eglibc/work/core2-64-oe-linux/libmusicbrainz/5.0.1+gitAUTOINC+0749dd0a35-r2/temp/log.do_configure.20744
Log data follows:
| DEBUG: Executing python function sysroot_cleansstate
| DEBUG: Python function sysroot_cleansstate finished
| DEBUG: SITE files ['endian-little', 'common-linux', 'common-glibc', 'bit-64', 'x86_64-linux', 'common']
| DEBUG: Executing shell function autotools_preconfigure
| DEBUG: Shell function autotools_preconfigure finished
| DEBUG: Executing python function autotools_copy_aclocals
| DEBUG: Python function autotools_copy_aclocals finished
| DEBUG: Executing shell function do_configure
| fatal: Not a git repository (or any parent up to mount parent /home/jenkins/oe/shr-core-branches/shr-core)
| Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).
| WARNING: exit code 128 from a shell command.
| ERROR: Function failed: do_configure (log file is located at /home/jenkins/oe/shr-core-branches/shr-core/tmp-eglibc/work/core2-64-oe-linux/libmusicbrainz/5.0.1+gitAUTOINC+0749dd0a35-r2/temp/log.do_configure.20744)
NOTE: recipe libmusicbrainz-5.0.1+gitAUTOINC+0749dd0a35-r2: task do_configure: Failed
ERROR: Task 1242 (/home/jenkins/oe/shr-core-branches/shr-core/meta-openembedded/meta-multimedia/recipes-multimedia/musicbrainz/libmusicbrainz_git.bb, do_configure) failed with exit code '1'

(link to full log in last State of bitbake world, Failed tasks 2014-03-11 e-mail)
Martin Jansa - March 11, 2014, 3:11 p.m.
On Tue, Mar 11, 2014 at 03:26:39PM +0100, Martin Jansa wrote:
> On Thu, Feb 27, 2014 at 08:03:06AM -0800, Tim Orling wrote:
> > From: Tim Orling <TicoTimo@gmail.com>
> > 
> > Changes in v2:
> >     bump PR to r2 rather than drop (doh!)
> > 
> > Signed-off-by: Tim Orling <TicoTimo@gmail.com>
> > ---
> >  .../musicbrainz/libmusicbrainz_git.bb              | 50 +++++++++++++++++++++-
> >  1 file changed, 48 insertions(+), 2 deletions(-)
> > 
> > diff --git a/meta-multimedia/recipes-multimedia/musicbrainz/libmusicbrainz_git.bb b/meta-multimedia/recipes-multimedia/musicbrainz/libmusicbrainz_git.bb
> > index f6a8f53..2928587 100644
> > --- a/meta-multimedia/recipes-multimedia/musicbrainz/libmusicbrainz_git.bb
> > +++ b/meta-multimedia/recipes-multimedia/musicbrainz/libmusicbrainz_git.bb
> > @@ -6,7 +6,7 @@ LIC_FILES_CHKSUM = "file://COPYING.txt;md5=fbc093901857fcd118f065f900982c24"
> >  DEPENDS = "expat neon"
> >  
> >  PV = "5.0.1+git${SRCPV}"
> > -PR = "r1"
> > +PR = "r2"
> >  
> >  SRCREV = "0749dd0a35b4a54316da064475863a4ac6e28e7e"
> >  SRC_URI = "git://github.com/metabrainz/libmusicbrainz.git \
> > @@ -30,9 +30,55 @@ do_configure_prepend() {
> >            -DCMAKE_C_COMPILER=${BUILD_CC} \
> >            -DCMAKE_CXX_FLAGS=${BUILD_CXXFLAGS} \
> >            -DCMAKE_CXX_COMPILER=${BUILD_CXX} \
> > -          ..
> > +          ${S} 
> >      make make-c-interface
> >      cd ..
> > +
> > +    # the first thing cmake_do_configure does is delete ${B}
> > +    # stash it first
> > +    cp -r build-native ..
> > +}
> > +
> > +# recreate default here, with work around for build-native
> > +cmake_do_configure() {
> > +	if [ "${OECMAKE_BUILDPATH}" -o "${OECMAKE_SOURCEPATH}" ]; then
> > +		bbnote "cmake.bbclass no longer uses OECMAKE_SOURCEPATH and OECMAKE_BUILDPATH.  The default behaviour is now out-of-tree builds with B=WORKDIR/build."
> > +	fi
> > +
> > +	if [ "${S}" != "${B}" ]; then
> > +		rm -rf ${B}
> > +		mkdir -p ${B}
> > +		cd ${B}
> > +	fi
> > +
> > +	# bring build-native back into build/
> > +	mv ../build-native .
> > +
> > +	# Just like autotools cmake can use a site file to cache result that need generated binaries to run
> > +	if [ -e ${WORKDIR}/site-file.cmake ] ; then
> > +		OECMAKE_SITEFILE=" -C ${WORKDIR}/site-file.cmake"
> > +	else
> > +		OECMAKE_SITEFILE=""
> > +	fi
> > +
> > +	cmake \
> > +	  ${OECMAKE_SITEFILE} \
> > +	  ${S} \
> > +	  -DCMAKE_INSTALL_PREFIX:PATH=${prefix} \
> > +	  -DCMAKE_INSTALL_BINDIR:PATH=${bindir} \
> > +	  -DCMAKE_INSTALL_SBINDIR:PATH=${sbindir} \
> > +	  -DCMAKE_INSTALL_LIBEXECDIR:PATH=${libexecdir} \
> > +	  -DCMAKE_INSTALL_SYSCONFDIR:PATH=${sysconfdir} \
> > +	  -DCMAKE_INSTALL_SHAREDSTATEDIR:PATH=${sharedstatedir} \
> > +	  -DCMAKE_INSTALL_LOCALSTATEDIR:PATH=${localstatedir} \
> > +	  -DCMAKE_INSTALL_LIBDIR:PATH=${libdir} \
> > +	  -DCMAKE_INSTALL_INCLUDEDIR:PATH=${includedir} \
> > +	  -DCMAKE_INSTALL_DATAROOTDIR:PATH=${datadir} \
> > +	  -DCMAKE_INSTALL_SO_NO_EXE=0 \
> > +	  -DCMAKE_TOOLCHAIN_FILE=${WORKDIR}/toolchain.cmake \
> > +	  -DCMAKE_VERBOSE_MAKEFILE=1 \
> > +	  ${EXTRA_OECMAKE} \
> > +	  -Wno-dev
> >  }
> 
> There is still some issue with this patch applied:
> 
> ERROR: Function failed: do_configure (log file is located at /home/jenkins/oe/shr-core-branches/shr-core/tmp-eglibc/work/core2-64-oe-linux/libmusicbrainz/5.0.1+gitAUTOINC+0749dd0a35-r2/temp/log.do_configure.20744)
> ERROR: Logfile of failure stored in: /home/jenkins/oe/shr-core-branches/shr-core/tmp-eglibc/work/core2-64-oe-linux/libmusicbrainz/5.0.1+gitAUTOINC+0749dd0a35-r2/temp/log.do_configure.20744
> Log data follows:
> | DEBUG: Executing python function sysroot_cleansstate
> | DEBUG: Python function sysroot_cleansstate finished
> | DEBUG: SITE files ['endian-little', 'common-linux', 'common-glibc', 'bit-64', 'x86_64-linux', 'common']
> | DEBUG: Executing shell function autotools_preconfigure
> | DEBUG: Shell function autotools_preconfigure finished
> | DEBUG: Executing python function autotools_copy_aclocals
> | DEBUG: Python function autotools_copy_aclocals finished
> | DEBUG: Executing shell function do_configure
> | fatal: Not a git repository (or any parent up to mount parent /home/jenkins/oe/shr-core-branches/shr-core)
> | Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).
> | WARNING: exit code 128 from a shell command.
> | ERROR: Function failed: do_configure (log file is located at /home/jenkins/oe/shr-core-branches/shr-core/tmp-eglibc/work/core2-64-oe-linux/libmusicbrainz/5.0.1+gitAUTOINC+0749dd0a35-r2/temp/log.do_configure.20744)
> NOTE: recipe libmusicbrainz-5.0.1+gitAUTOINC+0749dd0a35-r2: task do_configure: Failed
> ERROR: Task 1242 (/home/jenkins/oe/shr-core-branches/shr-core/meta-openembedded/meta-multimedia/recipes-multimedia/musicbrainz/libmusicbrainz_git.bb, do_configure) failed with exit code '1'
> 
> (link to full log in last State of bitbake world, Failed tasks 2014-03-11 e-mail)

Ah, it seems like I've reported this before :)

Yes it's caused by:
do_configure() {
    # The native build really doesn't like being rebuilt, so delete
    # it if it's already present. Also delete all other files not
    # known to Git to fix subsequent invocations of do_configure.
    git clean -dfx -e /.pc/ -e /patches/ .
...

which is executed in ${B} which isn't git repo:
cd '/home/jenkins/oe/shr-core-branches/shr-core/tmp-eglibc/work/armv5te-oe-linux-gnueabi/libmusicbrainz/5.0.1+gitAUTOINC+0749dd0a35-r2/build'
do_configure
Tim Orling - March 12, 2014, 3:01 p.m.
Sounds like another reason to go with Mike Looijman's ${B}=${S} route for
this package?


On Tue, Mar 11, 2014 at 8:11 AM, Martin Jansa <martin.jansa@gmail.com>wrote:

> On Tue, Mar 11, 2014 at 03:26:39PM +0100, Martin Jansa wrote:
> > On Thu, Feb 27, 2014 at 08:03:06AM -0800, Tim Orling wrote:
> > > From: Tim Orling <TicoTimo@gmail.com>
> > >
> > > Changes in v2:
> > >     bump PR to r2 rather than drop (doh!)
> > >
> > > Signed-off-by: Tim Orling <TicoTimo@gmail.com>
> > > ---
> > >  .../musicbrainz/libmusicbrainz_git.bb              | 50
> +++++++++++++++++++++-
> > >  1 file changed, 48 insertions(+), 2 deletions(-)
> > >
> > > diff --git a/meta-multimedia/recipes-multimedia/musicbrainz/
> libmusicbrainz_git.bb b/meta-multimedia/recipes-multimedia/musicbrainz/
> libmusicbrainz_git.bb
> > > index f6a8f53..2928587 100644
> > > --- a/meta-multimedia/recipes-multimedia/musicbrainz/
> libmusicbrainz_git.bb
> > > +++ b/meta-multimedia/recipes-multimedia/musicbrainz/
> libmusicbrainz_git.bb
> > > @@ -6,7 +6,7 @@ LIC_FILES_CHKSUM =
> "file://COPYING.txt;md5=fbc093901857fcd118f065f900982c24"
> > >  DEPENDS = "expat neon"
> > >
> > >  PV = "5.0.1+git${SRCPV}"
> > > -PR = "r1"
> > > +PR = "r2"
> > >
> > >  SRCREV = "0749dd0a35b4a54316da064475863a4ac6e28e7e"
> > >  SRC_URI = "git://github.com/metabrainz/libmusicbrainz.git \
> > > @@ -30,9 +30,55 @@ do_configure_prepend() {
> > >            -DCMAKE_C_COMPILER=${BUILD_CC} \
> > >            -DCMAKE_CXX_FLAGS=${BUILD_CXXFLAGS} \
> > >            -DCMAKE_CXX_COMPILER=${BUILD_CXX} \
> > > -          ..
> > > +          ${S}
> > >      make make-c-interface
> > >      cd ..
> > > +
> > > +    # the first thing cmake_do_configure does is delete ${B}
> > > +    # stash it first
> > > +    cp -r build-native ..
> > > +}
> > > +
> > > +# recreate default here, with work around for build-native
> > > +cmake_do_configure() {
> > > +   if [ "${OECMAKE_BUILDPATH}" -o "${OECMAKE_SOURCEPATH}" ]; then
> > > +           bbnote "cmake.bbclass no longer uses OECMAKE_SOURCEPATH
> and OECMAKE_BUILDPATH.  The default behaviour is now out-of-tree builds
> with B=WORKDIR/build."
> > > +   fi
> > > +
> > > +   if [ "${S}" != "${B}" ]; then
> > > +           rm -rf ${B}
> > > +           mkdir -p ${B}
> > > +           cd ${B}
> > > +   fi
> > > +
> > > +   # bring build-native back into build/
> > > +   mv ../build-native .
> > > +
> > > +   # Just like autotools cmake can use a site file to cache result
> that need generated binaries to run
> > > +   if [ -e ${WORKDIR}/site-file.cmake ] ; then
> > > +           OECMAKE_SITEFILE=" -C ${WORKDIR}/site-file.cmake"
> > > +   else
> > > +           OECMAKE_SITEFILE=""
> > > +   fi
> > > +
> > > +   cmake \
> > > +     ${OECMAKE_SITEFILE} \
> > > +     ${S} \
> > > +     -DCMAKE_INSTALL_PREFIX:PATH=${prefix} \
> > > +     -DCMAKE_INSTALL_BINDIR:PATH=${bindir} \
> > > +     -DCMAKE_INSTALL_SBINDIR:PATH=${sbindir} \
> > > +     -DCMAKE_INSTALL_LIBEXECDIR:PATH=${libexecdir} \
> > > +     -DCMAKE_INSTALL_SYSCONFDIR:PATH=${sysconfdir} \
> > > +     -DCMAKE_INSTALL_SHAREDSTATEDIR:PATH=${sharedstatedir} \
> > > +     -DCMAKE_INSTALL_LOCALSTATEDIR:PATH=${localstatedir} \
> > > +     -DCMAKE_INSTALL_LIBDIR:PATH=${libdir} \
> > > +     -DCMAKE_INSTALL_INCLUDEDIR:PATH=${includedir} \
> > > +     -DCMAKE_INSTALL_DATAROOTDIR:PATH=${datadir} \
> > > +     -DCMAKE_INSTALL_SO_NO_EXE=0 \
> > > +     -DCMAKE_TOOLCHAIN_FILE=${WORKDIR}/toolchain.cmake \
> > > +     -DCMAKE_VERBOSE_MAKEFILE=1 \
> > > +     ${EXTRA_OECMAKE} \
> > > +     -Wno-dev
> > >  }
> >
> > There is still some issue with this patch applied:
> >
> > ERROR: Function failed: do_configure (log file is located at
> /home/jenkins/oe/shr-core-branches/shr-core/tmp-eglibc/work/core2-64-oe-linux/libmusicbrainz/5.0.1+gitAUTOINC+0749dd0a35-r2/temp/log.do_configure.20744)
> > ERROR: Logfile of failure stored in:
> /home/jenkins/oe/shr-core-branches/shr-core/tmp-eglibc/work/core2-64-oe-linux/libmusicbrainz/5.0.1+gitAUTOINC+0749dd0a35-r2/temp/log.do_configure.20744
> > Log data follows:
> > | DEBUG: Executing python function sysroot_cleansstate
> > | DEBUG: Python function sysroot_cleansstate finished
> > | DEBUG: SITE files ['endian-little', 'common-linux', 'common-glibc',
> 'bit-64', 'x86_64-linux', 'common']
> > | DEBUG: Executing shell function autotools_preconfigure
> > | DEBUG: Shell function autotools_preconfigure finished
> > | DEBUG: Executing python function autotools_copy_aclocals
> > | DEBUG: Python function autotools_copy_aclocals finished
> > | DEBUG: Executing shell function do_configure
> > | fatal: Not a git repository (or any parent up to mount parent
> /home/jenkins/oe/shr-core-branches/shr-core)
> > | Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not
> set).
> > | WARNING: exit code 128 from a shell command.
> > | ERROR: Function failed: do_configure (log file is located at
> /home/jenkins/oe/shr-core-branches/shr-core/tmp-eglibc/work/core2-64-oe-linux/libmusicbrainz/5.0.1+gitAUTOINC+0749dd0a35-r2/temp/log.do_configure.20744)
> > NOTE: recipe libmusicbrainz-5.0.1+gitAUTOINC+0749dd0a35-r2: task
> do_configure: Failed
> > ERROR: Task 1242
> (/home/jenkins/oe/shr-core-branches/shr-core/meta-openembedded/meta-multimedia/recipes-multimedia/musicbrainz/
> libmusicbrainz_git.bb, do_configure) failed with exit code '1'
> >
> > (link to full log in last State of bitbake world, Failed tasks
> 2014-03-11 e-mail)
>
> Ah, it seems like I've reported this before :)
>
> Yes it's caused by:
> do_configure() {
>     # The native build really doesn't like being rebuilt, so delete
>     # it if it's already present. Also delete all other files not
>     # known to Git to fix subsequent invocations of do_configure.
>     git clean -dfx -e /.pc/ -e /patches/ .
> ...
>
> which is executed in ${B} which isn't git repo:
> cd
> '/home/jenkins/oe/shr-core-branches/shr-core/tmp-eglibc/work/armv5te-oe-linux-gnueabi/libmusicbrainz/5.0.1+gitAUTOINC+0749dd0a35-r2/build'
> do_configure
>
> --
> Martin 'JaMa' Jansa     jabber: Martin.Jansa@gmail.com
>
> --
> _______________________________________________
> Openembedded-devel mailing list
> Openembedded-devel@lists.openembedded.org
> http://lists.openembedded.org/mailman/listinfo/openembedded-devel
>
>

Patch

diff --git a/meta-multimedia/recipes-multimedia/musicbrainz/libmusicbrainz_git.bb b/meta-multimedia/recipes-multimedia/musicbrainz/libmusicbrainz_git.bb
index f6a8f53..2928587 100644
--- a/meta-multimedia/recipes-multimedia/musicbrainz/libmusicbrainz_git.bb
+++ b/meta-multimedia/recipes-multimedia/musicbrainz/libmusicbrainz_git.bb
@@ -6,7 +6,7 @@  LIC_FILES_CHKSUM = "file://COPYING.txt;md5=fbc093901857fcd118f065f900982c24"
 DEPENDS = "expat neon"
 
 PV = "5.0.1+git${SRCPV}"
-PR = "r1"
+PR = "r2"
 
 SRCREV = "0749dd0a35b4a54316da064475863a4ac6e28e7e"
 SRC_URI = "git://github.com/metabrainz/libmusicbrainz.git \
@@ -30,9 +30,55 @@  do_configure_prepend() {
           -DCMAKE_C_COMPILER=${BUILD_CC} \
           -DCMAKE_CXX_FLAGS=${BUILD_CXXFLAGS} \
           -DCMAKE_CXX_COMPILER=${BUILD_CXX} \
-          ..
+          ${S} 
     make make-c-interface
     cd ..
+
+    # the first thing cmake_do_configure does is delete ${B}
+    # stash it first
+    cp -r build-native ..
+}
+
+# recreate default here, with work around for build-native
+cmake_do_configure() {
+	if [ "${OECMAKE_BUILDPATH}" -o "${OECMAKE_SOURCEPATH}" ]; then
+		bbnote "cmake.bbclass no longer uses OECMAKE_SOURCEPATH and OECMAKE_BUILDPATH.  The default behaviour is now out-of-tree builds with B=WORKDIR/build."
+	fi
+
+	if [ "${S}" != "${B}" ]; then
+		rm -rf ${B}
+		mkdir -p ${B}
+		cd ${B}
+	fi
+
+	# bring build-native back into build/
+	mv ../build-native .
+
+	# Just like autotools cmake can use a site file to cache result that need generated binaries to run
+	if [ -e ${WORKDIR}/site-file.cmake ] ; then
+		OECMAKE_SITEFILE=" -C ${WORKDIR}/site-file.cmake"
+	else
+		OECMAKE_SITEFILE=""
+	fi
+
+	cmake \
+	  ${OECMAKE_SITEFILE} \
+	  ${S} \
+	  -DCMAKE_INSTALL_PREFIX:PATH=${prefix} \
+	  -DCMAKE_INSTALL_BINDIR:PATH=${bindir} \
+	  -DCMAKE_INSTALL_SBINDIR:PATH=${sbindir} \
+	  -DCMAKE_INSTALL_LIBEXECDIR:PATH=${libexecdir} \
+	  -DCMAKE_INSTALL_SYSCONFDIR:PATH=${sysconfdir} \
+	  -DCMAKE_INSTALL_SHAREDSTATEDIR:PATH=${sharedstatedir} \
+	  -DCMAKE_INSTALL_LOCALSTATEDIR:PATH=${localstatedir} \
+	  -DCMAKE_INSTALL_LIBDIR:PATH=${libdir} \
+	  -DCMAKE_INSTALL_INCLUDEDIR:PATH=${includedir} \
+	  -DCMAKE_INSTALL_DATAROOTDIR:PATH=${datadir} \
+	  -DCMAKE_INSTALL_SO_NO_EXE=0 \
+	  -DCMAKE_TOOLCHAIN_FILE=${WORKDIR}/toolchain.cmake \
+	  -DCMAKE_VERBOSE_MAKEFILE=1 \
+	  ${EXTRA_OECMAKE} \
+	  -Wno-dev
 }
 
 EXTRA_OECMAKE = "-DLIB_INSTALL_DIR:PATH=${libdir} \