# The contents of this file are subject to the Netscape Public
# License Version 1.1 (the "License"); you may not use this file
# except in compliance with the License. You may obtain a copy of
# the License at http://www.mozilla.org/NPL/
#
# Software distributed under the License is distributed on an "AS
# IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
# implied. See the License for the specific language governing
# rights and limitations under the License.
#
# The Original Code is mozilla.org code.
#
# The Initial Developer of the Original Code is Netscape
# Communications Corporation.  Portions created by Netscape are
# Copyright (C) 1998 Netscape Communications Corporation. All
# Rights Reserved.
#
# Contributor(s): 

!if !defined(CONFIG_CONFIG_MAK)
CONFIG_CONFIG_MAK=1

#//------------------------------------------------------------------------
#//
#// Define public make variables:
#//
#//    OBJDIR  - Specifies the location of intermediate files (ie. objs...)
#//              Currently, the names are WINxx_O.OBJ or WINxx_D.OBJ for
#//              optimized and debug builds respectively.
#//
#//    DIST    - Specifies the location of the distribution directory where
#//              all targets are delivered.
#//
#//    CFGFILE - Specifies the name of the temporary configuration file 
#//              containing the arguments to the current command.
#//
#//    INCS    - Default include paths.
#//
#//    CFLAGS  - Default compiler options.
#//
#//    LFLAGS  - Default linker options.
#//
#//------------------------------------------------------------------------



#//-----------------------------------------------------------------------
#//
#// Detect WinNT vs. Win9x and set WINOS appropriately.
#//
#// Set WINOS in your environment to avoid the timewasting uname call
#//
#//-----------------------------------------------------------------------
!if !defined(WINOS)
!if [$(MOZ_TOOLS)\bin\uname > osuname.inc]
!endif
WINOS=\
!include "osuname.inc"
WINOS=$(WINOS: =)^

!if [del osuname.inc]
!endif
!endif



#//-----------------------------------------------------------------------
#//
#// DIST DEFINITION
#//
#//-----------------------------------------------------------------------

XPDIST=$(DEPTH)\dist
!ifdef MODULE
PUBLIC=$(XPDIST)\include\$(MODULE)
!else
PUBLIC=$(XPDIST)\include
!endif

!ifdef NGLAYOUT_BUILD_PREFIX
DIST_PREFIX=NGL
!else
!ifdef MOZ_NAV_BUILD_PREFIX
DIST_PREFIX=NAV
!else
DIST_PREFIX=WIN
!endif
!endif

!ifndef MOZ_DEBUG
OBJDIR=$(DIST_PREFIX)$(MOZ_BITS)$(OBJTYPE)_O.OBJ
JAVA_OPTIMIZER = -O
!ifdef NO_CAFE
JAVAC_OPTIMIZER =
!else
#JAVAC_OPTIMIZER= -O -noinline
JAVAC_OPTIMIZER =
!endif
!else
OBJDIR=$(DIST_PREFIX)$(MOZ_BITS)$(OBJTYPE)_D.OBJ
JAVA_OPTIMIZER = -g
JAVAC_OPTIMIZER = -g
!endif

#//
#// DIST DEFINES SHOULD NEVER BE COMPONENT SPECIFIC.
#//
!ifndef MOZ_DEBUG
DIST=$(XPDIST)\$(DIST_PREFIX)$(MOZ_BITS)_O.OBJ
!else
DIST=$(XPDIST)\$(DIST_PREFIX)$(MOZ_BITS)_D.OBJ
!endif

# This will always give the location of NGLayout's dist, even if "NGLAYOUT_BUILD_PREFIX" is not defined.
!if defined(MOZ_NGLAYOUT)
!ifndef MOZ_DEBUG
NGLAYOUT_DIST=$(XPDIST)\NGL$(MOZ_BITS)_O.OBJ
!else
NGLAYOUT_DIST=$(XPDIST)\NGL$(MOZ_BITS)_D.OBJ
!endif
!endif



