diff --git a/meta/classes/siteconfig.bbclass b/meta/classes/siteconfig.bbclass new file mode 100644 index 0000000000..5311653bb5 --- /dev/null +++ b/meta/classes/siteconfig.bbclass @@ -0,0 +1,31 @@ +siteconfig_do_siteconfig() { + if [ ! -d ${FILE_DIRNAME}/site_config ]; then + exit 0 + fi + mkdir ${WORKDIR}/site_config + gen-site-config ${FILE_DIRNAME}/site_config \ + >${WORKDIR}/site_config/configure.ac + cd ${WORKDIR}/site_config + autoconf + CONFIG_SITE="" ./configure ${CONFIGUREOPTS} --cache-file ${PN}_cache + sed -n -e "/ac_cv_c_bigendian/p" -e "/ac_cv_sizeof_/p" \ + -e "/ac_cv_type_/p" -e "/ac_cv_header_/p" -e "/ac_cv_func_/p" \ + < ${PN}_cache > ${PN}_config + mkdir -p ${SYSROOT_DESTDIR}${STAGING_DATADIR}/${TARGET_SYS}_config_site.d + cp ${PN}_config ${SYSROOT_DESTDIR}${STAGING_DATADIR}/${TARGET_SYS}_config_site.d +} + +# Ugly integration with sstate_task_postfunc for now. The normal package +# sysroot components must be installed in order to generate the cache, but +# the site cache must be generated before the staging archive is generated. +python sstate_task_postfunc () { + shared_state = sstate_state_fromvars(d) + sstate_install(shared_state, d) + if shared_state['name'] == 'populate-sysroot': + bb.build.exec_func('do_siteconfig', d) + sstate_clean(shared_state, d) + sstate_install(shared_state, d) + sstate_package(shared_state, d) +} + +EXPORT_FUNCTIONS do_siteconfig diff --git a/meta/classes/siteinfo.bbclass b/meta/classes/siteinfo.bbclass index c4206c2d85..130fdc4cfb 100644 --- a/meta/classes/siteinfo.bbclass +++ b/meta/classes/siteinfo.bbclass @@ -96,6 +96,13 @@ def siteinfo_get_files(d): if os.path.exists(fname): sitefiles += fname + " " + # Now check for siteconfig cache files + path_siteconfig = os.path.join(bb.data.getVar('STAGING_DATADIR', d, 1), bb.data.getVar('TARGET_SYS', d, 1) + "_config_site.d") + if os.path.isdir(path_siteconfig): + for i in os.listdir(path_siteconfig): + fname = os.path.join(path_siteconfig, i) + sitefiles += fname + " " + bb.debug(1, "SITE files " + sitefiles); return sitefiles diff --git a/scripts/gen-site-config b/scripts/gen-site-config new file mode 100755 index 0000000000..7da7a0bd8a --- /dev/null +++ b/scripts/gen-site-config @@ -0,0 +1,53 @@ +#! /bin/sh +# Copyright (c) 2005-2008 Wind River Systems, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License version 2 as +# published by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +cat << EOF +AC_PREREQ(2.57) +AC_INIT([site_wide],[1.0.0]) + +EOF + +# Disable as endian is set in the default config +#echo AC_C_BIGENDIAN +#echo + +if [ -e $1/types ] ; then + while read type ; do + echo "AC_CHECK_SIZEOF([$type])" + done < $1/types + + echo +fi + +if [ -e $1/funcs ]; then + while read func ; do + echo "AC_CHECK_FUNCS([$func])" + done < $1/funcs + + echo +fi + +if [ -e $1/headers ]; then + while read header ; do + echo "AC_CHECK_HEADERS([$header])" + done < $1/headers + + echo +fi + +cat << EOF +AC_OUTPUT +EOF