# Top-level Makefile rule for automake
#
# Variable conventions:
#
# _h_api            = API headers that will be installed and included in the distribution
# _cppflags         = flags that will be passed to the C/CXX Preprocessor
# _sources          = sources that will be compiled and included in the distribution
# _built_sources    = files that will be autogenerated by the build system and
#                     will be part of the _SOURCES primary
# _built_nosources  = files that are autogenerated but are not part of the
#                     _SOURCES primary
# _cleanfiles       = files that will be removed by the clean target
#
# Sources, headers, flags, etc... should be added to the respective variables
# with the above suffix, e.g, webcore-specific sources should go to
# webcore_sources, gtk port API and WebCoreSupport parts to webkitgtk_sources,
# etc... The only exceptions are the global variables. See Global Variables
# below.

# Global Variables Reference
# global_cppflags   = CPPFLAGS that apply to all C/C++ files that are built for any project.
# global_cflags     = CFLAGS that apply to all C files that are built for any project.
# global_cxxflags   = CXXFLAGS that apply to all C++ files that are bult for any project.

srcdir = @srcdir@
VPATH = @srcdir@

DISTCHECK_CONFIGURE_FLAGS = \
	--enable-introspection	\
	--enable-gtk-doc \
	--enable-webkit2

# Directory for autogenerated sources
GENSOURCES := $(top_builddir)/DerivedSources
GENSOURCES_JAVASCRIPTCORE := $(top_builddir)/DerivedSources/JavaScriptCore
GENSOURCES_WEBCORE := $(top_builddir)/DerivedSources/WebCore
GENSOURCES_WEBKIT := $(top_builddir)/DerivedSources/webkit
GENSOURCES_WEBKIT2 := $(top_builddir)/DerivedSources/WebKit2
GENPROGRAMS := $(top_builddir)/Programs
GENSOURCES_INSPECTOR := $(GENPROGRAMS)/resources/inspector
WebCore := $(srcdir)/Source/WebCore
WebKit := $(srcdir)/Source/WebKit/gtk
WebKit2 := $(srcdir)/Source/WebKit2
pkgconfigdir := $(libdir)/pkgconfig
libwebkitgtkincludedir := $(prefix)/include/webkitgtk-@WEBKITGTK_API_VERSION@

# Libraries and support components
bin_PROGRAMS :=
noinst_PROGRAMS :=
libexec_PROGRAMS :=
noinst_HEADERS :=
noinst_LTLIBRARIES :=
lib_LTLIBRARIES :=
IDL_BINDINGS :=
TEST_PROGS :=
POFILES :=
MOFILES :=
javascriptcore_h_api :=
javascriptcore_cppflags:=
javascriptcore_cflags :=
javascriptcore_sources :=
javascriptcore_built_sources :=
javascriptcore_built_nosources :=
webcore_cppflags :=
webcore_sources :=
webcore_libadd :=
webcore_built_sources :=
webcore_built_nosources :=
webcoregtk_sources :=
webcoregtk_cppflags :=
webkitgtk_built_h_api :=
webkitgtk_static_h_api :=
webkitgtk_h_api :=
webkitgtk_sources :=
webkitgtk_cppflags :=
webkitgtk_gdom_built_sources :=
webkitgtk_built_sources :=
webkitgtk_built_nosources :=
webkit2_built_sources :=
webkit2_plugin_process_built_sources :=
webkittestrunner_built_sources :=
libwebcoreinternals_built_sources :=
global_cppflags :=
global_cflags :=
global_cxxflags :=
JSCORE_GIRSOURCES :=
WEBKIT_GIRSOURCES :=
FEATURE_DEFINES :=
typelibsdir :=
typelibs_DATA :=
EXTRA_DIST :=
BUILT_SOURCES :=
CLEANFILES :=
DOMAIN :=
DISTCLEANFILES :=
MAINTAINERCLEANFILES :=
pkgconfig_DATA :=

# We do not care at all about this implicit built-in make rules,
# disable them to save some build time
%: %.c
%: %.cpp
%: %.o
(%): %
%.out: %
%.c: %.w %.ch
%.tex: %.w %.ch
%:: %,v
%:: RCS/%,v
%:: RCS/%
%:: s.%
%:: SCCS/s.%

global_cppflags += \
	-Wall -W -Wcast-align -Wchar-subscripts -Wreturn-type \
	-Wformat -Wformat-security -Wno-format-y2k -Wundef \
	-Wmissing-format-attribute -Wpointer-arith -Wwrite-strings \
	-Wno-unused-parameter -Wno-parentheses \
	-fno-exceptions -DENABLE_GLIB_SUPPORT=1


global_cxxflags += \
	-fno-rtti

