diff options
-rw-r--r-- | handbook/extendpoky.xml | 95 | ||||
-rw-r--r-- | meta/classes/base.bbclass | 102 | ||||
-rw-r--r-- | meta/classes/insane.bbclass | 2 | ||||
-rw-r--r-- | meta/classes/package.bbclass | 20 | ||||
-rw-r--r-- | meta/classes/package_deb.bbclass | 4 | ||||
-rw-r--r-- | meta/classes/package_ipk.bbclass | 4 | ||||
-rw-r--r-- | meta/classes/packagedata.bbclass | 82 | ||||
-rw-r--r-- | meta/packages/libidl/libidl-native_0.8.12.bb (renamed from meta/packages/libidl/libidl-native_0.8.3.bb) | 0 | ||||
-rw-r--r-- | meta/packages/libidl/libidl_0.8.12.bb (renamed from meta/packages/libidl/libidl_0.8.3.bb) | 0 | ||||
-rw-r--r-- | meta/packages/xorg-xserver/xserver-xf86-dri-lite_1.6.0.bb | 15 |
10 files changed, 205 insertions, 119 deletions
diff --git a/handbook/extendpoky.xml b/handbook/extendpoky.xml index f259d2ef0a..fa789d4afb 100644 --- a/handbook/extendpoky.xml +++ b/handbook/extendpoky.xml | |||
@@ -26,7 +26,15 @@ | |||
26 | </para> | 26 | </para> |
27 | 27 | ||
28 | <para> | 28 | <para> |
29 | The simplest way to add a new package is to base it on a similar | 29 | Before writing a recipe from scratch it is often useful to check |
30 | someone else hasn't written one already. OpenEmbedded is a good place | ||
31 | to look as it has a wider scope and hence a wider range of packages. | ||
32 | Poky aims to be compatible with OpenEmbedded so most recipes should | ||
33 | just work in Poky. | ||
34 | </para> | ||
35 | |||
36 | <para> | ||
37 | For new packages, the simplest way to add a recipe is to base it on a similar | ||
30 | pre-existing recipe. There are some examples below of how to add | 38 | pre-existing recipe. There are some examples below of how to add |
31 | standard types of packages: | 39 | standard types of packages: |
32 | </para> | 40 | </para> |
@@ -556,6 +564,37 @@ BBFILE_PRIORITY_extras = "5"</literallayout> | |||
556 | </para> | 564 | </para> |
557 | </section> | 565 | </section> |
558 | 566 | ||
567 | <section id="usingpoky-changes-supplement"> | ||
568 | <title>Supplementry Metadata Repositories</title> | ||
569 | |||
570 | <para> | ||
571 | Often when developing a project based on Poky there will be components | ||
572 | that are not ready for public consumption for whatever reason. By making | ||
573 | use of the collections mechanism and other functionality within Poky, it | ||
574 | is possible to have a public repository which is supplemented by a private | ||
575 | one just containing the pieces that need to be kept private. | ||
576 | </para> | ||
577 | <para> | ||
578 | The usual approach with these is to create a separate git repository called | ||
579 | "meta-prvt-XXX" which is checked out alongside the other meta-* | ||
580 | directories included in Poky. Under this directory there can be several | ||
581 | different directories such as classes, conf and packages which all | ||
582 | function as per the usual Poky directory structure. | ||
583 | </para> | ||
584 | <para> | ||
585 | If extra meta-* directories are found, Poky will automatically add them | ||
586 | into the BBPATH variable so the conf and class files contained there | ||
587 | are found. If a file called poky-extra-environment is found within the | ||
588 | meta-* directory, this will be sourced as the environment is setup, | ||
589 | allowing certain configuration to be overridden such as the location of the | ||
590 | local.conf.sample file that is used. | ||
591 | </para> | ||
592 | <para> | ||
593 | Note that at present, BBFILES is not automatically changed and this needs | ||
594 | to be adjusted to find files in the packages/ directory. Usually a custom | ||
595 | local.conf.sample file will be used to handle this instead. | ||
596 | </para> | ||
597 | </section> | ||
559 | 598 | ||
560 | <section id='usingpoky-changes-commits'> | 599 | <section id='usingpoky-changes-commits'> |
561 | <title>Committing Changes</title> | 600 | <title>Committing Changes</title> |
@@ -564,8 +603,8 @@ BBFILE_PRIORITY_extras = "5"</literallayout> | |||
564 | Modifications to Poky are often managed under some kind of source | 603 | Modifications to Poky are often managed under some kind of source |
565 | revision control system. The policy for committing to such systems | 604 | revision control system. The policy for committing to such systems |
566 | is important as some simple policy can significantly improve | 605 | is important as some simple policy can significantly improve |
567 | usability. The tips below are based on the policy that OpenedHand | 606 | usability. The tips below are based on the policy followed for the |
568 | uses for commits to Poky. | 607 | Poky core. |
569 | </para> | 608 | </para> |
570 | 609 | ||
571 | <para> | 610 | <para> |
@@ -622,6 +661,56 @@ BBFILE_PRIORITY_extras = "5"</literallayout> | |||
622 | upgradable packages in all cases. | 661 | upgradable packages in all cases. |
623 | </para> | 662 | </para> |
624 | </section> | 663 | </section> |
664 | <section id='usingpoky-changes-collaborate'> | ||
665 | <title>Using Poky in a Team Environment</title> | ||
666 | |||
667 | <para> | ||
668 | It may not be immediately clear how Poky can work in a team environment, | ||
669 | or scale to a large team of developers. The specifics of any situation | ||
670 | will determine the best solution and poky offers immense flexibility in | ||
671 | that aspect but there are some practises that experience has shown to work | ||
672 | well. | ||
673 | </para> | ||
674 | |||
675 | <para> | ||
676 | The core component of any development effort with Poky is often an | ||
677 | automated build testing framework and image generation process. This | ||
678 | can be used to check that the metadata is buildable, highlight when | ||
679 | commits break the builds and provide up to date images allowing people | ||
680 | to test the end result and use them as a base platform for further | ||
681 | development. Experience shows that buildbot is a good fit for this role | ||
682 | and that it works well to configure it to make two types of build - | ||
683 | incremental builds and 'from scratch'/full builds. The incremental builds | ||
684 | can be tied to a commit hook which triggers them each time a commit is | ||
685 | made to the metadata and are a useful acid test of whether a given commit | ||
686 | breaks the build in some serious way. They catch lots of simple errors | ||
687 | and whilst they won't catch 100% of failures, the tests are fast so | ||
688 | developers can get feedback on their changes quickly. The full builds | ||
689 | are builds that build everything from the ground up and test everything. | ||
690 | They usually happen at preset times such as at night when the machine | ||
691 | load isn't high from the incremental builds. | ||
692 | </para> | ||
693 | |||
694 | <para> | ||
695 | Most teams have pieces of software undergoing active development. It is of | ||
696 | significant benefit to put these under control of a source control system | ||
697 | compatible with Poky such as git or svn. The autobuilder can then be set to | ||
698 | pull the latest revisions of these packages so the latest commits get tested | ||
699 | by the builds allowing any issues to be highlighted quickly. Poky easily | ||
700 | supports configurations where there is both a stable known good revision | ||
701 | and a floating revision to test. Poky can also only take changes from specific | ||
702 | source control branches giving another way it can be used to track/test only | ||
703 | specified changes. | ||
704 | </para> | ||
705 | <para> | ||
706 | Perhaps the hardest part of setting this up is the policy that surrounds | ||
707 | the different source control systems, be them software projects or the Poky | ||
708 | metadata itself. The circumstances will be different in each case but this is | ||
709 | one of Poky's advantages - the system itself doesn't force any particular policy | ||
710 | unlike a lot of build systems, allowing the best policy to be chosen for the | ||
711 | circumstances. | ||
712 | </para> | ||
713 | </section> | ||
625 | </section> | 714 | </section> |
626 | 715 | ||
627 | <section id='usingpoky-modifing-packages'> | 716 | <section id='usingpoky-modifing-packages'> |
diff --git a/meta/classes/base.bbclass b/meta/classes/base.bbclass index b7eb62c01a..e801fd12a9 100644 --- a/meta/classes/base.bbclass +++ b/meta/classes/base.bbclass | |||
@@ -946,108 +946,6 @@ addtask build after do_populate_staging | |||
946 | do_build = "" | 946 | do_build = "" |
947 | do_build[func] = "1" | 947 | do_build[func] = "1" |
948 | 948 | ||
949 | # Functions that update metadata based on files outputted | ||
950 | # during the build process. | ||
951 | |||
952 | def explode_deps(s): | ||
953 | r = [] | ||
954 | l = s.split() | ||
955 | flag = False | ||
956 | for i in l: | ||
957 | if i[0] == '(': | ||
958 | flag = True | ||
959 | j = [] | ||
960 | if flag: | ||
961 | j.append(i) | ||
962 | if i.endswith(')'): | ||
963 | flag = False | ||
964 | r[-1] += ' ' + ' '.join(j) | ||
965 | else: | ||
966 | r.append(i) | ||
967 | return r | ||
968 | |||
969 | def packaged(pkg, d): | ||
970 | import os, bb | ||
971 | return os.access(get_subpkgedata_fn(pkg, d) + '.packaged', os.R_OK) | ||
972 | |||
973 | def read_pkgdatafile(fn): | ||
974 | pkgdata = {} | ||
975 | |||
976 | def decode(str): | ||
977 | import codecs | ||
978 | c = codecs.getdecoder("string_escape") | ||
979 | return c(str)[0] | ||
980 | |||
981 | import os | ||
982 | if os.access(fn, os.R_OK): | ||
983 | import re | ||
984 | f = file(fn, 'r') | ||
985 | lines = f.readlines() | ||
986 | f.close() | ||
987 | r = re.compile("([^:]+):\s*(.*)") | ||
988 | for l in lines: | ||
989 | m = r.match(l) | ||
990 | if m: | ||
991 | pkgdata[m.group(1)] = decode(m.group(2)) | ||
992 | |||
993 | return pkgdata | ||
994 | |||
995 | def get_subpkgedata_fn(pkg, d): | ||
996 | import bb, os | ||
997 | archs = bb.data.expand("${PACKAGE_ARCHS}", d).split(" ") | ||
998 | archs.reverse() | ||
999 | pkgdata = bb.data.expand('${TMPDIR}/pkgdata/', d) | ||
1000 | targetdir = bb.data.expand('${TARGET_VENDOR}-${TARGET_OS}/runtime/', d) | ||
1001 | for arch in archs: | ||
1002 | fn = pkgdata + arch + targetdir + pkg | ||
1003 | if os.path.exists(fn): | ||
1004 | return fn | ||
1005 | return bb.data.expand('${PKGDATA_DIR}/runtime/%s' % pkg, d) | ||
1006 | |||
1007 | def has_subpkgdata(pkg, d): | ||
1008 | import bb, os | ||
1009 | return os.access(get_subpkgedata_fn(pkg, d), os.R_OK) | ||
1010 | |||
1011 | def read_subpkgdata(pkg, d): | ||
1012 | import bb | ||
1013 | return read_pkgdatafile(get_subpkgedata_fn(pkg, d)) | ||
1014 | |||
1015 | def has_pkgdata(pn, d): | ||
1016 | import bb, os | ||
1017 | fn = bb.data.expand('${PKGDATA_DIR}/%s' % pn, d) | ||
1018 | return os.access(fn, os.R_OK) | ||
1019 | |||
1020 | def read_pkgdata(pn, d): | ||
1021 | import bb | ||
1022 | fn = bb.data.expand('${PKGDATA_DIR}/%s' % pn, d) | ||
1023 | return read_pkgdatafile(fn) | ||
1024 | |||
1025 | python read_subpackage_metadata () { | ||
1026 | import bb | ||
1027 | data = read_pkgdata(bb.data.getVar('PN', d, 1), d) | ||
1028 | |||
1029 | for key in data.keys(): | ||
1030 | bb.data.setVar(key, data[key], d) | ||
1031 | |||
1032 | for pkg in bb.data.getVar('PACKAGES', d, 1).split(): | ||
1033 | sdata = read_subpkgdata(pkg, d) | ||
1034 | for key in sdata.keys(): | ||
1035 | bb.data.setVar(key, sdata[key], d) | ||
1036 | } | ||
1037 | |||
1038 | |||
1039 | # | ||
1040 | # Collapse FOO_pkg variables into FOO | ||
1041 | # | ||
1042 | def read_subpkgdata_dict(pkg, d): | ||
1043 | import bb | ||
1044 | ret = {} | ||
1045 | subd = read_pkgdatafile(get_subpkgedata_fn(pkg, d)) | ||
1046 | for var in subd: | ||
1047 | newvar = var.replace("_" + pkg, "") | ||
1048 | ret[newvar] = subd[var] | ||
1049 | return ret | ||
1050 | |||
1051 | # Make sure MACHINE isn't exported | 949 | # Make sure MACHINE isn't exported |
1052 | # (breaks binutils at least) | 950 | # (breaks binutils at least) |
1053 | MACHINE[unexport] = "1" | 951 | MACHINE[unexport] = "1" |
diff --git a/meta/classes/insane.bbclass b/meta/classes/insane.bbclass index 1f136d78ce..2b0c284775 100644 --- a/meta/classes/insane.bbclass +++ b/meta/classes/insane.bbclass | |||
@@ -439,7 +439,7 @@ def package_qa_check_rdepends(pkg, workdir, d): | |||
439 | bb.data.update_data(localdata) | 439 | bb.data.update_data(localdata) |
440 | 440 | ||
441 | # Now check the RDEPENDS | 441 | # Now check the RDEPENDS |
442 | rdepends = explode_deps(bb.data.getVar('RDEPENDS', localdata, True) or "") | 442 | rdepends = bb.utils.explode_deps(bb.data.getVar('RDEPENDS', localdata, True) or "") |
443 | 443 | ||
444 | 444 | ||
445 | # Now do the sanity check!!! | 445 | # Now do the sanity check!!! |
diff --git a/meta/classes/package.bbclass b/meta/classes/package.bbclass index 282315567f..df870142f1 100644 --- a/meta/classes/package.bbclass +++ b/meta/classes/package.bbclass | |||
@@ -2,6 +2,8 @@ | |||
2 | # General packaging help functions | 2 | # General packaging help functions |
3 | # | 3 | # |
4 | 4 | ||
5 | inherit packagedata | ||
6 | |||
5 | PKGDEST = "${WORKDIR}/install" | 7 | PKGDEST = "${WORKDIR}/install" |
6 | 8 | ||
7 | def legitimize_package_name(s): | 9 | def legitimize_package_name(s): |
@@ -208,7 +210,7 @@ def runtime_mapping_rename (varname, d): | |||
208 | #bb.note("%s before: %s" % (varname, bb.data.getVar(varname, d, 1))) | 210 | #bb.note("%s before: %s" % (varname, bb.data.getVar(varname, d, 1))) |
209 | 211 | ||
210 | new_depends = [] | 212 | new_depends = [] |
211 | for depend in explode_deps(bb.data.getVar(varname, d, 1) or ""): | 213 | for depend in bb.utils.explode_deps(bb.data.getVar(varname, d, 1) or ""): |
212 | # Have to be careful with any version component of the depend | 214 | # Have to be careful with any version component of the depend |
213 | split_depend = depend.split(' (') | 215 | split_depend = depend.split(' (') |
214 | new_depend = get_package_mapping(split_depend[0].strip(), d) | 216 | new_depend = get_package_mapping(split_depend[0].strip(), d) |
@@ -438,7 +440,7 @@ python populate_packages () { | |||
438 | dangling_links[pkg].append(os.path.normpath(target)) | 440 | dangling_links[pkg].append(os.path.normpath(target)) |
439 | 441 | ||
440 | for pkg in package_list: | 442 | for pkg in package_list: |
441 | rdepends = explode_deps(bb.data.getVar('RDEPENDS_' + pkg, d, 1) or bb.data.getVar('RDEPENDS', d, 1) or "") | 443 | rdepends = bb.utils.explode_deps(bb.data.getVar('RDEPENDS_' + pkg, d, 1) or bb.data.getVar('RDEPENDS', d, 1) or "") |
442 | for l in dangling_links[pkg]: | 444 | for l in dangling_links[pkg]: |
443 | found = False | 445 | found = False |
444 | bb.debug(1, "%s contains dangling link %s" % (pkg, l)) | 446 | bb.debug(1, "%s contains dangling link %s" % (pkg, l)) |
@@ -868,7 +870,7 @@ python package_do_pkgconfig () { | |||
868 | python read_shlibdeps () { | 870 | python read_shlibdeps () { |
869 | packages = bb.data.getVar('PACKAGES', d, 1).split() | 871 | packages = bb.data.getVar('PACKAGES', d, 1).split() |
870 | for pkg in packages: | 872 | for pkg in packages: |
871 | rdepends = explode_deps(bb.data.getVar('RDEPENDS_' + pkg, d, 0) or bb.data.getVar('RDEPENDS', d, 0) or "") | 873 | rdepends = bb.utils.explode_deps(bb.data.getVar('RDEPENDS_' + pkg, d, 0) or bb.data.getVar('RDEPENDS', d, 0) or "") |
872 | for extension in ".shlibdeps", ".pcdeps", ".clilibdeps": | 874 | for extension in ".shlibdeps", ".pcdeps", ".clilibdeps": |
873 | depsfile = bb.data.expand("${PKGDEST}/" + pkg + extension, d) | 875 | depsfile = bb.data.expand("${PKGDEST}/" + pkg + extension, d) |
874 | if os.access(depsfile, os.R_OK): | 876 | if os.access(depsfile, os.R_OK): |
@@ -901,7 +903,7 @@ python package_depchains() { | |||
901 | def pkg_adddeprrecs(pkg, base, suffix, getname, depends, d): | 903 | def pkg_adddeprrecs(pkg, base, suffix, getname, depends, d): |
902 | 904 | ||
903 | #bb.note('depends for %s is %s' % (base, depends)) | 905 | #bb.note('depends for %s is %s' % (base, depends)) |
904 | rreclist = explode_deps(bb.data.getVar('RRECOMMENDS_' + pkg, d, 1) or bb.data.getVar('RRECOMMENDS', d, 1) or "") | 906 | rreclist = bb.utils.explode_deps(bb.data.getVar('RRECOMMENDS_' + pkg, d, 1) or bb.data.getVar('RRECOMMENDS', d, 1) or "") |
905 | 907 | ||
906 | for depend in depends: | 908 | for depend in depends: |
907 | if depend.find('-native') != -1 or depend.find('-cross') != -1 or depend.startswith('virtual/'): | 909 | if depend.find('-native') != -1 or depend.find('-cross') != -1 or depend.startswith('virtual/'): |
@@ -922,7 +924,7 @@ python package_depchains() { | |||
922 | def pkg_addrrecs(pkg, base, suffix, getname, rdepends, d): | 924 | def pkg_addrrecs(pkg, base, suffix, getname, rdepends, d): |
923 | 925 | ||
924 | #bb.note('rdepends for %s is %s' % (base, rdepends)) | 926 | #bb.note('rdepends for %s is %s' % (base, rdepends)) |
925 | rreclist = explode_deps(bb.data.getVar('RRECOMMENDS_' + pkg, d, 1) or bb.data.getVar('RRECOMMENDS', d, 1) or "") | 927 | rreclist = bb.utils.explode_deps(bb.data.getVar('RRECOMMENDS_' + pkg, d, 1) or bb.data.getVar('RRECOMMENDS', d, 1) or "") |
926 | 928 | ||
927 | for depend in rdepends: | 929 | for depend in rdepends: |
928 | if depend.find('virtual-locale-') != -1: | 930 | if depend.find('virtual-locale-') != -1: |
@@ -946,15 +948,15 @@ python package_depchains() { | |||
946 | list.append(dep) | 948 | list.append(dep) |
947 | 949 | ||
948 | depends = [] | 950 | depends = [] |
949 | for dep in explode_deps(bb.data.getVar('DEPENDS', d, 1) or ""): | 951 | for dep in bb.utils.explode_deps(bb.data.getVar('DEPENDS', d, 1) or ""): |
950 | add_dep(depends, dep) | 952 | add_dep(depends, dep) |
951 | 953 | ||
952 | rdepends = [] | 954 | rdepends = [] |
953 | for dep in explode_deps(bb.data.getVar('RDEPENDS', d, 1) or ""): | 955 | for dep in bb.utils.explode_deps(bb.data.getVar('RDEPENDS', d, 1) or ""): |
954 | add_dep(rdepends, dep) | 956 | add_dep(rdepends, dep) |
955 | 957 | ||
956 | for pkg in packages.split(): | 958 | for pkg in packages.split(): |
957 | for dep in explode_deps(bb.data.getVar('RDEPENDS_' + pkg, d, 1) or ""): | 959 | for dep in bb.utils.explode_deps(bb.data.getVar('RDEPENDS_' + pkg, d, 1) or ""): |
958 | add_dep(rdepends, dep) | 960 | add_dep(rdepends, dep) |
959 | 961 | ||
960 | #bb.note('rdepends is %s' % rdepends) | 962 | #bb.note('rdepends is %s' % rdepends) |
@@ -987,7 +989,7 @@ python package_depchains() { | |||
987 | pkg_addrrecs(pkg, base, suffix, func, rdepends, d) | 989 | pkg_addrrecs(pkg, base, suffix, func, rdepends, d) |
988 | else: | 990 | else: |
989 | rdeps = [] | 991 | rdeps = [] |
990 | for dep in explode_deps(bb.data.getVar('RDEPENDS_' + base, d, 1) or bb.data.getVar('RDEPENDS', d, 1) or ""): | 992 | for dep in bb.utils.explode_deps(bb.data.getVar('RDEPENDS_' + base, d, 1) or bb.data.getVar('RDEPENDS', d, 1) or ""): |
991 | add_dep(rdeps, dep) | 993 | add_dep(rdeps, dep) |
992 | pkg_addrrecs(pkg, base, suffix, func, rdeps, d) | 994 | pkg_addrrecs(pkg, base, suffix, func, rdeps, d) |
993 | } | 995 | } |
diff --git a/meta/classes/package_deb.bbclass b/meta/classes/package_deb.bbclass index 28e67fcc9b..d90939fdb6 100644 --- a/meta/classes/package_deb.bbclass +++ b/meta/classes/package_deb.bbclass | |||
@@ -194,9 +194,9 @@ python do_package_deb () { | |||
194 | 194 | ||
195 | bb.build.exec_func("mapping_rename_hook", localdata) | 195 | bb.build.exec_func("mapping_rename_hook", localdata) |
196 | 196 | ||
197 | rdepends = explode_deps(unicode(bb.data.getVar("RDEPENDS", localdata, 1) or "")) | 197 | rdepends = bb.utils.explode_deps(unicode(bb.data.getVar("RDEPENDS", localdata, 1) or "")) |
198 | rdepends = [dep for dep in rdepends if not '*' in dep] | 198 | rdepends = [dep for dep in rdepends if not '*' in dep] |
199 | rrecommends = explode_deps(unicode(bb.data.getVar("RRECOMMENDS", localdata, 1) or "")) | 199 | rrecommends = bb.utils.explode_deps(unicode(bb.data.getVar("RRECOMMENDS", localdata, 1) or "")) |
200 | rrecommends = [rec for rec in rrecommends if not '*' in rec] | 200 | rrecommends = [rec for rec in rrecommends if not '*' in rec] |
201 | rsuggests = (unicode(bb.data.getVar("RSUGGESTS", localdata, 1) or "")).split() | 201 | rsuggests = (unicode(bb.data.getVar("RSUGGESTS", localdata, 1) or "")).split() |
202 | rprovides = (unicode(bb.data.getVar("RPROVIDES", localdata, 1) or "")).split() | 202 | rprovides = (unicode(bb.data.getVar("RPROVIDES", localdata, 1) or "")).split() |
diff --git a/meta/classes/package_ipk.bbclass b/meta/classes/package_ipk.bbclass index c4f53046f5..1aa2c814bb 100644 --- a/meta/classes/package_ipk.bbclass +++ b/meta/classes/package_ipk.bbclass | |||
@@ -235,8 +235,8 @@ python do_package_ipk () { | |||
235 | 235 | ||
236 | bb.build.exec_func("mapping_rename_hook", localdata) | 236 | bb.build.exec_func("mapping_rename_hook", localdata) |
237 | 237 | ||
238 | rdepends = explode_deps(bb.data.getVar("RDEPENDS", localdata, 1) or "") | 238 | rdepends = bb.utils.explode_deps(bb.data.getVar("RDEPENDS", localdata, 1) or "") |
239 | rrecommends = explode_deps(bb.data.getVar("RRECOMMENDS", localdata, 1) or "") | 239 | rrecommends = bb.utils.explode_deps(bb.data.getVar("RRECOMMENDS", localdata, 1) or "") |
240 | rsuggests = (bb.data.getVar("RSUGGESTS", localdata, 1) or "").split() | 240 | rsuggests = (bb.data.getVar("RSUGGESTS", localdata, 1) or "").split() |
241 | rprovides = (bb.data.getVar("RPROVIDES", localdata, 1) or "").split() | 241 | rprovides = (bb.data.getVar("RPROVIDES", localdata, 1) or "").split() |
242 | rreplaces = (bb.data.getVar("RREPLACES", localdata, 1) or "").split() | 242 | rreplaces = (bb.data.getVar("RREPLACES", localdata, 1) or "").split() |
diff --git a/meta/classes/packagedata.bbclass b/meta/classes/packagedata.bbclass new file mode 100644 index 0000000000..c9d64d6da2 --- /dev/null +++ b/meta/classes/packagedata.bbclass | |||
@@ -0,0 +1,82 @@ | |||
1 | def packaged(pkg, d): | ||
2 | import os, bb | ||
3 | return os.access(get_subpkgedata_fn(pkg, d) + '.packaged', os.R_OK) | ||
4 | |||
5 | def read_pkgdatafile(fn): | ||
6 | pkgdata = {} | ||
7 | |||
8 | def decode(str): | ||
9 | import codecs | ||
10 | c = codecs.getdecoder("string_escape") | ||
11 | return c(str)[0] | ||
12 | |||
13 | import os | ||
14 | if os.access(fn, os.R_OK): | ||
15 | import re | ||
16 | f = file(fn, 'r') | ||
17 | lines = f.readlines() | ||
18 | f.close() | ||
19 | r = re.compile("([^:]+):\s*(.*)") | ||
20 | for l in lines: | ||
21 | m = r.match(l) | ||
22 | if m: | ||
23 | pkgdata[m.group(1)] = decode(m.group(2)) | ||
24 | |||
25 | return pkgdata | ||
26 | |||
27 | def get_subpkgedata_fn(pkg, d): | ||
28 | import bb, os | ||
29 | archs = bb.data.expand("${PACKAGE_ARCHS}", d).split(" ") | ||
30 | archs.reverse() | ||
31 | pkgdata = bb.data.expand('${TMPDIR}/pkgdata/', d) | ||
32 | targetdir = bb.data.expand('${TARGET_VENDOR}-${TARGET_OS}/runtime/', d) | ||
33 | for arch in archs: | ||
34 | fn = pkgdata + arch + targetdir + pkg | ||
35 | if os.path.exists(fn): | ||
36 | return fn | ||
37 | return bb.data.expand('${PKGDATA_DIR}/runtime/%s' % pkg, d) | ||
38 | |||
39 | def has_subpkgdata(pkg, d): | ||
40 | import bb, os | ||
41 | return os.access(get_subpkgedata_fn(pkg, d), os.R_OK) | ||
42 | |||
43 | def read_subpkgdata(pkg, d): | ||
44 | import bb | ||
45 | return read_pkgdatafile(get_subpkgedata_fn(pkg, d)) | ||
46 | |||
47 | def has_pkgdata(pn, d): | ||
48 | import bb, os | ||
49 | fn = bb.data.expand('${PKGDATA_DIR}/%s' % pn, d) | ||
50 | return os.access(fn, os.R_OK) | ||
51 | |||
52 | def read_pkgdata(pn, d): | ||
53 | import bb | ||
54 | fn = bb.data.expand('${PKGDATA_DIR}/%s' % pn, d) | ||
55 | return read_pkgdatafile(fn) | ||
56 | |||
57 | python read_subpackage_metadata () { | ||
58 | import bb | ||
59 | data = read_pkgdata(bb.data.getVar('PN', d, 1), d) | ||
60 | |||
61 | for key in data.keys(): | ||
62 | bb.data.setVar(key, data[key], d) | ||
63 | |||
64 | for pkg in bb.data.getVar('PACKAGES', d, 1).split(): | ||
65 | sdata = read_subpkgdata(pkg, d) | ||
66 | for key in sdata.keys(): | ||
67 | bb.data.setVar(key, sdata[key], d) | ||
68 | } | ||
69 | |||
70 | |||
71 | # | ||
72 | # Collapse FOO_pkg variables into FOO | ||
73 | # | ||
74 | def read_subpkgdata_dict(pkg, d): | ||
75 | import bb | ||
76 | ret = {} | ||
77 | subd = read_pkgdatafile(get_subpkgedata_fn(pkg, d)) | ||
78 | for var in subd: | ||
79 | newvar = var.replace("_" + pkg, "") | ||
80 | ret[newvar] = subd[var] | ||
81 | return ret | ||
82 | |||
diff --git a/meta/packages/libidl/libidl-native_0.8.3.bb b/meta/packages/libidl/libidl-native_0.8.12.bb index ce59fd4b86..ce59fd4b86 100644 --- a/meta/packages/libidl/libidl-native_0.8.3.bb +++ b/meta/packages/libidl/libidl-native_0.8.12.bb | |||
diff --git a/meta/packages/libidl/libidl_0.8.3.bb b/meta/packages/libidl/libidl_0.8.12.bb index ac10a2422f..ac10a2422f 100644 --- a/meta/packages/libidl/libidl_0.8.3.bb +++ b/meta/packages/libidl/libidl_0.8.12.bb | |||
diff --git a/meta/packages/xorg-xserver/xserver-xf86-dri-lite_1.6.0.bb b/meta/packages/xorg-xserver/xserver-xf86-dri-lite_1.6.0.bb new file mode 100644 index 0000000000..8f5ed47d38 --- /dev/null +++ b/meta/packages/xorg-xserver/xserver-xf86-dri-lite_1.6.0.bb | |||
@@ -0,0 +1,15 @@ | |||
1 | require xserver-xf86-dri-lite.inc | ||
2 | |||
3 | PE = "1" | ||
4 | PR = "r0" | ||
5 | |||
6 | PROTO_DEPS += "xf86driproto" | ||
7 | |||
8 | SRC_URI += "file://nodolt.patch;patch=1 \ | ||
9 | file://libdri-xinerama-symbol.patch;patch=1 \ | ||
10 | file://xserver-boottime.patch;patch=1" | ||
11 | |||
12 | # Misc build failure for master HEAD | ||
13 | SRC_URI += "file://fix_open_max_preprocessor_error.patch;patch=1" | ||
14 | |||
15 | EXTRA_OECONF += "--enable-dri --enable-dri2" | ||