[oe] site/* - using common files for site information
Jamie Lenehan
lenehan at twibble.org
Mon Aug 28 00:05:22 UTC 2006
On Fri, Aug 25, 2006 at 09:40:56AM +0100, Richard Purdie wrote:
[...]
> config-info.bclass? site-config.bbclass? Calling it autotools-info
Ok, renamed to config-info.bbclass.
[...]
> option like endiness, why not have a variable which contains the
> endiness set by the class and use base_conditional to get the value you
And I've set some variables and made made use of base_conditional now
also - that works well.
Here's my current patch with examples for openssl and net-snmp using
base_conditional:
#
# old_revision [1e0480e593c593d843d47a6544316b0a4962aabc]
#
# add_file "classes/config-info.bbclass"
# content [8f5ae6c352748a5abdecb295e1ed6e45d6d26f23]
#
# patch "classes/autotools.bbclass"
# from [9467624c157cb8970b3658f48e7952ac0fa11fcc]
# to [8641748ec51a12f9d91fefe054dc3cfec7bbe8f2]
#
# patch "packages/net-snmp/net-snmp_5.1.2.bb"
# from [b7fa972e12bd3059d7830244f8cf6f3baa933c5b]
# to [935cbe24aaddf4489a0a7c779092a8649ca9bc0e]
#
# patch "packages/openssl/openssl.inc"
# from [f31f2327d25b80adafc3098cc53e6327891e3bc3]
# to [c995ed00c1d37d995145bf9519a803e6f6ce6121]
#
============================================================
--- classes/config-info.bbclass 8f5ae6c352748a5abdecb295e1ed6e45d6d26f23
+++ classes/config-info.bbclass 8f5ae6c352748a5abdecb295e1ed6e45d6d26f23
@@ -0,0 +1,72 @@
+# config-info.bbclass
+#
+# This class exists to provide information about the targets that
+# may be needed by other classes and/or recipes. If you add a new
+# target this will probably need to be updated.
+#
+
+#
+# Returns information about 'what' for the named target 'target'
+# where 'target' == "<arch>-<os>"
+#
+# 'what' can be one of
+# * target: Returns the target name ("<arch>-<os>")
+# * endianess: Return "be" for big endian targets, "le" for little endian
+# * bits: Returns the bit size of the target, either "32" or "64"
+# * libc: Returns the name of the c library used by the target
+#
+# It is an error for the target not to exist.
+# If 'what' doesn't exist then an empty value is returned
+#
+def get_config_info_for(target, what, d):
+ import bb
+ targetinfo = {\
+ "armeb-linux": dict(endianess="be", bits="32", libc="glibc" ),\
+ "armeb-linux-uclibc": dict(endianess="be", bits="32", libc="uclibc"),\
+ "arm-linux": dict(endianess="le", bits="32", libc="glibc" ),\
+ "arm-linux-gnueabi": dict(endianess="le", bits="32", libc="gnueabi", alias="arm-linux"),\
+ "arm-linux-uclibc": dict(endianess="le", bits="32", libc="uclibc" ),\
+ "i386-linux": dict(endianess="le", bits="32", libc="glibc", alias="ix86-linux"),\
+ "i486-linux": dict(endianess="le", bits="32", libc="glibc", alias="ix86-linux"),\
+ "i586-linux": dict(endianess="le", bits="32", libc="glibc", alias="ix86-linux"),\
+ "i686-linux": dict(endianess="le", bits="32", libc="glibc", alias="ix86-linux"),\
+ "i386-linux-uclibc": dict(endianess="le", bits="32", libc="uclibc", alias="ix86-linux-uclibc"),\
+ "i486-linux-uclibc": dict(endianess="le", bits="32", libc="uclibc", alias="ix86-linux-uclibc"),\
+ "i586-linux-uclibc": dict(endianess="le", bits="32", libc="uclibc", alias="ix86-linux-uclibc"),\
+ "i686-linux-uclibc": dict(endianess="le", bits="32", libc="uclibc", alias="ix86-linux-uclibc"),\
+ "mipsel-linux": dict(endianess="le", bits="32", libc="glibc" ),\
+ "mipsel-linux-uclibc": dict(endianess="le", bits="32", libc="uclibc"),\
+ "powerpc-darwin": dict(endianess="be", bits="32", libc="darwin"),\
+ "powerpc-linux": dict(endianess="be", bits="32", libc="glibc" ),\
+ "powerpc-linux-uclibc": dict(endianess="be", bits="32", libc="uclibc"),\
+ "sh3-linux": dict(endianess="le", bits="32", libc="glibc" ),\
+ "sh4-linux": dict(endianess="le", bits="32", libc="glibc" ),\
+ "sh4-linux-uclibc": dict(endianess="le", bits="32", libc="uclibc"),\
+ "sparc-linux": dict(endianess="be", bits="32", libc="glibc" ),\
+ "x86_64-linux": dict(endianess="le", bits="64", libc="glibc" ),\
+ "x86_64-linux-uclibc": dict(endianess="le", bits="64", libc="uclibc")}
+ if targetinfo.has_key(target):
+ info = targetinfo[target]
+ # allow them to ask for the target name
+ if what == "target":
+ return target
+ # otherwise get the information from the table
+ return info.get(what, "")
+ else:
+ bb.error("Information not available for target '%s'" % target)
+
+#
+# Returns information about 'what' for the current target
+#
+def get_config_info(what, d):
+ import bb
+ target = bb.data.getVar('HOST_ARCH', d, 1) + "-" + bb.data.getVar('HOST_OS', d, 1)
+ return get_config_info_for(target, what, d)
+
+#
+# Make some information available via variables
+#
+CONFIG_INFO_ENDIANESS = "${@get_config_info('endianess', d)}"
+CONFIG_INFO_BITS = "${@get_config_info('bits', d)}"
+CONFIG_INFO_LIBC = "${@get_config_info('libc', d)}"
+CONFIG_INFO_ALIAS = "${@get_config_info('alias', d)}"
============================================================
--- classes/autotools.bbclass 9467624c157cb8970b3658f48e7952ac0fa11fcc
+++ classes/autotools.bbclass 8641748ec51a12f9d91fefe054dc3cfec7bbe8f2
@@ -1,5 +1,67 @@
-inherit base
+inherit base config-info
+#
+# Define which site files to use. We check for several site files and
+# use each one that is found in the following order:
+# 1) common - common settings
+# 2) common-<libc> - libc specified settings
+# 3) common-(32|64)bits - bit-size specific settings
+# 4) common-(le|be) - endianess specific settings
+# 5) <alias> - target alias, if it has one
+# 6) <arch>-<os> - target specific settings
+#
+# Search for the files in the following directories:
+# 1) ${BBPATH}/site (in reverse) - app specific, then site wide
+# 2) ${FILE_DIRNAME}/site-${PV} - app version specific
+#
+def get_config_site_files(d):
+ import bb, os
+ # How to map a specific type of info to the name of a site file
+ sitenamemap = { "common": "%s", \
+ "libc": "common-%s", \
+ "bits": "common-%sbits", \
+ "endianess": "common-%s", \
+ "alias": "%s", \
+ "target": "%s" }
+ sites = []
+ sitefiles = ""
+
+ # Determine which site files to look for
+ for i in ["common", "libc", "bits", "endianess", "alias", "target"]:
+ tmp = get_config_info(i, d)
+ if tmp:
+ sites.append(sitenamemap[i] % tmp)
+
+ # Check along bbpath for site files and append in reverse order so
+ # the application specific sites files are last and system site
+ # files first.
+ path_bb = bb.data.getVar('BBPATH', d, 1)
+ for p in (path_bb or "").split(':'):
+ tmp = ""
+ for i in sites:
+ fname = os.path.join(p, 'site', i)
+ if os.path.exists(fname):
+ tmp += fname + " "
+ sitefiles = tmp + sitefiles;
+
+ # Now check for the applications version specific site files
+ path_pkgv = os.path.join(bb.data.getVar('FILE_DIRNAME', d, 1), "site-" + bb.data.getVar('PV', d, 1))
+ for i in sites:
+ fname = os.path.join(path_pkgv, i)
+ if os.path.exists(fname):
+ sitefiles += fname + " "
+
+ bb.debug(1, "SITE files " + sitefiles);
+ return sitefiles
+
+#
+# Export CONFIG_SITE to the enviroment. The autotools will make use
+# of this to determine where to load in variables from. This is a
+# space seperate list of shell scripts processed in the order listed.
+#
+export CONFIG_SITE = "${@get_config_site_files(d)}"
+
+
def autotools_dep_prepend(d):
import bb;
============================================================
--- packages/net-snmp/net-snmp_5.1.2.bb b7fa972e12bd3059d7830244f8cf6f3baa933c5b
+++ packages/net-snmp/net-snmp_5.1.2.bb 935cbe24aaddf4489a0a7c779092a8649ca9bc0e
@@ -11,23 +11,15 @@ SRC_URI = "${SOURCEFORGE_MIRROR}/net-snm
file://snmpd.conf \
file://snmptrapd.conf"
-inherit autotools
+inherit config-info autotools
PARALLEL_MAKE = ""
EXTRA_OECONF = "--enable-shared --disable-manuals"
EXTRA_OEMAKE = "INSTALL_PREFIX=${D}"
do_configure() {
- # endianness fun... inspired by openssl.inc
- . ${CONFIG_SITE}
- if [ "x$ac_cv_c_bigendian" = "xyes" -o "x$ac_cv_c_littleendian" = "xno" ]; then
- ENDIANESS=" --with-endianness=big"
- elif [ "x$ac_cv_c_littleendian" = "xyes" -o "x$ac_cv_c_bigendian" = "xno" ]; then
- ENDIANESS=" --with-endianness=little"
- else
- oefatal do_configure cannot determine endianess
- fi
- oenote Determined endianess as: $ENDIANESS
+ # Additional flag based on target endiness (see config-info.bbclass)
+ ENDIANESS="${@base_conditional('CONFIG_INFO_ENDIANESS', 'le', '--with-endianness=little', '--with-endianness=big', d)}"
oe_runconf $ENDIANESS
}
============================================================
--- packages/openssl/openssl.inc f31f2327d25b80adafc3098cc53e6327891e3bc3
+++ packages/openssl/openssl.inc c995ed00c1d37d995145bf9519a803e6f6ce6121
@@ -6,6 +6,8 @@ S = "${WORKDIR}/openssl-${PV}"
SRC_URI = "http://www.openssl.org/source/openssl-${PV}.tar.gz"
S = "${WORKDIR}/openssl-${PV}"
+inherit config-info
+
AR_append = " r"
export CFLAG = "-fPIC -DTHREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -DTERMIO -Wall ${FULL_OPTIMIZATION}"
@@ -26,15 +28,8 @@ do_compile () {
cd ..
ln -sf apps/openssl.pod crypto/crypto.pod ssl/ssl.pod doc/
- # endianness fun.. whee
- . ${CONFIG_SITE}
- if [ "x$ac_cv_c_bigendian" = "xyes" -o "x$ac_cv_c_littleendian" = "xno" ]; then
- CFLAG="${CFLAG} -DB_ENDIAN"
- elif [ "x$ac_cv_c_littleendian" = "xyes" -o "x$ac_cv_c_bigendian" = "xno" ]; then
- CFLAG="${CFLAG} -DL_ENDIAN"
- else
- oefatal do_configure cannot determine endianess
- fi
+ # Additional flag based on target endiness (see info.bbclass)
+ CFLAG="${CFLAG} ${@base_conditional('CONFIG_INFO_ENDIANESS', 'le', '-DL_ENDIAN', '-DB_ENDIAN', d)}"
os=${HOST_OS}
if [ "x$os" = "xlinux-uclibc" ]; then
--
Jamie Lenehan <lenehan at twibble.org>
More information about the Openembedded-devel
mailing list