Index: CMakeLists.txt
===================================================================
--- CMakeLists.txt	(revisión: 11095)
+++ CMakeLists.txt	(copia de trabajo)
@@ -196,6 +196,10 @@
 	else ()
 		target_link_libraries(simutrans PRIVATE PkgConfig::Freetype)
 	endif ()
+	if (SIMUTRANS_USE_FONTCONFIG)
+		target_compile_definitions(simutrans PRIVATE USE_FONTCONFIG=1)
+		target_link_libraries(simutrans PRIVATE Fontconfig::Fontconfig)
+	endif ()
 	target_compile_definitions(simutrans PRIVATE USE_FREETYPE=1)
 endif (SIMUTRANS_USE_FREETYPE)
 
Index: cmake/SimutransCompileOptions.cmake
===================================================================
--- cmake/SimutransCompileOptions.cmake	(revisión: 11095)
+++ cmake/SimutransCompileOptions.cmake	(copia de trabajo)
@@ -39,6 +39,10 @@
 	option(SIMUTRANS_USE_FLUIDSYNTH_MIDI "Enable FluidSynth for MIDI playback" ON)
 endif (FluidSynth_FOUND AND NOT WIN32)
 
+if(Fontconfig_FOUND)
+	option(SIMUTRANS_USE_FONTCONFIG "Use Fontconfig for font autodetection" ON)
+endif()
+
 option(SIMUTRANS_INSTALL_PAK64 "Download pak64 on install" OFF)
 option(SIMUTRANS_ENABLE_PROFILING "Enable profiling code" OFF)
 option(SIMUTRANS_USE_SYSLOG "Enable logging to syslog" OFF)
Index: cmake/SimutransFindDependencies.cmake
===================================================================
--- cmake/SimutransFindDependencies.cmake	(revisión: 11095)
+++ cmake/SimutransFindDependencies.cmake	(copia de trabajo)
@@ -4,6 +4,7 @@
 	find_package(BZip2 REQUIRED)
 	find_package(PNG REQUIRED)
 	find_package(MiniUPNP)
+	find_package(Fontconfig)
 	if (MSVC)
 		find_package(ZSTD)
 		find_package(SDL2)
Index: src/simutrans/sys/simsys.cc
===================================================================
--- src/simutrans/sys/simsys.cc	(revisión: 11095)
+++ src/simutrans/sys/simsys.cc	(copia de trabajo)
@@ -54,6 +54,10 @@
 #	endif
 #endif
 
+#ifdef USE_FONTCONFIG
+#include <fontconfig/fontconfig.h>
+#endif
+
 #ifdef MULTI_THREAD
 #include <pthread.h>
 #endif
@@ -722,6 +726,29 @@
 	return (std::string)winDir + std::string(wsFontFile.begin(), wsFontFile.end());
 #elif defined(ANDROID)
 	return FONT_PATH_X "Roboto-Regular.ttf";
+#elif defined(USE_FONTCONFIG)
+	std::string fontFile = FONT_PATH_X "cyr.bdf";
+	FcInit();
+	FcConfig* config = FcInitLoadConfigAndFonts();
+	FcPattern* pat = FcNameParse((const FcChar8*)"Sans");
+	FcConfigSubstitute(config, pat, FcMatchPattern);
+	FcDefaultSubstitute(pat);
+
+	FcResult result;
+	FcPattern* font = FcFontMatch(config, pat, &result);
+
+	if (font) {
+		FcChar8* file = NULL; 
+
+		if (  FcPatternGetString(font, FC_FILE, 0, &file) == FcResultMatch  ) {
+			fontFile = (char*)file;
+		}
+	}
+	FcPatternDestroy(font);
+	FcPatternDestroy(pat);
+	FcConfigDestroy(config);
+	FcFini();
+	return fontFile;
 #else
 	return FONT_PATH_X "cyr.bdf";
 #endif
