mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-09-11 13:36:13 +03:00
Meta: Add new-project.sh :^)
This script will instantiate a HackStudio template into a project on the host. It currently supports all templates used by HackStudio. To avoid having to maintain compatibility between other shells and the Serenity shell in the postcreate scripts, we build the Serenity shell with Lagom and use that to run the script.
This commit is contained in:
parent
d456af1cd3
commit
1d2bde2403
Notes:
sideshowbarker
2024-07-18 07:01:35 +09:00
Author: https://github.com/sin-ack Commit: https://github.com/SerenityOS/serenity/commit/1d2bde24030 Pull-request: https://github.com/SerenityOS/serenity/pull/9358 Reviewed-by: https://github.com/alimpfard ✅
100
Meta/new-project.sh
Executable file
100
Meta/new-project.sh
Executable file
@ -0,0 +1,100 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
script_path="$(cd -P -- "$(dirname -- "$0")" && pwd -P)"
|
||||
cd "${script_path}/.."
|
||||
|
||||
script_name="$(basename "$0")"
|
||||
|
||||
function list_templates() {
|
||||
echo "Available templates:"
|
||||
for file in ./Base/res/devel/templates/*.ini; do
|
||||
printf ' %s - ' "$(basename "${file%%.ini}")"
|
||||
awk -F "=" '/Description/ { print $2 }' "$file"
|
||||
done
|
||||
}
|
||||
|
||||
function usage() {
|
||||
local return_code=${1:-0}
|
||||
|
||||
cat <<EOF
|
||||
Usage: $script_name TEMPLATE DESTINATION
|
||||
|
||||
Instantiates a HackStudio template into a project at the given destination.
|
||||
The last component of the destination path is used as the project name, and must
|
||||
be a valid identifier (but hyphens are allowed and will be converted into
|
||||
underscores).
|
||||
|
||||
Parameters:
|
||||
TEMPLATE - The HackStudio template to use.
|
||||
DESTINATION - The destination directory.
|
||||
|
||||
$(list_templates)
|
||||
EOF
|
||||
exit "$return_code"
|
||||
}
|
||||
|
||||
while [[ $# -ge 1 ]]; do
|
||||
case "$1" in
|
||||
-h|--help) usage;;
|
||||
-*) echo "$script_name: unknown parameter $1"; usage 1;;
|
||||
*) break;;
|
||||
esac
|
||||
done
|
||||
|
||||
[[ $# -ne 2 ]] && echo "$script_name: takes exactly 2 parameters" && usage 1
|
||||
|
||||
TEMPLATE="$1"
|
||||
DESTINATION="$2"
|
||||
|
||||
TEMPLATE_SOURCE_DIRECTORY="./Base/res/devel/templates/$TEMPLATE"
|
||||
TEMPLATE_INI="./Base/res/devel/templates/$TEMPLATE.ini"
|
||||
TEMPLATE_POSTCREATE="./Base/res/devel/templates/$TEMPLATE.postcreate"
|
||||
|
||||
if [[ ! -f "$TEMPLATE_INI" ]]; then
|
||||
echo "$script_name: unknown template \"$TEMPLATE\"."
|
||||
list_templates
|
||||
exit 1
|
||||
fi
|
||||
|
||||
PROJECT_NAME="$(basename "$DESTINATION")"
|
||||
|
||||
if ! echo "$PROJECT_NAME" | grep -q '^[a-zA-Z][a-zA-Z0-9_\-]*$'; then
|
||||
echo "$script_name: The destination directory name contains invalid characters."
|
||||
echo "The destination directory name must be a valid identifier, with the exception of hyphens."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ -d "$DESTINATION" ]]; then
|
||||
echo "$script_name: Path already exists: $DESTINATION"
|
||||
echo "Refusing to overwrite it."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
sh="Build/lagom/shell"
|
||||
|
||||
if [[ ! -x $sh ]]; then
|
||||
echo "Building the Serenity shell, please wait..."
|
||||
Meta/serenity.sh build lagom shell_lagom
|
||||
fi
|
||||
|
||||
echo "Instantiating template \"$TEMPLATE\" at \"$DESTINATION\"..."
|
||||
mkdir -p "$DESTINATION"
|
||||
|
||||
if [[ -d "$TEMPLATE_SOURCE_DIRECTORY" ]]; then
|
||||
printf ' Copying template contents... '
|
||||
cp -R "$TEMPLATE_SOURCE_DIRECTORY"/* "$DESTINATION"
|
||||
echo "OK"
|
||||
fi
|
||||
|
||||
if [[ -f "$TEMPLATE_POSTCREATE" ]]; then
|
||||
printf ' Running postcreate script... '
|
||||
|
||||
namespace_safe_name="${PROJECT_NAME//-/_}"
|
||||
$sh "$TEMPLATE_POSTCREATE" "$PROJECT_NAME" "$(realpath "$DESTINATION")" "$namespace_safe_name"
|
||||
|
||||
echo "OK"
|
||||
fi
|
||||
|
||||
echo "Project created successfully at $(realpath "$DESTINATION")."
|
Loading…
Reference in New Issue
Block a user