# 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
#
# global_cppflags   = CPPFLAGS that apply to JSC, WebCore, and to any
#                     specific port
# global_cflags     = CFLAGS that apply to JSC, WebCore, and to
#                     any specific port
# global_cxxflags   = CXXFLAGS that apply to JSC, WebCore, and to any
#                     specific port

srcdir = @srcdir@
VPATH = @srcdir@

# Directory for autogenerated sources
GENSOURCES := $(top_builddir)/DerivedSources
GENPROGRAMS := $(top_builddir)/Programs

# Script for creating hash tables
CREATE_HASH_TABLE = $(srcdir)/JavaScriptCore/create_hash_table

# Libraries and support components
bin_PROGRAMS :=

noinst_PROGRAMS :=

noinst_HEADERS :=

lib_LIBRARIES :=

IDL_BINDINGS :=

# Global flags to CPP
global_cppflags :=

global_cppflags += \
	-DWTF_USE_ICU_UNICODE=1

# Default compiler flags
global_cflags := \
	-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

global_cxxflags := \
	$(SYMBOL_VISIBILITY_INLINES) \
	-fno-rtti

if !ENABLE_DEBUG
global_cflags += \
	$(SYMBOL_VISIBILITY)
endif

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

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

# Shared libraries
lib_LTLIBRARIES = \
	libwebkit-1.0.la

# Convenience libraries
noinst_LTLIBRARIES = \
	libJavaScriptCore.la \
	libWebCore.la

#
# JavaScriptCore
javascriptcore_h_api :=
javascriptcore_cppflags:=
javascriptcore_sources :=
javascriptcore_built_sources :=
javascriptcore_built_nosources :=
javascriptcore_dist :=

javascriptcore_cppflags += \
	-I$(srcdir)/JavaScriptCore \
	-I$(srcdir)/JavaScriptCore/ForwardingHeaders \
	-I$(srcdir)/JavaScriptCore/parser \
	-I$(srcdir)/JavaScriptCore/wtf \
	-I$(top_builddir)/DerivedSources

# The variables above are already included below so no need to touch
# these variables unless you really have to
nodist_EXTRA_libJavaScriptCore_la_SOURCES = \
	$(javascriptcore_built_nosources)

nodist_libJavaScriptCore_la_SOURCES = \
	$(javascriptcore_built_sources)

libJavaScriptCore_ladir = $(prefix)/include/webkit-1.0/JavaScriptCore
libJavaScriptCore_la_HEADERS = $(javascriptcore_h_api)

libJavaScriptCore_la_SOURCES = \
	$(javascriptcore_sources)

libJavaScriptCore_la_LIBADD = \
	$(UNICODE_LIBS) \
	$(GLIB_LIBS) \
	-lpthread

libJavaScriptCore_la_CXXFLAGS = \
	$(global_cxxflags) \
	$(libJavaScriptCore_la_CFLAGS)

libJavaScriptCore_la_CFLAGS = \
	-fstrict-aliasing \
	-O3 \
	$(global_cflags) \
	$(GLIB_CFLAGS) \
	$(UNICODE_CFLAGS)

libJavaScriptCore_la_CPPFLAGS = \
	$(global_cppflags) \
	$(javascriptcore_cppflags)

#
# WebCore
webcore_cppflags :=
webcore_sources :=
webcore_libadd :=
webcore_built_sources :=
webcore_built_nosources :=
webcore_dist :=
webcoregtk_cppflags :=
webcoregtk_sources :=

nodist_EXTRA_libWebCore_la_SOURCES = \
	$(webcore_built_nosources)

nodist_libWebCore_la_SOURCES = \
	$(webcore_built_sources)

libWebCore_la_SOURCES = \
	$(webcore_sources) \
	$(webcoregtk_sources)

libWebCore_la_CXXFLAGS = \
	$(global_cxxflags) \
	$(libWebCore_la_CFLAGS)

libWebCore_la_CFLAGS = \
	-fno-strict-aliasing \
	$(global_cflags) \
	$(GLIB_CFLAGS) \
	$(UNICODE_CFLAGS) \
	$(LIBXML_CFLAGS) \
	$(CAIRO_CFLAGS) \
	$(PANGO_CFLAGS) \
	$(GTK_CFLAGS) \
	$(XT_CFLAGS) \
	$(LIBCURL_CFLAGS) \
	$(LIBSOUP_CFLAGS) \
	$(FREETYPE_CFLAGS) \
	$(SQLITE3_CFLAGS) \
	$(GSTREAMER_CFLAGS) \
	$(LIBXSLT_CFLAGS) \
	$(COVERAGE_CFLAGS) \
	$(HILDON_CFLAGS) \
	$(GEOCLUE_CFLAGS)

