# # 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 \ 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 \ prftest.c \ prftest1.c \ prftest2.c \ primblok.c \ priotest.c \ provider.c \ prpoll.c \ prpollml.c \ pushtop.c \ ranfile.c \ randseed.c \ reinit.c \ rmdir.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 += -lwsock32 else EXTRA_LIBS += wsock32.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"