Squashed 'third-party/libuv/' content from commit 3c40224

git-subtree-dir: third-party/libuv
git-subtree-split: 3c4022464acd92607f21c6eef69330fb071d0400
Merge commit 'a302c65dc65896776d6cb9e2c89a6ccc77ada530' as 'third-party/libuv'
get-libuv.sh: compile bundled libuv

Rename file to reflect new intent of script. Libuv is bundled into the
third-party directory. Modify the script to compile but not fetch libuv.
Makefile: refer to renamed compile-libuv.sh

get-libuv.sh was renamed to compile-libuv.sh
third-party: add note on role of directory

Add a brief README on the purpose of the third-party directory and some
suggestions for how to manage it. The neovim bigwigs may want to
re-draft the README.
add required dependency on Debian/Ubuntu system
Rebased the following three commits onto one another:

1. Following GitHub convention by adding a CONTRIBUTING.md file.

2. Linking to the wiki page for communicating.

3. Referencing the waffle.io page for Neovim.
Removes 'proto' dir

See #137 for the issue.

Every header in the proto directory was:

* Given include guards in the form

    #ifndef NEOVIM_FILENAME_H
    #define NEOVIM_FILENAME_H
        ...
    #endif /* NEOVIM_FILENAM_H */

* Renamed from *.pro -> *.h
* Moved from src/proto/ to src/

This would have caused conficts with some existing headers in src/;
rather than merge these conflicts now (which is a whole other can of
worms involving multiple and conditional inclusion), any header in src/
with a conflicting name was renamed from *.h -> *_defs.h (which may or
may not actually describe its purpose, the change is purely a
namespacing issue).

Once all of these changes were made a script was developed to determine
what #includes needed to be added to each source file to describe its
dependencies and allow it to compile; because the script is so short
and I'll just list it here:

    #! /bin/bash

    cd $(dirname $0)

    # Scrapes `make` output for provided error messages and outputs #includes
    # needed to resolve them.
    #   $1 : part of the clang error message between filename and identifier
    list_missing_includes() {
        for file_missing_pair in $(CC=clang make 2>&1 >/dev/null | sed -n "s/\/\(.*\.[hc]\).*$1.*'\(.*\)'.*/\1:\2/p"); do
            fields=(${file_missing_pair//:/ })
            source_file=${fields[0]}
            missing_func=${fields[1]}
            # Try to find the declaration of the missing function.
            echo $(basename $source_file) \
                \#include \"$(grep -r "\b$missing_func __ARGS" | sed -n "s/.*\/\(.*\)\:.*/\1/p")\"
        # Remove duplicates
        done | sort | uniq
    }

    echo "Finding missing function prototypes..."
    list_missing_includes "implicit declaration of function"
    echo "Finding missing identifier declarations..."
    list_missing_includes "use of undeclared identifier"

Each list of required headers was added by hand in the following format:

    #include "vim.h"
    #include "*_defs.h"
    #include "filename.h"
    /* All other includes in same module here, in alphabetical order. */
    /* All includes from other modules (e.g. "os/*.h") here in alphabetical
     * order. */
Merge branch 'bundle-libuv' of github.com:rjw57/neovim into rjw57-bundle-libuv
Fix Markdown syntax.
Remove implicit declaration of vim_strrchr and vim_strncpy
Remove final build warning

This commit removes a K&R promoted parameter error, the final warning
I have when building.

I realize that this creates only one function that is written in a
different style, but I thought it might be worth it to have a warning
free build.
add custom CMake module path
add LibFindMacros CMake macro library
Makefile: add .deps/ to CMake prefix path

The CMake prefix path is the set of directories CMake searches for
libraries, header files, etc. Use the .deps directory we create when
building libuv as one of those locations.
automatically discover libuv in CMake

Idiomatically discover if libuv is installed.
Makefile: fetch deps before running CMake

CMake now required libuv so fetch it first.
make use of libuv when found by CMake
CMakeLists: remove hardcoded .deps directory

We use the standard CMAKE_PREFIX_PATH variable to pass the location of
.deps as a search location on the command line. There is now no need for
explicitly hard-coding it.
prefer linking to static libuv

Explicitly try to find the static libuv library first.

This might be considered a hack and if it weren't a single-use module it
might be preferable to control static versus shared preferences with a
configuration variable.