libWebCore_la_CPPFLAGS = \
	$(global_cppflags) \
	$(webcore_cppflags) \
	$(javascriptcore_cppflags) \
	$(webcoregtk_cppflags) \
	$(HILDON_CPPFLAGS)

libWebCore_la_LIBADD = \
	libJavaScriptCore.la \
	libWebCoreJS.la \
	$(webcore_libadd) \
	$(GLIB_LIBS) \
	$(LIBXML_LIBS) \
	$(CAIRO_LIBS) \
	$(PANGO_LIBS) \
	$(GTK_LIBS) \
	$(XT_LIBS) \
	$(LIBCURL_LIBS) \
	$(LIBSOUP_LIBS) \
	$(FREETYPE_LIBS) \
	$(UNICODE_LIBS) \
	$(SQLITE3_LIBS) \
	$(GSTREAMER_LIBS) \
	$(LIBXSLT_LIBS) \
	$(HILDON_LIBS) \
	$(JPEG_LIBS) \
	$(PNG_LIBS) \
	$(GEOCLUE_LIBS) \
	-lpthread

# WebKit
webkitgtk_h_api :=
webkitgtk_sources :=
webkitgtk_cppflags :=
webkitgtk_built_sources :=
webkitgtk_built_nosources :=
webkitgtk_cleanfiles :=

nodist_libwebkit_1_0_la_SOURCES = \
	$(webkitgtk_built_sources)

libwebkit_1_0_ladir = $(prefix)/include/webkit-1.0/webkit
libwebkit_1_0_la_HEADERS = \
	$(webkitgtk_h_api) \
	WebKit/gtk/webkit/webkitenumtypes.h

libwebkit_1_0_la_SOURCES = \
	$(webkitgtk_sources)

libwebkit_1_0_la_CXXFLAGS = \
	$(libWebCore_la_CXXFLAGS)

libwebkit_1_0_la_CFLAGS = \
	$(libWebCore_la_CFLAGS)

libwebkit_1_0_la_CPPFLAGS = \
	$(libWebCore_la_CPPFLAGS) \
	$(webkitgtk_cppflags)

libwebkit_1_0_la_LDFLAGS = \
	$(COVERAGE_LDFLAGS) \
	-version-info @LIBWEBKITGTK_VERSION@ \
	$(version_script) \
	$(no_undefined)

libwebkit_1_0_la_LIBADD = \
	libWebCore.la

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

if !ENABLE_FAST_MALLOC
global_cppflags += \
	-DUSE_SYSTEM_MALLOC
endif

if TARGET_X11
global_cppflags += -DXP_UNIX
endif

if !ENABLE_DEBUG
global_cppflags += -DNDEBUG
else
webcoregtk_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_DATABASE
global_cppflags += -DENABLE_DATABASE=0
endif

if !ENABLE_ICONDATABASE
global_cppflags += -DENABLE_ICONDATABASE=0
endif

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

if ENABLE_VIDEO
webcore_libadd += -lgstinterfaces-0.10 -lgstvideo-0.10
endif

webkitgtk_h_api += \
	WebKit/gtk/webkit/webkit.h \
	WebKit/gtk/webkit/webkitdefines.h \
	WebKit/gtk/webkit/webkitnetworkrequest.h \
	WebKit/gtk/webkit/webkitversion.h \
	WebKit/gtk/webkit/webkitwebbackforwardlist.h \
	WebKit/gtk/webkit/webkitwebframe.h \
	WebKit/gtk/webkit/webkitwebhistoryitem.h \
	WebKit/gtk/webkit/webkitwebinspector.h \
	WebKit/gtk/webkit/webkitwebnavigationaction.h \
	WebKit/gtk/webkit/webkitwebpolicydecision.h \
	WebKit/gtk/webkit/webkitwebsettings.h \
	WebKit/gtk/webkit/webkitwebwindowfeatures.h \
	WebKit/gtk/webkit/webkitwebview.h

webkitgtk_built_sources += \
	DerivedSources/webkitenumtypes.cpp \
	DerivedSources/webkitmarshal.cpp \
	DerivedSources/webkitmarshal.h \
	WebKit/gtk/webkit/webkitenumtypes.h

