Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
add the 'Bypass lua example' into the lMSG section
[simgrid.git] / doc / FAQ.doc
index 0014620..aecaa28 100644 (file)
@@ -4,7 +4,7 @@
 
 \section faq_simgrid I'm new to SimGrid. I have some questions. Where should I start?
 
-You are at the right place... Having a look to these
+You are at the right  place... Having a look to these
 <a href="http://www.loria.fr/~quinson/articles/simgrid-tutorial.pdf">the tutorial slides</a> 
 (or to these <a href="http://graal.ens-lyon.fr/~alegrand/articles/slides_g5k_simul.pdf">old slides</a>,
 or to these
@@ -88,263 +88,7 @@ little more tricky than I would have expected, but the work is moving
 fast forward [2006/05/13]. More languages are evaluated, but for now,
 we do not feel a real demand for any other language. Please speak up!
 
-\section faq_installation Installing the SimGrid library
-
-Many people have been asking me questions on how to use SimGrid. Quite
-often, the questions were not really about SimGrid but on the
-installation process. This section is intended to help people that are
-not familiar with compiling C files under UNIX. If you follow these
-instructions and still have some troubles, drop an e-mail to
-<simgrid-user@lists.gforge.inria.fr>.
-
-\subsection faq_compiling Compiling SimGrid from a stable archive
-
-First of all, you need to download the latest version of SimGrid from 
-<a href="http://gforge.inria.fr/frs/?group_id=12">here</a>.
-Suppose you have uncompressed SimGrid in some temporary location of
-your home directory (say <tt>/home/joe/tmp/simgrid-3.0.1 </tt>). The
-simplest way to use SimGrid is to install it in your home
-directory. Change your directory to
-<tt>/home/joe/tmp/simgrid-3.0.1</tt> and type
-
-\verbatim
-./configure --prefix=$HOME
-make
-make install
-\endverbatim
-
-If at some point, something fails, check the section \ref faq_trouble_compil .
-If it does not help, you can report this problem to the
-list but, please, avoid sending a laconic mail like "There is a problem. Is it
-okay?". Send the config.log file which is automatically generated by
-configure. Try to capture both the standard output and the error output of the
-<tt>make</tt> command with <tt>script</tt>. There is no way for us to help you
-without the relevant bits of information.
-
-Now, the following directory should have been created : 
-
-      \li <tt>/home/joe/doc/simgrid/html/</tt>
-      \li <tt>/home/joe/lib/</tt>
-      \li <tt>/home/joe/include/</tt>
-
-SimGrid is not a binary, it is a library. Both a static and a dynamic
-version are available. Here is what you can find if you try a <tt>ls
-/home/joe/lib</tt>:
-
-\verbatim libsimgrid.a libsimgrid.la libsimgrid.so libsimgrid.so.0 libsimgrid.so.0.0.1
-\endverbatim
-
-Thus, there is two ways to link your program with SimGrid:
-      \li Either you use the static version, e.g 
-\verbatim gcc libsimgrid.a -o MainProgram MainProgram.c
-\endverbatim
-          In this case, all the SimGrid functions are directly
-          included in <tt>MainProgram</tt> (hence a bigger binary).
-      \li Either you use the dynamic version (the preferred method)
-\verbatim gcc -lsimgrid -o MainProgram MainProgram.c
-\endverbatim
-          In this case, the SimGrid functions are not included in
-          <tt>MainProgram</tt> and you need to set your environment
-          variable in such a way that <tt>libsimgrid.so</tt> will be
-          found at runtime. This can be done by adding the following
-          line in your .bashrc (if you use bash and if you have
-          installed the SimGrid libraries in your home directory):
-\verbatim export LD_LIBRARY_PATH=$HOME/lib/:$LD_LIBRARY_PATH
-\endverbatim
-
-\subsection faq_compiling_java Java bindings don't get compiled
-
-The configure script detects automatically whether you have the
-softwares needed to use the Java bindings or not. At the end of the
-configure, you can see the configuration picked by the script, which
-should look similar to 
-\verbatim Configuration of package simgrid' (version 3.3.4-svn) on
-little64 (=4):
-
-        Compiler:       gcc (version: )
-        
-        CFlags:          -O3 -finline-functions -funroll-loops -fno-strict-aliasing -Wall -Wunused -Wmissing-prototypes -Wmissing-declarations -Wpointer-arith -Wchar-subscripts -Wcomment -Wformat -Wwrite-strings -Wno-unused-function -Wno-unused-parameter -Wno-strict-aliasing -Wno-format-nonliteral -Werror -g3
-        CPPFlags:   
-         LDFlags:       
-                                  
-         Context backend: ucontext
-         Compile Java: no
-                                                        
-         Maintainer mode: no
-         Supernovae mode: yes
-\endverbatim      
-
-In this example, Java backends won't be compiled. 
-
-On Debian-like systems (which includes ubuntu), you need the following
-packages: sun-java6-jdk libgcj10-dev. If you cannot find the
-libgcj10-dev, try another version, like libgcj9-dev (on Ubuntu before
-9.10) or libgcj11-dev (not released yet, but certainly one day).
-Please note that you need to activate the contrib and non-free
-repositories in Debian, and the universe ones in Ubuntu. Java comes at
-this price...
-
-\subsection faq_compiling_snapshoot SimGrid development snapshots
-
-We have very high standards on software quality, and we are reluctant releasing
-a stable release as long as there is still some known bug in the code base. In
-addition, we added quite an extensive test base, making sure that we correctly
-test the most important parts of the tool. 
-
-As an unfortunate conclusion, there may be some time between the stable
-releases. If you want to benefit from the most recent features we introduced,
-but don't want to take the risk of an untested version from the SVN, then
-development snapshots are done for you. 
-
-These are pre-releases of SimGrid that still fail some tests about features
-that almost nobody use, or on platforms not being in our core target (which is
-Linux, Mac, other Unixes and Windows, from the most important to the less
-one). That means that using this development releases should be safe for most
-users. 
-
-These archives can be found on 
-<a href="http://www.loria.fr/~quinson/simgrid.html">this web page</a>. Once you 
-got the lastest archive, you can compile it just like any archive (see above).
-
-\subsection faq_compiling_svn Compiling SimGrid from the SVN
-
-The project development takes place in the SVN, where all changes are
-committed when they happen. Then every once in a while, we make sure that the
-code quality meets our standard and release an archive from the code in the
-SVN. We afterward go back to the development in the SVN. So, if you need a
-recently added feature and can afford some little problem with the stability
-of the lastest features, you may want to use the SVN version instead of a
-released one.
-
-For that, you first need to get the "simgrid" module from
-<a href="http://gforge.inria.fr/scm/?group_id=12">here</a>. 
-
-You won't find any <tt>configure</tt> and a few other things
-(<tt>Makefile.in</tt>'s, documentation, ...) will be missing as well. The
-reason for that is that all these files have to be regenerated using the
-latest versions of <tt>autoconf</tt>, <tt>libtool</tt>, <tt>automake</tt>
-(>1.9) and <tt>doxygen</tt> (>1.4). To generate the <tt>configure</tt> and
-the <tt>Makefile.in</tt>'s, you just have to launch the <tt>bootstrap</tt>
-command that resides in the top of the source tree. Then just follow the
-instructions of Section \ref faq_compiling.
-
-We insist on the fact that you really need the latest versions of
-autoconf, automake and libtool. Doing this step on exotic architectures/systems
-(i.e. anything different from a recent linux distribution) may be
-... uncertain. If you need to compile the SVN version on a machine where all these
-dependencies are not met, the easiest is to do <tt>make dist</tt> in the SVN
-directory of another machine where all dependencies are met. It will create an
-archive you may deploy on other sites just as a regular stable release.
-
-In summary, the following commands will checkout the SVN, regenerate the
-configure script and friends, configure SimGrid and build it.
-
-\verbatim svn checkout svn://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk simgrid
-cd simgrid
-./bootstrap
-./configure --enable-maintainer-mode --prefix=<where to install SimGrid>
-make \endverbatim
-
-Then, if you want to install SimGrid on the current box, just do:
-\verbatim make install \endverbatim
-
-If you want to build an snapshot of the SVN to deploy it on another box (for
-example because the other machine don't have the autotools), do:
-\verbatim make dist \endverbatim
-
-Moreover, you should never call the autotools manually since you must run
-them in a specific order with specific arguments. Most of the times, the
-makefiles will automatically call the tools for you. When it's not possible
-(such as the first time you checkout the SVN), use the ./bootstrap command
-to call them explicitly.
-
-
-\subsection faq_setting_MSG Setting up your own MSG code
-
-Do not build your simulator by modifying the SimGrid examples.  Go
-outside the SimGrid source tree and create your own working directory
-(say <tt>/home/joe/SimGrid/MyFirstScheduler/</tt>).
-
-Suppose your simulation has the following structure (remember it is
-just an example to illustrate a possible way to compile everything;
-feel free to organize it as you want).
-
-      \li <tt>sched.h</tt>: a description of the core of the
-          scheduler (i.e. which functions are can be used by the
-          agents). For example we could find the following functions
-          (master, forwarder, slave).
-
-      \li <tt>sched.c</tt>: a C file including <tt>sched.h</tt> and
-          implementing the core of the scheduler. Most of these
-          functions use the MSG functions defined in section \ref
-          msg_gos_functions.
-
-      \li <tt>masterslave.c</tt>: a C file with the main function, i.e.
-          the MSG initialization (MSG_global_init()), the platform
-          creation (e.g. with MSG_create_environment()), the
-          deployment phase (e.g. with MSG_function_register() and
-          MSG_launch_application()) and the call to
-          MSG_main()).
-
-To compile such a program, we suggest to use the following
-Makefile. It is a generic Makefile that we have used many times with
-our students when we teach the C language.
-
-\verbatim
-all: masterslave 
-masterslave: masterslave.o sched.o
-
-INSTALL_PATH = $$HOME
-CC = gcc
-PEDANTIC_PARANOID_FREAK =       -O0 -Wshadow -Wcast-align \
-                               -Waggregate-return -Wmissing-prototypes -Wmissing-declarations \
-                               -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations \
-                               -Wmissing-noreturn -Wredundant-decls -Wnested-externs \
-                               -Wpointer-arith -Wwrite-strings -finline-functions
-REASONABLY_CAREFUL_DUDE =      -Wall
-NO_PRAYER_FOR_THE_WICKED =     -w -O2 
-WARNINGS =                     $(REASONABLY_CAREFUL_DUDE)
-CFLAGS = -g $(WARNINGS)
-
-INCLUDES = -I$(INSTALL_PATH)/include
-DEFS = -L$(INSTALL_PATH)/lib/
-LDADD = -lm -lsimgrid 
-LIBS = 
-
-%: %.o
-       $(CC) $(INCLUDES) $(DEFS) $(CFLAGS) $^ $(LIBS) $(LDADD) -o $@ 
-
-%.o: %.c
-       $(CC) $(INCLUDES) $(DEFS) $(CFLAGS) -c -o $@ $<
-
-clean:
-       rm -f $(BIN_FILES) *.o *~
-.SUFFIXES:
-.PHONY : clean
-
-\endverbatim
-
-The first two lines indicates what should be build when typing make
-(<tt>masterslave</tt>) and of which files it is to be made of
-(<tt>masterslave.o</tt> and <tt>sched.o</tt>). This makefile assumes
-that you have set up correctly your <tt>LD_LIBRARY_PATH</tt> variable
-(look, there is a <tt>LDADD = -lm -lsimgrid</tt>). If you prefer using
-the static version, remove the <tt>-lsimgrid</tt> and add a
-<tt>$(INSTALL_PATH)/lib/libsimgrid.a</tt> on the next line, right
-after the <tt>LIBS = </tt>.
-
-More generally, if you have never written a Makefile by yourself, type
-in a terminal : <tt>info make</tt> and read the introduction. The
-previous example should be enough for a first try but you may want to
-perform some more complex compilations...
-
-\subsection faq_setting_GRAS Setting up your own GRAS code
-
-If you use the GRAS interface instead of the MSG one, then previous section
-is not the better source of information. Instead, you should check the GRAS
-tutorial in general, and the \ref GRAS_tut_tour_setup in particular.
-
-\section faq_cmake CMAKE
+\section faq_cmake Installing the SimGrid library with Cmake (since V3.4)
 
 \subsection faq_intro Some generalitty
 
@@ -354,7 +98,7 @@ CMake is a family of tools designed to build, test and package software. CMake i
 
 \subsubsection faq_intro2 Why cmake?
 
-CMake permits to developers to compil projects on different plateform. Then many tools are embedded like ctest for making test, a link to cdash for vizualise results but also test coverage and bug reports. 
+CMake permits to developers to compil projects on different plateforms. Then many tools are embedded like ctest for making test, a link to cdash for vizualise results but also test coverage and bug reports. 
 
 \subsubsection faq_intro3 What cmake need?
 
@@ -364,10 +108,26 @@ CMake needs some prerequists like :
   \li ccmake for graphical used of CMake
   \li cmake <a href="http://www.cmake.org/cmake/resources/software.html">(download page)</a>
 
-\subsubsection faq_intro4 Cmake vs Autotools...
-
-TODO
-
+For windows only : 
+  \li Visual C++ 2010 Express <a href="http://www.microsoft.com/express/Downloads/#2010-Visual-CPP">(download page)</a>
+  \li cmake <a href="http://www.cmake.org/cmake/resources/software.html">(download page)</a>
+  \li Set CC, CXX, INCLUDE, LIB and RC to environment variables.
+\verbatim
+SET --> CC     TO --> C:\MicrosoftVisualStudio10\VC\bin\cl
+    --> CXX       --> C:\MicrosoftVisualStudio10\VC\bin\cl
+    --> INCLUDE           --> C:\MicrosoftVisualStudio10\VC\include;C:\Program Files\Microsoft SDKs\Windows\v7.OA\Include
+    --> LIB       --> C:\MicrosoftVisualStudio10\VC\lib;C:\Program Files\Microsoft SDKs\Windows\v7.OA\Lib
+    --> RC        --> C:\Program Files\Microsoft SDKs\Windows\v7.OA\bin\RC
+\endverbatim
+  \li Add to environment variable "Path" the path where to find nmake executable and some needed files.
+\verbatim
+......
+;C\MicrosoftVisualStudio10\VC\bin
+;C\MicrosoftVisualStudio10\Common7\IDE
+;C:\Program Files\Microsoft SDKs\Windows\v7.OA\bin
+;C:\Program Files\Microsoft SDKs\Windows\v7.OA\Lib
+;C:\Program Files\Microsoft SDKs\Windows\v7.OA\bInclude
+\endverbatim  
 \subsection faq_cmakeoption Cmake options
 
 \subsubsection faq_cmakeoption1 Liste of options
@@ -387,7 +147,8 @@ TODO
                enable_tracing                          ON/OFF or TRUE/FALSE or 1/0
                enable_coverage                         ON/OFF or TRUE/FALSE or 1/0
                enable_memcheck                         ON/OFF or TRUE/FALSE or 1/0 
-               enable_print_message                    ON/OFF or TRUE/FALSE or 1/0
+               enable_model-checking                   ON/OFF or TRUE/FALSE or 1/0
+               enable_doc                              ON/OFF or TRUE/FALSE or 1/0
 
                gtnets_path                             <path_to_gtnets_directory>
                prefix                                  <path_to_install_directory>
@@ -411,42 +172,9 @@ TODO
 
   \li enable_smpi : Set to true if you want to use smpi lib. Actually on simgrid v3.4.1 Mac doesn't support lib smpi.
 
-  \li enable_maintainer_mode : set to true it remakes some files.
-\verbatim
-include/surf/simgrid_dtd.h
-include/xbt/graphxml.h
-
-src/cunit_unit.c
-src/ex_unit.c
-src/dynar_unit.c
-src/dict_unit.c
-src/set_unit.c
-src/swag_unit.c
-src/xbt_str_unit.c
-src/xbt_strbuff_unit.c
-src/xbt_sha_unit.c
-src/config_unit.c
-src/xbt_synchro_unit.c
-src/simgrid_units_main.c
-
-src/simdag/dax_dtd.c
-src/simdag/dax_dtd.h
-src/simdag/dax_dtd.l
-
-src/surf/simgrid_dtd.c
-src/surf/simgrid_dtd.l
-
-src/xbt/graphxml.c
-src/xbt/graphxml.l
-
-src/gras/DataDesc/ddt_parse.yy.c
-\endverbatim
+  \li enable_maintainer_mode : set to true it remakes some files. 
+
   \li enable_supernovae : set to true make one file for each lib and compile with those generated files.
-\verbatim
-/src/supernovae_sg.c
-/src/supernovae_gras.c                 
-/src/supernovae_smpi.c
-\endverbatim
 
   \li enable_tracing : To enable the generation of simulation traces for visualization
 
@@ -454,7 +182,9 @@ src/gras/DataDesc/ddt_parse.yy.c
 
   \li enable_memcheck : When set to true this option enable tests for memcheck.
 
-  \li enable_print_message : This option when enable permits to see variables from gras_config.h
+  \li enable_model-checking : Enable the model checking when set to true.
+  
+  \li enable_doc : Generate the documentation for simgrid with make command. (You can also make the doc manually with command : make html)
 
   \li gtnets_path : Path to gtnets install directory (ex /usr)
 
@@ -466,7 +196,7 @@ src/gras/DataDesc/ddt_parse.yy.c
 
 \subsubsection faq_cmakeoption3 Initialisation
 
-Those options are initialized the first time you launch \"cmake ./\" whithout specified option.
+Those options are initialized the first time you launch "cmake ." whithout specified option.
 
 \verbatim
 enable_gtnets                  on
@@ -481,7 +211,8 @@ enable_supernovae           off
 enable_tracing                 off
 enable_coverage                off
 enable_memcheck                off
-enable_print_message           off
+enable_model-checking          off
+enable_doc                     off
 
 gtnets_path                    null
 prefix                         null
@@ -491,7 +222,7 @@ with_context                        auto
 
 \subsubsection faq_cmakeoption4 Option's cache and how to reset?
 
-When options have been set they are keep into a cache file named \"CMakeCache.txt\". So if you want 
+When options have been set they are keep into a cache file named "CMakeCache.txt". So if you want 
 reset values you just delete this file located to the project directory.
 
 \subsection faq_cmakecompilation Cmake compilation
@@ -510,18 +241,41 @@ make
 \endverbatim
 Then follow instructions.
 
+\subsubsection faq_cmakecompilation2bis Build out of source.
+
+As cmake generate many files used for compilation, we recommand to make a build directory.
+For examples you can make :
+
+\verbatim
+"navarrop@caraja:~/Developments$ cd simgrid/"
+"navarrop@caraja:~/Developments/simgrid$ mkdir build_directory"
+"navarrop@caraja:~/Developments/simgrid$ cd build_directory/"
+"navarrop@caraja:~/Developments/simgrid/build_directory$ cmake ../"
+"navarrop@caraja:~/Developments/simgrid/build_directory$ make"
+\endverbatim
+
+Or complety out of sources :
+
+\verbatim
+"navarrop@caraja:~/Developments$ mkdir build_dir"
+"navarrop@caraja:~/Developments$ cd build_dir/"
+"navarrop@caraja:~/Developments/build_dir$ cmake ../simgrid/"
+"navarrop@caraja:~/Developments/build_dir$ make"
+\endverbatim
+
+Those two kind of compilation permit to delete files created by compilation easier.
+
 \subsubsection faq_cmakecompilation3 Resume of command line
 
  \li CMake
 \verbatim
-cmake ./               configure the project
+cmake <path>           configure the project
 make                   build all targets
 make VERBOSE=1         build all targets and print build command lines
-make check             execute command make test
-make test              test all targets and summarize
+make check             test all targets and summarize
 make dist              make the distrib
-make distcheck         check the dist (make + make dist + make test
-make install-simgrid   install the project (doc/ lib/ include/)
+make distcheck         check the dist (make + make dist + make check
+make install           install the project (doc/ lib/ include/)
 make uninstall         uninstall the project (doc/ lib/ include/)
 make clean             clean all targets
 make java-clean                clean files created by java option
@@ -530,7 +284,6 @@ make supernovae-clean       clean supernovae files
 make maintainer-clean  clean maintainer files
 make all-clean         execute the 5 upper clean command
 make html              Create simgrid documentation
-make maintainer-clean   Remove all files generated by mainainer mode
 \endverbatim
 
 When the project have been succesfully compiling and build you can make tests.
@@ -704,7 +457,7 @@ Configuration of package `simgrid' (revision 7669) on arch (=4):
 \verbatim
 cmake -Denable_maintainer_mode=on -Dprefix=/home/navarrop/Bureau/install_simgrid ./
 make 
-make install-simgrid
+make install
 \endverbatim
 
 \subsubsection faq_cmakeinstall2 From a distrib
@@ -712,7 +465,7 @@ make install-simgrid
 \verbatim
 cmake -Dprefix=/home/navarrop/Bureau/install_simgrid ./
 make
-make install-simgrid
+make install
 \endverbatim
 
 \subsection faq_cmakehowto How to modified sources files for developers
@@ -734,7 +487,7 @@ add_executable(get_sender get_sender.c)                                     #add_executable(<name_of_target> <sr
 target_link_libraries(get_sender simgrid m pthread -fprofile-arcs)     #target_link_libraries(<name_of_targe> <dependencies>)
 \endverbatim
 
-Then you have to modified <project/directory>/buildtools/Cmake/src/CMakeMakeExeLib.txt and add 
+Then you have to modified <project/directory>/buildtools/Cmake/MakeExeLib.cmake and add 
 this line :
 \verbatim
 add_subdirectory(${PROJECT_DIRECTORY}/<path_where_is_CMakeList.txt>)
@@ -742,7 +495,7 @@ add_subdirectory(${PROJECT_DIRECTORY}/<path_where_is_CMakeList.txt>)
 
 \subsubsection faq_cmakehowto2 Delete/add sources to lib.
 
-If you want modified, add or delete source files from a library you have to edit <project/directory>/buildtools/Cmake/src/CMakeDefinePackages.txt
+If you want modified, add or delete source files from a library you have to edit <project/directory>/buildtools/Cmake/DefinePackages.cmake
 
 \verbatim
 set(JMSG_JAVA_SRC
@@ -763,154 +516,395 @@ set(JMSG_JAVA_SRC
 
 \subsubsection faq_cmakehowto3 Add test
 
-If you want modified, add or delete tests you have to edit <project/directory>/buildtools/Cmake/src/CMakeTest.txt 
+If you want modified, add or delete tests you have to edit <project/directory>/buildtools/Cmake/AddTests.cmake 
 with this function : ADD_TEST(<name> <bin> <ARGS>)
 
 \verbatim
 add_test(test-simdag-1 ${PROJECT_DIRECTORY}/testsuite/simdag/sd_test --cfg=path:${PROJECT_DIRECTORY}/testsuite/simdag small_platform_variable.xml)
 \endverbatim
 
-\subsection faq_cmakeExplain Explaination of sources files for cmake
+\subsection faq_cmakeExplain Explaination of sources files for cmake
+
+\li CMakeLists.txt
+
+Those files are the "main parts". One located at the project directory call all the cmake sources files. The others
+are little projects called by the first for make examples.
+
+\li CompleteInFiles.cmake
+
+Complete all .in files and define Variables for h files
+
+\li GenerateDoc.cmake
+
+This file make the html documentation.
+
+\li MakeExeLib.cmake
+
+Here are callled all "CMakeLists.txt" for make executables and libraries.
+
+\li PrintArgs.cmake
+
+This file is called at the end of the build for summarize environment variables.
+
+\li DefinePackages.cmake
+
+Here is defined sources packages for compiling libs.
+
+\li Flags.cmake
+
+Defined flags which are used for compiling sources.
+
+\li Supernovae.cmake
+
+Here are made files for the supernovae mode.
+
+\li Distrib.cmake
+
+Here is defined packages for install simgrid and make a distribution.
+
+\li MaintainerMode.cmake
+
+Part where are generated source files for maintainer mode.
+
+\li Option.cmake
+
+Here are defined options and initialized values.
+
+\li AddTests.cmake
+
+All tests are listed.
+
+\li CTestConfig.cmake
+
+Properties which link tests with dashboard.
+
+\subsection faq_cmakeList List of files added for cmake
+
+Here is a list of files involved into cmake build (relative to project directory path) :
+\verbatim
+
+Cmake sources:
+       ./doc/CMakeLists.txt
+       ./buildtools/Cmake/AddTests.cmake
+       ./buildtools/Cmake/CompleteInFiles.cmake
+       ./buildtools/Cmake/CTestConfig.cmake
+       ./buildtools/Cmake/DefinePackages.cmake
+       ./buildtools/Cmake/Distrib.cmake
+       ./buildtools/Cmake/Flags.cmake
+       ./buildtools/Cmake/GenerateDocs.cmake
+       ./buildtools/Cmake/MaintainerMode.cmake
+       ./buildtools/Cmake/MakeExeLib.cmake
+       ./buildtools/Cmake/MakeExeLibWin.cmake
+       ./buildtools/Cmake/MakeJava.cmake
+       ./buildtools/Cmake/Option.cmake
+       ./buildtools/Cmake/PrintArgs.cmake
+       ./buildtools/Cmake/Supernovae.cmake
+       
+CMakeLists for each binaries or examples:
+       ./CMakeLists.txt
+       ./src/CMakeLists.txt
+       ./teshsuite/gras/empty_main/CMakeLists.txt
+       ./teshsuite/gras/small_sleep/CMakeLists.txt
+       ./teshsuite/gras/datadesc/CMakeLists.txt
+       ./teshsuite/gras/msg_handle/CMakeLists.txt
+       ./teshsuite/simdag/CMakeLists.txt
+       ./teshsuite/simdag/partask/CMakeLists.txt
+       ./teshsuite/simdag/platforms/CMakeLists.txt
+       ./teshsuite/simdag/network/CMakeLists.txt
+       ./teshsuite/simdag/network/mxn/CMakeLists.txt
+       ./teshsuite/simdag/network/p2p/CMakeLists.txt
+       ./teshsuite/xbt/CMakeLists.txt
+       ./teshsuite/msg/CMakeLists.txt
+       ./tools/gras/CMakeLists.txt
+       ./tools/tesh/CMakeLists.txt
+       ./testsuite/simdag/CMakeLists.txt
+       ./testsuite/xbt/CMakeLists.txt
+       ./testsuite/surf/CMakeLists.txt
+       ./examples/gras/properties/CMakeLists.txt
+       ./examples/gras/ping/CMakeLists.txt
+       ./examples/gras/pmm/CMakeLists.txt
+       ./examples/gras/mmrpc/CMakeLists.txt
+       ./examples/gras/synchro/CMakeLists.txt
+       ./examples/gras/timer/CMakeLists.txt
+       ./examples/gras/mutual_exclusion/simple_token/CMakeLists.txt
+       ./examples/gras/spawn/CMakeLists.txt
+       ./examples/gras/chrono/CMakeLists.txt
+       ./examples/gras/rpc/CMakeLists.txt
+       ./examples/gras/all2all/CMakeLists.txt
+       ./examples/simdag/properties/CMakeLists.txt
+       ./examples/simdag/CMakeLists.txt
+       ./examples/simdag/metaxml/CMakeLists.txt
+       ./examples/simdag/dax/CMakeLists.txt
+       ./examples/smpi/CMakeLists.txt
+       ./examples/amok/bandwidth/CMakeLists.txt
+       ./examples/amok/saturate/CMakeLists.txt
+       ./examples/msg/priority/CMakeLists.txt
+       ./examples/msg/properties/CMakeLists.txt
+       ./examples/msg/migration/CMakeLists.txt
+       ./examples/msg/gtnets/CMakeLists.txt
+       ./examples/msg/parallel_task/CMakeLists.txt
+       ./examples/msg/trace/CMakeLists.txt
+       ./examples/msg/suspend/CMakeLists.txt
+       ./examples/msg/masterslave/CMakeLists.txt
+       ./examples/msg/actions/CMakeLists.txt
+       ./examples/msg/sendrecv/CMakeLists.txt
+\endverbatim
+
+\section faq_installation Installing the SimGrid library with Autotools (valid until V3.3.4)
+
+Many people have been asking me questions on how to use SimGrid. Quite
+often, the questions were not really about SimGrid but on the
+installation process. This section is intended to help people that are
+not familiar with compiling C files under UNIX. If you follow these
+instructions and still have some troubles, drop an e-mail to
+<simgrid-user@lists.gforge.inria.fr>.
+
+\subsection faq_compiling Compiling SimGrid from a stable archive
+
+First of all, you need to download the latest version of SimGrid from 
+<a href="http://gforge.inria.fr/frs/?group_id=12">here</a>.
+Suppose you have uncompressed SimGrid in some temporary location of
+your home directory (say <tt>/home/joe/tmp/simgrid-3.0.1 </tt>). The
+simplest way to use SimGrid is to install it in your home
+directory. Change your directory to
+<tt>/home/joe/tmp/simgrid-3.0.1</tt> and type
+
+\verbatim
+./configure --prefix=$HOME
+make
+make install
+\endverbatim
+
+If at some point, something fails, check the section \ref faq_trouble_compil .
+If it does not help, you can report this problem to the
+list but, please, avoid sending a laconic mail like "There is a problem. Is it
+okay?". Send the config.log file which is automatically generated by
+configure. Try to capture both the standard output and the error output of the
+<tt>make</tt> command with <tt>script</tt>. There is no way for us to help you
+without the relevant bits of information.
+
+Now, the following directory should have been created : 
+
+      \li <tt>/home/joe/doc/simgrid/html/</tt>
+      \li <tt>/home/joe/lib/</tt>
+      \li <tt>/home/joe/include/</tt>
+
+SimGrid is not a binary, it is a library. Both a static and a dynamic
+version are available. Here is what you can find if you try a <tt>ls
+/home/joe/lib</tt>:
+
+\verbatim libsimgrid.a libsimgrid.la libsimgrid.so libsimgrid.so.0 libsimgrid.so.0.0.1
+\endverbatim
+
+Thus, there is two ways to link your program with SimGrid:
+      \li Either you use the static version, e.g 
+\verbatim gcc libsimgrid.a -o MainProgram MainProgram.c
+\endverbatim
+          In this case, all the SimGrid functions are directly
+          included in <tt>MainProgram</tt> (hence a bigger binary).
+      \li Either you use the dynamic version (the preferred method)
+\verbatim gcc -lsimgrid -o MainProgram MainProgram.c
+\endverbatim
+          In this case, the SimGrid functions are not included in
+          <tt>MainProgram</tt> and you need to set your environment
+          variable in such a way that <tt>libsimgrid.so</tt> will be
+          found at runtime. This can be done by adding the following
+          line in your .bashrc (if you use bash and if you have
+          installed the SimGrid libraries in your home directory):
+\verbatim export LD_LIBRARY_PATH=$HOME/lib/:$LD_LIBRARY_PATH
+\endverbatim
+
+\subsection faq_compiling_java Java bindings don't get compiled
+
+The configure script detects automatically whether you have the
+softwares needed to use the Java bindings or not. At the end of the
+configure, you can see the configuration picked by the script, which
+should look similar to 
+\verbatim Configuration of package simgrid' (version 3.3.4-svn) on
+little64 (=4):
+
+        Compiler:       gcc (version: )
+        
+        CFlags:          -O3 -finline-functions -funroll-loops -fno-strict-aliasing -Wall -Wunused -Wmissing-prototypes -Wmissing-declarations -Wpointer-arith -Wchar-subscripts -Wcomment -Wformat -Wwrite-strings -Wno-unused-function -Wno-unused-parameter -Wno-strict-aliasing -Wno-format-nonliteral -Werror -g3
+        CPPFlags:   
+         LDFlags:       
+                                  
+         Context backend: ucontext
+         Compile Java: no
+                                                        
+         Maintainer mode: no
+         Supernovae mode: yes
+\endverbatim      
+
+In this example, Java backends won't be compiled. 
+
+On Debian-like systems (which includes ubuntu), you need the following
+packages: sun-java6-jdk libgcj10-dev. If you cannot find the
+libgcj10-dev, try another version, like libgcj9-dev (on Ubuntu before
+9.10) or libgcj11-dev (not released yet, but certainly one day).
+Please note that you need to activate the contrib and non-free
+repositories in Debian, and the universe ones in Ubuntu. Java comes at
+this price...
+
+\subsection faq_compiling_snapshoot SimGrid development snapshots
+
+We have very high standards on software quality, and we are reluctant releasing
+a stable release as long as there is still some known bug in the code base. In
+addition, we added quite an extensive test base, making sure that we correctly
+test the most important parts of the tool. 
+
+As an unfortunate conclusion, there may be some time between the stable
+releases. If you want to benefit from the most recent features we introduced,
+but don't want to take the risk of an untested version from the SVN, then
+development snapshots are done for you. 
 
-\li CMakeLists.txt
+These are pre-releases of SimGrid that still fail some tests about features
+that almost nobody use, or on platforms not being in our core target (which is
+Linux, Mac, other Unixes and Windows, from the most important to the less
+one). That means that using this development releases should be safe for most
+users. 
 
-Those files are the "main parts". One located at the project directory call all the cmake sources files. The others
-are little projects called by the first for make examples.
+These archives can be found on 
+<a href="http://www.loria.fr/~quinson/simgrid.html">this web page</a>. Once you 
+got the lastest archive, you can compile it just like any archive (see above).
 
-\li CMakeCompleteInFiles.txt
+\subsection faq_compiling_svn Compiling SimGrid from the SVN
 
-Complete all .in files and define Variables for h files
+The project development takes place in the SVN, where all changes are
+committed when they happen. Then every once in a while, we make sure that the
+code quality meets our standard and release an archive from the code in the
+SVN. We afterward go back to the development in the SVN. So, if you need a
+recently added feature and can afford some little problem with the stability
+of the lastest features, you may want to use the SVN version instead of a
+released one.
 
-\li CMakeDocs.txt
+For that, you first need to get the "simgrid" module from
+<a href="http://gforge.inria.fr/scm/?group_id=12">here</a>. 
 
-This file make the html documentation.
+You won't find any <tt>configure</tt> and a few other things
+(<tt>Makefile.in</tt>'s, documentation, ...) will be missing as well. The
+reason for that is that all these files have to be regenerated using the
+latest versions of <tt>autoconf</tt>, <tt>libtool</tt>, <tt>automake</tt>
+(>1.9) and <tt>doxygen</tt> (>1.4). To generate the <tt>configure</tt> and
+the <tt>Makefile.in</tt>'s, you just have to launch the <tt>bootstrap</tt>
+command that resides in the top of the source tree. Then just follow the
+instructions of Section \ref faq_compiling.
 
-\li CMakeMakeExeLib.txt
+We insist on the fact that you really need the latest versions of
+autoconf, automake and libtool. Doing this step on exotic architectures/systems
+(i.e. anything different from a recent linux distribution) may be
+... uncertain. If you need to compile the SVN version on a machine where all these
+dependencies are not met, the easiest is to do <tt>make dist</tt> in the SVN
+directory of another machine where all dependencies are met. It will create an
+archive you may deploy on other sites just as a regular stable release.
 
-Here are callled all "CMakeLists.txt" for make executables and libraries.
+In summary, the following commands will checkout the SVN, regenerate the
+configure script and friends, configure SimGrid and build it.
 
-\li CMakePrintArgs.txt
+\verbatim svn checkout svn://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk simgrid
+cd simgrid
+./bootstrap
+./configure --enable-maintainer-mode --prefix=<where to install SimGrid>
+make \endverbatim
 
-This file is called at the end of the build for summarize environment variables.
+Then, if you want to install SimGrid on the current box, just do:
+\verbatim make install \endverbatim
 
-\li CMakeDefinePackages.txt
+If you want to build an snapshot of the SVN to deploy it on another box (for
+example because the other machine don't have the autotools), do:
+\verbatim make dist \endverbatim
 
-Here is defined sources packages for compiling libs.
+Moreover, you should never call the autotools manually since you must run
+them in a specific order with specific arguments. Most of the times, the
+makefiles will automatically call the tools for you. When it's not possible
+(such as the first time you checkout the SVN), use the ./bootstrap command
+to call them explicitly.
 
-\li CMakeFlags.txt
 
-Defined flags which are used for compiling sources.
+\subsection faq_setting_MSG Setting up your own MSG code
 
-\li CMakeSupernovae.txt
+Do not build your simulator by modifying the SimGrid examples.  Go
+outside the SimGrid source tree and create your own working directory
+(say <tt>/home/joe/SimGrid/MyFirstScheduler/</tt>).
 
-Here are made files for the supernovae mode.
+Suppose your simulation has the following structure (remember it is
+just an example to illustrate a possible way to compile everything;
+feel free to organize it as you want).
 
-\li CMakeDistrib.txt
+      \li <tt>sched.h</tt>: a description of the core of the
+          scheduler (i.e. which functions are can be used by the
+          agents). For example we could find the following functions
+          (master, forwarder, slave).
 
-Here is defined packages for install simgrid and make a distribution.
+      \li <tt>sched.c</tt>: a C file including <tt>sched.h</tt> and
+          implementing the core of the scheduler. Most of these
+          functions use the MSG functions defined in section \ref
+          msg_gos_functions.
 
-\li CMakeMaintainerMode.txt
+      \li <tt>masterslave.c</tt>: a C file with the main function, i.e.
+          the MSG initialization (MSG_global_init()), the platform
+          creation (e.g. with MSG_create_environment()), the
+          deployment phase (e.g. with MSG_function_register() and
+          MSG_launch_application()) and the call to
+          MSG_main()).
 
-Part where are generated source files for maintainer mode.
+To compile such a program, we suggest to use the following
+Makefile. It is a generic Makefile that we have used many times with
+our students when we teach the C language.
 
-\li CMakeOption.txt
+\verbatim
+all: masterslave 
+masterslave: masterslave.o sched.o
 
-Here are defined options and initialized values.
+INSTALL_PATH = $$HOME
+CC = gcc
+PEDANTIC_PARANOID_FREAK =       -O0 -Wshadow -Wcast-align \
+                               -Waggregate-return -Wmissing-prototypes -Wmissing-declarations \
+                               -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations \
+                               -Wmissing-noreturn -Wredundant-decls -Wnested-externs \
+                               -Wpointer-arith -Wwrite-strings -finline-functions
+REASONABLY_CAREFUL_DUDE =      -Wall
+NO_PRAYER_FOR_THE_WICKED =     -w -O2 
+WARNINGS =                     $(REASONABLY_CAREFUL_DUDE)
+CFLAGS = -g $(WARNINGS)
 
-\li CMakeTest.txt
+INCLUDES = -I$(INSTALL_PATH)/include
+DEFS = -L$(INSTALL_PATH)/lib/
+LDADD = -lm -lsimgrid 
+LIBS = 
 
-All tests are listed.
+%: %.o
+       $(CC) $(INCLUDES) $(DEFS) $(CFLAGS) $^ $(LIBS) $(LDADD) -o $@ 
 
-\li CTestConfig.cmake
+%.o: %.c
+       $(CC) $(INCLUDES) $(DEFS) $(CFLAGS) -c -o $@ $<
 
-Properties which link tests with dashboard.
+clean:
+       rm -f $(BIN_FILES) *.o *~
+.SUFFIXES:
+.PHONY : clean
 
-\subsection faq_cmakeList List of files added for cmake
+\endverbatim
 
-Here is a list of files involved into cmake build (relative to project directory path) :
-\verbatim
+The first two lines indicates what should be build when typing make
+(<tt>masterslave</tt>) and of which files it is to be made of
+(<tt>masterslave.o</tt> and <tt>sched.o</tt>). This makefile assumes
+that you have set up correctly your <tt>LD_LIBRARY_PATH</tt> variable
+(look, there is a <tt>LDADD = -lm -lsimgrid</tt>). If you prefer using
+the static version, remove the <tt>-lsimgrid</tt> and add a
+<tt>$(INSTALL_PATH)/lib/libsimgrid.a</tt> on the next line, right
+after the <tt>LIBS = </tt>.
 
-Cmake sources:
-       ./doc/CMakeLists.txt
-       ./buildtools/Cmake/src/CMakeCompleteInFiles.txt
-       ./buildtools/Cmake/src/CMakeDocs.txt
-       ./buildtools/Cmake/src/CMakeMakeExeLib.txt
-       ./buildtools/Cmake/src/CMakePrintArgs.txt
-       ./buildtools/Cmake/src/CMakeDefinePackages.txt
-       ./buildtools/Cmake/src/CMakeFlags.txt
-       ./buildtools/Cmake/src/CMakeSupernovae.txt
-       ./buildtools/Cmake/src/CMakeDistrib.txt
-       ./buildtools/Cmake/src/CMakeMaintainerMode.txt
-       ./buildtools/Cmake/src/CMakeOption.txt
-       ./buildtools/Cmake/src/CMakeTest.txt
-       ./buildtools/Cmake/src/CTestConfig.cmake
-
-Test files for define properties :
-       ./buildtools/Cmake/prog_test/prog_GRAS_ARCH.c
-       ./buildtools/Cmake/prog_test/prog_max_size.c
-       ./buildtools/Cmake/prog_test/prog_sem_init.c
-       ./buildtools/Cmake/prog_test/prog_stackgrowth.c
-       ./buildtools/Cmake/prog_test/prog_vsnprintf.c
-       ./buildtools/Cmake/prog_test/prog_AC_CHECK_MCSC.c
-       ./buildtools/Cmake/prog_test/prog_GRAS_CHECK_STRUCT_COMPACTION.c
-       ./buildtools/Cmake/prog_test/prog_mutex_timedlock.c
-       ./buildtools/Cmake/prog_test/prog_sem_timedwait.c
-       ./buildtools/Cmake/prog_test/prog_stacksetup.c
-       ./buildtools/Cmake/prog_test/prog_getline.c
-       ./buildtools/Cmake/prog_test/prog_gtnets.cpp
-       ./buildtools/Cmake/prog_test/prog_printf_null.c
-       ./buildtools/Cmake/prog_test/prog_snprintf.c
-       ./buildtools/Cmake/prog_test/prog_va_copy.c
+More generally, if you have never written a Makefile by yourself, type
+in a terminal : <tt>info make</tt> and read the introduction. The
+previous example should be enough for a first try but you may want to
+perform some more complex compilations...
 
-CMakeLists for each binaries or examples:
-       ./CMakeLists.txt
-       ./src/CMakeLists.txt
-       ./teshsuite/gras/empty_main/CMakeLists.txt
-       ./teshsuite/gras/small_sleep/CMakeLists.txt
-       ./teshsuite/gras/datadesc/CMakeLists.txt
-       ./teshsuite/gras/msg_handle/CMakeLists.txt
-       ./teshsuite/simdag/CMakeLists.txt
-       ./teshsuite/simdag/partask/CMakeLists.txt
-       ./teshsuite/simdag/platforms/CMakeLists.txt
-       ./teshsuite/simdag/network/CMakeLists.txt
-       ./teshsuite/simdag/network/mxn/CMakeLists.txt
-       ./teshsuite/simdag/network/p2p/CMakeLists.txt
-       ./teshsuite/xbt/CMakeLists.txt
-       ./teshsuite/msg/CMakeLists.txt
-       ./tools/gras/CMakeLists.txt
-       ./tools/tesh/CMakeLists.txt
-       ./testsuite/simdag/CMakeLists.txt
-       ./testsuite/xbt/CMakeLists.txt
-       ./testsuite/surf/CMakeLists.txt
-       ./examples/gras/properties/CMakeLists.txt
-       ./examples/gras/ping/CMakeLists.txt
-       ./examples/gras/pmm/CMakeLists.txt
-       ./examples/gras/mmrpc/CMakeLists.txt
-       ./examples/gras/synchro/CMakeLists.txt
-       ./examples/gras/timer/CMakeLists.txt
-       ./examples/gras/mutual_exclusion/simple_token/CMakeLists.txt
-       ./examples/gras/spawn/CMakeLists.txt
-       ./examples/gras/chrono/CMakeLists.txt
-       ./examples/gras/rpc/CMakeLists.txt
-       ./examples/gras/all2all/CMakeLists.txt
-       ./examples/simdag/properties/CMakeLists.txt
-       ./examples/simdag/CMakeLists.txt
-       ./examples/simdag/metaxml/CMakeLists.txt
-       ./examples/simdag/dax/CMakeLists.txt
-       ./examples/smpi/CMakeLists.txt
-       ./examples/amok/bandwidth/CMakeLists.txt
-       ./examples/amok/saturate/CMakeLists.txt
-       ./examples/msg/priority/CMakeLists.txt
-       ./examples/msg/properties/CMakeLists.txt
-       ./examples/msg/migration/CMakeLists.txt
-       ./examples/msg/gtnets/CMakeLists.txt
-       ./examples/msg/parallel_task/CMakeLists.txt
-       ./examples/msg/trace/CMakeLists.txt
-       ./examples/msg/suspend/CMakeLists.txt
-       ./examples/msg/masterslave/CMakeLists.txt
-       ./examples/msg/actions/CMakeLists.txt
-       ./examples/msg/sendrecv/CMakeLists.txt
-\endverbatim
+\subsection faq_setting_GRAS Setting up your own GRAS code
+
+If you use the GRAS interface instead of the MSG one, then previous section
+is not the better source of information. Instead, you should check the GRAS
+tutorial in general, and the \ref GRAS_tut_tour_setup in particular.
 
 \section faq_howto Feature related questions
 
@@ -2085,6 +2079,230 @@ Properties are expressed as assertions using the function
 void MC_assert(int prop);
 \endverbatim
 
+\subsection faq_binding_lua Lua Binding
+Most of Simgrid modules require a  good level in C programming ,
+ since simgrid is used to be as standard C library .
+ Sometime ( for some reason or another ) developers prefer using some kind of « easy scripts »
+ (something like … lua ? Ruby ? ...?) or a language easier to code with ( Java ? ) for their works,
+ which avoid dealing with C errors , and sometime an important  gain of time (coding-time?) .
+Besides Java Binding, Lua  and Ruby bindings are available now( since version 3.4 of Simgrid )
+for MSG Module, and we are currenlty working on bindings for other modules .
+
+
+\subsubsection faq_binding_lua_about What is lua ?
+Lua (Moon for portuguese !) is a lightweight, reflective, imperative and functional programming language,
+ designed as a scripting language with extensible semantics as a primary goal.(see official web site <a href="http://www.lua.org">here</a>)
+\subsubsection faq_binding_lua_why Why lua ?
+Lua is a fast,portable and powerful script language, quite simple to use for developpers .
+it combines procedural features with powerful data description facilities,
+ by using a simple, yet powerful, mechanism of tables.
+Lua has a relatively simple C API compared to other scripting languages,
+and accordingly it provides a robust, easy to use it.
+\subsubsection faq_binding_lua_simgrid How to use lua in Simgrid ?
+Actually , the use of lua in Simgrid is quite simple, you have just to follow the same steps as coding with C in Simgird,
+ but this time, code with Lua ;) :
+  - Coding functions coresponding to each process
+  - loading the platforme/deployment XML file that describe the environment of simulation
+  - and … Running the Simulation !!!
+  
+\dontinclude lua/master_slave.lua
+\subsubsection faq_binding_lua_example_master_slave Master/Slave Example
+
+ \li Master Code
+ \until end_of_master
+we mainly  use   simgrid.Task.new(task_name,computation_size,communication_size) to create our MSG Task, 
+        then simgrid.Task.send(task,alias) to send it.
+we  use also simgrid.Task.name(task), to get the task's name . 
+
+\li Slave Code
+\until end_of_slave
+Here, we could see how we use  simgrid.Task.recv(alias) to receive a task with a specific alias,
+this function return directly the task recevied .
+
+\li Set Environmenet and run application
+\until simgrid.clean()
+
+\subsubsection faq_binding_lua_example_data Exchanging Data
+You can also exchange data between Process using lua. for that, you have to deal with  lua task as a table,
+since lua is based itself on a mechanism of tables,
+so  you can exchange any kind of data ( tables, matrix, strings … ) between process via tasks.
+
+\li Sender process
+\verbatim 
+  task = simgrid.Task.new("data_task",task_comp,task_comm);
+  task['matrix'] = my_matrix;
+  task['table'] = my_table;
+  task['message'] = "Hello from (Lua || Simgrid ) !! "
+  …
+  simgrid.Task.send(task,alias)
+\endverbatim
+       After creating task, we associate to it  various kind of data with a specific key,( string in this case)
+       to distinguish between data variables. Via this key the receiver could access easily to  datas.
+
+
+\li Receiver processe
+\verbatim
+  task = simgrid.Task.recv(alias);
+  sender_matrix = task['matrix'];
+  sender_table = task['table'];
+  sender_message = task['message']
+  ...
+\endverbatim
+       Note that in lua, both sender and receiver share the same lua task! 
+       So that the receiver could joint data directly on the received task without sending it back.
+       You can find  a complet example ( matrix multiplication case ) in the file example/lua/mult_matrix.lua 
+
+
+\subsubsection faq_binding_lua_example_bypass Bypass XML
+       maybe you wonder if there is a way to bypass the XML files,
+        and describe your platform directly from the code, with lua bindings it's Possible !! how ?
+       We provide some additional (tricky?) functions in lua that allows you to set up your own platform without using the XML files
+     ( this can be useful for large platforms, so a simple for loop will avoid you to deal with an annoying XML File ;) )
+     
+
+\li set Hosts
+\verbatim
+  simgrid.Host.new("Tremblay",98095000);
+  simgrid.Host.new("Jupiter",76296000);
+  simgrid.Host.new("Fafard",76296000);
+  simgrid.Host.new("Ginette",48492000);
+  simgrid.Host.new("Bourassa",48492000);
+\endverbatim
+  we use simgrid.Host.new(host_id,power) to instanciate our hosts.
+
+\li set Links
+\verbatim
+  for i=0,11 do
+    simgrid.Link.new(i,252750+ i*768,0.000270544+i*0.087);    --  some crazy values ;)
+  end
+\endverbatim
+  we used simgrid.Link.new(link_id,bandwidth,latency) with a simple for loop to create all links we need  ( much easier than XML hein ? )
+
+\li set Routes
+\verbatim
+-- simgrid.Route.new(src_id,des_id,links_nb,links_list)
+   simgrid.Route.new("Tremblay","Jupiter",1,{"1"});
+   simgrid.Route.new("Tremblay","Fafard",6,{"0","1","2","3","4","8"});
+   simgrid.Route.new("Tremblay","Ginette",3,{"3","4","5"});
+   simgrid.Route.new("Tremblay","Bourassa",7,{"0","1","3","2","4","6","7"});
+
+   simgrid.Route.new("Jupiter","Tremblay",1,{"1"});
+   simgrid.Route.new("Jupiter","Fafard",7,{"0","1","2","3","4","8","9"});
+   simgrid.Route.new("Jupiter","Ginette",4,{"3","4","5","9"});
+   simgrid.Route.new("Jupiter","Bourassa",8,{"0","1","2","3","4","6","7","9"});
+   ...
+\endverbatim
+  for each host you have to specify which route to choose to access to the rest of hosts connected in the grid.
+  
+\li Save platform
+\verbatim
+  simgrid.register_platform();
+\endverbatim
+Don't forget to register your platform, that SURF callbacks starts their work ;)
+
+\li set application
+\verbatim
+   simgrid.Host.setFunction("Tremblay","Master",4,{"20","550000000","1000000","4"});
+   simgrid.Host.setFunction("Bourassa","Slave",1,{"0"});
+   simgrid.Host.setFunction("Jupiter","Slave",1,{"1"});
+   simgrid.Host.setFunction("Fafard","Slave",1,{"2"});
+   simgrid.Host.setFunction("Ginette","Slave",1,{"3"});
+\endverbatim
+  you don't  need to use a deployment XML file, thanks to  simgrid.Host.setFunction(host_id,function,args_number,args_list) 
+  you can associate functions for each host with arguments if needed .
+
+\li
+\verbatim
+   simgrid.register_application();
+\endverbatim
+Yes, Here too you have to resgiter your application before running the simulation.
+
+the full example is distributed in the file examples/lua/master_slave_bypass.lua
+
+\subsection faq_binding_ruby Ruby Binding
+
+
+\subsubsection faq_binding_ruby_simgrid Use Ruby in Simgrid
+Since v3.4, the use of <a href="http://ruby-lang.org">ruby</a> in simgrid is available for the MSG Module.
+you can find almost all MSG functionalities in Ruby code, that allows you to set up your environment, manage tasks between hosts and run the simulation.
+
+\dontinclude ruby/MasterSlave.rb
+\subsubsection faq_binding_ruby_example Master/Slave Ruby Application
+for each process method(master and slave in this example), you have to associate a ruby class, that should inherit from <i>MSG::Process</i> ruby class,
+  with a 'main' function that describe the behaviour of the process during the simulation.
+\li required stuff
+\verbatim
+require 'simgrid'
+include MSG
+\endverbatim
+
+\li Master code
+\until end_of_master
+
+the class MSG::Task contains methods that allows the management of the native MSG tasks.
+in master ruby code we used : 
+  - <i>MSG::Task.new(task_name,compute_size,communication_size)</i> : to instanciate a new task.
+  - <i>MSG::Task.send(mailbox)</i> : to send the task via a mailbox alias.
+  - <i>MSG::Task.name</i> : to get the task's name.
+
+\li Slave code
+\until end_of_slave
+to receive a task, we use the method <i>MSG::Task.receive(mailbox)</i> that return a MSG:Task object (received task).
+
+\li Main chunk
+\until MSG.exit
+
+- <i>MSG.createEnvironment(platform_file)</i> : set up the environment
+- <i>MSG.deployApplication(deployment_file)</i> : load the deployment file description.
+- <i>MSG.run</i> : run the simulation
+
+\subsubsection faq_binding_ruby_data Exchanging data 
+ruby bindings provides two ways to exchange data between ruby processes.
+\li MSG::Task.join & MSG::Task.data \br
+
+  the MSG::Task class contains 2 methods that allows a data exchange between 2 process.
+  
+  -<i>MSG::Task.join</i> : makes possible to join any kind of ruby data within a task.
+  \verbatim
+   ...
+   myTable = Array.new
+   myTable <<1<<-2<<45<<67<<87<<76<<89<<56<<78<<3<<-4<<99
+   # Creates and send Task With the Table inside
+   task = MSG::Task.new("quicksort_task",taskComputeSize, taskCommunicationSize);
+   task.join(myTable);
+   ...
+   task.send(mailbox);
+   \endverbatim
+   -<i>MSG::Task.data</i> : to access to the data contained into the task.
+   \verbatim
+   ...
+   task = MSG::Task.receive(recv_mailbox.to_s)
+   table = task.data
+   quicksort(table,0,table.size-1)
+   ...
+   \endverbatim
+you can find a complet example illustrating the use of those methods  in file /example/ruby/Quicksort.rb
+
+\li inheritence 
+ another 'object-oriented' way to do it, is to make your own 'task' class that inherit from  MSG::Task ,
+ and contains data you want to deal with, the only 'tricky' thing is that "the initializer" method has no effect ! 
+ the use of some getter/setter methods would be the simple way to manage your data :)
+ \verbatim
+class PingPongTask < MSG::Task
+  # The initialize method has no effect 
+  @time 
+  def setTime(t)
+    @time = t
+  end
+  def getTime()
+    return @time
+  end
+end
+ \endverbatim
+ you can find an example of use in file example/ruby/PingPong.rb
+
 \section faq_troubleshooting Troubleshooting
 
 \subsection faq_trouble_lib_compil SimGrid compilation and installation problems