| # |
| # This Source Code Form is subject to the terms of the Mozilla Public |
| # License, v. 2.0. If a copy of the MPL was not distributed with this |
| # file, You can obtain one at http://mozilla.org/MPL/2.0/. |
| |
| |
| #! gmake |
| |
| MOD_DEPTH = ../.. |
| topsrcdir = @top_srcdir@ |
| srcdir = @srcdir@ |
| VPATH = @srcdir@ |
| |
| include $(MOD_DEPTH)/config/autoconf.mk |
| |
| include $(topsrcdir)/config/config.mk |
| |
| DIRS = dll |
| |
| CSRCS = \ |
| accept.c \ |
| acceptread.c \ |
| acceptreademu.c \ |
| addrstr.c \ |
| affinity.c \ |
| alarm.c \ |
| anonfm.c \ |
| append.c \ |
| atomic.c \ |
| attach.c \ |
| bigfile.c \ |
| bigfile2.c \ |
| bigfile3.c \ |
| cleanup.c \ |
| cltsrv.c \ |
| concur.c \ |
| cvar.c \ |
| cvar2.c \ |
| dceemu.c \ |
| dlltest.c \ |
| dtoa.c \ |
| env.c \ |
| errcodes.c \ |
| errset.c \ |
| exit.c \ |
| fdcach.c \ |
| fileio.c \ |
| foreign.c \ |
| forktest.c \ |
| formattm.c \ |
| fsync.c \ |
| getai.c \ |
| gethost.c \ |
| getproto.c \ |
| i2l.c \ |
| initclk.c \ |
| inrval.c \ |
| instrumt.c \ |
| intrio.c \ |
| intrupt.c \ |
| io_timeout.c \ |
| ioconthr.c \ |
| ipv6.c \ |
| join.c \ |
| joinkk.c \ |
| joinku.c \ |
| joinuk.c \ |
| joinuu.c \ |
| layer.c \ |
| lazyinit.c \ |
| libfilename.c \ |
| lltest.c \ |
| lock.c \ |
| lockfile.c \ |
| logfile.c \ |
| logger.c \ |
| makedir.c \ |
| mbcs.c \ |
| multiacc.c \ |
| multiwait.c \ |
| many_cv.c \ |
| monref.c \ |
| nameshm1.c \ |
| nbconn.c \ |
| nblayer.c \ |
| nonblock.c \ |
| ntioto.c \ |
| ntoh.c \ |
| obsints.c \ |
| op_2long.c \ |
| op_excl.c \ |
| op_filnf.c \ |
| op_filok.c \ |
| op_noacc.c \ |
| op_nofil.c \ |
| openfile.c \ |
| parent.c \ |
| parsetm.c \ |
| peek.c \ |
| perf.c \ |
| pipeping.c \ |
| pipeping2.c \ |
| pipepong.c \ |
| pipepong2.c \ |
| pipeself.c \ |
| poll_er.c \ |
| poll_nm.c \ |
| poll_to.c \ |
| pollable.c \ |
| prfdbl.c \ |
| prftest.c \ |
| prftest1.c \ |
| prftest2.c \ |
| prfz.c \ |
| primblok.c \ |
| priotest.c \ |
| provider.c \ |
| prpoll.c \ |
| prpollml.c \ |
| pushtop.c \ |
| ranfile.c \ |
| randseed.c \ |
| reinit.c \ |
| rmdir.c \ |
| rwlockrank.c \ |
| rwlocktest.c \ |
| sel_spd.c \ |
| selct_er.c \ |
| selct_nm.c \ |
| selct_to.c \ |
| select2.c \ |
| selintr.c \ |
| sem.c \ |
| sema.c \ |
| semaerr.c \ |
| semaerr1.c \ |
| semaping.c \ |
| semapong.c \ |
| sendzlf.c \ |
| server_test.c \ |
| servr_kk.c \ |
| servr_ku.c \ |
| servr_uk.c \ |
| servr_uu.c \ |
| short_thread.c \ |
| sigpipe.c \ |
| socket.c \ |
| sockopt.c \ |
| sockping.c \ |
| sockpong.c \ |
| sprintf.c \ |
| sproc_ch.c \ |
| sproc_p.c \ |
| stack.c \ |
| stdio.c \ |
| str2addr.c \ |
| strod.c \ |
| suspend.c \ |
| switch.c \ |
| system.c \ |
| testbit.c \ |
| testfile.c \ |
| thrpool_server.c \ |
| thrpool_client.c \ |
| threads.c \ |
| thruput.c \ |
| timemac.c \ |
| timetest.c \ |
| tmoacc.c \ |
| tmocon.c \ |
| tpd.c \ |
| vercheck.c \ |
| version.c \ |
| udpsrv.c \ |
| writev.c \ |
| xnotify.c \ |
| y2k.c \ |
| y2ktmo.c \ |
| zerolen.c \ |
| $(NULL) |
| |
| ifeq ($(OS_ARCH),WINCE) |
| CFLAGS += -FImozce_shunt.h -Zi -UDEBUG -DNDEBUG |
| LDOPTS += -link $(DIST)/lib/mozce_shunt.lib ws2.lib -DEBUG -DEBUGTYPE:CV -INCREMENTAL:NO -PDB:$(@:.exe=.pdb) |
| endif |
| |
| ifeq ($(OS_TARGET),OS2) |
| CSRCS += \ |
| sleep.c \ |
| stat.c \ |
| yield.c \ |
| $(NULL) |
| endif |
| |
| ifeq (,$(filter-out WINCE WINNT OS2,$(OS_ARCH))) |
| PROG_SUFFIX = .exe |
| DLL_SUFFIX = .dll |
| else |
| PROG_SUFFIX = |
| DLL_SUFFIX = |
| endif |
| |
| PROGS = $(addprefix $(OBJDIR)/, $(CSRCS:.c=$(PROG_SUFFIX))) |
| |
| TARGETS = $(PROGS) |
| |
| INCLUDES = -I$(dist_includedir) -I$(topsrcdir)/pr/include -I$(topsrcdir)/pr/include/private |
| |
| ifeq ($(OS_ARCH), WINNT) |
| ifdef NS_USE_GCC |
| EXTRA_LIBS += -lws2_32 |
| else |
| EXTRA_LIBS += ws2_32.lib |
| LDOPTS = -NOLOGO -DEBUG -DEBUGTYPE:CV -INCREMENTAL:NO |
| ifdef PROFILE |
| LDOPTS += -PROFILE -MAP |
| endif # profile |
| endif # NS_USE_GCC |
| endif |
| |
| ifeq ($(OS_ARCH),OS2) |
| EXTRA_LIBS = $(OS_LIBS) |
| LDOPTS = -Zomf -Zlinker /PM:VIO -Zlinker /ST:0x64000 |
| endif |
| |
| ifneq ($(OS_ARCH), WINNT) |
| # Use an absolute pathname as the runtime library path (for the -R |
| # or -rpath linker option or the LD_RUN_PATH environment variable). |
| ifeq (,$(patsubst /%,,$(DIST))) |
| # $(DIST) is already an absolute pathname. |
| ABSOLUTE_LIB_DIR = $(dist_libdir) |
| else |
| # $(DIST) is a relative pathname: prepend the current directory. |
| PWD = $(shell pwd) |
| ABSOLUTE_LIB_DIR = $(PWD)/$(dist_libdir) |
| endif |
| endif |
| |
| ifeq ($(OS_ARCH), IRIX) |
| ifeq ($(USE_CPLUS), 1) |
| CC = CC |
| endif |
| LDOPTS += -rpath $(ABSOLUTE_LIB_DIR) |
| ifdef NS_USE_GCC |
| LDOPTS += -Wl,-rdata_shared |
| else |
| LDOPTS += -rdata_shared |
| endif |
| # For 6.x machines, include this flag |
| ifeq ($(basename $(OS_RELEASE)),6) |
| ifndef NS_USE_GCC |
| ifeq ($(USE_N32),1) |
| LDOPTS += -n32 |
| else |
| LDOPTS += -32 |
| endif |
| |
| ifeq ($(USE_PTHREADS), 1) |
| ifeq ($(OS_RELEASE), 6.2) |
| LDOPTS += -Wl,-woff,85 |
| endif |
| endif |
| endif |
| endif |
| endif |
| |
| ifeq ($(OS_ARCH), OSF1) |
| ifeq ($(USE_CPLUS), 1) |
| CC = cxx |
| endif |
| # I haven't figured out how to pass -rpath to cc on OSF1 V3.2, so |
| # we do static linking. |
| ifeq (,$(filter-out V2.0 V3.2,$(OS_RELEASE))) |
| LIBNSPR = $(dist_libdir)/libnspr$(MOD_MAJOR_VERSION).a |
| LIBPLC = $(dist_libdir)/libplc$(MOD_MAJOR_VERSION).a |
| EXTRA_LIBS = -lc_r |
| else |
| LDOPTS += -rpath $(ABSOLUTE_LIB_DIR) |
| endif |
| endif |
| |
| ifeq ($(OS_ARCH), HP-UX) |
| LDOPTS += -z -Wl,+s,+b,$(ABSOLUTE_LIB_DIR) |
| ifeq ($(USE_64),1) |
| LDOPTS += +DD64 |
| endif |
| ifeq ($(USE_PTHREADS),1) |
| EXTRA_LIBS = $(LIBPTHREAD) |
| endif |
| endif |
| |
| # AIX |
| ifeq ($(OS_ARCH),AIX) |
| LDOPTS += -blibpath:$(ABSOLUTE_LIB_DIR):/usr/lib:/lib |
| ifneq ($(OS_ARCH)$(OS_RELEASE),AIX4.1) |
| LDOPTS += -brtl |
| EXTRA_LIBS = -ldl |
| endif |
| endif |
| |
| # Solaris |
| ifeq ($(OS_ARCH), SunOS) |
| ifdef NS_USE_GCC |
| LDOPTS += -Xlinker -R -Xlinker $(ABSOLUTE_LIB_DIR) |
| else |
| ifeq ($(USE_CPLUS), 1) |
| CC = CC |
| endif |
| LDOPTS += -R $(ABSOLUTE_LIB_DIR) |
| endif |
| |
| ifdef USE_PTHREADS |
| EXTRA_LIBS = -lpthread |
| endif |
| endif # SunOS |
| |
| ifeq (,$(filter-out Linux GNU GNU_%,$(OS_ARCH))) |
| LDOPTS += -Xlinker -rpath $(ABSOLUTE_LIB_DIR) |
| ifeq ($(USE_PTHREADS),1) |
| EXTRA_LIBS = -lpthread |
| endif |
| endif |
| |
| ifeq ($(OS_ARCH), SCOOS) |
| # SCO Unix needs to link against -lsocket again even though we |
| # already linked with these system libraries when we built libnspr.so. |
| EXTRA_LIBS = -lsocket |
| # This hardcodes in the executable programs the directory to find |
| # libnspr.so etc. at program startup. Equivalent to the -R or -rpath |
| # option for ld on other platforms. |
| export LD_RUN_PATH = $(ABSOLUTE_LIB_DIR) |
| endif |
| |
| ifeq ($(OS_ARCH),OpenUNIX) |
| export LD_RUN_PATH = $(ABSOLUTE_LIB_DIR) |
| ifeq ($(USE_PTHREADS),1) |
| LDOPTS += -pthread |
| endif |
| endif |
| |
| ifeq ($(OS_ARCH), UNIXWARE) |
| export LD_RUN_PATH = $(ABSOLUTE_LIB_DIR) |
| endif |
| |
| ifeq ($(OS_ARCH),FreeBSD) |
| ifeq ($(USE_PTHREADS),1) |
| LDOPTS += -pthread |
| endif |
| LDOPTS += -Xlinker -R $(ABSOLUTE_LIB_DIR) |
| endif |
| |
| ifeq ($(OS_ARCH),OpenBSD) |
| ifeq ($(USE_PTHREADS),1) |
| LDOPTS += -pthread |
| endif |
| endif |
| |
| ifeq ($(OS_ARCH),BSD_OS) |
| ifneq ($(OS_RELEASE),1.1) |
| EXTRA_LIBS = -ldl |
| endif |
| endif |
| |
| ifeq ($(OS_ARCH),RISCOS) |
| EXTRA_LIBS = -ldl |
| endif |
| |
| ifeq ($(USE_PTHREADS),1) |
| LIBPTHREAD = -lpthread |
| ifeq ($(OS_ARCH),AIX) |
| LIBPTHREAD = -lpthreads |
| endif |
| ifeq (,$(filter-out FreeBSD OpenBSD BSD_OS QNX Darwin OpenUNIX,$(OS_ARCH))) |
| LIBPTHREAD = |
| endif |
| ifeq ($(OS_ARCH)$(basename $(OS_RELEASE)),HP-UXB.10) |
| LIBPTHREAD = -ldce |
| endif |
| endif |
| |
| ifeq ($(OS_TARGET),Android) |
| LIBPTHREAD = |
| XCFLAGS = $(OS_CFLAGS) |
| endif |
| |
| ##################################################### |
| # |
| # The rules |
| # |
| ##################################################### |
| |
| include $(topsrcdir)/config/rules.mk |
| |
| AIX_PRE_4_2 = 0 |
| ifeq ($(OS_ARCH),AIX) |
| ifeq ($(OS_RELEASE),4.1) |
| ifneq ($(USE_PTHREADS), 1) |
| #AIX_PRE_4_2 = 1 |
| endif |
| endif |
| endif |
| |
| ifeq ($(AIX_PRE_4_2),1) |
| |
| # AIX releases prior to 4.2 need a special two-step linking hack |
| # in order to both override the system select() and be able to |
| # get at the original system select(). |
| # |
| # We use a pattern rule in ns/nspr20/config/rules.mk to generate |
| # the .$(OBJ_SUFFIX) file from the .c source file, then do the |
| # two-step linking hack below. |
| |
| $(OBJDIR)/%: $(OBJDIR)/%.$(OBJ_SUFFIX) |
| @$(MAKE_OBJDIR) |
| rm -f $@ $(AIX_TMP) |
| $(CC) $(AIX_LINK_OPTS) -o $(AIX_TMP) $< $(dist_libdir)/libnspr$(MOD_MAJOR_VERSION).a |
| $(CC) -o $@ $(AIX_TMP) $(AIX_WRAP) |
| rm -f $(AIX_TMP) |
| |
| else |
| |
| # All platforms that are not AIX pre-4.2. |
| |
| $(OBJDIR)/%$(PROG_SUFFIX): $(OBJDIR)/%.$(OBJ_SUFFIX) |
| @$(MAKE_OBJDIR) |
| ifeq ($(NS_USE_GCC)_$(OS_ARCH),_WINNT) |
| link $(LDOPTS) $(EXTRA_LDOPTS) $< $(LIBPLC) $(LIBNSPR) $(EXTRA_LIBS) -out:$@ |
| ifdef MT |
| @if test -f $@.manifest; then \ |
| $(MT) -NOLOGO -MANIFEST $@.manifest -OUTPUTRESOURCE:$@\;1; \ |
| rm -f $@.manifest; \ |
| fi |
| endif |
| else |
| $(PURE) $(CC) $(XCFLAGS) $< $(LDOPTS) $(LIBPLC) $(LIBNSPR) $(EXTRA_LIBS) -o $@ |
| endif # WINNT |
| endif # AIX_PRE_4_2 |
| |
| export:: $(TARGETS) |
| clean:: |
| rm -f $(TARGETS) |
| |
| # The following tests call BSD socket functions, so they need to link |
| # with -lsocket on some platforms. |
| ifeq ($(OS_ARCH),SunOS) |
| ifeq ($(USE_IPV6),1) |
| $(OBJDIR)/gethost: $(OBJDIR)/gethost.o |
| $(PURE) $(CC) $(XCFLAGS) $< $(LDOPTS) $(LIBPLC) $(LIBNSPR) -lsocket $(EXTRA_LIBS) -o $@ |
| endif |
| $(OBJDIR)/prpoll: $(OBJDIR)/prpoll.o |
| $(PURE) $(CC) $(XCFLAGS) $< $(LDOPTS) $(LIBPLC) $(LIBNSPR) -lsocket $(EXTRA_LIBS) -o $@ |
| endif |
| |
| ifeq ($(USE_PTHREADS), 1) |
| $(OBJDIR)/attach: $(OBJDIR)/attach.o |
| $(PURE) $(CC) $(XCFLAGS) $< $(LDOPTS) $(LIBPLC) $(LIBNSPR) $(LIBPTHREAD) $(EXTRA_LIBS) -o $@ |
| $(OBJDIR)/foreign: $(OBJDIR)/foreign.o |
| $(PURE) $(CC) $(XCFLAGS) $< $(LDOPTS) $(LIBPLC) $(LIBNSPR) $(LIBPTHREAD) $(EXTRA_LIBS) -o $@ |
| $(OBJDIR)/provider: $(OBJDIR)/provider.o |
| $(PURE) $(CC) $(XCFLAGS) $< $(LDOPTS) $(LIBPLC) $(LIBNSPR) $(LIBPTHREAD) $(EXTRA_LIBS) -o $@ |
| $(OBJDIR)/socket: $(OBJDIR)/socket.o |
| $(PURE) $(CC) $(XCFLAGS) $< $(LDOPTS) $(LIBPLC) $(LIBNSPR) $(LIBPTHREAD) $(EXTRA_LIBS) -o $@ |
| $(OBJDIR)/testfile: $(OBJDIR)/testfile.o |
| $(PURE) $(CC) $(XCFLAGS) $< $(LDOPTS) $(LIBPLC) $(LIBNSPR) $(LIBPTHREAD) $(EXTRA_LIBS) -o $@ |
| endif |
| |
| # |
| # Run the test programs with no arguments |
| # |
| # Test output goes to the file pointed to by the environment variable |
| # NSPR_TEST_LOGFILE, if set, else to /dev/null |
| # |
| ECHO = echo |
| PROGRAMS = $(notdir $(PROGS)) |
| ifdef NSPR_TEST_LOGFILE |
| LOGFILE = $(NSPR_TEST_LOGFILE) |
| else |
| ifeq (,$(filter-out WINNT OS2,$(OS_ARCH))) |
| LOGFILE = nul |
| else |
| LOGFILE = /dev/null |
| endif |
| endif |
| |
| ifeq ($(OS_TARGET),Linux) |
| ECHO = /bin/echo |
| endif |
| |
| ALWAYS: |
| |
| runtests:: $(PROGS) ALWAYS |
| @$(ECHO) "\nNSPR Test Results - $(OBJDIR)\n" |
| @$(ECHO) "BEGIN\t\t\t`date`" |
| @$(ECHO) "NSPR_TEST_LOGFILE\t$(LOGFILE)\n" |
| @$(ECHO) "Test\t\t\tResult\n" |
| @cd $(OBJDIR); for i in $(PROGRAMS); do \ |
| $(ECHO) "$$i\c"; \ |
| ./$$i >> $(LOGFILE) 2>&1 ; \ |
| if [ 0 = $$? ] ; then \ |
| $(ECHO) "\t\t\tPassed"; \ |
| else \ |
| $(ECHO) "\t\t\tFAILED"; \ |
| fi; \ |
| done |
| @$(ECHO) "\nEND\t\t`date`\n" |