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