#//-----------------------------------------------------------------------
#//
#// Basic configuration settings
#//
#//-----------------------------------------------------------------------

!ifndef DISABLE_LDAP
LDAP_CFLAGS=-I$(XPDIST)\include\ldap
!endif

CFGFILE=$(OBJDIR)\cmd.cfg
INCS=$(INCS) -I$(PUBLIC) -I$(DIST)\include -I$(XPDIST)\include\nspr


!ifdef REQUIRES

!if "$(WINOS)" == "WIN95"

# use perl to translate REQUIRES into a proper include line
# using \1 instead of $1 because nmake barfs on $1
!if [echo $(REQUIRES) | perl -pe "s/(\w+)/-I$(XPDIST:\=\/)\\\include\\\\\1/g; print \"REQINCS=$_\";" > reqincs.inc]
!endif
 
!else

REQINCS1=REQINCS=-I $(XPDIST)/include/$(REQUIRES: = -I$(XPDIST^)/include/)

!if [echo $(REQINCS1) > reqincs.inc]
!endif

!endif

!include reqincs.inc

!if [del reqincs.inc]
!endif

!endif

INCS=$(INCS) -I$(XPDIST)\include $(REQINCS)

!if "$(MOZ_BITS)" == "16"
CFLAGS=$(MOZ_JAVA_FLAG) -DEDITOR $(OS_CFLAGS) $(MOZ_CFLAGS)
!else
CFLAGS=$(MOZ_JAVA_FLAG) $(OS_CFLAGS) $(MOZ_CFLAGS)
!endif

IBMBIDI=1
CFLAGS=$(CFLAGS) -DIBMBIDI

!if "$(DISABLE_ACCESSIBILITY)" == "1"
!undef ACCESSIBILITY
!else
ACCESSIBILITY=1
CFLAGS=$(CFLAGS) -DACCESSIBILITY
!endif

LFLAGS=$(OS_LFLAGS) $(LLFLAGS) $(MOZ_LFLAGS)

# This compiles in heap dumping utilities and other good stuff 
# for developers -- maybe we only want it in for a special SDK 
# nspr/java runtime(?):
!if "$(MOZ_BITS)"=="32" || defined(MOZ_DEBUG)
CFLAGS = $(CFLAGS) -DDEVELOPER_DEBUG
!endif

!ifdef MOZ_BSCFILE
CFLAGS = $(CFLAGS) -FR
!endif

!ifdef NO_LOGGING
CFLAGS=$(CFLAGS) -DNS_DISABLE_LOGGING
!else
CFLAGS=$(CFLAGS) -DMOZ_LOGGING
!endif

FINAL_LINK_COMPS=$(DIST)\final-link-comps
FINAL_LINK_COMP_NAMES=$(DIST)\final-link-comp-names
FINAL_LINK_LIBS=$(DIST)\final-link-libs

!ifdef MOZ_STATIC_COMPONENT_LIBS
# Force _all_ exported methods to be |_declspec(dllexport)| when we're
# building them into the executable.
CFLAGS=$(CFLAGS) -D_IMPL_NS_APPSHELL
CFLAGS=$(CFLAGS) -D_IMPL_NS_COOKIE
CFLAGS=$(CFLAGS) -D_IMPL_NS_DOM
CFLAGS=$(CFLAGS) -D_IMPL_NS_GFX
CFLAGS=$(CFLAGS) -D_IMPL_NS_HTML
CFLAGS=$(CFLAGS) -D_IMPL_NS_HTMLPARS
CFLAGS=$(CFLAGS) -D_IMPL_NS_INTL
CFLAGS=$(CFLAGS) -D_IMPL_NS_LAYOUT
CFLAGS=$(CFLAGS) -D_IMPL_NS_MSG_BASE
CFLAGS=$(CFLAGS) -D_IMPL_NS_NET
CFLAGS=$(CFLAGS) -D_IMPL_NS_PICS
CFLAGS=$(CFLAGS) -D_IMPL_NS_PLUGIN
CFLAGS=$(CFLAGS) -D_IMPL_NS_RDF
CFLAGS=$(CFLAGS) -D_IMPL_NS_VIEW
CFLAGS=$(CFLAGS) -D_IMPL_NS_WEB
CFLAGS=$(CFLAGS) -D_IMPL_NS_WIDGET
!endif

