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

DEPTH		= ../..
topsrcdir	= @top_srcdir@
srcdir		= @srcdir@
VPATH		= @srcdir@

include $(DEPTH)/config/autoconf.mk

include $(topsrcdir)/config/config.mk

MODULE		= apprunner
REQUIRES	= xpcom \
		  xpconnect \
		  string \
		  webbrwsr \
		  widget \
		  dom \
		  necko \
		  pref \
		  appshell \
		  gfx \
		  chrome \
		  xpinstall \
		  uriloader \
		  view \
		  windowwatcher \
		  embed_base \
		  embedcomponents \
		  mpfilelocprovider \
		  browser \
		  docshell \
		  xremoteservice \
		  $(NULL)
# for jprof
REQUIRES	+= jprof
ifeq ($(MOZ_WIDGET_TOOLKIT),os2)
REQUIRES	+= \
		  intl \
		  profile \
		  $(NULL)
endif
ifeq ($(MOZ_WIDGET_TOOLKIT),windows)
REQUIRES	+= intl profile appcomps
endif

ifeq ($(USE_SHORT_LIBNAME),1)
PROGRAM		= mozilla$(BIN_SUFFIX)
else
PROGRAM		= mozilla-bin$(BIN_SUFFIX)
endif

ifdef BUILD_STATIC_LIBS
ifeq ($(OS_ARCH),OS2)
EXTRA_DSO_LIBS = $(addprefix lib,$(shell cat $(FINAL_LINK_COMPS) $(FINAL_LINK_LIBS)))
EXTRA_DSO_LIBS += mpfilelocprovider_s
EXTRA_DSO_LDOPTS += libuls.lib libconv.lib unikbd.lib
_COMPONENT_LIST := $(shell cat $(FINAL_LINK_COMP_NAMES))
else
ifeq ($(OS_ARCH),WINNT)
EXTRA_DSO_LDOPTS = $(addsuffix .$(LIB_SUFFIX),$(addprefix $(DIST)/lib/components/$(LIB_PREFIX),$(shell cat $(FINAL_LINK_COMPS)))) $(addsuffix .$(LIB_SUFFIX),$(addprefix $(DIST)/lib/$(LIB_PREFIX),$(shell cat $(FINAL_LINK_LIBS))))
_COMPONENT_LIST := $(shell cat $(FINAL_LINK_COMP_NAMES))
else
EXTRA_DSO_LDOPTS = -L$(DIST)/lib/components
EXTRA_DSO_LIBS = $(shell cat $(FINAL_LINK_COMPS) $(FINAL_LINK_LIBS))
_COMPONENT_LIST := $(shell cat $(FINAL_LINK_COMP_NAMES))
endif
endif # WINNT
else
EXTRA_DSO_LIBS = gkgfx mpfilelocprovider_s
ifdef MOZ_OJI
ifeq ($(OS_ARCH),WINNT)
EXTRA_DSO_LIBS += jsj$(MOZ_BITS)$(VERSION_NUMBER)
else
EXTRA_DSO_LIBS += jsj
endif
endif
endif


CPPSRCS		= \
		nsAppRunner.cpp \
		nsWindowCreator.cpp \
		showOSAlert.cpp \
		$(NULL)

ifneq ($(OS_ARCH),WINNT)
CPPSRCS		+= nsSigHandlers.cpp
endif

XP_LIBS		= \
		$(EXTRA_DSO_LDOPTS) \
		$(EXTRA_DSO_LIBS) \
		$(NULL)

ifndef BUILD_STATIC_LIBS
XP_LIBS		+= \
		$(MOZ_JS_LIBS) \
		$(NULL)
else
CPPSRCS		+= nsStaticComponents.cpp

XP_LIBS		+= \
		$(PNG_LIBS) \
		$(MNG_LIBS) \
		$(JPEG_LIBS) \
		$(ZLIB_LIBS) \
		$(MOZ_GDK_PIXBUF_LIBS) \
		$(MOZ_XIE_LIBS) \
		$(MOZ_XPRINT_LDFLAGS) \
		$(NULL)

ifdef MOZ_PSM
XP_LIBS		+= \
		$(NSS_LIBS) \
		$(NULL)
endif

ifdef MOZ_LDAP_XPCOM
XP_LIBS		+= \
		$(LDAP_LIBS) \
		$(NULL)
endif

ifdef MOZ_SVG
XP_LIBS		+= $(MOZ_LIBART_LIBS)
endif

