SUBDIRS = ar file libstuff as gprof include misc ld dyld libdyld libmacho \
	  mkshlib otool profileServer RelNotes man
GNUSRC = /System/Developer/Source/GNU

ifneq "" "$(wildcard /bin/mkdirs)"
  MKDIRS = /bin/mkdirs
else
  MKDIRS = /bin/mkdir -p
endif

all clean:
	@if [ $(SRCROOT) ];						\
	then								\
	    CWD=`pwd`; cd $(DSTROOT); DSTROOT=`pwd`; cd $$CWD;		\
	    for i in `echo $(SUBDIRS)`;					\
	      do							\
		    echo =========== make $@ for $$i =============;	\
		    (cd $$i; $(MAKE) RC_CFLAGS="$(RC_CFLAGS)"		\
			RC_ARCHS="$(RC_ARCHS)"				\
			VERS_STRING_FLAGS="$(VERS_STRING_FLAGS)"	\
			DSTROOT=$$DSTROOT				\
			SRCROOT=$(SRCROOT)/$$i				\
			OBJROOT=$(OBJROOT)/$$i				\
			SYMROOT=$(SYMROOT)/$$i $@);			\
	      done							\
	else								\
	    CWD=`pwd`; cd $(DSTROOT); DSTROOT=`pwd`; cd $$CWD;		\
	    for i in `echo $(SUBDIRS)`;					\
	      do							\
		    echo =========== make $@ for $$i =============;	\
		    (cd $$i; $(MAKE) RC_CFLAGS="$(RC_CFLAGS)"		\
			RC_ARCHS="$(RC_ARCHS)"				\
			DSTROOT=$$DSTROOT $@);				\
	      done							\
	fi

install:
	@if [ $(SRCROOT) ];						\
	then								\
	    CWD=`pwd`; cd $(DSTROOT); DSTROOT=`pwd`; cd $$CWD;		\
	    for i in `echo $(SUBDIRS)`;					\
	      do							\
		    echo =========== make $@ for $$i =============;	\
		    (cd $$i; $(MAKE) RC_CFLAGS="$(RC_CFLAGS)"		\
			RC_ARCHS="$(RC_ARCHS)"				\
			VERS_STRING_FLAGS="$(VERS_STRING_FLAGS)"	\
			DSTROOT=$$DSTROOT				\
			SRCROOT=$(SRCROOT)/$$i				\
			OBJROOT=$(OBJROOT)/$$i				\
			SYMROOT=$(SYMROOT)/$$i $@);			\
	      done;							\
	    if [ $(RC_RELEASE) ];					\
	    then							\
	      CWD=`pwd`; cd $(DSTROOT); DSTROOT=`pwd`; cd $$CWD;	\
	      for i in `echo $(SUBDIRS)`;				\
	        do							\
		    echo ===== make shlib_clean for $$i ==========;	\
		    (cd $$i; $(MAKE) RC_CFLAGS="$(RC_CFLAGS)"		\
			RC_ARCHS="$(RC_ARCHS)"				\
			VERS_STRING_FLAGS="$(VERS_STRING_FLAGS)"	\
			DSTROOT=$$DSTROOT				\
			SRCROOT=$(SRCROOT)/$$i				\
			OBJROOT=$(OBJROOT)/$$i				\
			SYMROOT=$(SYMROOT)/$$i shlib_clean);		\
	      done							\
	    fi								\
	else								\
	    CWD=`pwd`; cd $(DSTROOT); DSTROOT=`pwd`; cd $$CWD;		\
	    for i in `echo $(SUBDIRS)`;					\
	      do							\
		    echo =========== make $@ for $$i =============;	\
		    (cd $$i; $(MAKE) RC_CFLAGS="$(RC_CFLAGS)"		\
			RC_ARCHS="$(RC_ARCHS)"				\
			VERS_STRING_FLAGS="$(VERS_STRING_FLAGS)"	\
			DSTROOT=$$DSTROOT $@);				\
	      done							\
	fi
	$(MAKE) installGNUsrc SRCROOT=$(DSTROOT)/$(GNUSRC)/cctools
	chown -fR root.wheel $(DSTROOT)/$(GNUSRC)

