From 18074765f1529a3a632abbaa79724c38ff25578a Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Tue, 4 Mar 2008 12:12:40 +0000 Subject: Change staging layout to match the target system layout. WARNING - staging ABI change. This update completes the conversion of OE.dev to use sysroot and have a staging layout that matches the target system. This means we no longer need to mangle pkgconfig files and can use its sysroot option instead. Users of old toolchains (gcc prior to 3.4 and external ones) may need to add cross-linkage and staging-linkage to their toolchain dependencies. Since this update changes staging layout and the contents of the .pc files it updates the staging ABI and people will need to rebuild. --- classes/insane.bbclass | 11 +++++++---- classes/native.bbclass | 47 +++++++++++++++++++++-------------------------- classes/pkgconfig.bbclass | 30 ++---------------------------- classes/sdk.bbclass | 12 +++++++----- 4 files changed, 37 insertions(+), 63 deletions(-) (limited to 'classes') diff --git a/classes/insane.bbclass b/classes/insane.bbclass index 97cf036dd9..5ff49cd65e 100644 --- a/classes/insane.bbclass +++ b/classes/insane.bbclass @@ -333,12 +333,15 @@ def package_qa_check_staged(path,d): import os, bb sane = True - workdir = os.path.join(bb.data.getVar('TMPDIR', d, True), "work") + tmpdir = bb.data.getVar('TMPDIR', d, True) + workdir = os.path.join(tmpdir, "work") - if bb.data.inherits_class("native", d): + if bb.data.inherits_class("native", d) or bb.data.inherits_class("cross", d): installed = "installed=no" + pkgconfigcheck = workdir else: installed = "installed=yes" + pkgconfigcheck = tmpdir # find all .la and .pc files # read the content @@ -356,8 +359,8 @@ def package_qa_check_staged(path,d): sane = package_qa_handle_error(8, error_msg, "staging", path, d) elif file[-2:] == "pc": file_content = open(path).read() - if workdir in file_content: - error_msg = "%s failed sanity test (workdir) in path %s" % (file,root) + if pkgconfigcheck in file_content: + error_msg = "%s failed sanity test (tmpdir) in path %s" % (file,root) sane = package_qa_handle_error(6, error_msg, "staging", path, d) return sane diff --git a/classes/native.bbclass b/classes/native.bbclass index 934303cc0c..8f2b6f3fec 100644 --- a/classes/native.bbclass +++ b/classes/native.bbclass @@ -47,39 +47,33 @@ export AS = "${HOST_PREFIX}as" export RANLIB = "${HOST_PREFIX}ranlib" export STRIP = "${HOST_PREFIX}strip" - # Path prefixes -base_prefix = "${STAGING_DIR}/${BUILD_ARCH}-${BUILD_OS}" -prefix = "${base_prefix}" -exec_prefix = "${base_prefix}" +export base_prefix = "${STAGING_DIR_NATIVE}" +export prefix = "${STAGING_DIR_NATIVE}${layout_prefix}" +export exec_prefix = "${STAGING_DIR_NATIVE}${layout_exec_prefix}" # Base paths -base_bindir = "${base_prefix}/bin" -base_sbindir = "${base_prefix}/bin" -base_libdir = "${base_prefix}/lib" +export base_bindir = "${STAGING_DIR_NATIVE}${layout_base_bindir}" +export base_sbindir = "${STAGING_DIR_NATIVE}${layout_base_sbindir}" +export base_libdir = "${STAGING_DIR_NATIVE}${layout_base_libdir}" # Architecture independent paths -sysconfdir = "${prefix}/etc" -sharedstatedir = "${prefix}/com" -localstatedir = "${prefix}/var" -infodir = "${datadir}/info" -mandir = "${datadir}/man" -docdir = "${datadir}/doc" -servicedir = "${prefix}/srv" +export datadir = "${STAGING_DIR_NATIVE}${layout_datadir}" +export sysconfdir = "${STAGING_DIR_NATIVE}${layout_sysconfdir}" +export sharedstatedir = "${STAGING_DIR_NATIVE}${layout_sharedstatedir}" +export localstatedir = "${STAGING_DIR_NATIVE}${layout_localstatedir}" +export infodir = "${STAGING_DIR_NATIVE}${layout_infodir}" +export mandir = "${STAGING_DIR_NATIVE}${layout_mandir}" +export docdir = "${STAGING_DIR_NATIVE}${layout_docdir}" +export servicedir = "${STAGING_DIR_NATIVE}${layout_servicedir}" # Architecture dependent paths -bindir = "${exec_prefix}/bin" -sbindir = "${exec_prefix}/bin" -libexecdir = "${exec_prefix}/libexec" -libdir = "${exec_prefix}/lib" -includedir = "${exec_prefix}/include" -oldincludedir = "${exec_prefix}/include" - -# Datadir is made arch dependent here, primarily -# for autoconf macros, and other things that -# may be manipulated to handle crosscompilation -# issues. -datadir = "${exec_prefix}/share" +export bindir = "${STAGING_DIR_NATIVE}${layout_bindir}" +export sbindir = "${STAGING_DIR_NATIVE}${layout_sbindir}" +export libexecdir = "${STAGING_DIR_NATIVE}${layout_libexecdir}" +export libdir = "${STAGING_DIR_NATIVE}${layout_libdir}" +export includedir = "${STAGING_DIR_NATIVE}${layout_includedir}" +export oldincludedir = "${STAGING_DIR_NATIVE}${layout_includedir}" do_stage () { if [ "${INHIBIT_NATIVE_STAGE_INSTALL}" != "1" ] @@ -93,3 +87,4 @@ do_install () { } PKG_CONFIG_PATH .= "${EXTRA_NATIVE_PKGCONFIG_PATH}" +PKG_CONFIG_SYSROOT_DIR = "" diff --git a/classes/pkgconfig.bbclass b/classes/pkgconfig.bbclass index d2176d8b39..d65f8a6253 100644 --- a/classes/pkgconfig.bbclass +++ b/classes/pkgconfig.bbclass @@ -2,36 +2,10 @@ inherit base DEPENDS_prepend = "pkgconfig-native " -# The namespaces can clash here hence the two step replace -def get_pkgconfig_mangle(d): - import bb.data - s = "-e ''" - if not bb.data.inherits_class('native', d): - s += " -e 's:=${libdir}:=OELIBDIR:;'" - s += " -e 's:=${includedir}:=OEINCDIR:;'" - s += " -e 's:=${datadir}:=OEDATADIR:'" - s += " -e 's:=${prefix}:=OEPREFIX:'" - s += " -e 's:=${exec_prefix}:=OEEXECPREFIX:'" - s += " -e 's:OELIBDIR:${STAGING_LIBDIR}:;'" - s += " -e 's:OEINCDIR:${STAGING_INCDIR}:;'" - s += " -e 's:OEDATADIR:${STAGING_DATADIR}:'" - s += " -e 's:OEPREFIX:${STAGING_DIR_HOST}${layout_prefix}:'" - s += " -e 's:OEEXECPREFIX:${STAGING_DIR_HOST}${layout_exec_prefix}:'" - s += " -e 's:-L${WORKDIR}\S*: :g'" - s += " -e 's:-I${WORKDIR}\S*: :g'" - - return s - -do_install_append () { - for pc in `find ${D} -name '*.pc' -type f | grep -v -- '-uninstalled.pc$'`; do - sed -i ${@get_pkgconfig_mangle(d)} -e 's:${D}::g' -e 's:${STAGING_LIBDIR}:${libdir}:g' -e 's:${STAGING_INCDIR}:${includedir}:g' -e 's:${STAGING_DIR_TARGET}:${prefix}:g' ${pc} - done -} - do_stage_append () { + install -d ${PKG_CONFIG_DIR} for pc in `find ${S} -name '*.pc' -type f | grep -v -- '-uninstalled.pc$'`; do pcname=`basename $pc` - install -d ${PKG_CONFIG_DIR} - cat $pc | sed ${@get_pkgconfig_mangle(d)} -e 's:${D}${libdir}\S*:${STAGING_LIBDIR}:g' -e 's:${D}${prefix}/include\S*:${STAGING_INCDIR}:g' > ${PKG_CONFIG_DIR}/$pcname + cat $pc > ${PKG_CONFIG_DIR}/$pcname done } diff --git a/classes/sdk.bbclass b/classes/sdk.bbclass index 63f12117eb..71c65a1629 100644 --- a/classes/sdk.bbclass +++ b/classes/sdk.bbclass @@ -6,15 +6,16 @@ OLD_PACKAGE_ARCH := ${PACKAGE_ARCH} PACKAGE_ARCH = "${BUILD_ARCH}-${OLD_PACKAGE_ARCH}-sdk" HOST_ARCH = "${BUILD_ARCH}" -HOST_VENDOR = "${BUILD_VENDOR}" +# This isn't BUILD_VENDOR since we don't want to clash with native staging +HOST_VENDOR = "${TARGET_VENDOR}" HOST_OS = "${BUILD_OS}" HOST_PREFIX = "${BUILD_PREFIX}" HOST_CC_ARCH = "${BUILD_CC_ARCH}" -CPPFLAGS = "${BUILD_CPPFLAGS}" -CFLAGS = "${BUILD_CFLAGS}" -CXXFLAGS = "${BUILD_CFLAGS}" -LDFLAGS = "${BUILD_LDFLAGS}" +CPPFLAGS = "${BUILDSDK_CPPFLAGS}" +CFLAGS = "${BUILDSDK_CFLAGS}" +CXXFLAGS = "${BUILDSDK_CFLAGS}" +LDFLAGS = "${BUILDSDK_LDFLAGS}" # Path prefixes prefix = "${SDK_PREFIX}" @@ -49,3 +50,4 @@ FILES_${PN}-dbg += "${prefix}/.debug \ ${prefix}/bin/.debug \ " +export PKG_CONFIG_SYSROOT_DIR = "${STAGING_DIR}/${HOST_SYS}" -- cgit v1.2.3