From 482ff021e313131af25eb6c8d70bd4d414c32105 Mon Sep 17 00:00:00 2001 From: Luke Shumaker Date: Wed, 8 Jun 2016 21:53:02 -0400 Subject: Use autothing, touch up buildsystem --- .gitignore | 5 ++- Makefile | 40 +++++++++++++-------- common.sh | 109 -------------------------------------------------------- common.sh.in | 109 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ediff.sh.in | 2 +- emacsmail.sh.in | 2 +- emacsterm.sh.in | 2 +- 7 files changed, 141 insertions(+), 128 deletions(-) delete mode 100644 common.sh create mode 100644 common.sh.in diff --git a/.gitignore b/.gitignore index 58eb704..af0a490 100644 --- a/.gitignore +++ b/.gitignore @@ -3,4 +3,7 @@ emacsmail emacsterm *.sh -!common.sh + +.srcfiles.mk +.tmp.* +.var.* diff --git a/Makefile b/Makefile index bbb19d1..96fcd9a 100644 --- a/Makefile +++ b/Makefile @@ -3,34 +3,44 @@ prefix=/usr/local exec_prefix=$(prefix) bindir=$(exec_prefix)/bin -bash=/bin/bash +bash=/usr/bin/env bash -EDIT = { m4 -P | sed 's|@bash@|$(bash)|g'; } +EDIT = { m4 -P | sed -e 's|@bash@|$(bash)|g' -e 's|@VERSION@|$(VERSION)|'; } INSTALL_PROGRAM = install -Dm755 RM = rm -f +PACKAGE = emacsutils +VERSION = 0.9 + +topoutdir=. +topsrcdir=. +include $(topoutdir)/build-aux/Makefile.head.mk -targets = ediff emacsmail emacsterm -all: PHONY $(targets) -install: PHONY $(addprefix $(DESTDIR)$(bindir)/,$(targets)) -uninstall: PHONY - $(RM) -- $(addprefix $(DESTDIR)$(bindir)/,$(targets)) -clean: PHONY - $(RM) -- $(addsuffix .sh,$(targets)) -distclean: PHONY clean - $(RM) -- $(targets) +ifeq ($(wildcard .git/),) +include .srcfiles.mk +else +.srcfiles.mk: FORCE + @git ls-files | sed 's|^|std.src_files += |' | $(WRITE_IFCHANGED) $@ +-include .srcfiles.mk +endif - +std.out_files = ediff emacsmail emacsterm +std.sys_files = $(addprefix $(bindir)/,$(std.out_files)) +std.clean_files += *.sh -%.sh: %.sh.in common.sh +%.sh: %.sh.in common.sh.in .var.bash .var.VERSION $(EDIT) < $< > $@ $(DESTDIR)$(bindir)/%: % $(INSTALL_PROGRAM) $< $@ - +.var.%: FORCE + @printf '%s' '$($*)' | sed 's|^|#|' | $(WRITE_IFCHANGED) '$@' +-include $(wildcard .var.*) -.PHONY: PHONY +.PHONY: PHONY FORCE .DELETE_ON_ERROR: +.SECONDARY: +include $(topoutdir)/build-aux/Makefile.tail.mk diff --git a/common.sh b/common.sh deleted file mode 100644 index 61fa26f..0000000 --- a/common.sh +++ /dev/null @@ -1,109 +0,0 @@ -# begin common.sh {{{ - -# Copyright (C) 2013-2014 Luke Shumaker -# -# This file is not considered part of GNU Emacs. -# -# This program 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. -# -# This program 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 this program. If not, see . - -if type gettext &>/dev/null; then - _() { gettext "$@"; } -else - _() { echo "$@"; } -fi - -print() { - printf -- "$(_ "$1")\n" "${@:2}" -} - -flag() { - if [[ -z "$_flag_indent" ]]; then - local str=$(emacsclient --help | - sed -rn '/^-.*\s\s/{ s/(\s\s)\S.*/\1/p; q; }' | - expand) - declare -gi _flag_indent=${#str} - fi - printf -- "%- ${_flag_indent}s%s\n" "$1" "$(print "${@:2}")" -} - -error() { - printf -- "%s: %s\n" "$0" "$(print "$@")" >&2 -} - -emacs_quote() { - declare -a args=("$@") - args=("${args[@]//\\/\\\\}") # \ -> \\ - args=("${args[@]//\"/\\\"}") # " -> \" - printf -- '"%s" ' "${args[@]}" # wrap them in quotes, return -} - -bash_quote() { - printf -- '%q ' "$@" -} - -version() { - print '%s (Emacs utils) %s, %s' \ - "${0##*/}" 0.9 "$(emacsclient --version)" -} - -# Sets the global variables: -# - emacs_getopt_o -# - emacs_getopt_l -# - emacs_getopt_1 -# - emacs_getopt_2 -emacs_getopt_init() { - declare ifs="$IFS" - - declare -a a_flags - IFS=$'\n' a_flags=($( - LC_ALL=C emacsclient --help | - grep ^- | - sed -e 's/\s\s.*//' -e 's/, /\n/g' | - sed -e 's/[ =].*/:/' -e 's/^-*//' | - grep -vEx 'e|eval')) - - declare -a a_flags_o a_flags_l a_flags_1 a_flags_2 - IFS=$'\n' a_flags_o=($(printf '%s\n' "${a_flags[@]}"|grep -v '^.[^:]')) - IFS=$'\n' a_flags_l=($(printf '%s\n' "${a_flags[@]}"|grep '^.[^:]')) - IFS=$'\n' a_flags_1=($(printf '%s\n' "${a_flags[@]}"|sed -rn -e 's/^(.)$/-\1/p' -e 's/^([^-].*[^:])$/--\1/p')) - IFS=$'\n' a_flags_2=($(printf '%s\n' "${a_flags[@]}"|sed -rn -e 's/^(.):$/-\1/p' -e 's/^([^-].*):$/--\1/p')) - - IFS='' emacs_getopt_o="${a_flags_o[*]}" - IFS=',' emacs_getopt_l="${a_flags_l[*]}" - IFS='|' emacs_getopt_2="^(${a_flags_2[*]})\$" - - IFS=$ifs -} - -# Sets the global variable: -# - args -emacs_getopt() { - declare o="$1" - declare l="$2" - shift 2 - [[ -z "${emacs_getopt_o}" ]] || - [[ -z "${emacs_getopt_l}" ]] || - emacs_getopt_init - getopt -a \ - -n "$0" \ - -o "${emacs_getopt_o}${o}" \ - -l "${emacs_getopt_l}${l:+,$l}" \ - -- "$@" -} - -emacs_usage() { - emacsclient --help | grep -E '^(\s|-)' -} - -# }}} end common.sh diff --git a/common.sh.in b/common.sh.in new file mode 100644 index 0000000..614f462 --- /dev/null +++ b/common.sh.in @@ -0,0 +1,109 @@ +# begin common.sh {{{ + +# Copyright (C) 2013-2014 Luke Shumaker +# +# This file is not considered part of GNU Emacs. +# +# This program 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. +# +# This program 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 this program. If not, see . + +if type gettext &>/dev/null; then + _() { gettext "$@"; } +else + _() { echo "$@"; } +fi + +print() { + printf -- "$(_ "$1")\n" "${@:2}" +} + +flag() { + if [[ -z "$_flag_indent" ]]; then + local str=$(emacsclient --help | + sed -rn '/^-.*\s\s/{ s/(\s\s)\S.*/\1/p; q; }' | + expand) + declare -gi _flag_indent=${#str} + fi + printf -- "%- ${_flag_indent}s%s\n" "$1" "$(print "${@:2}")" +} + +error() { + printf -- "%s: %s\n" "$0" "$(print "$@")" >&2 +} + +emacs_quote() { + declare -a args=("$@") + args=("${args[@]//\\/\\\\}") # \ -> \\ + args=("${args[@]//\"/\\\"}") # " -> \" + printf -- '"%s" ' "${args[@]}" # wrap them in quotes, return +} + +bash_quote() { + printf -- '%q ' "$@" +} + +version() { + print '%s (Emacs utils) %s, %s' \ + "${0##*/}" @VERSION@ "$(emacsclient --version)" +} + +# Sets the global variables: +# - emacs_getopt_o +# - emacs_getopt_l +# - emacs_getopt_1 +# - emacs_getopt_2 +emacs_getopt_init() { + declare ifs="$IFS" + + declare -a a_flags + IFS=$'\n' a_flags=($( + LC_ALL=C emacsclient --help | + grep ^- | + sed -e 's/\s\s.*//' -e 's/, /\n/g' | + sed -e 's/[ =].*/:/' -e 's/^-*//' | + grep -vEx 'e|eval')) + + declare -a a_flags_o a_flags_l a_flags_1 a_flags_2 + IFS=$'\n' a_flags_o=($(printf '%s\n' "${a_flags[@]}"|grep -v '^.[^:]')) + IFS=$'\n' a_flags_l=($(printf '%s\n' "${a_flags[@]}"|grep '^.[^:]')) + IFS=$'\n' a_flags_1=($(printf '%s\n' "${a_flags[@]}"|sed -rn -e 's/^(.)$/-\1/p' -e 's/^([^-].*[^:])$/--\1/p')) + IFS=$'\n' a_flags_2=($(printf '%s\n' "${a_flags[@]}"|sed -rn -e 's/^(.):$/-\1/p' -e 's/^([^-].*):$/--\1/p')) + + IFS='' emacs_getopt_o="${a_flags_o[*]}" + IFS=',' emacs_getopt_l="${a_flags_l[*]}" + IFS='|' emacs_getopt_2="^(${a_flags_2[*]})\$" + + IFS=$ifs +} + +# Sets the global variable: +# - args +emacs_getopt() { + declare o="$1" + declare l="$2" + shift 2 + [[ -z "${emacs_getopt_o}" ]] || + [[ -z "${emacs_getopt_l}" ]] || + emacs_getopt_init + getopt -a \ + -n "$0" \ + -o "${emacs_getopt_o}${o}" \ + -l "${emacs_getopt_l}${l:+,$l}" \ + -- "$@" +} + +emacs_usage() { + emacsclient --help | grep -E '^(\s|-)' +} + +# }}} end common.sh diff --git a/ediff.sh.in b/ediff.sh.in index 63b8238..164e6da 100644 --- a/ediff.sh.in +++ b/ediff.sh.in @@ -17,7 +17,7 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . -m4_include(common.sh) +m4_include(common.sh.in) usage() { print 'Usage: %q [OPTIONS] FILE_A FILE_B' "$0" diff --git a/emacsmail.sh.in b/emacsmail.sh.in index 3ccaef3..f3b1fce 100644 --- a/emacsmail.sh.in +++ b/emacsmail.sh.in @@ -17,7 +17,7 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . -m4_include(common.sh) +m4_include(common.sh.in) usage() { print 'Usage: %q [OPTIONS] MAILTO_URL' "$0" diff --git a/emacsterm.sh.in b/emacsterm.sh.in index a8cef2a..3340bea 100644 --- a/emacsterm.sh.in +++ b/emacsterm.sh.in @@ -17,7 +17,7 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . -m4_include(common.sh) +m4_include(common.sh.in) usage() { print "Usage: %q [OPTIONS] [SHELL]" "$0" -- cgit v1.1-4-g5e80