#//-----------------------------------------------------------------------
#//
#// feature-specific configuration settings
#//
#//-----------------------------------------------------------------------

# Default configuration for debug builds
!ifdef MOZ_DEBUG

# turn on MOZ_TIMELINE
!ifndef MOZ_TIMELINE_DISABLE
MOZ_TIMELINE=1
!endif

# turn on TRACE_MALLOC
!ifndef MOZ_TRACE_MALLOC_DISABLE
MOZ_TRACE_MALLOC=1
!endif

!endif

# For modular netlib support.
CFLAGS=$(CFLAGS) -DNS_MT_SUPPORTED -DNETLIB_THREAD -DNS_NET_FILE

# Defines for cookie management feature...
CFLAGS=$(CFLAGS) -DCookieManagement

# Defines for single signon and client wallet features...
!ifndef MOZ_NO_WALLET_HACK
CFLAGS=$(CFLAGS) -DSingleSignon -DClientWallet
!endif

# TODO Cleanup later -Gagan
!ifdef NU_CACHE 
CFLAGS=$(CFLAGS) -DNU_CACHE
!endif

# always need these:
CFLAGS = $(CFLAGS) -DNETSCAPE

# Specify that we are building a client.
# This will instruct the cross platform libraries to
# include all the client specific cruft.
!if defined(SERVER_BUILD)
CFLAGS = $(CFLAGS) -DSERVER_BUILD
!elseif defined(LIVEWIRE)
CFLAGS = $(CFLAGS) -DLIVEWIRE
!else
CFLAGS = $(CFLAGS) -DMOZILLA_CLIENT
!endif

# need this everywhere jsapi.h might be included
CFLAGS=$(CFLAGS) -DJS_THREADSAFE

!if "$(STAND_ALONE_JAVA)" == "1"
CFLAGS=$(CFLAGS) -DSTAND_ALONE_JAVA
!endif

NECKO=1
CFLAGS=$(CFLAGS) -DNECKO


!if defined(XPCOM_STANDALONE)
CFLAGS=$(CFLAGS) -DXPCOM_STANDALONE
!endif

!if defined(XPCONNECT_STANDALONE)
CFLAGS=$(CFLAGS) -DXPCONNECT_STANDALONE
!endif

# Enable output of performance metrics if MOZ_PERF is set
!ifdef MOZ_PERF
CFLAGS=$(CFLAGS) -DMOZ_PERF_METRICS
!endif

# Enable timeline service if MOZ_TIMELINE is set
!ifdef MOZ_TIMELINE
CFLAGS=$(CFLAGS) -DMOZ_TIMELINE
!endif

!ifndef MOZ_JAVA
MOZ_OJI = 1             # on by default now
!endif

!ifdef MOZ_LIBTEST
MOZ_LIBTEST = 1
CFLAGS=$(CFLAGS) -DLAYPROBE_API
!endif

!ifdef MOZ_JAVA
MOZ_JAVA_FLAG=-DJAVA
!ifdef MOZ_OJI
!error You can't define both MOZ_JAVA and MOZ_OJI anymore. 
!endif
JAVA_OR_OJI = 1
JAVA_OR_NSJVM = 1
!endif

!ifdef NSJVM
JAVA_OR_NSJVM = 1
AWT_11 = 1              # always build awt 1.1 with nsjvm now
!endif

!ifdef MOZ_OJI
CFLAGS=$(CFLAGS) -DOJI
JAVA_OR_OJI=1
!endif

!ifdef SMART_MAIL
CFLAGS=$(CFLAGS) -DSMART_MAIL
!endif

