Having worked with rbuild for a few weeks I have identified some problems that would like to share. I also would like to hear the developers' opinions about all of these issues because I want to start working to solving them.

 

A) The behavior of the "include" + "directory" tags are inconsistent when an "include" is placed inside a "directory" for

example:

 

            Correct: (expected : ke/i386/boot.S)

 

                        <directory name="ke">

                                    <if property="ARCH" value="i386">

                                                <directory name="i386">

                                                            <file first="true">boot.S</file>

 

 

            Incorrect: (expected : reactos/reactos.rbuild

                            real : reactos/reactos/reactos.rbuild)

 

                        <directory name="reactos">

                                    <xi:include href="reactos/reactos.rbuild" />

                        </directory>

 

            should be:

 

                        <directory name="reactos">

                                    <xi:include href="reactos.rbuild" />

                        </directory>

 

B) The "oldcrt" attribute is no longer used and can be removed.

 

C) The module types "Iso" , "LiveIso" , "IsoRegTest" and "LiveIsoRegTest" are IMHO hacks introduced to be able use the makefile generation code. rbuild is C++ so with a small code refactor they can be easly removed.

 

D) Any module is using the "EmbeddedTypeLib" module type , is really needed or can be removed?

 

E) IMHO the "ElfExecutable" is incorrect . I posted my reasons some time ago:

 

            http://www.reactos.org/archives/public/ros-dev/2007-September/009770.html

            http://www.reactos.org/archives/public/ros-dev/2007-September/009771.html

            http://www.reactos.org/archives/public/ros-dev/2007-September/009779.html

 

F) The module type "alias" is only used for HAL related modules and IMHO it isn't requiered because the problem it tries to

solve can be easly solved using "if" tags and conditional compilation.

 

            http://www.reactos.org/archives/public/ros-dev/2007-September/009798.html

 

There are several reasons for this change:

 

            - Currently every platform requires 3 new HAL modules. In the future if new platforms are supported for example (X86 , XBOX , PPC , AMD64 , MIPS , IA64 , ARM ... ) 3 x 7 = 21 modules .. see what I'm saying?

            - It simplifies backends work. No need to include logic for alias handling.

            - Conceptually wrong . every module represents a particular functionality when you compile the module it should just reconfigure itself to produce the appropriate image for the configured architecture .It a good idea to have a true componentized operating system.

 

Regarding the ModuleType IMHO they should be used to provide information that describes the module output/target not the build process! Iso , LiveIso , Alias , ... all of them are meaningless they are not true metadata.

 

Long term enhancements:

 

X) tags like "linkerflag" or "compilerflag" are gcc/mingw specific and should be replaced with other tags that provide the

equivalent functionality using a more abstract aproach so other backends/compilers could benefit from it. rbuild files should

only describe the source code and the compilation process without including specific information.

 

/Marc