#!/bin/bash usage () { echo "------BPM-Setup options------" echo "bpm-setup -D | Path to package directory" echo "bpm-setup -y | Skips confirmation prompt" echo "bpm-setup -n | Set the package name (Defaults to \"package-name\")" echo "bpm-setup -d | Set the package description (Defaults to \"Default package description\")" echo "bpm-setup -v | Set the package version (Defaults to \"1.0\")" echo "bpm-setup -u | Set the package URL (Optional)" echo "bpm-setup -l | Set the package licenses (Optional)" echo "bpm-setup -t | Set the package type to binary or source (Defaults to binary)" echo "bpm-setup -s | Use a default template file (Defaults to /etc/bpm-utils/source.default)" } if [ $# -eq 0 ]; then usage exit fi NAME="package-name" DESCRIPTION="Default package description" VERSION="1.0" #URL="https://my.project.url/ (Optional)" #LICENSE="Your project's license (Optional)" TYPE="binary" SOURCE_FILE="/etc/bpm-utils/source.default" while getopts "D:n:d:v:u:l:t:s:y" o; do case "${o}" in D) DIRECTORY="${OPTARG}" ;; y) CONFIRM=yes ;; n) NAME="${OPTARG}" ;; d) DESCRIPTION="${OPTARG}" ;; v) VERSION="${OPTARG}" ;; u) URL="${OPTARG}" ;; l) LICENSE="${OPTARG}" ;; t) TYPE="${OPTARG}" ;; s) SOURCE_FILE="$(realpath ${OPTARG})" ;; *) usage exit 1 ;; esac done if [ -z "${DIRECTORY}" ]; then echo "Required directory argument missing. Try 'bpm-setup -D [other options...]" exit 1 fi if [[ ! "${DIRECTORY}" == "/"* ]]; then DIRECTORY="${PWD}/${DIRECTORY}" fi if [ -e "${DIRECTORY}" ]; then echo "This path already exists" exit 1 fi if [[ "$TYPE" != "binary" ]] && [[ "$TYPE" != "source" ]]; then echo "Invalid package type! Package type must be either 'binary' or 'source'" exit 1 fi if [ -z "${CONFIRM}" ]; then echo "Setting up package working directory at ${DIRECTORY} with the following information:" echo "Package name: $NAME" echo "Package description: $DESCRIPTION" echo "Package version: $VERSION" if [ -z "${URL}" ]; then echo "Package URL: Not set" else echo "Package URL: $URL" fi if [ -z "${LICENSE}" ]; then echo "Package license: Not set" else echo "Package license: $LICENSE" fi echo "Package type: $TYPE" read -p "Create package directory? [y/N]: " CREATE case $CREATE in [Yy]* ) ;; *) echo "Exiting bpm-setup..." exit ;; esac fi if ! mkdir -pv $DIRECTORY; then echo "Could not create $DIRECTORY!" exit 1 fi cd $DIRECTORY touch pkg.info echo "name: ${NAME}" >> pkg.info echo "description: ${DESCRIPTION}" >> pkg.info echo "version: ${VERSION}" >> pkg.info if [ ! -z "${URL}" ]; then echo "url: ${URL}" >> pkg.info; fi if [ ! -z "${LICENSE}" ]; then echo "license: ${LICENSE}" >> pkg.info; fi if [[ "$TYPE" == "binary" ]]; then echo "architecture: $(uname -m)" >> pkg.info echo "type: binary" >> pkg.info mkdir -pv files echo "Package directory created successfully!" echo "Make sure to edit the pkg.info file with the appropriate information for your package" echo "Add your binaries under the 'files' directory. For example a binary called 'my_binary' should go under files/usr/bin/my_binary" echo "You can turn your package into a .bpm file use the 'bpm-create ' command" else echo "architecture: any" >> pkg.info echo "type: source" >> pkg.info mkdir -pv source-files if [ -f "${SOURCE_FILE}" ]; then touch source.temp cat "${SOURCE_FILE}" > source.temp export NAME DESCRIPTION VERSION URL LICENSE TYPE envsubst '$NAME:$DESCRIPTION:$VERSION:$URL:$LICENSE:$TYPE' < source.temp > source.sh rm source.temp else echo "Source file at ${SOURCE_FILE} does not exist! Creating empty source.sh instead..." touch source.sh fi echo "Package directory created successfully!" echo "Make sure to edit the pkg.info file with the appropriate information for your package" echo "Add your compilation code in the source.sh file. Follow the instructions on the template file on how to properly create your compilation script" echo "You can add additional files that will be used during compilation to the 'source-files' directory" echo "You can turn your package into a .bpm file use the 'bpm-package ' command" fi