Procházet zdrojové kódy

Attempt to load unversioned library for compatibility with older installations

Games built against a new gamemode_client.h will fail to work with older
GameMode installations without this change. There are no ABI changes right
now so just attempt to load the old unversioned path if loading the
versioned one fails.
Alex Smith před 6 roky
rodič
revize
7051051f19
1 změnil soubory, kde provedl 12 přidání a 6 odebrání
  1. 12 6
      lib/gamemode_client.h

+ 12 - 6
lib/gamemode_client.h

@@ -154,12 +154,18 @@ __attribute__((always_inline)) static inline int internal_load_libgamemode(void)
 	/* Try and load libgamemode */
 	/* Try and load libgamemode */
 	libgamemode = dlopen("libgamemode.so.0", RTLD_NOW);
 	libgamemode = dlopen("libgamemode.so.0", RTLD_NOW);
 	if (!libgamemode) {
 	if (!libgamemode) {
-		snprintf(internal_gamemode_client_error_string,
-		         sizeof(internal_gamemode_client_error_string),
-		         "dylopen failed - %s",
-		         dlerror());
-		internal_libgamemode_loaded = -1;
-		return -1;
+		/* Attempt to load unversioned library for compatibility with older
+		 * versions (as of writing, there are no ABI changes between the two -
+		 * this may need to change if ever ABI-breaking changes are made) */
+		libgamemode = dlopen("libgamemode.so", RTLD_NOW);
+		if (!libgamemode) {
+			snprintf(internal_gamemode_client_error_string,
+			         sizeof(internal_gamemode_client_error_string),
+			         "dlopen failed - %s",
+			         dlerror());
+			internal_libgamemode_loaded = -1;
+			return -1;
+		}
 	}
 	}
 
 
 	/* Attempt to bind all symbols */
 	/* Attempt to bind all symbols */