Hi there,

sorry for the rant in these couple of days, it won't happen again :-)
It just happens that we are in a burst of experimentation with the tool
and we identify all sorts of hick-ups, that occur in our situation.

Here is the last handful of comments/suggestions.

On 25/07/2012 17:30, Fotis Georgatos wrote:
> In that light, and for simplicity, I suggest the applications' namespace
> should be case-sensitive (ie. both packages R and r should be allowed :-)



1) class namespace

And, in less that 24 hours I can provide an interesting example:
So, what if I need a module for both "easybuild" and "EasyBuild"?
https://github.com/fengy-research/easybuild ;-)

In the current setup, that just misses closely a collision in class namespace:
# class_name = name[0].upper() + name[1:].replace('-','_')

I am suggesting to rename that, for generality, to:
# class_name = "eb_" + name.replace('-','_') # or, perhaps, "EasyBuild_" (1)



2) fall-out from the above

Then the following logical consequences exist, as regards easyblocks:

* classnames no longer start with a-z letters (they are *one* set after all)

* placing them in distinct directories a-z is no longer too relevant :-(
  BUT: Is that really a problem? IMHO *NOT*, since easyblocks are not many

* A motivation exists to actually embed easyblocks class/functions inside
  *easyconfigs*; that is actually good: eg. if/when the "boost" developers
  eventually decide to pick the more decent configure default mechanism, it
  will actually be *possible* to have both v1.50/v1.5X-with-configure modules.
  Currently, I think that's not doable or, am I missing something?



3) reduce simple cases to minimal configuration

* Finally, it would be convenient to minimize the number of lines of code
  needed for simple things like the following (can it become 1 line really?):
** Boost::make(self): cmd = "./b2 %s" % (self.getcfg('makeopts'))
** Pandaseq::configure(self): cmd = os.path.join(self.getcfg('startfrom'),
"autogen.sh")

* Allow to skip certain steps easily (we notice it is often required):
** skip_configure=true
** skip_make=true
** skip_make_installdir=true
That reduces LOC (lines of code) and hence human error. It's more easy, too.



4) Proposal for small easybuild language extension

And, interestingly, there is a pattern in the following construct:
(an empty configure and then copy files to destination, before finishing)

=== CUT HERE ===
class SOAPdenovo(Application):

    def configure(self):
        """Skip the configure as not part of this build process"""

    def make_install(self):
        """Install by copying files to install dir"""
        srcdir = self.getcfg('startfrom')
        destdir = os.path.join(self.installdir, 'bin')
        srcfile = None
        try:
            os.makedirs(destdir)
            for filename in ["SOAPdenovo-127mer", "SOAPdenovo-31mer",
"SOAPdenovo-63mer"]:
                srcfile = os.path.join(srcdir, "bin", filename)
                shutil.copy2(srcfile, destdir)
        except OSError, err:
            self.log.exception("Copying %s to installation dir %s failed: %s"
% (srcfile, destdir, err))
=== CUT HERE ===

The interesting part is the for line which does the copy; it'd better look:
# for filename in sanityCheckPaths['files']:

In that case, we have a pattern that is *very* common across many packages,
which depend rather on 1 plain Makefile instead of configure.
Can this be reduced to a single easyconfig line? I think yes.
*I believe this is worthy of support inside the configuration language.*



5) Support for git-supplied software; does anybody else have the need?

Some developers have chosen to use git as their distribution mechanism :-)

That's fine but it does make the package download a tricky step, if you wish
to have it automated. How about a git url and commit version put together?

ie. I'm suggesting a download function like:

$ git clone https://github.com/fgeorgatos/easybuild.git
$ cd easybuild
$ git checkout f43c755

That should eventually build the following modulefile: EasyBuild/f43c755

The idea is quite expandable, because it allows to be generalized with
tags, branches etc, whatever git provides for. I have a use-case of RAxML.



OK, that's it, I stop it for today :-)

cheerio,

Fotis



(1)
There is more discussion to be done here as regards python namespaces but,
fact is we need to check options ourselves, to make any good recommendations:

http://bytebaker.com/2008/07/30/python-namespaces/

-- 
echo "sysadmin know better bash than english" | sed s/min/mins/ \
        | sed 's/better bash/bash better/' # Yelling in a CERN forum

Reply via email to