xref: /OK3568_Linux_fs/yocto/poky/meta/recipes-devtools/apt/apt_2.4.5.bb (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593SmuzhiyunSUMMARY = "Advanced front-end for dpkg"
2*4882a593SmuzhiyunDESCRIPTION = "APT is the Advanced Package Tool, an advanced interface to the Debian packaging system which provides the apt-get program."
3*4882a593SmuzhiyunHOMEPAGE = "https://packages.debian.org/jessie/apt"
4*4882a593SmuzhiyunLICENSE = "GPL-2.0-or-later"
5*4882a593SmuzhiyunSECTION = "base"
6*4882a593Smuzhiyun
7*4882a593Smuzhiyun# Triehash script taken from https://github.com/julian-klode/triehash
8*4882a593SmuzhiyunSRC_URI = "${DEBIAN_MIRROR}/main/a/apt/${BPN}_${PV}.tar.xz \
9*4882a593Smuzhiyun           file://triehash \
10*4882a593Smuzhiyun           file://0001-Disable-documentation-directory-altogether.patch \
11*4882a593Smuzhiyun           file://0001-Fix-musl-build.patch \
12*4882a593Smuzhiyun           file://0001-CMakeLists.txt-avoid-changing-install-paths-based-on.patch \
13*4882a593Smuzhiyun           file://0001-cmake-Do-not-build-po-files.patch \
14*4882a593Smuzhiyun           file://0001-Hide-fstatat64-and-prlimit64-defines-on-musl.patch \
15*4882a593Smuzhiyun           file://0001-aptwebserver.cc-Include-array.patch \
16*4882a593Smuzhiyun           "
17*4882a593Smuzhiyun
18*4882a593SmuzhiyunSRC_URI:append:class-native = " \
19*4882a593Smuzhiyun           file://0001-Do-not-init-tables-from-dpkg-configuration.patch \
20*4882a593Smuzhiyun           file://0001-Revert-always-run-dpkg-configure-a-at-the-end-of-our.patch \
21*4882a593Smuzhiyun           "
22*4882a593Smuzhiyun
23*4882a593SmuzhiyunSRC_URI:append:class-nativesdk = " \
24*4882a593Smuzhiyun           file://0001-Do-not-init-tables-from-dpkg-configuration.patch \
25*4882a593Smuzhiyun           file://0001-Revert-always-run-dpkg-configure-a-at-the-end-of-our.patch \
26*4882a593Smuzhiyun           "
27*4882a593Smuzhiyun
28*4882a593SmuzhiyunSRC_URI[sha256sum] = "5552f175c3a3924f5cda0c079b821b30f68a2521959f2c30ab164d2ec7993ecf"
29*4882a593SmuzhiyunLIC_FILES_CHKSUM = "file://COPYING.GPL;md5=b234ee4d69f5fce4486a80fdaf4a4263"
30*4882a593Smuzhiyun
31*4882a593Smuzhiyun# the package is taken from snapshots.debian.org; that source is static and goes stale
32*4882a593Smuzhiyun# so we check the latest upstream from a directory that does get updated
33*4882a593SmuzhiyunUPSTREAM_CHECK_URI = "${DEBIAN_MIRROR}/main/a/apt/"
34*4882a593Smuzhiyun
35*4882a593Smuzhiyuninherit cmake perlnative bash-completion upstream-version-is-even useradd
36*4882a593Smuzhiyun
37*4882a593Smuzhiyun# User is added to allow apt to drop privs, will runtime warn without
38*4882a593SmuzhiyunUSERADD_PACKAGES = "${PN}"
39*4882a593SmuzhiyunUSERADD_PARAM:${PN} = "--system --home /nonexistent --no-create-home _apt"
40*4882a593Smuzhiyun
41*4882a593SmuzhiyunBBCLASSEXTEND = "native nativesdk"
42*4882a593Smuzhiyun
43*4882a593SmuzhiyunDEPENDS += "db gnutls lz4 zlib bzip2 xz libgcrypt xxhash"
44*4882a593Smuzhiyun
45*4882a593SmuzhiyunEXTRA_OECMAKE:append = " -DCURRENT_VENDOR=debian -DWITH_DOC=False \
46*4882a593Smuzhiyun    -DDPKG_DATADIR=${datadir}/dpkg \
47*4882a593Smuzhiyun    -DTRIEHASH_EXECUTABLE=${WORKDIR}/triehash \
48*4882a593Smuzhiyun    -DCMAKE_DISABLE_FIND_PACKAGE_ZSTD=True \
49*4882a593Smuzhiyun    -DCMAKE_DISABLE_FIND_PACKAGE_SECCOMP=True \
50*4882a593Smuzhiyun    -DWITH_TESTS=False \
51*4882a593Smuzhiyun"
52*4882a593Smuzhiyun
53*4882a593Smuzhiyundo_configure:prepend() {
54*4882a593Smuzhiyun	echo "set( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE BOTH )" >>  ${WORKDIR}/toolchain.cmake
55*4882a593Smuzhiyun}
56*4882a593Smuzhiyun
57*4882a593Smuzhiyun# Unfortunately apt hardcodes this all over the place
58*4882a593SmuzhiyunFILES:${PN} += "${prefix}/lib/dpkg ${prefix}/lib/apt"
59*4882a593SmuzhiyunRDEPENDS:${PN} += "bash perl dpkg"
60*4882a593Smuzhiyun
61*4882a593Smuzhiyuncustomize_apt_conf_sample() {
62*4882a593Smuzhiyun	cat > ${D}${sysconfdir}/apt/apt.conf.sample << EOF
63*4882a593SmuzhiyunDir "${STAGING_DIR_NATIVE}/"
64*4882a593Smuzhiyun{
65*4882a593Smuzhiyun   State "var/lib/apt/"
66*4882a593Smuzhiyun   {
67*4882a593Smuzhiyun      Lists "#APTCONF#/lists/";
68*4882a593Smuzhiyun      status "#ROOTFS#/var/lib/dpkg/status";
69*4882a593Smuzhiyun   };
70*4882a593Smuzhiyun   Cache "var/cache/apt/"
71*4882a593Smuzhiyun   {
72*4882a593Smuzhiyun      Archives "archives/";
73*4882a593Smuzhiyun      pkgcache "";
74*4882a593Smuzhiyun      srcpkgcache "";
75*4882a593Smuzhiyun   };
76*4882a593Smuzhiyun   Bin "${STAGING_BINDIR_NATIVE}/"
77*4882a593Smuzhiyun   {
78*4882a593Smuzhiyun      methods "${STAGING_LIBDIR}/apt/methods/";
79*4882a593Smuzhiyun      gzip "/bin/gzip";
80*4882a593Smuzhiyun      dpkg "dpkg";
81*4882a593Smuzhiyun      dpkg-source "dpkg-source";
82*4882a593Smuzhiyun      dpkg-buildpackage "dpkg-buildpackage";
83*4882a593Smuzhiyun      apt-get "apt-get";
84*4882a593Smuzhiyun      apt-cache "apt-cache";
85*4882a593Smuzhiyun   };
86*4882a593Smuzhiyun   Etc "#APTCONF#"
87*4882a593Smuzhiyun   {
88*4882a593Smuzhiyun      Preferences "preferences";
89*4882a593Smuzhiyun   };
90*4882a593Smuzhiyun   Log "var/log/apt";
91*4882a593Smuzhiyun};
92*4882a593Smuzhiyun
93*4882a593SmuzhiyunAPT
94*4882a593Smuzhiyun{
95*4882a593Smuzhiyun  Install-Recommends "true";
96*4882a593Smuzhiyun  Immediate-Configure "false";
97*4882a593Smuzhiyun  Architecture "i586";
98*4882a593Smuzhiyun  Get
99*4882a593Smuzhiyun  {
100*4882a593Smuzhiyun     Assume-Yes "true";
101*4882a593Smuzhiyun  };
102*4882a593Smuzhiyun};
103*4882a593Smuzhiyun
104*4882a593SmuzhiyunAcquire
105*4882a593Smuzhiyun{
106*4882a593Smuzhiyun  AllowInsecureRepositories "true";
107*4882a593Smuzhiyun};
108*4882a593Smuzhiyun
109*4882a593SmuzhiyunDPkg::Options {"--root=#ROOTFS#";"--admindir=#ROOTFS#/var/lib/dpkg";"--force-all";"--no-debsig"};
110*4882a593SmuzhiyunDPkg::Path "";
111*4882a593SmuzhiyunEOF
112*4882a593Smuzhiyun}
113*4882a593Smuzhiyun
114*4882a593Smuzhiyundo_install:append:class-native() {
115*4882a593Smuzhiyun	customize_apt_conf_sample
116*4882a593Smuzhiyun}
117*4882a593Smuzhiyun
118*4882a593Smuzhiyundo_install:append:class-nativesdk() {
119*4882a593Smuzhiyun	customize_apt_conf_sample
120*4882a593Smuzhiyun        rm -rf ${D}${localstatedir}/log
121*4882a593Smuzhiyun}
122*4882a593Smuzhiyun
123*4882a593Smuzhiyundo_install:append:class-target() {
124*4882a593Smuzhiyun	# Write the correct apt-architecture to apt.conf
125*4882a593Smuzhiyun	APT_CONF=${D}${sysconfdir}/apt/apt.conf
126*4882a593Smuzhiyun	echo 'APT::Architecture "${DPKG_ARCH}";' > ${APT_CONF}
127*4882a593Smuzhiyun
128*4882a593Smuzhiyun	# Remove /var/log/apt. /var/log is normally a link to /var/volatile/log
129*4882a593Smuzhiyun	# and /var/volatile is a tmpfs mount. So anything created in /var/log
130*4882a593Smuzhiyun	# will not be available when the tmpfs is mounted.
131*4882a593Smuzhiyun	rm -rf ${D}${localstatedir}/log
132*4882a593Smuzhiyun}
133*4882a593Smuzhiyun
134*4882a593Smuzhiyundo_install:append() {
135*4882a593Smuzhiyun	# Avoid non-reproducible -src package
136*4882a593Smuzhiyun	sed -i -e "s,${B}/include/,,g" ${B}/apt-pkg/tagfile-keys.cc
137*4882a593Smuzhiyun}
138