From ddc01beb5d44940812dcef55b2b0368339620153 Mon Sep 17 00:00:00 2001 From: Kang Kai Date: Thu, 18 Aug 2011 10:04:57 +0800 Subject: eglibc: check dependencies among eglibc options Fixes [Yocto #1212] 'libc-inet' and 'ipv4' are the same thing, so remove 'libc-inet' from the default DISTRO_FEATURES_LIBC in file default-distrovars.inc. Check the dependencies among eglibc configurable options, make sure that eglibc could be compile successfully only with part of the options. (From OE-Core rev: 4b8d13b72c2c338ec5606f19aa5d7554558c51e5) Signed-off-by: Kang Kai Signed-off-by: Richard Purdie --- meta/recipes-core/eglibc/eglibc-options.inc | 75 ++++++++++++++++++++++++++++- 1 file changed, 74 insertions(+), 1 deletion(-) (limited to 'meta/recipes-core/eglibc') diff --git a/meta/recipes-core/eglibc/eglibc-options.inc b/meta/recipes-core/eglibc/eglibc-options.inc index 119ceefdd7..112029dab8 100644 --- a/meta/recipes-core/eglibc/eglibc-options.inc +++ b/meta/recipes-core/eglibc/eglibc-options.inc @@ -10,10 +10,83 @@ def eglibc_cfg(feature, features, tokens, cnf): cnf.extend(["OPTION_EGLIBC_NSSWITCH_FIXED_CONFIG = ${S}/nss/nsswitch.conf"]) cnf.extend(["OPTION_EGLIBC_NSSWITCH_FIXED_FUNCTIONS = ${S}/nss/fixed-nsswitch.functions"]) +# arrange the dependencies among eglibc configuable options according to file option-groups.def from eglibc source code +def distro_features_check_deps(distro_features): + new_dep = True + while new_dep: + new_dep = False + + if 'ipv6' in distro_features and 'ipv4' not in distro_features: + new_dep = True + distro_features.extend(['ipv4']) + + if 'ipv4' in distro_features and 'libc-nsswitch' not in distro_features: + new_dep = True + distro_features.extend(['libc-nsswitch']) + + if 'libc-cxx-tests' in distro_features: + if 'libc-posix-wchar-io' not in distro_features: + new_dep = True + distro_features.extend(['libc-posix-wchar-io']) + if 'libc-libm' not in distro_features: + new_dep = True + distro_features.extend(['libc-libm']) + + if 'libc-catgets' in distro_features and 'libc-locale-code' not in distro_features: + new_dep = True + distro_features.extend(['libc-locale-code']) + + if 'libc-crypt-ufc' in distro_features and 'libc-crypt' not in distro_features: + new_dep = True + distro_features.extend(['libc-crypt']) + + if 'libc-getlogin' in distro_features and 'libc-utmp' not in distro_features: + new_dep = True + distro_features.extend(['libc-utmp']) + + if 'libc-inet-anl' in distro_features and 'ipv4' not in distro_features: + new_dep = True + distro_features.extend(['ipv4']) + + if 'libc-locale-code' in distro_features and 'libc-posix-clang-wchar' not in distro_features: + new_dep = True + distro_features.extend(['libc-posix-clang-wchar']) + + if 'libc-nis' in distro_features: + if 'ipv4' not in distro_features: + new_dep = True + distro_features.extend(['ipv4']) + if 'libc-sunrpc' not in distro_features: + new_dep = True + distro_features.extend(['libc-sunrpc']) + + if 'libc-rcmd' in distro_features and 'ipv4' not in distro_features: + new_dep = True + distro_features.extend(['ipv4']) + + if 'libc-sunrpc' in distro_features and 'ipv4' not in distro_features: + new_dep = True + distro_features.extend(['ipv4']) + + if 'libc-utmpx' in distro_features and 'libc-utmp' not in distro_features: + new_dep = True + distro_features.extend(['libc-utmp']) + + if 'libc-posix-regexp-glibc' in distro_features and 'libc-posix-regexp' not in distro_features: + new_dep = True + distro_features.extend(['libc-posix-regexp']) + + if 'libc-posix-wchar-io' in distro_features and 'libc-posix-clang-wchar' not in distro_features: + new_dep = True + distro_features.extend(['libc-posix-clang-wchar']) + # Map distro features to eglibc options settings def features_to_eglibc_settings(d): cnf = ([]) distro_features = (bb.data.getVar('DISTRO_FEATURES', d, True) or '').split() + + distro_features_check_deps(distro_features) + eglibc_cfg('ipv6', distro_features, 'OPTION_EGLIBC_ADVANCED_INET6', cnf) eglibc_cfg('libc-backtrace', distro_features, 'OPTION_EGLIBC_BACKTRACE', cnf) eglibc_cfg('libc-big-macros', distro_features, 'OPTION_EGLIBC_BIG_MACROS', cnf) @@ -31,7 +104,7 @@ def features_to_eglibc_settings(d): eglibc_cfg('libc-ftraverse', distro_features, 'OPTION_EGLIBC_FTRAVERSE', cnf) eglibc_cfg('libc-getlogin', distro_features, 'OPTION_EGLIBC_GETLOGIN', cnf) eglibc_cfg('libc-idn', distro_features, 'OPTION_EGLIBC_IDN', cnf) - eglibc_cfg('libc-inet', distro_features, 'OPTION_EGLIBC_INET', cnf) + eglibc_cfg('ipv4', distro_features, 'OPTION_EGLIBC_INET', cnf) eglibc_cfg('libc-inet-anl', distro_features, 'OPTION_EGLIBC_INET_ANL', cnf) eglibc_cfg('libc-libm', distro_features, 'OPTION_EGLIBC_LIBM', cnf) eglibc_cfg('libc-libm-big', distro_features, 'OPTION_EGLIBC_LIBM_BIG', cnf) -- cgit v1.2.3-54-g00ecf