# Passing data to rant/rake for a customized build?

**URL:** <https://www.ruby-forum.com/t/passing-data-to-rant-rake-for-a-customized-build/89475>\
**Category:** Ruby\
**Created:** [March 20, 2007, 7:51pm UTC](https://www.ruby-forum.com/t/passing-data-to-rant-rake-for-a-customized-build/89475 "2007-03-20T19:51:26Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![phrogz](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/2acd7d/32.png) [@phrogz](https://www.ruby-forum.com/u/phrogz)\
**Post date:** [March 20, 2007, 7:51pm UTC](https://www.ruby-forum.com/t/passing-data-to-rant-rake-for-a-customized-build/89475/1 "2007-03-20T19:51:26Z")

</div>

Summary: How do I use a single rantfile or rakefile to perform some  
varying commands based on data that I want to pass to it?

Background: My company makes a Windows-based middleware product  
helping next-gen game developers create UIs. In the process of  
creating the UI, our tool gathers information about the raw 3D models  
and 2D images and data files and so forth needed to create the end  
result. When the artist presses the “Preview” button, the application  
needs to essentially perform a ‘build’ process. Various assets are  
conditioned (going from bloated formats to runtime-appropriate  
binaries) using various standalone applications. Only those resources  
that have changed want to be conditioned, and thus some dependency  
management is needed to do as little work as possible as quickly as  
possible. Depending on the target platform, some files may need to be  
copied over the network to the PS3 or 360 dev kit. The final ‘product’  
of the build is launching the preview application and passing it some  
descriptor to show the end result.

The process changes slightly based on:

- debug/release mode,
- the target platform to preview on,
- the actual project being worked on and the assets it contains  
…but otherwise is the same for every project file, for a given  
customer. Each customer, however, may change the process entirely.

Question: I’m looking at Rant (or perhaps Rake) for this right now.[1]  
The idea is that the application would run a Rant target (perhaps  
based on a combination of debug/release and target platform), which  
would kick off all the conditioners as appropriate and finally launch  
the viewer application.

My question is…how do I pass data to a rantfile? The command line  
for rant is just:  
rant [-f Rantfile] [Options] [targets]  
which gives me no way of simply passing along the name of the project  
and other assets from our tool.

Is the best choice to have our tool write out a text file manifest of  
all the assets of the various types, and have Rant tasks use that?  
[This would sort of match the ability of make (or rant) to derive  
dependencies from files with a known format (like C includes).]

Do I build a folder structure and copy/alias all the resources into  
known buckets and have Rant enumerate the directories? (I’d have to  
copy the rantfile into the right spot to set the context to run with.)  
[This would match the _.c-\>_.o type mentality.]

Do I use something like ERB and have a rantfile template (editable by  
customers) that our tool can use to dynamically customize the rantfile  
on each preview command?

Is the rant “gen” method (that I don’t yet understand) the answer I’m  
looking for?

I’ve only just begun reading the documentation on Rant, and I haven’t  
used any make system (other than blindly typing “configure/make/make  
install”) in many, many, many years. Please forgive me (and help) if  
I’m asking really basic questions.

Thanks in advance for any help!

[1] I’m also looking at MSBuild, NAnt, and maybe Jam, and maybe  
others. I’m leaning towards Rant/Rake right now because I think full  
Ruby-based tasks will provide the power and flexibility game customers  
will need (no limitations in what can be done) in a clear, clean  
fashion.

---

<div class="post-metadata">

**Author:** ![phrogz](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/2acd7d/32.png) [@phrogz](https://www.ruby-forum.com/u/phrogz)\
**Post date:** [March 20, 2007, 8:00pm UTC](https://www.ruby-forum.com/t/passing-data-to-rant-rake-for-a-customized-build/89475/2 "2007-03-20T20:00:28Z")

</div>

On Wed, 21 Mar 2007, Phrogz wrote:

> binaries) using various standalone applications. Only those resources
> 
> - the actual project being worked on and the assets it contains  
> My question is…how do I pass data to a rantfile? The command line  
> for rant is just:  
> rant [-f Rantfile] [Options] [targets]  
> which gives me no way of simply passing along the name of the project  
> and other assets from our tool.

why not via the environment? you may also be able to pass stdin

rant rantifle \< stdin

and then have a ‘configuration’ task, which all other tasks depend on,  
which  
does something like

Config = YAML.load STDIN.read

this stdin bit is a wild ass guess, however.

cheers.

-a

---

<div class="post-metadata">

**Author:** ![phrogz](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/2acd7d/32.png) [@phrogz](https://www.ruby-forum.com/u/phrogz)\
**Post date:** [March 20, 2007, 8:02pm UTC](https://www.ruby-forum.com/t/passing-data-to-rant-rake-for-a-customized-build/89475/3 "2007-03-20T20:02:28Z")

</div>

On Mar 20, 12:45 pm, “Phrogz” [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> Do I use something like ERB and have a rantfile template (editable by  
> customers) that our tool can use to dynamically customize the rantfile  
> on each preview command?
> 
> Is the rant “gen” method (that I don’t yet understand) the answer I’m  
> looking for?

I left off one other option I had thought of: setting one or more  
environment variables with the data in question before kicking off the  
build. It’s nice because there’s no file I/O needed, but it prevents  
the preview from being launched by anything but our tool. Command-line  
preview/nightly builds are also desirable.

---

<div class="post-metadata">

**Author:** ![phrogz](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/2acd7d/32.png) [@phrogz](https://www.ruby-forum.com/u/phrogz)\
**Post date:** [March 21, 2007, 5:20am UTC](https://www.ruby-forum.com/t/passing-data-to-rant-rake-for-a-customized-build/89475/4 "2007-03-21T05:20:25Z")

</div>

Phrogz wrote:

> > 
> 
> the preview from being launched by anything but our tool. Command-line  
> preview/nightly builds are also desirable.

You might not be aware of this, but rake accepts env vars with this  
syntax:

rake e1=v1 e2=v2 … task …

For example:

$ cat rakefile  
task :bar do  
p ENV[‘foo’]  
end

$ rake foo=3 bar  
(in /tmp)  
“3”

Maybe rant has the same feature?
