Passing data to rant/rake for a customized build?

P

Phrogz

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.
 
P

Phrogz

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 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.
 
A

ara.t.howard

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.

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
 
J

Joel VanderWerf

Phrogz said:
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 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.

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?
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Similar Threads

[ANN] Rant 0.3.8 10
[ANN] Rant 0.4.6 2
[ANN] Rant 0.3.6 0
[ANN] Rant 0.3.4 0
[ANN] Rant 0.4.2 2
[ANN] Rant 0.4.8 5
[ANN] Rant 0.4.4 1
[ANN] Rant 0.5.0 0

Members online

No members online now.

Forum statistics

Threads
473,770
Messages
2,569,583
Members
45,073
Latest member
DarinCeden

Latest Threads

Top