Ah, I see now that I coudl have done better by splitting the patch
into two patches -- one where we move everything, and one where we
change the cmake files.

THe important parts of the patch are:

* Adding the contents of `3rdparty/libprocess/3rdparty/CMakeLists.txt`
-> `3rdparty/CMakeLists.txt`; makes since, because we're merging the
two 3rdparty folders, so we only need one CMakeLists.txt. We just dump
the contents unchanged into the other one.
* `3rdparty/libprocess/cmake/Process3rdpartyConfigure.cmake` changing some paths
* `3rdparty/libprocess/CMakeLists.txt` moving a call to `include`.

And that's about it. Everything else is just moving.

On Fri, Feb 26, 2016 at 11:36 AM, Alex Clemmer
<clemmer.alexan...@gmail.com> wrote:
> Folks:
>
> Took about 30 minutes to put together a prototype of the great
> `3rdparty` flattening. Please see the (extremely preliminary)
> review[1] or my working branch[2] for a really close approximation of
> the number of changes to the CMake build system we'd need to support
> this flattening.
>
> Overall, the changes are extremely small. We (apparently) did a pretty
> good job of making the CMake configuration scripts modular and
> consumable by arbitrary projects, so the changes are mostly things
> like "move the config `include` call over there instead of being over
> there" and "change a handful of path variables to reflect the new dir
> structure". (I hope, btw, that it doesn't seem arrogant to say this,
> but I think it is justified given the relatively minor changes in the
> actual CMake code.)
>
> Feel free to remix/take/throw away any subset of this. I don't need
> any credit for it in the final patch if someone marches off in that
> direction. :)
>
> [1] https://reviews.apache.org/r/44099/
> [2] https://github.com/hausdorff/mesos/commits/prototype_flattened_3rd
>
> On Thu, Feb 18, 2016 at 12:22 PM, Kevin Klues <klue...@gmail.com> wrote:
>> I am also a fan of git submodules in the long term, but avoiding them
>> in the short term.  We should get things organized as we want them
>> first, and then start thinking about pulling libprocess/stout out into
>> submodules later (while also preserving their history!)
>>
>> I disagree with moving libprocess and stout up to the same level as
>> src/. If we want to make sure they don't bleed into Mesos proper, we
>> really should treat them the same as any other 3rdparty code that we
>> depend on.  This will become more relevant when/if we move them into
>> submodules.
>>
>> Given all that, the only real challenge with flattening our 3rdparty
>> dependencies into a single folder should be the changes we have to
>> make to our configure.ac and Makefile.am scripts to know where to look
>> for their dependencies now.  In the end these should be URLs to
>> versioned tarballs that we host somewhere (or git repos that we can
>> have forked and tagged with specific versions).  In the short term
>> these can just be relative paths in the mesos tree though.
>>
>> On Tue, Feb 16, 2016 at 1:26 PM, Kapil Arya <ka...@mesosphere.io> wrote:
>>> Thanks for bringing it up Alexander!
>>>
>>> I don't have a strong opinion wrt git submodules since I don't have
>>> much experience with them personally. Having said that, I would like
>>> to go conservative on this one (baby steps :-) ).
>>>
>>> Further, I do understand that moving libprocess and stout directories
>>> will be painful for people who already have several branches and will
>>> have conflicts. But I do think, there are some interim solutions as
>>> well (for example, move libprocess/stout to wherever we want, but keep
>>> a symlink from 3rdparty/libprocess, etc, to those new locations for
>>> some time). I am sure there are better solutions out there, but this
>>> should work too.
>>>
>>> Best,
>>> Kapil
>>>
>>> On Tue, Feb 16, 2016 at 12:38 PM, Erik Weathers
>>> <eweath...@groupon.com.invalid> wrote:
>>>> If we go to git submodules, please ensure there are good docs around how to
>>>> update cloned repos.
>>>>
>>>> e.g., From ansible: 
>>>> https://docs.ansible.com/ansible/intro_installation.html
>>>>
>>>> Note when updating ansible, be sure to not only update the source tree, but
>>>> also the “submodules” in git which point at Ansible’s own modules (not the
>>>> same kind of modules, alas).
>>>>
>>>> $ git pull --rebase
>>>> $ git submodule update --init --recursive
>>>>
>>>> Thanks,
>>>>
>>>> - Erik
>>>>
>>>> On Tue, Feb 16, 2016 at 8:54 AM, Alexander Rojas <alexan...@mesosphere.io>
>>>> wrote:
>>>>
>>>>> +1
>>>>> I am one who is totally in for that change. It is not only the directories
>>>>> problem, but the structure which has led that the stout tests (which do
>>>>> need to be compiled) are actually managed in the libprocess Makefile, on
>>>>> top of all the things you have already mentioned.
>>>>>
>>>>>
>>>>> > On 09 Feb 2016, at 17:53, Kapil Arya <ka...@mesosphere.io> wrote:
>>>>> >
>>>>> > On Tue, Feb 9, 2016 at 8:23 PM, Jie Yu <yujie....@gmail.com> wrote:
>>>>> >> Kapil,
>>>>> >>
>>>>> >> I guess what I want to understand is why the existing structure makes 
>>>>> >> it
>>>>> >> hard for you to do the things that you want to do (installing
>>>>> >> module-specific 3rdparty dependencies into "${pkglibdir}/3rdparty" as
>>>>> part
>>>>> >> of "make install").
>>>>> >
>>>>> > Let me see if I can answer that :-).
>>>>> >
>>>>> > This is somewhat related. For example, if we want to install protobuf
>>>>> > in 3rdparty/{include,lib} (for module developers to use them without
>>>>> > doing a proper mesos installation), you need to provide the correct
>>>>> > "--prefix" flag that points to 3rdparty/. However, due to multiple
>>>>> > levels of configure.ac, the "--prefix" can at best be generated by
>>>>> > prepending "../../../" to get to the great-grandparent directory. This
>>>>> > is because we have a separate configure.ac which manages
>>>>> > 3rdparty/libprocess/3rdparty/Makefile.am. There are ways around it,
>>>>> > but they are not clean.
>>>>> >
>>>>> > Similar thing holds for system-wide installation of these 3rdparty
>>>>> > packages. For example, ideally, we would want to use
>>>>> > "${pkglibdir}/3rdparty" as a prefix for those packages. However, since
>>>>> > they are part of libprocess package, we don't get the correct
>>>>> > directory and have to use either hardwired $pkglibdir, or somehow pass
>>>>> > it from the top-level configure all the way down to
>>>>> > 3rdparty/libprocess/3rdparty/Makefile.am :-(.
>>>>> >
>>>>> >
>>>>> >> The only reason you mentioned in the original email is that "in the
>>>>> current
>>>>> >> code base, we don't strictly follow the 3rdparty structure", which IMO
>>>>> is
>>>>> >> not a very convincing reason for such a big change.
>>>>> >
>>>>> > How about a not so big change? :-). What if we just move
>>>>> > 3rdparty/libprocess/3rdparty/* stuff out to 3rdparty/ while leaving
>>>>> > stout as is? That is not a big change since we are not touching
>>>>> > libprocess/stout. Just adjusting Makefiles and I am pretty sure it
>>>>> > will be cleaner and simpler than what we have right now.
>>>>> >
>>>>> > As a later time, we can then consider moving stout out to 3rdparty/
>>>>> > while leaving libprocess as is. But that's something we can decide
>>>>> > later and leave stout as an exception for now.
>>>>> >
>>>>> > BTW, if we were to install all the 3rdparty packages in 3rdparty/,
>>>>> > that would also cut down a lot on the compiler flags (i.e., fewer "-I"
>>>>> > and "-L" flags) :-).
>>>>> >
>>>>> > Kapil
>>>>> >
>>>>> >>
>>>>> >> - Jie
>>>>> >>
>>>>> >> On Tue, Feb 9, 2016 at 5:04 PM, Kapil Arya <ka...@mesosphere.io> wrote:
>>>>> >>
>>>>> >>> On Tue, Feb 9, 2016 at 7:20 PM, Jie Yu <yujie....@gmail.com> wrote:
>>>>> >>>>
>>>>> >>>>>
>>>>> >>>>> However, in the current code base, we don't strictly follow the
>>>>> >>> 3rdparty
>>>>> >>>>> structure. For example, stout has a dependency on picojson and
>>>>> >>>>> google-protobuf, but we don't put these two packages inside
>>>>> >>>>> 3rdparty/libprocess/3rdparty/stout/3rdparty/.
>>>>> >>>>
>>>>> >>>>
>>>>> >>>> My understanding is that stout is header only. So it does not have to
>>>>> >>>> bundle 3rdparty libraries. The user of stout is responsible for
>>>>> bundling
>>>>> >>>> them if they are used.
>>>>> >>>
>>>>> >>>
>>>>> >>> I don't think being header-only is an excuse to have a broken
>>>>> >>> installation :-). Further, we don't make it easier for the user to get
>>>>> >>> the 3rdparty binaries either. For example, if the user has a different
>>>>> >>> version of protobuf installed on the system, the compilation of any
>>>>> >>> program that uses stout will fail spectacularly!
>>>>> >>>
>>>>> >>> Having said that, the gist here is that we have somewhat deviated from
>>>>> >>> original motivation behind the 3rdparty directory and it would be nice
>>>>> >>> if we can have a flatter structure.
>>>>> >>>
>>>>> >>>>
>>>>> >>>>
>>>>> >>>> - Jie
>>>>> >>>>
>>>>> >>>> On Tue, Feb 9, 2016 at 4:14 PM, Kapil Arya <ka...@mesosphere.io>
>>>>> wrote:
>>>>> >>>>
>>>>> >>>>> Hi All,
>>>>> >>>>>
>>>>> >>>>> TLDR: Move everything from 3rdparty/libprocess/3rdparty/* into
>>>>> >>> 3rdparty/.
>>>>> >>>>> (Optionally) Move libprocess/stout to the top-level directory.
>>>>> >>>>>
>>>>> >>>>> I wanted to start some discussion around reorganizing stuff inside
>>>>> >>>>> "3rdparty". I apologize for the length of the email, please bear 
>>>>> >>>>> with
>>>>> >>> me.
>>>>> >>>>>
>>>>> >>>>> Traditionally, 3rdparty has been used to hold all Mesos dependencies
>>>>> >>>>> (zookeeper, libprocess, protobuf, stout, etc.). Further,
>>>>> >>>>> libprocess/3rdparty was to hold all libprocess dependencies (which
>>>>> may
>>>>> >>> in
>>>>> >>>>> turn be Mesos dependencies as well).
>>>>> >>>>>
>>>>> >>>>> As I understand, the original motivation was to emphasize that
>>>>> >>> libprocess
>>>>> >>>>> is an independent project which depends on "stout", which in turn is
>>>>> >>> also
>>>>> >>>>> an independent project.
>>>>> >>>>>
>>>>> >>>>> However, in the current code base, we don't strictly follow the
>>>>> >>> 3rdparty
>>>>> >>>>> structure. For example, stout has a dependency on picojson and
>>>>> >>>>> google-protobuf, but we don't put these two packages inside
>>>>> >>>>> 3rdparty/libprocess/3rdparty/stout/3rdparty/.
>>>>> >>>>>
>>>>> >>>>> In light of these anomalies, I want to propose that we flatten out
>>>>> the
>>>>> >>>>> 3rdparty directory and put all packages (libprocess, stout, 
>>>>> >>>>> protobuf,
>>>>> >>>>> picojson, zookeeper, etc.) at the same level in 3rdparty. We can
>>>>> still
>>>>> >>> use
>>>>> >>>>> "--with-XYZ=..." to the full extent as needed.
>>>>> >>>>>
>>>>> >>>>> To take it a step further, I want to propose that we bring 
>>>>> >>>>> libprocess
>>>>> >>> and
>>>>> >>>>> stout out of 3rdparty/ and move them at the top level (i.e., make
>>>>> them
>>>>> >>>>> peers of src/). That way, all code in 3rdparty/ is stuff from 
>>>>> >>>>> "third"
>>>>> >>>>> parties and is used only when "--with-bundled" is defined (by
>>>>> default).
>>>>> >>>>> This hierarchy will still allow us to keep libprocess and stout as
>>>>> >>> separate
>>>>> >>>>> independent projects.
>>>>> >>>>>
>>>>> >>>>> The motivation for this proposal came when dealing with 3rdparty
>>>>> >>>>> dependencies for module development. A module developer needs access
>>>>> to
>>>>> >>>>> protobuf, picojson, glog, etc., and for that matter, the exact
>>>>> >>> versions of
>>>>> >>>>> these packages that Mesos was compiled with.
>>>>> >>>>>
>>>>> >>>>> We want to solve this problem by installing module-specific 3rdparty
>>>>> >>>>> dependencies into "${pkglibdir}/3rdparty" as part of "make install"
>>>>> (if
>>>>> >>>>> configured with something like
>>>>> "--enable-install-module-dependencies").
>>>>> >>>>> (There is a discussion going on in a separate thread).
>>>>> >>>>>
>>>>> >>>>> Further, as of today, when we install Mesos using "make install", we
>>>>> >>>>> install stout headers in "${prefix}/include/stout". However, stout
>>>>> has
>>>>> >>>>> dependencies on picojson[1] and google-protobuf headers which may 
>>>>> >>>>> not
>>>>> >>> be
>>>>> >>>>> present on the machine. This leaves stout, and in turn libprocess 
>>>>> >>>>> and
>>>>> >>> Mesos
>>>>> >>>>> headers, fairly broken. I understand that this issue is somewhat
>>>>> >>> orthogonal
>>>>> >>>>> to the main issue being discussed in this mail, but I wanted to put
>>>>> it
>>>>> >>> out
>>>>> >>>>> since it's related.
>>>>> >>>>>
>>>>> >>>>> Any thoughts, comments, concerns are most welcome!
>>>>> >>>>>
>>>>> >>>>> Best,
>>>>> >>>>> Kapil
>>>>> >>>>>
>>>>> >>>>>
>>>>> >>>>> [1]: Picojson issue was resolved as part of
>>>>> >>>>> https://reviews.apache.org/r/41424/ which installs picojson.h into
>>>>> the
>>>>> >>>>> include-dir.
>>>>> >>>>>
>>>>> >>>
>>>>>
>>>>>
>>
>>
>>
>> --
>> ~Kevin
>
>
>
> --
> Alex
>
> Theory is the first term in the Taylor series of practice. -- Thomas M
> Cover (1992)



-- 
Alex

Theory is the first term in the Taylor series of practice. -- Thomas M
Cover (1992)

Reply via email to