Files
ladybird/Meta/Utils/utils.py
Timothy Flynn ce7b69ff31 Meta: Move utility scripts to a subfolder
The idea is that scripts directly under Meta are meant to be run by
people. Scripts that are only imported or run by other scripts are
moved to a subdirectory.
2026-04-23 12:36:08 -04:00

60 lines
1.5 KiB
Python

# Copyright (c) 2025-2026, Tim Flynn <trflynn89@ladybird.org>
#
# SPDX-License-Identifier: BSD-2-Clause
import signal
import subprocess
import sys
from pathlib import Path
from typing import Optional
from typing import Union
def run_command(
command: list[str],
input: Union[str, None] = None,
return_output: bool = False,
exit_on_failure: bool = False,
cwd: Union[Path, None] = None,
) -> Optional[str]:
stdin = subprocess.PIPE if type(input) is str else None
stdout = subprocess.PIPE if return_output else None
try:
# FIXME: For Windows, set the working directory so DLLs are found.
with subprocess.Popen(command, stdin=stdin, stdout=stdout, text=True, cwd=cwd) as process:
(output, _) = process.communicate(input=input)
if process.returncode != 0:
if exit_on_failure:
sys.exit(process.returncode)
return None
except KeyboardInterrupt:
process.send_signal(signal.SIGINT)
process.wait()
sys.exit(process.returncode)
if return_output:
return output.strip()
return None
def string_hash(string: str) -> int:
"""Port of AK::string_hash that produces the same u32 value."""
h = 0
for ch in string:
h = (h + ord(ch)) & 0xFFFFFFFF
h = (h + (h << 10)) & 0xFFFFFFFF
h ^= h >> 6
h = (h + (h << 3)) & 0xFFFFFFFF
h ^= h >> 11
h = (h + (h << 15)) & 0xFFFFFFFF
return h