> On March 28, 2018, 8:06 a.m., Benjamin Bannier wrote:
> > 3rdparty/CMakeLists.txt
> > Lines 58-63 (patched)
> > <https://reviews.apache.org/r/66314/diff/1/?file=1989124#file1989124line58>
> >
> >     Like discussed offline, I don't think there is a reason we need to bolt 
> > such logic on the used system, at least currently.
> >     
> >     Let's instead use `find_program` to find a `make` and use it to set 
> > this variable.
> >     
> >     Unless I miss something, we do not depend on GNU make here, so let's 
> > maybe reflect that in a more general name, e.g., just `MAKE` if it is 
> > available.
> 
> David Forsythe wrote:
>     I took a look at find_program, but I don't think that will solve the 
> problem.
>     
>     We actually *do* depend on gmake here (even on darwin). On FreeBSD GHU 
> make is a 3rd party application and is actually called and installed as 
> `gmake`, whereas the system make is actually Pmake (which is incompatible).
> 
> David Forsythe wrote:
>     I should clarify that there is incompability in a 3rdparty Makefile, not 
> that the two makes are completely incompatible.
>     
>     Particularly there are three issues - LevelDB, libev, and glog.
>     
>     LevelDB is always going to fail without `gmake`, because it does not use 
> autotools. I don't know how we can get around that.
>     
>     libev and glog do use autotools. They have some strange behavior when 
> building, though --
>     If I use `cmake --build` they both fail on a bad target (because of an 
> incompatible Makefile).
>     If I use (bsd) `make`, they build fine.
>     If I use `gmake` they both fail (bad target).
>     
>     For both the first and third scenario, I can run the commands that are 
> failing outside of the build and they succeed.
>     
>     Accordng to the cache, cmake is using `gmake` as `CMAKE_MAKE_PROGRAM` in 
> these cases, so it's not clear to me why anything would fail when I do the 
> whole build with `gmake`. It seems like the build can go make -> gmake, but 
> not gmake -> make.
>     
>     I think the baseline should be having `cmake --build` work, and the only 
> way I have gotten everything to work as expected is by forcing `gmake` 
> everywhere. I'm learning Cmake as I go so I could be missing something 
> obvious to fix this.
> 
> David Forsythe wrote:
>     I've been thinking about this a bit more, and I think that the best 
> approach might actually be to just leave the libev and glog calls as make and 
> leave the conditional gmake call. On FreeBSD we could just tell users to use 
> `make` instead of cmake build. It seems like a way less intrusive change.
>     
>     Thoughts?
> 
> Benjamin Bannier wrote:
>     I think it should be perfectly fine to use `gmake` if it is available, it 
> is usually a symlink to `make` anyway.
>     
>     The implementation I was thinking of was to add below instead,
>     
>         find_program(
>             GNU_MAKE
>             NAMES gmake make
>             DOC "path to GNU make executable")
>         
>         if (NOT GNU_MAKE)
>           message(FATAL_ERROR "Could not find a suitable GNU make executable")
>         endif()
> 
> David Forsythe wrote:
>     This would always succeed on FreeBSD (or any system with a make), even if 
> gmake wasn't installed. It is not a symlink:
>     
>     ```
>     
>     root@mesos0:/mesos-build # gmake --version
>     GNU Make 4.2.1
>     ...
>     root@mesos0:/mesos-build # make --version
>     usage: make [-BeikNnqrstWwX]
>     ...
>     
>     ```
>     
>     With autotools we didn't run into this because (iirc) so much was 
> incompatible that I just used/assumed `gmake` for everything. With `cmake` 
> we're close enough that I think it might be worth it to try and support bsd 
> make.
> 
> David Forsythe wrote:
>     I made everything use `gmake`, but I didn't add the check/message because 
> the check always succeeds. Added a TODO as discussed offline.
> 
> Benjamin Bannier wrote:
>     There's no guarantee this search will succeed, e.g., no make program 
> could be installed. Let's check we found _something_ before continuing.

You got it. I renamed `GNU_MAKE` to `EXTERNAL_MAKE` since we're just looking 
for anything that matches.


- David


-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/66314/#review200098
-----------------------------------------------------------


On April 4, 2018, 6:45 a.m., David Forsythe wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://reviews.apache.org/r/66314/
> -----------------------------------------------------------
> 
> (Updated April 4, 2018, 6:45 a.m.)
> 
> 
> Review request for mesos, Andrew Schwartzmeyer and Benjamin Bannier.
> 
> 
> Bugs: MESOS-4176
>     https://issues.apache.org/jira/browse/MESOS-4176
> 
> 
> Repository: mesos
> 
> 
> Description
> -------
> 
> Fix 3rdparty build commands for FreeBSD.
> 
> 
> Diffs
> -----
> 
>   3rdparty/CMakeLists.txt 2b63b58f7d6a88c9986b746283dcfa79b7bcb270 
> 
> 
> Diff: https://reviews.apache.org/r/66314/diff/3/
> 
> 
> Testing
> -------
> 
> make on FreeBSD
> 
> 
> Thanks,
> 
> David Forsythe
> 
>

Reply via email to