From 1eadb68598fde7e391414fd2651ee33906a2c5d7 Mon Sep 17 00:00:00 2001 From: Roland McGrath Date: Sat, 11 Jan 1992 11:09:59 +0000 Subject: Initial revision --- GNUmakefile | 229 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 229 insertions(+) create mode 100644 GNUmakefile diff --git a/GNUmakefile b/GNUmakefile new file mode 100644 index 0000000..448868a --- /dev/null +++ b/GNUmakefile @@ -0,0 +1,229 @@ +# GNU Make-specific makefile for GNU Make. + +# Copyright (C) 1990, 1991, 1992 Free Software Foundation, Inc. +# This file is part of GNU Make. +# +# GNU Make 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. +# +# GNU Make 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 GNU Make; see the file COPYING. If not, write to +# the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. + +.PHONY: default +default: + +# Get most of the information from the Unix-compatible makefile. +include compatMakefile + +# Set `ARCH' to a string for the type of machine. +ifndef ARCH +ifdef machine +ARCH = $(machine) +endif # machine +endif # not ARCH + +ifdef ARCH + +# We know the type of machine, so put the binaries in subdirectories. +$(ARCH)/%.o: %.c + $(COMPILE.c) $< $(OUTPUT_OPTION) +objs := $(addprefix $(ARCH)/,$(objs)) +prog := $(ARCH)/make + +archpfx = $(ARCH)/ + +$(archpfx)load.o: load.c + $(COMPILE.c) $(LOAD_AVG) $< -o $@ +$(archpfx)load.dep: load.c + $(mkdep) $(LOAD_AVG) $< | sed 's,$*\.o,& $@,' > $@ +$(archpfx)remote.o: remote.c + $(COMPILE.c) $(REMOTE) $< -o $@ +$(archpfx)remote.dep: remote.c + $(mkdep) $(REMOTE) $< | sed 's,$*\.o,& $@,' > $@ + +CPPFLAGS = $(defines) + +ifneq "$(wildcard $(ARCH)/makefile)" "" +include $(ARCH)/makefile + + objs := $(sort $(objs) $(addprefix $(ARCH)/,$(ALLOCA) $(extras))) +endif + +ifndef no_libc +libc_dir = /home/gd2/gnu/libc/$(ARCH) +ifneq ($(wildcard $(libc_dir)),) +ifneq ($(wildcard $(libc_dir)/works-for-make),) +dash_m := -M +CPPFLAGS := -I$(libc_dir)/ansi +LDFLAGS := -nostdlib $(libc_dir)/start.o +LOADLIBES := $(LOADLIBES) \ + $(libc_dir)/mcheck-init.o \ + $(libc_dir)/libc.a \ + /usr/local/lib/gcc-gnulib \ + $(libc_dir)/libc.a +$(prog): $(libc_dir)/libc.a + +# glob is in the C library. +globdep = +globlib = + +else + +globdep = +globlib = +objs := $(objs) glob/fnmatch.o glob/glob.o +CPPFLAGS := $(CPPFLAGS) -Iglob + +endif +endif +endif + +else # Not ARCH +prog := make +endif + +ifneq "$(findstring gcc,$(CC))" "" +CFLAGS = $(defines) -g -W -Wunused -Wpointer-arith -Wreturn-type -Wswitch +ifneq "$(findstring -O,$(CC))" "" +CC := $(CC) -fstrength-reduce +endif +endif + +ifdef yescustoms +REMOTE := -DCUSTOMS +LOADLIBES := libcustoms.a +endif + +# Define the command to make dependencies. +ifneq "$(findstring gcc,$(CC))" "" +# Don't include system directories. +mkdep-nolib = $(CC) -MM $(CPPFLAGS) +else +mkdep-nolib = $(mkdep) +endif +mkdep = $(CC) -M $(CPPFLAGS) + +depfiles = $(objs:.o=.dep) + + +ifdef yescustoms +prog := $(prog)-customs +endif + +.PHONY: default +default: $(prog) + +$(prog): $(objs) $(globdep) + $(CC) $(LDFLAGS) $^ $(globlib) $(LOADLIBES) -o $@.new + mv -f $@.new $@ + +globfiles = $(addprefix glob/,COPYING.LIB Makefile \ + glob.c fnmatch.c glob.h fnmatch.h) +$(globfiles): /home/gd/gnu/libc/posix/glob.tar + tar xvfm $< $@ +/home/gd/gnu/libc/posix/glob.tar: force + $(MAKE) -C $(@D) $(@F) no_deps=t +.PHONY: force +force: + +# Make the Unix-compatible Makefile to be distributed by appending +# the automatically-generated dependencies to compatMakefile. +ifeq ($(mkdep),$(mkdep-nolib)) +nolib-deps = $(depfiles) +else +%.dep: %.c + $(mkdep-nolib) $< | sed 's,$*\.o,$(@:.dep=.o) $@,' > $@ +ifdef archpfx +load.dep: load.c + $(mkdep-nolib) $(LOAD_AVG) $< | sed 's,$*\.o,& $@,' > $@ +remote.dep: remote.c + $(mkdep-nolib) $(REMOTE) $< | sed 's,$*\.o,& $@,' > $@ +endif +nolib-deps = $(notdir $(depfiles)) glob/glob.dep glob/fnmatch.dep +endif +Makefile: compatMakefile $(nolib-deps) + (cat $<; \ + echo '# Automatically generated dependencies.'; \ + sed -e 's/ [^ ]*\.dep//' -e 's=$(archpfx)==' $(filter-out $<,$^) \ + ) > $@ + +.SUFFIXES: .dep +# Maintain the automatically-generated dependencies. +ifndef no_deps +include $(archpfx)depend +$(archpfx)depend: GNUmakefile compatMakefile + (for file in $(depfiles); \ + do echo include $$file; done) > $@ +$(archpfx)%.dep: %.c + $(mkdep) $< | sed 's,$*\.o,$(@:.dep=.o) $@,' > $@ +endif + +# Run the tests. +.PHONY: tests +tests: + $(MAKE) -C tests + +# Make the distribution tar files. + +.PHONY: dist +# Figure out the version number from the source of `version.c'. +version := \ + $(strip $(shell sed -e '/=/!d' -e 's/^.*"\(.*\)";$$/\1/' < version.c)) +tarfiles := make make-doc make-tests +tarfiles := $(addsuffix -$(version).tar.Z,$(tarfiles)) +# Depend on default and doc so we don't ship anything that won't compile. +dist: default doc tests $(tarfiles) + +dist: local-inst +.PHONY: local-inst +local-inst: $(prog) + install -c -g kmem -o $(USER) -m 2755 $< /usr/local/gnubin/make + +# Put the alpha distribution files in the anonymous FTP directory. +alpha-files = $(tarfiles) GNUmakefile compatMakefile +dist: alpha +.PHONY: alpha +alpha-dir := ~ftp/gnu +alpha-files := $(addprefix $(alpha-dir)/,$(alpha-files)) +alpha: $(alpha-dir) $(alpha-files) +$(alpha-dir)/%: % + @rm -f $@ + cp $< $@ + +# Implicit rule to make README and README-doc. +%: %.template version.c + sed 's/VERSION/$(version)/' < $< > $@ + +define make-tar +@rm -fr make-$(version) +ln -s . make-$(version) +tar cvhf $(@:.Z=) $(addprefix make-$(version)/,$^) +rm -f make-$(version) +compress -f $(@:.Z=) +endef + +make-doc-$(version).tar.Z: README-doc COPYING make.dvi make.info make.info* + $(make-tar) +make-$(version).tar.Z: README COPYING ChangeLog CHANGES TAGS tags Makefile \ + $(srcs) remote-*.c $(globfiles) make.texinfo gpl.texinfo \ + make.cp* make.fn* make.ky* make.pg* make.toc make.tp* make.vr* \ + make.aux make.man texinfo.tex + $(make-tar) + +tests := $(filter-out %~,$(wildcard tests/*)) +make-tests-$(version).tar.Z: $(tests) + @rm -fr make-tests-$(version) + ln -s tests make-tests-$(version) + tar cvhf $(@:.Z=) $(patsubst tests/%,make-tests-$(version)/%,$^) + rm -f make-tests-$(version) + compress -f $(@:.Z=) + +$(archpfx)loadtest: $(archpfx)load.o -- cgit v1.2.3