webkitgtk_sources += \
	WebKit/gtk/WebCoreSupport/ChromeClientGtk.cpp \
	WebKit/gtk/WebCoreSupport/ChromeClientGtk.h \
	WebKit/gtk/WebCoreSupport/ContextMenuClientGtk.cpp \
	WebKit/gtk/WebCoreSupport/ContextMenuClientGtk.h \
	WebKit/gtk/WebCoreSupport/DragClientGtk.cpp \
	WebKit/gtk/WebCoreSupport/DragClientGtk.h \
	WebKit/gtk/WebCoreSupport/EditorClientGtk.cpp \
	WebKit/gtk/WebCoreSupport/EditorClientGtk.h \
	WebKit/gtk/WebCoreSupport/FrameLoaderClientGtk.cpp \
	WebKit/gtk/WebCoreSupport/FrameLoaderClientGtk.h \
	WebKit/gtk/WebCoreSupport/InspectorClientGtk.cpp \
	WebKit/gtk/WebCoreSupport/InspectorClientGtk.h \
	WebKit/gtk/WebCoreSupport/PasteboardHelperGtk.cpp \
	WebKit/gtk/WebCoreSupport/PasteboardHelperGtk.h \
	WebKit/gtk/webkit/webkitnetworkrequest.cpp \
	WebKit/gtk/webkit/webkitprivate.cpp \
	WebKit/gtk/webkit/webkitprivate.h \
	WebKit/gtk/webkit/webkitversion.cpp \
	WebKit/gtk/webkit/webkitwebbackforwardlist.cpp \
	WebKit/gtk/webkit/webkitwebframe.cpp \
	WebKit/gtk/webkit/webkitwebhistoryitem.cpp \
	WebKit/gtk/webkit/webkitwebinspector.cpp \
	WebKit/gtk/webkit/webkitwebnavigationaction.cpp \
	WebKit/gtk/webkit/webkitwebpolicydecision.cpp \
	WebKit/gtk/webkit/webkitwebsettings.cpp \
	WebKit/gtk/webkit/webkitwebview.cpp \
	WebKit/gtk/webkit/webkitwebwindowfeatures.cpp

webkitgtk_cppflags += \
	-DBUILDING_WEBKIT \
	-I$(srcdir)/WebKit/gtk \
	-I$(srcdir)/WebKit/gtk/WebCoreSupport \
	-I$(srcdir)/WebKit/gtk/webkit \
	-I$(top_builddir)/WebKit/gtk/webkit

webkitgtk_cleanfiles += \
	$(top_builddir)/Programs/GtkLauncher \
	$(top_builddir)/WebKit/gtk/webkit-1.0.pc \
	$(top_builddir)/WebKit/gtk/webkit/webkitenumtypes.h

pkgconfigdir = $(libdir)/pkgconfig
pkgconfig_DATA = WebKit/gtk/webkit-1.0.pc

stamp_files := \
	stamp-webkitmarshal.cpp \
	stamp-webkitmarshal.h \
	stamp-webkitenumtypes.cpp \
	stamp-webkitenumtypes.h

WEBKIT_MARSHAL = $(GENSOURCES)/webkitmarshal
WEBKIT_MARSHAL_LIST = $(WEBKIT_MARSHAL).list

$(WEBKIT_MARSHAL_LIST): $(webkitgtk_sources) GNUmakefile.am
	( cd $(top_srcdir) && \
	sed -n -e 's/.*webkit_marshal_\([[:upper:][:digit:]]*__[[:upper:][:digit:]_]*\).*/\1/p' \
	$(webkitgtk_sources) ) \
	| sed -e 's/__/:/' -e 'y/_/,/' | sort -u > $@.tmp
	if cmp -s $@.tmp $@; then \
		rm $@.tmp; \
	else \
		mv $@.tmp $@; \
	fi

$(WEBKIT_MARSHAL).cpp: stamp-webkitmarshal.cpp
	@true

$(WEBKIT_MARSHAL).h: stamp-webkitmarshal.h
	@true

stamp-webkitmarshal.cpp: $(WEBKIT_MARSHAL_LIST)
	echo "extern \"C\" {" > $(WEBKIT_MARSHAL).cpp && \
	$(GLIB_GENMARSHAL) --prefix=webkit_marshal $(WEBKIT_MARSHAL_LIST) --body >> $(WEBKIT_MARSHAL).cpp && echo '}' >> $(WEBKIT_MARSHAL).cpp && \
	echo timestamp > $(@F)

stamp-webkitmarshal.h: $(WEBKIT_MARSHAL_LIST)
	$(GLIB_GENMARSHAL) --prefix=webkit_marshal $(WEBKIT_MARSHAL_LIST) --header > $(WEBKIT_MARSHAL).h && \
	echo timestamp > $(@F)

WebKit/gtk/webkit/webkitenumtypes.h: stamp-webkitenumtypes.h
	@true
