[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: r-cran-git2r uses private header files of libgit2 (Was: Help with libgit2 needed to strip code copy from r-cran-git2r)

Hello Andreas:

On 11/01/18 15:11, Andreas Tille wrote:
> Hi again,
> On Thu, Jan 11, 2018 at 08:34:09AM +0100, Andreas Tille wrote:
>>>   # Add include paths for git2r
>>>  -CPPFLAGS="-I. -Ilibgit2/src -Ilibgit2/include -Ilibgit2/deps/http-parser
>>> ${CPPFLAGS}"
>>> -+CPPFLAGS="-I. -I/usr/include/git2 ${CPPFLAGS}"
>>> ++CPPFLAGS="-I. -idirafter /usr/include/git2 ${CPPFLAGS}"
>> ...
>> gcc -std=gnu99 -I/usr/share/R/include -DNDEBUG -I. -idirafter /usr/include/git2  -DGIT_ARCH_64 -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -DGIT_OPENSSL -DLIBGIT2_NO_FEATURES_H -DGIT_SHA1_OPENSSL -DGIT_SSH -DGIT_CURL -DGIT_USE_STAT_MTIM -DGIT_USE_NSEC -DHAVE_FUTIMENS -DHAVE_QSORT_R      -fpic  -g -O2 -fdebug-prefix-map=/build/r-base-3.4.3=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -g  -c git2r_branch.c -o git2r_branch.o
>> git2r_branch.c: In function 'git2r_branch_upstream_canonical_name':
>> git2r_branch.c:407:19: error: 'GIT_BUF_INIT' undeclared (first use in this function); did you mean 'GIT_REF_OID'?
>>      git_buf buf = GIT_BUF_INIT;
>>                    ^~~~~~~~~~~~
>>                    GIT_REF_OID
>> git2r_branch.c:407:19: note: each undeclared identifier is reported only once for each function it appears in
>> git2r_branch.c:427:11: warning: implicit declaration of function 'git_buf_join3'; did you mean 'git_buf_set'? [-Wimplicit-function-declaration]
>>      err = git_buf_join3(
>>            ^~~~~~~~~~~~~
>>            git_buf_set
>> /usr/lib/R/etc/Makeconf:159: recipe for target 'git2r_branch.o' failed
>> This is in
>>    /usr/include/git2/buffer.h:#define GIT_BUF_INIT_CONST(STR,LEN) { (char *)(STR), 0, (size_t)(LEN) }
>> but it seems a different buffer.h is used.
> I dived a bit deeper into this and found this other buffer.h: It is a
> private header from libgit2/src/ and other headers from there are needed
> as well like common.h, cc_compat.h, thread-utils.h and possibly other
> header files.
> That's ... uhmmmm, no idea how to call this.  What would you suggest:
> Live with the nasty code copy and just add it to debian/copyright or
> hack around all those usage of private header files.  I've pushed some
> changes to Git[1] which keeps some (not all needed - for instance
> thread-utils.h is missing) but if there is no better idea how to deal
> with this I think I have better things to spent my time on than getting
> rid of a code copy you can not really cleanly get rid of.

I agree with your analysis, the mess of headers that libgit2 is using
IMHO could make the solution (cherry pick only some parts of libgit2)
worse than maintaining the embedded copy.

Jose Luis Rivero <jrivero@osrfoundation.org>

Reply to: