# libdom for MontaukOS
#
# Upstream: https://github.com/netsurf-browser/libdom (official mirror of
# git.netsurf-browser.org; submodule at upstream/, pinned, no local patches).
#
# DOM implementation. Depends on libparserutils, libwapcaplet and libhubbub,
# all of which must already be in the ports sysroot -- libdom finds the latter
# two through pkg-config (REQUIRED_PKGS), which is why the library ports
# publish .pc files into sysroot/lib/pkgconfig.
#
# Bindings come from libdom's checked-in Makefile.config, which defaults the
# expat AND hubbub bindings to yes. Those are plain `:=` assignments, so
# passing the variables on the sub-make command line overrides them without
# patching upstream or dropping a Makefile.config.override into the submodule:
#   WITH_HUBBUB_BINDING=yes   how NetSurf feeds HTML into the DOM; required.
#   WITH_EXPAT_BINDING=no     defaults to YES upstream and must be turned off
#                             -- it needs <expat.h>, which MontaukOS has no
#                             port of, and NetSurf does not use it.
#   WITH_LIBXML_BINDING       already no in their config; set explicitly so a
#                             future upstream flip cannot surprise us.
#
# Needs perl on the BUILD host.

UPSTREAM := upstream

PORT_NAME        := libdom
PORT_LIB         := 1
PORT_DEPENDS     := libparserutils libwapcaplet libhubbub
PORT_ARCHIVE     := libdom.a
PORT_PC_IN       := $(UPSTREAM)/libdom.pc.in
PORT_PC_VERSION  := 0.4.2
PORT_HEADER_ROOT := $(UPSTREAM)/include
PORT_HEADERS     := $(shell find $(UPSTREAM)/include -name '*.h' 2>/dev/null)

# libdom.pc.in already names -ldom itself, so its LIBRARIES placeholder is for
# the dependencies the enabled bindings pull in -- here, the hubbub binding.
PORT_PC_LIBS := -lhubbub -lparserutils -lwapcaplet

include ../../mk/port.mk

NS_MAKE_ARGS_EXTRA := \
    WITH_HUBBUB_BINDING=yes \
    WITH_EXPAT_BINDING=no \
    WITH_LIBXML_BINDING=no

# The hubbub binding's public headers live under bindings/, not include/, and
# upstream installs them to include/dom/bindings/hubbub/ (see
# bindings/hubbub/Makefile). PORT_HEADERS only walks include/, so stage these
# explicitly -- NetSurf's content/handlers/html includes dom/bindings/hubbub/parser.h.
BINDING_HDRS := \
    $(PORT_SYSROOT_INC)/dom/bindings/hubbub/parser.h \
    $(PORT_SYSROOT_INC)/dom/bindings/hubbub/errors.h

$(PORT_SYSROOT_INC)/dom/bindings/hubbub/%.h: $(UPSTREAM)/bindings/hubbub/%.h
	@mkdir -p $(dir $@)
	cp $< $@

install-lib: $(BINDING_HDRS)

.PHONY: all clean
all: install-lib

$(PORT_ARCHIVE): $(shell find $(UPSTREAM)/src $(UPSTREAM)/bindings $(UPSTREAM)/include -name '*.c' -o -name '*.h' 2>/dev/null)
	$(call ns_build,$(UPSTREAM),dom)

clean: clean-lib
	@$(call ns_clean,$(UPSTREAM))
	rm -rf $(UPSTREAM)/$(NS_BUILDDIR)
