100 lines
3.0 KiB
Bash
Executable File
100 lines
3.0 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
if [[ -z "${1}" ]]; then
|
|
echo "Must give Bash filename..." >&2
|
|
echo "Example:" >&2
|
|
echo " $0 bashscript.sh" >&2
|
|
exit 1
|
|
fi
|
|
|
|
if [[ ${1: -3} != ".sh" ]]; then
|
|
echo "Bash file ${1} does not have a .sh extension..." >&2
|
|
exit 2
|
|
fi
|
|
|
|
if [[ -f "${1}" ]]; then
|
|
bashscript="${1}"
|
|
else
|
|
echo "Bash file ${1} does not exist..." >&2
|
|
exit 3
|
|
fi
|
|
|
|
declaration="$(head -1 "${bashscript}")"
|
|
|
|
if [[ ${declaration: -5} != '/bash' ]]; then
|
|
echo "Bash file ${bashscript} does not invoke Bash binary..." >&2
|
|
exit 4
|
|
fi
|
|
|
|
pathtobash="${declaration:2}"
|
|
|
|
if [[ ! -f "${pathtobash}" ]]; then
|
|
echo "Bash file ${bashscript} invokes Bash binary at invalid location ${pathtobash}..." >&2
|
|
exit 5
|
|
fi
|
|
|
|
builddatetime="$(date "+%y%m%d%H%M")"
|
|
builddatestring="$(date)"
|
|
|
|
bashscriptfile="${bashscript##*/}"
|
|
bashscriptpath="${bashscript%/*}"
|
|
if [[ -z "${bashscriptpath}" || "${bashscriptpath}" == "${bashscriptfile}" ]]; then
|
|
bashscriptpath="."
|
|
fi
|
|
|
|
if [[ ! -f "${bashscriptpath}/build.count" ]]; then
|
|
buildcount=1
|
|
else
|
|
buildcount=$(head -1 "${bashscriptpath}/build.count")
|
|
#######################################################
|
|
# Add Regex to check buildcount is an integer about 0 #
|
|
#######################################################
|
|
((buildcount++))
|
|
fi
|
|
echo ${buildcount} > "${bashscriptpath}/build.count"
|
|
buildfile="${bashscriptfile%.*}"
|
|
buildpath="./build-${builddatetime}-${buildcount}"
|
|
|
|
echo "Reading ${bashscriptfile}"
|
|
echo "Project path ${bashscriptpath}"
|
|
echo "Build number ${buildcount}"
|
|
echo "Build date and time ${builddatetime}"
|
|
echo "Build path ${buildpath}"
|
|
echo "Writing to ${buildfile}"
|
|
|
|
isstart=true
|
|
|
|
mkdir -p "${buildpath}"
|
|
while IFS= read -r line; do
|
|
if [[ ${isstart} == true ]]; then
|
|
echo "${line}" > "${buildpath}/${buildfile}"
|
|
echo "## Built on ${builddatestring}" >> "${buildpath}/${buildfile}"
|
|
echo "## Source script ${bashscriptfile}" >> "${buildpath}/${buildfile}"
|
|
echo "## Project path ${bashscriptpath}" >> "${buildpath}/${buildfile}"
|
|
echo "## Build number ${buildcount}" >> "${buildpath}/${buildfile}"
|
|
echo "## Build path ${buildpath}" >> "${buildpath}/${buildfile}"
|
|
echo "## Build file ${buildfile}" >> "${buildpath}/${buildfile}"
|
|
echo >> "${buildpath}/${buildfile}"
|
|
isstart=false
|
|
else
|
|
if [[ "$line" =~ ^[[:space:]]*source[[:space:]]+([^[:space:]]+\.lib\.sh)[[:space:]]*$ ]]; then
|
|
library="${BASH_REMATCH[1]}"
|
|
#if [[ ${line} =~ ^source && ${line} =~ \.lib\.sh$ ]]; then
|
|
# library="${line:7}"
|
|
if [[ -f "${bashscriptpath}/${library}" ]]; then
|
|
echo "Importing library ${library} from path ${bashscriptpath}"
|
|
cat "${bashscriptpath}/${library}" >> "${buildpath}/${buildfile}"
|
|
echo >> "${buildpath}/${buildfile}"
|
|
else
|
|
echo "Library ${library} not found at ${bashscriptpath}"
|
|
echo "Build failed!"
|
|
exit 6
|
|
fi
|
|
else
|
|
echo "${line}" >> "${buildpath}/${buildfile}"
|
|
fi
|
|
fi
|
|
done < "${bashscript}"
|
|
chmod +x "${buildpath}/${buildfile}"
|
|
echo "Build complete!"
|