This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH] Handwritten Makefile.in for libcpp


I will take this opportunity to remind Paolo Bonzini that his
move-cpp-to-toplevel patch was only approved on condition that he
write a proper hand-written Makefile for it in short order.

Here it is -- I had it almost ready, I only had to test it a bit more; I have built it and tried the install rules. I am currently doing a full compiler bootstrap just in case. Ok for mainline if it passes?


Paolo
libcpp/ChangeLog:
2004-08-24  Paolo Bonzini  <bonzini@gnu.org>

	* configure.ac: Replace Automake macro invocations
	with manual Autoconf checks and substitutions.
	* Makefile.am: Removed.
	* Makefile.in: Heavy simplification and reorganization.

gcc/ChangeLog:
2004-08-24  Paolo Bonzini  <bonzini@gnu.org>

	* doc/invoke.texi: Document that libcpp does not require
	Automake any longer.  Document that Automake 1.9.1 should
	work everywhere.

Index: libcpp/configure.ac
===================================================================
RCS file: /cvs/gcc/gcc/libcpp/configure.ac,v
retrieving revision 1.4
diff -u -r1.4 libcpp/configure.ac
--- libcpp/configure.ac	11 Aug 2004 02:50:14 -0000	1.4
+++ libcpp/configure.ac	24 Aug 2004 08:40:24 -0000
@@ -5,13 +5,18 @@
 AC_INIT(cpplib, [ ], gcc-bugs@gcc.gnu.org, cpplib)
 AC_CONFIG_SRCDIR(ucnid.h)
 AC_CANONICAL_SYSTEM
-AM_INIT_AUTOMAKE(foreign)
-AM_MAINTAINER_MODE
+AC_PROG_MAKE_SET
+AC_PROG_INSTALL
 
 # Checks for programs.
 AC_PROG_CC
 AC_PROG_RANLIB
 
+MISSING=`cd $ac_aux_dir && ${PWDCMD-pwd}`/missing
+AC_CHECK_PROGS([ACLOCAL], [aclocal], [$MISSING aclocal])
+AC_CHECK_PROGS([AUTOCONF], [autoconf], [$MISSING autoconf])
+AC_CHECK_PROGS([AUTOHEADER], [autoheader], [$MISSING autoheader])
+
 # Checks for header files.
 AC_HEADER_TIME
 ACX_HEADER_STRING
@@ -52,7 +57,29 @@
 fi
 
 AM_ICONV
-AM_CONDITIONAL(ENABLE_NLS, [test "x$enable_nls" != xno])
+
+# More defines and substitutions.
+AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Define to the name of this package.])
+AC_SUBST(PACKAGE)
+
+if test "x$enable_nls" != xno; then
+  USED_CATALOGS='$(CATALOGS)'
+else
+  USED_CATALOGS=
+fi
+AC_SUBST(USED_CATALOGS)
+
+AC_ARG_ENABLE(maintainer-mode,
+[  --enable-maintainer-mode enable rules only needed by maintainers],,
+enable_maintainer_mode=no)
+
+if test "x$enable_maintainer_mode" != xno; then
+  MAINT='#'
+else
+  MAINT=
+fi
+AC_SUBST(MAINT)
+
 AC_ARG_ENABLE(checking,
 [  --enable-checking      enable expensive run-time checks],,
 enable_checking=no)
