The way configuration step auto::gc's runstep() method is structured strikes me as peculiar. Can I get some second opinions?
Starts out ordinarily enough (I've eliminated some whitespace and comments): if ( !defined($gc) ) { $gc = 'gc'; } elsif ( $gc eq 'libc' ) { if ( $conf->data->get('i_malloc') ) { $conf->data->set( malloc_header => 'malloc.h' ); } else { $conf->data->set( malloc_header => 'stdlib.h' ); } } Note that there's no 'else' stanza. So we don't yet know how to handle the case where $gc might be defined but something other than 'libc'. But let's continue: if ( $gc =~ /^malloc(?:-trace)?$/ ) { $conf->data->set( TEMP_gc_c => # a long heredoc TEMP_gc_o => # another heredoc gc_flag => '-DGC_IS_MALLOC', ); } elsif ( $gc eq 'libc' ) { We're testing "$gc eq 'libc'" a *second* time?? Why? $conf->data->set( TEMP_gc_c => # a long heredoc TEMP_gc_o => "\$(SRC_DIR)/gc/res_lea\$(O)", gc_flag => '-DGC_IS_MALLOC', ); } else { $gc = 'gc'; Wait a minute! Did'nt we deal with the case where we assign 'gc' to $gc above?? $conf->data->set( TEMP_gc_c => <<"EOF", \$(SRC_DIR)/gc/resources\$(O): \$(GENERAL_H_FILES) \$(SRC_DIR)/gc/resources.c EOF TEMP_gc_o => "\$(SRC_DIR)/gc/resources\$(O)", gc_flag => '', ); } Can anyone tell me why this is so bass-ackwards? Thank you very much. kid51