From 36cf5f8c449b67665b240e51731f903ebe146e8e Mon Sep 17 00:00:00 2001 From: P. J. McDermott Date: Mon, 22 Feb 2016 15:43:21 -0500 Subject: Add basic eshld --- (limited to 'eshld/main.esh') diff --git a/eshld/main.esh b/eshld/main.esh new file mode 100644 index 0000000..775179f --- /dev/null +++ b/eshld/main.esh @@ -0,0 +1,113 @@ +# Eggshell Linker entry point +# +# Copyright (C) 2015 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 +} -- cgit v0.9.1