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