# -no-undefined required for building DLLs on Windows
# It breaks the build on other platforms, so we use it conditionally
if OS_WIN32
no_undefined = -no-undefined
version_script = -export-symbols-regex "^(webkit_|k?JS).*"
endif

if OS_GNU
version_script = -Wl,--version-script,$(srcdir)/Source/autotools/symbols.filter
endif

# Extra checks and flags
global_cppflags += \
	-DBUILDING_CAIRO__=1 \
	-DBUILDING_GTK__=1 \
	-DWTF_CHANGES

# For the Gtk port we want to use XP_UNIX both in X11 and Mac
if !TARGET_WIN32
global_cppflags += \
	-DXP_UNIX
endif

if USE_ICU_UNICODE
global_cppflags += \
	-DWTF_USE_ICU_UNICODE=1
endif

if USE_GLIB_UNICODE
global_cppflags += \
	-DWTF_USE_GLIB_UNICODE=1
endif

if !ENABLE_FAST_MALLOC
global_cppflags += \
	-DUSE_SYSTEM_MALLOC
endif

if USE_GSTREAMER
global_cppflags += \
	-DWTF_USE_GSTREAMER=1
endif

# ----
# GTK+ 2.x/3.x support
# ----
if GTK_API_VERSION_2
global_cppflags += \
	-DGTK_API_VERSION_2=1
endif

if !ENABLE_DEBUG
global_cppflags += -DNDEBUG
else
global_cppflags += \
	-DG_DISABLE_DEPRECATED \
	-DGDK_PIXBUF_DISABLE_DEPRECATED \
	-DGDK_DISABLE_DEPRECATED \
	-DGTK_DISABLE_DEPRECATED \
	-DPANGO_DISABLE_DEPRECATED
# Might be useful in the future
#	-DGDK_MULTIHEAD_SAFE \
#	-DGTK_MULTIHEAD_SAFE
endif

if ENABLE_COVERAGE
global_cppflags += \
	-DGCC_GENERATE_TEST_COVERAGE_FILES \
	-DGCC_INSTRUMENT_PROGRAM_FLOW_ARCS
endif

EXTRA_DIST += \
	$(srcdir)/Source/autotools/symbols.filter \
	$(srcdir)/Source/WebKit/LICENSE

# Include module makefiles
if USE_JSC
include Source/JavaScriptCore/GNUmakefile.am
endif

include Source/WebCore/GNUmakefile.am
include Source/WebKit/gtk/GNUmakefile.am
include Source/WebCore/bindings/gobject/GNUmakefile.am
include Tools/GNUmakefile.am
include Source/WebKit/gtk/po/GNUmakefile.am
include Source/WebKit/gtk/docs/GNUmakefile.am
include Tools/DumpRenderTree/gtk/GNUmakefile.ImageDiff.am

if ENABLE_WEBKIT2
include Source/WebKit2/GNUmakefile.am
include Source/WebKit2/UIProcess/API/gtk/tests/GNUmakefile.am
include Tools/MiniBrowser/gtk/GNUmakefile.am
include Tools/WebKitTestRunner/GNUmakefile.am
# [GTK] Refactor the translations now that we have webkit2
# https://bugs.webkit.org/show_bug.cgi?id=55153
endif

# Autogenerated sources
BUILT_SOURCES += \
	$(webcore_built_sources) \
	$(webcore_built_nosources) \
	$(webkitgtk_built_sources) \
	$(webkitgtk_built_nosources)

if USE_JSC
BUILT_SOURCES += \
	$(javascriptcore_built_sources) \
	$(javascriptcore_built_nosources)
endif

DISTCLEANFILES += \
	$(CLEANFILES) \
	$(builddir)/doltcompile \
	$(builddir)/doltlibtool

MAINTAINERCLEANFILES += \
	$(CLEANFILES) \
	$(builddir)/doltcompile \
	$(builddir)/doltlibtool \
	$(srcdir)/aconfig.h.in \
	$(srcdir)/Source/autotools/config.* \
	$(srcdir)/Source/autotools/compile \
	$(srcdir)/Source/autotools/depcomp \
	$(srcdir)/Source/autotools/install-sh \
	$(srcdir)/Source/autotools/missing \
	$(srcdir)/configure \
	$(srcdir)/GNUmakefile.in \
	$(srcdir)/INSTALL \
	$(srcdir)/README \
	$(top_builddir)/config.*

# Older automake versions (1.7) place Plo files in a different place so we need
# to create the output directory manually.
all-local: stamp-po
	$(mkdir_p) $(top_builddir)/$(DEPDIR)/DerivedSources

# remove built sources and program directories
clean-local:
	-rm -rf $(GENPROGRAMS)

maintainer-clean-local: distclean-local
distclean-local:
	-rm -rf $(GENSOURCES) $(GENPROGRAMS)
