@ -1130,8 +1130,7 @@ static int build_member_list(void)
return res ;
return res ;
}
}
/*! \brief Given the string representation of a member and category, mark it as present in a given input file */
static void mark_as_present_helper ( const char * member , const char * category , int present )
static void mark_as_present ( const char * member , const char * category )
{
{
struct category * cat ;
struct category * cat ;
struct member * mem ;
struct member * mem ;
@ -1142,31 +1141,44 @@ static void mark_as_present(const char *member, const char *category)
negate = 1 ;
negate = 1 ;
}
}
print_debug ( " Marking %s of %s as present \n " , member , category ) ;
print_debug ( " Marking %s of %s as %s \n " , member , category , present ? " present " : " not present " ) ;
AST_LIST_TRAVERSE ( & categories , cat , list ) {
AST_LIST_TRAVERSE ( & categories , cat , list ) {
if ( strcmp ( category , cat - > name ) )
if ( strcmp ( category , cat - > name ) ) {
continue ;
continue ;
}
AST_LIST_TRAVERSE ( & cat - > members , mem , list ) {
AST_LIST_TRAVERSE ( & cat - > members , mem , list ) {
if ( mem - > is_separator ) {
if ( mem - > is_separator ) {
continue ;
continue ;
}
}
if ( ! strcmp ( member , mem - > name ) ) {
if ( ! strcmp ( member , mem - > name ) ) {
mem - > was_enabled = mem - > enabled = ( negate ? ! cat - > positive_output : cat - > positive_output ) ;
if ( present ) {
mem - > was_enabled = mem - > enabled = ( negate ? ! cat - > positive_output : cat - > positive_output ) ;
} else {
mem - > was_enabled = mem - > enabled = 0 ;
}
print_debug ( " Just set %s enabled to %d \n " , mem - > name , mem - > enabled ) ;
print_debug ( " Just set %s enabled to %d \n " , mem - > name , mem - > enabled ) ;
break ;
break ;
}
}
}
}
if ( ! mem )
if ( ! mem ) {
fprintf ( stderr , " member '%s' in category '%s' not found, ignoring. \n " , member , category ) ;
fprintf ( stderr , " member '%s' in category '%s' not found, ignoring. \n " , member , category ) ;
}
break ;
break ;
}
}
if ( ! cat )
if ( ! cat ) {
fprintf ( stderr , " category '%s' not found! Can't mark '%s' as disabled. \n " , category , member ) ;
fprintf ( stderr , " category '%s' not found! Can't mark '%s' as disabled. \n " , category , member ) ;
}
}
}
/*! \brief Given the string representation of a member and category, mark it as present in a given input file */
# define mark_as_present(member, category) mark_as_present_helper(member, category, 1)
/*! \brief Given the string representation of a member and category, mark it as not present in a given input file */
# define mark_as_not_present(member, category) mark_as_present_helper(member, category, 0)
unsigned int enable_member ( struct member * mem )
unsigned int enable_member ( struct member * mem )
{
{
struct reference * dep ;
struct reference * dep ;
@ -1380,6 +1392,9 @@ static int parse_existing_config(const char *infile)
}
}
while ( fgets ( buf , PARSE_BUF_SIZE , f ) ) {
while ( fgets ( buf , PARSE_BUF_SIZE , f ) ) {
struct category * cat ;
struct member * mem ;
lineno + + ;
lineno + + ;
if ( strlen_zero ( buf ) )
if ( strlen_zero ( buf ) )
@ -1414,11 +1429,44 @@ static int parse_existing_config(const char *infile)
continue ;
continue ;
}
}
while ( ( member = strsep ( & parse , " \n " ) ) ) {
AST_LIST_TRAVERSE ( & categories , cat , list ) {
member = skip_blanks ( member ) ;
if ( strcmp ( category , cat - > name ) ) {
if ( strlen_zero ( member ) )
continue ;
continue ;
mark_as_present ( member , category ) ;
}
if ( ! cat - > positive_output ) {
print_debug ( " Category %s is NOT positive output \n " , cat - > name ) ;
/* if NOT positive_output, then if listed in makeopts, it's disabled! */
/* this means that what's listed in menuselect.makeopts is a list of modules
* that are NOT selected , so we can ' t use that to mark things as present .
* In fact , we need to mark everything as present , UNLESS it ' s listed
* in menuselect . makeopts */
AST_LIST_TRAVERSE ( & cat - > members , mem , list ) {
if ( mem - > is_separator ) {
continue ;
}
mem - > was_enabled = 1 ;
print_debug ( " Just set %s enabled to %d \n " , mem - > name , mem - > enabled ) ;
}
/* okay, now go ahead, and mark anything listed in makeopts as NOT present */
while ( ( member = strsep ( & parse , " \n " ) ) ) {
member = skip_blanks ( member ) ;
if ( strlen_zero ( member ) ) {
continue ;
}
mark_as_not_present ( member , category ) ;
}
} else {
print_debug ( " Category %s is positive output \n " , cat - > name ) ;
/* if present, it was enabled (e.g. MENUSELECT_CFLAGS, MENUSELECT_UTILS, MENUSELECT_MOH, etc. */
while ( ( member = strsep ( & parse , " \n " ) ) ) {
member = skip_blanks ( member ) ;
if ( strlen_zero ( member ) ) {
continue ;
}
mark_as_present ( member , category ) ;
}
}
break ;
}
}
}
}