aportgen: add feature to fork upstream packages (!1811)
This MR add the --fork-alpine argument to the pmboostrap aportgen command, which downloads the APKBUILD and related files and copies them into the pmaports/temp folder.
This commit is contained in:
parent
ff50a5e382
commit
54e51759ad
|
@ -52,18 +52,27 @@ def properties(pkgname):
|
||||||
|
|
||||||
|
|
||||||
def generate(args, pkgname):
|
def generate(args, pkgname):
|
||||||
# Confirm overwrite
|
if args.fork_alpine:
|
||||||
prefix, folder, options = properties(pkgname)
|
prefix, folder, options = (pkgname, "temp", {"confirm_overwrite": True})
|
||||||
|
else:
|
||||||
|
prefix, folder, options = properties(pkgname)
|
||||||
path_target = args.aports + "/" + folder + "/" + pkgname
|
path_target = args.aports + "/" + folder + "/" + pkgname
|
||||||
|
|
||||||
|
# Confirm overwrite
|
||||||
if options["confirm_overwrite"] and os.path.exists(path_target):
|
if options["confirm_overwrite"] and os.path.exists(path_target):
|
||||||
logging.warning("WARNING: Target folder already exists: " + path_target)
|
logging.warning("WARNING: Target folder already exists: " + path_target)
|
||||||
if not pmb.helpers.cli.confirm(args, "Continue and overwrite?"):
|
if not pmb.helpers.cli.confirm(args, "Continue and overwrite?"):
|
||||||
raise RuntimeError("Aborted.")
|
raise RuntimeError("Aborted.")
|
||||||
|
|
||||||
# Run pmb.aportgen.PREFIX.generate()
|
|
||||||
if os.path.exists(args.work + "/aportgen"):
|
if os.path.exists(args.work + "/aportgen"):
|
||||||
pmb.helpers.run.user(args, ["rm", "-r", args.work + "/aportgen"])
|
pmb.helpers.run.user(args, ["rm", "-r", args.work + "/aportgen"])
|
||||||
getattr(pmb.aportgen, prefix.replace("-", "_")).generate(args, pkgname)
|
if args.fork_alpine:
|
||||||
|
upstream = pmb.aportgen.core.get_upstream_aport(args, pkgname)
|
||||||
|
pmb.helpers.run.user(args, ["cp", "-r", upstream, args.work + "/aportgen"])
|
||||||
|
pmb.aportgen.core.rewrite(args, pkgname, replace_simple={"# Contributor:*": None, "# Maintainer:*": None})
|
||||||
|
else:
|
||||||
|
# Run pmb.aportgen.PREFIX.generate()
|
||||||
|
getattr(pmb.aportgen, prefix.replace("-", "_")).generate(args, pkgname)
|
||||||
|
|
||||||
# Move to the aports folder
|
# Move to the aports folder
|
||||||
if os.path.exists(path_target):
|
if os.path.exists(path_target):
|
||||||
|
|
|
@ -62,7 +62,7 @@ def format_function(name, body, remove_indent=4):
|
||||||
return name + "() {\n" + ret + "}\n"
|
return name + "() {\n" + ret + "}\n"
|
||||||
|
|
||||||
|
|
||||||
def rewrite(args, pkgname, path_original, fields={}, replace_pkgname=None,
|
def rewrite(args, pkgname, path_original="", fields={}, replace_pkgname=None,
|
||||||
replace_functions={}, replace_simple={}, below_header="",
|
replace_functions={}, replace_simple={}, below_header="",
|
||||||
remove_indent=4):
|
remove_indent=4):
|
||||||
"""
|
"""
|
||||||
|
@ -70,6 +70,7 @@ def rewrite(args, pkgname, path_original, fields={}, replace_pkgname=None,
|
||||||
lines (so they won't be bugged with issues regarding our generated aports),
|
lines (so they won't be bugged with issues regarding our generated aports),
|
||||||
and add reference to the original aport.
|
and add reference to the original aport.
|
||||||
|
|
||||||
|
:param path_original: The original path of the automatically generated aport
|
||||||
:param fields: key-value pairs of fields, that shall be changed in the
|
:param fields: key-value pairs of fields, that shall be changed in the
|
||||||
APKBUILD. For example: {"pkgdesc": "my new package", "subpkgs": ""}
|
APKBUILD. For example: {"pkgdesc": "my new package", "subpkgs": ""}
|
||||||
:param replace_pkgname: When set, $pkgname gets replaced with that string in
|
:param replace_pkgname: When set, $pkgname gets replaced with that string in
|
||||||
|
@ -85,12 +86,18 @@ def rewrite(args, pkgname, path_original, fields={}, replace_pkgname=None,
|
||||||
|
|
||||||
"""
|
"""
|
||||||
# Header
|
# Header
|
||||||
lines_new = [
|
if path_original:
|
||||||
"# Automatically generated aport, do not edit!\n",
|
lines_new = [
|
||||||
"# Generator: pmbootstrap aportgen " + pkgname + "\n",
|
"# Automatically generated aport, do not edit!\n",
|
||||||
"# Based on: " + path_original + "\n",
|
"# Generator: pmbootstrap aportgen " + pkgname + "\n",
|
||||||
"\n",
|
"# Based on: " + path_original + "\n",
|
||||||
]
|
"\n",
|
||||||
|
]
|
||||||
|
else:
|
||||||
|
lines_new = [
|
||||||
|
"# Forked from Alpine INSERT-REASON-HERE (CHANGEME!)\n",
|
||||||
|
"\n",
|
||||||
|
]
|
||||||
|
|
||||||
if below_header:
|
if below_header:
|
||||||
for line in below_header.split("\n"):
|
for line in below_header.split("\n"):
|
||||||
|
|
|
@ -487,6 +487,8 @@ def arguments():
|
||||||
" APKBUILD match, instead of updating them")
|
" APKBUILD match, instead of updating them")
|
||||||
aportgen = sub.add_parser("aportgen", help="generate a postmarketOS"
|
aportgen = sub.add_parser("aportgen", help="generate a postmarketOS"
|
||||||
" specific package build recipe (aport/APKBUILD)")
|
" specific package build recipe (aport/APKBUILD)")
|
||||||
|
aportgen.add_argument("--fork-alpine", help="fork the alpine upstream package",
|
||||||
|
action="store_true", dest="fork_alpine")
|
||||||
build = sub.add_parser("build", help="create a package for a"
|
build = sub.add_parser("build", help="create a package for a"
|
||||||
" specific architecture")
|
" specific architecture")
|
||||||
build.add_argument("--arch", choices=arch_choices, default=None,
|
build.add_argument("--arch", choices=arch_choices, default=None,
|
||||||
|
|
|
@ -17,7 +17,6 @@ You should have received a copy of the GNU General Public License
|
||||||
along with pmbootstrap. If not, see <http://www.gnu.org/licenses/>.
|
along with pmbootstrap. If not, see <http://www.gnu.org/licenses/>.
|
||||||
"""
|
"""
|
||||||
import os
|
import os
|
||||||
import shutil
|
|
||||||
import sys
|
import sys
|
||||||
import pytest
|
import pytest
|
||||||
import filecmp
|
import filecmp
|
||||||
|
@ -38,17 +37,17 @@ def args(tmpdir, request):
|
||||||
sys.argv = ["pmbootstrap.py", "chroot"]
|
sys.argv = ["pmbootstrap.py", "chroot"]
|
||||||
args = pmb.parse.arguments()
|
args = pmb.parse.arguments()
|
||||||
args.log = args.work + "/log_testsuite.txt"
|
args.log = args.work + "/log_testsuite.txt"
|
||||||
|
args.fork_alpine = False
|
||||||
pmb.helpers.logging.init(args)
|
pmb.helpers.logging.init(args)
|
||||||
request.addfinalizer(args.logfd.close)
|
request.addfinalizer(args.logfd.close)
|
||||||
return args
|
return args
|
||||||
|
|
||||||
|
|
||||||
def test_aportgen_compare_output(args, tmpdir, monkeypatch):
|
def test_aportgen_compare_output(args, tmpdir, monkeypatch):
|
||||||
# Copy pmaports testdata to tmpdir
|
# Fake aports folder in tmpdir
|
||||||
tmpdir = str(tmpdir)
|
args.aports = str(tmpdir)
|
||||||
|
os.mkdir(tmpdir + "/cross")
|
||||||
testdata = pmb_src + "/test/testdata/aportgen"
|
testdata = pmb_src + "/test/testdata/aportgen"
|
||||||
shutil.copytree(testdata + "/pmaports/cross", tmpdir + "/cross")
|
|
||||||
args.aports = tmpdir
|
|
||||||
|
|
||||||
# Override get_upstream_aport() to point to testdata
|
# Override get_upstream_aport() to point to testdata
|
||||||
def func(args, upstream_path):
|
def func(args, upstream_path):
|
||||||
|
@ -65,6 +64,27 @@ def test_aportgen_compare_output(args, tmpdir, monkeypatch):
|
||||||
assert filecmp.cmp(path_new, path_old, False)
|
assert filecmp.cmp(path_new, path_old, False)
|
||||||
|
|
||||||
|
|
||||||
|
def test_aportgen_fork_alpine_compare_output(args, tmpdir, monkeypatch):
|
||||||
|
# Fake aports folder in tmpdir
|
||||||
|
args.aports = str(tmpdir)
|
||||||
|
os.mkdir(tmpdir + "/temp")
|
||||||
|
testdata = pmb_src + "/test/testdata/aportgen"
|
||||||
|
args.fork_alpine = True
|
||||||
|
|
||||||
|
# Override get_upstream_aport() to point to testdata
|
||||||
|
def func(args, upstream_path):
|
||||||
|
return testdata + "/aports/main/" + upstream_path
|
||||||
|
monkeypatch.setattr(pmb.aportgen.core, "get_upstream_aport", func)
|
||||||
|
|
||||||
|
# Run aportgen and compare output
|
||||||
|
pkgname = "binutils"
|
||||||
|
pmb.aportgen.generate(args, pkgname)
|
||||||
|
path_new = args.aports + "/temp/" + pkgname + "/APKBUILD"
|
||||||
|
path_old = testdata + "/pmaports/temp/" + pkgname + "/APKBUILD"
|
||||||
|
assert os.path.exists(path_new)
|
||||||
|
assert filecmp.cmp(path_new, path_old, False)
|
||||||
|
|
||||||
|
|
||||||
def test_aportgen(args, tmpdir):
|
def test_aportgen(args, tmpdir):
|
||||||
# Fake aports folder in tmpdir
|
# Fake aports folder in tmpdir
|
||||||
args.aports = str(tmpdir)
|
args.aports = str(tmpdir)
|
||||||
|
|
|
@ -35,6 +35,7 @@ def args(tmpdir, request):
|
||||||
sys.argv = ["pmbootstrap.py", "build", "-i", "device-testsuite-testdevice"]
|
sys.argv = ["pmbootstrap.py", "build", "-i", "device-testsuite-testdevice"]
|
||||||
args = pmb.parse.arguments()
|
args = pmb.parse.arguments()
|
||||||
args.log = args.work + "/log_testsuite.txt"
|
args.log = args.work + "/log_testsuite.txt"
|
||||||
|
args.fork_alpine = False
|
||||||
pmb.helpers.logging.init(args)
|
pmb.helpers.logging.init(args)
|
||||||
request.addfinalizer(args.logfd.close)
|
request.addfinalizer(args.logfd.close)
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,118 @@
|
||||||
|
# Forked from Alpine INSERT-REASON-HERE (CHANGEME!)
|
||||||
|
|
||||||
|
pkgname=binutils
|
||||||
|
pkgver=2.31.1
|
||||||
|
pkgrel=1
|
||||||
|
pkgdesc="Tools necessary to build programs"
|
||||||
|
url="https://www.gnu.org/software/binutils/"
|
||||||
|
depends=""
|
||||||
|
makedepends_build="bison flex texinfo"
|
||||||
|
makedepends_host="zlib-dev"
|
||||||
|
makedepends="$makedepends_build $makedepends_host"
|
||||||
|
arch="all"
|
||||||
|
license="GPL-2.0 GPL-3.0-or-later LGPL-2.0 BSD"
|
||||||
|
subpackages="$pkgname-dev $pkgname-doc $pkgname-gold"
|
||||||
|
source="https://ftp.gnu.org/gnu/$pkgname/$pkgname-$pkgver.tar.bz2
|
||||||
|
x86-Add-a-GNU_PROPERTY_X86_ISA_1_USED-note-if-needed.patch
|
||||||
|
x86-Properly-merge-GNU_PROPERTY_X86_ISA_1_USED.patch
|
||||||
|
x86-Properly-add-X86_ISA_1_NEEDED-property.patch
|
||||||
|
binutils-ld-fix-static-linking.patch
|
||||||
|
gold-mips.patch
|
||||||
|
"
|
||||||
|
builddir="$srcdir/$pkgname-$pkgver"
|
||||||
|
|
||||||
|
if [ "$CHOST" != "$CTARGET" ]; then
|
||||||
|
pkgname="$pkgname-$CTARGET_ARCH"
|
||||||
|
subpackages=""
|
||||||
|
sonameprefix="$pkgname:"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# secfixes:
|
||||||
|
# 2.28-r1:
|
||||||
|
# - CVE-2017-7614
|
||||||
|
|
||||||
|
build() {
|
||||||
|
local _sysroot=/
|
||||||
|
local _cross_configure="--enable-install-libiberty --enable-shared"
|
||||||
|
local _arch_configure=""
|
||||||
|
|
||||||
|
if [ "$CHOST" != "$CTARGET" ]; then
|
||||||
|
_sysroot="$CBUILDROOT"
|
||||||
|
_cross_configure="--disable-install-libiberty"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$CTARGET_ARCH" = "x86_64" ]; then
|
||||||
|
_arch_configure="--enable-targets=x86_64-pep"
|
||||||
|
fi
|
||||||
|
|
||||||
|
case "$CTARGET_ARCH" in
|
||||||
|
mips*) _hash_style_configure="--enable-default-hash-style=sysv" ;;
|
||||||
|
*) _hash_style_configure="--enable-default-hash-style=gnu" ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
cd "$builddir"
|
||||||
|
./configure \
|
||||||
|
--build=$CBUILD \
|
||||||
|
--host=$CHOST \
|
||||||
|
--target=$CTARGET \
|
||||||
|
--with-build-sysroot="$CBUILDROOT" \
|
||||||
|
--with-sysroot=$_sysroot \
|
||||||
|
--prefix=/usr \
|
||||||
|
--mandir=/usr/share/man \
|
||||||
|
--infodir=/usr/share/info \
|
||||||
|
--disable-multilib \
|
||||||
|
--enable-ld=default \
|
||||||
|
--enable-gold=yes \
|
||||||
|
--enable-64-bit-bfd \
|
||||||
|
--enable-plugins \
|
||||||
|
--enable-relro \
|
||||||
|
--enable-deterministic-archives \
|
||||||
|
$_cross_configure \
|
||||||
|
$_arch_configure \
|
||||||
|
$_hash_style_configure \
|
||||||
|
--with-pic \
|
||||||
|
--disable-werror \
|
||||||
|
--disable-nls \
|
||||||
|
--with-system-zlib
|
||||||
|
make
|
||||||
|
}
|
||||||
|
|
||||||
|
package() {
|
||||||
|
cd "$builddir"
|
||||||
|
make install DESTDIR="$pkgdir"
|
||||||
|
if [ -d "$pkgdir"/usr/lib64 ]; then
|
||||||
|
mv "$pkgdir"/usr/lib64/* "$pkgdir"/usr/lib/
|
||||||
|
rmdir "$pkgdir"/usr/lib64
|
||||||
|
fi
|
||||||
|
if [ "$CHOST" != "$CTARGET" ]; then
|
||||||
|
# creating cross tools: remove any files that would conflict
|
||||||
|
# with the native tools, or other cross tools
|
||||||
|
rm -r "$pkgdir"/usr/share
|
||||||
|
rm -f "$pkgdir"/usr/lib/libiberty.a
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
libs() {
|
||||||
|
pkgdesc="Runtime libraries from binutils - libbfd and libopcodes"
|
||||||
|
|
||||||
|
mkdir -p "$subpkgdir"/usr/lib
|
||||||
|
mv "$pkgdir"/usr/lib/lib*.so "$subpkgdir"/usr/lib/
|
||||||
|
}
|
||||||
|
|
||||||
|
gold() {
|
||||||
|
pkgdesc="GNU binutils - gold linker"
|
||||||
|
|
||||||
|
if [ -e "$pkgdir"/usr/bin/ld.gold ]; then
|
||||||
|
mkdir -p "$subpkgdir"/usr/bin
|
||||||
|
mv "$pkgdir"/usr/bin/ld.gold "$subpkgdir"/usr/bin
|
||||||
|
fi
|
||||||
|
mkdir -p "$subpkgdir"/usr/$CTARGET/bin
|
||||||
|
mv "$pkgdir"/usr/$CTARGET/bin/ld.gold "$subpkgdir"/usr/$CTARGET/bin/ld.gold
|
||||||
|
}
|
||||||
|
|
||||||
|
sha512sums="b42954e6f49a0adcd2676bdd77dfb59bfc25cec8184b007521d1e2b1d5d0593b58639e3d9448d5a40fe024c3cea386a37743627d6bb16d502f52a4a32b9573bd binutils-2.31.1.tar.bz2
|
||||||
|
d95fd77e1c2c4670a2a11979d6811b358ba0f067b917b33d241eca20cfe66553f6a6fccc5ec26d8d29045e487cb74389fbf86426f80cf81df95608835a566cfc x86-Add-a-GNU_PROPERTY_X86_ISA_1_USED-note-if-needed.patch
|
||||||
|
ce5d3c935057d624c1ce75722e7b5e4583812d46797edce8c381a94b2643f44f7bd0165e7e9b8e358955f4d979074ee487598efbf24389a4013681f99ff7c595 x86-Properly-merge-GNU_PROPERTY_X86_ISA_1_USED.patch
|
||||||
|
1878bed194529afb2430af21ba9712d6819c5fdfdc5c8db652175bf86d0a0c710ac2bd3ec728bf874887301bd187d91bf60a374c47850c7bd2eafbf6653d74d8 x86-Properly-add-X86_ISA_1_NEEDED-property.patch
|
||||||
|
ecee33b0e435aa704af1c334e560f201638ff79e199aa11ed78a72f7c9b46f85fbb227af5748e735fd681d1965fcc42ac81b0c8824e540430ce0c706c81e8b49 binutils-ld-fix-static-linking.patch
|
||||||
|
f55cf2e0bf82f97583a1abe10710e4013ecf7d64f1da2ef8659a44a06d0dd8beaf58dab98a183488ea137f03e32d62efc878d95f018f836f8cec870bc448556f gold-mips.patch"
|
Loading…
Reference in New Issue