Files
monero-generator/generator.sh
T
2018-01-11 16:28:26 +02:00

144 lines
3.7 KiB
Bash

#! /usr/bin/env bash
# Bash script for automatic generation and deployment
# Exit immediately if an error occurs, or if an undeclared variable is used
set -o errexit
[ "$OSTYPE" != "win"* ] || die "Install MinGW to use on Windows"
# For bold text
if [ "$OSTYPE" != "msys" ]; then
bold=$(tput bold)
normal=$(tput sgr0)
fi
# Set directory vars
. "vars.cfg"
# Perform cleanup on exit
function finish {
# Remove temporary files if exist
echo "Remove temporary files..."
rm -f "${UPDATES_PATH}"
rm -f "${BASH_CONFIG}"
rm -rf "${TEMP_PATH}"
}
trap finish EXIT
# Generate source code and compile
function generate_coin {
# Define coin paths
export BASE_COIN_PATH="${WORK_FOLDERS_PATH}/${__CONFIG_base_coin_name}"
export NEW_COIN_PATH="${WORK_FOLDERS_PATH}/${__CONFIG_core_CRYPTONOTE_NAME}"
if [ -d "${BASE_COIN_PATH}" ]; then
cd "${BASE_COIN_PATH}"
echo "Updating ${__CONFIG_base_coin_name}..."
git pull
cd "${PROJECT_DIR}"
else
echo "Cloning ${__CONFIG_base_coin_name}..."
git clone "${__CONFIG_base_coin_git}" "${BASE_COIN_PATH}"
fi
# Exit if base coin does not exists
if [ ! -d "${BASE_COIN_PATH}" ]; then
echo "Base coin does not exists"
echo "Abort clone generation"
exit 4
fi
echo "Make temporary ${__CONFIG_base_coin_name} copy..."
[ -d "${TEMP_PATH}" ] || mkdir -p "${TEMP_PATH}"
cp -af "${BASE_COIN_PATH}/." "${TEMP_PATH}"
cp ${BASE_COIN_PATH}/src/blocks/* ${TEMP_PATH}/src/blocks
# Extensions
echo "Personalize base coin source..."
export __CONFIG_extensions_text="${__CONFIG_extensions[@]}"
for extension in "${__CONFIG_extensions[@]}"
do
echo "${bold}Execute ${EXTENSIONS_PATH}/${extension}${normal}"
python "lib/file-modification.py" --extension "${EXTENSIONS_PATH}/${extension}" --config=$CONFIG_FILE --source=${TEMP_PATH}
done
[ -d "${NEW_COIN_PATH}" ] || mkdir -p "${NEW_COIN_PATH}"
echo "Create patch"
cd "${WORK_FOLDERS_PATH}";
EXCLUDE_FROM_DIFF="-x '.git'"
if [ -d "${BASE_COIN_PATH}/build" ]; then
EXCLUDE_FROM_DIFF="${EXCLUDE_FROM_DIFF} -x 'build'"
fi
diff -Naur -x .git ${NEW_COIN_PATH##${WORK_FOLDERS_PATH}/} ${TEMP_PATH##${WORK_FOLDERS_PATH}/} > "${UPDATES_PATH}" || [ $? -eq 1 ]
echo "Apply patch"
[ -d "${NEW_COIN_PATH}" ] || mkdir -p "${NEW_COIN_PATH}"
if [ ! -z "${UPDATES_PATH}" ]; then
# Generate new coin
cd "${NEW_COIN_PATH}" && patch -s -p1 < "${UPDATES_PATH}" && cd "${SCRIPTS_PATH}"
chmod -R 755 ${NEW_COIN_PATH}
cp ${TEMP_PATH}/src/blocks/* ${NEW_COIN_PATH}/src/blocks
bash "${SCRIPTS_PATH}/compile.sh" -c "${COMPILE_ARGS}" -z
fi
}
# Usage info
show_help() {
cat << EOF
Usage: ${0##*/} [-h] [-f FILE] [-c <string>]
Reads a config file and creates and compiles Cryptonote coin. "config.json" as default
-h display this help and exit
-f config file
-c compile arguments
EOF
}
# A POSIX variable
OPTIND=1 # Reset in case getopts has been used previously in the shell.
# Initialize our own variables:
CONFIG_FILE='config.json'
COMPILE_ARGS=''
while getopts "h?f:c:" opt; do
case "$opt" in
h|\?)
show_help
exit 0
;;
f) CONFIG_FILE=${OPTARG}
;;
c) COMPILE_ARGS=${OPTARG}
;;
esac
done
shift $((OPTIND-1))
# Setting config file
if [[ "${CONFIG_FILE}" != /* ]]; then
CONFIG_FILE="${CONFIG_PATH}/${CONFIG_FILE}"
fi
if [ ! -f ${CONFIG_FILE} ]; then
echo "ERROR: config file does not exits"
exit
fi
[ -d "${WORK_FOLDERS_PATH}" ] || mkdir -p "${WORK_FOLDERS_PATH}"
# Get environment environment_variables
python "lib/environment_variables.py" --config=$CONFIG_FILE --output=$BASH_CONFIG
if [ ! -f ${BASH_CONFIG} ]; then
echo "Config file was not translated to bash."
echo "Abort coin generation"
exit 3
fi
source ${BASH_CONFIG}
generate_coin