summaryrefslogtreecommitdiffstats
path: root/config/rules.mk
diff options
context:
space:
mode:
authorcvsadm <cvsadm>2005-01-21 00:44:34 +0000
committercvsadm <cvsadm>2005-01-21 00:44:34 +0000
commitb2093e3016027d6b5cf06b3f91f30769bfc099e2 (patch)
treecf58939393a9032182c4fbc4441164a9456e82f8 /config/rules.mk
downloadds-ldapserver7x.tar.gz
ds-ldapserver7x.tar.xz
ds-ldapserver7x.zip
Moving NSCP Directory Server from DirectoryBranch to TRUNK, initial drop. (foxworth)ldapserver7x
Diffstat (limited to 'config/rules.mk')
-rw-r--r--config/rules.mk707
1 files changed, 707 insertions, 0 deletions
diff --git a/config/rules.mk b/config/rules.mk
new file mode 100644
index 00000000..c65f49f2
--- /dev/null
+++ b/config/rules.mk
@@ -0,0 +1,707 @@
+#
+# BEGIN COPYRIGHT BLOCK
+# Copyright 2001 Sun Microsystems, Inc.
+# Portions copyright 1999, 2001-2003 Netscape Communications Corporation.
+# All rights reserved.
+# END COPYRIGHT BLOCK
+#
+################################################################################
+# Wow this is complicated! The story is that we now have a 4 pass build process:
+#
+# Pass 1. export - Create generated headers and stubs. Publish public headers to
+# dist/<arch>/include.
+#
+# Pass 2. libs - Create libraries. Publish libraries to dist/<arch>/lib.
+#
+# Pass 3. all - Create programs.
+#
+# Pass 4. install - Publish programs to dist/<arch>/bin.
+#
+# Parameters to this makefile (set these before including):
+#
+# a)
+# TARGETS -- the target to create
+# (defaults to $LIBRARY $PROGRAM)
+# b)
+# DIRS -- subdirectories for make to recurse on
+# (the 'all' rule builds $TARGETS $DIRS)
+# c)
+# CSRCS, CPPSRCS -- .c and .cpp files to compile
+# (used to define $OBJS)
+# d)
+# PROGRAM -- the target program name to create from $OBJS
+# ($OBJDIR automatically prepended to it)
+# e)
+# LIBRARY -- the target library name to create from $OBJS
+# ($OBJDIR automatically prepended to it)
+# f)
+# JSRCS -- java source files to compile into class files
+# (if you don't specify this it will default to *.java)
+# PACKAGE -- the package to put the .class files into
+# (e.g. netscape/applet)
+# JMC_EXPORT -- java files to be exported for use by JMC_GEN
+# (this is a list of Class names)
+# g)
+# JRI_GEN -- files to run through javah to generate headers and stubs
+# (output goes into the _jri sub-dir)
+# h)
+# JMC_GEN -- files to run through jmc to generate headers and stubs
+# (output goes into the _jmc sub-dir)
+#
+################################################################################
+
+#
+# Common rules used by lots of makefiles...
+#
+ifndef NS_CONFIG_MK
+include $(DEPTH)/config/config.mk
+endif
+
+ifdef PROGRAM
+PROGRAM := $(addprefix $(OBJDIR)/, $(PROGRAM))
+endif
+
+ifndef LIBRARY
+ifdef LIBRARY_NAME
+LIBRARY := lib$(LIBRARY_NAME).$(LIB_SUFFIX)
+endif
+endif
+
+ifdef LIBRARY
+LIBRARY := $(addprefix $(OBJDIR)/, $(LIBRARY))
+ifdef MKSHLIB
+SHARED_LIBRARY := $(LIBRARY:.$(LIB_SUFFIX)=$(DLL_PRESUF).$(DLL_SUFFIX))
+endif
+endif
+
+ifndef TARGETS
+TARGETS = $(LIBRARY) $(SHARED_LIBRARY) $(PROGRAM)
+endif
+
+ifndef OBJS
+OBJS = $(JRI_STUB_CFILES) $(addsuffix .o, $(JMC_GEN)) $(CSRCS:.c=.o) $(CPPSRCS:.cpp=.o) $(ASFILES:.s=.o)
+endif
+
+ifdef OBJS
+OBJS := $(addprefix $(OBJDIR)/, $(OBJS))
+endif
+
+ifdef REQUIRES
+MODULE_PREINCLUDES = $(addprefix -I$(XPDIST)/public/, $(REQUIRES))
+endif
+
+ifeq ($(OS_ARCH),WINNT)
+ifdef DLL
+DLL := $(addprefix $(OBJDIR)/, $(DLL))
+LIB := $(addprefix $(OBJDIR)/, $(LIB))
+endif
+endif
+define MAKE_OBJDIR
+if test ! -d $(@D); then rm -rf $(@D); $(NSINSTALL) -D $(@D); fi
+endef
+
+ALL_TRASH = $(TARGETS) $(OBJS) $(OBJDIR) LOGS TAGS $(GARBAGE) \
+ $(NOSUCHFILE) $(JDK_HEADER_CFILES) $(JDK_STUB_CFILES) \
+ $(JRI_HEADER_CFILES) $(JRI_STUB_CFILES) $(JMC_STUBS) \
+ $(JMC_HEADERS) $(JMC_EXPORT_FILES) so_locations \
+ _gen _jmc _jri _stubs \
+ $(wildcard $(JAVA_DESTPATH)/$(PACKAGE)/*.class)
+
+ifdef JDIRS
+ALL_TRASH += $(addprefix $(JAVA_DESTPATH)/,$(JDIRS))
+endif
+
+ifdef NSBUILDROOT
+JDK_GEN_DIR = $(XPDIST)/_gen
+JMC_GEN_DIR = $(XPDIST)/_jmc
+JRI_GEN_DIR = $(XPDIST)/_jri
+JDK_STUB_DIR = $(XPDIST)/_stubs
+else
+JDK_GEN_DIR = _gen
+JMC_GEN_DIR = _jmc
+JRI_GEN_DIR = _jri
+JDK_STUB_DIR = _stubs
+endif
+
+#
+# If this is an "official" build, try to build everything.
+# I.e., don't exit on errors.
+#
+ifdef BUILD_OFFICIAL
+EXIT_ON_ERROR = +e
+CLICK_STOPWATCH = date
+else
+EXIT_ON_ERROR = -e
+CLICK_STOPWATCH = true
+endif
+
+
+################################################################################
+
+ifdef ALL_PLATFORMS
+all_platforms:: $(NFSPWD)
+ @d=`$(NFSPWD)`; \
+ if test ! -d LOGS; then rm -rf LOGS; mkdir LOGS; fi; \
+ for h in $(PLATFORM_HOSTS); do \
+ echo "On $$h: $(MAKE) $(ALL_PLATFORMS) >& LOGS/$$h.log"; \
+ rsh $$h -n "(chdir $$d; \
+ $(MAKE) $(ALL_PLATFORMS) >& LOGS/$$h.log; \
+ echo DONE) &" 2>&1 > LOGS/$$h.pid & \
+ sleep 1; \
+ done
+
+$(NFSPWD):
+ cd $(@D); $(MAKE) $(@F)
+endif
+
+ifdef REQUIRES
+ifndef NO_NSPR
+INCLUDES += -I$(XPDIST)/$(OBJDIR)/include/nspr20/pr $(addprefix -I$(XPDIST)/public/, $(REQUIRES))
+else
+INCLUDES += $(addprefix -I$(XPDIST)/public/, $(REQUIRES))
+endif
+endif
+
+all:: $(TARGETS)
+ +$(LOOP_OVER_DIRS)
+
+libs:: $(LIBRARY) $(SHARED_LIBRARY)
+
+$(PROGRAM): $(OBJS)
+ @$(MAKE_OBJDIR)
+ifeq ($(OS_ARCH),WINNT)
+ $(CC) $(OBJS) -Fe$@ -link $(LDFLAGS) $(OS_LIBS) $(EXTRA_LIBS)
+else
+ $(CC) -o $@ $(CFLAGS) $(OBJS) $(LDFLAGS)
+endif
+
+$(LIBRARY): $(OBJS)
+ @$(MAKE_OBJDIR)
+ rm -f $@
+ $(AR) $(OBJS)
+ $(RANLIB) $@
+
+$(SHARED_LIBRARY): $(OBJS)
+ @$(MAKE_OBJDIR)
+ rm -f $@
+ $(MKSHLIB) -o $@ $(OBJS) $(EXTRA_SHLIBS)
+ chmod +x $@
+
+ifeq ($(OS_ARCH),WINNT)
+$(DLL): $(OBJS) $(EXTRA_LIBS)
+ @$(MAKE_OBJDIR)
+ rm -f $@
+ $(LINK_DLL) $(OBJS) $(OS_LIBS) $(EXTRA_LIBS)
+endif
+
+.SUFFIXES: .i .pl .class .java .html
+
+.PRECIOUS: .java
+
+$(OBJDIR)/%: %.c
+ @$(MAKE_OBJDIR)
+ifeq ($(OS_ARCH),WINNT)
+ $(CC) -Fo$@ -c $(CFLAGS) $*.c
+else
+ $(CC) -o $@ $(CFLAGS) $*.c $(LDFLAGS)
+endif
+
+$(OBJDIR)/%.o: %.c
+ @$(MAKE_OBJDIR)
+ifeq ($(OS_ARCH),WINNT)
+ $(CC) -Fo$@ -c $(CFLAGS) $*.c
+else
+ $(CC) -o $@ -c $(CFLAGS) $*.c
+endif
+
+$(OBJDIR)/%.o: %.s
+ @$(MAKE_OBJDIR)
+ $(AS) -o $@ $(ASFLAGS) -c $*.s
+
+$(OBJDIR)/%.o: %.S
+ @$(MAKE_OBJDIR)
+ $(AS) -o $@ $(ASFLAGS) -c $*.S
+
+$(OBJDIR)/%: %.cpp
+ @$(MAKE_OBJDIR)
+ $(CCC) -o $@ $(CFLAGS) $*.c $(LDFLAGS)
+
+#
+# Please keep the next two rules in sync.
+#
+$(OBJDIR)/%.o: %.cc
+ @$(MAKE_OBJDIR)
+ $(CCC) -o $@ -c $(CFLAGS) $*.cc
+
+$(OBJDIR)/%.o: %.cpp
+ @$(MAKE_OBJDIR)
+ifdef STRICT_CPLUSPLUS_SUFFIX
+ echo "#line 1 \"$*.cpp\"" | cat - $*.cpp > $(OBJDIR)/t_$*.cc
+ $(CCC) -o $@ -c $(CFLAGS) $(OBJDIR)/t_$*.cc
+ rm -f $(OBJDIR)/t_$*.cc
+else
+ifeq ($(OS_ARCH),WINNT)
+ $(CCC) -Fo$@ -c $(CFLAGS) $*.cpp
+else
+ $(CCC) -o $@ -c $(CFLAGS) $*.cpp
+endif
+endif #STRICT_CPLUSPLUS_SUFFIX
+
+%.i: %.cpp
+ $(CCC) -C -E $(CFLAGS) $< > $*.i
+
+%.i: %.c
+ $(CC) -C -E $(CFLAGS) $< > $*.i
+
+%: %.pl
+ rm -f $@; cp $*.pl $@; chmod +x $@
+
+%: %.sh
+ rm -f $@; cp $*.sh $@; chmod +x $@
+
+#
+# If this is an "official" build, try to build everything.
+# I.e., don't exit on errors.
+#
+ifdef BUILD_OFFICIAL
+EXIT_ON_ERROR = +e
+else
+EXIT_ON_ERROR = -e
+endif
+
+ifdef DIRS
+ifneq ($(OS_ARCH),WINNT)
+override MAKEFLAGS :=
+endif
+LOOP_OVER_DIRS = \
+ @for d in $(DIRS); do \
+ if test -d $$d; then \
+ set $(EXIT_ON_ERROR); \
+ echo "cd $$d; $(MAKE) $(MAKEFLAGS) $@"; \
+ cd $$d; $(MAKE) $(MAKEFLAGS) $@; cd ..; \
+ set +e; \
+ else \
+ echo "Skipping non-directory $$d..."; \
+ fi; \
+ $(CLICK_STOPWATCH); \
+done
+
+$(DIRS)::
+ @if test -d $@; then \
+ set $(EXIT_ON_ERROR); \
+ echo "cd $@; $(MAKE) $(MAKEFLAGS)"; \
+ cd $@; $(MAKE) $(MAKEFLAGS); \
+ set +e; \
+ else \
+ echo "Skipping non-directory $@..."; \
+ fi \
+ $(CLICK_STOPWATCH);
+endif # DIRS
+
+clean::
+ rm -f $(OBJS) $(NOSUCHFILE)
+ +$(LOOP_OVER_DIRS)
+
+clobber::
+ rm -f $(OBJS) $(TARGETS) $(GARBAGE) $(NOSUCHFILE)
+ +$(LOOP_OVER_DIRS)
+
+realclean clobber_all::
+ rm -rf LOGS TAGS $(wildcard *.OBJ) $(OBJS) $(TARGETS) $(GARBAGE) $(NOSUCHFILE)
+ +$(LOOP_OVER_DIRS)
+
+alltags:
+ rm -f TAGS
+ find . -name dist -prune -o \( -name '*.[hc]' -o -name '*.cp' -o -name '*.cpp' \) -print | xargs etags -a
+
+export::
+ +$(LOOP_OVER_DIRS)
+
+libs::
+ +$(LOOP_OVER_DIRS)
+
+install::
+ +$(LOOP_OVER_DIRS)
+
+mac::
+ +$(LOOP_OVER_DIRS)
+
+################################################################################
+### Bunch of things that extend the 'export' rule (in order):
+################################################################################
+### JSRCS -- for compiling java files
+
+ifndef PACKAGE
+PACKAGE = .
+endif
+$(JAVA_DESTPATH) $(JAVA_DESTPATH)/$(PACKAGE) $(JMCSRCDIR)::
+ @if test ! -d $@; then \
+ echo Creating $@; \
+ rm -rf $@; \
+ $(NSINSTALL) -D $@; \
+ fi
+
+ifneq ($(JSRCS),)
+export:: $(JAVA_DESTPATH) $(JAVA_DESTPATH)/$(PACKAGE)
+ @list=`perl $(DEPTH)/config/outofdate.pl $(PERLARG) \
+ -d $(JAVA_DESTPATH)/$(PACKAGE) $(JSRCS)`; \
+ if test "$$list"x != "x"; then \
+ echo $(JAVAC) $$list; \
+ $(JAVAC) $$list; \
+ fi
+
+all:: export
+
+clobber::
+ rm -f $(XPDIST)/classes/$(PACKAGE)/*.class
+
+endif
+
+################################################################################
+## JDIRS -- like JSRCS, except you can give a list of directories and it will
+## compile all the out-of-date java files recursively below those directories.
+
+ifdef JDIRS
+
+export:: $(JAVA_DESTPATH) $(JAVA_DESTPATH)/$(PACKAGE)
+ @for d in $(JDIRS); do \
+ if test -d $$d; then \
+ set $(EXIT_ON_ERROR); \
+ files=`echo $$d/*.java`; \
+ list=`perl $(DEPTH)/config/outofdate.pl $(PERLARG) \
+ -d $(JAVA_DESTPATH)/$(PACKAGE) $$files`; \
+ if test "$${list}x" != "x"; then \
+ echo Building all java files in $$d; \
+ echo $(JAVAC) $$list; \
+ $(JAVAC) $$list; \
+ fi; \
+ set +e; \
+ else \
+ echo "Skipping non-directory $$d..."; \
+ fi; \
+ $(CLICK_STOPWATCH); \
+ done
+
+all:: export
+
+clobber::
+ @for d in $(JDIRS); do \
+ echo rm -rf $(XPDIST)/classes/$$d; \
+ rm -rf $(XPDIST)/classes/$$d; \
+ done
+
+endif
+
+################################################################################
+### JDK_GEN -- for generating "old style" native methods
+
+# Generate JDK Headers and Stubs into the '_gen' and '_stubs' directory
+
+ifneq ($(JDK_GEN),)
+
+ifdef NSBUILDROOT
+JDK_GEN_DIR = $(XPDIST)/_gen
+JDK_STUB_DIR = $(XPDIST)/_stubs
+else
+JDK_GEN_DIR = _gen
+JDK_STUB_DIR = _stubs
+endif
+
+INCLUDES += -I$(JDK_GEN_DIR)
+
+JDK_PACKAGE_CLASSES = $(JDK_GEN)
+JDK_PATH_CLASSES = $(subst .,/,$(JDK_PACKAGE_CLASSES))
+JDK_PATH_CLASSES = $(subst .,/,$(JDK_PACKAGE_CLASSES))
+JDK_HEADER_CLASSFILES = $(patsubst %,$(JAVA_DESTPATH)/%.class,$(JDK_PATH_CLASSES))
+JDK_STUB_CLASSFILES = $(patsubst %,$(JAVA_DESTPATH)/%.class,$(JDK_PATH_CLASSES))
+JDK_HEADER_CFILES = $(patsubst %,$(JDK_GEN_DIR)/%.h,$(JDK_GEN))
+JDK_STUB_CFILES = $(patsubst %,$(JDK_STUB_DIR)/%.c,$(JDK_GEN))
+
+$(JDK_HEADER_CFILES): $(JDK_HEADER_CLASSFILES)
+$(JDK_STUB_CFILES): $(JDK_STUB_CLASSFILES)
+
+export::
+ @echo Generating/Updating JDK headers
+ $(JAVAH) -d $(JDK_GEN_DIR) $(JDK_PACKAGE_CLASSES)
+ @echo Generating/Updating JDK stubs
+ $(JAVAH) -stubs -d $(JDK_STUB_DIR) $(JDK_PACKAGE_CLASSES)
+
+mac::
+ @echo Generating/Updating JDK headers for the Mac
+ $(JAVAH) -mac -d $(DEPTH)/lib/mac/Java/_gen $(JDK_PACKAGE_CLASSES)
+ @echo Generating/Updating JDK stubs for the Mac
+ $(JAVAH) -mac -stubs -d $(DEPTH)/lib/mac/Java/_stubs $(JDK_PACKAGE_CLASSES)
+
+# Don't delete them if the don't compile (makes it hard to debug):
+.PRECIOUS: $(JDK_HEADERS) $(JDK_STUBS)
+
+clobber::
+ rm -rf $(JDK_HEADER_CFILES) $(JDK_STUB_CFILES)
+
+endif
+
+################################################################################
+### JRI_GEN -- for generating JRI native methods
+
+# Generate JRI Headers and Stubs into the 'jri' directory
+
+ifneq ($(JRI_GEN),)
+
+ifdef NSBUILDROOT
+JRI_GEN_DIR = $(XPDIST)/_jri
+else
+JRI_GEN_DIR = _jri
+endif
+
+INCLUDES += -I$(JRI_GEN_DIR)
+
+JRI_PACKAGE_CLASSES = $(JRI_GEN)
+JRI_PATH_CLASSES = $(subst .,/,$(JRI_PACKAGE_CLASSES))
+
+## dependency fu
+JRI_HEADER_CLASSFILES = $(patsubst %,$(XPDIST)/classes/%.class,$(JRI_PATH_CLASSES))
+JRI_HEADER_CFILES = $(patsubst %,$(JRI_GEN_DIR)/%.h,$(JRI_GEN))
+$(JRI_HEADER_CFILES): $(JRI_HEADER_CLASSFILES)
+
+## dependency fu
+JRI_STUB_CLASSFILES = $(patsubst %,$(XPDIST)/classes/%.class,$(JRI_PATH_CLASSES))
+JRI_STUB_CFILES = $(patsubst %,$(JRI_GEN_DIR)/%.c,$(JRI_GEN))
+$(JRI_STUB_CFILES): $(JRI_STUB_CLASSFILES)
+
+export::
+ @echo Generating/Updating JRI headers
+ $(JAVAH) -jri -d $(JRI_GEN_DIR) $(JRI_PACKAGE_CLASSES)
+ @echo Generating/Updating JRI stubs
+ $(JAVAH) -jri -stubs -d $(JRI_GEN_DIR) $(JRI_PACKAGE_CLASSES)
+ @if test ! -d $(DEPTH)/lib/mac/Java/; then \
+ echo "!!! You need to have a ns/lib/mac/Java directory checked out."; \
+ echo "!!! This allows us to automatically update generated files for the mac."; \
+ echo "!!! If you see any modified files there, please check them in."; \
+ fi
+ @echo Generating/Updating JRI headers for the Mac
+ $(JAVAH) -jri -mac -d $(DEPTH)/lib/mac/Java/_jri $(JRI_PACKAGE_CLASSES)
+ @echo Generating/Updating JRI stubs for the Mac
+ $(JAVAH) -jri -mac -stubs -d $(DEPTH)/lib/mac/Java/_jri $(JRI_PACKAGE_CLASSES)
+
+# Don't delete them if the don't compile (makes it hard to debug):
+.PRECIOUS: $(JRI_HEADERS) $(JRI_STUBS)
+
+clobber::
+ rm -rf $(JRI_HEADER_CFILES) $(JRI_STUB_CFILES)
+
+endif
+
+################################################################################
+## JMC_EXPORT -- for declaring which java classes are to be exported for jmc
+
+ifneq ($(JMC_EXPORT),)
+
+JMC_EXPORT_PATHS = $(subst .,/,$(JMC_EXPORT))
+JMC_EXPORT_FILES = $(patsubst %,$(XPDIST)/classes/$(PACKAGE)/%.class,$(JMC_EXPORT_PATHS))
+
+# We're doing NSINSTALL -t here (copy mode) because calling INSTALL will pick up
+# your NSDISTMODE and make links relative to the current directory. This is a
+# problem because the source isn't in the current directory:
+
+export:: $(JMC_EXPORT_FILES) $(JMCSRCDIR)
+ $(NSINSTALL) -t -m 444 $(JMC_EXPORT_FILES) $(JMCSRCDIR)
+
+clobber::
+ rm -rf $(JMC_EXPORT_FILES)
+
+endif
+
+
+################################################################################
+## EXPORTS
+#
+# Copy each element of EXPORTS to $(XPDIST)/public/$(MODULE)/
+#
+
+ifneq ($(EXPORTS),)
+
+$(XPDIST)/public/$(MODULE)::
+ @if test ! -d $@; then \
+ echo Creating $@; \
+ rm -rf $@; \
+ mkdir -p $@; \
+ fi
+
+export:: $(EXPORTS) $(XPDIST)/public/$(MODULE)
+ $(NSINSTALL) -t -m 444 $(EXPORTS) $(XPDIST)/public/$(MODULE)
+
+endif
+
+################################################################################
+## JMC_GEN -- for generating java modules
+
+# Provide default export & install rules when using JMC_GEN
+ifneq ($(JMC_GEN),)
+
+ifdef NSBUILDROOT
+JMC_GEN_DIR = $(XPDIST)/_jmc
+else
+JMC_GEN_DIR = _jmc
+endif
+
+INCLUDES += -I$(JMC_GEN_DIR)
+
+JMC_HEADERS = $(patsubst %,$(JMC_GEN_DIR)/%.h,$(JMC_GEN))
+JMC_STUBS = $(patsubst %,$(JMC_GEN_DIR)/%.c,$(JMC_GEN))
+JMC_OBJS = $(patsubst %,$(OBJDIR)/%.o,$(JMC_GEN))
+
+$(JMC_GEN_DIR)/M%.h: $(JMCSRCDIR)/%.class
+ $(JMC) -d $(JMC_GEN_DIR) -interface $(JMC_GEN_FLAGS) $(?F:.class=)
+
+$(JMC_GEN_DIR)/M%.c: $(JMCSRCDIR)/%.class
+ $(JMC) -d $(JMC_GEN_DIR) -module $(JMC_GEN_FLAGS) $(?F:.class=)
+
+$(OBJDIR)/M%.o: $(JMC_GEN_DIR)/M%.h $(JMC_GEN_DIR)/M%.c
+ @$(MAKE_OBJDIR)
+ $(CC) -o $@ -c $(CFLAGS) $(JMC_GEN_DIR)/M$*.c
+
+export:: $(JMC_HEADERS) $(JMC_STUBS)
+
+# Don't delete them if the don't compile (makes it hard to debug):
+.PRECIOUS: $(JMC_HEADERS) $(JMC_STUBS)
+
+clobber::
+ rm -rf $(JMC_HEADERS) $(JMC_STUBS)
+
+endif
+
+################################################################################
+## LIBRARY -- default rules for for building libraries
+
+ifdef LIBRARY
+libs:: $(LIBRARY)
+ $(INSTALL) -m 444 $(LIBRARY) $(DIST)/lib
+
+install:: $(LIBRARY)
+ $(INSTALL) -m 444 $(LIBRARY) $(DIST)/lib
+endif
+
+ifdef SHARED_LIBRARY
+libs:: $(SHARED_LIBRARY)
+ $(INSTALL) -m 555 $(SHARED_LIBRARY) $(DIST)/bin
+
+install:: $(SHARED_LIBRARY)
+ $(INSTALL) -m 555 $(SHARED_LIBRARY) $(DIST)/bin
+endif
+
+################################################################################
+## PROGRAM -- this is now needed because final programs are distributed
+## through dist and link with dynamic libraries
+
+ifdef PROGRAM
+libs:: $(PROGRAM)
+ $(INSTALL) -m 444 $(PROGRAM) $(DIST)/bin
+
+install:: $(PROGRAM)
+ $(INSTALL) -m 444 $(PROGRAM) $(DIST)/bin
+endif
+
+################################################################################
+
+-include $(DEPENDENCIES)
+
+ifneq ($(OS_ARCH),WINNT)
+# Can't use sed because of its 4000-char line length limit, so resort to perl
+.DEFAULT:
+ @perl -e ' \
+ open(MD, "< $(DEPENDENCIES)"); \
+ while (<MD>) { \
+ if (m@ \.*/*$< @) { \
+ $$found = 1; \
+ last; \
+ } \
+ } \
+ if ($$found) { \
+ print "Removing stale dependency $< from $(DEPENDENCIES)\n"; \
+ seek(MD, 0, 0); \
+ $$tmpname = "$(OBJDIR)/fix.md" . $$$$; \
+ open(TMD, "> " . $$tmpname); \
+ while (<MD>) { \
+ s@ \.*/*$< @ @; \
+ if (!print TMD "$$_") { \
+ unlink(($$tmpname)); \
+ exit(1); \
+ } \
+ } \
+ close(TMD); \
+ if (!rename($$tmpname, "$(DEPENDENCIES)")) { \
+ unlink(($$tmpname)); \
+ } \
+ } elsif ("$<" ne "$(DEPENDENCIES)") { \
+ print "$(MAKE): *** No rule to make target $<. Stop.\n"; \
+ exit(1); \
+ }'
+endif
+
+#############################################################################
+# X dependency system
+#############################################################################
+
+ifneq ($(OS_ARCH),WINNT)
+
+$(MKDEPENDENCIES)::
+ @$(MAKE_OBJDIR)
+ touch $(MKDEPENDENCIES)
+ $(MKDEPEND) -p$(OBJDIR_NAME)/ -o'.o' -f$(MKDEPENDENCIES) $(INCLUDES) $(CSRCS) $(CPPSRCS)
+
+$(MKDEPEND)::
+ cd $(MKDEPEND_DIR); $(MAKE)
+
+ifdef OBJS
+depend:: $(MKDEPEND) $(MKDEPENDENCIES)
+else
+depend::
+endif
+ +$(LOOP_OVER_DIRS)
+
+dependclean::
+ rm -f $(MKDEPENDENCIES)
+ +$(LOOP_OVER_DIRS)
+
+#-include $(OBJDIR)/depend.mk
+
+endif
+
+#############################################################################
+
+-include $(MY_RULES)
+
+$(MY_CONFIG):
+$(MY_RULES):
+
+# Generate Emacs tags in a file named TAGS if ETAGS was set in $(MY_CONFIG)
+# or in $(MY_RULES)
+ifdef ETAGS
+ifneq ($(CSRCS)$(HEADERS),)
+all:: TAGS
+TAGS:: $(CSRCS) $(HEADERS)
+ $(ETAGS) $(CSRCS) $(HEADERS)
+endif
+endif
+
+################################################################################
+# Special gmake rules.
+################################################################################
+
+#
+# Re-define the list of default suffixes, so gmake won't have to churn through
+# hundreds of built-in suffix rules for stuff we don't need.
+#
+.SUFFIXES:
+.SUFFIXES: .out .a .ln .o .c .cc .C .cpp .y .l .s .S .h .sh .i .pl .class .java .html
+
+#
+# Don't delete these files if we get killed.
+#
+.PRECIOUS: .java $(JDK_HEADERS) $(JDK_STUBS) $(JRI_HEADERS) $(JRI_STUBS) $(JMC_HEADERS) $(JMC_STUBS)
+
+#
+# Fake targets. Always run these rules, even if a file/directory with that
+# name already exists.
+#
+.PHONY: all all_platforms alltags boot clean clobber clobber_all export install libs realclean $(OBJDIR) $(DIRS)