Hello Eric,

> [adding bug-automake and bug-make; ...]

I sent a separate followup there.

This mail goes again to bug-autconf only, as it discusses possible
workaround with current make implementation.

Regarding the patch attached to
http://lists.gnu.org/archive/html/bug-autoconf/2008-05/msg00000.html

I hed asuspicion as soon as I saw it, but since I was not able to
express my feelings exactly, I decided to work on it more ... and
basically I put it off.  Now my ideas finally got a shape.

I was also thinking about "make dist", but I concentrated on good old
case-sensitive case.
As you mentioned, with --gnu strictness in Automake, INSTALL gets
listed in DIST_COMMON, which is a pre-requisite of distdir target.

Since "INSTALL" is equal to "./INSTALL", this implies that the file
is (re)built before each "make dist".

When "make dist*" is issued in a VPATH build, the $(srcdir)/INSTALL
file is found because of the VPATH mechanism, and then the rule for
$(srcdir)/INSTALL is used to ensure that the file is up-to-date.

When we introduced the $(abs_srcdir)/INSTALL hack, we lost the above
benefits.

Consequently, I'd like to propose an alternate solution:
  if configure detects case-insensitive make, the rule for
  $(srcdir)/INSTALL would be disabled.
That should not be a problem, as case insensitive platforms are
rarely used to create the distribution tarball of Autoconf.

Attached please find a patch.

The main advantage of this patch is that it is conservative:
- in the common situation, things work exactly as before
- the extra code is hidden in one macro, so the code is not made less
  readable

OK to commit?

Stepan Kasal
>From 09321a75c8431d7242578be5f12cc1f1139c1ce1 Mon Sep 17 00:00:00 2001
From: Stepan Kasal <[EMAIL PROTECTED]>
Date: Thu, 22 May 2008 17:52:28 +0200
Subject: [PATCH] Check for case sensitive make.

* m4/make-check.m4 (AC_PROG_MAKE_CASE_SENSITIVE): New macro,...
* configure.ac: ... called here.
* Makefile.am ($(abs_srcdir)/INSTALL, INSTALL): Return to...
($(srcdir)/INSTALL): ...this, but enclose the rule in
"if MAKE_CASE_SENSITIVE".

Signed-off-by: Stepan Kasal <[EMAIL PROTECTED]>
---
 ChangeLog       |    9 +++++++++
 Makefile.am     |   13 +++++--------
 configure.ac    |    6 ++++++
 m4/make-case.m4 |   26 ++++++++++++++++++++++++++
 4 files changed, 46 insertions(+), 8 deletions(-)
 create mode 100644 m4/make-case.m4

diff --git a/ChangeLog b/ChangeLog
index 76340a6..855653e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2008-06-05  Stepan Kasal  <[EMAIL PROTECTED]>
+
+       Check for case sensitive make.
+       * m4/make-check.m4 (AC_PROG_MAKE_CASE_SENSITIVE): New macro,...
+       * configure.ac: ... called here.
+       * Makefile.am ($(abs_srcdir)/INSTALL, INSTALL): Return to...
+       ($(srcdir)/INSTALL): ...this, but enclose the rule in
+       "if MAKE_CASE_SENSITIVE".
+
 2008-06-03  Eric Blake  <[EMAIL PROTECTED]>
 
        Fix 'make dist' regression from 2008-05-08.
diff --git a/Makefile.am b/Makefile.am
index 3ccaf2b..bf3d58a 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -30,22 +30,19 @@ EXTRA_DIST = ChangeLog.0 ChangeLog.1 ChangeLog.2 \
             build-aux/announce-gen build-aux/gnupload \
             .prev-version .version
 
-MAINTAINERCLEANFILES = $(abs_srcdir)/INSTALL
+MAINTAINERCLEANFILES = $(srcdir)/INSTALL
 
 ## --------- ##
 ## INSTALL.  ##
 ## --------- ##
 
-## abs_srcdir is necessary for case-insensitive make to distinguish from
-## 'make install'.  But automake also insists that the plain target INSTALL
-## exist prior to 'make dist'.
-INSTALL: $(abs_srcdir)/INSTALL
-
-pkgdata_DATA = $(abs_srcdir)/INSTALL
+pkgdata_DATA = $(srcdir)/INSTALL
 AM_MAKEINFOFLAGS = --no-headers --no-validate --no-split
-$(abs_srcdir)/INSTALL: $(top_srcdir)/doc/install.texi
+if MAKE_CASE_SENSITIVE
+$(srcdir)/INSTALL: $(top_srcdir)/doc/install.texi
        $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -o $@ \
          $(top_srcdir)/doc/install.texi
+endif
 
 ## maintainer-check ##
 maintainer-check: maintainer-check-tests
diff --git a/configure.ac b/configure.ac
index 9fbb235..d4f1908 100644
--- a/configure.ac
+++ b/configure.ac
@@ -147,6 +147,12 @@ AC_PROG_EGREP
 AC_PROG_SED
 
 
+## ----- ##
+## Make. ##
+## ----- ##
+AC_PROG_MAKE_CASE_SENSITIVE
+
+
 ## ------------ ##
 ## Conclusion.  ##
 ## ------------ ##
diff --git a/m4/make-case.m4 b/m4/make-case.m4
new file mode 100644
index 0000000..b23ccf9
--- /dev/null
+++ b/m4/make-case.m4
@@ -0,0 +1,26 @@
+# make-case.m4 serial 0
+dnl Copyright (C) 2008 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+# AC_PROG_MAKE_CASE_SENSITIVE
+# ---------------------------
+# Checks whether make is configured to be case insensitive; if yes,
+# sets AM_CONDITIONAL MAKE_CASE_SENSITIVE.
+#
+AC_DEFUN([AC_PROG_MAKE_CASE_SENSITIVE],
+[AC_REQUIRE([AC_PROG_MAKE_SET])dnl
+AC_CACHE_CHECK([whether ${MAKE-make} is case sensitive],
+[ac_cv_prog_make_${ac_make}_case],
+[echo all: >conftest.make
+if ${MAKE-make} -f conftest.make ALL >/dev/null 2>&1; then
+  ac_res=no
+else
+  ac_res=yes
+fi
+eval ac_cv_prog_make_${ac_make}_case=$ac_res
+rm -f conftest.make])
+AM_CONDITIONAL([MAKE_CASE_SENSITIVE],
+  [eval test \$ac_cv_prog_make_${ac_make}_case = yes])
+])
-- 
1.5.5.3

Reply via email to