ifdef MOZ_ENABLE_GTK
XP_LIBS		+= $(XLDFLAGS) -lXt
endif

ifdef MOZ_ENABLE_XINERAMA
XP_LIBS		+= $(MOZ_XINERAMA_LIBS)
endif

ifdef MOZ_CALENDAR
XP_LIBS		+= -lical -licalss
endif

endif

XP_LIBS		+= \
		$(XPCOM_LIBS) \
		$(NSPR_LIBS) \
		$(NULL)

ifdef MOZ_ENABLE_PHOTON
XP_LIBS		+= $(TK_LIBS)
endif

ifdef NS_TRACE_MALLOC
DEFINES		+= -DNS_TRACE_MALLOC
endif

ifdef MOZ_JPROF
XP_LIBS         += -ljprof
endif

LIBS		= $(XP_LIBS)

ifdef GC_LEAK_DETECTOR
LIBS += -lboehm
endif

ifeq ($(MOZ_WIDGET_TOOLKIT),beos)
BEOS_PROGRAM_RESOURCE = $(srcdir)/apprunner-beos.rsrc
CPPSRCS += nsNativeAppSupportBeOS.cpp
CPPSRCS += nsNativeAppSupportBase.cpp
endif

ifeq ($(MOZ_WIDGET_TOOLKIT),photon)
CPPSRCS += nsNativeAppSupportPh.cpp
LIBS += -lphexlib
endif

ifeq ($(MOZ_WIDGET_TOOLKIT),os2)
CPPSRCS += nsNativeAppSupportOS2.cpp
CPPSRCS += nsNativeAppSupportBase.cpp
OS2_PROGRAM_RESOURCE = $(srcdir)/splashos2.rc
endif

ifeq ($(MOZ_WIDGET_TOOLKIT),gtk)
SPLASH_XPM = $(srcdir)/splash.xpm
CPPSRCS += nsNativeAppSupportGtk.cpp \
	   nsNativeAppSupportBase.cpp
DEFINES += -DSPLASH_XPM=\"$(SPLASH_XPM)\"
LIBS += $(MOZ_GTK_LDFLAGS)
endif

ifeq ($(MOZ_WIDGET_TOOLKIT),windows)
RESFILE = splash.res
DEFINES	+= -DWIN32_LEAN_AND_MEAN
CPPSRCS += nsNativeAppSupportWin.cpp nsNativeAppSupportBase.cpp
OS_LIBS += comctl32.lib comdlg32.lib uuid.lib shell32.lib ole32.lib oleaut32.lib version.lib winspool.lib
endif

XP_DIST_DEP_LIBS := $(filter-out -L$(DIST)/bin -L$(DIST)/lib, $(XP_DIST_LIBS))

ifeq ($(OS_ARCH),OS2)
ifdef BUILD_STATIC_LIBS
EXE_DEF_FILE = mozilla.def
endif
else
EXTRA_DEPS	= \
		$(addprefix $(DIST)/,$(patsubst -l%,bin/$(LIB_PREFIX)%$(DLL_SUFFIX),$(XP_DIST_DEP_LIBS:-l%_s=lib/$(LIB_PREFIX)%_s.a))) \
		$(NULL)

ifdef BUILD_STATIC_LIBS
EXTRA_DEPS	+= $(FINAL_LINK_COMPS) $(FINAL_LINK_LIBS) $(addsuffix .$(LIB_SUFFIX),$(addprefix $(DIST)/lib/components/$(LIB_PREFIX),$(shell cat $(FINAL_LINK_COMPS)))) $(addsuffix .$(LIB_SUFFIX),$(addprefix $(DIST)/lib/$(LIB_PREFIX),$(shell cat $(FINAL_LINK_LIBS))))
endif
endif

include $(topsrcdir)/config/rules.mk

ifeq ($(MOZ_WIDGET_TOOLKIT),gtk)
$(PROGRAM): $(SPLASH_XPM)
endif

ifeq ($(OS_ARCH),Darwin)
# don't let us build with "-dynamiclib"
EXTRA_DSO_LDOPTS = -execute
endif

# This code removes the console from release builds
# (unless you've set MOZ_WINCONSOLE=1).
ifndef MOZ_WINCONSOLE
ifdef MOZ_DEBUG
MOZ_WINCONSOLE=1
else
MOZ_WINCONSOLE=0
endif
endif

