From 7df116b4f17c7e444338a36f4bbdf7ab5a9aade2 Mon Sep 17 00:00:00 2001 From: Nic Boet Date: Tue, 23 Jun 2026 14:39:20 -0500 Subject: [PATCH] Fix case-sensitive filesystem build failures (Linux) for ESP32 LilyGo variants The repo has apparently only ever been built on case-insensitive filesystems (macOS/Windows): every #include in the codebase uses intended PascalCase/CamelCase header names (e.g. "SettingsScreen.h", "WiFiMQTT.h"), but 28 of the actual files on disk were saved with inconsistent casing (e.g. "Settingsscreen.h", "wifimqtt.h"). On a case-sensitive filesystem (Linux) this is a hard compile failure, not a cosmetic mismatch -- confirmed by running `pio run -e meck_audio_ble` on Gentoo Linux, which failed immediately on "target.h: No such file or directory" and a cascade of similar errors as each fix exposed the next one. Root causes, two flavors of the same underlying bug: 1. Header filename casing (29 files renamed via `git mv` to preserve history): examples/companion_radio/ui-new/*, examples/simple_repeater/*, and two variant-local headers (PCF85063Clock.h, TCA8418Keyboard.h x2). Verified safe before renaming: every file has exactly one consistent intended casing across all the places that #include it (checked via a repo-wide scan comparing every #include against on-disk filenames, zero conflicts found), so each rename is a pure no-op for behavior. 2. PlatformIO config paths using the wrong case for variant directories that are actually lowercase on disk (variants/lilygo_tdeck_pro, variants/lilygo_t5s3_epaper_pro): - `-I variants/LilyGo_TDeck_Pro` / `-I variants/LilyGo_T5S3_EPaper_Pro` in build_flags (3 occurrences, including lilygo_tdeck_max's reference to TDeck Pro's shared headers) -- broke header resolution for target.h and friends. - `+<../variants/LilyGo_TDeck_Pro>` / `+<../variants/LilyGo_T5S3_EPaper_Pro>` in build_src_filter (2 occurrences) -- silently excluded the board-init .cpp files (TDeckBoard.cpp etc.) from compilation entirely, which didn't fail until the *link* stage ("undefined reference to radio_init()", `TDeckBoard::begin()`, etc.) since PlatformIO's glob just matched nothing rather than erroring. Verified fix: `pio run -e meck_audio_ble` now compiles, links, and produces a firmware image cleanly (RAM 53.1%, Flash 49.6%). Co-Authored-By: Claude Sonnet 4.6 --- .../companion_radio/ui-new/{Alarmscreen.h => AlarmScreen.h} | 0 .../{Audiobookplayerscreen.h => AudiobookPlayerScreen.h} | 0 .../ui-new/{Channelpickerscreen.h => ChannelPickerScreen.h} | 0 .../ui-new/{Contactsscreen.h => ContactsScreen.h} | 0 .../ui-new/{Discoveryscreen.h => DiscoveryScreen.h} | 0 .../companion_radio/ui-new/{emojipicker.h => EmojiPicker.h} | 0 .../companion_radio/ui-new/{Emojisprites.h => EmojiSprites.h} | 0 .../ui-new/{Epubprocessor.h => EpubProcessor.h} | 0 examples/companion_radio/ui-new/{homeicons.h => HomeIcons.h} | 0 .../ui-new/{Lastheardscreen.h => LastHeardScreen.h} | 0 examples/companion_radio/ui-new/{Mapscreen.h => MapScreen.h} | 0 examples/companion_radio/ui-new/{Meckfonts.h => MeckFonts.h} | 0 .../companion_radio/ui-new/{Notesscreen.h => NotesScreen.h} | 0 .../ui-new/{Patheditorscreen.h => PathEditorScreen.h} | 0 .../companion_radio/ui-new/{Radiopresets.h => RadioPresets.h} | 0 .../ui-new/{Repeateradminscreen.h => RepeaterAdminScreen.h} | 0 .../ui-new/{Settingsscreen.h => SettingsScreen.h} | 0 .../companion_radio/ui-new/{Snakescreen.h => SnakeScreen.h} | 0 .../ui-new/{Textreaderscreen.h => TextReaderScreen.h} | 0 .../companion_radio/ui-new/{Touchinput.h => TouchInput.h} | 0 examples/companion_radio/ui-new/{Utf8cp437.h => Utf8CP437.h} | 0 .../ui-new/{virtualkeyboard.h => VirtualKeyboard.h} | 0 .../ui-new/{Voicemessagescreen.h => VoiceMessageScreen.h} | 0 .../ui-new/{Webreaderscreen.h => WebReaderScreen.h} | 0 examples/simple_repeater/{Cellularmqtt.h => CellularMQTT.h} | 0 examples/simple_repeater/{wifimqtt.h => WiFiMQTT.h} | 0 .../{Pcf85063clock.h => PCF85063Clock.h} | 0 variants/lilygo_t5s3_epaper_pro/platformio.ini | 4 ++-- .../lilygo_tdeck_max/{Tca8418keyboard.h => TCA8418Keyboard.h} | 0 variants/lilygo_tdeck_max/platformio.ini | 2 +- .../lilygo_tdeck_pro/{Tca8418keyboard.h => TCA8418Keyboard.h} | 0 variants/lilygo_tdeck_pro/platformio.ini | 4 ++-- 32 files changed, 5 insertions(+), 5 deletions(-) rename examples/companion_radio/ui-new/{Alarmscreen.h => AlarmScreen.h} (100%) rename examples/companion_radio/ui-new/{Audiobookplayerscreen.h => AudiobookPlayerScreen.h} (100%) rename examples/companion_radio/ui-new/{Channelpickerscreen.h => ChannelPickerScreen.h} (100%) rename examples/companion_radio/ui-new/{Contactsscreen.h => ContactsScreen.h} (100%) rename examples/companion_radio/ui-new/{Discoveryscreen.h => DiscoveryScreen.h} (100%) rename examples/companion_radio/ui-new/{emojipicker.h => EmojiPicker.h} (100%) rename examples/companion_radio/ui-new/{Emojisprites.h => EmojiSprites.h} (100%) rename examples/companion_radio/ui-new/{Epubprocessor.h => EpubProcessor.h} (100%) rename examples/companion_radio/ui-new/{homeicons.h => HomeIcons.h} (100%) rename examples/companion_radio/ui-new/{Lastheardscreen.h => LastHeardScreen.h} (100%) rename examples/companion_radio/ui-new/{Mapscreen.h => MapScreen.h} (100%) rename examples/companion_radio/ui-new/{Meckfonts.h => MeckFonts.h} (100%) rename examples/companion_radio/ui-new/{Notesscreen.h => NotesScreen.h} (100%) rename examples/companion_radio/ui-new/{Patheditorscreen.h => PathEditorScreen.h} (100%) rename examples/companion_radio/ui-new/{Radiopresets.h => RadioPresets.h} (100%) rename examples/companion_radio/ui-new/{Repeateradminscreen.h => RepeaterAdminScreen.h} (100%) rename examples/companion_radio/ui-new/{Settingsscreen.h => SettingsScreen.h} (100%) rename examples/companion_radio/ui-new/{Snakescreen.h => SnakeScreen.h} (100%) rename examples/companion_radio/ui-new/{Textreaderscreen.h => TextReaderScreen.h} (100%) rename examples/companion_radio/ui-new/{Touchinput.h => TouchInput.h} (100%) rename examples/companion_radio/ui-new/{Utf8cp437.h => Utf8CP437.h} (100%) rename examples/companion_radio/ui-new/{virtualkeyboard.h => VirtualKeyboard.h} (100%) rename examples/companion_radio/ui-new/{Voicemessagescreen.h => VoiceMessageScreen.h} (100%) rename examples/companion_radio/ui-new/{Webreaderscreen.h => WebReaderScreen.h} (100%) rename examples/simple_repeater/{Cellularmqtt.h => CellularMQTT.h} (100%) rename examples/simple_repeater/{wifimqtt.h => WiFiMQTT.h} (100%) rename variants/lilygo_t5s3_epaper_pro/{Pcf85063clock.h => PCF85063Clock.h} (100%) rename variants/lilygo_tdeck_max/{Tca8418keyboard.h => TCA8418Keyboard.h} (100%) rename variants/lilygo_tdeck_pro/{Tca8418keyboard.h => TCA8418Keyboard.h} (100%) diff --git a/examples/companion_radio/ui-new/Alarmscreen.h b/examples/companion_radio/ui-new/AlarmScreen.h similarity index 100% rename from examples/companion_radio/ui-new/Alarmscreen.h rename to examples/companion_radio/ui-new/AlarmScreen.h diff --git a/examples/companion_radio/ui-new/Audiobookplayerscreen.h b/examples/companion_radio/ui-new/AudiobookPlayerScreen.h similarity index 100% rename from examples/companion_radio/ui-new/Audiobookplayerscreen.h rename to examples/companion_radio/ui-new/AudiobookPlayerScreen.h diff --git a/examples/companion_radio/ui-new/Channelpickerscreen.h b/examples/companion_radio/ui-new/ChannelPickerScreen.h similarity index 100% rename from examples/companion_radio/ui-new/Channelpickerscreen.h rename to examples/companion_radio/ui-new/ChannelPickerScreen.h diff --git a/examples/companion_radio/ui-new/Contactsscreen.h b/examples/companion_radio/ui-new/ContactsScreen.h similarity index 100% rename from examples/companion_radio/ui-new/Contactsscreen.h rename to examples/companion_radio/ui-new/ContactsScreen.h diff --git a/examples/companion_radio/ui-new/Discoveryscreen.h b/examples/companion_radio/ui-new/DiscoveryScreen.h similarity index 100% rename from examples/companion_radio/ui-new/Discoveryscreen.h rename to examples/companion_radio/ui-new/DiscoveryScreen.h diff --git a/examples/companion_radio/ui-new/emojipicker.h b/examples/companion_radio/ui-new/EmojiPicker.h similarity index 100% rename from examples/companion_radio/ui-new/emojipicker.h rename to examples/companion_radio/ui-new/EmojiPicker.h diff --git a/examples/companion_radio/ui-new/Emojisprites.h b/examples/companion_radio/ui-new/EmojiSprites.h similarity index 100% rename from examples/companion_radio/ui-new/Emojisprites.h rename to examples/companion_radio/ui-new/EmojiSprites.h diff --git a/examples/companion_radio/ui-new/Epubprocessor.h b/examples/companion_radio/ui-new/EpubProcessor.h similarity index 100% rename from examples/companion_radio/ui-new/Epubprocessor.h rename to examples/companion_radio/ui-new/EpubProcessor.h diff --git a/examples/companion_radio/ui-new/homeicons.h b/examples/companion_radio/ui-new/HomeIcons.h similarity index 100% rename from examples/companion_radio/ui-new/homeicons.h rename to examples/companion_radio/ui-new/HomeIcons.h diff --git a/examples/companion_radio/ui-new/Lastheardscreen.h b/examples/companion_radio/ui-new/LastHeardScreen.h similarity index 100% rename from examples/companion_radio/ui-new/Lastheardscreen.h rename to examples/companion_radio/ui-new/LastHeardScreen.h diff --git a/examples/companion_radio/ui-new/Mapscreen.h b/examples/companion_radio/ui-new/MapScreen.h similarity index 100% rename from examples/companion_radio/ui-new/Mapscreen.h rename to examples/companion_radio/ui-new/MapScreen.h diff --git a/examples/companion_radio/ui-new/Meckfonts.h b/examples/companion_radio/ui-new/MeckFonts.h similarity index 100% rename from examples/companion_radio/ui-new/Meckfonts.h rename to examples/companion_radio/ui-new/MeckFonts.h diff --git a/examples/companion_radio/ui-new/Notesscreen.h b/examples/companion_radio/ui-new/NotesScreen.h similarity index 100% rename from examples/companion_radio/ui-new/Notesscreen.h rename to examples/companion_radio/ui-new/NotesScreen.h diff --git a/examples/companion_radio/ui-new/Patheditorscreen.h b/examples/companion_radio/ui-new/PathEditorScreen.h similarity index 100% rename from examples/companion_radio/ui-new/Patheditorscreen.h rename to examples/companion_radio/ui-new/PathEditorScreen.h diff --git a/examples/companion_radio/ui-new/Radiopresets.h b/examples/companion_radio/ui-new/RadioPresets.h similarity index 100% rename from examples/companion_radio/ui-new/Radiopresets.h rename to examples/companion_radio/ui-new/RadioPresets.h diff --git a/examples/companion_radio/ui-new/Repeateradminscreen.h b/examples/companion_radio/ui-new/RepeaterAdminScreen.h similarity index 100% rename from examples/companion_radio/ui-new/Repeateradminscreen.h rename to examples/companion_radio/ui-new/RepeaterAdminScreen.h diff --git a/examples/companion_radio/ui-new/Settingsscreen.h b/examples/companion_radio/ui-new/SettingsScreen.h similarity index 100% rename from examples/companion_radio/ui-new/Settingsscreen.h rename to examples/companion_radio/ui-new/SettingsScreen.h diff --git a/examples/companion_radio/ui-new/Snakescreen.h b/examples/companion_radio/ui-new/SnakeScreen.h similarity index 100% rename from examples/companion_radio/ui-new/Snakescreen.h rename to examples/companion_radio/ui-new/SnakeScreen.h diff --git a/examples/companion_radio/ui-new/Textreaderscreen.h b/examples/companion_radio/ui-new/TextReaderScreen.h similarity index 100% rename from examples/companion_radio/ui-new/Textreaderscreen.h rename to examples/companion_radio/ui-new/TextReaderScreen.h diff --git a/examples/companion_radio/ui-new/Touchinput.h b/examples/companion_radio/ui-new/TouchInput.h similarity index 100% rename from examples/companion_radio/ui-new/Touchinput.h rename to examples/companion_radio/ui-new/TouchInput.h diff --git a/examples/companion_radio/ui-new/Utf8cp437.h b/examples/companion_radio/ui-new/Utf8CP437.h similarity index 100% rename from examples/companion_radio/ui-new/Utf8cp437.h rename to examples/companion_radio/ui-new/Utf8CP437.h diff --git a/examples/companion_radio/ui-new/virtualkeyboard.h b/examples/companion_radio/ui-new/VirtualKeyboard.h similarity index 100% rename from examples/companion_radio/ui-new/virtualkeyboard.h rename to examples/companion_radio/ui-new/VirtualKeyboard.h diff --git a/examples/companion_radio/ui-new/Voicemessagescreen.h b/examples/companion_radio/ui-new/VoiceMessageScreen.h similarity index 100% rename from examples/companion_radio/ui-new/Voicemessagescreen.h rename to examples/companion_radio/ui-new/VoiceMessageScreen.h diff --git a/examples/companion_radio/ui-new/Webreaderscreen.h b/examples/companion_radio/ui-new/WebReaderScreen.h similarity index 100% rename from examples/companion_radio/ui-new/Webreaderscreen.h rename to examples/companion_radio/ui-new/WebReaderScreen.h diff --git a/examples/simple_repeater/Cellularmqtt.h b/examples/simple_repeater/CellularMQTT.h similarity index 100% rename from examples/simple_repeater/Cellularmqtt.h rename to examples/simple_repeater/CellularMQTT.h diff --git a/examples/simple_repeater/wifimqtt.h b/examples/simple_repeater/WiFiMQTT.h similarity index 100% rename from examples/simple_repeater/wifimqtt.h rename to examples/simple_repeater/WiFiMQTT.h diff --git a/variants/lilygo_t5s3_epaper_pro/Pcf85063clock.h b/variants/lilygo_t5s3_epaper_pro/PCF85063Clock.h similarity index 100% rename from variants/lilygo_t5s3_epaper_pro/Pcf85063clock.h rename to variants/lilygo_t5s3_epaper_pro/PCF85063Clock.h diff --git a/variants/lilygo_t5s3_epaper_pro/platformio.ini b/variants/lilygo_t5s3_epaper_pro/platformio.ini index d66e69d7..28cb7497 100644 --- a/variants/lilygo_t5s3_epaper_pro/platformio.ini +++ b/variants/lilygo_t5s3_epaper_pro/platformio.ini @@ -18,7 +18,7 @@ board_build.arduino.memory_type = qio_opi board_upload.flash_size = 16MB build_flags = ${esp32_base.build_flags} - -I variants/LilyGo_T5S3_EPaper_Pro + -I variants/lilygo_t5s3_epaper_pro -D LilyGo_T5S3_EPaper_Pro -D T5_S3_EPAPER_PRO_V2 -D BOARD_HAS_PSRAM=1 @@ -61,7 +61,7 @@ build_flags = -D ARDUINO_LOOP_STACK_SIZE=32768 -D HAS_MECK_FONTS build_src_filter = ${esp32_base.build_src_filter} - +<../variants/LilyGo_T5S3_EPaper_Pro> + +<../variants/lilygo_t5s3_epaper_pro> lib_deps = ${esp32_base.lib_deps} WebServer diff --git a/variants/lilygo_tdeck_max/Tca8418keyboard.h b/variants/lilygo_tdeck_max/TCA8418Keyboard.h similarity index 100% rename from variants/lilygo_tdeck_max/Tca8418keyboard.h rename to variants/lilygo_tdeck_max/TCA8418Keyboard.h diff --git a/variants/lilygo_tdeck_max/platformio.ini b/variants/lilygo_tdeck_max/platformio.ini index e401a20e..8ec369f3 100644 --- a/variants/lilygo_tdeck_max/platformio.ini +++ b/variants/lilygo_tdeck_max/platformio.ini @@ -42,7 +42,7 @@ build_flags = ; Include MAX variant first (for variant.h, target.h, TDeckProMaxBoard.h) ; then V1.1 variant (for TDeckBoard.h, which TDeckProMaxBoard inherits from) -I variants/lilygo_tdeck_max - -I variants/LilyGo_TDeck_Pro + -I variants/lilygo_tdeck_pro ; Both defines needed: LilyGo_TDeck_Pro for existing UI code guards, ; LilyGo_TDeck_Pro_Max for MAX-specific code paths -D LilyGo_TDeck_Pro diff --git a/variants/lilygo_tdeck_pro/Tca8418keyboard.h b/variants/lilygo_tdeck_pro/TCA8418Keyboard.h similarity index 100% rename from variants/lilygo_tdeck_pro/Tca8418keyboard.h rename to variants/lilygo_tdeck_pro/TCA8418Keyboard.h diff --git a/variants/lilygo_tdeck_pro/platformio.ini b/variants/lilygo_tdeck_pro/platformio.ini index f2219f7c..fbbb4ac8 100644 --- a/variants/lilygo_tdeck_pro/platformio.ini +++ b/variants/lilygo_tdeck_pro/platformio.ini @@ -9,7 +9,7 @@ board_upload.flash_size = 16MB build_flags = ${esp32_base.build_flags} ${sensor_base.build_flags} - -I variants/LilyGo_TDeck_Pro + -I variants/lilygo_tdeck_pro -D LilyGo_TDeck_Pro -D HAS_GPS=1 -D BOARD_HAS_PSRAM=1 @@ -89,7 +89,7 @@ build_flags = -D ARDUINO_LOOP_STACK_SIZE=32768 -D HAS_MECK_FONTS build_src_filter = ${esp32_base.build_src_filter} - +<../variants/LilyGo_TDeck_Pro> + +<../variants/lilygo_tdeck_pro> + lib_deps = ${esp32_base.lib_deps}