!ifdef MOZ_TRACE_XPCOM_REFCNT
CFLAGS=$(CFLAGS) -DMOZ_TRACE_XPCOM_REFCNT
!endif

!ifdef MOZ_TRACE_MALLOC
CFLAGS=$(CFLAGS) -DNS_TRACE_MALLOC
!endif

!ifdef MOZ_SMOOTH_PROGRESS
CFLAGS=$(CFLAGS) -DSMOOTH_PROGRESS
!endif

!if defined(USE_STRING2)
CFLAGS = $(CFLAGS) -DUSE_STRING2
!endif

#!ifdef MOZ_XUL
MOZ_XUL=1
CFLAGS=$(CFLAGS) -DINCLUDE_XUL -DMOZ_XUL
#!endif

!ifdef MOZ_MATHML
CFLAGS=$(CFLAGS) -DMOZ_MATHML
!endif

!ifdef MOZ_SVG
CFLAGS=$(CFLAGS) -DMOZ_SVG
!endif

!ifdef MOZ_DEBUG
CFLAGS=$(CFLAGS) -DMOZ_REFLOW_PERF -DMOZ_REFLOW_PERF_DSP
!endif

CFLAGS=$(CFLAGS) -DUSE_IMG2 -DNS_PRINT_PREVIEW

!ifdef MOZ_STATIC_COMPONENT_LIBS
CFLAGS=$(CFLAGS) -DXPCOM_TRANSLATE_NSGM_ENTRY_POINT -DMOZ_STATIC_COMPONENT_LIBS
!endif

#//-----------------------------------------------------------------------
#//
#// build tools
#//
#//-----------------------------------------------------------------------

NMAKE=nmake -nologo -$(MAKEFLAGS)

# grab the perl from the user's path (probably need 5.005)
PERL = perl.exe

#if MOZILLA_OFFICIAL is set, then define splitsym
!if defined (MOZILLA_OFFICIAL)
SPLITSYM = $(MOZ_TOOLS)\bin\splitsym
!endif

# use find
!ifndef FIND
FIND = find.exe
!endif

MASM = $(MOZ_TOOLS)\bin\ml.exe

!if "$(WINOS)" == "WIN95"
MKDIR = $(DEPTH)\config\w95mkdir
QUIET =
!else
MKDIR = mkdir
QUIET=@
!endif



#//------------------------------------------------------------------------
#//
#// Include the OS dependent configuration information
#//
#//------------------------------------------------------------------------
include <$(DEPTH)/config/WIN$(MOZ_BITS)>

!ifdef MOZ_DEBUG
!ifdef USERNAME
CFLAGS = $(CFLAGS) -DDEBUG_$(USERNAME)
!endif
!endif

!if (defined(MOZ_COVERAGE) && !defined(MOZ_NO_COVERAGE)) || (defined(GLOWCODE) && defined(GLOWPROF) && "$(MOZ_BITS)"=="32")
CFLAGS = $(CFLAGS) /Gh
!endif


#//------------------------------------------------------------------------
#//
#// Define the global make commands.
#//
#//    MAKE_INSTALL  - Copy a target to the distribution directory.
#//
#//    MAKE_OBJDIRS  - Create an object directory (if necessary).
#//
#//     MAKE_MANGLE   - Convert all long filenames into 8.3 names
#//
#//     MAKE_UNMANGLE - Restore all long filenames
#//
#//------------------------------------------------------------------------
!if !defined(MOZ_SRC)
#enable builds on any drive if defined.
MOZ_SRC=y:
!endif
MAKE_INSTALL=$(QUIET)$(DEPTH)\config\makecopy.exe
MAKE_MANGLE=$(DEPTH)\config\mangle.exe
MAKE_UNMANGLE=if exist unmangle.bat call unmangle.bat

!if defined(MOZ_PURIFY)
# add #line directive to header files for purify
MKCPYFLAGS= -i
!endif


