# 
# 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

CSRCS = \
	pralarm.c  \
	pratom.c   \
	prcountr.c \
	prdtoa.c   \
	prenv.c    \
	prerr.c  \
	prerror.c  \
	prerrortable.c  \
	prinit.c   \
	prinrval.c \
	pripc.c \
	prlog2.c   \
	prlong.c   \
	prnetdb.c  \
	praton.c  \
	prolock.c  \
	prrng.c    \
	prsystem.c \
	prtime.c   \
	prthinfo.c \
	prtpool.c \
	prtrace.c  \
	$(NULL)

ifndef USE_PTHREADS
CSRCS += \
	pripcsem.c \
	$(NULL)
endif

TARGETS	= $(OBJS)

INCLUDES = -I$(dist_includedir) -I$(topsrcdir)/pr/include -I$(topsrcdir)/pr/include/private

DEFINES	+= -D_NSPR_BUILD_

RELEASE_BINS = $(srcdir)/compile-et.pl $(srcdir)/prerr.properties

include $(topsrcdir)/config/rules.mk

# Prevent floating point errors caused by MSVC 6.0 Processor Pack
# optimizations (bug 207421).  This disables optimizations that
# could change the precision of floating-point calculations for
# this single compilation unit.
ifeq ($(NS_USE_GCC)_$(OS_ARCH),_WINNT)
$(OBJDIR)/prdtoa.$(OBJ_SUFFIX): prdtoa.c
	@$(MAKE_OBJDIR)
ifeq (,$(filter-out 1100 1200 1300 1310,$(MSC_VER)))
	$(CC) -Fo$@ -c $(CFLAGS) -Op $(call pr_abspath,$<)
else
	$(CC) -Fo$@ -c $(CFLAGS) -fp:precise $(call pr_abspath,$<)
endif
endif

#
# Generate prerr.h, prerr.c, and prerr.properties from prerr.et.
#
build_prerr:
	cd $(srcdir); $(PERL) compile-et.pl prerr.et

export:: $(TARGETS)


