printf 'Notice: %s\n' "$*"
}
+# ==================================================================
+# Write-if-changed helper
+# ==================================================================
+# Usage: write_if_changed target tmpfile
+# Replaces target with tmpfile only if the content differs.
+# Preserves timestamps on unchanged files to avoid unnecessary rebuilds.
+
+write_if_changed() {
+ _wic_target="$1"
+ _wic_tmpfile="$2"
+ _wic_msg="${3:-Creating $_wic_target}"
+ if [ -f "$_wic_target" ] && cmp -s "$_wic_target" "$_wic_tmpfile"; then
+ msg "$_wic_target is unchanged"
+ rm -f "$_wic_tmpfile"
+ else
+ msg "$_wic_msg"
+ mv "$_wic_tmpfile" "$_wic_target"
+ fi
+}
+
# ==================================================================
# Variable store (define / get_define)
# ==================================================================
Standard options:
--prefix=DIR Installation prefix [/usr/local]
--exec-prefix=DIR Executable prefix [PREFIX]
+ --includedir=DIR Headers [PREFIX/include]
+ --libdir=DIR Libraries [PREFIX/lib]
--bindir=DIR User executables [PREFIX/bin]
--sbindir=DIR System executables [PREFIX/sbin]
--mandir=DIR Man pages [PREFIX/man]
case "$_arg" in
--prefix=*) define prefix "${_arg#--prefix=}" ;;
--exec-prefix=*) define exec_prefix "${_arg#--exec-prefix=}" ;;
+ --includedir=*) define includedir "${_arg#--includedir=}" ;;
+ --libdir=*) define libdir "${_arg#--libdir=}" ;;
--bindir=*) define bindir "${_arg#--bindir=}" ;;
--sbindir=*) define sbindir "${_arg#--sbindir=}" ;;
--mandir=*) define mandir "${_arg#--mandir=}" ;;
_guard=$(echo "$_outfile" | tr '[:lower:]/.' '[:upper:]__' | sed 's/^_*//')
_guard="_${_guard}_"
- msg "Creating $_outfile"
-
case "$_outfile" in
*/*) [ -d "${_outfile%/*}" ] || mkdir -p "${_outfile%/*}" ;;
esac
+ _mch_tmp="$_tmpdir/config_header.tmp"
+
{
echo "/* Auto-generated by configure - do not edit */"
echo "#ifndef $_guard"
esac
done
+ case "$_key" in
+ HAVE_DECL_*) _emit="decl" ;;
+ esac
+
case "$_emit" in
+ decl)
+ echo "#define $_key $_val"
+ ;;
bare)
case "$_val" in
0) echo "/* #undef $_key */" ;;
echo ""
echo "#endif /* $_guard */"
- } > "$_outfile"
+ } > "$_mch_tmp"
+
+ write_if_changed "$_outfile" "$_mch_tmp" "Creating $_outfile"
}
# ==================================================================
*/*) [ -d "${_outfile%/*}" ] || mkdir -p "${_outfile%/*}" ;;
esac
- msg "Creating $_outfile from $1"
-
_sedscript="$_tmpdir/template.sed"
: > "$_sedscript"
while IFS=' ' read -r _key _val; do
printf 's|@%s@|%s|g\n' "$_key" "$_escaped_val" >> "$_sedscript"
done < "$_defines"
+ _mt_tmp="$_tmpdir/template.tmp"
+
awk -v deffile="$_defines" '
BEGIN {
while ((getline line < deffile) > 0) {
{
if (stack[depth] == 1) print
}
-' "$_infile" | sed -f "$_sedscript" > "$_outfile"
+' "$_infile" | sed -f "$_sedscript" > "$_mt_tmp"
+
+ write_if_changed "$_outfile" "$_mt_tmp" "Creating $_outfile from $1"
}
# ==================================================================
define prefix "$_prefix"
is_defined exec_prefix || define exec_prefix "$_prefix"
+ is_defined includedir || define includedir "$_prefix/include"
+ is_defined libdir || define libdir "$_prefix/lib"
is_defined bindir || define bindir "$_prefix/bin"
is_defined sbindir || define sbindir "$_prefix/sbin"
is_defined mandir || define mandir "$_prefix/man"
is_defined sysconfdir || define sysconfdir "$_prefix/etc"
is_defined datarootdir || define datarootdir "$_prefix/share"
is_defined datadir || define datadir "$_prefix/share"
+ is_defined pkgconfigdir|| define pkgconfigdir "$_prefix/libdata/pkgconfig"
if [ "$_want_help" -eq 1 ]; then
show_help