#//------------------------------------------------------------------------
#//
#// Common Libraries
#//
#//------------------------------------------------------------------------
NSPR_VERSION=4
LIBNSPR=$(DIST)\lib\nspr$(NSPR_VERSION).lib $(DIST)\lib\plds$(NSPR_VERSION).lib $(DIST)\lib\plc$(NSPR_VERSION).lib
LIBPLC=$(DIST)\lib\plc$(NSPR_VERSION).lib

NSPRDIR = nsprpub
CFLAGS = $(CFLAGS) -DNSPR20

LIBJPEG=$(DIST)\lib\jpeg$(MOZ_BITS)$(VERSION_NUMBER).lib



#//------------------------------------------------------------------------
#//
#// Windows-Specific Java Stuff
#//
#// (Is this used anymore? Even if it is should it be in config.mak?)
#//
#//------------------------------------------------------------------------

PATH_SEPARATOR = ;

!ifndef JAVA_HOME
JAVA_HOME=$(JDKHOME)
!endif

# where the bytecode will go
!if "$(AWT_11)" == "1"
JAVA_DESTPATH = $(MOZ_SRC)\mozilla\dist\classes11
!else
JAVA_DESTPATH = $(MOZ_SRC)\mozilla\dist\classes
!endif

# where the source are
DEFAULT_JAVA_SOURCEPATH = $(MOZ_SRC)\mozilla\sun-java\classsrc
!ifndef JAVA_SOURCEPATH
!if "$(AWT_11)" == "1"
JAVA_SOURCEPATH = $(MOZ_SRC)\mozilla\sun-java\classsrc11;$(DEFAULT_JAVA_SOURCEPATH)
!else
JAVA_SOURCEPATH = $(DEFAULT_JAVA_SOURCEPATH)
!endif
!endif

JAVA_PROG=$(MOZ_TOOLS)\bin\java.exe
#JAVA_PROG=$(DIST)\bin\java

JAVAC_ZIP=$(JAVA_HOME)\lib\classes.zip

ZIP_PROG = $(MOZ_TOOLS)\bin\zip
UNZIP_PROG = $(MOZ_TOOLS)\bin\unzip
ZIP_COMPR = 9
ZIP_FLAGS = -$(ZIP_COMPR)r

CFLAGS = $(CFLAGS) -DOS_HAS_DLL

DLL_SUFFIX	= dll
LIB_SUFFIX	= lib

!if "$(STAND_ALONE_JAVA)" == "1"
STAND_ALONE_JAVA_DLL_SUFFIX=s
!else
STAND_ALONE_JAVA_DLL_SUFFIX=
!endif

MOD_JRT=jrt$(MOZ_BITS)$(VERSION_NUMBER)
MOD_MM =mm$(MOZ_BITS)$(VERSION_NUMBER)
MOD_AWT=awt$(MOZ_BITS)$(VERSION_NUMBER)
MOD_AWTS=awt$(MOZ_BITS)$(VERSION_NUMBER)$(STAND_ALONE_JAVA_DLL_SUFFIX)
MOD_JIT=jit$(MOZ_BITS)$(VERSION_NUMBER)
MOD_JSJ=jsj$(MOZ_BITS)$(VERSION_NUMBER)
MOD_NET=net$(MOZ_BITS)$(VERSION_NUMBER)
MOD_JBN=jbn$(MOZ_BITS)$(VERSION_NUMBER)
MOD_NSC=nsc$(MOZ_BITS)$(VERSION_NUMBER)
MOD_JPW=jpw$(MOZ_BITS)$(VERSION_NUMBER)
MOD_JDB=jdb$(MOZ_BITS)$(VERSION_NUMBER)
MOD_ZPW=zpw$(MOZ_BITS)$(VERSION_NUMBER)
MOD_CON=con$(MOZ_BITS)$(VERSION_NUMBER)
MOD_NPJ=npj$(MOZ_BITS)$(VERSION_NUMBER)

