| 1 | # Copyright (c) 1991-2000 Silicon Graphics, Inc. |
| 2 | # This document is licensed under the SGI Free Software B license. |
| 3 | # For details, see |
| 4 | # |
| 5 | # http://oss.sgi.com/projects/FreeB |
| 6 | # |
| 7 | # $Date$ $Revision$ |
| 8 | # $Header: //depot/main/tools/include/commonrules#21 $ |
| 9 | |
| 10 | # |
| 11 | # Notes: |
| 12 | # - After including $(ROOT)/usr/include/make/commondefs, a makefile may |
| 13 | # say ``include $(COMMONRULES)'' to get this file. |
| 14 | # - It is up to the including makefile to define a default rule before |
| 15 | # including $(COMMONRULES). |
| 16 | # - The parent makefile must define TARGETS in order for clobber to work. |
| 17 | # - If the parent makefile must overload the common targets with special |
| 18 | # rules (e.g. to perform recursive or subdirectory makes), then set |
| 19 | # COMMONPREF to some unique prefix before including $(COMMONRULES), |
| 20 | # and make sure that each common target depends on its prefixed name. |
| 21 | # For example, a makefile which passes common targets and install on |
| 22 | # to makes in subdirectories listed in DIRS might say |
| 23 | # |
| 24 | # COMMONPREF=xxx |
| 25 | # include $(COMMONRULES) |
| 26 | # |
| 27 | # $(COMMONTARGS) install: $(COMMONPREF)$$@ |
| 28 | # @for d in $(DIRS); do \ |
| 29 | # $(ECHO) "\tcd $$d; $(MAKE) $@"; \ |
| 30 | # cd $$d; $(MAKE) $@; cd ..; \ |
| 31 | # done |
| 32 | # |
| 33 | # Thus, all of the common rules plus install are passed to sub-makes |
| 34 | # *and* executed in the current makefile (as xxxclean, xxxclobber, |
| 35 | # xxxinstall, etc). SUBDIRS_MAKERULE in commondefs is a convenience |
| 36 | # macro that expands to the above loop. |
| 37 | # |
| 38 | |
| 39 | |
| 40 | # |
| 41 | # cleaning targets |
| 42 | # |
| 43 | $(COMMONPREF)clobber: $(COMMONPREF)clean $(COMMONPREF)rmtargets |
| 44 | ifdef MKDEPFILE |
| 45 | $(RM) -r $(MKDEPFILE) |
| 46 | endif |
| 47 | |
| 48 | $(COMMONPREF)clean: |
| 49 | ifdef DIRT |
| 50 | $(RM) -r $(DIRT) |
| 51 | endif |
| 52 | |
| 53 | $(COMMONPREF)rmtargets: |
| 54 | ifdef TARGETS |
| 55 | $(RM) -r $(TARGETS) |
| 56 | endif |
| 57 | |
| 58 | # |
| 59 | # targets to build distributions |
| 60 | # |
| 61 | -include $(DISTFILE) |
| 62 | |
| 63 | # build SI distribution |
| 64 | $(COMMONPREF)distsi: |
| 65 | @$(INSTALL) $(INSTALLFLAGS) -F $(DIST)/$(DISTDIR_SI) $(DISTFILES_SI) |
| 66 | @$(ECHO) "" |
| 67 | |
| 68 | # build OSS distribution |
| 69 | $(COMMONPREF)distoss: |
| 70 | @$(INSTALL) $(INSTALLFLAGS_OSS) -F $(DIST)/$(DISTDIR_OSS) $(DISTFILES_OSS) |
| 71 | @$(ECHO) "" |
| 72 | |
| 73 | # |
| 74 | # additional target for .cxx files. (gmake only likes .C and .cc) |
| 75 | # |
| 76 | %.o : %.cxx |
| 77 | $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $< -o $@ |
| 78 | |
| 79 | # |
| 80 | # preprocessor only target |
| 81 | # |
| 82 | %.i : %.c |
| 83 | $(CC) -E $(CPPFLAGS) $(CFLAGS) $< | $(SED) -e 's/^ $$//' | $(UNIQ) > $@ |
| 84 | |
| 85 | %.i : %.cc %.C %.cxx |
| 86 | $(CXX) -E $(CPPFLAGS) $(CXXFLAGS) $< | $(SED) -e 's/^ $$//' | $(UNIQ) > $@ |
| 87 | |
| 88 | # |
| 89 | # include the make dependency file(s), if they exist |
| 90 | # |
| 91 | -include $(MKDEPFILE) |
| 92 | |
| 93 | # |
| 94 | # Local make rules |
| 95 | # |
| 96 | -include $(LOCALRULES) |