The recent patch series that adds proper unit testing to Git requires a couple of add-on patches to make it work with the CMake build on Windows (Visual C). This patch series aims to provide that support. This patch series is based on js/doc-unit-tests. Changes since v1: * The code added to test-lib.c now avoids using a strbuf. * The unit tests are now also handled via CTest. * While at it, I cleaned up a little in the CTest-related definitions. Johannes Schindelin (7): cmake: also build unit tests unit-tests: do not mistake `.pdb` files for being executable unit-tests: do show relative file paths artifacts-tar: when including `.dll` files, don't forget the unit-tests cmake: fix typo in variable name cmake: use test names instead of full paths cmake: handle also unit tests Makefile | 2 +- contrib/buildsystems/CMakeLists.txt | 38 ++++++++++++++++++--- t/Makefile | 2 +- t/unit-tests/test-lib.c | 52 ++++++++++++++++++++++++++--- 4 files changed, 84 insertions(+), 10 deletions(-) base-commit: 03f9bc407975bba86d1d1807519d76e1693ff66f Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-1579%2Fdscho%2Fdoc-unit-tests-and-cmake-v2 Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-1579/dscho/doc-unit-tests-and-cmake-v2 Pull-Request: https://github.com/gitgitgadget/git/pull/1579 Range-diff vs v1: 1: 2cc1c03d851 = 1: 2cc1c03d851 cmake: also build unit tests 2: 90db3d5d41f = 2: 90db3d5d41f unit-tests: do not mistake `.pdb` files for being executable 3: 2b4e36c05c9 ! 3: f0b804129e8 unit-tests: do show relative file paths @@ t/unit-tests/test-lib.c: static struct { + * Visual C interpolates the absolute Windows path for `__FILE__`, + * but we want to see relative paths, as verified by t0080. + */ -+#include "strbuf.h" +#include "dir.h" + +static const char *make_relative(const char *location) +{ -+ static const char *prefix; ++ static char prefix[] = __FILE__, buf[PATH_MAX], *p; + static size_t prefix_len; -+ static struct strbuf buf = STRBUF_INIT; + -+ if (!prefix) { -+ strbuf_addstr(&buf, __FILE__); -+ if (!strbuf_strip_suffix(&buf, "\\t\\unit-tests\\test-lib.c")) -+ die("unexpected suffix of '%s'"); -+ strbuf_complete(&buf, '\\'); -+ prefix = strbuf_detach(&buf, &prefix_len); ++ if (!prefix_len) { ++ size_t len = strlen(prefix); ++ const char *needle = "\\t\\unit-tests\\test-lib.c"; ++ size_t needle_len = strlen(needle); ++ ++ if (len < needle_len || strcmp(needle, prefix + len - needle_len)) ++ die("unexpected suffix of '%s'", prefix); ++ ++ /* let it end in a directory separator */ ++ prefix_len = len - needle_len + 1; + } + + /* Does it not start with the expected prefix? */ + if (fspathncmp(location, prefix, prefix_len)) + return location; + -+ strbuf_reset(&buf); -+ strbuf_addstr(&buf, location + prefix_len); -+ convert_slashes(buf.buf); ++ strlcpy(buf, location + prefix_len, sizeof(buf)); ++ /* convert backslashes to forward slashes */ ++ for (p = buf; *p; p++) ++ if (*p == '\\') ++ *p = '/'; + -+ return buf.buf; ++ return buf; +} +#endif + 4: fb03f5aa6e5 = 4: a70339f57a7 artifacts-tar: when including `.dll` files, don't forget the unit-tests -: ----------- > 5: 75a74571fbe cmake: fix typo in variable name -: ----------- > 6: 41228df1b46 cmake: use test names instead of full paths -: ----------- > 7: 003d44e9f0d cmake: handle also unit tests -- gitgitgadget