<div dir="ltr">From Sean's list of annoying things:<br><div><br>
1) Non-standard prefix<br>
<br></div><div>Yup, this is one of the most annoying things for us right now.<br></div><div><br><div id=":39r" class="">
4) Better coordination with dependent packages<br><br></div><div id=":39r" class="">This is really work we just need to do at some point and haven't done.<br><br></div><div id=":39r" class="">Is anybody building PETSc on Windows or exotic non-supercomputer devices these days?  <br><br>A<br>
</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Dec 30, 2014 at 1:40 PM, Sean Farley <span dir="ltr"><<a href="mailto:sean.michael.farley@gmail.com" target="_blank">sean.michael.farley@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class=""><br>
Barry Smith writes:<br>
<br>
>> On Dec 29, 2014, at 9:56 PM, Geoff Oxberry <<a href="mailto:goxberry@gmail.com">goxberry@gmail.com</a>> wrote:<br>
>><br>
>> > Date: Sun, 28 Dec 2014 21:27:21 -0600<br>
>> > From: Barry Smith <<a href="mailto:bsmith@mcs.anl.gov">bsmith@mcs.anl.gov</a>><br>
>> > To: Sean Farley <<a href="mailto:sean.michael.farley@gmail.com">sean.michael.farley@gmail.com</a>><br>
>> > Cc: petsc-dev <<a href="mailto:petsc-dev@mcs.anl.gov">petsc-dev@mcs.anl.gov</a>><br>
>> > Subject: Re: [petsc-dev] Sean is going to love this<br>
>> > Message-ID: <<a href="mailto:BA03ABA6-C693-4404-9FA5-2211BC371836@mcs.anl.gov">BA03ABA6-C693-4404-9FA5-2211BC371836@mcs.anl.gov</a>><br>
>> > Content-Type: text/plain; charset="utf-8"<br>
>> ><br>
>> ><br>
>> >   Sean,<br>
>> ><br>
>> >     brew install /homebrew/science/petsc<br>
>> >     brew install /homebrew/science/petsc --HEAD --with-x11<br>
>> ><br>
>> >   Is there any reason not to use home-brew for everything now? Should we be working with the homebrew/science guys to work out the rough edges? (Like their hypre build is sequential and they don't pass the MPI compiler wrappers properly to build packages and ... and ...)<br>
>><br>
>> I contributed most of the hypre recipe; brew install hypre --with-mpi should get you a parallel build, and it should also run some parallel exampled as smoke tests. If there's anything missing that should be added, let me know and I can get to it when I return from vacation.<br>
><br>
>    Geoff,<br>
><br>
>     Thanks, I noticed your name on a bunch of things there. I may bother you later with some issues when I understand brew better but, what the heck, here are a few things I noticed. (By the way, overall I was impressed with brew working with all these "nasty" scientific packages)<br>
<br>
</span>No love for the work I did with all the nasty scientific packages? Oh,<br>
ok :-(<br>
<span class=""><br>
> 1)   I ran brew install /homebrew/science/petsc --HEAD --with-hypre and it failed because it just used the bottled hypre (which is sequential) as a dependent package and then tried to build the parallel PETSc with the sequential hypre so failed in the middle of compiling PETSc because of inconsistent hypre include files (ones for sequential).<br>
<br>
</span>Yep, this is a problem that doesn't exist for PETSc in MacPorts.<br>
<span class=""><br>
>    Presumably had I done a brew install hypre --with-mpi first and then the brew install /homebrew/science/petsc --HEAD it may have worked properly? (but how is a naive new user to know?)<br>
<br>
</span>Indeed.<br>
<span class=""><br>
>    Second meta issue, is there a way to force a compiled of the package instead of it using the prepared bottle? Or even better to just tell brew I never want it to use bottles but always want it to compile for all packages? One reason I ask this is because PETSc has so many optional dependencies it seems maybe? better to just have it build based on the choices the user made rather than using some pre-built bottle that only has certain things turned on? But maybe I don't understand bottles and when they are used instead of building.<br>
<br>
</span>This is done in MacPorts.<br>
<span class=""><br>
> 2) I think PETSc is just "lucky" that it builds at all. brew seems to set the environmental variables CC, CXX, and FC to clang, clang++ and gfortran but then PETSc actually ignores these variables (printing a warning if you run with -vd) and hunts for mpicc, mpicxx, mpifc which it happens to find in /usr/local/bin since open-mpi is a dependency of PETSc and thus must have been installed first.<br>
<br>
</span>This is why sandboxing is important for package managers.<br>
<span class=""><br>
>    So this leads the third meta issue, it seems brew doesn't seem to have any concept of some packages requiring mpi wrapper compilers to be used to compile the package and so it is kind of catch as catch can if MPI based packages will build properly instead of having a systematic way of handling it. For example if PETSc did not ignore CC, CXX, and FC  it would try to use clang, clang++ and gfortran and then crap out that it didn't have MPI compilers. Any chance that brew would ever be smart enough to "reset" the compilers to the MPI ones before building packages that depend on MPI?<br>
<br>
</span>A hard graph problem that I hacked in MacPorts. I have no idea about how<br>
to do it in brew (hence why I haven't used it).<br>
<span class=""><br>
> 3) PETSc has a bunch of other optional dependencies such as hdf5, netcdf ... that it would be nice to support. Presumably I could try to make a pull request with support for them but I'm concerned that my lack of understanding of meta issue two might mess me up.<br>
<br>
</span>All of those are supported in MacPorts.<br>
<span class=""><br>
> 4) The issue of MPICH2 and open-mpi conflicting is a pain. Some package managers handle this by having a concept of a meta-package or abstract-package (such as MPI) that can have multiple implementation. Then, for example, one could say PETSc is dependent on MPI (and not open-mpi or MPICH) and the package system would work properly if either open-mpi or MPICH had already been installed (instead of crapping out like it does if I first install MPICH and then install PETSc; since it tries to install open-mpi for PETSc which conflicts with MPICH and thus stops).<br>
<br>
</span>Also, this is done in MacPorts.<br>
<br>
With that being said, I must also declare that I have no love for<br>
MacPorts. It gets the job done for these specific cases and works just<br>
well enough but still has other problems. MacPorts will never be able to<br>
solve harder DAG problems for dependencies (just hacks). I wish I had<br>
the time to build a new package manager, but alas. The quote from ESR<br>
seems to ring true:<br>
<br>
The most dangerous enemy of a better solution is an existing codebase<br>
that is just good enough.<br>
</blockquote></div><br></div></div>