From: Eric Blake Date: Sat, 22 Mar 2008 04:29:37 +0000 (-0600) Subject: Alter GNUmakefile to install into top directory. X-Git-Tag: v0.1~7644 X-Git-Url: http://erislabs.org.uk/gitweb/?a=commitdiff_plain;h=3b3e9653139a9423e7d980cc6f9e3160111c9930;p=gnulib.git Alter GNUmakefile to install into top directory. * modules/maintainer-makefile: Split, and add dependency... * modules/gnumakefile: to this new module. * build-aux/GNUmakefile: Move... * top/GNUmakefile: ...here. * build-aux/maint.mk: Move... * top/maint.mk: ...here. * MODULES.html.sh (Support for maintaining...): Document new module. Signed-off-by: Eric Blake --- diff --git a/ChangeLog b/ChangeLog index 6aad85264..fe72f6fab 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +2008-03-24 Eric Blake + + Alter GNUmakefile to install into top directory. + * modules/maintainer-makefile: Split, and add dependency... + * modules/gnumakefile: to this new module. + * build-aux/GNUmakefile: Move... + * top/GNUmakefile: ...here. + * build-aux/maint.mk: Move... + * top/maint.mk: ...here. + * MODULES.html.sh (Support for maintaining...): Document new + module. + 2008-03-23 Bruno Haible * gnulib-tool: New options --vc-files, --no-vc-files. diff --git a/MODULES.html.sh b/MODULES.html.sh index 739f0d1cc..66147552f 100755 --- a/MODULES.html.sh +++ b/MODULES.html.sh @@ -2735,6 +2735,7 @@ func_all_modules () func_module autobuild func_module git-version-gen func_module gitlog-to-changelog + func_module gnumakefile func_module gnupload func_module maintainer-makefile func_module mktempd diff --git a/build-aux/GNUmakefile b/build-aux/GNUmakefile deleted file mode 100644 index 38dd1262f..000000000 --- a/build-aux/GNUmakefile +++ /dev/null @@ -1,86 +0,0 @@ -# Having a separate GNUmakefile lets me `include' the dynamically -# generated rules created via cfg.mk (package-local configuration) -# as well as maint.mk (generic maintainer rules). -# This makefile is used only if you run GNU Make. -# It is necessary if you want to build targets usually of interest -# only to the maintainer. - -# Copyright (C) 2001, 2003, 2006-2008 Free Software Foundation, Inc. - -# 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 . - -# Systems where /bin/sh is not the default shell need this. The $(shell) -# command below won't work with e.g. stock DOS/Windows shells. -ifeq ($(wildcard /bin/s[h]),/bin/sh) -SHELL = /bin/sh -else -# will be used only with the next shell-test line, then overwritten -# by a configured-in value -SHELL = sh -endif - -# If the user runs GNU make but has not yet run ./configure, -# give them a diagnostic. -_have-Makefile := $(shell test -f Makefile && echo yes) -ifeq ($(_have-Makefile),yes) - -# Make tar archive easier to reproduce. -export TAR_OPTIONS = --owner=0 --group=0 --numeric-owner - -include Makefile - -# Some projects override e.g., _autoreconf here. --include $(srcdir)/cfg.mk -include $(srcdir)/maint.mk - -# Allow cfg.mk to override these. -_build-aux ?= build-aux -_autoreconf ?= autoreconf - -# Ensure that $(VERSION) is up to date for dist-related targets, but not -# for others: rerunning autoreconf and recompiling everything isn't cheap. -_have-git-version-gen := \ - $(shell test -f $(srcdir)/$(_build-aux)/git-version-gen && echo yes) -ifeq ($(_have-git-version-gen)0,yes$(MAKELEVEL)) - _is-dist-target = $(filter-out %clean, \ - $(filter dist% alpha beta major,$(MAKECMDGOALS))) - ifneq (,$(_is-dist-target)) - _curr-ver := $(shell cd $(srcdir) && ./$(_build-aux)/git-version-gen \ - $(srcdir)/.tarball-version) - ifneq ($(_curr-ver),$(VERSION)) - $(info INFO: running autoreconf for new version string: $(_curr-ver)) - _dummy := $(shell cd $(srcdir) && rm -rf autom4te.cache && $(_autoreconf))) - endif - endif -endif - -else - -.DEFAULT_GOAL := abort-due-to-no-makefile - -# The package can override .DEFAULT_GOAL to run actions like autoreconf. --include ./cfg.mk -include ./maint.mk - -abort-due-to-no-makefile: - @echo There seems to be no Makefile in this directory. 1>&2 - @echo "You must run ./configure before running \`make'." 1>&2 - @exit 1 - -endif - -# Tell version 3.79 and up of GNU make to not build goals in this -# directory in parallel. This is necessary in case someone tries to -# build multiple targets on one command line. -.NOTPARALLEL: diff --git a/build-aux/maint.mk b/build-aux/maint.mk deleted file mode 100644 index 662b37174..000000000 --- a/build-aux/maint.mk +++ /dev/null @@ -1,123 +0,0 @@ -# -*-Makefile-*- -# This Makefile fragment is intended to be useful by any GNU-like project. -# This file originate from coreutils, CPPI, Bison, and Autoconf. - -# Copyright (C) 2001-2007 Free Software Foundation, Inc. -# -# 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 . - -ME := maint.mk - -# List of all C-like source code files that will be tested for -# stylistic "errors". You may want to define this to something -# more complex in Makefile.cfg. -C_SOURCES ?= $(shell find . -name '*.[chly]') - -# Add some more files to check, typically set in Makefile.cfg. -C_SOURCES += $(C_SOURCES_ADD) - -# Do not save the original name or timestamp in the .tar.gz file. -# Use --rsyncable if available. -gzip_rsyncable := \ - $(shell gzip --help 2>/dev/null|grep rsyncable >/dev/null && echo --rsyncable) -GZIP_ENV = '--no-name --best $(gzip_rsyncable)' - -# Prevent programs like 'sort' from considering distinct strings to be equal. -# Doing it here saves us from having to set LC_ALL elsewhere in this file. -export LC_ALL = C - -# Casting arguments to free is never necessary. -sc_cast_of_argument_to_free: - @grep -nE '\&2; \ - exit 1; } || : - -sc_cast_of_x_alloc_return_value: - @grep -nE '\*\) *x(m|c|re)alloc\>' $(C_SOURCES) && \ - { echo '$(ME): don'\''t cast x*alloc return value' 1>&2; \ - exit 1; } || : - -sc_cast_of_alloca_return_value: - @grep -nE '\*\) *alloca\>' $(C_SOURCES) && \ - { echo '$(ME): don'\''t cast alloca return value' 1>&2; \ - exit 1; } || : - -sc_space_tab: - @grep -n '[ ] ' $(C_SOURCES) && \ - { echo '$(ME): found SPACE-TAB sequence; remove the SPACE' \ - 1>&2; exit 1; } || : - -# Don't use the old ato* functions in `real' code. -# They provide no error checking mechanism. -# Instead, use strto* functions. -sc_prohibit_atoi_atof: - @grep -nE '\' $(C_SOURCES) && \ - { echo '$(ME): do not use ato''f, ato''i, ato''l, ato''ll, or ato''q' \ - 1>&2; exit 1; } || : - -# Using EXIT_SUCCESS as the first argument to error is misleading, -# since when that parameter is 0, error does not exit. Use `0' instead. -sc_error_exit_success: - @grep -nF 'error (EXIT_SUCCESS,' $(C_SOURCES) && \ - { echo '$(ME): found error (EXIT_SUCCESS' 1>&2; \ - exit 1; } || : - -# Stylistic, use #ifdef instead of #if -sc_no_if_have_config_h: - @grep -n '^# *if HAVE_CONFIG_H' $(C_SOURCES) && \ - { echo '$(ME): found use of #if HAVE_CONFIG_H; use #ifdef' \ - 1>&2; exit 1; } || : - -# Prohibit the inclusion of assert.h without an actual use of assert. -sc_prohibit_assert_without_use: - @files=$$(grep -l '# *include [<"]assert\.h[>"]' $(C_SOURCES) \ - | grep '\.[cy]$$') && \ - grep -L '\ but don't use it" \ - 1>&2; exit 1; } || : - -sc_obsolete_symbols: - @grep -nE '\<(HAVE''_FCNTL_H|O''_NDELAY)\>' $(C_SOURCES) && \ - { echo '$(ME): do not use HAVE''_FCNTL_H or O''_NDELAY' \ - 1>&2; exit 1; } || : - -# Each nonempty line must start with a year number, or a TAB. -sc_changelog: - @grep -n '^[^12 ]' $$(find . -name ChangeLog) && \ - { echo '$(ME): found unexpected prefix in a ChangeLog' 1>&2; \ - exit 1; } || : - -# Collect the names of rules starting with `sc_'. -syntax-check-rules := $(shell sed -n 's/^\(sc_[a-zA-Z0-9_-]*\):.*/\1/p' $(ME)) -.PHONY: $(syntax-check-rules) - -syntax-check: $(syntax-check-rules) - -# Update gettext files. -PACKAGE ?= $(shell basename $(PWD)) -POURL = http://translationproject.org/latest/$(PACKAGE)/ -PODIR ?= po -refresh-po: - rm -f $(PODIR)/*.po && \ - echo "$(ME): getting translations into po (please ignore the robots.txt ERROR 404)..." && \ - wget --no-verbose --directory-prefix $(PODIR) --no-directories --recursive --level 1 --accept .po --accept .po.1 $(POURL) && \ - echo 'en@boldquot' > $(PODIR)/LINGUAS && \ - echo 'en@quot' >> $(PODIR)/LINGUAS && \ - ls $(PODIR)/*.po | sed 's/.po//' | sed 's,$(PODIR)/,,' | sort >> $(PODIR)/LINGUAS - -INDENT_SOURCES ?= $(C_SOURCES) -.PHONY: indent -indent: - indent $(INDENT_SOURCES) diff --git a/modules/gnumakefile b/modules/gnumakefile new file mode 100644 index 000000000..af853442c --- /dev/null +++ b/modules/gnumakefile @@ -0,0 +1,32 @@ +Description: +Add GNU-make specific rules for maintainer use. + +Files: +top/GNUmakefile + +Depends-on: + +configure.ac: +# Autoconf 2.61a.99 and earlier don't support linking a file only +# in VPATH builds. But since GNUmakefile is for maintainer use +# only, it does not matter if we skip the link with older autoconf. +# Automake 1.10.1 and earlier try to remove GNUmakefile in non-VPATH +# builds, so use a shell variable to bypass this. +GNUmakefile=GNUmakefile +m4_if(m4_version_compare([2.61a.100], + m4_defn([m4_PACKAGE_VERSION])), [1], [], + [AC_CONFIG_LINKS([$GNUmakefile:$GNUmakefile], [], + [GNUmakefile=$GNUmakefile])]) + +Makefile.am: +distclean-local: clean-GNUmakefile +clean-GNUmakefile: + if test x"$(VPATH)" != x ; then rm -f $(top_srcdir)/GNUmakefile ; fi + +Include: + +License: +GPLed build tool + +Maintainer: +coreutils diff --git a/modules/maintainer-makefile b/modules/maintainer-makefile index f35cd2356..492ca69bb 100644 --- a/modules/maintainer-makefile +++ b/modules/maintainer-makefile @@ -2,8 +2,10 @@ Description: Helper GNUmakefile with syntax checks, build improvements, etc. Files: -build-aux/GNUmakefile -build-aux/maint.mk +top/maint.mk + +Depends-on: +gnumakefile License: GPLed build tool diff --git a/top/GNUmakefile b/top/GNUmakefile new file mode 100644 index 000000000..38dd1262f --- /dev/null +++ b/top/GNUmakefile @@ -0,0 +1,86 @@ +# Having a separate GNUmakefile lets me `include' the dynamically +# generated rules created via cfg.mk (package-local configuration) +# as well as maint.mk (generic maintainer rules). +# This makefile is used only if you run GNU Make. +# It is necessary if you want to build targets usually of interest +# only to the maintainer. + +# Copyright (C) 2001, 2003, 2006-2008 Free Software Foundation, Inc. + +# 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 . + +# Systems where /bin/sh is not the default shell need this. The $(shell) +# command below won't work with e.g. stock DOS/Windows shells. +ifeq ($(wildcard /bin/s[h]),/bin/sh) +SHELL = /bin/sh +else +# will be used only with the next shell-test line, then overwritten +# by a configured-in value +SHELL = sh +endif + +# If the user runs GNU make but has not yet run ./configure, +# give them a diagnostic. +_have-Makefile := $(shell test -f Makefile && echo yes) +ifeq ($(_have-Makefile),yes) + +# Make tar archive easier to reproduce. +export TAR_OPTIONS = --owner=0 --group=0 --numeric-owner + +include Makefile + +# Some projects override e.g., _autoreconf here. +-include $(srcdir)/cfg.mk +include $(srcdir)/maint.mk + +# Allow cfg.mk to override these. +_build-aux ?= build-aux +_autoreconf ?= autoreconf + +# Ensure that $(VERSION) is up to date for dist-related targets, but not +# for others: rerunning autoreconf and recompiling everything isn't cheap. +_have-git-version-gen := \ + $(shell test -f $(srcdir)/$(_build-aux)/git-version-gen && echo yes) +ifeq ($(_have-git-version-gen)0,yes$(MAKELEVEL)) + _is-dist-target = $(filter-out %clean, \ + $(filter dist% alpha beta major,$(MAKECMDGOALS))) + ifneq (,$(_is-dist-target)) + _curr-ver := $(shell cd $(srcdir) && ./$(_build-aux)/git-version-gen \ + $(srcdir)/.tarball-version) + ifneq ($(_curr-ver),$(VERSION)) + $(info INFO: running autoreconf for new version string: $(_curr-ver)) + _dummy := $(shell cd $(srcdir) && rm -rf autom4te.cache && $(_autoreconf))) + endif + endif +endif + +else + +.DEFAULT_GOAL := abort-due-to-no-makefile + +# The package can override .DEFAULT_GOAL to run actions like autoreconf. +-include ./cfg.mk +include ./maint.mk + +abort-due-to-no-makefile: + @echo There seems to be no Makefile in this directory. 1>&2 + @echo "You must run ./configure before running \`make'." 1>&2 + @exit 1 + +endif + +# Tell version 3.79 and up of GNU make to not build goals in this +# directory in parallel. This is necessary in case someone tries to +# build multiple targets on one command line. +.NOTPARALLEL: diff --git a/top/maint.mk b/top/maint.mk new file mode 100644 index 000000000..662b37174 --- /dev/null +++ b/top/maint.mk @@ -0,0 +1,123 @@ +# -*-Makefile-*- +# This Makefile fragment is intended to be useful by any GNU-like project. +# This file originate from coreutils, CPPI, Bison, and Autoconf. + +# Copyright (C) 2001-2007 Free Software Foundation, Inc. +# +# 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 . + +ME := maint.mk + +# List of all C-like source code files that will be tested for +# stylistic "errors". You may want to define this to something +# more complex in Makefile.cfg. +C_SOURCES ?= $(shell find . -name '*.[chly]') + +# Add some more files to check, typically set in Makefile.cfg. +C_SOURCES += $(C_SOURCES_ADD) + +# Do not save the original name or timestamp in the .tar.gz file. +# Use --rsyncable if available. +gzip_rsyncable := \ + $(shell gzip --help 2>/dev/null|grep rsyncable >/dev/null && echo --rsyncable) +GZIP_ENV = '--no-name --best $(gzip_rsyncable)' + +# Prevent programs like 'sort' from considering distinct strings to be equal. +# Doing it here saves us from having to set LC_ALL elsewhere in this file. +export LC_ALL = C + +# Casting arguments to free is never necessary. +sc_cast_of_argument_to_free: + @grep -nE '\&2; \ + exit 1; } || : + +sc_cast_of_x_alloc_return_value: + @grep -nE '\*\) *x(m|c|re)alloc\>' $(C_SOURCES) && \ + { echo '$(ME): don'\''t cast x*alloc return value' 1>&2; \ + exit 1; } || : + +sc_cast_of_alloca_return_value: + @grep -nE '\*\) *alloca\>' $(C_SOURCES) && \ + { echo '$(ME): don'\''t cast alloca return value' 1>&2; \ + exit 1; } || : + +sc_space_tab: + @grep -n '[ ] ' $(C_SOURCES) && \ + { echo '$(ME): found SPACE-TAB sequence; remove the SPACE' \ + 1>&2; exit 1; } || : + +# Don't use the old ato* functions in `real' code. +# They provide no error checking mechanism. +# Instead, use strto* functions. +sc_prohibit_atoi_atof: + @grep -nE '\' $(C_SOURCES) && \ + { echo '$(ME): do not use ato''f, ato''i, ato''l, ato''ll, or ato''q' \ + 1>&2; exit 1; } || : + +# Using EXIT_SUCCESS as the first argument to error is misleading, +# since when that parameter is 0, error does not exit. Use `0' instead. +sc_error_exit_success: + @grep -nF 'error (EXIT_SUCCESS,' $(C_SOURCES) && \ + { echo '$(ME): found error (EXIT_SUCCESS' 1>&2; \ + exit 1; } || : + +# Stylistic, use #ifdef instead of #if +sc_no_if_have_config_h: + @grep -n '^# *if HAVE_CONFIG_H' $(C_SOURCES) && \ + { echo '$(ME): found use of #if HAVE_CONFIG_H; use #ifdef' \ + 1>&2; exit 1; } || : + +# Prohibit the inclusion of assert.h without an actual use of assert. +sc_prohibit_assert_without_use: + @files=$$(grep -l '# *include [<"]assert\.h[>"]' $(C_SOURCES) \ + | grep '\.[cy]$$') && \ + grep -L '\ but don't use it" \ + 1>&2; exit 1; } || : + +sc_obsolete_symbols: + @grep -nE '\<(HAVE''_FCNTL_H|O''_NDELAY)\>' $(C_SOURCES) && \ + { echo '$(ME): do not use HAVE''_FCNTL_H or O''_NDELAY' \ + 1>&2; exit 1; } || : + +# Each nonempty line must start with a year number, or a TAB. +sc_changelog: + @grep -n '^[^12 ]' $$(find . -name ChangeLog) && \ + { echo '$(ME): found unexpected prefix in a ChangeLog' 1>&2; \ + exit 1; } || : + +# Collect the names of rules starting with `sc_'. +syntax-check-rules := $(shell sed -n 's/^\(sc_[a-zA-Z0-9_-]*\):.*/\1/p' $(ME)) +.PHONY: $(syntax-check-rules) + +syntax-check: $(syntax-check-rules) + +# Update gettext files. +PACKAGE ?= $(shell basename $(PWD)) +POURL = http://translationproject.org/latest/$(PACKAGE)/ +PODIR ?= po +refresh-po: + rm -f $(PODIR)/*.po && \ + echo "$(ME): getting translations into po (please ignore the robots.txt ERROR 404)..." && \ + wget --no-verbose --directory-prefix $(PODIR) --no-directories --recursive --level 1 --accept .po --accept .po.1 $(POURL) && \ + echo 'en@boldquot' > $(PODIR)/LINGUAS && \ + echo 'en@quot' >> $(PODIR)/LINGUAS && \ + ls $(PODIR)/*.po | sed 's/.po//' | sed 's,$(PODIR)/,,' | sort >> $(PODIR)/LINGUAS + +INDENT_SOURCES ?= $(C_SOURCES) +.PHONY: indent +indent: + indent $(INDENT_SOURCES)