mirror of
https://gitlab.postmarketos.org/postmarketOS/pmbootstrap.git
synced 2025-07-12 19:09:56 +03:00
pmb.aportgen: Ask whether a new device port is upstream or downstream
Essentially we want to place the generated APKBUILD files into the correct device/testing/ or device/downstream/ category, depending whether it's a port using upstream or downstream kernel. Fixes #2556
This commit is contained in:
parent
606eb669fc
commit
129fb3f44d
4 changed files with 68 additions and 12 deletions
|
@ -62,7 +62,10 @@ def properties(pkgname: str) -> tuple[str, str, AportGenEntry]:
|
|||
|
||||
|
||||
def generate(
|
||||
pkgname: str, fork_alpine: bool = False, fork_alpine_retain_branch: bool = False
|
||||
pkgname: str,
|
||||
fork_alpine: bool = False,
|
||||
fork_alpine_retain_branch: bool = False,
|
||||
device_category: pmb.helpers.devices.DeviceCategory | None = None,
|
||||
) -> None:
|
||||
options: AportGenEntry
|
||||
|
||||
|
@ -71,7 +74,10 @@ def generate(
|
|||
else:
|
||||
prefix, folder, options = properties(pkgname)
|
||||
config = get_context().config
|
||||
path_target = pkgrepo_default_path() / folder / pkgname
|
||||
if device_category:
|
||||
path_target = pkgrepo_default_path() / folder / str(device_category) / pkgname
|
||||
else:
|
||||
path_target = pkgrepo_default_path() / folder / pkgname
|
||||
|
||||
# Confirm overwrite
|
||||
if options["confirm_overwrite"] and os.path.exists(path_target):
|
||||
|
@ -80,9 +86,9 @@ def generate(
|
|||
raise RuntimeError("Aborted.")
|
||||
|
||||
aportgen = config.work / "aportgen"
|
||||
|
||||
if os.path.exists(aportgen):
|
||||
pmb.helpers.run.user(["rm", "-r", aportgen])
|
||||
|
||||
if fork_alpine:
|
||||
upstream = pmb.aportgen.core.get_upstream_aport(
|
||||
pkgname, retain_branch=fork_alpine_retain_branch
|
||||
|
@ -96,7 +102,7 @@ def generate(
|
|||
case "busybox-static":
|
||||
pmb.aportgen.busybox_static.generate(pkgname)
|
||||
case "device":
|
||||
pmb.aportgen.device.generate(pkgname)
|
||||
pmb.aportgen.device.generate(pkgname, device_category)
|
||||
case "gcc":
|
||||
pmb.aportgen.gcc.generate(pkgname)
|
||||
case "grub-efi":
|
||||
|
|
|
@ -7,6 +7,7 @@ from pmb.types import Bootimg
|
|||
from pathlib import Path
|
||||
import os
|
||||
import pmb.helpers.cli
|
||||
import pmb.helpers.devices
|
||||
import pmb.helpers.run
|
||||
import pmb.aportgen.core
|
||||
import pmb.parse.apkindex
|
||||
|
@ -267,9 +268,20 @@ def generate_modules_initfs() -> None:
|
|||
handle.write(line.lstrip() + "\n")
|
||||
|
||||
|
||||
def generate_apkbuild(pkgname: str, name: str, arch: Arch, flash_method: str) -> None:
|
||||
def generate_apkbuild(
|
||||
pkgname: str,
|
||||
name: str,
|
||||
arch: Arch,
|
||||
flash_method: str,
|
||||
device_category: pmb.helpers.devices.DeviceCategory,
|
||||
) -> None:
|
||||
# Dependencies
|
||||
depends = ["postmarketos-base", "linux-" + "-".join(pkgname.split("-")[1:])]
|
||||
depends = ["postmarketos-base"]
|
||||
if device_category == pmb.helpers.devices.DeviceCategory.DOWNSTREAM:
|
||||
depends += ["linux-" + "-".join(pkgname.split("-")[1:])]
|
||||
else:
|
||||
depends += ["linux-CHANGEME"]
|
||||
|
||||
if flash_method in ["fastboot", "heimdall-bootimg"]:
|
||||
depends.append("mkbootimg")
|
||||
if flash_method == "0xffff":
|
||||
|
@ -317,7 +329,10 @@ def generate_apkbuild(pkgname: str, name: str, arch: Arch, flash_method: str) ->
|
|||
handle.write(line[8:].replace(" " * 4, "\t") + "\n")
|
||||
|
||||
|
||||
def generate(pkgname: str) -> None:
|
||||
def generate(
|
||||
pkgname: str,
|
||||
device_category: pmb.helpers.devices.DeviceCategory | None,
|
||||
) -> None:
|
||||
arch = ask_for_architecture()
|
||||
manufacturer = ask_for_manufacturer()
|
||||
name = ask_for_name(manufacturer)
|
||||
|
@ -328,6 +343,8 @@ def generate(pkgname: str) -> None:
|
|||
bootimg = None
|
||||
if flash_method in ["fastboot", "heimdall-bootimg"]:
|
||||
bootimg = ask_for_bootimg()
|
||||
if device_category is None:
|
||||
device_category = pmb.config.ask_for_mainline_downstream()
|
||||
|
||||
generate_deviceinfo(
|
||||
pkgname,
|
||||
|
@ -341,4 +358,4 @@ def generate(pkgname: str) -> None:
|
|||
bootimg,
|
||||
)
|
||||
generate_modules_initfs()
|
||||
generate_apkbuild(pkgname, name, arch, flash_method)
|
||||
generate_apkbuild(pkgname, name, arch, flash_method, device_category)
|
||||
|
|
|
@ -14,7 +14,10 @@ from collections.abc import Sequence
|
|||
from pmb.config.file import load as load, save as save, serialize as serialize
|
||||
from pmb.config.sudo import which_sudo
|
||||
from pmb.config.other import is_systemd_selected as is_systemd_selected
|
||||
from .init import require_programs as require_programs
|
||||
from .init import (
|
||||
require_programs as require_programs,
|
||||
ask_for_mainline_downstream as ask_for_mainline_downstream,
|
||||
)
|
||||
from . import workdir as workdir
|
||||
|
||||
|
||||
|
@ -594,7 +597,7 @@ aportgen: dict[str, AportGenEntry] = {
|
|||
"prefixes": ["busybox-static", "gcc", "musl", "grub-efi"],
|
||||
"confirm_overwrite": False,
|
||||
},
|
||||
"device/testing": {
|
||||
"device": {
|
||||
"prefixes": ["device", "linux"],
|
||||
"confirm_overwrite": True,
|
||||
},
|
||||
|
|
|
@ -463,6 +463,33 @@ def ask_for_device_kernel(config: Config, device: str) -> str:
|
|||
return ret
|
||||
|
||||
|
||||
def ask_for_mainline_downstream() -> pmb.helpers.devices.DeviceCategory:
|
||||
logging.info("What type of port are you creating?")
|
||||
logging.info(
|
||||
"* mainline: Port using upstream/mainline kernel, compatible with upstream user space."
|
||||
)
|
||||
logging.info(
|
||||
"* downstream: Port using downstream kernel, using the original (e.g. Android) kernel "
|
||||
"sources, at least partially incompatible with upstream user space."
|
||||
)
|
||||
port_type = pmb.helpers.cli.ask(
|
||||
question="Type?",
|
||||
choices=["mainline", "downstream"],
|
||||
default=None,
|
||||
validation_regex="mainline|downstream",
|
||||
complete=["mainline", "downstream"],
|
||||
)
|
||||
|
||||
match port_type:
|
||||
# Mainline ports start out in the testing category
|
||||
case "mainline":
|
||||
return pmb.helpers.devices.DeviceCategory.TESTING
|
||||
case "downstream":
|
||||
return pmb.helpers.devices.DeviceCategory.DOWNSTREAM
|
||||
case _:
|
||||
raise ValueError(f"Unexpected port_type {port_type}")
|
||||
|
||||
|
||||
def ask_for_device(context: Context) -> tuple[str, bool, str]:
|
||||
"""
|
||||
Prompt for the device vendor, model, and kernel.
|
||||
|
@ -537,10 +564,13 @@ def ask_for_device(context: Context) -> tuple[str, bool, str]:
|
|||
current_vendor = vendor
|
||||
continue
|
||||
|
||||
device_category = ask_for_mainline_downstream()
|
||||
|
||||
# New port creation confirmed
|
||||
logging.info(f"Generating new aports for: {device}...")
|
||||
pmb.aportgen.generate(f"device-{device}")
|
||||
pmb.aportgen.generate(f"linux-{device}")
|
||||
pmb.aportgen.generate(f"device-{device}", device_category=device_category)
|
||||
if device_category == pmb.helpers.devices.DeviceCategory.DOWNSTREAM:
|
||||
pmb.aportgen.generate(f"linux-{device}", device_category=device_category)
|
||||
elif device_category == pmb.helpers.devices.DeviceCategory.ARCHIVED:
|
||||
apkbuild = device_path.parent / "APKBUILD"
|
||||
archived = pmb.parse._apkbuild.archived(apkbuild) or "No reason given (this is a bug)"
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue