@@ -70,7 +70,6 @@ target_sources(llui
7070 llsearcheditor.cpp
7171 llslider.cpp
7272 llsliderctrl.cpp
73- llspellcheck.cpp
7473 llspinctrl.cpp
7574 llstatbar.cpp
7675 llstatgraph.cpp
@@ -190,6 +189,7 @@ target_sources(llui
190189 llsliderctrl.h
191190 llslider.h
192191 llspellcheck.h
192+ llspellcheckengine.h
193193 llspellcheckmenuhandler.h
194194 llspinctrl.h
195195 llstatbar.h
@@ -234,6 +234,20 @@ target_sources(llui
234234 llxyvector.h
235235 )
236236
237+ # Spell checking: the backend-agnostic LLSpellChecker core (llspellcheck.cpp) is always compiled;
238+ # exactly one platform engine is selected by build option — native macOS NSSpellChecker
239+ # (Objective-C++), native Windows Spell Checking API, or Hunspell (default).
240+ target_sources (llui PRIVATE llspellcheck.cpp )
241+ if (USE_NSSPELLCHECKER)
242+ target_sources (llui PRIVATE llspellcheckengine_mac.mm )
243+ set_source_files_properties (llspellcheckengine_mac.mm PROPERTIES SKIP_PRECOMPILE_HEADERS TRUE )
244+ elseif (USE_WINSPELLCHECK)
245+ target_sources (llui PRIVATE llspellcheckengine_win32.cpp )
246+ set_source_files_properties (llspellcheckengine_win32.cpp PROPERTIES SKIP_PRECOMPILE_HEADERS TRUE )
247+ else ()
248+ target_sources (llui PRIVATE llspellcheckengine_hunspell.cpp )
249+ endif ()
250+
237251SET (llurlentry_TEST_DEPENDENCIES
238252 llurlmatch.cpp
239253 llurlregistry.cpp
@@ -259,14 +273,28 @@ target_link_libraries(llui
259273 llxml
260274 llmath
261275 llcommon
262- ll::hunspell
263276 )
264277
278+ if (USE_NSSPELLCHECKER)
279+ target_link_libraries (llui PUBLIC ll::nsspellchecker )
280+ elseif (USE_WINSPELLCHECK)
281+ target_link_libraries (llui PUBLIC ll::winspellcheck )
282+ else ()
283+ target_link_libraries (llui PUBLIC ll::hunspell )
284+ endif ()
285+
265286target_precompile_headers (llui REUSE_FROM llprecompiled )
266287
267288# Add tests
268289if (BUILD_TESTING)
269- set (test_libs llmessage llcorehttp llxml llrender llcommon ll::hunspell)
290+ if (USE_NSSPELLCHECKER)
291+ set (spellcheck_lib ll::nsspellchecker)
292+ elseif (USE_WINSPELLCHECK)
293+ set (spellcheck_lib ll::winspellcheck)
294+ else ()
295+ set (spellcheck_lib ll::hunspell)
296+ endif ()
297+ set (test_libs llmessage llcorehttp llxml llrender llcommon ${spellcheck_lib} )
270298
271299 SET (llui_TEST_SOURCE_FILES
272300 llurlmatch.cpp
@@ -275,7 +303,7 @@ if(BUILD_TESTING)
275303 LL_ADD_PROJECT_UNIT_TESTS (llui "${llui_TEST_SOURCE_FILES} " )
276304
277305 # INTEGRATION TESTS
278- set (test_libs llui llmessage llcorehttp llxml llrender llcommon ll::hunspell )
306+ set (test_libs llui llmessage llcorehttp llxml llrender llcommon ${spellcheck_lib} )
279307 set (test_project llui)
280308 LL_ADD_INTEGRATION_TEST (llurlentry llurlentry.cpp "${test_libs} " "${test_project} " )
281309 LL_ADD_INTEGRATION_TEST (llemojidictionary llemojidictionary.cpp "${test_libs} " "${test_project} " )
0 commit comments