include(${CMAKE_CURRENT_SOURCE_DIR}/../../max-sdk-base/script/max-pretarget.cmake)

#############################################################
# MAX EXTERNAL : s2m.wacomtouch (v1.3 - Max 9 / macOS Tahoe)
#############################################################

include_directories(
	"${MAX_SDK_INCLUDES}"
	"${MAX_SDK_MSP_INCLUDES}"
	"${MAX_SDK_JIT_INCLUDES}"
)

set(PROJECT_SRC "${CMAKE_CURRENT_SOURCE_DIR}/s2m.wacomtouch.c")

if (WIN32)
	# the Wacom Feel SDK dynamic-loading shim is Windows-only
	list(APPEND PROJECT_SRC "${CMAKE_CURRENT_SOURCE_DIR}/Wacom_Feel_SDK/src/cpp/WacomMultiTouch.cpp")
endif ()

add_library(
	${PROJECT_NAME}
	MODULE
	${PROJECT_SRC}
)

if (APPLE)
	# Link (weakly) against the WacomMultiTouch framework.
	# At link time we use the copy bundled in ./Frameworks ;
	# at run time, dyld resolves it to /Library/Frameworks/WacomMultiTouch.framework
	# (its install name), which is installed by the Wacom driver.
	# Weak linking lets the external load even when the driver is absent,
	# so we can print a friendly error instead of failing with a dyld error.
	set(WACOM_FRAMEWORK_SEARCH_PATHS
		"${CMAKE_CURRENT_SOURCE_DIR}/Frameworks"
		"/Library/Frameworks"
	)
	foreach (fw_path ${WACOM_FRAMEWORK_SEARCH_PATHS})
		if (EXISTS "${fw_path}/WacomMultiTouch.framework")
			set(WACOM_FRAMEWORK_DIR "${fw_path}")
			break()
		endif ()
	endforeach ()
	if (NOT WACOM_FRAMEWORK_DIR)
		message(FATAL_ERROR "WacomMultiTouch.framework not found. Install the Wacom driver or put a copy of the framework in sources/Frameworks/")
	endif ()

	target_compile_options(${PROJECT_NAME} PRIVATE "-F${WACOM_FRAMEWORK_DIR}")
	target_link_options(${PROJECT_NAME} PRIVATE
		"-F${WACOM_FRAMEWORK_DIR}"
		"LINKER:-weak_framework,WacomMultiTouch"
	)
endif ()

include(${CMAKE_CURRENT_SOURCE_DIR}/../../max-sdk-base/script/max-posttarget.cmake)
