1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
|
def glibc_cfg(feature, tokens, cnf):
if type(tokens) == type(""):
tokens = [tokens]
if feature:
cnf.extend([token + '=y' for token in tokens])
else:
for token in tokens:
cnf.extend([token + '=n'])
if token == 'OPTION_EGLIBC_NSSWITCH':
cnf.extend(["OPTION_EGLIBC_NSSWITCH_FIXED_CONFIG=\"${S}/nss/nsswitch.conf\""])
cnf.extend(["OPTION_EGLIBC_NSSWITCH_FIXED_FUNCTIONS=\"${S}/nss/fixed-nsswitch.functions\""])
# Map distro features to glibc options settings
def features_to_glibc_settings(d):
cnf = ([])
ipv4 = bb.utils.contains('DISTRO_FEATURES', 'ipv4', True, False, d)
ipv6 = bb.utils.contains('DISTRO_FEATURES', 'ipv6', True, False, d)
libc_backtrace = bb.utils.contains('DISTRO_FEATURES', 'libc-backtrace', True, False, d)
libc_big_macros = bb.utils.contains('DISTRO_FEATURES', 'libc-big-macros', True, False, d)
libc_bsd = bb.utils.contains('DISTRO_FEATURES', 'libc-bsd', True, False, d)
libc_cxx_tests = bb.utils.contains('DISTRO_FEATURES', 'libc-cxx-tests', True, False, d)
libc_catgets = bb.utils.contains('DISTRO_FEATURES', 'libc-catgets', True, False, d)
libc_charsets = bb.utils.contains('DISTRO_FEATURES', 'libc-charsets', True, False, d)
libc_crypt = bb.utils.contains('DISTRO_FEATURES', 'libc-crypt', True, False, d)
libc_crypt_ufc = bb.utils.contains('DISTRO_FEATURES', 'libc-crypt-ufc', True, False, d)
libc_db_aliases = bb.utils.contains('DISTRO_FEATURES', 'libc-db-aliases', True, False, d)
libc_envz = bb.utils.contains('DISTRO_FEATURES', 'libc-envz', True, False, d)
libc_fcvt = bb.utils.contains('DISTRO_FEATURES', 'libc-fcvt', True, False, d)
libc_fmtmsg = bb.utils.contains('DISTRO_FEATURES', 'libc-fmtmsg', True, False, d)
libc_fstab = bb.utils.contains('DISTRO_FEATURES', 'libc-fstab', True, False, d)
libc_ftraverse = bb.utils.contains('DISTRO_FEATURES', 'libc-ftraverse', True, False, d)
libc_getlogin = bb.utils.contains('DISTRO_FEATURES', 'libc-getlogin', True, False, d)
libc_idn = bb.utils.contains('DISTRO_FEATURES', 'libc-idn', True, False, d)
libc_inet_anl = bb.utils.contains('DISTRO_FEATURES', 'libc-inet-anl', True, False, d)
libc_libm = bb.utils.contains('DISTRO_FEATURES', 'libc-libm', True, False, d)
libc_locales = bb.utils.contains('DISTRO_FEATURES', 'libc-locales', True, False, d)
libc_locale_code = bb.utils.contains('DISTRO_FEATURES', 'libc-locale-code', True, False, d)
libc_memusage = bb.utils.contains('DISTRO_FEATURES', 'libc-memusage', True, False, d)
libc_nis = bb.utils.contains('DISTRO_FEATURES', 'libc-nis', True, False, d)
libc_nsswitch = bb.utils.contains('DISTRO_FEATURES', 'libc-nsswitch', True, False, d)
libc_rcmd = bb.utils.contains('DISTRO_FEATURES', 'libc-rcmd', True, False, d)
libc_rtld_debug = bb.utils.contains('DISTRO_FEATURES', 'libc-rtld-debug', True, False, d)
libc_spawn = bb.utils.contains('DISTRO_FEATURES', 'libc-spawn', True, False, d)
libc_streams = bb.utils.contains('DISTRO_FEATURES', 'libc-streams', True, False, d)
libc_sunrpc = bb.utils.contains('DISTRO_FEATURES', 'libc-sunrpc', True, False, d)
libc_utmp = bb.utils.contains('DISTRO_FEATURES', 'libc-utmp', True, False, d)
libc_utmpx = bb.utils.contains('DISTRO_FEATURES', 'libc-utmpx', True, False, d)
libc_wordexp = bb.utils.contains('DISTRO_FEATURES', 'libc-wordexp', True, False, d)
libc_posix_clang_wchar = bb.utils.contains('DISTRO_FEATURES', 'libc-posix-clang-wchar', True, False, d)
libc_posix_regexp = bb.utils.contains('DISTRO_FEATURES', 'libc-posix-regexp', True, False, d)
libc_posix_regexp_glibc = bb.utils.contains('DISTRO_FEATURES', 'libc-posix-regexp-glibc', True, False, d)
libc_posix_wchar_io = bb.utils.contains('DISTRO_FEATURES', 'libc-posix-wchar-io', True, False, d)
# arrange the dependencies among glibc configuable options according to file option-groups.def from glibc source code
new_dep = True
while new_dep:
new_dep = False
if ipv6 and not ipv4:
new_dep = True
ipv4 = True
if ipv4 and not libc_nsswitch:
new_dep = True
libc_nsswitch = True
if libc_cxx_tests:
if not libc_posix_wchar_io:
new_dep = True
libc_posix_wchar_io = True
if not libc_libm:
new_dep = True
libc_libm = True
if libc_catgets and not libc_locale_code:
new_dep = True
libc_locale_code = True
if libc_crypt_ufc and not libc_crypt:
new_dep = True
libc_crypt = True
if libc_getlogin and not libc_utmp:
new_dep = True
libc_utmp = True
if libc_inet_anl and not ipv4:
new_dep = True
ipv4 = True
if libc_locale_code and not libc_posix_clang_wchar:
new_dep = True
libc_posix_clang_wchar = True
if libc_nis:
if not ipv4:
new_dep = True
ipv4 = True
if not libc_sunrpc:
new_dep = True
libc_sunrpc = True
if libc_rcmd and not ipv4:
new_dep = True
ipv4 = True
if libc_sunrpc and not ipv4:
new_dep = True
ipv4 = True
if libc_utmpx and not libc_utmp:
new_dep = True
libc_utmp = True
if libc_posix_regexp_glibc and not libc_posix_regexp:
new_dep = True
libc_posix_regexp = True
if libc_posix_wchar_io and not libc_posix_clang_wchar:
new_dep = True
libc_posix_clang_wchar = True
glibc_cfg(ipv6, 'OPTION_EGLIBC_ADVANCED_INET6', cnf)
glibc_cfg(libc_backtrace, 'OPTION_EGLIBC_BACKTRACE', cnf)
glibc_cfg(libc_big_macros, 'OPTION_EGLIBC_BIG_MACROS', cnf)
glibc_cfg(libc_bsd, 'OPTION_EGLIBC_BSD', cnf)
glibc_cfg(libc_cxx_tests, 'OPTION_EGLIBC_CXX_TESTS', cnf)
glibc_cfg(libc_catgets, 'OPTION_EGLIBC_CATGETS', cnf)
glibc_cfg(libc_charsets, 'OPTION_EGLIBC_CHARSETS', cnf)
glibc_cfg(libc_crypt, 'OPTION_EGLIBC_CRYPT', cnf)
glibc_cfg(libc_crypt_ufc, 'OPTION_EGLIBC_CRYPT_UFC', cnf)
glibc_cfg(libc_db_aliases, 'OPTION_EGLIBC_DB_ALIASES', cnf)
glibc_cfg(libc_envz, 'OPTION_EGLIBC_ENVZ', cnf)
glibc_cfg(libc_fcvt, 'OPTION_EGLIBC_FCVT', cnf)
glibc_cfg(libc_fmtmsg, 'OPTION_EGLIBC_FMTMSG', cnf)
glibc_cfg(libc_fstab, 'OPTION_EGLIBC_FSTAB', cnf)
glibc_cfg(libc_ftraverse, 'OPTION_EGLIBC_FTRAVERSE', cnf)
glibc_cfg(libc_getlogin, 'OPTION_EGLIBC_GETLOGIN', cnf)
glibc_cfg(libc_idn, 'OPTION_EGLIBC_IDN', cnf)
glibc_cfg(ipv4, 'OPTION_EGLIBC_INET', cnf)
glibc_cfg(libc_inet_anl, 'OPTION_EGLIBC_INET_ANL', cnf)
glibc_cfg(libc_libm, 'OPTION_EGLIBC_LIBM', cnf)
glibc_cfg(libc_locales, 'OPTION_EGLIBC_LOCALES', cnf)
glibc_cfg(libc_locale_code, 'OPTION_EGLIBC_LOCALE_CODE', cnf)
glibc_cfg(libc_memusage, 'OPTION_EGLIBC_MEMUSAGE', cnf)
glibc_cfg(libc_nis, 'OPTION_EGLIBC_NIS', cnf)
glibc_cfg(libc_nsswitch, 'OPTION_EGLIBC_NSSWITCH', cnf)
glibc_cfg(libc_rcmd, 'OPTION_EGLIBC_RCMD', cnf)
glibc_cfg(libc_rtld_debug, 'OPTION_EGLIBC_RTLD_DEBUG', cnf)
glibc_cfg(libc_spawn, 'OPTION_EGLIBC_SPAWN', cnf)
glibc_cfg(libc_streams, 'OPTION_EGLIBC_STREAMS', cnf)
glibc_cfg(libc_sunrpc, 'OPTION_EGLIBC_SUNRPC', cnf)
glibc_cfg(libc_utmp, 'OPTION_EGLIBC_UTMP', cnf)
glibc_cfg(libc_utmpx, 'OPTION_EGLIBC_UTMPX', cnf)
glibc_cfg(libc_wordexp, 'OPTION_EGLIBC_WORDEXP', cnf)
glibc_cfg(libc_posix_clang_wchar, 'OPTION_POSIX_C_LANG_WIDE_CHAR', cnf)
glibc_cfg(libc_posix_regexp, 'OPTION_POSIX_REGEXP', cnf)
glibc_cfg(libc_posix_regexp_glibc, 'OPTION_POSIX_REGEXP_GLIBC', cnf)
glibc_cfg(libc_posix_wchar_io, 'OPTION_POSIX_WIDE_CHAR_DEVICE_IO', cnf)
return "\n".join(cnf)
|