bug-gnulib
[Top][All Lists]
Advanced

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

Re: rules, rules, and more (code policy) rules


From: Simon Josefsson
Subject: Re: rules, rules, and more (code policy) rules
Date: Sat, 11 Feb 2006 16:36:46 +0100
User-agent: Gnus/5.110004 (No Gnus v0.4) Emacs/22.0.50 (gnu/linux)

I'm now using this (with a couple of modifications) in GNU SASL.

One thing that struck me as very useful, is the ability to invoke
tests without having to autoreconf + configure.

I had to make sure that GNUmakefile include Makefile.maint even when
Makefile doesn't exist for this to work.

GNU SASL need to run 'gtkdocize' during bootstrap, but it was easy to
hook into the autoreconf stuff in GNUmakefile, my Makefile.cfg reads:

gtk-doc.make:
        gtkdocize

configure: gtk-doc.make

I'll remove my 'autogen.sh' scripts if this is accepted.  Typing
'make' builds everything for me now.  Nice...

Updated patch below.

Index: modules/maintainer-makefile
===================================================================
RCS file: modules/maintainer-makefile
diff -N modules/maintainer-makefile
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ modules/maintainer-makefile 11 Feb 2006 15:35:02 -0000
@@ -0,0 +1,12 @@
+Description:
+Helper GNUmakefile with syntax checks, build improvements, etc.
+
+Files:
+build-aux/GNUmakefile
+build-aux/Makefile.maint
+
+License:
+GPLed build tool
+
+Maintainer:
+all
Index: build-aux/GNUmakefile
===================================================================
RCS file: build-aux/GNUmakefile
diff -N build-aux/GNUmakefile
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ build-aux/GNUmakefile       11 Feb 2006 15:35:02 -0000
@@ -0,0 +1,68 @@
+# Having a separate GNUmakefile lets me `include' the dynamically
+# generated rules created via Makefile.maint as well as Makefile.maint itself.
+# 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 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 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, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+# 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
+
+# Make tar archive easier to reproduce.
+export TAR_OPTIONS = --owner=0 --group=0 --numeric-owner
+
+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
+-include $(srcdir)/Makefile.cfg
+include $(srcdir)/Makefile.maint
+
+else
+
+all: configure Makefile build-all
+
+-include ./Makefile.cfg
+include ./Makefile.maint
+
+build-all:
+       make
+
+Makefile: configure
+       ./configure $(CFGFLAGS)
+
+configure:
+       autoreconf --install
+
+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:
Index: build-aux/Makefile.maint
===================================================================
RCS file: build-aux/Makefile.maint
diff -N build-aux/Makefile.maint
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ build-aux/Makefile.maint    11 Feb 2006 15:35:02 -0000
@@ -0,0 +1,44 @@
+# -*-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-2006 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 2, 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, write to the Free Software
+## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+## 02110-1301, USA.
+
+# 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|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 '\<free *\( *\(' $(C_SOURCES) &&              \
+         { echo '$(ME): don'\''t cast free argument' 1>&2;             \
+           exit 1; } || :




reply via email to

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