# This script updates *.d files. # (C) 2007-2010 magicant # # 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 2 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 [ -z "${YASH_VERSION-}" ] then printf '%s: This script must be executed by yash.\n' "$0" >&2 exit 126 fi check () { if ! [ -f "$1.d" ] || ! [ -s "$1.d" ] || [ "$1.c" -nt "$1.d" ] then return 1 fi for dep in $(sed -e '1s/^.*://' -e 's/\\$//' "$1.d") do if ! [ -f "$dep" ] then printf '%s: "%s" depends on non-existent file "%s".\n' \ "$0" "$1.d" "$dep" >&2 exit 1 fi if [ "$dep" -nt "$1.d" ] then return 1 fi done return 0 } for file do case $file in (*.c) if ! [ -f "$file" ] then printf '%s: "%s" is not a regular file.\n' "$0" "$file" >&2 exit 1 fi file=${file%.c} if ! check "$file" then printf 'gcc -std=c99 -MM "%s.c" >|"%s.d"\n' "$file" "$file" if ! gcc -std=c99 -MM "${file}.c" >|"${file}.d" then exitstatus=$? printf '%s: cannot update "%s".\n' "$0" "${file}.d" >&2 exit "$exitstatus" fi fi ;; (*) printf '%s: "%s" is not a C source file.\n' "$0" "$file" >&2 exit 1 ;; esac done # vim: set ft=sh ts=8 sts=4 sw=4 noet tw=80: