1# 2# This Source Code Form is subject to the terms of the Mozilla Public 3# License, v. 2.0. If a copy of the MPL was not distributed with this 4# file, You can obtain one at http://mozilla.org/MPL/2.0/. 5 6 7#! gmake 8 9MOD_DEPTH = ../.. 10topsrcdir = @top_srcdir@ 11srcdir = @srcdir@ 12VPATH = @srcdir@ 13 14include $(MOD_DEPTH)/config/autoconf.mk 15 16include $(topsrcdir)/config/config.mk 17 18DIRS = dll 19 20CSRCS = \ 21 abstract.c \ 22 accept.c \ 23 acceptread.c \ 24 acceptreademu.c \ 25 addrstr.c \ 26 affinity.c \ 27 alarm.c \ 28 anonfm.c \ 29 append.c \ 30 atomic.c \ 31 attach.c \ 32 bigfile.c \ 33 bigfile2.c \ 34 bigfile3.c \ 35 cleanup.c \ 36 cltsrv.c \ 37 concur.c \ 38 cvar.c \ 39 cvar2.c \ 40 dceemu.c \ 41 dlltest.c \ 42 dtoa.c \ 43 env.c \ 44 errcodes.c \ 45 errset.c \ 46 exit.c \ 47 fdcach.c \ 48 fileio.c \ 49 foreign.c \ 50 forktest.c \ 51 formattm.c \ 52 fsync.c \ 53 getai.c \ 54 gethost.c \ 55 getproto.c \ 56 i2l.c \ 57 initclk.c \ 58 inrval.c \ 59 instrumt.c \ 60 intrio.c \ 61 intrupt.c \ 62 io_timeout.c \ 63 ioconthr.c \ 64 ipv6.c \ 65 join.c \ 66 joinkk.c \ 67 joinku.c \ 68 joinuk.c \ 69 joinuu.c \ 70 layer.c \ 71 lazyinit.c \ 72 libfilename.c \ 73 lltest.c \ 74 lock.c \ 75 lockfile.c \ 76 logfile.c \ 77 logger.c \ 78 makedir.c \ 79 mbcs.c \ 80 multiacc.c \ 81 multiwait.c \ 82 many_cv.c \ 83 monref.c \ 84 nameshm1.c \ 85 nbconn.c \ 86 nblayer.c \ 87 nonblock.c \ 88 ntioto.c \ 89 ntoh.c \ 90 obsints.c \ 91 op_2long.c \ 92 op_excl.c \ 93 op_filnf.c \ 94 op_filok.c \ 95 op_noacc.c \ 96 op_nofil.c \ 97 openfile.c \ 98 parent.c \ 99 parsetm.c \ 100 peek.c \ 101 perf.c \ 102 pipeping.c \ 103 pipeping2.c \ 104 pipepong.c \ 105 pipepong2.c \ 106 pipeself.c \ 107 poll_er.c \ 108 poll_nm.c \ 109 poll_to.c \ 110 pollable.c \ 111 prfdbl.c \ 112 prftest.c \ 113 prftest1.c \ 114 prftest2.c \ 115 prfz.c \ 116 primblok.c \ 117 priotest.c \ 118 provider.c \ 119 prpoll.c \ 120 prpollml.c \ 121 pushtop.c \ 122 ranfile.c \ 123 randseed.c \ 124 reinit.c \ 125 rmdir.c \ 126 rwlockrank.c \ 127 rwlocktest.c \ 128 sel_spd.c \ 129 selct_er.c \ 130 selct_nm.c \ 131 selct_to.c \ 132 select2.c \ 133 selintr.c \ 134 sem.c \ 135 sema.c \ 136 semaerr.c \ 137 semaerr1.c \ 138 semaping.c \ 139 semapong.c \ 140 sendzlf.c \ 141 server_test.c \ 142 servr_kk.c \ 143 servr_ku.c \ 144 servr_uk.c \ 145 servr_uu.c \ 146 short_thread.c \ 147 sigpipe.c \ 148 socket.c \ 149 sockopt.c \ 150 sockping.c \ 151 sockpong.c \ 152 sprintf.c \ 153 stack.c \ 154 stdio.c \ 155 str2addr.c \ 156 strod.c \ 157 suspend.c \ 158 switch.c \ 159 system.c \ 160 testbit.c \ 161 testfile.c \ 162 thrpool_server.c \ 163 thrpool_client.c \ 164 threads.c \ 165 thruput.c \ 166 timemac.c \ 167 timetest.c \ 168 tmoacc.c \ 169 tmocon.c \ 170 tpd.c \ 171 vercheck.c \ 172 version.c \ 173 udpsrv.c \ 174 writev.c \ 175 xnotify.c \ 176 y2k.c \ 177 y2ktmo.c \ 178 zerolen.c \ 179 $(NULL) 180 181ifeq ($(OS_ARCH),WINCE) 182CFLAGS += -FImozce_shunt.h -Zi -UDEBUG -DNDEBUG 183LDOPTS += -link $(DIST)/lib/mozce_shunt.lib ws2.lib -DEBUG -DEBUGTYPE:CV -INCREMENTAL:NO -PDB:$(@:.exe=.pdb) 184endif 185 186ifeq ($(OS_TARGET),OS2) 187CSRCS += \ 188 sleep.c \ 189 stat.c \ 190 yield.c \ 191 $(NULL) 192endif 193 194ifeq (,$(filter-out WINCE WINNT OS2,$(OS_ARCH))) 195PROG_SUFFIX = .exe 196DLL_SUFFIX = .dll 197else 198PROG_SUFFIX = 199DLL_SUFFIX = 200endif 201 202PROGS = $(addprefix $(OBJDIR)/, $(CSRCS:.c=$(PROG_SUFFIX))) 203 204TARGETS = $(PROGS) 205 206INCLUDES = -I$(dist_includedir) -I$(topsrcdir)/pr/include -I$(topsrcdir)/pr/include/private 207 208ifeq ($(OS_ARCH), WINNT) 209ifdef NS_USE_GCC 210 EXTRA_LIBS += -lws2_32 211else 212 EXTRA_LIBS += ws2_32.lib 213 LDOPTS = -NOLOGO -DEBUG -DEBUGTYPE:CV -INCREMENTAL:NO 214 CFLAGS += -Fd$(@:.$(OBJ_SUFFIX)=.pdb) 215 ifdef PROFILE 216 LDOPTS += -PROFILE -MAP 217 endif # profile 218endif # NS_USE_GCC 219endif 220 221ifeq ($(OS_ARCH),OS2) 222EXTRA_LIBS = $(OS_LIBS) 223LDOPTS = -Zomf -Zlinker /PM:VIO -Zlinker /ST:0x64000 224endif 225 226ifneq ($(OS_ARCH), WINNT) 227# Use an absolute pathname as the runtime library path (for the -R 228# or -rpath linker option or the LD_RUN_PATH environment variable). 229ifeq (,$(patsubst /%,,$(DIST))) 230# $(DIST) is already an absolute pathname. 231ABSOLUTE_LIB_DIR = $(dist_libdir) 232else 233# $(DIST) is a relative pathname: prepend the current directory. 234PWD = $(shell pwd) 235ABSOLUTE_LIB_DIR = $(PWD)/$(dist_libdir) 236endif 237endif 238 239ifeq ($(OS_ARCH), HP-UX) 240 LDOPTS += -z -Wl,+s,+b,$(ABSOLUTE_LIB_DIR) 241 ifeq ($(USE_64),1) 242 LDOPTS += +DD64 243 endif 244 ifeq ($(USE_PTHREADS),1) 245 EXTRA_LIBS = $(LIBPTHREAD) 246 endif 247endif 248 249# AIX 250ifeq ($(OS_ARCH),AIX) 251 LDOPTS += -blibpath:$(ABSOLUTE_LIB_DIR):/usr/lib:/lib 252 ifneq ($(OS_ARCH)$(OS_RELEASE),AIX4.1) 253 LDOPTS += -brtl 254 EXTRA_LIBS = -ldl 255 endif 256endif 257 258# Solaris 259ifeq ($(OS_ARCH), SunOS) 260 ifdef NS_USE_GCC 261 LDOPTS += -Xlinker -R -Xlinker $(ABSOLUTE_LIB_DIR) 262 else 263 ifeq ($(USE_CPLUS), 1) 264 CC = CC 265 endif 266 LDOPTS += -R $(ABSOLUTE_LIB_DIR) 267 endif 268 269 ifdef USE_PTHREADS 270 EXTRA_LIBS = -lpthread 271 endif 272endif # SunOS 273 274ifeq (,$(filter-out Linux GNU GNU_%,$(OS_ARCH))) 275 LDOPTS += -Xlinker -rpath $(ABSOLUTE_LIB_DIR) 276 ifeq ($(USE_PTHREADS),1) 277 EXTRA_LIBS = -lpthread 278 endif 279endif 280 281ifeq ($(OS_ARCH), SCOOS) 282# SCO Unix needs to link against -lsocket again even though we 283# already linked with these system libraries when we built libnspr.so. 284EXTRA_LIBS = -lsocket 285# This hardcodes in the executable programs the directory to find 286# libnspr.so etc. at program startup. Equivalent to the -R or -rpath 287# option for ld on other platforms. 288export LD_RUN_PATH = $(ABSOLUTE_LIB_DIR) 289endif 290 291ifeq ($(OS_ARCH),OpenUNIX) 292export LD_RUN_PATH = $(ABSOLUTE_LIB_DIR) 293ifeq ($(USE_PTHREADS),1) 294LDOPTS += -pthread 295endif 296endif 297 298ifeq ($(OS_ARCH), UNIXWARE) 299export LD_RUN_PATH = $(ABSOLUTE_LIB_DIR) 300endif 301 302ifeq ($(OS_ARCH),FreeBSD) 303ifeq ($(USE_PTHREADS),1) 304LDOPTS += -pthread 305endif 306LDOPTS += -Xlinker -R $(ABSOLUTE_LIB_DIR) 307endif 308 309ifeq ($(OS_ARCH),OpenBSD) 310ifeq ($(USE_PTHREADS),1) 311LDOPTS += -pthread 312endif 313endif 314 315ifeq ($(OS_ARCH),BSD_OS) 316ifneq ($(OS_RELEASE),1.1) 317EXTRA_LIBS = -ldl 318endif 319endif 320 321ifeq ($(OS_ARCH),RISCOS) 322EXTRA_LIBS = -ldl 323endif 324 325ifeq ($(USE_PTHREADS),1) 326LIBPTHREAD = -lpthread 327ifeq ($(OS_ARCH),AIX) 328LIBPTHREAD = -lpthreads 329endif 330ifeq (,$(filter-out FreeBSD OpenBSD BSD_OS QNX Darwin OpenUNIX,$(OS_ARCH))) 331LIBPTHREAD = 332endif 333endif 334 335ifeq ($(OS_TARGET),Android) 336LIBPTHREAD = 337XCFLAGS = $(OS_CFLAGS) 338endif 339 340##################################################### 341# 342# The rules 343# 344##################################################### 345 346include $(topsrcdir)/config/rules.mk 347 348AIX_PRE_4_2 = 0 349ifeq ($(OS_ARCH),AIX) 350ifeq ($(OS_RELEASE),4.1) 351ifneq ($(USE_PTHREADS), 1) 352#AIX_PRE_4_2 = 1 353endif 354endif 355endif 356 357ifeq ($(AIX_PRE_4_2),1) 358 359# AIX releases prior to 4.2 need a special two-step linking hack 360# in order to both override the system select() and be able to 361# get at the original system select(). 362# 363# We use a pattern rule in ns/nspr20/config/rules.mk to generate 364# the .$(OBJ_SUFFIX) file from the .c source file, then do the 365# two-step linking hack below. 366 367$(OBJDIR)/%: $(OBJDIR)/%.$(OBJ_SUFFIX) 368 @$(MAKE_OBJDIR) 369 rm -f $@ $(AIX_TMP) 370 $(CC) $(AIX_LINK_OPTS) -o $(AIX_TMP) $< $(dist_libdir)/libnspr$(MOD_MAJOR_VERSION).a 371 $(CC) -o $@ $(AIX_TMP) $(AIX_WRAP) 372 rm -f $(AIX_TMP) 373 374else 375 376# All platforms that are not AIX pre-4.2. 377 378$(OBJDIR)/%$(PROG_SUFFIX): $(OBJDIR)/%.$(OBJ_SUFFIX) 379 @$(MAKE_OBJDIR) 380ifeq ($(NS_USE_GCC)_$(OS_ARCH),_WINNT) 381 link $(LDOPTS) $(EXTRA_LDOPTS) $< $(LIBPLC) $(LIBNSPR) $(EXTRA_LIBS) -out:$@ 382ifdef MT 383 @if test -f $@.manifest; then \ 384 $(MT) -NOLOGO -MANIFEST $@.manifest -OUTPUTRESOURCE:$@\;1; \ 385 rm -f $@.manifest; \ 386 fi 387endif 388else 389 $(PURE) $(CC) $(XCFLAGS) $< $(LDOPTS) $(LIBPLC) $(LIBNSPR) $(EXTRA_LIBS) -o $@ 390endif # WINNT 391endif # AIX_PRE_4_2 392 393export:: $(TARGETS) 394clean:: 395 rm -f $(TARGETS) 396 397# The following tests call BSD socket functions, so they need to link 398# with -lsocket on some platforms. 399ifeq ($(OS_ARCH),SunOS) 400ifeq ($(USE_IPV6),1) 401$(OBJDIR)/gethost: $(OBJDIR)/gethost.o 402 $(PURE) $(CC) $(XCFLAGS) $< $(LDOPTS) $(LIBPLC) $(LIBNSPR) -lsocket $(EXTRA_LIBS) -o $@ 403endif 404$(OBJDIR)/prpoll: $(OBJDIR)/prpoll.o 405 $(PURE) $(CC) $(XCFLAGS) $< $(LDOPTS) $(LIBPLC) $(LIBNSPR) -lsocket $(EXTRA_LIBS) -o $@ 406endif 407 408ifeq ($(USE_PTHREADS), 1) 409$(OBJDIR)/attach: $(OBJDIR)/attach.o 410 $(PURE) $(CC) $(XCFLAGS) $< $(LDOPTS) $(LIBPLC) $(LIBNSPR) $(LIBPTHREAD) $(EXTRA_LIBS) -o $@ 411$(OBJDIR)/foreign: $(OBJDIR)/foreign.o 412 $(PURE) $(CC) $(XCFLAGS) $< $(LDOPTS) $(LIBPLC) $(LIBNSPR) $(LIBPTHREAD) $(EXTRA_LIBS) -o $@ 413$(OBJDIR)/provider: $(OBJDIR)/provider.o 414 $(PURE) $(CC) $(XCFLAGS) $< $(LDOPTS) $(LIBPLC) $(LIBNSPR) $(LIBPTHREAD) $(EXTRA_LIBS) -o $@ 415$(OBJDIR)/socket: $(OBJDIR)/socket.o 416 $(PURE) $(CC) $(XCFLAGS) $< $(LDOPTS) $(LIBPLC) $(LIBNSPR) $(LIBPTHREAD) $(EXTRA_LIBS) -o $@ 417$(OBJDIR)/testfile: $(OBJDIR)/testfile.o 418 $(PURE) $(CC) $(XCFLAGS) $< $(LDOPTS) $(LIBPLC) $(LIBNSPR) $(LIBPTHREAD) $(EXTRA_LIBS) -o $@ 419endif 420 421# 422# Run the test programs with no arguments 423# 424# Test output goes to the file pointed to by the environment variable 425# NSPR_TEST_LOGFILE, if set, else to /dev/null 426# 427ECHO = echo 428PROGRAMS = $(notdir $(PROGS)) 429ifdef NSPR_TEST_LOGFILE 430LOGFILE = $(NSPR_TEST_LOGFILE) 431else 432ifeq (,$(filter-out WINNT OS2,$(OS_ARCH))) 433LOGFILE = nul 434else 435LOGFILE = /dev/null 436endif 437endif 438 439ifeq ($(OS_TARGET),Linux) 440ECHO = /bin/echo 441endif 442 443ALWAYS: 444 445runtests:: $(PROGS) ALWAYS 446 $(topsrcdir)/pr/tests/runtests.sh $(DIST) 447