# 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/kjs/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

global_cxxflags := \
	$(SYMBOL_VISIBILITY_INLINES)

if !ENABLE_DEBUG
global_cflags += \
	-fno-exceptions \
	$(SYMBOL_VISIBILITY)

global_cxxflags += \
	-fno-rtti
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

# 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/wtf \
	-I$(srcdir)/JavaScriptCore/kjs \
	-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) \
	$(GLOBALDEPS_LIBS) \
	-lpthread

libJavaScriptCore_la_CXXFLAGS = \
	-fstrict-aliasing \
	-O3 \
	$(global_cxxflags) \
	$(global_cflags) \
	$(GLOBALDEPS_CFLAGS) \
	$(UNICODE_CFLAGS)

libJavaScriptCore_la_CFLAGS = \
	-fstrict-aliasing \
	-O3 \
	$(global_cflags) \
	$(GLOBALDEPS_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_libWebCore_la_SOURCES = \
	$(webcore_built_sources)

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

libWebCore_la_CXXFLAGS = \
	-fno-strict-aliasing \
	-O2 \
	$(global_cxxflags) \
	$(global_cflags) \
	$(GLOBALDEPS_CFLAGS) \
	$(UNICODE_CFLAGS) \
	$(WEBKITDEPS_CFLAGS) \
	$(XT_CFLAGS) \
	$(LIBCURL_CFLAGS) \
	$(LIBSOUP_CFLAGS) \
	$(FREETYPE_CFLAGS) \
	$(SQLITE3_CFLAGS) \
	$(GSTREAMER_CFLAGS) \
	$(LIBXSLT_CFLAGS) \
	$(COVERAGE_CFLAGS) \
	$(HILDON_CFLAGS)

libWebCore_la_CFLAGS = \
	-fno-strict-aliasing \
	-O2 \
	$(global_cflags) \
	$(GLOBALDEPS_CFLAGS) \
	$(UNICODE_CFLAGS) \
	$(WEBKITDEPS_CFLAGS) \
	$(XT_CFLAGS) \
	$(LIBCURL_CFLAGS) \
	$(LIBSOUP_CFLAGS) \
	$(FREETYPE_CFLAGS) \
	$(SQLITE3_CFLAGS) \
	$(GSTREAMER_CFLAGS) \
	$(LIBXSLT_CFLAGS) \
	$(COVERAGE_CFLAGS) \
	$(HILDON_CFLAGS)

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

libWebCore_la_LIBADD = \
	libJavaScriptCore.la \
	$(webcore_libadd) \
	$(GLOBALDEPS_LIBS) \
	$(WEBKITDEPS_LIBS) \
	$(XT_LIBS) \
	$(LIBCURL_LIBS) \
	$(LIBSOUP_LIBS) \
	$(FREETYPE_LIBS) \
	$(UNICODE_LIBS) \
	$(SQLITE3_LIBS) \
	$(GSTREAMER_LIBS) \
	$(LIBXSLT_LIBS) \
	$(HILDON_LIBS) \
	$(JPEG_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@ \
	-Wl,--version-script,$(srcdir)/symbols.filter \
	$(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/webkitwebsettings.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/webkitwebsettings.cpp \
	WebKit/gtk/webkit/webkitwebview.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

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 = \
	$(javascriptcore_dist) \
	$(webcore_dist) \
	symbols.filter

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

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

# 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

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