stamp-webkitenumtypes.h: $(webkitgtk_h_api) GNUmakefile
	(cd $(srcdir) \
	&& glib-mkenums \
			--fhead "#ifndef WEBKIT_ENUM_TYPES_H\n" \
			--fhead "#define WEBKIT_ENUM_TYPES_H\n\n" \
			--fhead "#include <glib-object.h>\n\n" \
			--fhead "#include <webkit/webkitdefines.h>\n\n" \
			--fhead "G_BEGIN_DECLS\n\n" \
			--ftail "G_END_DECLS\n\n" \
			--ftail "#endif\n" \
			--fprod "#include <@filename@>\n\n" \
			--eprod "#define WEBKIT_TYPE_@ENUMSHORT@ @enum_name@_get_type()\n\n" \
			--eprod "WEBKIT_API GType\n@enum_name@_get_type(void);\n\n" \
		$(webkitgtk_h_api) | \
		sed 's,WebKit/gtk/,,' | \
		sed 's,web_kit,webkit,' | \
		sed 's,WEBKIT_TYPE_KIT,WEBKIT_TYPE,' \
		) > xgen-gth \
	&& (cmp -s xgen-gth WebKit/gtk/webkit/webkitenumtypes.h || cp xgen-gth WebKit/gtk/webkit/webkitenumtypes.h) \
	&& rm -f xgen-gth \
	&& echo timestamp > $(@F)

DerivedSources/webkitenumtypes.cpp: $(webkitgtk_h_api) GNUmakefile
	(cd $(srcdir) \
	&& glib-mkenums \
			--fhead "#include <config.h>\n" \
			--fhead "#include <glib-object.h>\n" \
			--fhead "#include \"$(top_builddir)/WebKit/gtk/webkit/webkitenumtypes.h\"\n\n" \
			--fhead "extern \"C\" {\n\n" \
			--fprod "\n/* enumerations from \"@filename@\" */" \
			--vhead "static const G@Type@Value _@enum_name@_values[] = {" \
			--vprod "    { @VALUENAME@, \"@VALUENAME@\", \"@valuenick@\" }," \
			--vtail "    { 0, NULL, NULL }\n};\n\n" \
			--vtail "GType @enum_name@_get_type(void)\n{\n" \
			--vtail "    static GType type = 0;\n\n" \
			--vtail "    if (!type)\n" \
			--vtail "        type = g_@type@_register_static(\"@EnumName@\", _@enum_name@_values);\n\n" \
			--vtail "    return type;\n}\n\n" \
			--ftail "}\n" \
		$(webkitgtk_h_api) | \
		sed 's,web_kit,webkit,' \
		) > xgen-gtc \
	&& cp xgen-gtc $@ \
	&& rm -f xgen-gtc

# END WEBKIT GTK+
#
# Files that will be distributed
EXTRA_DIST = \
	WebKit/LICENSE \
	$(javascriptcore_dist) \
	$(webcore_dist) \
	symbols.filter

# Files that will be cleaned
MAINTAINERCLEANFILES := $(stamp_files) $(BUILT_SOURCES)
DISTCLEANFILES := $(stamp_files) $(BUILT_SOURCES) doltcompile doltlibtool
CLEANFILES := $(stamp_files) $(BUILT_SOURCES)

# Include module makefiles
include JavaScriptCore/GNUmakefile.am
include WebCore/GNUmakefile.am
include WebKitTools/GNUmakefile.am

# Build unit test
noinst_PROGRAMS += Programs/UnitTests
Programs_UnitTests_CPPFLAGS = \
	-I$(srcdir)/WebKit/gtk \
	-I$(top_builddir)/WebKit/gtk \
	$(global_cppflags) \
	$(javascriptcore_cppflags)

Programs_UnitTests_SOURCES = \
	WebKit/gtk/tests/main.c

Programs_UnitTests_CFLAGS = \
	-fno-strict-aliasing \
	-O2 \
	$(global_cflags) \
	$(GLIB_CFLAGS) \
	$(GTK_CFLAGS)

Programs_UnitTests_LDADD = \
	libwebkit-1.0.la \
	$(GTK_LIBS)

# Autogenerated sources
BUILT_SOURCES := \
	$(javascriptcore_built_sources) \
	$(javascriptcore_built_nosources) \
	$(webcore_built_sources) \
	$(webcore_built_nosources) \
	$(webkitgtk_built_sources) \
	$(webkitgtk_built_nosources)

# Project-wide clean rules
CLEANFILES += \
	$(webkitgtk_cleanfiles)

MAINTAINERCLEANFILES += \
	$(srcdir)/aconfig.h.in \
	configure \
	config.* \
	GNUmakefile.in \
	INSTALL \
	README

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

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