# GNU Makefile for third party libraries used by MuPDF
#
# If thirdparty libraries are supplied, they will be built as
# static libraries.
#
# Use 'git submodule init' and 'git submodule update' to check
# out the thirdparty libraries from git.

FREETYPE_DIR := thirdparty/freetype
HARFBUZZ_DIR := thirdparty/harfbuzz
JBIG2DEC_DIR := thirdparty/jbig2dec
JPEGXR_DIR := thirdparty/jpegxr
LCMS2_DIR := thirdparty/lcms2
LIBJPEG_DIR := thirdparty/libjpeg
LURATECH_DIR := thirdparty/luratech
MUJS_DIR := thirdparty/mujs
OPENJPEG_DIR := thirdparty/openjpeg/src/lib/openjp2
ZLIB_DIR := thirdparty/zlib

CURL_DIR := thirdparty/curl
GLFW_DIR := thirdparty/glfw

# --- MuJS ---

ifneq "$(wildcard $(MUJS_DIR)/README)" ""

MUJS_OUT := $(OUT)/thirdparty/mujs
MUJS_SRC := one.c

MUJS_OBJ := $(addprefix $(MUJS_OUT)/, $(MUJS_SRC:%.c=%.o))

$(MUJS_OUT)/one.o: $(wildcard $(MUJS_DIR)/js*.c $(MUJS_DIR)/utf*.c $(MUJS_DIR)/regex.c $(MUJS_DIR)/*.h)

$(MUJS_OUT):
	$(MKDIR_CMD)
$(MUJS_OUT)/%.o: $(MUJS_DIR)/%.c | $(MUJS_OUT)
	$(CC_CMD)

MUJS_CFLAGS := -I$(MUJS_DIR)

else

MUJS_CFLAGS := -DFZ_ENABLE_JS=0

endif

# --- FreeType 2 ---

ifneq "$(wildcard $(FREETYPE_DIR)/README)" ""

FREETYPE_OUT := $(OUT)/thirdparty/freetype
FREETYPE_SRC := \
	ftbase.c \
	ftbbox.c \
	ftbitmap.c \
	ftdebug.c \
	ftfntfmt.c \
	ftgasp.c \
	ftglyph.c \
	ftinit.c \
	ftstroke.c \
	ftsynth.c \
	ftsystem.c \
	fttype1.c \
	cff.c \
	psaux.c \
	pshinter.c \
	psnames.c \
	raster.c \
	sfnt.c \
	smooth.c \
	truetype.c \
	type1.c \
	type1cid.c \

FREETYPE_OBJ := $(addprefix $(FREETYPE_OUT)/, $(FREETYPE_SRC:%.c=%.o))

$(FREETYPE_OUT):
	$(MKDIR_CMD)

FT_CFLAGS := -DFT2_BUILD_LIBRARY -DDARWIN_NO_CARBON \
	'-DFT_CONFIG_MODULES_H="slimftmodules.h"' \
	'-DFT_CONFIG_OPTIONS_H="slimftoptions.h"'

$(FREETYPE_OUT)/%.o: $(FREETYPE_DIR)/src/base/%.c	| $(FREETYPE_OUT)
	$(CC_CMD) $(FT_CFLAGS)
$(FREETYPE_OUT)/%.o: $(FREETYPE_DIR)/src/cff/%.c	| $(FREETYPE_OUT)
	$(CC_CMD) $(FT_CFLAGS)
$(FREETYPE_OUT)/%.o: $(FREETYPE_DIR)/src/cid/%.c	| $(FREETYPE_OUT)
	$(CC_CMD) $(FT_CFLAGS)
$(FREETYPE_OUT)/%.o: $(FREETYPE_DIR)/src/psaux/%.c	| $(FREETYPE_OUT)
	$(CC_CMD) $(FT_CFLAGS)
$(FREETYPE_OUT)/%.o: $(FREETYPE_DIR)/src/pshinter/%.c	| $(FREETYPE_OUT)
	$(CC_CMD) $(FT_CFLAGS)
$(FREETYPE_OUT)/%.o: $(FREETYPE_DIR)/src/psnames/%.c	| $(FREETYPE_OUT)
	$(CC_CMD) $(FT_CFLAGS)
$(FREETYPE_OUT)/%.o: $(FREETYPE_DIR)/src/raster/%.c	| $(FREETYPE_OUT)
	$(CC_CMD) $(FT_CFLAGS)
$(FREETYPE_OUT)/%.o: $(FREETYPE_DIR)/src/smooth/%.c	| $(FREETYPE_OUT)
	$(CC_CMD) $(FT_CFLAGS)
$(FREETYPE_OUT)/%.o: $(FREETYPE_DIR)/src/sfnt/%.c	| $(FREETYPE_OUT)
	$(CC_CMD) $(FT_CFLAGS)
$(FREETYPE_OUT)/%.o: $(FREETYPE_DIR)/src/truetype/%.c	| $(FREETYPE_OUT)
	$(CC_CMD) $(FT_CFLAGS)
$(FREETYPE_OUT)/%.o: $(FREETYPE_DIR)/src/type1/%.c	| $(FREETYPE_OUT)
	$(CC_CMD) $(FT_CFLAGS)

FREETYPE_CFLAGS := -Iscripts/freetype -I$(FREETYPE_DIR)/include
else
FREETYPE_CFLAGS := $(SYS_FREETYPE_CFLAGS)
FREETYPE_LIBS := $(SYS_FREETYPE_LIBS)
endif

# --- HarfBuzz ---

ifneq "$(wildcard $(HARFBUZZ_DIR)/README)" ""

HARFBUZZ_OUT := $(OUT)/thirdparty/harfbuzz
HARFBUZZ_SRC := \
	hb-blob.cc \
	hb-buffer.cc \
	hb-buffer-serialize.cc \
	hb-common.cc \
	hb-face.cc \
	hb-fallback-shape.cc \
	hb-font.cc \
	hb-ft.cc \
	hb-ot-font.cc \
	hb-ot-layout.cc \
	hb-ot-map.cc \
	hb-ot-shape-complex-arabic.cc \
	hb-ot-shape-complex-default.cc \
	hb-ot-shape-complex-hangul.cc \
	hb-ot-shape-complex-hebrew.cc \
	hb-ot-shape-complex-indic-table.cc \
	hb-ot-shape-complex-indic.cc \
	hb-ot-shape-complex-myanmar.cc \
	hb-ot-shape-complex-thai.cc \
	hb-ot-shape-complex-tibetan.cc \
	hb-ot-shape-complex-use-table.cc \
	hb-ot-shape-complex-use.cc \
	hb-ot-shape-fallback.cc \
	hb-ot-shape-normalize.cc \
	hb-ot-shape.cc \
	hb-ot-tag.cc \
	hb-set.cc \
	hb-shape-plan.cc \
	hb-shape.cc \
	hb-shaper.cc \
	hb-ucdn.cc \
	hb-unicode.cc \
	hb-warning.cc

#	hb-coretext.cc
#	hb-directwrite.cc
#	hb-glib.cc
#	hb-gobject-structs.cc
#	hb-graphite2.cc
#	hb-icu.cc
#	hb-uniscribe.cc

HARFBUZZ_OBJ := $(addprefix $(HARFBUZZ_OUT)/, $(HARFBUZZ_SRC:%.cc=%.o))

$(HARFBUZZ_OUT):
	$(MKDIR_CMD)
$(HARFBUZZ_OUT)/%.o: $(HARFBUZZ_DIR)/src/%.cc | $(HARFBUZZ_OUT)
	$(CC_CMD) -DHAVE_OT -DHAVE_UCDN -DHB_NO_MT $(FREETYPE_CFLAGS) \
		-Dhb_malloc_impl=fz_hb_malloc -Dhb_calloc_impl=fz_hb_calloc \
		-Dhb_free_impl=fz_hb_free -Dhb_realloc_impl=fz_hb_realloc \
		-fno-rtti -fno-exceptions -fvisibility-inlines-hidden --std=c++0x

HARFBUZZ_CFLAGS := -I$(HARFBUZZ_DIR)/src
else
HARFBUZZ_CFLAGS := $(SYS_HARFBUZZ_CFLAGS)
HARFBUZZ_LIBS := $(SYS_HARFBUZZ_LIBS)
endif

# --- LURATECH ---

ifneq "$(wildcard $(LURATECH_DIR)/ldf_jb2)$(wildcard $(LURATECH_DIR)/lwf_jp2)" ""

LURATECH_OUT := $(OUT)/thirdparty/luratech
LURATECH_SRC := \
	jb2_adt_cache.c \
	jb2_adt_decoder_halftone_region.c \
	jb2_adt_encoder_text_region.c \
	jb2_adt_huffman_tree.c \
	jb2_adt_symbol_instance.c \
	jb2_adt_context_ref_encoder.c \
	jb2_adt_context_ref_buffer.c \
	jb2_adt_context_ref_encoder.c \
	jb2_adt_mq_encoder.c \
	jb2_adt_decoder_text_region.c \
	jb2_adt_huffman_table_user_defined.c \
	jb2_adt_mmr_tables.c \
	jb2_adt_huffman_table_symbol.c \
	jb2_adt_component.c \
	jb2_adt_context_buffer.c \
	jb2_adt_context_decoder.c \
	jb2_adt_context_encoder.c \
	jb2_adt_context_ref_decoder.c \
	jb2_adt_decoder_collective_bitmap.c \
	jb2_adt_decoder_generic_region.c \
	jb2_adt_decoder_pattern_dict.c \
	jb2_adt_decoder_symbol_dict.c \
	jb2_adt_encoder_symbol_dict.c \
	jb2_adt_external_cache.c \
	jb2_adt_file.c \
	jb2_adt_file_extras.c \
	jb2_adt_handle_document.c \
	jb2_adt_huffman_decoder.c \
	jb2_adt_huffman_encoder.c \
	jb2_adt_huffman_table.c \
	jb2_adt_huffman_table_standard.c \
	jb2_adt_location.c \
	jb2_adt_memory.c \
	jb2_adt_message.c \
	jb2_adt_mmr_decoder.c \
	jb2_adt_mq_decoder.c \
	jb2_adt_mq_encoder.c \
	jb2_adt_mq_state.c \
	jb2_adt_pattern_dict.c \
	jb2_adt_pdf_file.c \
	jb2_adt_pdf_stream.c \
	jb2_adt_props_decompress.c \
	jb2_adt_read_bit_buffer.c \
	jb2_adt_read_data.c \
	jb2_adt_render_common.c \
	jb2_adt_render_generic_region.c \
	jb2_adt_render_halftone_region.c \
	jb2_adt_render_text_region.c \
	jb2_adt_run_array.c \
	jb2_adt_segment_array.c \
	jb2_adt_segment.c \
	jb2_adt_segment_end_of_stripe.c \
	jb2_adt_segment_generic_region.c \
	jb2_adt_segment_halftone_region.c \
	jb2_adt_segment_page_info.c \
	jb2_adt_segment_pattern_dict.c \
	jb2_adt_segment_region.c \
	jb2_adt_segment_symbol_dict.c \
	jb2_adt_segment_table.c \
	jb2_adt_segment_text_region.c \
	jb2_adt_segment_types.c \
	jb2_adt_stack.c \
	jb2_adt_symbol.c \
	jb2_adt_symbol_dict.c \
	jb2_adt_symbol_unify.c \
	jb2_adt_write_bits.c \
	jb2_adt_write_data.c \
	jb2_adt_write_pdf.c \
	jb2_common.c \
	jb2_license_dummy.c \
	jp2_adt_band_array.c \
	jp2_adt_band_buffer.c \
	jp2_adt_block_array.c \
	jp2_adt_cache.c \
	jp2_adt_comp.c \
	jp2_adt_component_array.c \
	jp2_adt_decomp.c \
	jp2_adt_ebcot_decoder.c \
	jp2_adt_external_cache.c \
	jp2_adt_image.c \
	jp2_adt_memory.c \
	jp2_adt_mq_decoder.c \
	jp2_adt_mq_state.c \
	jp2_adt_packet_decoder.c \
	jp2_adt_precinct_array.c \
	jp2_adt_rate.c \
	jp2_adt_rate_list.c \
	jp2_adt_read_bits.c \
	jp2_adt_read_data.c \
	jp2_adt_reader_requirements.c \
	jp2_adt_resolution_array.c \
	jp2_adt_tile_array.c \
	jp2_adt_tlm_marker_array.c \
	jp2_adt_write_data.c \
	jp2_buffer.c \
	jp2c_code_cb.c \
	jp2c_coder.c \
	jp2c_codestream.c \
	jp2c_file_format.c \
	jp2c_format.c \
	jp2c_memory.c \
	jp2_code_cb.c \
	jp2_common.c \
	jp2c_progression.c \
	jp2c_quant.c \
	jp2c_wavelet.c \
	jp2c_wavelet_lifting.c \
	jp2c_weights.c \
	jp2c_write.c \
	jp2d_codestream.c \
	jp2d_decoder.c \
	jp2d_file_format.c \
	jp2d_format.c \
	jp2d_image.c \
	jp2d_memory.c \
	jp2d_partial_decoding.c \
	jp2d_progression.c \
	jp2d_quant.c \
	jp2d_scale.c \
	jp2d_wavelet.c \
	jp2d_wavelet_lifting.c \
	jp2d_write.c \
	jp2_icc.c \
	jp2_license.c \
	jp2_packet.c \
	jp2_tag_tree.c

LURATECH_OBJ := $(addprefix $(LURATECH_OUT)/, $(LURATECH_SRC:%.c=%.o))

$(LURATECH_OUT):
	$(MKDIR_CMD)
$(LURATECH_OUT)/%.o: $(LURATECH_DIR)/ldf_jb2/source/common/%.c | $(LURATECH_OUT)
	$(CC_CMD) \
		-I$(LURATECH_DIR)/ldf_jb2/source/common \
		-DLINUX
$(LURATECH_OUT)/%.o: $(LURATECH_DIR)/ldf_jb2/source/compress/%.c | $(LURATECH_OUT)
	$(CC_CMD) \
		-I$(LURATECH_DIR)/ldf_jb2/source/common \
		-DLINUX
$(LURATECH_OUT)/%.o: $(LURATECH_DIR)/lwf_jp2/library/source/%.c | $(LURATECH_OUT)
	$(CC_CMD) \
		-I$(LURATECH_DIR)/ldf_jb2/source/common \
		-DLINUX

LURATECH_CFLAGS := \
-I$(LURATECH_DIR)/ldf_jb2/source/common \
	-I$(LURATECH_DIR)/ldf_jb2/source/libraries \
	-I$(LURATECH_DIR)/ldf_jb2/source/compress \
	-I$(LURATECH_DIR)/lwf_jp2/library/source \
	-DHAVE_LURATECH

else # --- LURATECH ---

# --- JBIG2DEC ---

ifneq "$(wildcard $(JBIG2DEC_DIR)/README)" ""

JBIG2DEC_OUT := $(OUT)/thirdparty/jbig2dec
JBIG2DEC_SRC := \
	jbig2.c \
	jbig2_arith.c \
	jbig2_arith_iaid.c \
	jbig2_arith_int.c \
	jbig2_generic.c \
	jbig2_halftone.c \
	jbig2_huffman.c \
	jbig2_image.c \
	jbig2_metadata.c \
	jbig2_mmr.c \
	jbig2_page.c \
	jbig2_refinement.c \
	jbig2_segment.c \
	jbig2_symbol_dict.c \
	jbig2_text.c

JBIG2DEC_OBJ := $(addprefix $(JBIG2DEC_OUT)/, $(JBIG2DEC_SRC:%.c=%.o))

$(JBIG2DEC_OUT):
	$(MKDIR_CMD)
$(JBIG2DEC_OUT)/%.o: $(JBIG2DEC_DIR)/%.c | $(JBIG2DEC_OUT)
	$(CC_CMD) -DHAVE_STDINT_H -DJBIG_EXTERNAL_MEMENTO_H=\"mupdf/memento.h\"

JBIG2DEC_CFLAGS := -I$(JBIG2DEC_DIR)
else
JBIG2DEC_CFLAGS := $(SYS_JBIG2DEC_CFLAGS)
JBIG2DEC_LIBS := $(SYS_JBIG2DEC_LIBS)
endif

# --- OpenJPEG ---

ifneq "$(wildcard $(OPENJPEG_DIR)/openjpeg.h)" ""

OPENJPEG_OUT := $(OUT)/thirdparty/openjpeg
OPENJPEG_SRC := \
	bio.c \
	cidx_manager.c \
	cio.c \
	dwt.c \
	event.c \
	function_list.c \
	image.c \
	invert.c \
	j2k.c \
	jp2.c \
	mct.c \
	mqc.c \
	openjpeg.c \
	phix_manager.c \
	pi.c \
	ppix_manager.c \
	raw.c \
	t1.c \
	t2.c \
	tcd.c \
	tgt.c \
	thix_manager.c \
	tpix_manager.c \
	thread.c

OPENJPEG_OBJ := $(addprefix $(OPENJPEG_OUT)/, $(OPENJPEG_SRC:%.c=%.o))

$(OPENJPEG_OUT):
	$(MKDIR_CMD)
$(OPENJPEG_OUT)/%.o: $(OPENJPEG_DIR)/%.c | $(OPENJPEG_OUT)
	$(CC_CMD) -DOPJ_STATIC -DOPJ_HAVE_STDINT_H -DOPJ_HAVE_INTTYPES_H -DUSE_JPIP

OPENJPEG_CFLAGS += -I$(OPENJPEG_DIR)
else
OPENJPEG_CFLAGS := $(SYS_OPENJPEG_CFLAGS)
OPENJPEG_LIBS := $(SYS_OPENJPEG_LIBS)
endif

endif # --- LURATECH ---

# --- JPEG library from IJG ---

ifneq "$(wildcard $(LIBJPEG_DIR)/README)" ""

LIBJPEG_OUT := $(OUT)/thirdparty/libjpeg
LIBJPEG_SRC := \
	jaricom.c \
	jcomapi.c \
	jdapimin.c \
	jdapistd.c \
	jdarith.c \
	jdatadst.c \
	jdatasrc.c \
	jdcoefct.c \
	jdcolor.c \
	jddctmgr.c \
	jdhuff.c \
	jdinput.c \
	jdmainct.c \
	jdmarker.c \
	jdmaster.c \
	jdmerge.c \
	jdpostct.c \
	jdsample.c \
	jdtrans.c \
	jerror.c \
	jfdctflt.c \
	jfdctfst.c \
	jfdctint.c \
	jidctflt.c \
	jidctfst.c \
	jidctint.c \
	jmemmgr.c \
	jquant1.c \
	jquant2.c \
	jutils.c \

LIBJPEG_OBJ := $(addprefix $(LIBJPEG_OUT)/, $(LIBJPEG_SRC:%.c=%.o))

$(LIBJPEG_OUT):
	$(MKDIR_CMD)
$(LIBJPEG_OUT)/%.o: $(LIBJPEG_DIR)/%.c | $(LIBJPEG_OUT)
	$(CC_CMD) -Dmain=xxxmain

LIBJPEG_CFLAGS := -Iscripts/libjpeg -I$(LIBJPEG_DIR)
else
LIBJPEG_CFLAGS := $(SYS_LIBJPEG_CFLAGS) -DSHARE_JPEG
LIBJPEG_LIBS := $(SYS_LIBJPEG_LIBS)
endif

# --- jpegxr ---

ifneq "$(wildcard $(JPEGXR_DIR)/T835E.pdf)" ""

JPEGXR_OUT := $(OUT)/thirdparty/jpegxr
JPEGXR_SRC := \
	algo.c \
	api.c \
	flags.c \
	init.c \
	io.c \
	cr_parse.c \
	jpegxr_pixelformat.c \
	r_parse.c \
	r_strip.c \
	r_tile_spatial.c \
	r_tile_frequency.c \
	x_strip.c

JPEGXR_OBJ := $(addprefix $(JPEGXR_OUT)/, $(JPEGXR_SRC:%.c=%.o))

$(JPEGXR_OUT):
	$(MKDIR_CMD)

$(JPEGXR_OUT)/%.o: $(JPEGXR_DIR)/Software/%.c | $(JPEGXR_OUT)
	$(CC_CMD) $(JPEGXR_CFLAGS)

JPEGXR_CFLAGS := \
	-I$(JPEGXR_DIR) \
	-I$(JPEGXR_DIR)/Software \
	-DHAVE_JPEGXR

endif

# --- ZLIB ---

ifneq "$(wildcard $(ZLIB_DIR)/README)" ""

ZLIB_OUT := $(OUT)/thirdparty/zlib
ZLIB_SRC := \
	adler32.c \
	compress.c \
	crc32.c \
	deflate.c \
	inffast.c \
	inflate.c \
	inftrees.c \
	trees.c \
	uncompr.c \
	zutil.c \
	gzlib.c \
	gzwrite.c \
	gzclose.c \
	gzread.c \

ZLIB_OBJ := $(addprefix $(ZLIB_OUT)/, $(ZLIB_SRC:%.c=%.o))

$(ZLIB_OUT):
	$(MKDIR_CMD)
$(ZLIB_OUT)/%.o: $(ZLIB_DIR)/%.c | $(ZLIB_OUT)
	$(CC_CMD) -Dverbose=-1 -DHAVE_UNISTD_H -DHAVE_STDARG_H

ZLIB_CFLAGS := -I$(ZLIB_DIR)
else
ZLIB_CFLAGS := $(SYS_ZLIB_CFLAGS)
ZLIB_LIBS := $(SYS_ZLIB_LIBS)
endif

# --- LCMS2 ---

ifneq "$(wildcard $(LCMS2_DIR)/INSTALL)" ""

LCMS2_OUT := $(OUT)/lcms2
LCMS2_SRC := \
	cmsalpha.c \
	cmscam02.c \
	cmscgats.c \
	cmscnvrt.c \
	cmserr.c \
	cmsgamma.c \
	cmsgmt.c \
	cmshalf.c \
	cmsintrp.c \
	cmsio0.c \
	cmsio1.c \
	cmslut.c \
	cmsmd5.c \
	cmsmtrx.c \
	cmsnamed.c \
	cmsopt.c \
	cmspack.c \
	cmspcs.c \
	cmsplugin.c \
	cmsps2.c \
	cmssamp.c \
	cmssm.c \
	cmstypes.c \
	cmsvirt.c \
	cmswtpnt.c \
	cmsxform.c \

LCMS2_OBJ := $(addprefix $(LCMS2_OUT)/, $(LCMS2_SRC:%.c=%.o))

$(LCMS2_OUT):
	$(MKDIR_CMD)
$(LCMS2_OUT)/%.o: $(LCMS2_DIR)/src/%.c | $(LCMS2_OUT)
	$(CC_CMD) -I$(LCMS2_DIR)/include

LCMS2_CFLAGS := -I$(LCMS2_DIR)/include
else
LCMS2_CFLAGS := $(SYS_LCMS2_CFLAGS)
LCMS2_LIBS := $(SYS_LCMS2_LIBS)
endif

# --- cURL ---

ifneq "$(wildcard $(CURL_DIR)/README)" ""

CURL_LIB := $(OUT)/libcurl.a
CURL_OUT := $(OUT)/thirdparty/curl
CURL_SRC := \
	base64.c \
	conncache.c \
	connect.c \
	content_encoding.c \
	curl_addrinfo.c \
	dotdot.c \
	easy.c \
	escape.c \
	fileinfo.c \
	formdata.c \
	getenv.c \
	getinfo.c \
	hash.c \
	hostcheck.c \
	hostip4.c \
	hostip.c \
	hostsyn.c \
	http.c \
	http_chunks.c \
	if2ip.c \
	llist.c \
	mprintf.c \
	multi.c \
	netrc.c \
	nonblock.c \
	openssl.c \
	parsedate.c \
	pipeline.c \
	progress.c \
	select.c \
	sendf.c \
	share.c \
	slist.c \
	speedcheck.c \
	splay.c \
	strcase.c \
	strdup.c \
	strerror.c \
	timeval.c \
	transfer.c \
	url.c \
	version.c \
	vtls.c \
	warnless.c \
	wildcard.c

$(CURL_LIB): $(addprefix $(CURL_OUT)/, $(CURL_SRC:%.c=%.o))

$(CURL_OUT):
	$(MKDIR_CMD)

CRL_CFLAGS := -DHAVE_CONFIG_H -DBUILDING_LIBCURL -DCURL_STATICLIB \
	-DCURL_DISABLE_LDAP -I$(CURL_DIR)/include -I$(CURL_DIR)/lib
ifeq "$(HAVE_OPENSSL_SSL)" "yes"
CRL_CFLAGS += -DUSE_OPENSSL
endif

$(CURL_OUT)/%.o: $(CURL_DIR)/lib/%.c	| $(CURL_OUT)
	$(CC_CMD) $(CRL_CFLAGS)

$(CURL_OUT)/%.o: $(CURL_DIR)/lib/vtls/%.c	| $(CURL_OUT)
	$(CC_CMD) $(CRL_CFLAGS)

CURL_CFLAGS := -I$(CURL_DIR)/include
CURL_LIBS := $(SYS_CURL_DEPS)

HAVE_CURL := yes

else ifeq "$(HAVE_CURL)" "yes"
CURL_CFLAGS := $(SYS_CURL_CFLAGS)
CURL_LIBS := $(SYS_CURL_LIBS)
endif

# --- GLFW ---

ifneq "$(wildcard $(GLFW_DIR)/README.md)" ""

GLFW_LIB := $(OUT)/libglfw.a
GLFW_OUT := $(OUT)/thirdparty/glfw

ifeq "$(OS)" "MACOS"

GLFW_SRC := \
	cocoa_init.m \
	cocoa_joystick.m \
	cocoa_monitor.m \
	cocoa_time.c \
	cocoa_window.m \
	context.c \
	init.c \
	input.c \
	monitor.c \
	nsgl_context.m \
	posix_tls.c \
	vulkan.c \
	window.c

$(GLFW_OUT)/%.o: $(GLFW_DIR)/src/%.m | $(GLFW_OUT)
	$(CC_CMD) -D_GLFW_COCOA -D_GLFW_USE_MENUBAR -D_GLFW_USE_RETINA -Wno-deprecated-declarations
$(GLFW_OUT)/%.o: $(GLFW_DIR)/src/%.c | $(GLFW_OUT)
	$(CC_CMD) -D_GLFW_COCOA -D_GLFW_USE_MENUBAR -D_GLFW_USE_RETINA

GLFW_OBJ := $(addprefix $(GLFW_OUT)/, $(GLFW_SRC))
GLFW_OBJ := $(GLFW_OBJ:%.c=%.o)
GLFW_OBJ := $(GLFW_OBJ:%.m=%.o)

$(GLFW_LIB): $(GLFW_OBJ)
GLFW_LIBS := -framework OpenGL -framework IOKit -framework CoreVideo -framework Cocoa

else

GLFW_SRC := \
	context.c \
	egl_context.c \
	glx_context.c \
	init.c \
	input.c \
	linux_joystick.c \
	monitor.c \
	posix_time.c \
	posix_tls.c \
	vulkan.c \
	window.c \
	x11_init.c \
	x11_monitor.c \
	x11_window.c \
	xkb_unicode.c

$(GLFW_OUT)/%.o: $(GLFW_DIR)/src/%.c | $(GLFW_OUT)
	$(CC_CMD) -D_GLFW_X11
$(GLFW_LIB): $(addprefix $(GLFW_OUT)/, $(GLFW_SRC:%.c=%.o))
GLFW_LIBS := -lGL -ldl -lX11 -lXcursor -lXrandr -lXinerama -lpthread

endif

GLFW_CFLAGS := -I$(GLFW_DIR)/include
$(GLFW_OUT):
	$(MKDIR_CMD)

GLFW_SRC_UNUSED := \
	mir_init.c \
	mir_monitor.c \
	mir_window.c \
	wgl_context.c \
	win32_init.c \
	win32_joystick.c \
	win32_monitor.c \
	win32_time.c \
	win32_tls.c \
	win32_window.c \
	wl_init.c \
	wl_monitor.c \
	wl_window.c \

HAVE_GLFW := yes

else ifeq "$(HAVE_GLFW)" "yes"
GLFW_CFLAGS := $(SYS_GLFW_CFLAGS)
GLFW_LIBS := $(SYS_GLFW_LIBS)
endif

# --- X11 ---

ifeq "$(HAVE_X11)" "yes"
X11_CFLAGS := $(SYS_X11_CFLAGS)
X11_LIBS := $(SYS_X11_LIBS)
endif

# --- OpenSSL ---

ifeq "$(HAVE_LIBCRYPTO)" "yes"
LIBCRYPTO_CFLAGS := $(SYS_LIBCRYPTO_CFLAGS)
LIBCRYPTO_LIBS := $(SYS_LIBCRYPTO_LIBS)
endif

# --- pthread ---

ifneq "$(threading)" "no"
ifeq "$(HAVE_PTHREAD)" "yes"
THREADING_CFLAGS := $(SYS_PTHREAD_CFLAGS) -DHAVE_PTHREAD
THREADING_LIBS := $(SYS_PTHREAD_LIBS)
endif
endif