summaryrefslogtreecommitdiffstats
path: root/meta/classes/package.bbclass
diff options
context:
space:
mode:
authorRichard Purdie <richard.purdie@linuxfoundation.org>2014-07-07 18:41:03 +0100
committerRichard Purdie <richard.purdie@linuxfoundation.org>2014-07-10 17:38:31 +0100
commitdb788ac702d0f23811470fd93506e938953a1529 (patch)
treeeec85952baec9fcba99263a6b73d11d5e6d7ccb0 /meta/classes/package.bbclass
parenta20cc90cdc084cf11c0389be82d6ad9f3c388f76 (diff)
downloadpoky-db788ac702d0f23811470fd93506e938953a1529.tar.gz
package.bbclass: Improve shlibs pkgdata file format
Instead of having a .list file and a .ver file, place the version information into the .list file in a ":" delimited string. Also place the path to the library here, this can then be used to evaluate RPATHs in the shlib dependency code. Since the disk format has changed, the easiest way to avoid build failures in the same TMPDIR is to change the shlibs directory to shlibs2. sstate dependency code with ensure everything rebuilds. (From OE-Core rev: 8dd09b3ddc572a338b4a6f1d859b68b2b4482d00) Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/classes/package.bbclass')
-rw-r--r--meta/classes/package.bbclass31
1 files changed, 11 insertions, 20 deletions
diff --git a/meta/classes/package.bbclass b/meta/classes/package.bbclass
index bc91e9f866..d7de72bda3 100644
--- a/meta/classes/package.bbclass
+++ b/meta/classes/package.bbclass
@@ -1326,8 +1326,8 @@ python package_do_filedeps() {
1326 d.setVar("FILERPROVIDESFLIST_" + pkg, " ".join(provides_files[pkg])) 1326 d.setVar("FILERPROVIDESFLIST_" + pkg, " ".join(provides_files[pkg]))
1327} 1327}
1328 1328
1329SHLIBSDIRS = "${PKGDATA_DIR}/${MLPREFIX}shlibs" 1329SHLIBSDIRS = "${PKGDATA_DIR}/${MLPREFIX}shlibs2"
1330SHLIBSWORKDIR = "${PKGDESTWORK}/${MLPREFIX}shlibs" 1330SHLIBSWORKDIR = "${PKGDESTWORK}/${MLPREFIX}shlibs2"
1331 1331
1332python package_do_shlibs() { 1332python package_do_shlibs() {
1333 import re, pipes 1333 import re, pipes
@@ -1373,16 +1373,11 @@ python package_do_shlibs() {
1373 fd = open(os.path.join(dir, file)) 1373 fd = open(os.path.join(dir, file))
1374 lines = fd.readlines() 1374 lines = fd.readlines()
1375 fd.close() 1375 fd.close()
1376 ver_file = os.path.join(dir, dep_pkg + '.ver')
1377 lib_ver = None
1378 if os.path.exists(ver_file):
1379 fd = open(ver_file)
1380 lib_ver = fd.readline().rstrip()
1381 fd.close()
1382 for l in lines: 1376 for l in lines:
1383 shlib_provider[l.rstrip()] = (dep_pkg, lib_ver) 1377 s = l.strip().split(":")
1378 shlib_provider[s[0]] = (dep_pkg, s[2])
1384 1379
1385 def linux_so(file, needed, sonames, renames): 1380 def linux_so(file, needed, sonames, renames, pkgver):
1386 needs_ldconfig = False 1381 needs_ldconfig = False
1387 ldir = os.path.dirname(file).replace(pkgdest + "/" + pkg, '') 1382 ldir = os.path.dirname(file).replace(pkgdest + "/" + pkg, '')
1388 cmd = d.getVar('OBJDUMP', True) + " -p " + pipes.quote(file) + " 2>/dev/null" 1383 cmd = d.getVar('OBJDUMP', True) + " -p " + pipes.quote(file) + " 2>/dev/null"
@@ -1404,7 +1399,7 @@ python package_do_shlibs() {
1404 m = re.match("\s+SONAME\s+([^\s]*)", l) 1399 m = re.match("\s+SONAME\s+([^\s]*)", l)
1405 if m: 1400 if m:
1406 this_soname = m.group(1) 1401 this_soname = m.group(1)
1407 prov = (this_soname, ldir) 1402 prov = (this_soname, ldir, pkgver)
1408 if not prov in sonames: 1403 if not prov in sonames:
1409 # if library is private (only used by package) then do not build shlib for it 1404 # if library is private (only used by package) then do not build shlib for it
1410 if not private_libs or this_soname not in private_libs: 1405 if not private_libs or this_soname not in private_libs:
@@ -1415,7 +1410,7 @@ python package_do_shlibs() {
1415 renames.append((file, os.path.join(os.path.dirname(file), this_soname))) 1410 renames.append((file, os.path.join(os.path.dirname(file), this_soname)))
1416 return needs_ldconfig 1411 return needs_ldconfig
1417 1412
1418 def darwin_so(file, needed, sonames, renames): 1413 def darwin_so(file, needed, sonames, renames, pkgver):
1419 if not os.path.exists(file): 1414 if not os.path.exists(file):
1420 return 1415 return
1421 ldir = os.path.dirname(file).replace(pkgdest, '') 1416 ldir = os.path.dirname(file).replace(pkgdest, '')
@@ -1440,7 +1435,7 @@ python package_do_shlibs() {
1440 combos = get_combinations(name) 1435 combos = get_combinations(name)
1441 for combo in combos: 1436 for combo in combos:
1442 if not combo in sonames: 1437 if not combo in sonames:
1443 prov = (combo, ldir) 1438 prov = (combo, ldir, pkgver)
1444 sonames.append(prov) 1439 sonames.append(prov)
1445 if file.endswith('.dylib') or file.endswith('.so'): 1440 if file.endswith('.dylib') or file.endswith('.so'):
1446 lafile = file.replace(os.path.join(pkgdest, pkg), d.getVar('PKGD', True)) 1441 lafile = file.replace(os.path.join(pkgdest, pkg), d.getVar('PKGD', True))
@@ -1510,9 +1505,9 @@ python package_do_shlibs() {
1510 if cpath.islink(file): 1505 if cpath.islink(file):
1511 continue 1506 continue
1512 if targetos == "darwin" or targetos == "darwin8": 1507 if targetos == "darwin" or targetos == "darwin8":
1513 darwin_so(file, needed, sonames, renames) 1508 darwin_so(file, needed, sonames, renames, pkgver)
1514 elif os.access(file, os.X_OK) or lib_re.match(file): 1509 elif os.access(file, os.X_OK) or lib_re.match(file):
1515 ldconfig = linux_so(file, needed, sonames, renames) 1510 ldconfig = linux_so(file, needed, sonames, renames, pkgver)
1516 needs_ldconfig = needs_ldconfig or ldconfig 1511 needs_ldconfig = needs_ldconfig or ldconfig
1517 for (old, new) in renames: 1512 for (old, new) in renames:
1518 bb.note("Renaming %s to %s" % (old, new)) 1513 bb.note("Renaming %s to %s" % (old, new))
@@ -1520,7 +1515,6 @@ python package_do_shlibs() {
1520 pkgfiles[pkg].remove(old) 1515 pkgfiles[pkg].remove(old)
1521 1516
1522 shlibs_file = os.path.join(shlibswork_dir, pkg + ".list") 1517 shlibs_file = os.path.join(shlibswork_dir, pkg + ".list")
1523 shver_file = os.path.join(shlibswork_dir, pkg + ".ver")
1524 if len(sonames): 1518 if len(sonames):
1525 fd = open(shlibs_file, 'w') 1519 fd = open(shlibs_file, 'w')
1526 for s in sonames: 1520 for s in sonames:
@@ -1529,12 +1523,9 @@ python package_do_shlibs() {
1529 if old_pkg != pkg: 1523 if old_pkg != pkg:
1530 bb.warn('%s-%s was registered as shlib provider for %s, changing it to %s-%s because it was built later' % (old_pkg, old_pkgver, s[0], pkg, pkgver)) 1524 bb.warn('%s-%s was registered as shlib provider for %s, changing it to %s-%s because it was built later' % (old_pkg, old_pkgver, s[0], pkg, pkgver))
1531 bb.debug(1, 'registering %s-%s as shlib provider for %s' % (pkg, pkgver, s[0])) 1525 bb.debug(1, 'registering %s-%s as shlib provider for %s' % (pkg, pkgver, s[0]))
1532 fd.write(s[0] + '\n') 1526 fd.write(s[0] + ':' + s[1] + ':' + s[2] + '\n')
1533 shlib_provider[s[0]] = (pkg, pkgver) 1527 shlib_provider[s[0]] = (pkg, pkgver)
1534 fd.close() 1528 fd.close()
1535 fd = open(shver_file, 'w')
1536 fd.write(pkgver + '\n')
1537 fd.close()
1538 if needs_ldconfig and use_ldconfig: 1529 if needs_ldconfig and use_ldconfig:
1539 bb.debug(1, 'adding ldconfig call to postinst for %s' % pkg) 1530 bb.debug(1, 'adding ldconfig call to postinst for %s' % pkg)
1540 postinst = d.getVar('pkg_postinst_%s' % pkg, True) 1531 postinst = d.getVar('pkg_postinst_%s' % pkg, True)