lib_ofiles:
	@if [ $(SRCROOT) ];						\
	then								\
	    CWD=`pwd`; cd $(DSTROOT); DSTROOT=`pwd`; cd $$CWD;		\
	    echo =========== make all for libstuff =============;	\
	    (cd libstuff; $(MAKE) RC_CFLAGS="$(RC_CFLAGS)"		\
		RC_ARCHS="$(RC_ARCHS)"					\
		DSTROOT=$$DSTROOT					\
		SRCROOT=$(SRCROOT)/libstuff				\
		OBJROOT=$(OBJROOT)/libstuff				\
		SYMROOT=$(SYMROOT)/libstuff all);			\
	    echo =========== make lib_ofiles for ld =============;	\
	    (cd ld; $(MAKE) RC_CFLAGS="$(RC_CFLAGS)"			\
		RC_ARCHS="$(RC_ARCHS)"					\
		DSTROOT=$$DSTROOT					\
		SRCROOT=$(SRCROOT)/ld					\
		OBJROOT=$(OBJROOT)/ld					\
		SYMROOT=$(SYMROOT)/ld lib_ofiles);			\
	    echo =========== make lib_ofiles for libdyld =============;	\
	    (cd libdyld; $(MAKE) RC_CFLAGS="$(RC_CFLAGS)"		\
		RC_ARCHS="$(RC_ARCHS)"					\
		DSTROOT=$$DSTROOT					\
		SRCROOT=$(SRCROOT)/libdyld				\
		OBJROOT=$(OBJROOT)/libdyld				\
		SYMROOT=$(SYMROOT)/libdyld lib_ofiles);			\
	    echo =========== make lib_ofiles for libmacho =============;	\
	    (cd libmacho; $(MAKE) RC_CFLAGS="$(RC_CFLAGS)"		\
		RC_ARCHS="$(RC_ARCHS)"					\
		DSTROOT=$$DSTROOT					\
		SRCROOT=$(SRCROOT)/libmacho				\
		OBJROOT=$(OBJROOT)/libmacho				\
		SYMROOT=$(SYMROOT)/libmacho lib_ofiles);		\
	else								\
	    CWD=`pwd`; cd $(DSTROOT); DSTROOT=`pwd`; cd $$CWD;		\
	    echo =========== make all for libstuff =============;	\
	    (cd libstuff; $(MAKE) RC_CFLAGS="$(RC_CFLAGS)"		\
		RC_ARCHS="$(RC_ARCHS)"					\
		DSTROOT=$$DSTROOT all);					\
	    echo =========== make lib_ofiles for ld =============;	\
	    (cd ld; $(MAKE) RC_CFLAGS="$(RC_CFLAGS)"			\
		RC_ARCHS="$(RC_ARCHS)"					\
		DSTROOT=$$DSTROOT lib_ofiles);				\
	    echo =========== make lib_ofiles for libdyld =============;	\
	    (cd libdyld; $(MAKE) RC_CFLAGS="$(RC_CFLAGS)"		\
		RC_ARCHS="$(RC_ARCHS)"					\
		DSTROOT=$$DSTROOT lib_ofiles);				\
	    echo =========== make lib_ofiles for libmacho =============;	\
	    (cd libmacho; $(MAKE) RC_CFLAGS="$(RC_CFLAGS)"		\
		RC_ARCHS="$(RC_ARCHS)"					\
		DSTROOT=$$DSTROOT lib_ofiles);				\
	fi