@@ -94,6 +121,8 @@
 [Define to the widest efficient host integer type at least
    as wide as the target's size_t type.])
 
-AC_CONFIG_HEADERS(config.h:config.in)
+# Output.
+
+AC_CONFIG_HEADERS(config.h:config.in, [echo timestamp > stamp-h1])
 AC_CONFIG_FILES(Makefile)
 AC_OUTPUT
Index: gcc/doc/install.texi
===================================================================
RCS file: /cvs/gcc/gcc/gcc/doc/install.texi,v
retrieving revision 1.306
diff -u -r1.306 install.texi
--- gcc/doc/install.texi	19 Aug 2004 18:12:25 -0000	1.306
+++ gcc/doc/install.texi	24 Aug 2004 08:44:01 -0000
@@ -320,12 +320,12 @@
 
 Much of GCC does not use automake, so directly edit the @file{Makefile.in}
 file.  Specifically this applies to the @file{gcc}, @file{intl},
-@file{libiberty}, @file{libobjc} directories as well as any
-of their subdirectories.
+@file{libcpp}, @file{libiberty}, @file{libobjc} directories as well
+as any of their subdirectories.
 
-The Java directory @file{libjava} requires a automake 1.9.1.
-
-Every other directory requires automake 1.8.5.
+The Java directory @file{libjava} requires automake 1.9.1.  Every other
+directory should work with either automake 1.8.5 and automake 1.9.1, but
+most of them have been tested only with automake 1.8.5 so far.
 
 @item gettext version 0.12 (or later)
 





# @configure_input@
# Makefile for libcpp.  Run 'configure' to generate Makefile from Makefile.in

# Copyright (C) 2004 Free Software Foundation, Inc.

#This file is part of libcpp.

#libcpp 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.

#libcpp 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 libcpp; see the file COPYING.  If not, write to
#the Free Software Foundation, 59 Temple Place - Suite 330,
#Boston MA 02111-1307, USA.

@SET_MAKE@

srcdir = @srcdir@
top_srcdir = $(srcdir)/..
top_incdir = $(srcdir)/../include
libcpp_incdir = $(srcdir)/../libcpp/include

VPATH = @srcdir@
INSTALL = @INSTALL@
AR = ar
ARFLAGS = cru
ACLOCAL = @ACLOCAL@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
CATALOGS = @CATALOGS@
CC = @CC@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
EXEEXT = @EXEEXT@
GMSGFMT = @GMSGFMT@
INCINTL = @INCINTL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
LDFLAGS = @LDFLAGS@
LIBICONV = @LIBICONV@
LIBINTL = @LIBINTL@
PACKAGE = @PACKAGE@
RANLIB = @RANLIB@
SHELL = @SHELL@
USED_CATALOGS = @USED_CATALOGS@
XGETTEXT = @XGETTEXT@

datadir = @datadir@
exec_prefix = @prefix@
libdir = @libdir@
localedir = $(datadir)/locale
prefix = @prefix@

MSGMERGE = msgmerge
mkinstalldirs = $(SHELL) $(srcdir)/../mkinstalldirs
DEFS = -DLOCALEDIR="\"$(localedir)\""
INCLUDES = -I$(srcdir) -I. -I$(srcdir)/../include @INCINTL@ \
	-I$(srcdir)/include

libcpp_a_OBJS = charset.o directives.o \
	errors.o expr.o files.o \
	identifiers.o init.o lex.o \
	line-map.o macro.o mkdeps.o \
	pch.o symtab.o traditional.o
makedepend_OBJS = makedepend.o

libcpp_a_SOURCES = \
	charset.c directives.c errors.c expr.c files.c \
	identifiers.c init.c lex.c line-map.c macro.c mkdeps.c \
	pch.c symtab.c traditional.c

all: libcpp.a makedepend$(EXEEXT) $(USED_CATALOGS)

.SUFFIXES:
.SUFFIXES: .c .gmo .o .obj .po .pox

libcpp.a: $(libcpp_a_OBJS)
	-rm -f libcpp.a
	$(AR) $(ARFLAGS) libcpp.a $(libcpp_a_OBJS)
	$(RANLIB) libcpp.a

makedepend$(EXEEXT): $(makedepend_OBJS) libcpp.a ../libiberty/libiberty.a
	@rm -f makedepend$(EXEEXT)
	$(CC) $(CFLAGS) $(LDFLAGS) -o makedepend$(EXEEXT) \
	  $(makedepend_OBJS) libcpp.a ../libiberty/libiberty.a \
	  $(LIBINTL) $(LIBICONV)

# Rules to rebuild the configuration

Makefile: $(srcdir)/Makefile.in config.status
	$(SHELL) ./config.status Makefile

config.status: $(srcdir)/configure
	$(SHELL) ./config.status --recheck

$(srcdir)/configure: @MAINT@ $(srcdir)/aclocal.m4
	cd $(srcdir) && $(AUTOCONF)

$(srcdir)/aclocal.m4: @MAINT@ $(srcdir)/../config/acx.m4 \
	$(srcdir)/../config/gettext.m4 $(srcdir)/configure.ac
	cd $(srcdir) && $(ACLOCAL) -I ../config

config.h: stamp-h1
	test -f config.h || (rm -f stamp-h1 && $(MAKE) stamp-h1)

stamp-h1: $(srcdir)/config.in config.status
	-rm -f stamp-h1
	$(SHELL) ./config.status config.h

$(srcdir)/config.in: @MAINT@ $(srcdir)/configure
	cd $(srcdir) && $(AUTOHEADER)
	-rm -f stamp-h1

# Installation rules and other phony targets

# These rule has to look for .gmo modules in both srcdir and
# the cwd, and has to check that we actually have a catalog
# for each language, in case they weren't built or included
# with the distribution.
installdirs:
	@$(mkinstalldirs) $(DESTDIR)$(datadir); \
	cats="$(CATALOGS)"; for cat in $$cats; do \
	  lang=`basename $$cat | sed 's/\.gmo$$//'`; \
	  if [ -f $$cat ] || [ -f $(srcdir)/$$cat ]; then \
	    dir=$(localedir)/$$lang/LC_MESSAGES; \
	    $(mkinstalldirs) $(DESTDIR)$$dir || exit 1; \
	  fi; \
	done

install-strip install: all installdirs
	cats="$(CATALOGS)"; for cat in $$cats; do \
	  lang=`basename $$cat | sed 's/\.gmo$$//'`; \
	  if [ -f $$cat ]; then :; \
	  elif [ -f $(srcdir)/$$cat ]; then cat=$(srcdir)/$$cat; \
	  else continue; \
	  fi; \
	  dir=$(localedir)/$$lang/LC_MESSAGES; \
	  echo $(INSTALL_DATA) $$cat $(DESTDIR)$$dir/$(PACKAGE).mo; \
	  $(INSTALL_DATA) $$cat $(DESTDIR)$$dir/$(PACKAGE).mo; \
	done

mostlyclean:
	-rm -f *.o

clean: mostlyclean
	-rm -f makedepend$(EXEEXT) libcpp.a $(srcdir)/autom4te.cache

distclean: clean
	-rm -f config.h stamp-h1 config.status config.cache config.log \
	  configure.lineno configure.status.lineno Makefile

maintainer-clean: distclean
	@echo "This command is intended for maintainers to use"
	@echo "it deletes files that may require special tools to rebuild."
	-rm -f $(srcdir)/configure $(srcdir)/aclocal.m4

check:
installcheck:
dvi:
html:
info:
install-info:
install-man:

update-po: $(CATALOGS:.gmo=.pox)

.PHONY: installdirs install install-strip mostlyclean clean distclean \
  maintainer-clean check installcheck dvi html info install-info \
  install-man update-po

# Implicit rules and I18N

.c.o:
	$(CC) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) -c $<

