package list_modules;

use MDK::Common;

our @ISA = qw(Exporter);
our @EXPORT = qw(load_dependencies dependencies_closure category2modules module2category sub_categories);

# the categories have 2 purposes
# - choosing modules to include on stage1's (cf update_kernel and mdk-stage1/pci-resource/update-pci-ids.pl)
# - performing a load_category or probe_category (modules.pm and many files in perl-install)

our %l = (
  ################################################################################
  network => 
  {
    main => [
      if_(arch() =~ /ppc/, qw(mace bmac gmac)),
      if_(arch() =~ /^sparc/, qw(myri_sbus sunbmac sunhme sunqe)),
      if_(arch() !~ /alpha/ && arch() !~ /sparc/,
        qw(3c501 3c503 3c505 3c507 3c509 3c515), # 3c90x
        qw(82596 abyss ac3200 acenic aironet4500_card at1700 atp com20020-pci),
        qw(cs89x0 de600 de620),
        qw(defxx), # most unused
        qw(depca dgrs dmfe e100 e1000 e2100 eepro eepro100 eexpress epic100 eth16i),
        qw(ewrk3 hamachi hp hp-plus hp100 ibmtr),
        qw(lance natsemi ne ne2k-pci ni5010 ni52 ni65 olympic pcnet32 plip rcpci), #old_tulip 
        qw(sb1000 sis900 sk98lin smc-ultra smc9194 starfire tlan tmspci tulip via-rhine), #sktr 
        qw(wd winbond-840 yellowfin ns83820),
      ),
      qw(3c59x 8139too sundance dl2k), #rtl8139 
    ],
    raw => [
      qw(8390 mii),
      qw(ppp_generic ppp_async slhc aironet4500_core),
    ],
    pcmcia => [ 
      qw(3c574_cs 3c589_cs airo airo_cs aironet4500_cs axnet_cs fmvj18x_cs),
      qw(ibmtr_cs netwave_cs nmclan_cs pcnet_cs ray_cs smc91c92_cs wavelan_cs wvlan_cs),
      qw(xirc2ps_cs xircom_cb xircom_tulip_cb),
    ],
    usb => [ 
      qw(pegasus kaweth usbnet catc CDCEther),
    ],
    isdn => [
      qw(hisax hysdn b1pci t1pci c4),
    ],
  },

  ################################################################################
  disk => 
  {
    scsi => [
      if_(arch() =~ /ppc/, qw(mesh mac53c94)),
      if_(arch() =~ /^sparc/, qw(qlogicpti)),
      if_(arch() !~ /alpha/ && arch() !~ /sparc/,
        qw(3w-xxxx AM53C974 BusLogic NCR53c406a a100u2w advansys aha152x aha1542 aha1740),
        qw(atp870u dc395x_trm dtc fdomain g_NCR5380 in2000 initio pci2220i psi240i),
        qw(qla1280 qla2x00 qlogicfas qlogicfc),
        qw(seagate sim710 sym53c416 t128 tmscsim u14-34f ultrastor wd7000),
        qw(eata eata_pio eata_dma),
      ),
      '53c7,8xx',
      qw(aic7xxx pci2000 qlogicisp sym53c8xx), # ncr53c8xx
    ],
    hardware_raid => [
      if_(arch() =~ /^sparc/, qw(pluto)),
      if_(arch() !~ /alpha/ && arch() !~ /sparc/,
        qw(DAC960 dpt_i2o megaraid aacraid ataraid cciss cpqarray gdth i2o_block),
        qw(ips ppa imm),
      ),
    ],
    pcmcia => [ qw(aha152x_cs fdomain_cs nsp_cs qlogic_cs ide-cs) ], #ide_cs
    raw => [ qw(scsi_mod sd_mod) ],
    usb => [ qw(usb-storage) ],
    cdrom => [ qw(ide-cd sr_mod cdrom) ],
  },

  ################################################################################

  bus => 
  {
    usb => [ qw(usbcore usb-uhci usb-ohci ehci-hcd usbkbd keybdev input) ],
    pcmcia => [
      if_(arch() !~ /^sparc/, qw(pcmcia_core tcic ds i82365 yenta_socket)), # cb_enabler
    ],
   #serial_cs
   #ftl_cs 3c575_cb apa1480_cb epic_cb serial_cb tulip_cb iflash2+_mtd iflash2_mtd
   #cb_enabler
  },

  fs => 
  {
    network => [ qw(af_packet nfs lockd sunrpc) ],
    cdrom => [ qw(isofs) ],
    loopback => [ qw(isofs loop) ],
    local => [
      if_(arch() =~ /^i.86/, qw(vfat fat)),
      if_(arch() =~ /^ppc/, qw(hfs)),
      qw(reiserfs),
    ],
    various => [ qw(smbfs romfs jbd xfs) ],

  },

  ################################################################################
  multimedia => 
  {
    sound => [
      if_(arch() =~ /ppc/, qw(dmasound_awacs)),
      if_(arch() !~ /^sparc/,
        qw(cmpci cs46xx cs4281 es1370 es1371 esssolo1 i810_audio maestro maestro3),
        qw(nm256_audio pas16 trident via82cxxx_audio sonicvibes emu10k1 ymfpci),

        qw(snd-ice1712 snd-cmipci snd-ens1371),
        qw(snd-es1938 snd-fm801 snd-intel8x0 snd-rme96),
        qw(snd-trident snd-ymfpci),
      ),
    ],
    tv => [ qw(bttv cpia_usb ibmcam mod_quickcam ov511 ultracam usbvideo) ],
    photo => [ qw(dc2xx mdc800) ],
    radio => [ qw(radio-maxiradio) ],
    scanner => [ qw(scanner microtek) ],
    joystick => [ qw(ns558) ],
  },

  various => 
  # just here for classification, unused categories (nor auto-detect, nor load_thiskind)
  {
    raid => [
      qw(linear raid0 raid1 raid5 lvm-mod md multipath xor),
    ],
    mouse => [
      qw(busmouse msbusmouse logibusmouse serial qpmouse atixlmouse),
    ],
    char => [
      qw(amd768_rng applicom n_r3964 nvram pc110pad ppdev amd768_pm),
    ],
    other => [
      qw(agpgart defxx i810_rng i810fb ide-floppy ide-scsi ide-tape loop lp nbd sg st parport parport_pc),
    ],
  },
);

