Hi Kenneth,

thanks, option 1 an easy fix. I wouldn't consider it dirty, at least to my 
standards...

I put my extra Makefile (that calls the two Makefiles that come with the 
software) next to the eb file. Then:

patches = [('erds.Makefile', '.')] # copy Makefile to build directory
makeopts = '-f erds.Makefile' # and use this Makefile

Option 2 look super elegant. In my case, it's the MakeCp block, not 
ConfigureMake, so I tried
premakeopts = ["cd hmm && ", "cd phmm && "]

As far as I can see, MakeCp will not iterate through the list. Only hmm got was 
built.

Thanks everybody for jumping in, and congratulations on the 1.12.0 release.

Have a good weekend,
Olaf

-----Ursprüngliche Nachricht-----
Von: [email protected] [mailto:[email protected]] 
Im Auftrag von Kenneth Hoste
Gesendet: Freitag, 4. April 2014 15:04
An: [email protected]
Betreff: Re: [easybuild] A patch containing a new file

Hi Olaf,

On 04/04/14 14:45, Olaf Walter wrote:
> Dear easybuilders,
>
> the tool that I'm working on contains two source directories, each of them 
> requiring a make. My idea was to create a patch that writes a top-level 
> Makefile that calls both of them.

The tool source doesn't come with Makefiles provided?

> This is what I get:
>
> EasyBuildError: "EasyBuild crashed with an error (at 
> easybuild/1.11.1_p370_2/lib/python2.6/site-packages/easybuild_framework-1.11.1-py2.6.egg/easybuild/tools/filetools.py:610
>  in apply_patch): Can't determine patch level for patch 
> /gpfs01/home/bioadmn/eb20140311/eb/erds-1.1-Makefile.patch from directory 
> /gpfs01/home/bioadmn/.local/easybuild/build/erds/1.1/goolf-1.4.12-no-OFED/erds1.1"
>
> This is my patch:
>
> diff -urN erds1.1.orig/Makefile erds1.1/Makefile
> --- erds1.1.orig/Makefile       1970-01-01 01:00:00.000000000 +0100
> +++ erds1.1/Makefile    2014-04-04 14:10:49.015186000 +0200
> @@ -0,0 +1,9 @@
> +
> +all: make_hmm make_phmm
> +
> +make_hmm:
> +       cd hmm && $(MAKE)
> +
> +make_phmm:
> +       cd phmm && $(MAKE)
> +
> Does anybody have an idea how to solve this, or a different approach to my 
> problem?
>
> Thanks,
> Olaf


EasyBuild requires that the file to be patched is already there, so this 
approach won't work.

There's a couple of thing you can do:

1) EasyBuild support simply copying of files via the 'patches' entry: 
ship the Makefile via patches, but not as a patch file:

patches = [('Makefile', '.')]  # copy Makefile to build directory

Something similar is done for OpenBLAS, see 
https://github.com/hpcugent/easybuild-easyconfigs/blob/master/easybuild/easyconfigs/o/OpenBLAS/OpenBLAS-0.2.6-gompi-1.4.10-LAPACK-3.4.2.eb#L30
 
.

This is a rather 'dirty' approach though, since you need to add an extra 
file.


2) Use/abuse premakeopts and makeopts:

prebuildopts = "cd hmm && "
buildopts = " && cd ../phmm && make"

This will result in a build command line "cd hmm && make -j 8 && cd 
../phmm && make"

(the "make -j 8" part is filled in by EasyBuild)

This is already better, but note that you'd have to take care of "make 
-j" yourself for phmm, and you have no idea what to set the value for 
"-j" to (you don't know on which systems the easyconfig file would be used).


3) define prebuildopts as a *list* of strings; EasyBuild will cycle 
through the configure/make/make install procedure multiple times

prebuildopts = ["cd hmm && ", "cd phmm && "]

This is also done for FFTW, where multiple calls to configure are 
required to build the libraries with different precision, see 
https://github.com/hpcugent/easybuild-easyconfigs/blob/master/easybuild/easyconfigs/f/FFTW/FFTW-3.3.3-gompi-1.4.10.eb#L16-21
 
.

I would definitely go for the last option.


regards,

Kenneth

Reply via email to