mirror of
https://gitlab.postmarketos.org/postmarketOS/pmbootstrap.git
synced 2025-07-13 03:19:47 +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(
|
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:
|
) -> None:
|
||||||
options: AportGenEntry
|
options: AportGenEntry
|
||||||
|
|
||||||
|
@ -71,7 +74,10 @@ def generate(
|
||||||
else:
|
else:
|
||||||
prefix, folder, options = properties(pkgname)
|
prefix, folder, options = properties(pkgname)
|
||||||
config = get_context().config
|
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
|
# Confirm overwrite
|
||||||
if options["confirm_overwrite"] and os.path.exists(path_target):
|
if options["confirm_overwrite"] and os.path.exists(path_target):
|
||||||
|
@ -80,9 +86,9 @@ def generate(
|
||||||
raise RuntimeError("Aborted.")
|
raise RuntimeError("Aborted.")
|
||||||
|
|
||||||
aportgen = config.work / "aportgen"
|
aportgen = config.work / "aportgen"
|
||||||
|
|
||||||
if os.path.exists(aportgen):
|
if os.path.exists(aportgen):
|
||||||
pmb.helpers.run.user(["rm", "-r", aportgen])
|
pmb.helpers.run.user(["rm", "-r", aportgen])
|
||||||
|
|
||||||
if fork_alpine:
|
if fork_alpine:
|
||||||
upstream = pmb.aportgen.core.get_upstream_aport(
|
upstream = pmb.aportgen.core.get_upstream_aport(
|
||||||
pkgname, retain_branch=fork_alpine_retain_branch
|
pkgname, retain_branch=fork_alpine_retain_branch
|
||||||
|
@ -96,7 +102,7 @@ def generate(
|
||||||
case "busybox-static":
|
case "busybox-static":
|
||||||
pmb.aportgen.busybox_static.generate(pkgname)
|
pmb.aportgen.busybox_static.generate(pkgname)
|
||||||
case "device":
|
case "device":
|
||||||
pmb.aportgen.device.generate(pkgname)
|
pmb.aportgen.device.generate(pkgname, device_category)
|
||||||
case "gcc":
|
case "gcc":
|
||||||
pmb.aportgen.gcc.generate(pkgname)
|
pmb.aportgen.gcc.generate(pkgname)
|
||||||
case "grub-efi":
|
case "grub-efi":
|
||||||
|
|
|
@ -7,6 +7,7 @@ from pmb.types import Bootimg
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
import os
|
import os
|
||||||
import pmb.helpers.cli
|
import pmb.helpers.cli
|
||||||
|
import pmb.helpers.devices
|
||||||
import pmb.helpers.run
|
import pmb.helpers.run
|
||||||
import pmb.aportgen.core
|
import pmb.aportgen.core
|
||||||
import pmb.parse.apkindex
|
import pmb.parse.apkindex
|
||||||
|
@ -267,9 +268,20 @@ def generate_modules_initfs() -> None:
|
||||||
handle.write(line.lstrip() + "\n")
|
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
|
# 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"]:
|
if flash_method in ["fastboot", "heimdall-bootimg"]:
|
||||||
depends.append("mkbootimg")
|
depends.append("mkbootimg")
|
||||||
if flash_method == "0xffff":
|
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")
|
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()
|
arch = ask_for_architecture()
|
||||||
manufacturer = ask_for_manufacturer()
|
manufacturer = ask_for_manufacturer()
|
||||||
name = ask_for_name(manufacturer)
|
name = ask_for_name(manufacturer)
|
||||||
|
@ -328,6 +343,8 @@ def generate(pkgname: str) -> None:
|
||||||
bootimg = None
|
bootimg = None
|
||||||
if flash_method in ["fastboot", "heimdall-bootimg"]:
|
if flash_method in ["fastboot", "heimdall-bootimg"]:
|
||||||
bootimg = ask_for_bootimg()
|
bootimg = ask_for_bootimg()
|
||||||
|
if device_category is None:
|
||||||
|
device_category = pmb.config.ask_for_mainline_downstream()
|
||||||
|
|
||||||
generate_deviceinfo(
|
generate_deviceinfo(
|
||||||
pkgname,
|
pkgname,
|
||||||
|
@ -341,4 +358,4 @@ def generate(pkgname: str) -> None:
|
||||||
bootimg,
|
bootimg,
|
||||||
)
|
)
|
||||||
generate_modules_initfs()
|
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.file import load as load, save as save, serialize as serialize
|
||||||
from pmb.config.sudo import which_sudo
|
from pmb.config.sudo import which_sudo
|
||||||
from pmb.config.other import is_systemd_selected as is_systemd_selected
|
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
|
from . import workdir as workdir
|
||||||
|
|
||||||
|
|
||||||
|
@ -594,7 +597,7 @@ aportgen: dict[str, AportGenEntry] = {
|
||||||
"prefixes": ["busybox-static", "gcc", "musl", "grub-efi"],
|
"prefixes": ["busybox-static", "gcc", "musl", "grub-efi"],
|
||||||
"confirm_overwrite": False,
|
"confirm_overwrite": False,
|
||||||
},
|
},
|
||||||
"device/testing": {
|
"device": {
|
||||||
"prefixes": ["device", "linux"],
|
"prefixes": ["device", "linux"],
|
||||||
"confirm_overwrite": True,
|
"confirm_overwrite": True,
|
||||||
},
|
},
|
||||||
|
|
|
@ -463,6 +463,33 @@ def ask_for_device_kernel(config: Config, device: str) -> str:
|
||||||
return ret
|
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]:
|
def ask_for_device(context: Context) -> tuple[str, bool, str]:
|
||||||
"""
|
"""
|
||||||
Prompt for the device vendor, model, and kernel.
|
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
|
current_vendor = vendor
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
device_category = ask_for_mainline_downstream()
|
||||||
|
|
||||||
# New port creation confirmed
|
# New port creation confirmed
|
||||||
logging.info(f"Generating new aports for: {device}...")
|
logging.info(f"Generating new aports for: {device}...")
|
||||||
pmb.aportgen.generate(f"device-{device}")
|
pmb.aportgen.generate(f"device-{device}", device_category=device_category)
|
||||||
pmb.aportgen.generate(f"linux-{device}")
|
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:
|
elif device_category == pmb.helpers.devices.DeviceCategory.ARCHIVED:
|
||||||
apkbuild = device_path.parent / "APKBUILD"
|
apkbuild = device_path.parent / "APKBUILD"
|
||||||
archived = pmb.parse._apkbuild.archived(apkbuild) or "No reason given (this is a bug)"
|
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