@@ -485,6 +485,40 @@ umCfg.initPage('${displayName}', { saveButton: '#save-btn' });
485485 return outPath ;
486486}
487487
488+ // Check if a USERMOD_ flag is defined in build config files
489+ function isUsermodEnabled ( flagName ) {
490+ // Check my_config.h - must be an uncommented #define
491+ const myConfigPaths = [ 'wled00/my_config.h' , '../wled00/my_config.h' ] ;
492+ for ( const p of myConfigPaths ) {
493+ try {
494+ if ( fs . existsSync ( p ) ) {
495+ const content = fs . readFileSync ( p , 'utf8' ) ;
496+ const lines = content . split ( '\n' ) ;
497+ for ( const line of lines ) {
498+ const trimmed = line . trim ( ) ;
499+ // Skip commented lines
500+ if ( trimmed . startsWith ( '//' ) || trimmed . startsWith ( '/*' ) || trimmed . startsWith ( '*' ) ) continue ;
501+ if ( line . includes ( `#define ${ flagName } ` ) || line . includes ( `#undef ${ flagName } ` ) ) {
502+ return true ;
503+ }
504+ }
505+ }
506+ } catch ( e ) { }
507+ }
508+ // Check platformio.ini for build_flags with -DUSERMOD_<NAME>
509+ try {
510+ if ( fs . existsSync ( 'platformio.ini' ) ) {
511+ const content = fs . readFileSync ( 'platformio.ini' , 'utf8' ) ;
512+ // Look for -D USERMOD_EXAMPLE (with space) in build_flags
513+ const flagRe = new RegExp ( `-D\\s*${ flagName } \\b` ) ;
514+ if ( flagRe . test ( content ) ) {
515+ return true ;
516+ }
517+ }
518+ } catch ( e ) { }
519+ return false ;
520+ }
521+
488522// Generate usermod settings registry header
489523function generateUsermodSettingsRegistry ( ) {
490524 const pages = [ ] ;
@@ -509,13 +543,19 @@ function generateUsermodSettingsRegistry() {
509543 if ( configResult . fields . length > 0 ) break ;
510544 }
511545
512- // If we have config fields but no settings page, generate skeleton
513- if ( configResult . fields . length > 0 && existingFiles . length === 0 ) {
546+ // Derive USERMOD_ flag name from directory: usermod_v2_foo -> USERMOD_FOO
547+ const flagName = 'USERMOD_' + dir . replace ( / ^ u s e r m o d _ v 2 _ / i, '' ) . toUpperCase ( ) ;
548+ const isEnabled = isUsermodEnabled ( flagName ) ;
549+
550+ // If we have config fields but no settings page, generate skeleton (only if enabled)
551+ if ( isEnabled && configResult . fields . length > 0 && existingFiles . length === 0 ) {
514552 const baseName = dir . replace ( / ^ u s e r m o d _ v 2 _ / , '' ) . toLowerCase ( ) ;
515553 generateSkeletonSettingsPage ( usermodDir , baseName , configResult . fields , configResult . defaults ) ;
516554 }
517555
518- // Process existing settings pages
556+ // Process existing settings pages (only if usermod is enabled in build)
557+ if ( ! isEnabled ) continue ;
558+
519559 for ( const file of existingFiles ) {
520560 const baseName = file . replace ( / ^ s e t t i n g s _ / , '' ) . replace ( / \. h t m $ / , '' ) ;
521561 const pageName = 'PAGE_settings_' + baseName ;
0 commit comments