2025-02-17 15:19:09 +01:00
|
|
|
#!/bin/bash
|
|
|
|
|
|
|
|
# Copyright (C) 2025 Nicolás Ortega Froysa <nicolas@ortegas.org> All rights reserved.
|
|
|
|
# Author: Nicolás Ortega Froysa <nicolas@ortegas.org>
|
|
|
|
#
|
|
|
|
# This software is provided 'as-is', without any express or implied
|
|
|
|
# warranty. In no event will the authors be held liable for any damages
|
|
|
|
# arising from the use of this software.
|
|
|
|
#
|
|
|
|
# Permission is granted to anyone to use this software for any purpose,
|
|
|
|
# including commercial applications, and to alter it and redistribute it
|
|
|
|
# freely, subject to the following restrictions:
|
|
|
|
#
|
|
|
|
# 1. The origin of this software must not be misrepresented; you must not
|
|
|
|
# claim that you wrote the original software. If you use this software
|
|
|
|
# in a product, an acknowledgment in the product documentation would be
|
|
|
|
# appreciated but is not required.
|
|
|
|
#
|
|
|
|
# 2. Altered source versions must be plainly marked as such, and must not be
|
|
|
|
# misrepresented as being the original software.
|
|
|
|
#
|
|
|
|
# 3. This notice may not be removed or altered from any source
|
|
|
|
# distribution.
|
|
|
|
|
2025-02-18 09:29:31 +01:00
|
|
|
set -euo pipefail
|
|
|
|
|
2025-02-17 15:19:09 +01:00
|
|
|
SOURCE_DIR="src"
|
|
|
|
OUTPUT_DIR="output"
|
2025-02-18 10:05:55 +01:00
|
|
|
JOBS=1
|
2025-02-17 15:19:09 +01:00
|
|
|
|
2025-02-17 15:37:59 +01:00
|
|
|
function print_usage() {
|
2025-02-18 10:05:55 +01:00
|
|
|
echo "$0 [-o <output dir>] [-s <source dir>] [-j <num>]"
|
2025-02-17 15:37:59 +01:00
|
|
|
}
|
|
|
|
|
2025-02-18 10:05:55 +01:00
|
|
|
while getopts "o:s:j:h" opt
|
2025-02-17 15:37:59 +01:00
|
|
|
do
|
|
|
|
case "$opt" in
|
|
|
|
o)
|
|
|
|
OUTPUT_DIR="${OPTARG}"
|
|
|
|
;;
|
|
|
|
s)
|
|
|
|
SOURCE_DIR="${OPTARG}"
|
|
|
|
;;
|
2025-02-18 10:05:55 +01:00
|
|
|
j)
|
|
|
|
JOBS="${OPTARG}"
|
|
|
|
if ! [[ $JOBS =~ ^[0-9]+$ ]]
|
|
|
|
then
|
|
|
|
>&2 echo "Jobs option '$JOBS' is not an integer."
|
|
|
|
print_usage
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
;;
|
2025-02-17 15:37:59 +01:00
|
|
|
h)
|
|
|
|
print_usage
|
|
|
|
exit
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
print_usage
|
|
|
|
exit 1
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
done
|
|
|
|
|
2025-02-18 10:05:55 +01:00
|
|
|
# Make these variables visible within parallel
|
|
|
|
export OUTPUT_DIR
|
|
|
|
export SOURCE_DIR
|
|
|
|
|
2025-02-18 09:13:13 +01:00
|
|
|
while IFS= read -r -d '' dir
|
2025-02-17 15:19:09 +01:00
|
|
|
do
|
|
|
|
OUT_DIR="${OUTPUT_DIR}/${dir:${#SOURCE_DIR}}"
|
|
|
|
if ! [ -d "$OUT_DIR" ]
|
|
|
|
then
|
|
|
|
mkdir -p "${OUTPUT_DIR}/${dir:${#SOURCE_DIR}}"
|
|
|
|
fi
|
2025-02-18 09:13:13 +01:00
|
|
|
done < <(find "$SOURCE_DIR" -mindepth 1 -type d -print0)
|
2025-02-17 15:19:09 +01:00
|
|
|
|
2025-02-18 10:05:55 +01:00
|
|
|
function process_file() {
|
|
|
|
file="$1"
|
2025-02-18 09:06:58 +01:00
|
|
|
if [[ $file = *.php ]]
|
2025-02-17 15:19:09 +01:00
|
|
|
then
|
|
|
|
DEST_FILE="${OUTPUT_DIR}/${file:${#SOURCE_DIR}:-4}"
|
|
|
|
if ! [ "$file" -nt "$DEST_FILE" ]
|
|
|
|
then
|
2025-02-18 10:05:55 +01:00
|
|
|
return
|
2025-02-17 15:19:09 +01:00
|
|
|
fi
|
|
|
|
echo -n "Generating $DEST_FILE ... "
|
|
|
|
php "$file" > "$DEST_FILE"
|
|
|
|
echo "done"
|
|
|
|
else
|
|
|
|
DEST_FILE="${OUTPUT_DIR}/${file:${#SOURCE_DIR}}"
|
|
|
|
if ! [ "$file" -nt "$DEST_FILE" ]
|
|
|
|
then
|
2025-02-18 10:05:55 +01:00
|
|
|
return
|
2025-02-17 15:19:09 +01:00
|
|
|
fi
|
|
|
|
echo -n "Copying target $DEST_FILE ... "
|
|
|
|
cp "$file" "$DEST_FILE"
|
|
|
|
echo "done"
|
|
|
|
fi
|
2025-02-18 10:05:55 +01:00
|
|
|
}
|
|
|
|
# Make function usable to parallel
|
|
|
|
export -f process_file
|
|
|
|
|
|
|
|
find "$SOURCE_DIR" -type f -not -name '*.cfg.php' |
|
|
|
|
parallel -j"${JOBS}" process_file
|