summaryrefslogtreecommitdiff
path: root/scripts/oe-pkgdata-util
blob: 900c27af68fd148711167c2126bbc62efd6b0d59 (plain)
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
163
164
165
166
167
168
169
170
171
#!/usr/bin/env python

# OpenEmbedded pkgdata utility
#
# Written by: Paul Eggleton <paul.eggleton@linux.intel.com>
#
# Copyright 2012 Intel Corporation
#
# 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.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
#
#
# Currently only has one function - mapping of packages to their dev/dbg/doc/locale etc. 
# counterparts ("glob" command). Could be extended in future to perform other useful querying
# functions on the pkgdata though.
#

import sys
import os
import os.path
import fnmatch
import re

def usage():
    print("syntax: pkgdata-util glob [-d] <pkgdatadir> <vendor-os> <pkglist> \"<globs>\"");



def glob(args):
    if len(args) < 4:
        usage()
        sys.exit(1)

    pkgdata_dir = args[0]
    target_suffix = args[1]
    pkglist_file = args[2]
    globs = args[3].split()

    if target_suffix.startswith("-"):
        target_suffix = target_suffix[1:]

    skipregex = re.compile("-locale-|^locale-base-|-dev$|-doc$|-dbg$|-staticdev$|^kernel-module-")

    mappedpkgs = set()
    with open(pkglist_file, 'r') as f:
        for line in f:
            fields = line.rstrip().split()
            if len(fields) < 2:
                continue
            pkg = fields[0]
            arch = fields[1]
            multimach_target_sys = "%s-%s" % (arch, target_suffix)

            # Skip packages for which there is no point applying globs
            if skipregex.search(pkg):
                if debug:
                    print("%s -> !!" % pkg)
                continue

            # Skip packages that already match the globs, so if e.g. a dev package
            # is already installed and thus in the list, we don't process it any further
            # Most of these will be caught by skipregex already, but just in case...
            already = False
            for g in globs:
                if fnmatch.fnmatchcase(pkg, g):
                    already = True
                    break
            if already:
                if debug:
                    print("%s -> !" % pkg)
                continue

            # Define some functions
            def revpkgdata(pkgn):
                return os.path.join(pkgdata_dir, multimach_target_sys, "runtime-reverse", pkgn)
            def fwdpkgdata(pkgn):
                return os.path.join(pkgdata_dir, multimach_target_sys, "runtime", pkgn)
            def readpn(pkgdata_file):
                pn = ""
                with open(pkgdata_file, 'r') as f:
                    for line in f:
                        if line.startswith("PN:"):
                            pn = line.split(': ')[1].rstrip()
                return pn
            def readrenamed(pkgdata_file):
                renamed = ""
                pn = os.path.basename(pkgdata_file)
                with open(pkgdata_file, 'r') as f:
                    for line in f:
                        if line.startswith("PKG_%s:" % pn):
                            renamed = line.split(': ')[1].rstrip()
                return renamed

            # Main processing loop
            for g in globs:
                mappedpkg = ""
                # First just try substitution (i.e. packagename -> packagename-dev)
                newpkg = g.replace("*", pkg)
                revlink = revpkgdata(newpkg)
                if os.path.exists(revlink):
                    mappedpkg = os.path.basename(os.readlink(revlink))
                    fwdfile = fwdpkgdata(mappedpkg)
                    if os.path.exists(fwdfile):
                        mappedpkg = readrenamed(fwdfile)
                    if not os.path.exists(fwdfile + ".packaged"):
                        mappedpkg = ""
                else:
                    # That didn't work, so now get the PN, substitute that, then map in the other direction
                    revlink = revpkgdata(pkg)
                    if os.path.exists(revlink):
                        pn = readpn(revlink)
                        newpkg = g.replace("*", pn)
                        fwdfile = fwdpkgdata(newpkg)
                        if os.path.exists(fwdfile):
                            mappedpkg = readrenamed(fwdfile)
                        if not os.path.exists(fwdfile + ".packaged"):
                            mappedpkg = ""
                    else:
                        # Package doesn't even exist...
                        if debug:
                            print "%s is not a valid package!" % (pkg)
                        break

                if mappedpkg:
                    if debug:
                        print "%s (%s) -> %s" % (pkg, g, mappedpkg)
                    mappedpkgs.add(mappedpkg)
                else:
                    if debug:
                        print "%s (%s) -> ?" % (pkg, g)

    if debug:
        print "------"

    print("\n".join(mappedpkgs))



# Too lazy to use getopt
debug = False
noopt = False
args = []
for arg in sys.argv[1:]:
    if arg == "--":
        noopt = True
    else:
        if not noopt:
            if arg == "-d":
                debug = True
                continue
        args.append(arg)

if len(args) < 1:
    usage()
    sys.exit(1)

if args[0] == "glob":
    glob(args[1:])
else:
    usage()
    sys.exit(1)