# N.B. We do not attempt to copy these into $(srcdir).
.po.gmo:
	-test -d po || mkdir po
	$(GMSGFMT) --statistics -o $@ $<

# The new .po has to be gone over by hand, so we deposit it into
# build/po with a different extension.
# If build/po/$(PACKAGE).pot exists, use it (it was just created),
# else use the one in srcdir.
.po.pox:
	-test -d po || mkdir po
	$(MSGMERGE) $< `if test -f po/$(PACKAGE).pot; \
	                then echo po/$(PACKAGE).pot; \
	                else echo $(srcdir)/po/$(PACKAGE).pot; fi` -o $@

# Rule for regenerating the message template (gcc.pot).
# Instead of forcing everyone to edit POTFILES.in, which proved impractical,
# this rule has no dependencies and always regenerates libcpp.pot.  This is
# relatively harmless since the .po files do not directly depend on it.
.PHONY: po/$(PACKAGE).pot
po/$(PACKAGE).pot: $(libcpp_a_SOURCES)
	-test -d $(srcdir)/po || mkdir $(srcdir)/po
	$(XGETTEXT) --default-domain=$(PACKAGE) \
	  --keyword=cpp_error,3 --keyword=cpp_errno,3 \
	  --keyword=cpp_error_with_line,5 \
	  --copyright-holder="Free Software Foundation, Inc." \
	  --msgid-bugs-address="http://gcc.gnu.org/bugs.html"; \
	  --language=c -o po/$(PACKAGE).pot $^

# Dependencies

COMMON_DEPS = config.h $(srcdir)/system.h $(srcdir)/internal.h \
  $(top_incdir)/libiberty.h $(top_incdir)/ansidecl.h \
  $(top_incdir)/filenames.h $(top_incdir)/safe-ctype.h \
  $(libcpp_incdir)/symtab.h $(top_incdir)/obstack.h \
  $(libcpp_incdir)/line-map.h $(libcpp_incdir)/cpplib.h \
  $(libcpp_incdir)/cpp-id-data.h $(top_incdir)/getopt.h 

charset.o: $(srcdir)/charset.c $(COMMON_DEPS) $(srcdir)/ucnid.h
directives.o: $(srcdir)/directives.c $(COMMON_DEPS) $(libcpp_incdir)/mkdeps.h
errors.o: $(srcdir)/errors.c $(COMMON_DEPS)
expr.o: $(srcdir)/expr.c $(COMMON_DEPS)

files.o: $(srcdir)/files.c $(COMMON_DEPS) $(libcpp_incdir)/mkdeps.h \
   $(top_incdir)/hashtab.h $(top_incdir)/md5.h
  
identifiers.o: $(srcdir)/identifiers.c $(COMMON_DEPS)
init.o: $(srcdir)/init.c $(COMMON_DEPS) $(libcpp_incdir)/mkdeps.h
lex.o: $(srcdir)/lex.c $(COMMON_DEPS)
line-map.o: $(srcdir)/line-map.c $(COMMON_DEPS)
macro.o: $(srcdir)/macro.c $(COMMON_DEPS)
makedepend.o: $(srcdir)/makedepend.c $(COMMON_DEPS)
mkdeps.o: $(srcdir)/mkdeps.c $(COMMON_DEPS)

pch.o: $(srcdir)/pch.c $(COMMON_DEPS) \
   $(top_incdir)/hashtab.h $(libcpp_incdir)/mkdeps.h

symtab.o: $(srcdir)/symtab.c $(COMMON_DEPS)
traditional.o: $(srcdir)/traditional.c $(COMMON_DEPS)

# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]