#!/bin/bash APP_SVNID='$HeadURL$ $LastChangedRevision$' . $(ade-config ade_share_prefix)/include/ade.sh || { echo "${0##*/}: INTERNAL ERROR: failed to load ade.sh" >&2; exit 3; } ADEASS_DEFINED_ERRORS=( "KEY=ADEASS_ERR_MISC; FMT=\"%s\"" ) adeass() { #local OPTVAL LISTPATHS RC TEMP local ERRSTACK_REF #local ISRELABELABLE_FLAG SANDPIT_DIR REF_FILE OUT_FILE DIR TEST_CMDS #local VERBOSELEVEL local -a DOLLARAT ERRSTACK_REF="$1" shift # Register application-specific errors ade_register_error_types ADEASS_DEFINED_ERRORS # Defaults for options OPT_FORMAT= OPT_MODULES= OPT_COMMENT_FLAG=false # Register adeass's options ade_register_options "$ERRSTACK_REF" --longoptions=modules:,comment,format: --callback-template="handle_option_%s" || return $? ade_set_callbacks "$ERRSTACK_REF" adeass_usage_help adeass_version adeass_paths || return $? # Process options ade_process_options "$ERRSTACK_REF" NEW_DOLLAR_AT "$@" || return $? set -- "${NEW_DOLLAR_AT[@]}" # Process arguments [ $# -ge 1 ] || ade_show_bad_usage "$ERRSTACK_REF" # Sanity checks and derivations [ "X$OPT_FORMAT" != X ] || ade_show_bad_usage "$ERRSTACK_REF" if { ! [[ $OPT_FORMAT =~ ^(man|cpp|shell|perl|python|make|encapsulated-make)$ ]]; }; then ade_error "$ERRSTACK_REF" ADEASS_ERR_MISC "$OPT_FORMAT: bad format" return $ADE_FAIL fi for MODULE in $OPT_MODULES; do ade_validate_command "$ERRSTACK_REF" $MODULE-config || return $? done # Guts for FILE in "$@"; do if { ! [[ $FILE =~ \.ass$ ]]; }; then ade_error "$ERRSTACK_REF" ADEASS_ERR_MISC "$FILE: bad extension" return $ADE_FAIL fi if [ ! -f $FILE ]; then ade_error "$ERRSTACK_REF" ADEASS_ERR_MISC "$FILE: not found" return $ADE_FAIL fi { # " " required to get a non-blank line comment. ! $OPT_COMMENT_FLAG || comment "$ERRSTACK_REF" $OPT_FORMAT " " ! $OPT_COMMENT_FLAG || comment "$ERRSTACK_REF" $OPT_FORMAT "This file was auto-generated by $PROGNAME! Manual edits will be lost!" ! $OPT_COMMENT_FLAG || comment "$ERRSTACK_REF" $OPT_FORMAT " " for MODULE in $OPT_MODULES; do ! $OPT_COMMENT_FLAG || comment "$ERRSTACK_REF" $OPT_FORMAT "Beginning of output from '$MODULE-config --format=$OPT_FORMAT'" if ! $MODULE-config --format=$OPT_FORMAT; then ade_error "$ERRSTACK_REF" ADEASS_ERR_MISC "$MODULE-config failed; see above" return $ADE_FAIL fi ! $OPT_COMMENT_FLAG || comment "$ERRSTACK_REF" $OPT_FORMAT "End of output from '$MODULE-config --format=$OPT_FORMAT'" # .../lib/include/ade.man exists, but .../lib/include/. and # .../lib/include/ade. do not. So either we check if # it exists before catting it, or we discard stderr and return code. We do the # former. if [ -f $($MODULE-config --format=plain ${MODULE}_share_prefix)/include/$MODULE.$OPT_FORMAT ]; then ! $OPT_COMMENT_FLAG || comment "$ERRSTACK_REF" $OPT_FORMAT "Beginning of contents of $($MODULE-config --format=plain ${MODULE}_share_prefix)/include/$MODULE.$OPT_FORMAT" cat $($MODULE-config --format=plain ${MODULE}_share_prefix)/include/$MODULE.$OPT_FORMAT ! $OPT_COMMENT_FLAG || comment "$ERRSTACK_REF" $OPT_FORMAT "End of contents of $($MODULE-config --format=plain ${MODULE}_share_prefix)/include/$MODULE.$OPT_FORMAT" fi done cat $FILE } > ${FILE%.ass} done return $ADE_OK } comment() { local OPT_FORMAT TEXT ERRSTACK_REF ERRSTACK_REF=$1 OPT_FORMAT=$2 TEXT=$3 # Might be empty if [ "X$TEXT" = X ]; then echo elif [[ $OPT_FORMAT =~ ^(shell|perl|make|encapsulated-make)$ ]]; then echo "# $TEXT" elif [ $OPT_FORMAT = cpp ]; then echo "#pragma comment(user, \"$TEXT\")" elif [ $OPT_FORMAT = man ]; then echo ".\\\" $TEXT" elif [ $OPT_FORMAT = plain ]; then echo "$TEXT" else ade_internal "$ERRSTACK_REF" "comment: $OPT_FORMAT: invalid comment format" fi return $ADE_OK } handle_option_modules() { local ERRSTACK_REF="$1"; shift OPT_MODULES="$OPT_MODULES${OPT_MODULES:+ }${1//,/ }" } handle_option_format() { local ERRSTACK_REF="$1"; shift OPT_FORMAT=$1 ade_debug "$ERRSTACK_REF" 10 "handle_option_format: OPT_FORMAT=$OPT_FORMAT" } handle_option_comment() { local ERRSTACK_REF="$1"; shift OPT_COMMENT_FLAG=true } adeass_usage_help() { local ERRSTACK_REF="$1"; shift local USAGE_TEXT_SHORT_REF="$1"; shift local USAGE_TEXT_LONG_REF="$1"; shift eval "$USAGE_TEXT_SHORT_REF=\" ...\"" eval "$USAGE_TEXT_LONG_REF=\"\ | --modules=[,...] modules to read | --format= output format | --comment enable comments\"" return $ADE_OK } adeass_paths() { local ERRSTACK_REF="$1"; shift local PATHLIST_REF=$1; shift eval "$PATHLIST_REF=\"\ \"" return $ADE_OK } adeass_version() { local ERRSTACK_REF="$1"; shift local VERSION_REF=$1; shift ade_extract_version "$ERRSTACK_REF" "$APP_SVNID" "$VERSION_REF" return $ADE_OK } ade_main adeass "$@"