[rust-dev] RFC: Future of the Build System

Lee Braiden leebraid at gmail.com
Tue Jan 14 12:43:36 PST 2014


On 14/01/14 17:25, Patrick Walton wrote:
> On 1/14/14 1:29 AM, comex wrote:
>> On Mon, Jan 13, 2014 at 10:30 AM, George Makrydakis
>> <irrequietus at gmail.com> wrote:
>>> Again, note that this rather long thread is about discussing in the 
>>> end what
>>> the official stance should be. There is no valid reason other than 
>>> lack of
>>> manpower and / or language immaturity for having to depend on ruby, 
>>> python,
>>> autotools, cmake or whatever else in order to build rust software.
>>
>> There is no reason every language should have its own build system
>> written from scratch (or package manager, for that matter); the goals
>> of each language community are really mostly identical<snip>
>>
>> However, I'd say there is a stunning lack of existing build systems
>> that actually combine a clean design, flexibility, portability, and
>> performance<snip>
> This e-mail sums up my feelings to a T, and it's why I'm conflicted 
> about the whole matter.

The more people talk about different build systems and how we can't 
choose one yet, the more I agree.

So, rethinking, it seems to me that important part seems, is to be 
COMPATIBLE with everyone's project hosting, build system, and/or package 
manager of choice.  That would include command line build tools, pretty 
website download catalogs, yum, synaptic, cabal, etc.


So, much more important than choosing TOOLS, I think Rust needs to 
standardise INFORMATION that any tool can use.  Perhaps something like this?

[
    "project": {
         "name":  "someproject",

         "brief-description": "some description",

         "limited-description": [
             "Para-one.",
             "Para-two.",
             "Para-three."
],

         "web": "http://buggysoft.com",

         "screenshots":    {
             "screenshot one": {
                 "uri": "http://www.buggypics.com/massivebug.png",
                 "alt-text":     "Features massive bugs",
             },
         },

         "bug-tickets": "http://overloaded-cloud-system.buggysoft.com",

         "authors": {
             "author1": {
                 "email":        "author1 at someplace.com",
                 "web":          "http://someplace.com",
             },
         },

         "copyright": {
             "license-file":        "docs/LICENSE.TXT",
             "license-flags":    "SHAREALIKE | ATTRIBUTION | 
ADVERTISING_CLAUSE",
         },

         "build-info": {
             "build-type":        "library",
             "target":             "libx.so"
             "source-files":     [ "src/*.rs", "somedir/a_file.rs" ],
         },

         "developer-support-info": {
              "rust-ide-doc-file": "docs/libx.rustapi",
              "rust-ide-completion-file": "docs/libx.rusttags",
         },

         "dependencies": {
             "rust-projects":  {
                     "someotherproject": {        # from that projects 
"project" -> "name" entry

                             # following fields are optional; any 
specified filter the list
                             # the list of suitable candidates.

                             "min-version": "0.1",
                             "max-version": "0.1",

                             "gitrepo": 
"http://somehub.com/someuser/someotherproject/",
                             "min-git-tag": "04a453543",
                             "max-git-tag": "045ead634",

                             "tarball-uri": 
"http://someotherproject.com/somepath-${version}.tgz",

                             "distro-version-ok":    "true"
                     }
             },

             "external-libs": {
                     "libssl":    {
                             "min-version": "0.1",
                             "max-version": "0.1",

                             "gitrepo": 
"http://somehub.com/someuser/someotherproject/",
                             "min-git-tag": "04a453543",
                             "max-git-tag": "045ead634",

                             "tarball-uri": 
"http://someotherproject.com/somepath-${version}.tgz"

                             "distro-version-ok":    "true",
                     }
             },
        }
    }
]

-- 
Lee



More information about the Rust-dev mailing list