my %dependencies;

sub load_dependencies {
    my ($file) = @_;

    %dependencies = map {
	my ($f, $deps) = split ':';
	$f => [ split ' ', $deps ];
    } cat_($file);
}

sub dependencies_closure {
    my @l = map { dependencies_closure($_) } @{$dependencies{$_[0]} || []};
    (@l, $_[0]);
}

sub category2modules {
    map {
	my ($t1, $t2s) = m|(.*)/(.*)|;
	map { 
	    my $l = $l{$t1}{$_} or die "bad category $t1/$_\n" . backtrace();
	    @$l;
	} split('\|', $t2s);
    } split(' ', $_[0]);
}

sub module2category {
    my ($module) = @_;
    foreach my $t1 (keys %l) {
	my $h = $l{$t1};
	foreach my $t2 (keys %$h) {
	  $module eq $_ and return "$t1/$t2" foreach @{$h->{$t2}};
      }
    }
    return;
}

sub sub_categories {
    my ($t1) = @_;
    keys %{$l{$t1}};
}

1;
able>
<div class='path'>path: <a href='/software/drakx/commit/?h=2.42&amp;id=36372c09c47d69d8c4f53664e88dcf50ab27186c'>root</a>/<a href='/software/drakx/commit/perl-install?h=2.42&amp;id=36372c09c47d69d8c4f53664e88dcf50ab27186c'>perl-install</a>/<a href='/software/drakx/commit/perl-install/share?h=2.42&amp;id=36372c09c47d69d8c4f53664e88dcf50ab27186c'>share</a>/<a href='/software/drakx/commit/perl-install/share/po?h=2.42&amp;id=36372c09c47d69d8c4f53664e88dcf50ab27186c'>po</a>/<a href='/software/drakx/commit/perl-install/share/po/et.po?h=2.42&amp;id=36372c09c47d69d8c4f53664e88dcf50ab27186c'>et.po</a></div><div class='content'><div class='cgit-panel'><b>diff options</b><form method='get'><input type='hidden' name='h' value='2.42'/><input type='hidden' name='id' value='36372c09c47d69d8c4f53664e88dcf50ab27186c'/><table><tr><td colspan='2'/></tr><tr><td class='label'>context:</td><td class='ctrl'><select name='context' onchange='this.form.submit();'><option value='1'>1</option><option value='2'>2</option><option value='3' selected='selected'>3</option><option value='4'>4</option><option value='5'>5</option><option value='6'>6</option><option value='7'>7</option><option value='8'>8</option><option value='9'>9</option><option value='10'>10</option><option value='15'>15</option><option value='20'>20</option><option value='25'>25</option><option value='30'>30</option><option value='35'>35</option><option value='40'>40</option></select></td></tr><tr><td class='label'>space:</td><td class='ctrl'><select name='ignorews' onchange='this.form.submit();'><option value='0' selected='selected'>include</option><option value='1'>ignore</option></select></td></tr><tr><td class='label'>mode:</td><td class='ctrl'><select name='dt' onchange='this.form.submit();'><option value='0' selected='selected'>unified</option><option value='1'>ssdiff</option><option value='2'>stat only</option></select></td></tr><tr><td/><td class='ctrl'><noscript><input type='submit' value='reload'/></noscript></td></tr></table></form></div><table summary='commit info' class='commit-info'>
<tr><th>author</th><td>Thierry Vignaud &lt;tvignaud@mandriva.org&gt;</td><td class='right'>2005-04-21 11:58:52 +0000</td></tr>
<tr><th>committer</th><td>Thierry Vignaud &lt;tvignaud@mandriva.org&gt;</td><td class='right'>2005-04-21 11:58:52 +0000</td></tr>
<tr><th>commit</th><td colspan='2' class='sha1'><a href='/software/drakx/commit/perl-install/share/po/et.po?h=2.42&amp;id=36372c09c47d69d8c4f53664e88dcf50ab27186c'>36372c09c47d69d8c4f53664e88dcf50ab27186c</a> (<a href='/software/drakx/patch/perl-install/share/po/et.po?id=36372c09c47d69d8c4f53664e88dcf50ab27186c'>patch</a>)</td></tr>
<tr><th>tree</th><td colspan='2' class='sha1'><a href='/software/drakx/tree/?h=2.42&amp;id=36372c09c47d69d8c4f53664e88dcf50ab27186c'>d3f223779f9b512edd1ba2d40b1097b56ed4dffc</a> /<a href='/software/drakx/tree/perl-install/share/po/et.po?h=2.42&amp;id=36372c09c47d69d8c4f53664e88dcf50ab27186c'>perl-install/share/po/et.po</a></td></tr>
<tr><th>parent</th><td colspan='2' class='sha1'><a href='/software/drakx/commit/perl-install/share/po/et.po?h=2.42&amp;id=f86994d5a14bc9820c8a3dd161b9096cdd4e59ed'>f86994d5a14bc9820c8a3dd161b9096cdd4e59ed</a> (<a href='/software/drakx/diff/perl-install/share/po/et.po?h=2.42&amp;id=36372c09c47d69d8c4f53664e88dcf50ab27186c&amp;id2=f86994d5a14bc9820c8a3dd161b9096cdd4e59ed'>diff</a>)</td></tr><tr><th>download</th><td colspan='2' class='sha1'><a href='/software/drakx/snapshot/drakx-36372c09c47d69d8c4f53664e88dcf50ab27186c.tar'>drakx-36372c09c47d69d8c4f53664e88dcf50ab27186c.tar</a><br/><a href='/software/drakx/snapshot/drakx-36372c09c47d69d8c4f53664e88dcf50ab27186c.tar.gz'>drakx-36372c09c47d69d8c4f53664e88dcf50ab27186c.tar.gz</a><br/><a href='/software/drakx/snapshot/drakx-36372c09c47d69d8c4f53664e88dcf50ab27186c.tar.bz2'>drakx-36372c09c47d69d8c4f53664e88dcf50ab27186c.tar.bz2</a><br/><a href='/software/drakx/snapshot/drakx-36372c09c47d69d8c4f53664e88dcf50ab27186c.tar.xz'>drakx-36372c09c47d69d8c4f53664e88dcf50ab27186c.tar.xz</a><br/><a href='/software/drakx/snapshot/drakx-36372c09c47d69d8c4f53664e88dcf50ab27186c.zip'>drakx-36372c09c47d69d8c4f53664e88dcf50ab27186c.zip</a><br/></td></tr></table>
<div class='commit-subject'>update string for new drakroam</div><div class='commit-msg'></div><div class='diffstat-header'><a href='/software/drakx/diff/?h=2.42&amp;id=36372c09c47d69d8c4f53664e88dcf50ab27186c'>Diffstat</a> (limited to 'perl-install/share/po/et.po')</div><table summary='diffstat' class='diffstat'>