diff options
author | Richard Purdie <rpurdie@linux.intel.com> | 2010-08-05 14:16:59 +0100 |
---|---|---|
committer | Richard Purdie <rpurdie@linux.intel.com> | 2010-08-19 20:06:25 +0100 |
commit | 29ca8936493b2044c6926becca0ffcf3747b2528 (patch) | |
tree | 043b4b06a4a93c0c7a6bf1e76e7c546fd8c9a8a8 | |
parent | c28973c16047f6668edaeba1bef6d81c4a353c78 (diff) | |
download | poky-29ca8936493b2044c6926becca0ffcf3747b2528.tar.gz |
package.bbclass: Implement packaged-staging2
Signed-off-by: Richard Purdie <rpurdie@linux.intel.com>
-rw-r--r-- | meta/classes/package.bbclass | 71 |
1 files changed, 31 insertions, 40 deletions
diff --git a/meta/classes/package.bbclass b/meta/classes/package.bbclass index 9787a81fda..05456ce4c7 100644 --- a/meta/classes/package.bbclass +++ b/meta/classes/package.bbclass | |||
@@ -466,6 +466,8 @@ python populate_packages () { | |||
466 | } | 466 | } |
467 | populate_packages[dirs] = "${D}" | 467 | populate_packages[dirs] = "${D}" |
468 | 468 | ||
469 | PKGDESTWORK = "${WORKDIR}/pkgdata" | ||
470 | |||
469 | python emit_pkgdata() { | 471 | python emit_pkgdata() { |
470 | from glob import glob | 472 | from glob import glob |
471 | 473 | ||
@@ -486,17 +488,14 @@ python emit_pkgdata() { | |||
486 | 488 | ||
487 | packages = bb.data.getVar('PACKAGES', d, True) | 489 | packages = bb.data.getVar('PACKAGES', d, True) |
488 | pkgdest = bb.data.getVar('PKGDEST', d, 1) | 490 | pkgdest = bb.data.getVar('PKGDEST', d, 1) |
489 | pkgdatadir = bb.data.getVar('PKGDATA_DIR', d, True) | 491 | pkgdatadir = bb.data.getVar('PKGDESTWORK', d, True) |
490 | 492 | ||
491 | pstageactive = bb.data.getVar('PSTAGING_ACTIVE', d, True) | 493 | lf = bb.utils.lockfile(bb.data.expand("${PACKAGELOCK}", d)) |
492 | if pstageactive == "1": | ||
493 | lf = bb.utils.lockfile(bb.data.expand("${STAGING_DIR}/staging.lock", d)) | ||
494 | 494 | ||
495 | data_file = pkgdatadir + bb.data.expand("/${PN}" , d) | 495 | data_file = pkgdatadir + bb.data.expand("/${PN}" , d) |
496 | f = open(data_file, 'w') | 496 | f = open(data_file, 'w') |
497 | f.write("PACKAGES: %s\n" % packages) | 497 | f.write("PACKAGES: %s\n" % packages) |
498 | f.close() | 498 | f.close() |
499 | package_stagefile(data_file, d) | ||
500 | 499 | ||
501 | workdir = bb.data.getVar('WORKDIR', d, True) | 500 | workdir = bb.data.getVar('WORKDIR', d, True) |
502 | 501 | ||
@@ -522,9 +521,6 @@ python emit_pkgdata() { | |||
522 | write_if_exists(sf, pkg, 'pkg_prerm') | 521 | write_if_exists(sf, pkg, 'pkg_prerm') |
523 | sf.close() | 522 | sf.close() |
524 | 523 | ||
525 | package_stagefile(subdata_file, d) | ||
526 | #if pkgdatadir2: | ||
527 | # bb.copyfile(subdata_file, pkgdatadir2 + "/runtime/%s" % pkg) | ||
528 | 524 | ||
529 | allow_empty = bb.data.getVar('ALLOW_EMPTY_%s' % pkg, d, True) | 525 | allow_empty = bb.data.getVar('ALLOW_EMPTY_%s' % pkg, d, True) |
530 | if not allow_empty: | 526 | if not allow_empty: |
@@ -535,11 +531,10 @@ python emit_pkgdata() { | |||
535 | if g or allow_empty == "1": | 531 | if g or allow_empty == "1": |
536 | packagedfile = pkgdatadir + '/runtime/%s.packaged' % pkg | 532 | packagedfile = pkgdatadir + '/runtime/%s.packaged' % pkg |
537 | file(packagedfile, 'w').close() | 533 | file(packagedfile, 'w').close() |
538 | package_stagefile(packagedfile, d) | 534 | |
539 | if pstageactive == "1": | 535 | bb.utils.unlockfile(lf) |
540 | bb.utils.unlockfile(lf) | ||
541 | } | 536 | } |
542 | emit_pkgdata[dirs] = "${PKGDATA_DIR}/runtime" | 537 | emit_pkgdata[dirs] = "${PKGDESTWORK}/runtime" |
543 | 538 | ||
544 | ldconfig_postinst_fragment() { | 539 | ldconfig_postinst_fragment() { |
545 | if [ x"$D" = "x" ]; then | 540 | if [ x"$D" = "x" ]; then |
@@ -548,6 +543,7 @@ fi | |||
548 | } | 543 | } |
549 | 544 | ||
550 | SHLIBSDIR = "${STAGING_DIR_HOST}/shlibs" | 545 | SHLIBSDIR = "${STAGING_DIR_HOST}/shlibs" |
546 | SHLIBSWORKDIR = "${WORKDIR}/shlibs" | ||
551 | 547 | ||
552 | python package_do_shlibs() { | 548 | python package_do_shlibs() { |
553 | import re | 549 | import re |
@@ -573,11 +569,9 @@ python package_do_shlibs() { | |||
573 | pkgdest = bb.data.getVar('PKGDEST', d, True) | 569 | pkgdest = bb.data.getVar('PKGDEST', d, True) |
574 | 570 | ||
575 | shlibs_dir = bb.data.getVar('SHLIBSDIR', d, True) | 571 | shlibs_dir = bb.data.getVar('SHLIBSDIR', d, True) |
576 | bb.mkdirhier(shlibs_dir) | 572 | shlibswork_dir = bb.data.getVar('SHLIBSWORKDIR', d, True) |
577 | 573 | ||
578 | pstageactive = bb.data.getVar('PSTAGING_ACTIVE', d, True) | 574 | lf = bb.utils.lockfile(bb.data.expand("${PACKAGELOCK}", d)) |
579 | if pstageactive == "1": | ||
580 | lf = bb.utils.lockfile(bb.data.expand("${STAGING_DIR}/staging.lock", d)) | ||
581 | 575 | ||
582 | def linux_so(root, path, file): | 576 | def linux_so(root, path, file): |
583 | cmd = bb.data.getVar('OBJDUMP', d, True) + " -p " + os.path.join(root, file) + " 2>/dev/null" | 577 | cmd = bb.data.getVar('OBJDUMP', d, True) + " -p " + os.path.join(root, file) + " 2>/dev/null" |
@@ -676,22 +670,16 @@ python package_do_shlibs() { | |||
676 | darwin_so(root, dirs, file) | 670 | darwin_so(root, dirs, file) |
677 | elif os.access(path, os.X_OK) or lib_re.match(file): | 671 | elif os.access(path, os.X_OK) or lib_re.match(file): |
678 | linux_so(root, dirs, file) | 672 | linux_so(root, dirs, file) |
679 | shlibs_file = os.path.join(shlibs_dir, pkg + ".list") | 673 | shlibs_file = os.path.join(shlibswork_dir, pkg + ".list") |
680 | if os.path.exists(shlibs_file): | 674 | shver_file = os.path.join(shlibswork_dir, pkg + ".ver") |
681 | os.remove(shlibs_file) | ||
682 | shver_file = os.path.join(shlibs_dir, pkg + ".ver") | ||
683 | if os.path.exists(shver_file): | ||
684 | os.remove(shver_file) | ||
685 | if len(sonames): | 675 | if len(sonames): |
686 | fd = open(shlibs_file, 'w') | 676 | fd = open(shlibs_file, 'w') |
687 | for s in sonames: | 677 | for s in sonames: |
688 | fd.write(s + '\n') | 678 | fd.write(s + '\n') |
689 | fd.close() | 679 | fd.close() |
690 | package_stagefile(shlibs_file, d) | ||
691 | fd = open(shver_file, 'w') | 680 | fd = open(shver_file, 'w') |
692 | fd.write(ver + '\n') | 681 | fd.write(ver + '\n') |
693 | fd.close() | 682 | fd.close() |
694 | package_stagefile(shver_file, d) | ||
695 | if needs_ldconfig: | 683 | if needs_ldconfig: |
696 | bb.debug(1, 'adding ldconfig call to postinst for %s' % pkg) | 684 | bb.debug(1, 'adding ldconfig call to postinst for %s' % pkg) |
697 | postinst = bb.data.getVar('pkg_postinst_%s' % pkg, d, True) or bb.data.getVar('pkg_postinst', d, True) | 685 | postinst = bb.data.getVar('pkg_postinst_%s' % pkg, d, True) or bb.data.getVar('pkg_postinst', d, True) |
@@ -700,8 +688,7 @@ python package_do_shlibs() { | |||
700 | postinst += bb.data.getVar('ldconfig_postinst_fragment', d, True) | 688 | postinst += bb.data.getVar('ldconfig_postinst_fragment', d, True) |
701 | bb.data.setVar('pkg_postinst_%s' % pkg, postinst, d) | 689 | bb.data.setVar('pkg_postinst_%s' % pkg, postinst, d) |
702 | 690 | ||
703 | if pstageactive == "1": | 691 | bb.utils.unlockfile(lf) |
704 | bb.utils.unlockfile(lf) | ||
705 | 692 | ||
706 | shlib_provider = {} | 693 | shlib_provider = {} |
707 | list_re = re.compile('^(.*)\.list$') | 694 | list_re = re.compile('^(.*)\.list$') |
@@ -773,7 +760,7 @@ python package_do_pkgconfig () { | |||
773 | pkgdest = bb.data.getVar('PKGDEST', d, True) | 760 | pkgdest = bb.data.getVar('PKGDEST', d, True) |
774 | 761 | ||
775 | shlibs_dir = bb.data.getVar('SHLIBSDIR', d, True) | 762 | shlibs_dir = bb.data.getVar('SHLIBSDIR', d, True) |
776 | bb.mkdirhier(shlibs_dir) | 763 | shlibswork_dir = bb.data.getVar('SHLIBSWORKDIR', d, True) |
777 | 764 | ||
778 | pc_re = re.compile('(.*)\.pc$') | 765 | pc_re = re.compile('(.*)\.pc$') |
779 | var_re = re.compile('(.*)=(.*)') | 766 | var_re = re.compile('(.*)=(.*)') |
@@ -812,20 +799,15 @@ python package_do_pkgconfig () { | |||
812 | if hdr == 'Requires': | 799 | if hdr == 'Requires': |
813 | pkgconfig_needed[pkg] += exp.replace(',', ' ').split() | 800 | pkgconfig_needed[pkg] += exp.replace(',', ' ').split() |
814 | 801 | ||
815 | pstageactive = bb.data.getVar('PSTAGING_ACTIVE', d, True) | 802 | lf = bb.utils.lockfile(bb.data.expand("${PACKAGELOCK}", d)) |
816 | if pstageactive == "1": | ||
817 | lf = bb.utils.lockfile(bb.data.expand("${STAGING_DIR}/staging.lock", d)) | ||
818 | 803 | ||
819 | for pkg in packages.split(): | 804 | for pkg in packages.split(): |
820 | pkgs_file = os.path.join(shlibs_dir, pkg + ".pclist") | 805 | pkgs_file = os.path.join(shlibswork_dir, pkg + ".pclist") |
821 | if os.path.exists(pkgs_file): | ||
822 | os.remove(pkgs_file) | ||
823 | if pkgconfig_provided[pkg] != []: | 806 | if pkgconfig_provided[pkg] != []: |
824 | f = open(pkgs_file, 'w') | 807 | f = open(pkgs_file, 'w') |
825 | for p in pkgconfig_provided[pkg]: | 808 | for p in pkgconfig_provided[pkg]: |
826 | f.write('%s\n' % p) | 809 | f.write('%s\n' % p) |
827 | f.close() | 810 | f.close() |
828 | package_stagefile(pkgs_file, d) | ||
829 | 811 | ||
830 | for dir in [shlibs_dir]: | 812 | for dir in [shlibs_dir]: |
831 | if not os.path.exists(dir): | 813 | if not os.path.exists(dir): |
@@ -853,17 +835,13 @@ python package_do_pkgconfig () { | |||
853 | if found == False: | 835 | if found == False: |
854 | bb.note("couldn't find pkgconfig module '%s' in any package" % n) | 836 | bb.note("couldn't find pkgconfig module '%s' in any package" % n) |
855 | deps_file = os.path.join(pkgdest, pkg + ".pcdeps") | 837 | deps_file = os.path.join(pkgdest, pkg + ".pcdeps") |
856 | if os.path.exists(deps_file): | ||
857 | os.remove(deps_file) | ||
858 | if len(deps): | 838 | if len(deps): |
859 | fd = open(deps_file, 'w') | 839 | fd = open(deps_file, 'w') |
860 | for dep in deps: | 840 | for dep in deps: |
861 | fd.write(dep + '\n') | 841 | fd.write(dep + '\n') |
862 | fd.close() | 842 | fd.close() |
863 | package_stagefile(deps_file, d) | ||
864 | 843 | ||
865 | if pstageactive == "1": | 844 | bb.utils.unlockfile(lf) |
866 | bb.utils.unlockfile(lf) | ||
867 | } | 845 | } |
868 | 846 | ||
869 | python read_shlibdeps () { | 847 | python read_shlibdeps () { |
@@ -1023,9 +1001,22 @@ python package_do_package () { | |||
1023 | for f in (bb.data.getVar('PACKAGEFUNCS', d, True) or '').split(): | 1001 | for f in (bb.data.getVar('PACKAGEFUNCS', d, True) or '').split(): |
1024 | bb.build.exec_func(f, d) | 1002 | bb.build.exec_func(f, d) |
1025 | } | 1003 | } |
1026 | do_package[dirs] = "${D}" | 1004 | do_package[dirs] = "${SHLIBSWORKDIR} ${PKGDESTWORK} ${D}" |
1027 | addtask package before do_build after do_install | 1005 | addtask package before do_build after do_install |
1028 | 1006 | ||
1007 | PACKAGELOCK = "${STAGING_DIR}/package-output.lock" | ||
1008 | SSTATETASKS += "do_package" | ||
1009 | do_package[sstate-name] = "package" | ||
1010 | do_package[sstate-plaindirs] = "${PKGD} ${PKGDEST}" | ||
1011 | do_package[sstate-inputdirs] = "${PKGDESTWORK} ${SHLIBSWORKDIR}" | ||
1012 | do_package[sstate-outputdirs] = "${PKGDATA_DIR} ${SHLIBSDIR}" | ||
1013 | do_package[sstate-lockfile] = "${PACKAGELOCK}" | ||
1014 | |||
1015 | python do_package_setscene () { | ||
1016 | sstate_setscene(d) | ||
1017 | } | ||
1018 | addtask do_package_setscene | ||
1019 | |||
1029 | # Dummy task to mark when all packaging is complete | 1020 | # Dummy task to mark when all packaging is complete |
1030 | do_package_write () { | 1021 | do_package_write () { |
1031 | : | 1022 | : |