# Set link flags according to whether we want a console.
ifeq ($(MOZ_WINCONSOLE),1)
ifeq ($(MOZ_OS2_TOOLS),EMX)
BIN_FLAGS	:= -Zlinker /PM:VIO -Zlinker /Stack:0x30000
endif
ifeq ($(OS_ARCH),WINNT)
LDFLAGS		+= /SUBSYSTEM:CONSOLE
endif
else # MOZ_WINCONSOLE
ifeq ($(MOZ_OS2_TOOLS),VACPP)
LDFLAGS += /PM:PM
endif
ifeq ($(MOZ_OS2_TOOLS),EMX)
BIN_FLAGS	:= -Zlinker /PM:PM -Zlinker /Stack:0x30000
endif
ifeq ($(OS_ARCH),WINNT)
LDFLAGS		+= /SUBSYSTEM:WINDOWS
endif
endif

ifdef BUILD_STATIC_LIBS
DEFINES		+= -D_BUILD_STATIC_BIN=1
endif

CXXFLAGS	+= $(MOZ_TOOLKIT_REGISTRY_CFLAGS)

LOCAL_INCLUDES	= -I$(srcdir)

ifneq (,$(filter-out OS2 WINNT,$(OS_ARCH)))
libs:: mozilla.1
	$(INSTALL) $< $(DIST)/man/man1

mozilla.1: mozilla.man.in Makefile.in Makefile $(DEPTH)/config/autoconf.mk
	@sed -e "s|\@bindir\@|${bindir}|" -e "s|\@libdir\@|${libdir}|" \
		-e "s|\@mozilla_version\@|${MOZILLA_VERSION}|" < $< > $@

GARBAGE += mozilla.1
endif

ifneq ($(MOZ_WIDGET_TOOLKIT),os2)
libs:: $(srcdir)/mozilla
	$(INSTALL) $< $(DIST)/bin
endif

ifeq ($(MOZ_WIDGET_TOOLKIT),photon)
libs:: $(srcdir)/splash.bmp
	$(INSTALL) $< $(DIST)/bin
endif

ifeq ($(OS_ARCH),OS2)
ifdef BUILD_STATIC_LIBS
$(EXE_DEF_FILE):
	rm -f $@
	@echo NAME mozilla >$(EXE_DEF_FILE)
	@echo IMPORTS >>$(EXE_DEF_FILE)
	@echo 	WinQueryProperty		= PMMERGE.5450 >>$(EXE_DEF_FILE)
	@echo 	WinRemoveProperty		= PMMERGE.5451 >>$(EXE_DEF_FILE)
	@echo 	WinSetProperty			= PMMERGE.5452 >>$(EXE_DEF_FILE)
	@echo  	DaxOpenSave					= PMCTLS.295   >>$(EXE_DEF_FILE)
endif
endif

ifeq ($(MOZ_REORDER),1)

LDSCRIPT = ldscript
LDFLAGS += -Wl,-T,$(LDSCRIPT)
GARBAGE += $(LDSCRIPT)
ORDERFILE = $(srcdir)/mozilla-bin.order

$(PROGRAM) : $(LDSCRIPT) $(ORDERFILE)

$(LDSCRIPT): $(ORDERFILE)
	$(PERL) $(topsrcdir)/config/mklinkscript.pl -o $@ $<

endif

nsStaticComponents.cpp: nsStaticComponents.cpp.in Makefile Makefile.in $(FINAL_LINK_COMP_NAMES)
	rm -f $@
	cat $< | \
	sed -e "s|%DECL_NSGETMODULES%|$(foreach m,$(_COMPONENT_LIST),DECL_NSGETMODULE($(m)))|" | \
	sed -e "s|%MODULE_LIST%|$(foreach m, $(_COMPONENT_LIST),MODULE($(m)),)|" \
	> $@

ifeq ($(MOZ_WIDGET_TOOLKIT),mac)

ifdef MOZ_DEBUG
APP_NAME = MozillaDebug
else
APP_NAME = Mozilla
endif

libs:: $(PROGRAM)
	rm -rf $(DIST)/$(APP_NAME).app
	mkdir $(DIST)/$(APP_NAME).app
	cp -R $(srcdir)/macbuild/Contents $(DIST)/$(APP_NAME).app
	cp -RL $(DIST)/bin $(DIST)/$(APP_NAME).app/Contents/MacOS
	cp -RL $(srcdir)/macbuild/mach.icns $(DIST)/$(APP_NAME).app/Contents/Resources/mach.icns

endif

echo_objs:
	@echo $(OBJS)