euA z)2n.&/s+ݖZ58\,餑'=v?n{qA7#MCt(izIl ,~ q]c s=rΥ}J_7Heu@L openembedded-core-50b208612945c638e3f4965ebf90ade4aac5b636/bitbake/ChangeLogUT8M[isɑej=$(R(BIHލ DٗIwˬ.n|@uy|Y}X$kΨ/O?@TݎV'wzeԸ]]WMMUuguK/L=<:knUiU]YUZծ0J[e&ϣߖUjff]ݞ]LuYJ$ml`k6Y5JtB.(4Ucly^=6+[C%-cUYU}W^7^z$UjT[)YٚN6ej$_GY]=MVtKj6^+vsf%m)ktfUW|!a5IZxw*K֚kc=E[ݬL4}4~o'7/gj{~j3­nc#$Av.oDѡ0mNU?Y&ߐv^?{gji[!&(PkLasɆ#v(!YABJG$떘Aed!n?l]^c1Rb!?d~O7ױa׊PfI`w+|Ix%G؜rJ)y^Wg)Ty+PiYڰ漢U:8 Vpr25oo./N7 ȡvg'h*afr5y,H2v|i$prRA.5 pB>&g u!( p>}A* u`qlY)LghaVNG@!~l5V$`)X!"Fu {9ӄ3PA\]Ϧыd'*GLr(-6Űd5,g +C Ʈlէ ~AjS]A>q Ր@‰0s좒: еu̍T| iQn$OhL+S !۬0}6l8S@nA3zCH)l2uV+]s>@021єQ|g'In ڧڳ-?qQ1pduw~:vL4t9*3wLF(6xek ]>A] qq@k;'V@WNu!I攅bXV[JdM)`jdH+;?Q# (/fIa>AP"ُB{0U9KތC&Z1 #O~f_o99\Kf\!# rSK %c7~ v9v~1_^Lg}s#XR54} /Ϥ\,Qr1d-wrT+pltl!WG8?=#@Pi"Y>GN?!̥3Q?HI;WL* l&Rћ 4`cj/=zV-b,A&mY''ٹh1&2mBսWTv]ە(d;[W%tr Woh™(~$U¹͊ P[*_z,K_X0k T*k$IG+;rXZSy!q B`< !zP֓>PxBx~u1Ldty9u0Oy YmN4[n}Z2%NDJ`Er#@8&p7J(VDB\BUwH]lGBgǎJ&_RP<Բ8+eV F;`_! C12J{8J RqAIr(eiz">u bb{}h񅥚Y{F#hT0Ug0M pb4CJ'mtAyn@IG$  v_vSP #-o'|\s`m#zFx<Zz&FЏlR.F$kOPPܓVتkp&*U> ) SK'_f"enFY:iRwsqe!`H`Bb{(+EKB\C8 i R$[ٝpp6+;48v!Eb7bNc $GȄR%s5ԛ(}.5|2#.Ǔ)?XE9H@/b?s[h)o궀e HFAuAJr)e0=~f_"6b''d:NȄ+7!쀖:rgϳR9;X̓gBmn_zH?( &$!\ BjN7`¹Xz'!.= bLʚìB0a8}̤G=jp4YĄp@cQ&W?SmzR6q8 2ūn,n LzU~@40,"1Dlؑ^d9\m'䲏8 XJea^7Z]_$\ćgfߗFV¤罜Q205+qps3W9w`}!V6*z+)#)If\kOPwq]6V{+V+MAg)xFG11?VGg/ yX` g}*rE;Smx˙dwp'2a.SC߰M*5=> &O+I }PU 2seםVfL텈a<ql#YBAK#:}OXQ.ҹL 8O??+Wo(,5"ȣN _t"+}nLs }BVAtV"׉ъ(.eZ>Ysm'|Y+J4n)d<'4x߯՗61 6u:Դm3uGsfh2 .ɥ{qb18ȣwhɳ;r80q{'MU3XSR'..vuIi!& XެNT`R;tAd!Ƥc1هd%<]]SQg xK%."ӀTL}30z!0 ;1;n&M@ڑ #V:hXY/X pf84; C(؆FM+è<m51Ia{'8OݙTAt7 !6AA='ˊxWpZ;v{%kXz6߅Ю1E$F>@n/j[ =?j~*P*_@=L>h.i“<&\/)[zwp: 4.kG#p̙w\?g'=7IMB,׌ƴ#T$ gZH4 cM[WrDO@}`V"Eh(Yܮ`uQ rф0tWܝVaR/O//oNBHv:j?-Z-]C-By8\,Mnj߻T"l@aW[ozA=9vaYVZ8@+s έvZj(d?O_KR#&mܫG|:d/ᱬeJ*8Af vq {qz2!1%,M]R`蹖yN燤$z9 9e9[`溥wYɝ قQ0@_vBجgbf@{/K 2_¾.?(ϐjМQdQåZx 96S=^բ*/zYzԒ+9D/P&['}kvnE4\t_N^a`Q%WNOIXs8x,`U&Ib R'o 1ْ.Nn/ ۂ"(~uoΖa*uzG5MQ1ȧL#/ws7fN_q7~޽{ׯ)SkKdz6tf Ut?5.$Rl%  83|iZBC#%`bvfrcR7Jd`AŲat_JNXh;q<˚@!l|(t/[޶8TMɘO=T㡻ݻv >&,ʐN~PecVMz%?NnpЌ[hW|ýF+nOn^uEنy{]2ڇ-t+*UE> kvNNNo./ǧiHMrZvgdbJ:4iwz/2)DfjF"r%ն!gmR.䒙Έe\^ryYr+Eȫ["LK3@c1`:OKWk͖R Meo(=u7q4a!]҃I;_,\_ iqLoz g9=ᨕu{ f.`=:u^l [H*B\I0+wNcpl^<" O,$9l#>ī#7UGFHD|BkmMe] ڵHw9Ub{15pn/ܔ3PK |4>JOQI openembedded-core-50b208612945c638e3f4965ebf90ade4aac5b636/bitbake/HEADERUT8MRMo@+C?)( DFǵ=ƫ.hwiKo޼y3wS~>L]-^dA# _M0Cd<0eOR}8MAShS̍&(ɋ78+bɊ'- dVR Y)TCzhLKsiG openembedded-core-50b208612945c638e3f4965ebf90ade4aac5b636/bitbake/bin/UT8MPK |4> c &N openembedded-core-50b208612945c638e3f4965ebf90ade4aac5b636/bitbake/bin/bitbakeUT8MZ[o8~[D^j23݇f656ALQt hYԒwHʒ7M~~7;QX U0ph/枾ܣhc,ef_Y:q#ӑύI(h2qJY8QZ|aYt2`?<_;YhiW ;.jS;Gge`{x=P5= ȅfxiؕx<z)m9k?7ZgR8}, tUq`F=WV5KyɴȤZj+;+kAC3p05w/}eRh^`Y!Sv!SQVBJ4*5 M='^ve08 U߽, 66b^CPXyr?}aO7_~Xx"zJxJrY]C:xv}3ǓOn>Mfrr{1fWWӳ t3wڅؙ\0؂̒ _ t UDblBΜٽ0U`&e`/ (}j1$ +ci1`t^zU2e'6CV<`/q"`]h%˨yɤ.Ro"S^k؊g.o' p<ՒQl\ v/:4L $6exHUuo\8,$ڽ_ uHn+"" :'pZYÒZ7k uIvv򴆭K/!<66?ߌ/0(ޚ=f*92F{INZjrD qX5`Ⱦax]oqW5 f3igwgb+ɝ1CşE^*064:iVK f7qy~w\ ć4ȕFn!Rʷ}&؆ R]1D9L4] Ox.5St., N ;"x͇Q?Ze)l6O]o#݋D ;FM52D&GUU,@ԕKKhRVVhpM)6#Ɲ<[uW ;=D̃J#>| ʸ1 40*?T#&(ob»$Ph3ȸF2ٝf vF:Ew\~d΁gKy7~Ny+u/. 3qe&GUTYVNĞ "< Vs^(vuN:١Et j#LHeE߶6YY۩cp!#lB΋g@eDeфs D YUR{ȿqD*)P OņGχ7{(,tOX(Mv2f;%a -:i) m%|HI{#iVGJwUL)8&/~^]'z _=9SUmNv:Q3Yޮr?,fbV'e \+Qԉ4q@qF󘒪~n3̖Y.:fܳM 56ۨKW+%~+uȠ4^ia~/ftܶE! 3)KSd Ty\׈#k:vY]qPqTE^͹[6 ˾,XAQe֩ g,Gt,jҢ~S%iz)zI1^Q(»)2 vz5)yRjhR˫5/g^xEZz:>/Ԍtf?5kgHUMEElF`z{8zT*׼Z})v⥲LlNFjO#лM7cW$Wؘz)BmUH4F[(r9wZW!MAHV VYru}ŭ}%m:sBIRp^$kl5O"izy.r 2EmLwCjb5qx|ҮBί\khZPLCv*Qy-@oz՞Gwn۰G٩żTԉ+@J2[KPOxdqr[ǺBB|B*F熨? ͐5^ eq^Y : ϗ95Va% &keV_q-^21;FQνDGVY_<_ kK/MdFc2 vUy |:^] UB[AD(s^({`Йă U?vcm(ivf>C5iYi h+c׺rN(aA!nB4ࣝlD-5/8g,}hj;ն{qwqLp.A\8zȞӹAp`_}XBJtqCw}DMK*D~PK |4>7"W openembedded-core-50b208612945c638e3f4965ebf90ade4aac5b636/bitbake/bin/bitbake-diffsigsUT8Me0 { 1 )ftkrlK2 ޅ\\S\ЁMS^"Ƽ*n8_z?~:RRYj2)iT$cSӁE g8ٖ ^&b?lp@Wo*PK |4>msiV openembedded-core-50b208612945c638e3f4965ebf90ade4aac5b636/bitbake/bin/bitbake-runtaskUT8MWo6~_*+"cf{*%ik4-Q2HnPw$+ny u}lY3_J5j{*1m[nT@ZVTVZd(Q|-&ynb6Kq#dzY9s*b ײk㖵/h{_(eut,K]b%R=i4Uqو2cWisqFoX#B9VY ϋ[/dgQYp1cW-;ٔLiW%+–U03C)*RIM_]:3%w(Pەlo6!G>B֢:)+6)TjS@"$Rڶ}G vYٲz\y<Wʤex<An;c _vHs>{ho0 ˾UIqLu=T?hF8- N$!8_ֈ·ק:' z:{!Jj5o {;i YWQ9&N+խj0$҂܃*f+AN˜,PU"@hDVg™ Q֦M ~{,o-bRMWbty&@Qv' /ߙE丽#Lɿ,]h /Kx%dp0`;,c]ȯPEX]2:bX]bI3itN66j)xxz= gAn+V2/E՛w: M)QRXcOsu):  尘RR4=❾.6w@5`!zzMw.E6 $)Wɷkƌ4 CL:'|/BM:*Hi@Gk5ҺPUW?*6HBrbDFΰM5TZL%sb D?(Bu2ȡ餀Nbp"ɜD|NtҝhA* g~~LJ7ݼZnWiAX֟損 g!2jwB Ŵp`)p (|<,v%] /PK |4>Tf] openembedded-core-50b208612945c638e3f4965ebf90ade4aac5b636/bitbake/bin/bitbake-runtask-straceUT8M}A 0>_{-)@[Dmچ2íz9x&QKF&cK:U][GL#q]!v Z, נ9hJAK7  [qmE.)51}r++PK |4>S6M openembedded-core-50b208612945c638e3f4965ebf90ade4aac5b636/bitbake/bin/bitdocUT8M[oۺ 9bK`mZ$銢x0hȢFI;Re+0<h"ws/`e`&Y.*18*haU +I.T`DX@wqۯ ,rqy{u~s.>^Sk7!c7m. ;c a@4f ~/`Z"!A/"lSAhkk%,SE=h \g.(D+>"ݥ`AąL@E)) ~7avU`*/r3e̬MG3~':X[F+jmK]'!W+9GZJg$0?1s+c :R⠕uVƛ?݃?/7O8-^ Ή*+DZ@t_{9d' qFKnʀUAf{(h8Y-\UE!],i8㏃cnrI잧rTxr"a 8lE2P &N|r2d`<ǻy@&GoPh|D;M: !bw^ 8|~rG{/x5jI f.]D aZj[Ph'd6FN3xדøV$%<7D27qgQ>h+Mj_Ш@颗o(gQ~6_mk7'ek^2[e|~en25R[N~l{^']Me2b&d%AƠo5T"a @֌U.'$l/3wzȑ j_p0`uWBq y:_!|!l 14};P[焜XC=F U3lTqɹq0tu-~..vj8>xr蜕z@qפlF'I,=RTndɍbA Tv3iqW))&% 'gРP*r9g"Ñ\BDj7p 7;/[_>^8}#XrlQ={K ,'ъ ~ൖSr >5=nߓ^|ʩl%^;֘T"ʞUj F%`s@^E=MaVMl!fl^d+ZbiH߅G z*& 5x&$Ҿ$hI#U"h#oCXC.AݻCNF{lm6}6+ÕwԠ55|T^re갬V լ%Vms4>p9[Ve==UR]JgX>ߴ_`̾T^cCvJ H~ =$JM8ٱTBer}ҠοzE]xJ:v2fG#nclĆk|O't%W -풓ɶE=E܊U-s 1HLR<ӈSw4yibr<,wH0bMzj/F[ ba,"i>Z`NDG4}..JQ_Z5jKթwfR8I) Q*:o8X:UKv ][k5Cě '£A*("PK .R[vl6U/4U !Lq-}|I 44(ܾ/< AAB)*4o0|]o7MtrM@yt<ԕ;1!mkw~؇y*p[!ˌe-z)pşU\j6 D}潸ED`E|SvRo\Z`X,znݥ T 1=Tc-2!bmLX>sQЇ߇gz~v3%-( i 7j#K-"PfM$k_3zJj8PXV/3\N;S#TEj ORvYugO);F{֢ <rƛz[V`saXZRЍ%Rޢ~K+$+x4"mJ-S2oA8)wkhKXt7@Q,T܄FA$_U5=fe aJ1O1ky#d`M>Xbv P/?n <'@ }(Ef 䦤J]yr֥i"'8Kki +<5fĪSVfFV=GF{I_,ޟ=FV D _Pq:s oFu̎o6Ǐٱ蝾3IUH3x YRE/R>.Ais4r6>92[ 7v@E 0taə6x{?[8\ڣQwdАmv*vxUk ؊2>: ߸Dc7D ymo{rYgHt7,EJEeuHSl/vK openembedded-core-50b208612945c638e3f4965ebf90ade4aac5b636/bitbake/contrib/UT8MPK |4>BCHQ openembedded-core-50b208612945c638e3f4965ebf90ade4aac5b636/bitbake/contrib/READMEUT8M N&4.&k F۷wsAZO3Gaf6YvqY;|P{i>PK |4>f}S openembedded-core-50b208612945c638e3f4965ebf90ade4aac5b636/bitbake/contrib/bbdev.shUT8MQ]k0}~ũcB KFӷ [HJ cE2:][rs9im%,Ka+.%FNhqXݘg:6mPW<>.+#9p-%7mLc3S+ q68Y>q\gQGYSF#UE\ZIn2)r 5g, w"Tby~߾t3mX$H[6NcůUJq@lʥ^aV5BvD55F~EgA~.-Hr[\|1@0r`гYR#f%۳h>*znpۻA)>D@1XϳmxuDa_Le]6{$ͺ;x񇩁e~օF!۵P !@_PK |4>O openembedded-core-50b208612945c638e3f4965ebf90ade4aac5b636/bitbake/contrib/vim/UT8MPK |4>X openembedded-core-50b208612945c638e3f4965ebf90ade4aac5b636/bitbake/contrib/vim/ftdetect/UT8MPK |4>bc openembedded-core-50b208612945c638e3f4965ebf90ade4aac5b636/bitbake/contrib/vim/ftdetect/bitbake.vimUT8MQJ@<J+"EE[TX openembedded-core-50b208612945c638e3f4965ebf90ade4aac5b636/bitbake/contrib/vim/ftplugin/UT8MPK |4>mQ]c openembedded-core-50b208612945c638e3f4965ebf90ade4aac5b636/bitbake/contrib/vim/ftplugin/bitbake.vimUT8Mset sts=4 sw=4 et PK |4>V openembedded-core-50b208612945c638e3f4965ebf90ade4aac5b636/bitbake/contrib/vim/plugin/UT8MPK |4>Fp=_ openembedded-core-50b208612945c638e3f4965ebf90ade4aac5b636/bitbake/contrib/vim/plugin/newbb.vimUT8MUmOAUlR?4 QSAjI*6&d;6=v/q syvfy; eBB*r.櫶Fn8X?J6>qvt@$\O y>G+P9q5;&x[ -%j]8h4>ˌ˩0!HP`JnB-t0j;+  zf[{ Uj,P0~<`8CHa1rngRgE"mUp+bswF#zȆ0DQ:+#݀B( 3yP݃XyB7|Z+h/n{dA(bcuk+qIF T:>-s zL@ l>Jg('V+r5&Ӛg@=S+r5{zϗJSYl@,ہԫgDT$+2ȟK=˵-mYOkoZ:ZKE1( R=/f  ])I]WvAٽU_/;շnk`E5촟wwz uc]zAr g m,}8mCDزw5ITzs8HGE-kq*K7vn8 Z]&5x?.~,Ek@HFa#Zeh԰7*eZp;h~_w80Cy تFlUGPK |4>V openembedded-core-50b208612945c638e3f4965ebf90ade4aac5b636/bitbake/contrib/vim/syntax/UT8MPK |4>j5v1a openembedded-core-50b208612945c638e3f4965ebf90ade4aac5b636/bitbake/contrib/vim/syntax/bitbake.vimUT8MXmS6 4@`:NːoᚹBJc$H +omf2ճϮV8=#~@h)EsH!4o^9'|F"C(`2qfMc8od~Ω AzzR(NN+Ph7+@֔! G"N|F>aH/M AG?o_ !-8eA>q*(0 A؜j:P%hMx L{ V8m9H$(#EE>\xtB<h80*{b!/IE'/'X1x\;¸D~iIj'4O~O;:4 @| HlfNI9Q(|?U `Y0$B$ԃ`*a+m5ؼJ9=2{>p\B8h6iP҈؏7/R}|X)>:=5@z9/لBH4hCwb"PL_;[[nv7nב< bE ~=6{Z`e\.|!K'`jR ֝ރ-:̉ytt;ͰS;. <;\+CYG%llGGֻhUJ;/,gkq mZ<;2'X`4픤 {ǽns]IwS_4VHkjQ$8@fCΔT5g5F:nBí2TFaTH ^֭ɩ&co@ˈe]feJn#YpdV>xpY\htv|&e_xm(AɻGۋe0\aLUUe*I2 c]jF@fICNIhsY0H'O6;FMԏo'D4J`sQ)1UD^5`gQ`hҕ7FD6(.5*[7 gYOFy2z.y{y+q@p?gϫ2.'̠\G openembedded-core-50b208612945c638e3f4965ebf90ade4aac5b636/bitbake/doc/UT8MPK |4>\eCFR openembedded-core-50b208612945c638e3f4965ebf90ade4aac5b636/bitbake/doc/COPYING.GPLUT8M\[sȕ~N.X9c粙Qj(ȔBRvlA\hfgLݧ;`ϧ4'{tu?p<? +}ZcΝOvW/ʞ__ǿGtNUuL*,г|gz'ɿeinޮz6]Uk{EٳW~|?~OӁWW Pzu&*Ua &.S_鼮Żsl+[e.\]zrb/ibӊϋ&YVe߀̏%y;[m}89o| U ?%;+Ҭpe'~x&^@w^}baܕIf96z˗K@[mEL{!:}h8؂僂-C7ĉԛ.i6lO3X%Ւw>`ΧI-MieR&.hZ6ij/IbS9ܢ} ̾w'rɲasQEYwVha+,>)׵u7b35ңGDPV,4`ʯG*i%SՋETf#LG,>{S&6'0[tEK۷ԯ/zV8¥H].h%S2^L2C,}J諸vC,h\Hns&_[5= >{άO+ryJ"^8 %<1OJމrtDV"I7yTTJے(oLYR WV 7x,RuCphQtEˬkfxI8kWkGVg*˰+xn%UvX*sȭ\`YվXdkT-R/<5aTïxgA\* JKDC6i !zL+?$Jv4/?عI)J<0s/0sxF^,aG!cS=<8Dp I'ܭV%cD«f A&>(ě/)xK>]'@AaSv}hyDQoc *2(tڱH:|2..pfiC0ltYEǦ$+ ]mU#%It*]<#Scٚ$n$ z:s"E1א̚w<0cg3Faq#t= 1duP2}0v{D/DIEag⁵E,K@UI\X[UW٦C#+dKO :X7Ͳ,li7g~οy ut=5;FŊrHtB[cZ.UHN!և@CV.2ʄ6J *)/LAǟG 2FLs%*L$oy!Kɗ$%Rhѧ0{:M|͞3L0S~LaMYFH LRm! X)įTWmYsb~SU\"}(->E=U/OE?Ʃ2qIrWR; 2޻Қv+nՕTev?%\FMHgYِK^^KaYMyĕc }?'j诐(WKo'зuB2:Ӕ r>R?>AJ, b 8+7Ȏ_3 ihDPpT0S8§!yKhH~R*7 ˉHOmSV%tV-ZI_P["#`,5dIcO{5RY<+ɹv.)Mf!z@˒s.oOF(+_Ji=a.WiZ"1"M9%ji!&Z rw-C7.MjJ6iAb՞bzL !w4OJi/~LNmB"R-1x%1phOSAtvoK,;8Ol.ࣨ8qk46윲vќCrh-a\NHL'7~'4Q~+@71힟%p0VFQ{u.Wh!Z Vdԫ2+:3Xi Flj6YJ6|e 5{ h_ Fy1<{s Vv$(/ȷ/f)(٫E`2IH5.5-(aDQIyݯ[*r>xP+KPme1,NnzwrTFQRS4QIILc#VX13BK""4BZ7 al9,%nR 3q,Y udYD8$V{)O$:Ӭ9:k9>abpj`P/EnW z'Cՠw>d$$e%w11n%1`*e0?)E`к.[ՙ6-MU5XWt-IS$!_Z ԆR{ h%q)0Ѧ/@1I WDɩ4 (^ZԖY=D ނgp %‚3h Y$ CȞ $eUs0ԡ8ǯR?TX!_ \9G?.# -0bA^^qQg =P;-q.LiNi^Zy|hBC( =>Cb3m~`^S^5)>y [ڿ<1,GWvǼTZndo/I}$ ήKSET^R8yel t5z4{ye>K+9+׬39wj )2|LKH(x] g{V) yMs9^0ZITՁ{(~W)~Љ=hva0Ӣ|榤*wm[+Eh`"'^Ca=Y.@:i8z}y š4(=LRl 9j%E\:SDk䊁 05HA8q]ǂ0h7\7<'&Ҋ t#c7^bȼpД}3W4(1߹˃/[Zh\H2n5ZFy}[ΕYMN~da aEIko9d2ϞYjx=xnh'&v4 #7v2ڇ[{}7|ɐވעhk6py4ag;x|⃫|7>׻<_Gg::FO MNFff8Q;hh85{dٯӬ!7?7=;B=NS`gP<醧a>ds A 7o<\GؒƆoG1P~t?!&!oX Qi,bσ5 jOt\DQ羿Lx57lśfyΘAv<ɳ'_F3>F`? HO&X|> Z2B:4N|yh1m#fFr7_G؜$/FYU=@f3 (E1Y B"||N{QZ'{v89TDR@t4C 8޷v=#a2Րޞ iӢ7 P3},CekMn=1`t491Ғk@M/zvtTzc͗y#Ƀ|lfa%}CoɈԀsQ8gc` rXq5+ jNi|2@HV&Hb6% TJ <2!(L7HlTR]m:šx.ÅlU%ojQ3!N|כ2qhڂ5Q|"n +`w(4Zk.0 ~g 8ϵhe'@Z58\,餑'=v?n{qA7#MCt(izIl ,~ q]c s=rΥ}J_7H~QR openembedded-core-50b208612945c638e3f4965ebf90ade4aac5b636/bitbake/doc/COPYING.MITUT8M]QK0+F9{sYiF;dJHhk\bna09yn`N1N |6)W3{chd3й{a@N{hwmz-36Ɏ÷0X5{M;&v}faq`n\z1>>|3&ƺ.!q D(8&`wtw'Թ 5i'4;v1_Pȍ3A4P+&rÊ5XR ]ȝP`~*Oo*ۺ{].WX#JI|P ٖE)!M6BWĹ LiJީZ6sDQ·/=oX$M2JW2Yx-496uR*+ئIζGD`_B=_(F&+L1t݋h %)9!# *~gS×Aw z9+!PK |4>g7P openembedded-core-50b208612945c638e3f4965ebf90ade4aac5b636/bitbake/doc/bitbake.1UT8MWs~_ۭ}HӛM-KwVr5oLiA$Rx}]|tI$on0[1\Ζ%JRN6*(7wM!2%1"gm[oW7Of~"|ym[`CQұ W[o3Hҧ[X?-XKTAg|V1Jz(*~N pVAܩp&:YƸl祑~&JKwJT,B{%ꡃy.I,FAgY<_`EEY;]^J~tڭRXqriSS.)9%_Ļ@K. ,}lIN!Ǣ&,tX%릃WZz@73aK|uf&Bd:dАkOa;_ (ory\o.Y6ȵ*@^Zml8'=H'7@BF(rn_rCud4<_;["U\1 tF-qrN!M`nT"P):g+4a-)ocTY*eo];zm"E-\ T|)xM ,֟V[@J1C7꼎.b ў5Fĝd T:$ 6E.]1:]dX(4Fyu䁱2VZ&{bCl?A66}5aQNDނ| ?3?ѧ Ay^/ed[Üa Qىp',;>l|D\RJ 12d%#Nٛ ԉm RDl3Ki ?h wg)$rκTXk3*"JuOWu:Z :0GYmRNDciԀxPI4&]Cx-9LȂ ԕ?ǥ,J"nc+q,ر.?0)'h 헫?Ǯdĩ msX]gQt $sER8ۡ'yr.+[oc 0< l̉rvS\!ٲ{CDԏKŽ c[?:B _D')?;`,Fu0CBQvyÏo\.`{ҢՈ,xɗ6KE]xŐt NDo,}`w_EB?)0\$G@J=&@Cׇqt:sMV̅*Y+f`gdO0ikbD׎J0¶g5=HT䐳}ic*ī9U-0"i[,I9WmGG.ʊџJ;?6߳{y 9 UqGT}BODxt($CMԨF--1Q9Yaft>Q8h xy`tNIT!Sj=[cHOGˇ'|6ۑ:5ʐK$ )*#KqWVWM,:Gͧ0 dJGCzI"BYvqB0G8ww7z8olU/37*6#? q$Mic\~}x=d ,Gf%Tv'X7#v<#]6{ _ٿ.V:"5ۧUig'S*( :qŭ xPK |4>N openembedded-core-50b208612945c638e3f4965ebf90ade4aac5b636/bitbake/doc/manual/UT8MPK |4>vkCV openembedded-core-50b208612945c638e3f4965ebf90ade4aac5b636/bitbake/doc/manual/MakefileUT8MT[k0~~ŁRX 1eWǖY2qpd;v(d{9ԅt)")O'l'bpdR%``AJA9h'S'6ь ,'w d+qeIR*eL"7!x A'xMiqoE&_;\P1S+ȜH ,k4 Ϳi9z7 qH2hZeAy #OtN;ߡ(/BW> sdY}%T݂]D Mb&'7p>~kNR7i!vn"BeJ-`H1%5z>onV openembedded-core-50b208612945c638e3f4965ebf90ade4aac5b636/bitbake/doc/manual/html.cssUT8MX[sܶ~ׯHIk{ɗX&SYwTۍz:?`Ip :L_;ɥ9n"X$sp\TTR)R_O&yl{VBxJXhot8{:pɘEW:K|_鸕f\^RɲYueMـc׳^߂78f۪6Lx/XD@Pɩln*JS3HVN+ah¤2xuB@\&B'Uqj=pܐγ8L\T\`_ n*rh ˗^xQa u~6ɥc cߓO5l,M;atdl@2|JcSg̛@k")TV>a)̕"Q" 3Soԃ -Ĕ9Ť! ho3Ph[$柨j|}^'94=\,LqYZvj:I@f2\6f&@"{gJFr|Sn.TB)pyD5T/#?ð67&7Յk@F˩ fa&ֵ[C1u 4+E咊ȺUi0,ݮ)=ۚӌ'5sOKefO v ŝ/$n[5l B5 RL> ;Th؄BN1 3J츼d5%Oih%79^?P itkl+Q~KVM" sBTdpve'{T(8Fl7OA6.TK㊢n2Ugxc5pV=Q 0'C.B{-v$e<[EmY'`ƭOwV?P# "fXBC3@jw"l >90\(jx-J-a6=yhY֊^j_n.D' \o%rYLgP 82$6& ]e*h7@!Vy[Gnv*F`S9Yx] *~\ayuAd跧c.5wwěp->0R+u~a L&\ 8%N f"b<~s*ڢ\ openembedded-core-50b208612945c638e3f4965ebf90ade4aac5b636/bitbake/doc/manual/usermanual.xmlUT8M}isF_W ;Ȓjճ%D;77o $ A9w%3sU,^9}>}OLB*?y}v:-!䧃R}%|SGѰHrr %0iQ%}ӝJ _mu:8*Q\?}{q&v:mw>8*>ŧ}^7Lrv-莚ɼq/Q1҃S7) ~8n4c7a<>M,Ļ(GaѼώ+oBglly=fse60(UƲ,*_⣀3hkDBFezTZe%Pxb}*"8F uZyżȎ,Ħ{' 1opCo{4ȱP2O`J,K\ZYL[_eTN\ ,Ѳ-nH,R+O#C|=xW|ثaʐ(8Y* ZH {GY4$r%K!VMX݄Ljڥσ*~RNd|_cc'X5&.Mg f:lm5nD#c3¢@fQ1%0x ṲMO<6O|>r(_";t gZ ڦ9R|[d 3]?MBh5/b 1ϱ|1rLS|@Ke5LD4axHp!@OOդJӄ~cVwk(˅}m`Y]j44Qs>MP{c1O&ԢX qCfa@>aY䬨$=T;JKk %L~J)gFy"!:GKLEɊ$_؇@>S vA {mYJE^Q$Q+R`bQ,Y67.kxkۊL7gnm6~l&ъ:>EduD  >9K$u”0KTm\`TdJZ!aؒ@ B4F'ָРo܃H"T[~=(aw{y4Nn.NN{q$v@؃: a`:v@ cjrm.,WX(T;Ȃ>!G M(' 4 TVVNEu"6< މ0 +x:"(Sh"U Y 6.!gqH̾qZM#h]~\/PU1$ۜUU|2?:WU-Cƭ~>~p?[ٽ~!~B#}sϖl!wG<[p>\b}?.  ~3Y}#vMhVnQ:}lNWe }yn ʳLح!W\ rUѣ Xb?*pz1ZVܥ&B! J,C osg{Rw,0cd6FJj.Kzv-}g 0cG[XS1t*6+ߓ RY643#xM.)Xmrw9au}& &\3m=JmMx]Uj;m hlKD(D_G`g*Ik q2vw:X Y] Y&ʴ^oaH$EH`ms<\tl-u@Jkh\;^iV}WPqc#ŭ.X}UY I .n᡻ʶq"\7]PC$i㢩,6KfX4P$A`)hH\_H-0Gsy!cyaI-p`zb92ʀ,XX28> (hiz2{È(H́OOO?ӳF6tmܠyleת1VV ׈~Q¢Ϧa8bq']qN3d(I㛄l[@6U{ɠ_7| SB,F׿|=:m)}ǣ,`{ĺI4i^J=/$vqB5`˫A f.*gjja_ r–NDM={wj,;?,s,ϝA J 1tE>SL@FoV~ |_fl 1}zgJJĺ_2'rQr}&b ъ*>4HAHcܥQ5I -̴r9!Sr|б&i43j^#KߏHeyIozo8w}]BQ{{vuy~1'm1(r,mEDi3LMC`ekrU[a<>a*t05nHQS2y2z(= cޠ?L/rr[s",sb}C/-eqgÞYڔj)0)F-bEa\f 2ȗB-y;|5k6_=yˆqAY%.|׿ Tu[` TRTnl$t4\8SW*h43,.0IXM -܂;DH [ &7Uv =l2A2¢y09`N&h)oYP-(LNBfY:&f_#2d QFYaWh=eWIM=< ;Ac ^߆Zs ԥ1+z<'ۈ'@'Xn! c!IPSFZZɹ j;24I@%ٿQjq!lI';̸+]= G1Z\bBMs䝚$Ve4ajOdvm)}%z&af%lf2VͩDux ؿpRd-٘+q&;@63',X/H0L<NGiS>"n)M8ͅ!R(J3JO0 Th|d ime m˼k0ih:V`l/;QzsoeuNk&Y'"*'?Cd 3d7ϧ@8ښ(#7 v8W92 co jH!a9ąF 6lY W5M?V\aL֘\m AZO0Yw#abWmZ.PG+2bv+.yCyGL9jCrAÎʦ59-Hc!L3fGlM[M3k5g*݁.m1;)_鷺Nʜb׻aL +}TfU M$Q|M38XZ)> #n#1H|BvT1Xe8 <}*2x#}O?'/@?eYJͪH{`mǩ㤢+U3$I |mgAOs컭pn6FBW|.z!L@w6Lة tk0X8FFوs$2_j) DB?qń]>7#8RcRWVADP&H1=ա aDXC؅#*$h3 )ӗ$Ue dHiQu HmL%FV/]Ҝm o33|ߦ3A?qd^w\3)kv KLP 2wH9UDup^+5K?M,ZާQwJnF_=Kk}z{4㔎֛BimOteO-qyĆڿXWx]5= M- 0+$&db!K8g 9wPbWwO_6Y, 0$Y?мQ>PLTg:4%"ggB \g|PpOUrрaji(Yd JpiQjuq &{b 3sLځl7f5#*SھtFUj~՚6ͥSV_}u3Plڧ)hU!pL99n_=pL @j(ai:]<2+piN4b]ӱQxZ 8eZɭ5[Yv0e${?W'1l2lI˲&`ܹJwZT{4K6k|k k'<ĞU+L;9# ~:zohol]?GPژ p%0XQfQJ6ͷ}Jv3<>)pr)ώ^[s'Wyt G;3泄8MZ&knWY8LyS(hD1I̊$j"y m&iƍ$ph'z:3O}Ɇ 7 !*, }MSv_[]VYpb#5{bxe!Db$2aCw-2_n3(7t7-Z]0(DP<)V}|A.F*H4MykN!V;<G)gVuBHsM rF p4]܏1GM᎑d:/_L(4\^^.DGxSCdtKW$bu]Z]]\6>^yV+u6t̿ 4@x8s)(RgvCd  h^Ũ$w g ?W-IJ;#2n0WʅުZ62TqT}1s%{qӐ$NF&Upjec$.Xd+E/g;gWQΗxJ;Yt(~ŋ8zw=]2oR+軫 0f|L)d׺^O{4կk; Y~|U}ܼ²i86Ci8q@PT ?l{^ iVR5-v˺]a2jlX`!# XFKdk$m<ݪ#;t`Y;LӨ ;/*z^PbǛ,w'U9Y]VۍI.t;oô`Ub lr]^ˤ.*D.6!(W(W,tɛh:Mzp5 2ZDc6m.̆~`2`e|.(2}y !忂)+YՆH;/8[i@l-YMABD?7NVQ`37+)yh+*i+'\\\ϝ^1mɄj*kM5^cApKj<ƕyC!@FYynӂ›8ځC&&7 wݿZzత\%-lwc쮲Ei2u4[&"mVmLUM/QHƪ}LunlEF:8h'ZJX*c}iZ #uG;|+TJW,O+SL.XVoq}n 1PP;wOQ O4D6B$A7?3H)3:-zP?OR:S$nB'(myOڎ(7 X"qVe߳C?4%f57(^K˩$ϲSR2T@mr-2w9]8B|'Ôi ]8_Gٻs49? vU6߶~Y 9l\e5?BdMvZJ"¬v8Ee= Jy3ꭤW?pe\}E`PFZ]q^FfߐM̳Sl"qR^م|A.pD@|&\bmCܙ{,zD)؉FZV)ŷ9]x_y-v/f( 3pŲ$ />3dҧcjcsR`.f% v9!673Wж;52D)ˍ&b&jUgK~.@ڰU v]{xC#F$YYhQOcn]x\+؋}>-_#o#"XqJܼuܝ@vCKZ <ܧ4-{vI֠SKaO<*Q Go.nwW-eJs F[# *TxvIƤ'ir4Mot!goN߿;gjIO*ׯiiť -OL85mB+?sbSxC9zkSc~nj,IE M-׌JkCB)Ir>zos9"i8 fEܵk,MI.[% MzMioU`3y%vD&P hB@IȌ) Va&Z"T&SoAw^\eܽ©),B[9JU/P +M-.I#Y*H ?k.:dVC&g-HZ.ΘmYڂ.f{7PNIgՠv{B5y:7cHߌXmmaCnQ:hȗ*Tkm1`J{$ KrVҵ;>y[Ƿ#L|jF'cmTpxK`T~R>჎-mü zN:ݞN}Y9D+溾*9 N]wڿt? )f fg؜k hɚstCE%\@l.3 OD».9ӈӁ.FlhmFD*yXO8q>miHVR'V#AwWHl#!UF:8RC«a=;=N+Uo8ܡva7o,"gHÐv CmwkQei+ǰ zz}099ݮmvh3h(o-Icg76S D9EЌxƀlo;H?uUVߓh\Vre뀿T;N׮PcA" Nȡ#[/Wam'HQkveԐРsj$Ŗ$`f!a"j'{c4y01 t8UfhϺd 59K]J-I8֖B򦲠=2K: U2Ku_o0Bb"w5|忈mzܵ-k|_FY7 <5jJSlFBP;Qpa%>`.8 owY%\-e'vu%]ž^+i0x,S}1CMwKGЉ SJ !]uaP>O "wwV+Ѫd;{x;2x\$3K:Lp 2ʌ7nWi*\ge)ڲ/ky' 4 T [8WrǗEW\mqEN5lT%&ccLCmjXnV_ Vg0uԜuy9PyA$H[#4u@ (3zFG3]-= SI[2RM1 *(GSA]:glO0=Jsu`ELѨ@g`'Lz"L4<\wuwvml`Kջ MsyC47kYn.n.Ta c /t*PK |4>G openembedded-core-50b208612945c638e3f4965ebf90ade4aac5b636/bitbake/lib/UT8MPK |4>J openembedded-core-50b208612945c638e3f4965ebf90ade4aac5b636/bitbake/lib/bb/UT8MPK |4>lrP openembedded-core-50b208612945c638e3f4965ebf90ade4aac5b636/bitbake/lib/bb/COW.pyUT8MXmo"9ί0%'l26o D(7B@_6M~Uq7 I9ݎ&vUrѪSG?u~hfAk?}0-1(Ry[HZs1HX+Pp) BXH`%#a: k`PfQ8,WL_-@;䐛 Sm8E24Op|xWFs Se"9%&z$ k% 8RZFE*E5%*A8h. ļ|/

>`} s6(OAF&9(Z;1ӥX7V*|:=z4jBD5y4@p%_Xs(VfU+ǝrÏpTTzNqHBV.synׄ'n3`+h(͒ &x.L wrCY Q0KDc\lf[ Znkٛ%gc뮉8XBgu[bcͫ 6 ۝˯ml/#)鷣 BzB<HWKx֫$vyo9p)[4M7CvSߓݔ)dEǑ,eHQZ6 ]o_;OƖٹ?k܏h)-tqEbUݖ8^p3YZvvS ܐa i4H)%wK[)-}RO1H*a&J96 tT2r*0#?''WkM MYFyM2];5m¹oq]b3 gMox7hol