|
@@ -1,185 +0,0 @@
|
|
|
-SECTION = "devel"
|
|
|
-# Need binutils for libiberty.a
|
|
|
-# Would need transfig-native for documentation if it wasn't disabled
|
|
|
-DEPENDS = "elfutils binutils"
|
|
|
-SUMMARY = "An ELF prelinking utility"
|
|
|
-HOMEPAGE = "http://git.yoctoproject.org/cgit.cgi/prelink-cross/about/"
|
|
|
-DESCRIPTION = "The prelink package contains a utility which modifies ELF shared libraries \
|
|
|
-and executables, so that far fewer relocations need to be resolved at \
|
|
|
-runtime and thus programs come up faster."
|
|
|
-LICENSE = "GPLv2"
|
|
|
-LIC_FILES_CHKSUM = "file://COPYING;md5=c93c0550bd3173f4504b2cbd8991e50b"
|
|
|
-SRCREV = "f9975537dbfd9ade0fc813bd5cf5fcbe41753a37"
|
|
|
-PV = "1.0+git${SRCPV}"
|
|
|
-
|
|
|
-#
|
|
|
-# The cron script attempts to re-prelink the system daily -- on
|
|
|
-# systems where users are adding applications, this might be reasonable
|
|
|
-# but for embedded, we should be re-running prelink -a after an update.
|
|
|
-#
|
|
|
-# Default is prelinking is enabled.
|
|
|
-#
|
|
|
-SUMMARY:${PN}-cron = "Cron scripts to control automatic prelinking"
|
|
|
-DESCRIPTION:${PN}-cron = "Cron scripts to control automatic prelinking. \
|
|
|
-See: ${sysconfdir}/cron.daily/prelink for configuration information."
|
|
|
-
|
|
|
-FILES:${PN}-cron = "${sysconfdir}/cron.daily ${sysconfdir}/default"
|
|
|
-
|
|
|
-PACKAGES =+ "${PN}-cron"
|
|
|
-
|
|
|
-SRC_URI = "git://git.yoctoproject.org/prelink-cross.git;branch=cross_prelink_staging \
|
|
|
- file://0001-Add-MIPS-gnu-hash-support.patch \
|
|
|
- file://prelink.conf \
|
|
|
- file://prelink.cron.daily \
|
|
|
- file://prelink.default \
|
|
|
- file://macros.prelink \
|
|
|
- "
|
|
|
-UPSTREAM_CHECK_COMMITS = "1"
|
|
|
-
|
|
|
-# error: error.h: No such file or directory
|
|
|
-COMPATIBLE_HOST:libc-musl = 'null'
|
|
|
-
|
|
|
-TARGET_OS_ORIG := "${TARGET_OS}"
|
|
|
-OVERRIDES:append = ":${TARGET_OS_ORIG}"
|
|
|
-
|
|
|
-S = "${WORKDIR}/git"
|
|
|
-
|
|
|
-inherit autotools
|
|
|
-
|
|
|
-BBCLASSEXTEND = "native"
|
|
|
-
|
|
|
-EXTRA_OECONF = "--with-pkgversion=${PV}-${PR} \
|
|
|
- --with-bugurl=http://bugzilla.yoctoproject.org/"
|
|
|
-
|
|
|
-PACKAGECONFIG ??= ""
|
|
|
-PACKAGECONFIG[selinux] = "--enable-selinux,--disable-selinux,libselinux"
|
|
|
-
|
|
|
-#
|
|
|
-# For target prelink we need to ensure paths match the lib path layout
|
|
|
-# including for any configured multilibs
|
|
|
-#
|
|
|
-python do_linkerpaths () {
|
|
|
- values = all_multilib_tune_list(["TUNE_ARCH", "baselib", "ABIEXTENSION"], d)
|
|
|
-
|
|
|
- arches = values["TUNE_ARCH"]
|
|
|
- baselibs = values["baselib"]
|
|
|
- abis = values["ABIEXTENSION"]
|
|
|
-
|
|
|
- def replace_lines(f, search, replacement, d, firstonly = False, secondonly = False):
|
|
|
- f = d.expand(f)
|
|
|
- if search == replacement:
|
|
|
- return
|
|
|
- bb.debug(2, "Replacing %s with %s in %s" % (search, replacement, f))
|
|
|
- with open(f, "r") as data:
|
|
|
- lines = data.readlines()
|
|
|
- with open(f, "w") as data:
|
|
|
- for line in lines:
|
|
|
- if not secondonly and not firstonly:
|
|
|
- line = line.replace(search, replacement)
|
|
|
- elif secondonly and search in line:
|
|
|
- secondonly = False
|
|
|
- elif firstonly and search and search in line:
|
|
|
- line = line.replace(search, replacement)
|
|
|
- search = None
|
|
|
- data.write(line)
|
|
|
-
|
|
|
- def replace_lines_rtld(f, search, replacement, section, d):
|
|
|
- f = d.expand(f)
|
|
|
- bb.debug(2, "Replacing %s with %s in %s" % (search, replacement, f))
|
|
|
- with open(f, "r") as data:
|
|
|
- lines = data.readlines()
|
|
|
- found = False
|
|
|
- found2 = False
|
|
|
- with open(f, "w") as data:
|
|
|
- for line in lines:
|
|
|
- if section in line:
|
|
|
- if section == "else" and "if" in line:
|
|
|
- found = False
|
|
|
- else:
|
|
|
- found = True
|
|
|
- if found and "dst_LIB =" in line:
|
|
|
- found2 = True
|
|
|
- elif "}" in line:
|
|
|
- found = False
|
|
|
- found2 = False
|
|
|
- if found2:
|
|
|
- line = line.replace(search, replacement)
|
|
|
- data.write(line)
|
|
|
-
|
|
|
- for i, arch in enumerate(arches):
|
|
|
- tune_baselib = baselibs[i]
|
|
|
- abi = abis[i]
|
|
|
-
|
|
|
- bits = 32
|
|
|
- if arch == "powerpc":
|
|
|
- replace_lines("${S}/src/arch-ppc.c", "/lib/ld.so.1", "/" + tune_baselib + "/ld.so.1", d)
|
|
|
- elif arch == "powerpc64":
|
|
|
- replace_lines("${S}/src/arch-ppc64.c", "/lib64/ld64.so.1", "/" + tune_baselib + "/ld64.so.1", d)
|
|
|
- bits = 64
|
|
|
- elif arch == "x86_64":
|
|
|
- if abi == "x32":
|
|
|
- replace_lines("${S}/src/arch-x86_64.c", "/libx32/ld-linux-x32.so.2", "/" + tune_baselib + "/ld-linux-x32.so.2", d)
|
|
|
- else:
|
|
|
- replace_lines("${S}/src/arch-x86_64.c", "/lib64/ld-linux-x86-64.so.2", "/" + tune_baselib + "/ld-linux-x86-64.so.2", d)
|
|
|
- bits = 64
|
|
|
- elif arch == "arm":
|
|
|
- replace_lines("${S}/src/arch-arm.c", "/lib/ld-linux.so.3", "/" + tune_baselib + "/ld-linux.so.3", d)
|
|
|
- replace_lines("${S}/src/arch-arm.c", "/lib/ld-linux-armhf.so.3", "/" + tune_baselib + "/ld-linux-armhf.so.3", d)
|
|
|
- elif arch == "mips" or arch == "mipsel":
|
|
|
- replace_lines("${S}/src/arch-mips.c", "/lib/ld.so.1", "/" + tune_baselib + "/ld.so.1", d, firstonly=True)
|
|
|
- replace_lines("${S}/src/arch-mips.c", "/lib32/ld.so.1", "/" + tune_baselib + "/ld.so.1", d)
|
|
|
- elif arch == "mips64" or arch == "mips64el":
|
|
|
- replace_lines("${S}/src/arch-mips.c", "/lib/ld.so.1", "/" + tune_baselib + "/ld.so.1", d, secondonly=True)
|
|
|
- replace_lines("${S}/src/arch-mips.c", "/lib64/ld.so.1", "/" + tune_baselib + "/ld.so.1", d)
|
|
|
- bits = 64
|
|
|
- elif arch.endswith("86"):
|
|
|
- replace_lines("${S}/src/arch-i386.c", "/lib/ld-linux.so.2", "/" + tune_baselib + "/ld-linux.so.2", d)
|
|
|
- if bits == 32 and tune_baselib != "lib":
|
|
|
- replace_lines_rtld("${S}/src/rtld/rtld.c", "lib", tune_baselib, "else", d)
|
|
|
- if bits == 64 and tune_baselib != "lib64":
|
|
|
- replace_lines_rtld("${S}/src/rtld/rtld.c", "lib64", tune_baselib, "use_64bit", d)
|
|
|
-}
|
|
|
-
|
|
|
-python () {
|
|
|
- overrides = d.getVar("OVERRIDES").split(":")
|
|
|
- if "class-target" in overrides:
|
|
|
- bb.build.addtask('do_linkerpaths', 'do_configure', 'do_patch', d)
|
|
|
-}
|
|
|
-
|
|
|
-do_configure:prepend () {
|
|
|
- # Disable documentation!
|
|
|
- echo "all:" > ${S}/doc/Makefile.am
|
|
|
-}
|
|
|
-
|
|
|
-do_install:append () {
|
|
|
- install -d ${D}${sysconfdir}/cron.daily ${D}${sysconfdir}/default ${D}${sysconfdir}/rpm
|
|
|
- install -m 0644 ${WORKDIR}/prelink.conf ${D}${sysconfdir}/prelink.conf
|
|
|
- install -m 0644 ${WORKDIR}/prelink.cron.daily ${D}${sysconfdir}/cron.daily/prelink
|
|
|
- install -m 0644 ${WORKDIR}/prelink.default ${D}${sysconfdir}/default/prelink
|
|
|
- install -m 0644 ${WORKDIR}/macros.prelink ${D}${sysconfdir}/rpm/macros.prelink
|
|
|
-}
|
|
|
-
|
|
|
-# If we ae doing a cross install, we want to avoid prelinking.
|
|
|
-# Prelinking during a cross install should be handled by the image-prelink
|
|
|
-# bbclass. If the user desires this to run on the target at first boot
|
|
|
-# they will need to create a custom boot script.
|
|
|
-pkg_postinst:prelink() {
|
|
|
-#!/bin/sh
|
|
|
-
|
|
|
-if [ "x$D" != "x" ]; then
|
|
|
- exit 0
|
|
|
-fi
|
|
|
-
|
|
|
-prelink -a
|
|
|
-}
|
|
|
-
|
|
|
-pkg_prerm:prelink() {
|
|
|
-#!/bin/sh
|
|
|
-
|
|
|
-if [ "x$D" != "x" ]; then
|
|
|
- exit 1
|
|
|
-fi
|
|
|
-
|
|
|
-prelink -au
|
|
|
-}
|
|
|
-
|