fromGNUsrc:
	@if [ $(SRCROOT) ];						\
	then								\
	    CWD=`pwd`; cd $(DSTROOT); DSTROOT=`pwd`; cd $$CWD;		\
	    echo =========== make fromGNUsrc for libstuff =============;\
	    (cd libstuff; $(MAKE) RC_CFLAGS="$(RC_CFLAGS)"		\
		RC_ARCHS="$(RC_ARCHS)"					\
		DSTROOT=$$DSTROOT					\
		SRCROOT=$(SRCROOT)/libstuff				\
		OBJROOT=$(OBJROOT)/libstuff				\
		SYMROOT=$(SYMROOT)/libstuff				\
		CFILES2="" fromGNUsrc);					\
	    echo =========== make all for as =============;		\
	    (cd as; $(MAKE) RC_CFLAGS="$(RC_CFLAGS)"			\
		RC_ARCHS="$(RC_ARCHS)"					\
		DSTROOT=$$DSTROOT					\
		SRCROOT=$(SRCROOT)/as					\
		OBJROOT=$(OBJROOT)/as					\
		SYMROOT=$(SYMROOT)/as all);				\
	else								\
	    CWD=`pwd`; cd $(DSTROOT); DSTROOT=`pwd`; cd $$CWD;		\
	    echo =========== make fromGNUsrc for libstuff =============;\
	    (cd libstuff; $(MAKE) RC_CFLAGS="$(RC_CFLAGS)"		\
		RC_ARCHS="$(RC_ARCHS)" CFILES2=""			\
		DSTROOT=$$DSTROOT fromGNUsrc);				\
	    echo =========== make all for as =============;		\
	    (cd as; $(MAKE) RC_CFLAGS="$(RC_CFLAGS)"			\
		RC_ARCHS="$(RC_ARCHS)"					\
		DSTROOT=$$DSTROOT all);					\
	fi

fromMWsrc:
	@if [ $(SRCROOT) ];						\
	then								\
	    CWD=`pwd`; cd $(DSTROOT); DSTROOT=`pwd`; cd $$CWD;		\
	    echo =========== make fromMWsrc for libstuff =============;\
	    (cd libstuff; $(MAKE) RC_CFLAGS="$(RC_CFLAGS)"		\
		RC_ARCHS="$(RC_ARCHS)"					\
		DSTROOT=$$DSTROOT					\
		SRCROOT=$(SRCROOT)/libstuff				\
		OBJROOT=$(OBJROOT)/libstuff				\
		SYMROOT=$(SYMROOT)/libstuff				\
		CFILES2="" fromMWsrc);					\
	    echo =========== make all for ld =============;		\
	    (cd ld; $(MAKE) RC_CFLAGS="$(RC_CFLAGS)"			\
		RC_ARCHS="$(RC_ARCHS)"					\
		DSTROOT=$$DSTROOT					\
		SRCROOT=$(SRCROOT)/ld					\
		OBJROOT=$(OBJROOT)/ld					\
		SYMROOT=$(SYMROOT)/ld all);				\
	else								\
	    CWD=`pwd`; cd $(DSTROOT); DSTROOT=`pwd`; cd $$CWD;		\
	    echo =========== make fromMWsrc for libstuff =============;\
	    (cd libstuff; $(MAKE) RC_CFLAGS="$(RC_CFLAGS)"		\
		RC_ARCHS="$(RC_ARCHS)" CFILES2=""			\
		DSTROOT=$$DSTROOT fromMWsrc);				\
	    echo =========== make all for ld =============;		\
	    (cd ld; $(MAKE) RC_CFLAGS="$(RC_CFLAGS)"			\
		RC_ARCHS="$(RC_ARCHS)"					\
		DSTROOT=$$DSTROOT all);					\
	fi

installsrc installGNUsrc installMWsrc: SRCROOT
	$(MKDIRS) $(SRCROOT)
	cp Makefile $(SRCROOT)
	for i in `echo $(SUBDIRS)`; \
	  do \
		echo =========== make $@ for $$i =============;	\
		(cd $$i; $(MAKE) SRCROOT=$$SRCROOT/$$i $@); \
	  done

installhdrs: $(DSTROOT)
	cd include; $(MAKE) DSTROOT=$(DSTROOT) install

$(DSTROOT):
	$(MKDIRS) $@

SRCROOT:
	@if [ -n "${$@}" ]; \
	then \
		exit 0; \
	else \
		echo Must define $@; \
		exit 1; \
	fi
