bug-gnulib
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

ensure that generated files are read-only


From: Jim Meyering
Subject: ensure that generated files are read-only
Date: Wed, 06 Sep 2006 23:58:17 +0200

Now that so many lib/*.[ch] files in coreutils are generated,
it is harder for me to know when a file comes from gnulib and
when I can modify it in place.  I've always taken the stand that
generated files should be read-only, and this is just another
reason to follow that policy. [ I learned long enough ago that
files like Makefile, Makefile.in, configure, etc. are generated,
so that their being writable isn't a big deal.  But still, for
novices, it'd be nice to make them read-only, too.  I'll save
that as a project for another day :-) ]

To that end, I've just changed coreutils' bootstrap script to
make some of the files it copies into my tree be read-only.
However, that exposed a weakness in the gnulib-generated rules
that look(ed) like this:

alloca.h: alloca_.h
        cp $(srcdir)/alloca_.h address@hidden
        mv address@hidden $@

That rule fails (from my perspective) when the target (alloca.h) is
read-only, since with an interactive "make", mv would ask me if I want
to remove it.  The patch below fixes that by removing the targets of cp
and mv at the beginning of the rule.  In addition, it ensures that the
generated file is read-only:

alloca.h: alloca_.h
        rm -f address@hidden $@
        cp $(srcdir)/alloca_.h address@hidden
        chmod a-x address@hidden
        mv address@hidden $@

Here's the patch I've just checked in:
Note that this does affect modules/* files owned by others.
If anyone objects, I'll quickly revert the objectionable change.

Bruno, would you mind if I changed the uses of "t-$@" to "address@hidden"
in modules/localcharset?  That minor inconsistency nearly made me
miss the two rules in that file.


2006-09-06  Jim Meyering  <address@hidden>

        Make generated files be read-only.
        * modules/alloca-opt (Makefile.am): Work also when $@ is read-only.
        Ensure that each generated file is now read-only.
        * modules/argz: Likewise.
        * modules/arpa_inet: Likewise.
        * modules/byteswap: Likewise.
        * modules/configmake: Likewise.
        * modules/fcntl: Likewise.
        * modules/fnmatch: Likewise.
        * modules/getopt: Likewise.
        * modules/glob: Likewise.
        * modules/inttypes: Likewise.
        * modules/netinet_in: Likewise.
        * modules/poll: Likewise.
        * modules/stdbool: Likewise.
        * modules/stdint: Likewise.
        * modules/sys_select: Likewise.
        * modules/sys_socket: Likewise.
        * modules/sys_stat: Likewise.
        * modules/sysexits: Likewise.
        * modules/localcharset: Same as above, but continue using temporary
        file named "t-$@" (why different?) rather than the "address@hidden" used
        everywhere else.

        * modules/sysexits (Makefile.am): Replace literal occurrences
        of "sysexit.h" more readable, and more consistent, "$@".

Index: modules/alloca-opt
===================================================================
RCS file: /sources/gnulib/gnulib/modules/alloca-opt,v
retrieving revision 1.2
diff -u -r1.2 alloca-opt
--- modules/alloca-opt  22 Jul 2005 22:04:12 -0000      1.2
+++ modules/alloca-opt  6 Sep 2006 21:29:55 -0000
@@ -19,7 +19,9 @@
 # We need the following in order to create <alloca.h> when the system
 # doesn't have one that works with the given compiler.
 alloca.h: alloca_.h
+       rm -f address@hidden $@
        cp $(srcdir)/alloca_.h address@hidden
+       chmod a-x address@hidden
        mv address@hidden $@
 MOSTLYCLEANFILES += alloca.h alloca.h-t
 
Index: modules/argz
===================================================================
RCS file: /sources/gnulib/gnulib/modules/argz,v
retrieving revision 1.4
diff -u -r1.4 argz
--- modules/argz        22 Jul 2005 22:04:12 -0000      1.4
+++ modules/argz        6 Sep 2006 21:29:55 -0000
@@ -18,7 +18,9 @@
 # We need the following in order to create <argz.h> when the system
 # doesn't have one that works with the given compiler.
 argz.h: argz_.h
+       rm -f address@hidden $@
        cp $(srcdir)/argz_.h address@hidden
+       chmod a-x address@hidden
        mv address@hidden $@
 MOSTLYCLEANFILES += argz.h argz.h-t
 
Index: modules/arpa_inet
===================================================================
RCS file: /sources/gnulib/gnulib/modules/arpa_inet,v
retrieving revision 1.1
diff -u -r1.1 arpa_inet
--- modules/arpa_inet   7 Jul 2006 07:41:25 -0000       1.1
+++ modules/arpa_inet   6 Sep 2006 21:29:55 -0000
@@ -17,7 +17,9 @@
 # doesn't have one.
 arpa/inet.h:
        test -d arpa || mkdir arpa
+       rm -f address@hidden $@
        echo '#include <sys/socket.h>' >address@hidden
+       chmod a-x address@hidden
        mv address@hidden $@
 MOSTLYCLEANFILES += arpa/inet.h arpa/inet.h-t
 MOSTLYCLEANDIRS += arpa
Index: modules/byteswap
===================================================================
RCS file: /sources/gnulib/gnulib/modules/byteswap,v
retrieving revision 1.3
diff -u -r1.3 byteswap
--- modules/byteswap    29 Aug 2005 11:13:56 -0000      1.3
+++ modules/byteswap    6 Sep 2006 21:29:55 -0000
@@ -17,7 +17,9 @@
 # We need the following in order to create <byteswap.h> when the system
 # doesn't have one.
 byteswap.h: byteswap_.h
+       rm -f address@hidden $@
        cp $(srcdir)/byteswap_.h address@hidden
+       chmod a-x address@hidden
        mv address@hidden $@
 MOSTLYCLEANFILES += byteswap.h byteswap.h-t
 
Index: modules/configmake
===================================================================
RCS file: /sources/gnulib/gnulib/modules/configmake,v
retrieving revision 1.3
diff -u -r1.3 configmake
--- modules/configmake  29 Aug 2006 15:50:43 -0000      1.3
+++ modules/configmake  6 Sep 2006 21:29:55 -0000
@@ -24,6 +24,7 @@
 #
 # Listed in the same order as the GNU makefile conventions.
 configmake.h: Makefile
+       rm -f address@hidden $@
        ( \
          echo '#define PREFIX "$(prefix)"'; \
          echo '#define EXEC_PREFIX "$(exec_prefix)"'; \
@@ -49,6 +50,7 @@
          echo '#define MANDIR "$(mandir)"'; \
          echo '#define MANEXT "$(manext)"'; \
        :) | sed '/""/d' >address@hidden
+       chmod a-x address@hidden
        mv address@hidden $@
 BUILT_SOURCES += configmake.h
 CLEANFILES += configmake.h configmake.h-t
Index: modules/fcntl
===================================================================
RCS file: /sources/gnulib/gnulib/modules/fcntl,v
retrieving revision 1.1
diff -u -r1.1 fcntl
--- modules/fcntl       28 Aug 2006 22:59:17 -0000      1.1
+++ modules/fcntl       6 Sep 2006 21:29:55 -0000
@@ -19,8 +19,10 @@
 # We need the following in order to create <fcntl.h> when the system
 # doesn't have one that works with the given compiler.
 fcntl.h: fcntl_.h
+       rm -f address@hidden $@
        sed -e 's|@''ABSOLUTE_FCNTL_H''@|$(ABSOLUTE_FCNTL_H)|g' \
            < $(srcdir)/fcntl_.h > address@hidden
+       chmod a-x address@hidden
        mv address@hidden $@
 MOSTLYCLEANFILES += fcntl.h fcntl.h-t
 
Index: modules/fnmatch
===================================================================
RCS file: /sources/gnulib/gnulib/modules/fnmatch,v
retrieving revision 1.9
diff -u -r1.9 fnmatch
--- modules/fnmatch     22 Jul 2005 22:04:12 -0000      1.9
+++ modules/fnmatch     6 Sep 2006 21:29:55 -0000
@@ -22,7 +22,9 @@
 # We need the following in order to create <fnmatch.h> when the system
 # doesn't have one that supports the required API.
 fnmatch.h: fnmatch_.h
+       rm -f address@hidden $@
        cp $(srcdir)/fnmatch_.h address@hidden
+       chmod a-x address@hidden
        mv address@hidden $@
 MOSTLYCLEANFILES += fnmatch.h fnmatch.h-t
 
Index: modules/getopt
===================================================================
RCS file: /sources/gnulib/gnulib/modules/getopt,v
retrieving revision 1.10
diff -u -r1.10 getopt
--- modules/getopt      7 Mar 2006 13:30:51 -0000       1.10
+++ modules/getopt      6 Sep 2006 21:29:55 -0000
@@ -22,7 +22,9 @@
 # We need the following in order to create <getopt.h> when the system
 # doesn't have one that works with the given compiler.
 getopt.h: getopt_.h
+       rm -f address@hidden $@
        cp $(srcdir)/getopt_.h address@hidden
+       chmod a-x address@hidden
        mv address@hidden $@
 MOSTLYCLEANFILES += getopt.h getopt.h-t
 
Index: modules/glob
===================================================================
RCS file: /sources/gnulib/gnulib/modules/glob,v
retrieving revision 1.7
diff -u -r1.7 glob
--- modules/glob        21 Aug 2006 21:46:31 -0000      1.7
+++ modules/glob        6 Sep 2006 21:29:55 -0000
@@ -30,7 +30,9 @@
 # We need the following in order to create <glob.h> when the system
 # doesn't have one that works with the given compiler.
 glob.h: glob_.h
+       rm -f address@hidden $@
        cp $(srcdir)/glob_.h address@hidden
+       chmod a-x address@hidden
        mv address@hidden $@
 MOSTLYCLEANFILES += glob.h glob.h-t
 
Index: modules/inttypes
===================================================================
RCS file: /sources/gnulib/gnulib/modules/inttypes,v
retrieving revision 1.8
diff -u -r1.8 inttypes
--- modules/inttypes    28 Aug 2006 18:41:49 -0000      1.8
+++ modules/inttypes    6 Sep 2006 21:29:55 -0000
@@ -21,6 +21,7 @@
 # We need the following in order to create <inttypes.h> when the system
 # doesn't have one that works with the given compiler.
 inttypes.h: inttypes_.h
+       rm -f address@hidden $@
        sed -e 's/@''HAVE_INTTYPES_H''@/$(HAVE_INTTYPES_H)/g' \
            -e 's|@''ABSOLUTE_INTTYPES_H''@|$(ABSOLUTE_INTTYPES_H)|g' \
            -e 's/@''PRI_MACROS_BROKEN''@/$(PRI_MACROS_BROKEN)/g' \
@@ -31,6 +32,7 @@
            -e 's/@''HAVE_DECL_STRTOIMAX''@/$(HAVE_DECL_STRTOIMAX)/g' \
            -e 's/@''HAVE_DECL_STRTOUMAX''@/$(HAVE_DECL_STRTOUMAX)/g' \
            < $(srcdir)/inttypes_.h > address@hidden
+       chmod a-x address@hidden
        mv address@hidden $@
 MOSTLYCLEANFILES += inttypes.h inttypes.h-t
 
Index: modules/netinet_in
===================================================================
RCS file: /sources/gnulib/gnulib/modules/netinet_in,v
retrieving revision 1.1
diff -u -r1.1 netinet_in
--- modules/netinet_in  28 Jul 2006 17:27:29 -0000      1.1
+++ modules/netinet_in  6 Sep 2006 21:29:55 -0000
@@ -17,7 +17,9 @@
 # doesn't have one.
 netinet/in.h:
        test -d netinet || mkdir netinet
+       rm -f address@hidden $@
        echo '#include <sys/socket.h>' >address@hidden
+       chmod a-x address@hidden
        mv address@hidden $@
 MOSTLYCLEANFILES += netinet/in.h netinet/in.h-t
 MOSTLYCLEANDIRS += netinet
Index: modules/poll
===================================================================
RCS file: /sources/gnulib/gnulib/modules/poll,v
retrieving revision 1.7
diff -u -r1.7 poll
--- modules/poll        27 Sep 2005 21:37:06 -0000      1.7
+++ modules/poll        6 Sep 2006 21:29:55 -0000
@@ -18,7 +18,9 @@
 # We need the following in order to create <poll.h> when the system
 # doesn't have one.
 poll.h: poll_.h
+       rm -f address@hidden $@
        cp $(srcdir)/poll_.h address@hidden
+       chmod a-x address@hidden
        mv address@hidden $@
 MOSTLYCLEANFILES += poll.h poll.h-t
 
Index: modules/stdbool
===================================================================
RCS file: /sources/gnulib/gnulib/modules/stdbool,v
retrieving revision 1.11
diff -u -r1.11 stdbool
--- modules/stdbool     22 Jul 2005 22:04:12 -0000      1.11
+++ modules/stdbool     6 Sep 2006 21:29:55 -0000
@@ -18,7 +18,9 @@
 # We need the following in order to create <stdbool.h> when the system
 # doesn't have one that works.
 stdbool.h: stdbool_.h
+       rm -f address@hidden $@
        sed -e 's/@''HAVE__BOOL''@/$(HAVE__BOOL)/g' < $(srcdir)/stdbool_.h > 
address@hidden
+       chmod a-x address@hidden
        mv address@hidden $@
 MOSTLYCLEANFILES += stdbool.h stdbool.h-t
 
Index: modules/stdint
===================================================================
RCS file: /sources/gnulib/gnulib/modules/stdint,v
retrieving revision 1.11
diff -u -r1.11 stdint
--- modules/stdint      28 Aug 2006 20:42:18 -0000      1.11
+++ modules/stdint      6 Sep 2006 21:29:55 -0000
@@ -24,6 +24,7 @@
 # We need the following in order to create <stdint.h> when the system
 # doesn't have one that works with the given compiler.
 stdint.h: stdint_.h
+       rm -f address@hidden $@
        sed -e 's/@''HAVE_WCHAR_H''@/$(HAVE_WCHAR_H)/g' \
            -e 's/@''HAVE_STDINT_H''@/$(HAVE_STDINT_H)/g' \
            -e 's|@''ABSOLUTE_STDINT_H''@|$(ABSOLUTE_STDINT_H)|g' \
@@ -46,6 +47,7 @@
            -e 's/@''HAVE_SIGNED_WINT_T''@/$(HAVE_SIGNED_WINT_T)/g' \
            -e 's/@''WINT_T_SUFFIX''@/$(WINT_T_SUFFIX)/g' \
            < $(srcdir)/stdint_.h > address@hidden
+       chmod a-x address@hidden
        mv address@hidden $@
 MOSTLYCLEANFILES += stdint.h stdint.h-t
 
Index: modules/sys_select
===================================================================
RCS file: /sources/gnulib/gnulib/modules/sys_select,v
retrieving revision 1.1
diff -u -r1.1 sys_select
--- modules/sys_select  27 Jun 2006 21:21:13 -0000      1.1
+++ modules/sys_select  6 Sep 2006 21:29:55 -0000
@@ -17,7 +17,9 @@
 # doesn't have one that works with the given compiler.
 sys/select.h:
        test -d sys || mkdir sys
+       rm -f address@hidden $@
        echo '#include <sys/socket.h>' >address@hidden
+       chmod a-x address@hidden
        mv address@hidden $@
 MOSTLYCLEANFILES += sys/select.h sys/select.h-t
 MOSTLYCLEANDIRS += sys
Index: modules/sys_socket
===================================================================
RCS file: /sources/gnulib/gnulib/modules/sys_socket,v
retrieving revision 1.4
diff -u -r1.4 sys_socket
--- modules/sys_socket  6 Jul 2006 13:53:54 -0000       1.4
+++ modules/sys_socket  6 Sep 2006 21:29:55 -0000
@@ -19,7 +19,9 @@
 # doesn't have one that works with the given compiler.
 sys/socket.h: socket_.h
        test -d sys || mkdir sys
+       rm -f address@hidden $@
        cp $(srcdir)/socket_.h address@hidden
+       chmod a-x address@hidden
        mv address@hidden $@
 MOSTLYCLEANFILES += sys/socket.h sys/socket.h-t
 MOSTLYCLEANDIRS += sys
Index: modules/sys_stat
===================================================================
RCS file: /sources/gnulib/gnulib/modules/sys_stat,v
retrieving revision 1.2
diff -u -r1.2 sys_stat
--- modules/sys_stat    4 Jul 2006 06:37:10 -0000       1.2
+++ modules/sys_stat    6 Sep 2006 21:29:55 -0000
@@ -19,8 +19,10 @@
 # has one that is incomplete.
 sys/stat.h: stat_.h
        test -d sys || mkdir sys
+       rm -f address@hidden $@
        sed -e 's|@''ABSOLUTE_SYS_STAT_H''@|$(ABSOLUTE_SYS_STAT_H)|g' \
            < $(srcdir)/stat_.h > address@hidden
+       chmod a-x address@hidden
        mv address@hidden $@
 MOSTLYCLEANFILES += sys/stat.h sys/stat.h-t
 MOSTLYCLEANDIRS += sys
Index: modules/sysexits
===================================================================
RCS file: /sources/gnulib/gnulib/modules/sysexits,v
retrieving revision 1.6
diff -u -r1.6 sysexits
--- modules/sysexits    11 Oct 2005 06:53:48 -0000      1.6
+++ modules/sysexits    6 Sep 2006 21:29:55 -0000
@@ -17,8 +17,10 @@
 # We need the following in order to create <sysexits.h> when the system
 # doesn't have one that works with the given compiler.
 sysexits.h: sysexit_.h
-       cp $(srcdir)/sysexit_.h sysexits.h-t
-       mv sysexits.h-t sysexits.h
+       rm -f address@hidden $@
+       cp $(srcdir)/sysexit_.h address@hidden
+       chmod a-x address@hidden
+       mv address@hidden $@
 MOSTLYCLEANFILES += sysexits.h sysexits.h-t
 
 Include:
Index: modules/localcharset
===================================================================
RCS file: /sources/gnulib/gnulib/modules/localcharset,v
retrieving revision 1.7
diff -u -r1.7 localcharset
--- modules/localcharset        29 Aug 2006 15:44:02 -0000      1.7
+++ modules/localcharset        6 Sep 2006 21:29:55 -0000
@@ -59,12 +59,16 @@
        fi
 
 charset.alias: config.charset
+       rm -f t-$@ $@
        $(SHELL) $(srcdir)/config.charset '$(host)' > t-$@
+       chmod a-x t-$@
        mv t-$@ $@
 
 SUFFIXES += .sed .sin
 .sin.sed:
+       rm -f t-$@ $@
        sed -e '/^#/d' -e 's/@''PACKAGE''@/$(PACKAGE)/g' $< > t-$@
+       chmod a-x t-$@
        mv t-$@ $@
 
 CLEANFILES += charset.alias ref-add.sed ref-del.sed




reply via email to

[Prev in Thread] Current Thread [Next in Thread]