From d2bf78ef3304878995a537b02d90c8f598a5817f Mon Sep 17 00:00:00 2001 From: Laurent Bobelin Date: Tue, 6 Sep 2011 16:27:23 +0200 Subject: [PATCH 1/1] Simgrid website documentation should be OK now. It's now separated totally from the doc generation --- buildtools/Cmake/GenerateDoc.cmake | 15 +- .../doxygen/doxygen_postprocesser_website.pl | 465 ++++++++++++++++++ website/Doxyfile_website.in | 2 +- website/documentation.php.in | 279 +++-------- website/download.php.in | 253 +++------- website/footer.html | 40 +- website/header.html | 23 + website/img/tab_a.png | Bin 0 -> 140 bytes website/img/tab_b.png | Bin 0 -> 178 bytes website/img/tab_h.png | Bin 0 -> 192 bytes website/img/tab_s.png | Bin 0 -> 189 bytes website/index.php.in | 291 ++++------- website/logos/logo_INRIA.png | Bin 0 -> 8122 bytes website/logos/logo_LGPL.png | Bin 0 -> 4060 bytes website/logos/simgrid_logo.png | Bin 0 -> 21536 bytes website/stylesheets/simgrid.css | 19 + website/stylesheets/simgridsite.css | 92 ++++ website/stylesheets/simgridsitetabs.css | 60 +++ 18 files changed, 930 insertions(+), 609 deletions(-) create mode 100755 tools/doxygen/doxygen_postprocesser_website.pl create mode 100644 website/header.html create mode 100644 website/img/tab_a.png create mode 100644 website/img/tab_b.png create mode 100644 website/img/tab_h.png create mode 100644 website/img/tab_s.png create mode 100644 website/logos/logo_INRIA.png create mode 100644 website/logos/logo_LGPL.png create mode 100644 website/logos/simgrid_logo.png create mode 100644 website/stylesheets/simgrid.css create mode 100644 website/stylesheets/simgridsite.css create mode 100644 website/stylesheets/simgridsitetabs.css diff --git a/buildtools/Cmake/GenerateDoc.cmake b/buildtools/Cmake/GenerateDoc.cmake index bbcd09790e..ef9d8b9f0d 100644 --- a/buildtools/Cmake/GenerateDoc.cmake +++ b/buildtools/Cmake/GenerateDoc.cmake @@ -262,16 +262,24 @@ file(REMOVE ${CMAKE_HOME_DIRECTORY}/doc/tmp.curtoc) #Website configure_file(${CMAKE_HOME_DIRECTORY}/website/Doxyfile_website.in ${CMAKE_HOME_DIRECTORY}/website/Doxyfile_website @ONLY) +configure_file(${CMAKE_HOME_DIRECTORY}/website/index.php.in ${CMAKE_HOME_DIRECTORY}/website/html/index.php @ONLY) +configure_file(${CMAKE_HOME_DIRECTORY}/website/documentation.php.in ${CMAKE_HOME_DIRECTORY}/website/html/documentation.php @ONLY) +configure_file(${CMAKE_HOME_DIRECTORY}/website/download.php.in ${CMAKE_HOME_DIRECTORY}/website/html/download.php @ONLY) ADD_CUSTOM_TARGET(simgrid_website COMMENT "Generating the SimGrid Website..." DEPENDS ${WEBSITE_SOURCES} ${CMAKE_HOME_DIRECTORY}/website/all.bib - COMMAND ${CMAKE_HOME_DIRECTORY}/tools/doxygen/toc_create.pl FAQ.doc contrib.doc history.doc - COMMAND ${CMAKE_COMMAND} -E echo "XX Doxygen website pass" + COMMAND ${CMAKE_HOME_DIRECTORY}/tools/doxygen/toc_create.pl FAQ.doc contrib.doc history.doc + COMMAND ${CMAKE_COMMAND} -E echo "XX Doxygen website pass" COMMAND ${DOXYGEN_PATH}/doxygen Doxyfile_website COMMAND ${CMAKE_COMMAND} -E echo "XX Post-processing Doxygen website result" - #COMMAND ${CMAKE_HOME_DIRECTORY}/tools/doxygen/doxygen_postprocesser_website.pl + COMMAND ${CMAKE_HOME_DIRECTORY}/tools/doxygen/doxygen_postprocesser_website.pl + + COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_HOME_DIRECTORY}/website/stylesheets/ ${CMAKE_HOME_DIRECTORY}/website/html/ + COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_HOME_DIRECTORY}/website/logos/ ${CMAKE_HOME_DIRECTORY}/website/html/ + COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_HOME_DIRECTORY}/website/img/ ${CMAKE_HOME_DIRECTORY}/website/html/ + WORKING_DIRECTORY ${CMAKE_HOME_DIRECTORY}/website/ ) @@ -289,7 +297,6 @@ ADD_CUSTOM_TARGET(bib_files COMMAND ${CMAKE_HOME_DIRECTORY}/tools/doxygen/bibtex2html_wrapper.pl publis_core COMMAND ${CMAKE_HOME_DIRECTORY}/tools/doxygen/bibtex2html_wrapper.pl publis_extern COMMAND ${CMAKE_HOME_DIRECTORY}/tools/doxygen/bibtex2html_wrapper.pl publis_intra - WORKING_DIRECTORY ${CMAKE_HOME_DIRECTORY}/website/ ) diff --git a/tools/doxygen/doxygen_postprocesser_website.pl b/tools/doxygen/doxygen_postprocesser_website.pl new file mode 100755 index 0000000000..1c47f1d779 --- /dev/null +++ b/tools/doxygen/doxygen_postprocesser_website.pl @@ -0,0 +1,465 @@ +#! /usr/bin/perl + +use strict; + +# Add here the pages of the documentation generated by a @page doxygen macro +my @extra_files = qw(html/faq.html html/history.html html/contrib.html html/people.html + html/publis.html html/publis_core.html html/publis_extern.html html/publis_intra.html); + + +my %debug; +$debug{'parse'} = 0; # show how we parse the module tree +$debug{'input'} = 0; # display the resulting tree +$debug{'handle'}= 0; # Be verbose on the post-processing +$debug{'rename'}= 0; # do not overwrite the files (allows several debuging runs without rerunning doxygen) + +my @allfiles; +### +### Get the module definitions +### + +open IN, "html/modules.html" || die "Cannot parse html/modules.html. Did you really run doxygen?\n"; + +# pass headers +while () { + last if /group__SimGrid__API.html/; +} + +# Parse the tree +my $top; +my $current; +my $entry; + +# $current->{'label'}="ROOT"; +# push @{$top->{'down'}},$current; +# print "Push $current '".($current->{'label'})."' as child of $top '".($top->{'label'})."'\n" if $debug{'parse'}; +# $current=$top; +$top->{'label'}="ROOT"; +print "Create ROOT $top\n" if $debug{'parse'}; +$current=$top; + + +# Read the whole data to postprocess it a bit +my $in; +while () { + $in .= $_; +} +$in =~ s/
    /\n
      \n/sg; +foreach $_ (split(/\n/,$in)) { + next unless length($_); + next if ($_ =~ m|^$|); + print " Seen '$_'\n" if $debug{'parse'}; + if (/
        /) { + print "DOWN: $current '$current->{'label'}' -> " if $debug{'parse'}; + $current = $current->{'down'}[scalar @{$current->{'down'}} - 1]; + print "$current '$current->{'label'}'\n" if $debug{'parse'}; + next; + } + if (/<\/ul>/) { + $current = $current->{'up'}; + print "UP to $current '$current->{'label'}'\n" if $debug{'parse'}; + next; + } + if (/

        /) { + last; + } + + m|href="([^"]*)">([^<]*)|; #" + + $entry = {}; + $entry->{'file'} = $1; + $entry->{'label'} = $2; + $entry->{'up'} = $current; + push @{$current->{'down'}},$entry; + print "Push file:$1 label:'$2' as child of $current '$current->{'label'}'\n" if $debug{'parse'}; + push @allfiles,"html/$1"; +} +close IN; + +# Check each file for extra information (short name, extra childs) +sub extra_info { + my $current=shift; + + if (defined($current->{'file'})) { + open IN, "html/$current->{'file'}"; + while () { + if (/DOXYGEN_NAVBAR_LABEL/) { + if (/DOXYGEN_NAVBAR_LABEL="([^"]*)"/) {#" + print "Extra info from $current->{'file'}: label=$1, not $current->{'label'}\n" if $debug{'parse'}; + $current->{'label'}=$1; + } else { + die "Malformated DOXYGEN_NAVBAR_LABEL line in $current->{'file'}"; + } + } + if (/DOXYGEN_NAVBAR_CHILD/) { + if (/DOXYGEN_NAVBAR_CHILD *"([^"]*)"=([^ ]*)/) {#" + $entry = {}; + $entry->{'label'} = $1; + $entry->{'file'} = $2; + chomp($entry->{'file'}); + $entry->{'up'} = $current; + push @{$current->{'down'}},$entry; + print "Extra info from $current->{'file'}: New child $entry->{'label'}=$entry->{'file'}\n" if $debug{'parse'}; + } else { + die "Malformated DOXYGEN_NAVBAR_CHILD line in $current->{'file'}"; + } + } + } + } + + foreach my $entry (@{$current->{'down'}}) { + extra_info($entry); + } +} +extra_info($top); + +## debug function +sub display { + my $current=shift; + my $level=shift; + print " " x $level; + print "$current: ".$current->{'label'}." ($current->{'file'})\n"; + foreach my $entry (@{$current->{'down'}}) { + display($entry,$level+1); + } +} + +display($top,0) if $debug{'input'}; + +### +### Generate the navbar +### + +# the root deserves some special handling +open IN,"html/modules.html" || die; +open OUT,">html/modules.new.html" || die; +my $line; +while ($line = ) { + last if $line =~ /

        SimGrid Modules\n \n"; +print OUT $line; +while () { + print OUT $_; +} + +close OUT; +close IN; +rename("html/modules.new.html","html/modules.html") unless $debug{'rename'}; + +# the publication pages deserves some special handling too +my %pub_tabs = ("publis.html" =>"Reference publications", + "publis_core.html" =>"Other publication about SimGrid", + "publis_extern.html"=>"External papers using SimGrid", + "publis_intra.html"=>"Internal papers using SimGrid"); +# force ordering +my @pub_titles = ("publis.html", "publis_core.html", "publis_extern.html", "publis_intra.html"); +sub handle_pub{ + my $oldname = shift; + my $newname = $oldname; + $newname =~ s/\.html$/.new.html/; + +# print "Handle_pub($oldname -> $newname)\n"; + + open IN,"html/$oldname" || die "Cannot open $oldname"; + open OUT,">html/$newname" || die "Cannot open $newname"; + my $line; +# BIG FAT WARNING : THIS HACK IS DEPENDANT OF THE DOXYGEN VERSION AND OUR TEXT (because of the string we are looking for, that is changing with doxygen version, either h1 or div class="title" ... So we're forced to use titles defined in doc files... + while ($line = ) { + last if (($line =~ /Reference publications about SimGrid/) or ($line =~ /Publications about the SimGrid framework/) or ($line =~ /Papers that use SimGrid-generated results/) or ($line =~ /Our own papers that use SimGrid-generated results/)); + print OUT $line; + } + + print OUT "
        \n
        \n"; + print OUT $line; + while ($line = ) { + print OUT $line; + } + close OUT; + close IN; + rename("html/$newname","html/$oldname") unless $debug{'rename'}; +} +map {handle_pub($_)} @pub_titles; + + +# Operate the recursion +sub handle_page { + my $current=shift; + my $level=shift; + + print "Handle $current->{'file'} at level $level\n" if $debug{'handle'}; + + # we generate the tabs bottom up begining from where we are in the tree + # and display them top down, as it should in a file + my @tabs = (); + my $found_div_tabs=0; + + if (defined ($current->{'label'}) and $current->{'label'} ne 'ROOT') { +# print "handle $current->{'file'}, at level $level\n"; + # generate the tabs + my $iterator = $current; + my $lvl_it=$level; + while ($lvl_it >= 0) { + my $father = $iterator->{'up'}; + $tabs[$lvl_it] = "
        \n
        \n"; + $iterator = $father; + $lvl_it--; + } + if (defined $current->{'down'}) { # there's some kid. Display them too + $tabs[$level+1] = "
        \n
          \n"; + foreach my $kid (@{$current->{'down'}}) { + $tabs[$level+1] .= "
        • {'file'}\">$kid->{'label'}
        • \n"; + } + $tabs[$level+1] .= "
        \n"; + } + + # put them in place + open FROM,"html/$current->{'file'}" || die; + my $newname="html/$current->{'file'}"; + $newname =~ s/.html/.handlepage.html/; + open TO,">$newname" || die; +# print "XXX Deal with html/$current->{'file'} -> $newname\n"; + while () { +# print "--Read $_"; + # add "current" to the module API granfather page + s|
      • [^<]*
      • |
      • Modules API
      • |; +# print "++Write $_"; + $found_div_tabs=1 if m/div.*class="tabs"/; + print TO "$_"; + last if ((m||)&&($found_div_tabs)); + } + + print TO "\n\n"; + foreach (@tabs) { +# print "TAB: $_"; + print TO "$_"; + } + print TO "\n\n"; + + if ($current->{'file'} =~ m/^class/) { + while () { + last if (m||); + } + print TO "$_"; + } + while () { + if (m/POST-PROCESSED TABS/) { + while () { + last if (m/END OF POST-PROCESSED TABS/); + } + next; + } + + if (m/The documentation for/) { + while () { + last if (m/

        /); + } + } + print TO "$_"; + } + close FROM; + close TO; + rename("$newname","html/$current->{'file'}") unless $debug{'rename'}; + } + + # recurse on childs + foreach my $entry (@{$current->{'down'}}) { + handle_page($entry,$level+1); + } +} + +### +### Launch the modules navbar reworking +### +handle_page($top,-1);# skip roots (we have 2 roots) in level counting + +### +### Add the modules navbar reworking to the modules.html file +### +sub add_tabs_to_module_html { + my $found_div_tabs=0; + my $module_tabs = "

        \n
        \n"; + + my $oldname = "html/modules.html"; + open FROM,$oldname || die; + my $newname=$oldname; + $newname =~ s/.html/.handlepage.html/; + open TO,">$newname" || die; + while () { + $found_div_tabs=1 if m/div.*class="tabs"/; + print TO "$_"; + last if ((m||)&&($found_div_tabs)); + } + + print TO "\n\n"; + print TO $module_tabs; + print TO "\n\n"; + + while () { + print TO "$_"; + } + close FROM; + close TO; + rename($newname, $oldname) unless $debug{'rename'}; + + # die; +} + +add_tabs_to_module_html; + +### +### Post-processsing common to all pages +### +map {push @allfiles,$_} @extra_files; +print "All files: ".(join(", ",@allfiles))."\n" if $debug{'parse'}; + +my $tabs; + +foreach my $file (@allfiles) { + $file =~ s/.html/.handlepage.html/ if $debug{'rename'}; # Take right name if debugging + + open FROM,"$file" || die; + my $outfile = "$file"; + $outfile =~ s/.(html|php)$/.new.$1/; + open TO,">$outfile" || die; +# print "POSTPROCESSING $file (tmp=$outfile)\n"; + while () { + + + + if($tabs){ + if($file =~ /^html\/index\..*/){ + $_ =~ s/
      • /
      • /g; + $_ =~ s/
      • /
      • /g; + } + $_ =~ s/
      • /
      • /g; + + if($file =~ /^html\/pages\..*/){ + $_ =~ s/
      • /
      • /g; + } + } + + if($file =~ /^html\/publis.*/){ + $_ =~ s/
        /
        /g; + $_ =~ s/
        /
        /g; + } + + # Add the FAQ PUBLIS PEOPLE HISTORY and CONTRIB to the top navbar. + if( $_ =~ //){ + $tabs = 1; + } + if( $_ =~ /<\/div>/){ + $tabs = 0; + } + if( $_ =~ /<\/ul>/ && $tabs){ + my $tmp_buff=""; + + # LBO : ugly way to separate doc in 2 separate stuff ... + $tmp_buff .= '
      • Download
      • '."\n"; + $tmp_buff .= '
      • Online documentation
      • '."\n"; + $tmp_buff .= '
      • Publications
      • '."\n"; + $tmp_buff .= '
      • People
      • '."\n"; + $tmp_buff .= '
      • History
      • '."\n"; + $tmp_buff .= '
      • Contrib
      • '."\n"; + $tmp_buff .= '
      • FAQ Page
      • '."\n"; + + + $tmp_buff .= '
      • SimGrid Forge
      • '."\n"; + + + $tmp_buff .= $_; + $tabs = 0; + + # Rework the navbar and add menu for use.html + # Fix the current "button" of buggy Doxygen tabs + if($file =~ /^html\/use.*/ + || $file =~ /^html\/installSimgrid.*/ + || $file =~ /^html\/options.*/ + || $file =~ /^html\/bindings.*/ + || $file =~ /^html\/gtnets.*/ + || $file =~ /^html\/ns3.*/ + || $file =~ /^html\/modules.*/ + || $file =~ /^html\/annotated.*/) + { + $tmp_buff .= '
        '."\n"; + $tmp_buff .= '
        '."\n"; + $tmp_buff .= ' '."\n"; + + my $filename = $file; + $filename =~ s/html\///g; + $filename =~ s/\.html//g; + $filename =~ s/publis_.*/publis/g; + $tmp_buff =~ s/
      • /
      • /g; + $tmp_buff =~ s/
      • /
      • /g; + $tmp_buff =~ s/
      • /
      • /g; + + } + + # Rework the navbar + # Fix the current "button" of buggy Doxygen tabs + if($file =~ /^html\/publis.*/ + || $file =~ /^html\/faq.*/ + || $file =~ /^html\/people.*/ + || $file =~ /^html\/history.*/ + || $file =~ /^html\/contrib.*/ + || $file =~ /^html\/pages.*/) + { + my $filename = $file; + $filename =~ s/html\///g; + $filename =~ s/\.html//g; + $filename =~ s/publis_.*/publis/g; + $tmp_buff =~ s/
      • /
      • /g; + $tmp_buff =~ s/
      • /
      • /g; + } + + + print TO $tmp_buff; + next; + } + + s|
      • Main Page|
      • Home|g; + s|Main Page|Home|g; + s|Modules|Modules API|g; + s|Related Pages
      • \n||g; + s|
      • Modules API
      • \n||g; + s|
      • Data Structures
      • \n||g; + s|
      • Modules API
      • \n||g; + s|
      • Data Structures
      • \n||g; + s|Related Pages<|Documentation Index<|g; + s|

      "; + } + } + else { + echo "No version now.\n"; + } +} -echo ''; ?> - - - - - - - + + + - SimGrid - Scalable simulation of distributed systems, ranging from grids to peer-to-peer systems + + + + SimGrid - Online documentation - - - - - - - - - - + +

      +
      +

      +
      SimGrid - ';}?> -
      -
      - gforge INRIA
      + +
      +The documentation for SimGrid is maintained for the latest versions. It contains informations on how to use SimGrid, some tutorial, and its inner component. Here is the list of available documentation version: + +
      -______ONGLETS______ - - - - - - - - - - - - - - - - - - - - - - - - - -
        - - - - -
      - - - - - - - - - - - - - - - - - - - - -
      - - - - - - - -
      - -______BODY______ - - - - - -
      - - - - - - - -
      Project Summary
      - - -
      -
      -
      - - - -
      -

       

      -
      - CC-GNU LGPL -
      -  

      -

      - Help: siteadmin-help@lists.gforge.inria.fr Webmaster: webmaster@gforge.inria.fr -
      - - - -
      - - - -
      - - -
      -
      -Powered By GForge Collaborative Development Environment -
      - - + diff --git a/website/download.php.in b/website/download.php.in index 1763ca7f55..47d5f94fbc 100644 --- a/website/download.php.in +++ b/website/download.php.in @@ -1,214 +1,71 @@ -'; -?> - - - - - - - + + + - SimGrid - Scalable simulation of distributed systems, ranging from grids to peer-to-peer systems + + + + SimGrid - Downloads - - - - - - - - - - -
      SimGrid - ';}?> -
      -
      - gforge INRIA
      -______ONGLETS______ - - - - - - - - - - - - - - - - - -
        - - - - -
      - - - - - - - - - - - - - - - - - - - - -
      - - - - - - - - - - - -
      - +

      +SimGrid - Scalable simulation of distributed systems, ranging from grids to peer-to-peer systems +

      +

      Scalable simulation of distributed systems

      + +

      +
      +

      + + + - - - +
      + + -______BODY______ - - - - -
      - - - - - - - -
      Project Summary
      - - -
      -
      -
      - - - -
      -

       

      -
      - CC-GNU LGPL -
      -  

      -

      - Help: siteadmin-help@lists.gforge.inria.fr Webmaster: webmaster@gforge.inria.fr -
      - - - -
      - - - -
      - - -
      -
      -Powered By GForge Collaborative Development Environment -
      - - + diff --git a/website/footer.html b/website/footer.html index b59f02c7ab..44f2311b49 100644 --- a/website/footer.html +++ b/website/footer.html @@ -1,22 +1,22 @@ + + + diff --git a/website/header.html b/website/header.html new file mode 100644 index 0000000000..cc56b39f70 --- /dev/null +++ b/website/header.html @@ -0,0 +1,23 @@ + + + + + + + + + SimGrid - Scalable simulation of distributed systems, ranging from grids to peer-to-peer systems + + + + + + +

      +
      + diff --git a/website/img/tab_a.png b/website/img/tab_a.png new file mode 100644 index 0000000000000000000000000000000000000000..2d99ef23fed78c7683f0b5aa803d937060d288c4 GIT binary patch literal 140 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!Qo)`sjv*C{Z|CmjY;X`^DSv)) z;hc^cTF;t%XWXdwWP5+kt?jQ5uhqKtjd^EY`^^-S;M%tFAj_l)EwVTK)E@1LSD0{e q?a6($SGQTzz1#QBzr0NMKf^0WCX-0bi?u-G89ZJ6T-G@yGywp8?ljB* literal 0 HcmV?d00001 diff --git a/website/img/tab_b.png b/website/img/tab_b.png new file mode 100644 index 0000000000000000000000000000000000000000..b2c3d2be3c7e518fbca6bb30f571882e72fc506d GIT binary patch literal 178 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!Qk9-Ajv*C{Z|~mbJ)|JfaM8Xd zIP7xAmLwau9@iXhZTrl-TjWj9jM#?{xt`6uU{<)jb9Suc^QnbhJ(o{ib8=j9u0_mE8M7kgF7f<7W7IEf=8(L_qx|g0H;V7iPxm&Q@G7p8W2Kx&iT|YUM=ITC zY<0Qbr;u&AtXD{o@41wH=7&d8=2Z_{M9Tsa=g*t*@A3H$UOlxZk7?f6RUWpx>Fc_L s#LQ{edY3MpIXkMeV^&YV=9fR%8Jv|Kya=#u06K}m)78&qol`;+0RKEt)&Kwi literal 0 HcmV?d00001 diff --git a/website/img/tab_s.png b/website/img/tab_s.png new file mode 100644 index 0000000000000000000000000000000000000000..978943ac807718de0e69e5a585a8f0a1e5999285 GIT binary patch literal 189 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QZ1e?jv*C{Z|}b5Yzkm-c<7z3 zq^cq0=~}Z;b(!Zvb5Z%sTRFKGlz1=qOFg;myyu?$r`wZb^irPsN1a)6)TwB0r+)wb zPL25;=adu89?fTK`qDR>$D*)b_WOmdKI;Vst02j(hg8%>k literal 0 HcmV?d00001 diff --git a/website/index.php.in b/website/index.php.in index 1763ca7f55..25dfe2d20b 100644 --- a/website/index.php.in +++ b/website/index.php.in @@ -1,159 +1,103 @@ '; +$domain="gforge.inria.fr"; +$group_name="simgrid"; ?> - - - - - - - + + + + + + SimGrid - Scalable simulation of distributed systems, ranging from grids to peer-to-peer systems - - - - - - - - - - -
      SimGrid - ';}?> -
      -
      - gforge INRIA
      -______ONGLETS______ - - - - - - - - - - - - - - - - - -
        - - - - -
      - - - - - - - - - - - - - +
      - - - - - - - - - - - +
      - -______BODY______ - + +

      +
      +

      + + + - - - - - - - - - -
      +

      Welcome to the SimGrid project!

      +

      SimGrid in a nutshell:

      +

      SimGrid is a toolkit that provides core functionalities for the simulation of distributed applications in heterogeneous distributed environments. The specific goal of the project is to facilitate research in the area of parallel and distributed large scale systems, such as Grids, P2P systems and clouds. Its use cases encompass heuristic evaluation, application prototyping or even real application development and tuning +

      +

      What SimGrid can do for you ?

      +
        + +
      • +SimGrid as a Grid Simulator: Accurate yet fast simulation models +
      • +
      • +SimGrid as a P2P simulator: Highly scalable simulations (we managed to simulate 2M hosts on a single machine (see here for an example of it) +
      • +
      • +SimGrid as a MPI simulator: SimGrid provides an API to simulate reallisticaly MPI simulation +
      • +
      • And so much more: SimGrid comes with a whole ecosystem of applications, for example tools to visualize and analyse your simulation results and traces, platform generation ..., and with so fancy features to help you to handle your platform dynamicity simulation (quantitative resource sharing or qualitative churn) +
      • +
      +

      Main strengths

      +
        + +
      • Scalable: Fast, low memory footprint
      • +
      • Sound simulation models: theoretically and experimentally assessed
      • +
      • Portable: Unix/ Windows ; Numerous bindings (write your simulators in C, Lua or Java or Ruby)
      • +
      • User interfaces: models and API to simulate many different distributed systems, ranging from grid to peer-to-peer
      • +
      + + +

      Tool dissemination

      +
        + +
      • Grounded experiments of +50 scientific papers
      • +
      • +100 member of the simgrid-user mailing list
      • +
      • +5 associated tools provided by the community
      • +
      +

      Would you like to know more?

      +
        +
      • The documentation contains docs for the latests version of the tool. Each documentation contains examples, description of the different modules of the projects, and many more
      • +
      • In case of trouble, try to ask the mailing list !
      • +
      • A tutorial is also available here
      • +
      • Are you interested on the scientific ground of SimGrid ? Take a look at our publications !
      • +
      • Do you want to know the whole story of SimGrid, since when it all began ? Here is the tale of SimGrid
      • + +
      + +

      - - + - -
      + -
      - - - +
      Project Summary
      + +
      - - -
      -
      -

       

      -
      - CC-GNU LGPL -
      -  

      -

      - Help: siteadmin-help@lists.gforge.inria.fr Webmaster: webmaster@gforge.inria.fr -
      - - - -
      - - - -
      +
      - - -
      -
      -Powered By GForge Collaborative Development Environment -
      - - + diff --git a/website/logos/logo_INRIA.png b/website/logos/logo_INRIA.png new file mode 100644 index 0000000000000000000000000000000000000000..06b9cf0228a7890b1d3398d987dfda4777a39a8c GIT binary patch literal 8122 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 SO@I40U02gcqeRUq^nU>H4~sVd literal 0 HcmV?d00001 diff --git a/website/logos/logo_LGPL.png b/website/logos/logo_LGPL.png new file mode 100644 index 0000000000000000000000000000000000000000..faeac3067540fd93b70292dc73839456839a5cf4 GIT binary patch literal 4060 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 O!0@q|9`X_7{r>^hZjRvq literal 0 HcmV?d00001 diff --git a/website/logos/simgrid_logo.png b/website/logos/simgrid_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..2ff15a6e4f7ee44d1fb0ed4ba6fd17498cef3369 GIT binary patch literal 21536 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 literal 0 HcmV?d00001 diff --git a/website/stylesheets/simgrid.css b/website/stylesheets/simgrid.css new file mode 100644 index 0000000000..fbca276569 --- /dev/null +++ b/website/stylesheets/simgrid.css @@ -0,0 +1,19 @@ +/* Table Of Content styles, by Martin Quinson (but not original at all) */ +DIV.toc { + background-color: #e8eef2; + border: 1px solid #84b0c7; + font-size: 120%; + display: block; + float: right; + margin: 10px; + padding: 10px; + padding-top: 0px; + padding-bottom: 0px; + width:40%; +} + +DIV.tocTitle { + text-align: center; + font-weight: bold; + font-size: 130%; +} diff --git a/website/stylesheets/simgridsite.css b/website/stylesheets/simgridsite.css new file mode 100644 index 0000000000..23b68fc3fd --- /dev/null +++ b/website/stylesheets/simgridsite.css @@ -0,0 +1,92 @@ +/**** page main layout ****/ +body { + margin: 0px; + padding: 0px 0px 10px 0px; +} +/** Header layout ***/ +#header {text-align: center; +padding:0; margin:0 auto; +list-style:none; +width:100%; height:150px; +font-size:16px; color:#888; font-weight:normal; margin-top:15px; + } +h1 { +color:#e33729; background:#fff; +} + +/*** Main sections layout ***/ +#main {text-align: left; +padding:0; margin:0 auto; +list-style:none; +width:1000px; +font-size:16px; color:#000; font-weight:normal; margin-top:15px; + } +h1 { +color:#e33729; background:#fff; +} +h2 { +color:#e33729; background:#fff; +} +h3 { +color:#e33729; background:#fff; +} + +.subtitle { +color:#000; +} +/*** hyperrefs ***/ +a { + text-decoration: none; +} +h4 a { +color:#e33729; background:#fff; +} + +/*** Courses special layout ***/ +div.course div.description {display:none} +div.touch:hover + div.description {display:block} +div.touch{font-size:12px; color:#888; font-weight:normal;} + +/** Footer layout ***/ +#footer {text-align: center; +padding:0; margin:0 auto; +list-style:none; +width:1000px; height:200px; +font-size:12px; color:#888; font-weight:normal; margin-top:15px; + } +/*** Footer logos ***/ +ul.footerlogos {padding:0; margin:0 auto; list-style:none; width:600px; height:100px; position:relative;} +ul.footerlogos li {width:200px; height:100px; float:left;} + +ul.footerlogos li a {display:block; width:150px; height:50px; padding:25px; font-family:arial, sans-serif; color:#666; text-decoration:none; font-size:12px; +-webkit-transition: 0.1s; +-moz-transition: 0.1s; +-o-transition: 0.1s; +transition: 0.1s; +} + +ul.footerlogos li:hover > a {text-align:center; height:64px; padding:18px; cursor:pointer;} +/*** avoiding borders ***/ +a img +{ +border: none; +} +/*** For the latest news ***/ +.tablecontent {background:#f6f6f6; +} +.titlebar { +font-size:20px; +} + +/*** For doc generated title div ***/ +div.title { +text-align: center; +color:#e33729; background:#fff; +font-size:25px; +} +/*** For fitting with the 80 rule for blog-styling in doxy-generated pages ***/ +div.contents { + margin-left: auto; + margin-right: auto; +width:70%; +} diff --git a/website/stylesheets/simgridsitetabs.css b/website/stylesheets/simgridsitetabs.css new file mode 100644 index 0000000000..fe92655fea --- /dev/null +++ b/website/stylesheets/simgridsitetabs.css @@ -0,0 +1,60 @@ +.tabs, .tabs2, .tabs3 { + background-image: url('../img/tab_b.png'); + width: 100%; + z-index: 101; + font-size: 13px; + align:center; +} + +.tabs2 { + font-size: 10px; +} +.tabs3 { + font-size: 9px; +} + +.tablist { + margin: 0; + padding: 0; + display: table; +} + +.tablist li { + float: left; + display: table-cell; + background-image: url('../img/tab_b.png'); + line-height: 36px; + list-style: none; +} + +.tablist a { + display: block; + padding: 0 20px; + font-weight: bold; + background-image:url('../img/tab_s.png'); + background-repeat:no-repeat; + background-position:right; + color: #283A5D; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + text-decoration: none; + outline: none; +} + +.tabs3 .tablist a { + padding: 0 10px; +} + +.tablist a:hover { + background-image: url('../img/tab_h.png'); + background-repeat:repeat-x; + color: #fff; + text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); + text-decoration: none; +} + +.tablist li.current a { + background-image: url('../img/tab_a.png'); + background-repeat:repeat-x; + color: #fff; + text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +} -- 2.20.1