# Eggshell Linker entry point # # Copyright (C) 2015, 2016 Patrick "P. J." McDermott # # This file is part of the Eggshell Linker. # # The Eggshell Linker is free software: you can redistribute it # and/or modify it under the terms of the GNU General Public License # as published by the Free Software Foundation, either version 3 of # the License, or (at your option) any later version. # # The Eggshell Linker is distributed in the hope that it will be # useful, but WITHOUT ANY WARRANTY; without even the implied warranty # of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with the Eggshell Linker If not, see # . set -u VERSION='0.1.0' usage() { printf 'Usage: %s [option ...] ...\n' "${0}" } help() { usage cat < Use as the interpreter for your program, instead of the default of "/bin/sh" -e Use as the function for beginning execution of your program, instead of the default of "main" -o Use as the name of the program produced by eshld, instead of the default of "out.sh" EOF } version() { cat <. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. EOF } main() { local opt= local interpreter= local entry_point= local output= local make_executable= local input= interpreter='/bin/sh' entry_point='main' output='out.sh' make_executable=true while getopts 'hVI:e:o:' opt; do case "${opt}" in 'h') help return 0 ;; 'V') version return 0 ;; 'I') interpreter="${OPTARG}" ;; 'e') entry_point="${OPTARG}" ;; 'o') output="${OPTARG}" ;; esac done shift $(($OPTIND - 1)) if [ ${#} -lt 1 ]; then usage >&2 return 1 fi if ! link_begin "${interpreter}" "${entry_point}" "${output}" \ ${make_executable}; then return 1 fi for input in "${@}"; do if ! link_file "${input}"; then return 1 fi done if ! link_end; then return 1 fi return 0 }