JRTDLL=$(MOD_JRT).$(DLL_SUFFIX)
MMDLL =$(MOD_MM).$(DLL_SUFFIX)
AWTDLL=$(MOD_AWT).$(DLL_SUFFIX)
AWTSDLL=$(MOD_AWT)$(STAND_ALONE_JAVA_DLL_SUFFIX).$(DLL_SUFFIX)
JITDLL=$(MOD_JIT).$(DLL_SUFFIX)
JSJDLL=$(MOD_JSJ).$(DLL_SUFFIX)
NETDLL=$(MOD_NET).$(DLL_SUFFIX)
JBNDLL=$(MOD_JBN).$(DLL_SUFFIX)
NSCDLL=$(MOD_NSC).$(DLL_SUFFIX)
JPWDLL=$(MOD_JPW).$(DLL_SUFFIX)
JDBDLL=$(MOD_JDB).$(DLL_SUFFIX)
ZPWDLL=$(MOD_ZPW).$(DLL_SUFFIX)
CONDLL=$(MOD_CON).$(DLL_SUFFIX)
NPJDLL=$(MOD_NPJ).$(DLL_SUFFIX)

AWTLIB=$(DIST)\lib\$(MOD_AWT).$(LIB_SUFFIX)

######################################################################

include <$(DEPTH)/config/common.mk>

JAVA_DEFINES =			   \
	-DJAR_NAME=\"$(JAR_NAME)\" \
	-DJRTDLL=\"$(JRTDLL)\"	   \
	-DMMDLL=\"$(MMDLL)\"	   \
	-DAWTDLL=\"$(AWTDLL)\"	   \
	-DAWTSDLL=\"$(AWTSDLL)\"   \
	-DJSJDLL=\"$(JSJDLL)\"	   \
	-DJITDLL=\"$(JITDLL)\"     \
	-DNETDLL=\"$(NETDLL)\"     \
	-DJBNDLL=\"$(JBNDLL)\"     \
	-DNSCDLL=\"$(NSCDLL)\"     \
	-DJDBDLL=\"$(JDBDLL)\"	   \
	-DJPWDLL=\"$(JPWDLL)\"     \
	-DZPWDLL=\"$(ZPWDLL)\"     \
	-DCONDLL=\"$(CONDLL)\"
!if "$(MOZ_BITS)" == "16"

# Override JAVA_DEFINES to make command line short for win16.
# Put any new defines into javadefs.h in ns/sun-java/include.
# This is to shorten the command line in order not to break Win16.

JAVA_DEFINES = -DJAR_NAME=\"$(JAR_NAME)\" -DMOZ_BITS=\"$(MOZ_BITS)\" -DVERSION_NUMBER=\"$(VERSION_NUMBER)\" -DDLL_SUFFIX=\".$(DLL_SUFFIX)\"   

!endif

!if "$(AWT_11)" == "1"
JAVA_DEFINES = $(JAVA_DEFINES) -DAWT_11
!else
JAVA_DEFINES = $(JAVA_DEFINES) -DAWT_102
!endif


#JAVA_CLASSPATH = $(JAVA_CLASSPATH:/=\)
JMCSRCDIR = $(JMCSRCDIR:/=\)
JAVA_BOOT_CLASSPATH = $(JAVA_BOOT_CLASSPATH:/=\)


########
#   Get the cwd to prepend to all compiled source
#       files.  Will allow debugger to automatically find sources
#       instead of asking for the path info.
#   Win16 will break if enabled, guess we continue to live in pain
#       therein.
########
!if "$(MOZ_BITS)" == "32"
CURDIR=$(MAKEDIR)^\
!endif

XPIDL_PROG=$(DIST)\bin\xpidl.exe
XPTLINK_PROG=$(DIST)\bin\xpt_link.exe

# XXX If you change this name, be _sure_ to update rules.mak;
# specifically, the rules that compute XPIDL_HEADERS and
# XPIDL_TYPELIBS. 'nmake' is too dumb to allow recursive macro
# substitution.

XPIDL_GEN_DIR=.\_xpidlgen

#MOZ_DISABLE_JAR_PACKAGING=1     # temporary

!endif # CONFIG_CONFIG_MAK

