# -*- Mode: Makefile -*-
# 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/.


INCLUDED_AUTOCONF_MK = 1
USE_AUTOCONF	= 1
@SHELL_OVERRIDE@
MOZILLA_CLIENT	= @MOZILLA_CLIENT@

prefix		= @prefix@
exec_prefix	= @exec_prefix@
bindir		= @bindir@
includedir	= @includedir@
libdir		= @libdir@
datarootdir	= @datarootdir@
datadir		= @datadir@

dist_prefix	= @dist_prefix@
dist_bindir	= @dist_bindir@
dist_includedir = @dist_includedir@
dist_libdir	= @dist_libdir@

DIST		= $(dist_prefix)

RELEASE_OBJDIR_NAME = @RELEASE_OBJDIR_NAME@
OBJDIR_NAME	= @OBJDIR_NAME@
OBJDIR		= @OBJDIR@
# We do magic with OBJ_SUFFIX in config.mk, the following ensures we don't
# manually use it before config.mk inclusion
OBJ_SUFFIX	= $(error config/config.mk needs to be included before using OBJ_SUFFIX)
_OBJ_SUFFIX	= @OBJ_SUFFIX@
LIB_SUFFIX	= @LIB_SUFFIX@
DLL_SUFFIX	= @DLL_SUFFIX@
ASM_SUFFIX	= @ASM_SUFFIX@
MOD_NAME	= @NSPR_MODNAME@

MOD_MAJOR_VERSION = @MOD_MAJOR_VERSION@
MOD_MINOR_VERSION = @MOD_MINOR_VERSION@
MOD_PATCH_VERSION = @MOD_PATCH_VERSION@

LIBNSPR		= @LIBNSPR@
LIBPLC		= @LIBPLC@

CROSS_COMPILE	= @CROSS_COMPILE@
MOZ_OPTIMIZE	= @MOZ_OPTIMIZE@
MOZ_DEBUG	= @MOZ_DEBUG@
MOZ_DEBUG_SYMBOLS = @MOZ_DEBUG_SYMBOLS@

USE_CPLUS	= @USE_CPLUS@
USE_IPV6	= @USE_IPV6@
USE_N32		= @USE_N32@
USE_X32		= @USE_X32@
USE_64		= @USE_64@
ENABLE_STRIP	= @ENABLE_STRIP@

USE_PTHREADS	= @USE_PTHREADS@
USE_BTHREADS	= @USE_BTHREADS@
PTHREADS_USER	= @USE_USER_PTHREADS@
CLASSIC_NSPR	= @USE_NSPR_THREADS@

AS		= @AS@
ASFLAGS		= @ASFLAGS@
CC		= @CC@
CCC		= @CXX@
NS_USE_GCC	= @GNU_CC@
GCC_USE_GNU_LD	= @GCC_USE_GNU_LD@
MSC_VER		= @MSC_VER@
AR		= @AR@
AR_FLAGS	= @AR_FLAGS@
LD		= @LD@
RANLIB		= @RANLIB@
PERL		= @PERL@
RC		= @RC@
RCFLAGS		= @RCFLAGS@
STRIP		= @STRIP@
NSINSTALL	= @NSINSTALL@
FILTER		= @FILTER@
IMPLIB		= @IMPLIB@
CYGWIN_WRAPPER	= @CYGWIN_WRAPPER@
MT		= @MT@

OS_CPPFLAGS	= @CPPFLAGS@
OS_CFLAGS	= $(OS_CPPFLAGS) @CFLAGS@ $(DSO_CFLAGS)
OS_CXXFLAGS	= $(OS_CPPFLAGS) @CXXFLAGS@ $(DSO_CFLAGS)
OS_LIBS         = @OS_LIBS@
OS_LDFLAGS	= @LDFLAGS@
OS_DLLFLAGS	= @OS_DLLFLAGS@
DLLFLAGS	= @DLLFLAGS@
EXEFLAGS  = @EXEFLAGS@
OPTIMIZER	= @OPTIMIZER@

PROFILE_GEN_CFLAGS  = @PROFILE_GEN_CFLAGS@
PROFILE_GEN_LDFLAGS = @PROFILE_GEN_LDFLAGS@
PROFILE_USE_CFLAGS  = @PROFILE_USE_CFLAGS@
PROFILE_USE_LDFLAGS = @PROFILE_USE_LDFLAGS@

MKSHLIB		= @MKSHLIB@
WRAP_LDFLAGS	= @WRAP_LDFLAGS@
DSO_CFLAGS	= @DSO_CFLAGS@
DSO_LDOPTS	= @DSO_LDOPTS@

RESOLVE_LINK_SYMBOLS = @RESOLVE_LINK_SYMBOLS@

HOST_CC		= @HOST_CC@
HOST_CFLAGS	= @HOST_CFLAGS@
HOST_LDFLAGS	= @HOST_LDFLAGS@

DEFINES		= @DEFINES@ @DEFS@

MDCPUCFG_H	= @MDCPUCFG_H@
PR_MD_CSRCS	= @PR_MD_CSRCS@
PR_MD_ASFILES	= @PR_MD_ASFILES@
PR_MD_ARCH_DIR	= @PR_MD_ARCH_DIR@
CPU_ARCH	= @CPU_ARCH@

OS_TARGET	= @OS_TARGET@
OS_ARCH		= @OS_ARCH@
OS_RELEASE	= @OS_RELEASE@
OS_TEST		= @OS_TEST@

NOSUCHFILE	= @NOSUCHFILE@
AIX_LINK_OPTS	= @AIX_LINK_OPTS@
MOZ_OBJFORMAT	= @MOZ_OBJFORMAT@
ULTRASPARC_LIBRARY = @ULTRASPARC_LIBRARY@

OBJECT_MODE	= @OBJECT_MODE@
ifdef OBJECT_MODE
export OBJECT_MODE
endif

VISIBILITY_FLAGS = @VISIBILITY_FLAGS@
WRAP_SYSTEM_INCLUDES = @WRAP_SYSTEM_INCLUDES@

MACOSX_DEPLOYMENT_TARGET = @MACOSX_DEPLOYMENT_TARGET@
ifdef MACOSX_DEPLOYMENT_TARGET
export MACOSX_DEPLOYMENT_TARGET
endif

MACOS_SDK_DIR	= @MACOS_SDK_DIR@

SYMBIAN_SDK_DIR = @SYMBIAN_SDK_DIR@

NEXT_ROOT	= @NEXT_ROOT@
ifdef NEXT_ROOT
export NEXT_ROOT
endif
