From ac1cbfe85879365d5bb81fb28035a7c88fe90926 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Mon, 6 Jul 2020 07:55:55 +0200 Subject: [PATCH] Put this in separate .diff for now --- autoconfig.diff | 1591 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 1591 insertions(+) create mode 100644 autoconfig.diff diff --git a/autoconfig.diff b/autoconfig.diff new file mode 100644 index 0000000000..9ea446f0e0 --- /dev/null +++ b/autoconfig.diff @@ -0,0 +1,1591 @@ +diff --git a/Makefile.common b/Makefile.common +index 69ed7c2e99..e05cabba5e 100644 +--- a/Makefile.common ++++ b/Makefile.common +@@ -255,10 +255,16 @@ DEFINES += -DHAVE_REWIND + OBJ += managers/state_manager.o + endif + ++OBJ += gfx/drivers_font_renderer/bitmapfont.o ++ ++ifeq ($(HAVE_AUTOCONFIG), 1) ++defines += -DHAVE_AUTOCONFIG + OBJ += \ +- gfx/drivers_font_renderer/bitmapfont.o \ + tasks/task_autodetect.o \ +- input/input_autodetect_builtin.o \ ++ input/input_autodetect_builtin.o ++endif ++ ++OBJ += \ + input/input_keymaps.o \ + $(LIBRETRO_COMM_DIR)/queues/fifo_queue.o \ + $(LIBRETRO_COMM_DIR)/compat/compat_fnmatch.o \ +diff --git a/configuration.c b/configuration.c +index 062085d892..c6c647e777 100644 +--- a/configuration.c ++++ b/configuration.c +@@ -1325,8 +1325,10 @@ static struct config_path_setting *populate_settings_path( + settings->paths.directory_playlist, true, NULL, true); + SETTING_PATH("runtime_log_directory", + settings->paths.directory_runtime_log, true, NULL, true); ++#ifdef HAVE_AUTOCONFIG + SETTING_PATH("joypad_autoconfig_dir", + settings->paths.directory_autoconfig, false, NULL, true); ++#endif + SETTING_PATH("audio_filter_dir", + settings->paths.directory_audio_filter, true, NULL, true); + SETTING_PATH("savefile_directory", +@@ -1680,7 +1682,9 @@ static struct config_bool_setting *populate_settings_bool( + SETTING_BOOL("sort_savestates_enable", &settings->bools.sort_savestates_enable, true, default_sort_savestates_enable, false); + SETTING_BOOL("config_save_on_exit", &settings->bools.config_save_on_exit, true, DEFAULT_CONFIG_SAVE_ON_EXIT, false); + SETTING_BOOL("show_hidden_files", &settings->bools.show_hidden_files, true, DEFAULT_SHOW_HIDDEN_FILES, false); ++#ifdef HAVE_AUTOCONFIG + SETTING_BOOL("input_autodetect_enable", &settings->bools.input_autodetect_enable, true, input_autodetect_enable, false); ++#endif + SETTING_BOOL("audio_rate_control", &settings->bools.audio_rate_control, true, DEFAULT_RATE_CONTROL, false); + #ifdef HAVE_WASAPI + SETTING_BOOL("audio_wasapi_exclusive_mode", &settings->bools.audio_wasapi_exclusive_mode, true, DEFAULT_WASAPI_EXCLUSIVE_MODE, false); +@@ -2266,7 +2270,9 @@ void config_set_defaults(void *data) + #ifdef HAVE_CONFIGFILE + input_remapping_set_defaults(true); + #endif ++#ifdef HAVE_AUTOCONFIG + input_autoconfigure_reset(); ++#endif + + /* Verify that binds are in proper order. */ + for (i = 0; i < MAX_USERS; i++) +@@ -2322,7 +2328,9 @@ void config_set_defaults(void *data) + *settings->paths.directory_thumbnails = '\0'; + *settings->paths.directory_playlist = '\0'; + *settings->paths.directory_runtime_log = '\0'; ++#ifdef HAVE_AUTOCONFIG + *settings->paths.directory_autoconfig = '\0'; ++#endif + #ifdef HAVE_MENU + *settings->paths.directory_menu_content = '\0'; + *settings->paths.directory_menu_config = '\0'; +@@ -2488,10 +2496,12 @@ void config_set_defaults(void *data) + settings->paths.directory_menu_content, + g_defaults.dirs[DEFAULT_DIR_MENU_CONTENT]); + #endif ++#ifdef HAVE_AUTOCONFIG + if (!string_is_empty(g_defaults.dirs[DEFAULT_DIR_AUTOCONFIG])) + configuration_set_string(settings, + settings->paths.directory_autoconfig, + g_defaults.dirs[DEFAULT_DIR_AUTOCONFIG]); ++#endif + + if (!string_is_empty(g_defaults.dirs[DEFAULT_DIR_SAVESTATE])) + dir_set(RARCH_DIR_SAVESTATE, g_defaults.dirs[DEFAULT_DIR_SAVESTATE]); +@@ -3805,6 +3815,7 @@ static void video_driver_save_settings(config_file_t *conf) + global->console.screen.flicker_filter_index); + } + ++#ifdef HAVE_AUTOCONFIG + /** + * config_save_autoconf_profile: + * @path : Path that shall be written to. +@@ -3920,6 +3931,7 @@ bool config_save_autoconf_profile(const char *path, unsigned user) + free(autoconf_file); + return ret; + } ++#endif + + /** + * config_save_file: +diff --git a/configuration.h b/configuration.h +index 3d21ae781e..53d1d300d5 100644 +--- a/configuration.h ++++ b/configuration.h +@@ -135,7 +135,9 @@ typedef struct settings + + /* Input */ + bool input_remap_binds_enable; ++#ifdef HAVE_AUTOCONFIG + bool input_autodetect_enable; ++#endif + bool input_overlay_enable; + bool input_overlay_enable_autopreferred; + bool input_overlay_hide_in_menu; +@@ -720,7 +722,9 @@ typedef struct settings + char path_rgui_theme_preset[PATH_MAX_LENGTH]; + + char directory_audio_filter[PATH_MAX_LENGTH]; ++#ifdef HAVE_AUTOCONFIG + char directory_autoconfig[PATH_MAX_LENGTH]; ++#endif + char directory_video_filter[PATH_MAX_LENGTH]; + char directory_video_shader[PATH_MAX_LENGTH]; + char directory_content_history[PATH_MAX_LENGTH]; +@@ -884,6 +888,7 @@ bool config_unload_override(void); + bool config_load_remap(const char *directory_input_remapping, + void *data); + ++#ifdef HAVE_AUTOCONFIG + /** + * config_save_autoconf_profile: + * @path : Path that shall be written to. +@@ -891,6 +896,7 @@ bool config_load_remap(const char *directory_input_remapping, + * Writes a controller autoconf file to disk. + **/ + bool config_save_autoconf_profile(const char *path, unsigned user); ++#endif + + /** + * config_save_file: +diff --git a/file_path_special.c b/file_path_special.c +index b1057e5988..6f6d0b679e 100644 +--- a/file_path_special.c ++++ b/file_path_special.c +@@ -146,12 +146,14 @@ void fill_pathname_application_special(char *s, + switch (type) + { + case APPLICATION_SPECIAL_DIRECTORY_AUTOCONFIG: ++#ifdef HAVE_AUTOCONFIG + { + settings_t *settings = config_get_ptr(); + const char *dir_autoconfig = settings->paths.directory_autoconfig; + const char *joypad_driver = settings->arrays.input_joypad_driver; + fill_pathname_join(s, dir_autoconfig, joypad_driver, len); + } ++#endif + break; + case APPLICATION_SPECIAL_DIRECTORY_CONFIG: + { +diff --git a/input/drivers/android_input.c b/input/drivers/android_input.c +index e60ffaedcc..5c11956476 100644 +--- a/input/drivers/android_input.c ++++ b/input/drivers/android_input.c +@@ -1196,6 +1196,7 @@ static void handle_hotplug(android_input_t *android, + if (*port < 0) + *port = android->pads_connected; + ++#ifdef HAVE_AUTOCONFIG + input_autoconfigure_connect( + name_buf, + NULL, +@@ -1203,6 +1204,7 @@ static void handle_hotplug(android_input_t *android, + *port, + vendorId, + productId); ++#endif + + android->pad_states[android->pads_connected].id = id; + android->pad_states[android->pads_connected].port = *port; +diff --git a/input/drivers/psl1ght_input.c b/input/drivers/psl1ght_input.c +index 917a72311d..06398420b0 100644 +--- a/input/drivers/psl1ght_input.c ++++ b/input/drivers/psl1ght_input.c +@@ -382,18 +382,6 @@ static const char *ps3_joypad_name(unsigned pad) + return "SixAxis Controller"; + } + +-static void ps3_joypad_autodetect_add(unsigned autoconf_pad) +-{ +- input_autoconfigure_connect( +- ps3_joypad_name(autoconf_pad), +- NULL, +- ps3_joypad.ident, +- autoconf_pad, +- 0, +- 0 +- ); +-} +- + static bool ps3_joypad_init(void *data) + { + (void)data; +@@ -503,12 +491,23 @@ static void ps3_joypad_poll(void) + + if (!pads_connected[port] && padinfo.status[port]) + { +- ps3_joypad_autodetect_add(port); ++#ifdef HAVE_AUTOCONFIG ++ input_autoconfigure_connect( ++ ps3_joypad_name(port), ++ NULL, ++ ps3_joypad.ident, ++ port, ++ 0, ++ 0 ++ ); ++#endif + pads_connected[port] = 1; + } + else + { ++#ifdef HAVE_AUTOCONFIG + input_autoconfigure_disconnect(port, ps3_joypad.ident); ++#endif + pads_connected[port] = 0; + } + +diff --git a/input/drivers/qnx_input.c b/input/drivers/qnx_input.c +index 4cfdaa8670..9781332f06 100644 +--- a/input/drivers/qnx_input.c ++++ b/input/drivers/qnx_input.c +@@ -245,6 +245,7 @@ static void qnx_input_autodetect_gamepad(qnx_input_t *qnx, + { + controller->port = qnx->pads_connected; + ++#ifdef HAVE_AUTOCONFIG + input_autoconfigure_connect( + name_buf, + NULL, +@@ -252,6 +253,7 @@ static void qnx_input_autodetect_gamepad(qnx_input_t *qnx, + controller->port, + *controller->vid, + *controller->pid); ++#endif + + qnx->pads_connected++; + } +diff --git a/input/drivers_hid/iohidmanager_hid.c b/input/drivers_hid/iohidmanager_hid.c +index da2a99f16a..f340649365 100644 +--- a/input/drivers_hid/iohidmanager_hid.c ++++ b/input/drivers_hid/iohidmanager_hid.c +@@ -457,7 +457,9 @@ static void iohidmanager_hid_device_remove(void *data, + + if (hid && adapter && (adapter->slot < MAX_USERS)) + { ++#ifdef HAVE_AUTOCONFIG + input_autoconfigure_disconnect(adapter->slot, adapter->name); ++#endif + + hid->buttons[adapter->slot] = 0; + memset(hid->axes[adapter->slot], 0, sizeof(hid->axes)); +@@ -545,22 +547,6 @@ static void iohidmanager_hid_device_get_product_string( + CFStringGetCString(ref, buf, len, kCFStringEncodingUTF8); + } + +-static void iohidmanager_hid_device_add_autodetect(unsigned idx, +- const char *device_name, const char *driver_name, +- uint16_t dev_vid, uint16_t dev_pid) +-{ +- input_autoconfigure_connect( +- device_name, +- NULL, +- driver_name, +- idx, +- dev_vid, +- dev_pid +- ); +- +- RARCH_LOG("Port %d: %s.\n", idx, device_name); +-} +- + #if defined(__ppc__) || defined(__ppc64__) + static void iohidmanager_hid_device_add(IOHIDDeviceRef device, + iohidmanager_hid_t* hid) +@@ -873,8 +859,16 @@ static void iohidmanager_hid_device_add_device( + tmpButtons = next; + } + +- iohidmanager_hid_device_add_autodetect(adapter->slot, +- adapter->name, iohidmanager_hid.ident, dev_vid, dev_pid); ++#ifdef HAVE_AUTOCONFIG ++ input_autoconfigure_connect( ++ adapter->name, ++ NULL, ++ iohidmanager_hid.ident, ++ adapter->slot, ++ dev_vid, ++ dev_pid ++ ); ++#endif + + return; + +diff --git a/input/drivers_hid/libusb_hid.c b/input/drivers_hid/libusb_hid.c +index 97ae624260..2db8170c8c 100644 +--- a/input/drivers_hid/libusb_hid.c ++++ b/input/drivers_hid/libusb_hid.c +@@ -75,6 +75,7 @@ struct libusb_adapter + struct libusb_adapter *next; + }; + ++/* TODO/FIXME - static global variable */ + static struct libusb_adapter adapters; + + static void adapter_thread(void *data) +@@ -88,9 +89,9 @@ static void adapter_thread(void *data) + + while (!adapter->quitting) + { +- size_t send_command_size; + int tmp; + int report_number; ++ size_t send_command_size; + int size = 0; + + slock_lock(adapter->send_control_lock); +@@ -144,20 +145,6 @@ static void libusb_hid_device_send_control(void *data, + slock_unlock(adapter->send_control_lock); + } + +-static void libusb_hid_device_add_autodetect(unsigned idx, +- const char *device_name, const char *driver_name, +- uint16_t dev_vid, uint16_t dev_pid) +-{ +- input_autoconfigure_connect( +- device_name, +- NULL, +- driver_name, +- idx, +- dev_vid, +- dev_pid +- ); +-} +- + static void libusb_get_description(struct libusb_device *device, + struct libusb_adapter *adapter) + { +@@ -339,10 +326,18 @@ static int add_adapter(void *data, struct libusb_device *dev) + RARCH_LOG("Device 0x%p attached (VID/PID: %04x:%04x).\n", + adapter->device, desc.idVendor, desc.idProduct); + +- libusb_hid_device_add_autodetect(adapter->slot, +- device_name, libusb_hid.ident, desc.idVendor, desc.idProduct); ++#ifdef HAVE_AUTOCONFIG ++ input_autoconfigure_connect( ++ device_name, ++ NULL, ++ libusb_hid.ident, ++ adapter->slot, ++ desc.idVendor, ++ desc.idProduct ++ ); ++#endif + +- adapter->hid = hid; ++ adapter->hid = hid; + adapter->thread = sthread_create(adapter_thread, adapter); + + if (!adapter->thread) +@@ -382,7 +377,9 @@ static int remove_adapter(void *data, struct libusb_device *dev) + struct libusb_adapter *new_next = NULL; + const char *name = (const char*)adapter->next->name; + ++#ifdef HAVE_AUTOCONFIG + input_autoconfigure_disconnect(adapter->slot, name); ++#endif + + adapter->next->quitting = true; + sthread_join(adapter->next->thread); +diff --git a/input/drivers_hid/wiiusb_hid.c b/input/drivers_hid/wiiusb_hid.c +index 554cdc234d..7aa22c2698 100644 +--- a/input/drivers_hid/wiiusb_hid.c ++++ b/input/drivers_hid/wiiusb_hid.c +@@ -139,19 +139,6 @@ static void wiiusb_hid_device_send_control(void *data, + adapter->send_control_type = control_type; + } + +-static void wiiusb_hid_device_add_autodetect(unsigned idx, +- const char *device_name, const char *driver_name, +- uint16_t dev_vid, uint16_t dev_pid) +-{ +- input_autoconfigure_connect( +- device_name, +- NULL, +- driver_name, +- idx, +- dev_vid, +- dev_pid); +-} +- + static void wiiusb_get_description(usb_device_entry *device, + struct wiiusb_adapter *adapter, usb_devdesc *devdesc) + { +@@ -215,7 +202,9 @@ static int32_t wiiusb_hid_release_adapter(struct wiiusb_adapter *adapter) + hid = adapter->hid; + name = wiiusb_hid_joypad_name(hid, adapter->slot); + ++#ifdef HAVE_AUTOCONFIG + input_autoconfigure_disconnect(adapter->slot, name); ++#endif + + pad_connection_pad_deinit(&hid->connections[adapter->slot], adapter->slot); + +@@ -379,24 +368,45 @@ static int wiiusb_hid_add_adapter(void *data, usb_device_entry *dev) + if (isRetrodeGamepad(desc)) + { + /* Retrode port #1 */ +- RARCH_LOG("Interface Retrode1 gamepad slot: %d\n", adapter->slot); +- wiiusb_hid_device_add_autodetect(adapter->slot, device_name, wiiusb_hid.ident, desc.idVendor, desc.idProduct); ++#ifdef HAVE_AUTOCONFIG ++ input_autoconfigure_connect( ++ device_name, ++ NULL, ++ wiiusb_hid.ident, ++ adapter->slot, ++ desc.idVendor, ++ desc.idProduct); ++#endif + /* Retrode port #2, #3, #4 */ + for (i = 2; i <= 4; i++) + { + slot1 = pad_connection_pad_init(hid->connections, "hid", desc.idVendor, desc.idProduct, adapter, &wiiusb_hid); + if (slot1 == -1) + RARCH_LOG("No slot free for Retrode%d gamepad\n", i); ++#ifdef HAVE_AUTOCONFIG + else + { +- RARCH_LOG("Interface Retrode%d gamepad slot: %d\n", i, slot1); +- wiiusb_hid_device_add_autodetect(slot1, device_name, wiiusb_hid.ident, desc.idVendor, desc.idProduct); ++ input_autoconfigure_connect( ++ device_name, ++ NULL, ++ wiiusb_hid.ident, ++ slot1, ++ desc.idVendor, ++ desc.idProduct); + } ++#endif + } + } ++#ifdef HAVE_AUTOCONFIG + else +- wiiusb_hid_device_add_autodetect(adapter->slot, +- device_name, wiiusb_hid.ident, desc.idVendor, desc.idProduct); ++ input_autoconfigure_connect( ++ device_name, ++ NULL, ++ wiiusb_hid.ident, ++ adapter->slot, ++ desc.idVendor, ++ desc.idProduct); ++#endif + + USB_FreeDescriptors(&desc); + USB_DeviceRemovalNotifyAsync(adapter->handle, wiiusb_hid_removal_cb, adapter); +diff --git a/input/drivers_joypad/ctr_joypad.c b/input/drivers_joypad/ctr_joypad.c +index a66ea7be07..9f7ec1d944 100644 +--- a/input/drivers_joypad/ctr_joypad.c ++++ b/input/drivers_joypad/ctr_joypad.c +@@ -37,21 +37,18 @@ static const char *ctr_joypad_name(unsigned pad) + return "3DS Controller"; + } + +-static void ctr_joypad_autodetect_add(unsigned autoconf_pad) ++static bool ctr_joypad_init(void *data) + { ++#ifdef HAVE_AUTOCONFIG + input_autoconfigure_connect( +- ctr_joypad_name(autoconf_pad), ++ ctr_joypad_name(0), + NULL, + ctr_joypad.ident, +- autoconf_pad, ++ 0, + 0, + 0 + ); +-} +- +-static bool ctr_joypad_init(void *data) +-{ +- ctr_joypad_autodetect_add(0); ++#endif + + (void)data; + +diff --git a/input/drivers_joypad/dinput_joypad.c b/input/drivers_joypad/dinput_joypad.c +index d7fba8d1ca..4522032103 100644 +--- a/input/drivers_joypad/dinput_joypad.c ++++ b/input/drivers_joypad/dinput_joypad.c +@@ -310,6 +310,7 @@ static const char *dinput_joypad_name(unsigned pad) + return NULL; + } + ++#ifdef HAVE_AUTOCONFIG + static int32_t dinput_joypad_vid(unsigned pad) + { + return g_pads[pad].vid; +@@ -327,6 +328,7 @@ static const char *dinput_joypad_friendly_name(unsigned pad) + + return NULL; + } ++#endif + + static BOOL CALLBACK enum_joypad_cb(const DIDEVICEINSTANCE *inst, void *p) + { +@@ -396,6 +398,7 @@ static BOOL CALLBACK enum_joypad_cb(const DIDEVICEINSTANCE *inst, void *p) + + dinput_create_rumble_effects(&g_pads[g_joypad_cnt]); + ++#ifdef HAVE_AUTOCONFIG + #ifdef HAVE_XINPUT + if (!is_xinput_pad) + #endif +@@ -408,6 +411,7 @@ static BOOL CALLBACK enum_joypad_cb(const DIDEVICEINSTANCE *inst, void *p) + dinput_joypad_vid(g_joypad_cnt), + dinput_joypad_pid(g_joypad_cnt)); + } ++#endif + + #ifdef HAVE_XINPUT + enum_iteration_done: +@@ -627,7 +631,11 @@ static void dinput_joypad_poll(void) + sizeof(DIJOYSTATE2), &pad->joy_state); + + if (ret == DIERR_INPUTLOST || ret == DIERR_NOTACQUIRED) ++ { ++#ifdef HAVE_AUTOCONFIG + input_autoconfigure_disconnect(i, g_pads[i].joy_friendly_name); ++#endif ++ } + } + } + +diff --git a/input/drivers_joypad/dos_joypad.c b/input/drivers_joypad/dos_joypad.c +index 49b53be44a..c3bd738d53 100644 +--- a/input/drivers_joypad/dos_joypad.c ++++ b/input/drivers_joypad/dos_joypad.c +@@ -141,23 +141,20 @@ static const char *dos_joypad_name(unsigned pad) + return "DOS Controller"; + } + +-static void dos_joypad_autodetect_add(unsigned autoconf_pad) ++static bool dos_joypad_init(void *data) + { ++ hook_keyb_int(); ++ ++#ifdef HAVE_AUTOCONFIG + input_autoconfigure_connect( +- dos_joypad_name(autoconf_pad), ++ dos_joypad_name(0), + NULL, + dos_joypad.ident, +- autoconf_pad, ++ 0, + 0, + 0 + ); +-} +- +-static bool dos_joypad_init(void *data) +-{ +- hook_keyb_int(); +- +- dos_joypad_autodetect_add(0); ++#endif + + (void)data; + +diff --git a/input/drivers_joypad/gx_joypad.c b/input/drivers_joypad/gx_joypad.c +index be499fa45e..c371584e50 100644 +--- a/input/drivers_joypad/gx_joypad.c ++++ b/input/drivers_joypad/gx_joypad.c +@@ -205,6 +205,7 @@ static void handle_hotplug(unsigned port, uint32_t ptype) + { + pad_type[port] = ptype; + ++#ifdef HAVE_AUTOCONFIG + if (ptype != WPAD_EXP_NOCONTROLLER) + input_autoconfigure_connect( + gx_joypad_name(port), +@@ -214,6 +215,7 @@ static void handle_hotplug(unsigned port, uint32_t ptype) + 0, + 0 + ); ++#endif + } + + static void check_port0_active(uint8_t pad_count) +@@ -230,14 +232,16 @@ static void check_port0_active(uint8_t pad_count) + #endif + settings->uints.input_joypad_map[0] = 0; + ++#ifdef HAVE_AUTOCONFIG + input_autoconfigure_connect( + gx_joypad_name(0), + NULL, + gx_joypad.ident, +- 0, // port ++ 0, /* port */ + 0, + 0 + ); ++#endif + + input_config_set_device_name(0, gx_joypad_name(0)); + } +diff --git a/input/drivers_joypad/linuxraw_joypad.c b/input/drivers_joypad/linuxraw_joypad.c +index c43c50eae7..211ea486a5 100644 +--- a/input/drivers_joypad/linuxraw_joypad.c ++++ b/input/drivers_joypad/linuxraw_joypad.c +@@ -48,10 +48,13 @@ struct linuxraw_joypad + char *ident; + }; + ++/* TODO/FIXME - static global variables */ + static struct linuxraw_joypad linuxraw_pads[MAX_USERS]; + static int linuxraw_epoll = 0; + static int linuxraw_inotify = 0; ++#ifdef HAVE_AUTOCONFIG + static bool linuxraw_hotplug = false; ++#endif + + static void linuxraw_poll_pad(struct linuxraw_joypad *pad) + { +@@ -168,9 +171,11 @@ retry: + { + if (linuxraw_pads[idx].fd >= 0) + { ++#ifdef HAVE_AUTOCONFIG + if (linuxraw_hotplug) + input_autoconfigure_disconnect(idx, + linuxraw_pads[idx].ident); ++#endif + + close(linuxraw_pads[idx].fd); + linuxraw_pads[idx].buttons = 0; +@@ -179,6 +184,7 @@ retry: + linuxraw_pads[idx].fd = -1; + *linuxraw_pads[idx].ident = '\0'; + ++#ifdef HAVE_AUTOCONFIG + input_autoconfigure_connect( + NULL, + NULL, +@@ -186,6 +192,7 @@ retry: + idx, + 0, + 0); ++#endif + } + } + /* Sometimes, device will be created before +@@ -200,6 +207,8 @@ retry: + + if ( !string_is_empty(linuxraw_pads[idx].ident) + && linuxraw_joypad_init_pad(path, &linuxraw_pads[idx])) ++ { ++#ifdef HAVE_AUTOCONFIG + input_autoconfigure_connect( + linuxraw_pads[idx].ident, + NULL, +@@ -207,6 +216,8 @@ retry: + idx, + 0, + 0); ++#endif ++ } + } + } + } +@@ -238,6 +249,7 @@ static bool linuxraw_joypad_init(void *data) + + snprintf(path, sizeof(path), "/dev/input/js%u", i); + ++#ifdef HAVE_AUTOCONFIG + input_autoconfigure_connect( + pad->ident, + NULL, +@@ -245,6 +257,7 @@ static bool linuxraw_joypad_init(void *data) + i, + 0, + 0); ++#endif + + if (linuxraw_joypad_init_pad(path, pad)) + linuxraw_poll_pad(pad); +@@ -270,7 +283,9 @@ static bool linuxraw_joypad_init(void *data) + } + } + ++#ifdef HAVE_AUTOCONFIG + linuxraw_hotplug = true; ++#endif + + return true; + } +@@ -298,7 +313,9 @@ static void linuxraw_joypad_destroy(void) + close(linuxraw_epoll); + linuxraw_epoll = -1; + ++#ifdef HAVE_AUTOCONFIG + linuxraw_hotplug = false; ++#endif + } + + static bool linuxraw_joypad_button(unsigned port, uint16_t joykey) +diff --git a/input/drivers_joypad/mfi_joypad.m b/input/drivers_joypad/mfi_joypad.m +index bcbbee234d..2c6d5a517b 100644 +--- a/input/drivers_joypad/mfi_joypad.m ++++ b/input/drivers_joypad/mfi_joypad.m +@@ -222,11 +222,6 @@ static void apple_gamecontroller_joypad_register(GCGamepad *gamepad) + } + } + +-static void mfi_joypad_autodetect_add(unsigned autoconf_pad) +-{ +- input_autoconfigure_connect("mFi Controller", NULL, mfi_joypad.ident, autoconf_pad, 0, 0); +-} +- + static void apple_gamecontroller_joypad_connect(GCController *controller) + { + signed desired_index = (int32_t)controller.playerIndex; +@@ -284,7 +279,9 @@ static void apple_gamecontroller_joypad_connect(GCController *controller) + } + + apple_gamecontroller_joypad_register(controller.gamepad); +- mfi_joypad_autodetect_add(controller.playerIndex); ++#ifdef HAVE_AUTOCONFIG ++ input_autoconfigure_connect("mFi Controller", NULL, mfi_joypad.ident, controller.playerIndex, 0, 0); ++#endif + } + } + +@@ -299,7 +296,9 @@ static void apple_gamecontroller_joypad_disconnect(GCController* controller) + if ( [mfiControllers containsObject:controller] ) + { + [mfiControllers removeObject:controller]; ++#ifdef HAVE_AUTOCONFIG + input_autoconfigure_disconnect(pad, mfi_joypad.ident); ++#endif + } + } + +diff --git a/input/drivers_joypad/parport_joypad.c b/input/drivers_joypad/parport_joypad.c +index 44eeb6784b..83e401dde2 100644 +--- a/input/drivers_joypad/parport_joypad.c ++++ b/input/drivers_joypad/parport_joypad.c +@@ -300,6 +300,7 @@ static bool parport_joypad_init(void *data) + } + } + ++#ifdef HAVE_AUTOCONFIG + input_autoconfigure_connect( + "Generic Parallel Port device", + NULL, +@@ -308,6 +309,7 @@ static bool parport_joypad_init(void *data) + 0, + 0 + ); ++#endif + } + + return true; +diff --git a/input/drivers_joypad/ps2_joypad.c b/input/drivers_joypad/ps2_joypad.c +index 86ca6069af..aaf9b6537d 100644 +--- a/input/drivers_joypad/ps2_joypad.c ++++ b/input/drivers_joypad/ps2_joypad.c +@@ -65,12 +65,14 @@ static bool ps2_joypad_init(void *data) + + for (port = 0; port < DEFAULT_MAX_PADS; port++) + { ++#ifdef HAVE_AUTOCONFIG + input_autoconfigure_connect( ps2_joypad_name(port), + NULL, + ps2_joypad.ident, + port, + 0, + 0); ++#endif + + /* Port 0 -> Connector 1, Port 1 -> Connector 2 */ + if((ret = padPortOpen(port, PS2_PAD_SLOT, padBuf[port])) == 0) +diff --git a/input/drivers_joypad/ps3_joypad.c b/input/drivers_joypad/ps3_joypad.c +index b2847fee9e..f38b942b3a 100644 +--- a/input/drivers_joypad/ps3_joypad.c ++++ b/input/drivers_joypad/ps3_joypad.c +@@ -40,18 +40,6 @@ static const char *ps3_joypad_name(unsigned pad) + return "SixAxis Controller"; + } + +-static void ps3_joypad_autodetect_add(unsigned autoconf_pad) +-{ +- input_autoconfigure_connect( +- ps3_joypad_name(autoconf_pad), +- NULL, +- ps3_joypad.ident, +- autoconf_pad, +- 0, +- 0 +- ); +-} +- + static bool ps3_joypad_init(void *data) + { + (void)data; +@@ -139,13 +127,24 @@ static void ps3_joypad_poll(void) + { + if ( (pad_info.port_status[port] & CELL_PAD_STATUS_CONNECTED) == 0 ) + { ++#ifdef HAVE_AUTOCONFIG + input_autoconfigure_disconnect(port, ps3_joypad.ident); ++#endif + pads_connected[port] = 0; + } + else if ((pad_info.port_status[port] & CELL_PAD_STATUS_CONNECTED) > 0 ) + { + pads_connected[port] = 1; +- ps3_joypad_autodetect_add(port); ++#ifdef HAVE_AUTOCONFIG ++ input_autoconfigure_connect( ++ ps3_joypad_name(port), ++ NULL, ++ ps3_joypad.ident, ++ port, ++ 0, ++ 0 ++ ); ++#endif + } + } + +diff --git a/input/drivers_joypad/ps4_joypad.c b/input/drivers_joypad/ps4_joypad.c +index 08ef34bcd8..9e3567d4a0 100644 +--- a/input/drivers_joypad/ps4_joypad.c ++++ b/input/drivers_joypad/ps4_joypad.c +@@ -111,6 +111,7 @@ static bool ps4_joypad_init(void *data) + ds_joypad_states[num_players].connected = true; + ds_joypad_states[num_players].userId = userId; + ++#ifdef HAVE_AUTOCONFIG + input_autoconfigure_connect( + ps4_joypad_name(num_players), + NULL, +@@ -118,6 +119,7 @@ static bool ps4_joypad_init(void *data) + num_players, + 0, + 0); ++#endif + num_players++; + } + } +diff --git a/input/drivers_joypad/psp_joypad.c b/input/drivers_joypad/psp_joypad.c +index 1a6b7219fa..789535d8cc 100644 +--- a/input/drivers_joypad/psp_joypad.c ++++ b/input/drivers_joypad/psp_joypad.c +@@ -106,6 +106,7 @@ static bool psp_joypad_init(void *data) + memcpy(&old_ctrl_info, &curr_ctrl_info, sizeof(SceCtrlPortInfo)); + #endif + ++#ifdef HAVE_AUTOCONFIG + for (i = 0; i < players_count; i++) + input_autoconfigure_connect( + psp_joypad_name(i), +@@ -115,6 +116,7 @@ static bool psp_joypad_init(void *data) + 0, + 0 + ); ++#endif + + return true; + } +@@ -211,9 +213,12 @@ static void psp_joypad_poll(void) + curr_ctrl_info.port[player + 1] == SCE_CTRL_TYPE_UNPAIRED) + { + memset(&actuators[player], 0, sizeof(SceCtrlActuator)); ++#ifdef HAVE_AUTOCONFIG + input_autoconfigure_disconnect(player, psp_joypad.ident); ++#endif + } + ++#ifdef HAVE_AUTOCONFIG + if (old_ctrl_info.port[player + 1] == SCE_CTRL_TYPE_UNPAIRED && + curr_ctrl_info.port[player + 1] != SCE_CTRL_TYPE_UNPAIRED) + input_autoconfigure_connect( +@@ -224,6 +229,7 @@ static void psp_joypad_poll(void) + 0, + 0 + ); ++#endif + } + memcpy(&old_ctrl_info, &curr_ctrl_info, sizeof(SceCtrlPortInfo)); + } +diff --git a/input/drivers_joypad/qnx_joypad.c b/input/drivers_joypad/qnx_joypad.c +index 586093607e..6d76a58245 100644 +--- a/input/drivers_joypad/qnx_joypad.c ++++ b/input/drivers_joypad/qnx_joypad.c +@@ -27,10 +27,8 @@ static const char *qnx_joypad_name(unsigned pad) + + static bool qnx_joypad_init(void *data) + { ++#ifdef HAVE_AUTOCONFIG + unsigned autoconf_pad; +- +- (void)data; +- + for (autoconf_pad = 0; autoconf_pad < MAX_USERS; autoconf_pad++) + input_autoconfigure_connect( + qnx_joypad_name(autoconf_pad), +@@ -40,6 +38,9 @@ static bool qnx_joypad_init(void *data) + 0, + 0 + ); ++#endif ++ ++ (void)data; + + return true; + } +diff --git a/input/drivers_joypad/rwebpad_joypad.c b/input/drivers_joypad/rwebpad_joypad.c +index 463a9d4aa6..74158195b7 100644 +--- a/input/drivers_joypad/rwebpad_joypad.c ++++ b/input/drivers_joypad/rwebpad_joypad.c +@@ -45,6 +45,7 @@ static EM_BOOL rwebpad_gamepad_cb(int event_type, + pid = 1; + } + ++#ifdef HAVE_AUTOCONFIG + if (event_type == EMSCRIPTEN_EVENT_GAMEPADCONNECTED) + input_autoconfigure_connect( + gamepad_event->id, /* name */ +@@ -56,6 +57,7 @@ static EM_BOOL rwebpad_gamepad_cb(int event_type, + else if (event_type == EMSCRIPTEN_EVENT_GAMEPADDISCONNECTED) + input_autoconfigure_disconnect(gamepad_event->index, + rwebpad_joypad.ident); ++#endif + + return EM_TRUE; + } +diff --git a/input/drivers_joypad/sdl_joypad.c b/input/drivers_joypad/sdl_joypad.c +index 40f6b2bdf0..7b705f7341 100644 +--- a/input/drivers_joypad/sdl_joypad.c ++++ b/input/drivers_joypad/sdl_joypad.c +@@ -100,8 +100,6 @@ static void sdl_pad_connect(unsigned id) + { + sdl_joypad_t *pad = (sdl_joypad_t*)&sdl_pads[id]; + bool success = false; +- int32_t product = 0; +- int32_t vendor = 0; + + #ifdef HAVE_SDL2 + SDL_JoystickGUID guid; +@@ -133,25 +131,31 @@ static void sdl_pad_connect(unsigned id) + return; + } + ++ ++#ifdef HAVE_AUTOCONFIG ++ { ++ int32_t product = 0; ++ int32_t vendor = 0; + #ifdef HAVE_SDL2 +- guid = SDL_JoystickGetGUID(pad->joypad); +- guid_ptr = (uint16_t*)guid.data; ++ guid = SDL_JoystickGetGUID(pad->joypad); ++ guid_ptr = (uint16_t*)guid.data; + #ifdef __linux +- vendor = guid_ptr[2]; +- product = guid_ptr[4]; ++ vendor = guid_ptr[2]; ++ product = guid_ptr[4]; + #elif _WIN32 +- vendor = guid_ptr[0]; +- product = guid_ptr[1]; ++ vendor = guid_ptr[0]; ++ product = guid_ptr[1]; + #endif + #endif +- +- input_autoconfigure_connect( +- sdl_joypad_name(id), +- NULL, +- sdl_joypad.ident, +- id, +- vendor, +- product); ++ input_autoconfigure_connect( ++ sdl_joypad_name(id), ++ NULL, ++ sdl_joypad.ident, ++ id, ++ vendor, ++ product); ++ } ++#endif + + #ifdef HAVE_SDL2 + if (pad->controller) +@@ -220,14 +224,18 @@ static void sdl_pad_disconnect(unsigned id) + if (sdl_pads[id].controller) + { + SDL_GameControllerClose(sdl_pads[id].controller); ++#ifdef HAVE_AUTOCONFIG + input_autoconfigure_disconnect(id, sdl_joypad.ident); ++#endif + } + else + #endif + if (sdl_pads[id].joypad) + { + SDL_JoystickClose(sdl_pads[id].joypad); ++#ifdef HAVE_AUTOCONFIG + input_autoconfigure_disconnect(id, sdl_joypad.ident); ++#endif + } + + memset(&sdl_pads[id], 0, sizeof(sdl_pads[id])); +diff --git a/input/drivers_joypad/switch_joypad.c b/input/drivers_joypad/switch_joypad.c +index 5a998146e1..303bb4a6c3 100644 +--- a/input/drivers_joypad/switch_joypad.c ++++ b/input/drivers_joypad/switch_joypad.c +@@ -37,17 +37,6 @@ static const char *switch_joypad_name(unsigned pad) + return "Switch Controller"; + } + +-static void switch_joypad_autodetect_add(unsigned autoconf_pad) +-{ +- input_autoconfigure_connect( +- switch_joypad_name(autoconf_pad), /* name */ +- NULL, /* display name */ +- switch_joypad.ident, /* driver */ +- autoconf_pad, /* idx */ +- 0, /* vid */ +- 0); /* pid */ +-} +- + static bool switch_joypad_init(void *data) + { + #ifdef HAVE_LIBNX +@@ -63,7 +52,15 @@ static bool switch_joypad_init(void *data) + + for (i = 0; i < DEFAULT_MAX_PADS; i++) + { +- switch_joypad_autodetect_add(i); ++#ifdef HAVE_AUTOCONFIG ++ input_autoconfigure_connect( ++ switch_joypad_name(i), /* name */ ++ NULL, /* display name */ ++ switch_joypad.ident, /* driver */ ++ i, /* idx */ ++ 0, /* vid */ ++ 0); /* pid */ ++#endif + hidInitializeVibrationDevices( + vibration_handles[i], 2, i, + TYPE_HANDHELD | TYPE_JOYCON_PAIR); +@@ -76,8 +73,22 @@ static bool switch_joypad_init(void *data) + 2, CONTROLLER_HANDHELD, TYPE_HANDHELD | TYPE_JOYCON_PAIR); + #else + hid_init(); +- switch_joypad_autodetect_add(0); +- switch_joypad_autodetect_add(1); ++#ifdef HAVE_AUTOCONFIG ++ input_autoconfigure_connect( ++ switch_joypad_name(0), /* name */ ++ NULL, /* display name */ ++ switch_joypad.ident, /* driver */ ++ 0, /* idx */ ++ 0, /* vid */ ++ 0); /* pid */ ++ input_autoconfigure_connect( ++ switch_joypad_name(1), /* name */ ++ NULL, /* display name */ ++ switch_joypad.ident, /* driver */ ++ 1, /* idx */ ++ 0, /* vid */ ++ 0); /* pid */ ++#endif + #endif + + return true; +diff --git a/input/drivers_joypad/udev_joypad.c b/input/drivers_joypad/udev_joypad.c +index 31ba12101c..ca2cec2462 100644 +--- a/input/drivers_joypad/udev_joypad.c ++++ b/input/drivers_joypad/udev_joypad.c +@@ -237,6 +237,7 @@ static int udev_add_pad(struct udev_device *dev, unsigned p, int fd, const char + + if (!string_is_empty(pad->ident)) + { ++#ifdef HAVE_AUTOCONFIG + input_autoconfigure_connect( + pad->ident, + NULL, +@@ -244,6 +245,7 @@ static int udev_add_pad(struct udev_device *dev, unsigned p, int fd, const char + p, + pad->vid, + pad->pid); ++#endif + + ret = 1; + } +@@ -335,7 +337,9 @@ static void udev_joypad_remove_device(const char *path) + if ( !string_is_empty(udev_pads[i].path) + && string_is_equal(udev_pads[i].path, path)) + { ++#ifdef HAVE_AUTOCONFIG + input_autoconfigure_disconnect(i, udev_pads[i].ident); ++#endif + udev_free_pad(i); + break; + } +diff --git a/input/drivers_joypad/xdk_joypad.c b/input/drivers_joypad/xdk_joypad.c +index 1d88746d65..6ad5534adc 100644 +--- a/input/drivers_joypad/xdk_joypad.c ++++ b/input/drivers_joypad/xdk_joypad.c +@@ -46,25 +46,20 @@ static const char *xdk_joypad_name(unsigned pad) + return XBOX_CONTROLLER_NAMES[pad]; + } + +-static void xdk_joypad_autodetect_add(unsigned autoconf_pad) +-{ +- input_autoconfigure_connect( +- xdk_joypad_name(autoconf_pad), +- NULL, +- xdk_joypad.ident, +- autoconf_pad, +- 0, +- 0); +-} +- + static bool xdk_joypad_init(void *data) + { + #ifdef _XBOX1 + XInitDevices(0, NULL); +-#else ++#elif defined(HAVE_AUTOCONFIG) + unsigned autoconf_pad; + for (autoconf_pad = 0; autoconf_pad < MAX_USERS; autoconf_pad++) +- xdk_joypad_autodetect_add(autoconf_pad); ++ input_autoconfigure_connect( ++ xdk_joypad_name(autoconf_pad), ++ NULL, ++ xdk_joypad.ident, ++ autoconf_pad, ++ 0, ++ 0); + #endif + + (void)data; +@@ -258,7 +253,9 @@ static void xdk_joypad_poll(void) + + gamepads[port] = 0; + ++#ifdef HAVE_AUTOCONFIG + input_autoconfigure_disconnect(port, xdk_joypad.ident); ++#endif + } + + if (device_inserted) +@@ -274,7 +271,15 @@ static void xdk_joypad_poll(void) + XDEVICE_TYPE_GAMEPAD, port, + XDEVICE_NO_SLOT, &m_pollingParameters); + +- xdk_joypad_autodetect_add(port); ++#ifdef HAVE_AUTOCONFIG ++ input_autoconfigure_connect( ++ xdk_joypad_name(port), ++ NULL, ++ xdk_joypad.ident, ++ port, ++ 0, ++ 0); ++#endif + } + + if (!gamepads[port]) +diff --git a/input/drivers_joypad/xinput_joypad.c b/input/drivers_joypad/xinput_joypad.c +index d3971c2d1c..2b2a6a1a65 100644 +--- a/input/drivers_joypad/xinput_joypad.c ++++ b/input/drivers_joypad/xinput_joypad.c +@@ -337,6 +337,7 @@ static bool xinput_joypad_init(void *data) + /* On success, found VID/PID from dinput index */ + #endif + ++#ifdef HAVE_AUTOCONFIG + input_autoconfigure_connect( + name, + NULL, +@@ -344,6 +345,7 @@ static bool xinput_joypad_init(void *data) + j, + vid, + pid); ++#endif + } + } + +@@ -546,7 +548,9 @@ static void xinput_joypad_poll(void) + == ERROR_DEVICE_NOT_CONNECTED) + { + g_xinput_states[i].connected = false; ++#ifdef HAVE_AUTOCONFIG + input_autoconfigure_disconnect(i, xinput_joypad_name(i)); ++#endif + } + } + #else +@@ -567,8 +571,10 @@ static void xinput_joypad_poll(void) + } + + g_xinput_states[i].connected = new_connected; ++#ifdef HAVE_AUTOCONFIG + if (!g_xinput_states[i].connected) + input_autoconfigure_disconnect(i, xinput_joypad_name(i)); ++#endif + } + #endif + } +diff --git a/input/input_driver.h b/input/input_driver.h +index d79a2b8da7..5434bb0978 100644 +--- a/input/input_driver.h ++++ b/input/input_driver.h +@@ -389,7 +389,9 @@ void input_keyboard_event(bool down, unsigned code, uint32_t character, + uint16_t mod, unsigned device); + + extern struct retro_keybind input_config_binds[MAX_USERS][RARCH_BIND_LIST_END]; ++#ifdef HAVE_AUTOCONFIG + extern struct retro_keybind input_autoconf_binds[MAX_USERS][RARCH_BIND_LIST_END]; ++#endif + extern char input_device_names[MAX_USERS][64]; + + const char *input_config_bind_map_get_base(unsigned i); +@@ -428,7 +430,9 @@ unsigned input_config_translate_str_to_bind_id(const char *str); + + void config_read_keybinds_conf(void *data); + ++#ifdef HAVE_AUTOCONFIG + void input_autoconfigure_joypad_conf(void *data, struct retro_keybind *binds); ++#endif + + void input_config_set_device_name(unsigned port, const char *name); + +diff --git a/menu/cbs/menu_cbs_ok.c b/menu/cbs/menu_cbs_ok.c +index ca69167ec7..2e4c3233bb 100644 +--- a/menu/cbs/menu_cbs_ok.c ++++ b/menu/cbs/menu_cbs_ok.c +@@ -4069,7 +4069,9 @@ void cb_generic_download(retro_task_t *task, + dir_path = settings->paths.directory_assets; + break; + case MENU_ENUM_LABEL_CB_UPDATE_AUTOCONFIG_PROFILES: ++#ifdef HAVE_AUTOCONFIG + dir_path = settings->paths.directory_autoconfig; ++#endif + break; + case MENU_ENUM_LABEL_CB_UPDATE_DATABASES: + dir_path = settings->paths.path_content_database; +diff --git a/menu/cbs/menu_cbs_sublabel.c b/menu/cbs/menu_cbs_sublabel.c +index fb328a1a8d..11b0122bea 100644 +--- a/menu/cbs/menu_cbs_sublabel.c ++++ b/menu/cbs/menu_cbs_sublabel.c +@@ -858,6 +858,7 @@ static int action_bind_sublabel_systeminfo_controller_entry( + char *s, size_t len) + { + char tmp[4096]; ++#ifdef HAVE_AUTOCONFIG + unsigned controller; + + for(controller = 0; controller < MAX_USERS; controller++) +@@ -874,11 +875,15 @@ static int action_bind_sublabel_systeminfo_controller_entry( + break; + } + } +- snprintf(tmp, sizeof(tmp), "Device display name: %s\nDevice config name: %s\nDevice identifiers: %d/%d", +- input_config_get_device_display_name(controller) ? input_config_get_device_display_name(controller) : msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NOT_AVAILABLE), +- input_config_get_device_display_name(controller) ? input_config_get_device_config_name(controller) : msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NOT_AVAILABLE), ++ ++ snprintf(tmp, sizeof(tmp), "Device display name: %s\n", ++ input_config_get_device_display_name(controller) ? input_config_get_device_display_name(controller) : msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NOT_AVAILABLE)); ++ snprintf(tmp, sizeof(tmp), "%sDevice config name: %s\n", ++ input_config_get_device_display_name(controller) ? input_config_get_device_config_name(controller) : msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NOT_AVAILABLE)); ++ snprintf(tmp, sizeof(tmp), "%sDevice identifiers: %d/%d", + input_config_get_vid(controller), input_config_get_pid(controller)); + strlcpy(s, tmp, len); ++#endif + + return 0; + } +diff --git a/menu/menu_displaylist.c b/menu/menu_displaylist.c +index 3d4dff4ea4..590479e34d 100644 +--- a/menu/menu_displaylist.c ++++ b/menu/menu_displaylist.c +@@ -1018,6 +1018,7 @@ static unsigned menu_displaylist_parse_system_info(file_list_t *list) + count++; + } + ++#ifdef HAVE_AUTOCONFIG + for (controller = 0; controller < MAX_USERS; controller++) + { + if (input_is_autoconfigured(controller)) +@@ -1063,6 +1064,7 @@ static unsigned menu_displaylist_parse_system_info(file_list_t *list) + #endif + } + } ++#endif + + if (frontend) + { +@@ -5660,10 +5662,12 @@ unsigned menu_displaylist_build_list( + MENU_ENUM_LABEL_INPUT_REMAP_BINDS_ENABLE, + PARSE_ONLY_BOOL, false) == 0) + count++; ++#ifdef HAVE_AUTOCONFIG + if (MENU_DISPLAYLIST_PARSE_SETTINGS_ENUM(list, + MENU_ENUM_LABEL_INPUT_AUTODETECT_ENABLE, + PARSE_ONLY_BOOL, false) == 0) + count++; ++#endif + if (MENU_DISPLAYLIST_PARSE_SETTINGS_ENUM(list, + MENU_ENUM_LABEL_INPUT_DESCRIPTOR_LABEL_SHOW, + PARSE_ONLY_BOOL, false) == 0) +@@ -8000,7 +8004,9 @@ unsigned menu_displaylist_build_list( + #ifdef HAVE_SCREENSHOTS + {MENU_ENUM_LABEL_SCREENSHOT_DIRECTORY, PARSE_ONLY_DIR}, + #endif ++#ifdef HAVE_AUTOCONFIG + {MENU_ENUM_LABEL_JOYPAD_AUTOCONFIG_DIR, PARSE_ONLY_DIR}, ++#endif + {MENU_ENUM_LABEL_INPUT_REMAPPING_DIRECTORY, PARSE_ONLY_DIR}, + {MENU_ENUM_LABEL_PLAYLIST_DIRECTORY, PARSE_ONLY_DIR}, + {MENU_ENUM_LABEL_RUNTIME_LOG_DIRECTORY, PARSE_ONLY_DIR}, +@@ -10668,12 +10674,14 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, + count++; + #endif + ++#ifdef HAVE_AUTOCONFIG + if (menu_entries_append_enum(info->list, + msg_hash_to_str(MENU_ENUM_LABEL_VALUE_UPDATE_AUTOCONFIG_PROFILES), + msg_hash_to_str(MENU_ENUM_LABEL_UPDATE_AUTOCONFIG_PROFILES), + MENU_ENUM_LABEL_UPDATE_AUTOCONFIG_PROFILES, + MENU_SETTING_ACTION, 0, 0)) + count++; ++#endif + + if (menu_entries_append_enum(info->list, + msg_hash_to_str(MENU_ENUM_LABEL_VALUE_UPDATE_CHEATS), +diff --git a/menu/menu_setting.c b/menu/menu_setting.c +index 08cd8789ce..454b80c153 100644 +--- a/menu/menu_setting.c ++++ b/menu/menu_setting.c +@@ -2600,7 +2600,7 @@ static int setting_action_ok_bind_all( + return 0; + } + +-#ifdef HAVE_CONFIGFILE ++#if defined(HAVE_CONFIGFILE) && defined(HAVE_AUTOCONFIG) + static int setting_action_ok_bind_all_save_autoconfig( + rarch_setting_t *setting, size_t idx, bool wraparound) + { +@@ -6546,6 +6546,7 @@ static void get_string_representation_bind_device(rarch_setting_t *setting, char + + if (!string_is_empty(device_name)) + { ++#ifdef HAVE_AUTOCONFIG + unsigned idx = input_autoconfigure_get_device_name_index(map); + + /*if idx is non-zero, it's part of a set*/ +@@ -6555,6 +6556,7 @@ static void get_string_representation_bind_device(rarch_setting_t *setting, char + device_name, + idx); + else ++#endif + strlcpy(s, device_name, len); + } + else +@@ -7338,7 +7340,9 @@ static bool setting_append_list_input_player_options( + static char key_type[MAX_USERS][64]; + static char key_analog[MAX_USERS][64]; + static char key_bind_all[MAX_USERS][64]; ++#ifdef HAVE_AUTOCONFIG + static char key_bind_all_save_autoconfig[MAX_USERS][64]; ++#endif + static char split_joycon[MAX_USERS][64]; + static char split_joycon_lbl[MAX_USERS][64]; + static char key_bind_defaults[MAX_USERS][64]; +@@ -7348,7 +7352,9 @@ static bool setting_append_list_input_player_options( + static char label_type[MAX_USERS][64]; + static char label_analog[MAX_USERS][64]; + static char label_bind_all[MAX_USERS][64]; ++#ifdef HAVE_AUTOCONFIG + static char label_bind_all_save_autoconfig[MAX_USERS][64]; ++#endif + static char label_bind_defaults[MAX_USERS][64]; + static char label_mouse_index[MAX_USERS][64]; + +@@ -7370,9 +7376,11 @@ static bool setting_append_list_input_player_options( + user + 1); + fill_pathname_join_delim(key_bind_all[user], tmp_string, "bind_all", '_', + sizeof(key_bind_all[user])); ++#ifdef HAVE_AUTOCONFIG + fill_pathname_join_delim(key_bind_all_save_autoconfig[user], + tmp_string, "bind_all_save_autoconfig", '_', + sizeof(key_bind_all_save_autoconfig[user])); ++#endif + fill_pathname_join_delim(key_bind_defaults[user], + tmp_string, "bind_defaults", '_', + sizeof(key_bind_defaults[user])); +@@ -7397,9 +7405,11 @@ static bool setting_append_list_input_player_options( + snprintf(label_bind_defaults[user], sizeof(label_bind_defaults[user]), + "%s", + msg_hash_to_str(MENU_ENUM_LABEL_VALUE_INPUT_BIND_DEFAULT_ALL)); ++#ifdef HAVE_AUTOCONFIG + snprintf(label_bind_all_save_autoconfig[user], sizeof(label_bind_all_save_autoconfig[user]), + "%s", + msg_hash_to_str(MENU_ENUM_LABEL_VALUE_INPUT_SAVE_AUTOCONFIG)); ++#endif + snprintf(label_mouse_index[user], sizeof(label_mouse_index[user]), + "%s", + msg_hash_to_str(MENU_ENUM_LABEL_VALUE_INPUT_MOUSE_INDEX)); +@@ -7514,7 +7524,7 @@ static bool setting_append_list_input_player_options( + (*list)[list_info->index - 1].action_ok = &setting_action_ok_bind_defaults; + (*list)[list_info->index - 1].action_cancel = NULL; + +-#ifdef HAVE_CONFIGFILE ++#if defined(HAVE_CONFIGFILE) && defined(HAVE_AUTOCONF) + CONFIG_ACTION_ALT( + list, list_info, + key_bind_all_save_autoconfig[user], +@@ -11484,6 +11494,7 @@ static bool setting_append_list( + SD_FLAG_ADVANCED + ); + ++#ifdef HAVE_AUTOCONFIG + CONFIG_BOOL( + list, list_info, + &settings->bools.input_autodetect_enable, +@@ -11499,6 +11510,7 @@ static bool setting_append_list( + general_read_handler, + SD_FLAG_ADVANCED + ); ++#endif + + #if 0 + CONFIG_BOOL( +@@ -17279,6 +17291,7 @@ static bool setting_append_list( + general_read_handler); + (*list)[list_info->index - 1].action_start = directory_action_start_generic; + ++#ifdef HAVE_AUTOCONFIG + CONFIG_DIR( + list, list_info, + settings->paths.directory_autoconfig, +@@ -17293,6 +17306,7 @@ static bool setting_append_list( + general_write_handler, + general_read_handler); + (*list)[list_info->index - 1].action_start = directory_action_start_generic; ++#endif + + CONFIG_DIR( + list, list_info, +diff --git a/retroarch.c b/retroarch.c +index 7c04702f5d..107963f82d 100644 +--- a/retroarch.c ++++ b/retroarch.c +@@ -1309,15 +1309,13 @@ static const camera_driver_t *camera_drivers[] = { + * If we hold ENABLE_HOTKEY button, block all libretro input to allow + * hotkeys to be bound to same keys as RetroPad. + **/ +-#define CHECK_INPUT_DRIVER_BLOCK_HOTKEY(normal_bind, autoconf_bind) \ ++#define CHECK_INPUT_DRIVER_BLOCK_HOTKEY(bind) \ + ( \ +- (((normal_bind)->key != RETROK_UNKNOWN) \ +- || ((normal_bind)->mbutton != NO_BTN) \ +- || ((normal_bind)->joykey != NO_BTN) \ +- || ((normal_bind)->joyaxis != AXIS_NONE) \ +- || ((autoconf_bind)->key != RETROK_UNKNOWN) \ +- || ((autoconf_bind)->joykey != NO_BTN) \ +- || ((autoconf_bind)->joyaxis != AXIS_NONE)) \ ++ (((bind)->key != RETROK_UNKNOWN) \ ++ || ( (bind)->mbutton != NO_BTN) \ ++ || ( (bind)->joykey != NO_BTN) \ ++ || ( (bind)->joyaxis != AXIS_NONE) \ ++ ) \ + ) + + #define INHERIT_JOYAXIS(binds) (((binds)[x_plus].joyaxis == (binds)[x_minus].joyaxis) || ( (binds)[y_plus].joyaxis == (binds)[y_minus].joyaxis)) +@@ -24551,13 +24549,18 @@ static unsigned menu_event( + bool menu_pointer_enable = settings->bools.menu_pointer_enable; + bool swap_ok_cancel_btns = settings->bools.input_menu_swap_ok_cancel_buttons; + bool menu_scroll_fast = settings->bools.menu_scroll_fast; ++#ifdef HAVE_AUTOCONFIG + bool input_swap_override = input_autoconfigure_get_swap_override(); + unsigned menu_ok_btn = +- (!input_swap_override && swap_ok_cancel_btns) ? +- RETRO_DEVICE_ID_JOYPAD_B : RETRO_DEVICE_ID_JOYPAD_A; ++ (!input_swap_override && swap_ok_cancel_btns) ? ++ RETRO_DEVICE_ID_JOYPAD_B : RETRO_DEVICE_ID_JOYPAD_A; + unsigned menu_cancel_btn = +- (!input_swap_override && swap_ok_cancel_btns) ? +- RETRO_DEVICE_ID_JOYPAD_A : RETRO_DEVICE_ID_JOYPAD_B; ++ (!input_swap_override && swap_ok_cancel_btns) ? ++ RETRO_DEVICE_ID_JOYPAD_A : RETRO_DEVICE_ID_JOYPAD_B; ++#else ++ unsigned menu_ok_btn = RETRO_DEVICE_ID_JOYPAD_A; ++ unsigned menu_cancel_btn = RETRO_DEVICE_ID_JOYPAD_B; ++#endif + unsigned ok_current = BIT256_GET_PTR(p_input, menu_ok_btn); + unsigned ok_trigger = ok_current & ~ok_old; + #ifdef HAVE_RGUI +@@ -25663,8 +25666,12 @@ static void input_keys_pressed( + rarch_joypad_info_t *joypad_info) + { + unsigned i; +- +- if (CHECK_INPUT_DRIVER_BLOCK_HOTKEY(binds_norm, binds_auto)) ++ if ( ++ CHECK_INPUT_DRIVER_BLOCK_HOTKEY(binds_norm) ++#ifdef HAVE_AUTOCONFIG ++ || CHECK_INPUT_DRIVER_BLOCK_HOTKEY(binds_auto) ++#endif ++ ) + { + if ( p_rarch->current_input->input_state( + p_rarch->current_input_data, joypad_info, +@@ -25693,8 +25700,12 @@ static void input_keys_pressed( + + /* Allows rarch_focus_toggle hotkey to still work + * even though every hotkey is blocked */ +- if (CHECK_INPUT_DRIVER_BLOCK_HOTKEY( +- focus_normal, focus_binds_auto)) ++ if ( ++ CHECK_INPUT_DRIVER_BLOCK_HOTKEY(focus_normal) ++#ifdef HAVE_AUTOCONFIG ++ || CHECK_INPUT_DRIVER_BLOCK_HOTKEY(focus_binds_auto) ++#endif ++ ) + { + if (p_rarch->current_input->input_state( + p_rarch->current_input_data, +@@ -26309,8 +26320,10 @@ void input_pad_connect(unsigned port, input_device_driver_t *driver) + + fire_connection_listener(p_rarch, port, driver); + ++#ifdef HAVE_AUTOCONFIG + input_autoconfigure_connect(driver->name(port), NULL, driver->ident, + port, 0, 0); ++#endif + } + + #ifdef HAVE_HID +@@ -27367,7 +27380,9 @@ void input_config_set_device_name(unsigned port, const char *name) + name, + sizeof(input_device_names[port])); + ++#ifdef HAVE_AUTOCONFIG + input_autoconfigure_joypad_reindex_devices(); ++#endif + } + + void input_config_set_device_config_path(unsigned port, const char *path) +@@ -27408,7 +27423,9 @@ void input_config_set_device_display_name(unsigned port, const char *name) + void input_config_clear_device_name(unsigned port) + { + input_device_names[port][0] = '\0'; ++#ifdef HAVE_AUTOCONFIG + input_autoconfigure_joypad_reindex_devices(); ++#endif + } + + void input_config_clear_device_display_name(unsigned port) +@@ -27548,6 +27565,7 @@ void config_read_keybinds_conf(void *data) + } + } + ++#ifdef HAVE_AUTOCONFIG + void input_autoconfigure_joypad_conf(void *data, + struct retro_keybind *binds) + { +@@ -27565,6 +27583,7 @@ void input_autoconfigure_joypad_conf(void *data, + input_config_bind_map_get_base(i), &binds[i]); + } + } ++#endif + + /** + * input_config_save_keybinds_user: