Skip to content

Commit b5fa186

Browse files
committed
Better linking through libgit2 in node-gyp.
This adds in a similar binding.gyp configuration for libgit2 as found in: https://github.com/atom/git-utils I've had to modify it to work with our older version of libgit2, but this will all be templated soon.
1 parent 2c2fd3c commit b5fa186

3 files changed

Lines changed: 358 additions & 49 deletions

File tree

binding.gyp

Lines changed: 356 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,10 @@
33
{
44
"target_name": "nodegit",
55

6+
"dependencies": [
7+
"libgit2"
8+
],
9+
610
"sources": [
711
"src/base.cc",
812
"src/blob.cc",
@@ -50,18 +54,18 @@
5054
],
5155

5256
"ldflags": [
53-
"-Wl,-rpath,\$$ORIGIN/../../vendor/libgit2/build"
57+
"-Wl,-rpath,\$$ORIGIN/Release/"
5458
],
5559

5660
"conditions": [
5761
[
5862
"OS=='win'", {
5963
"libraries": [
60-
"-l../vendor/libgit2/build/Debug/git2.lib"
64+
"-lRelease/git2.lib"
6165
],
6266
}, { # 'OS!="win"'
6367
"libraries": [
64-
"-L<!(pwd)/vendor/libgit2/build",
68+
"-L<!(pwd)/build/Release",
6569
"-lgit2"
6670
]
6771
}
@@ -75,6 +79,354 @@
7579
}
7680
]
7781
]
78-
}
82+
},
83+
{
84+
"target_name": "libgit2",
85+
"type": "static_library",
86+
"defines": [
87+
"GIT_THREADS",
88+
# Node's util.h may be accidentally included so use this to guard
89+
# against compilation error.
90+
"SRC_UTIL_H_",
91+
],
92+
"dependencies": [
93+
"zlib",
94+
"http_parser",
95+
],
96+
"sources": [
97+
"vendor/libgit2/src/attr.c",
98+
"vendor/libgit2/src/attr.h",
99+
"vendor/libgit2/src/attr_file.c",
100+
"vendor/libgit2/src/attr_file.h",
101+
"vendor/libgit2/src/blob.c",
102+
"vendor/libgit2/src/blob.h",
103+
"vendor/libgit2/src/branch.c",
104+
"vendor/libgit2/src/branch.h",
105+
"vendor/libgit2/src/bswap.h",
106+
"vendor/libgit2/src/buf_text.c",
107+
"vendor/libgit2/src/buf_text.h",
108+
"vendor/libgit2/src/buffer.c",
109+
"vendor/libgit2/src/buffer.h",
110+
"vendor/libgit2/src/cache.c",
111+
"vendor/libgit2/src/cache.h",
112+
"vendor/libgit2/src/cc-compat.h",
113+
"vendor/libgit2/src/checkout.c",
114+
"vendor/libgit2/src/checkout.h",
115+
"vendor/libgit2/src/clone.c",
116+
"vendor/libgit2/src/commit.c",
117+
"vendor/libgit2/src/commit.h",
118+
"vendor/libgit2/src/commit_list.c",
119+
"vendor/libgit2/src/commit_list.h",
120+
"vendor/libgit2/src/common.h",
121+
"vendor/libgit2/src/compress.c",
122+
"vendor/libgit2/src/compress.h",
123+
"vendor/libgit2/src/config.c",
124+
"vendor/libgit2/src/config.h",
125+
"vendor/libgit2/src/config_cache.c",
126+
"vendor/libgit2/src/config_file.c",
127+
"vendor/libgit2/src/config_file.h",
128+
"vendor/libgit2/src/crlf.c",
129+
"vendor/libgit2/src/date.c",
130+
"vendor/libgit2/src/delta-apply.c",
131+
"vendor/libgit2/src/delta-apply.h",
132+
"vendor/libgit2/src/delta.c",
133+
"vendor/libgit2/src/delta.h",
134+
"vendor/libgit2/src/diff.c",
135+
"vendor/libgit2/src/diff.h",
136+
"vendor/libgit2/src/diff_output.c",
137+
"vendor/libgit2/src/diff_output.h",
138+
"vendor/libgit2/src/diff_tform.c",
139+
"vendor/libgit2/src/errors.c",
140+
"vendor/libgit2/src/fetch.c",
141+
"vendor/libgit2/src/fetch.h",
142+
"vendor/libgit2/src/fetchhead.c",
143+
"vendor/libgit2/src/fetchhead.h",
144+
"vendor/libgit2/src/filebuf.c",
145+
"vendor/libgit2/src/filebuf.h",
146+
"vendor/libgit2/src/fileops.c",
147+
"vendor/libgit2/src/fileops.h",
148+
"vendor/libgit2/src/filter.c",
149+
"vendor/libgit2/src/filter.h",
150+
"vendor/libgit2/src/fnmatch.c",
151+
"vendor/libgit2/src/fnmatch.h",
152+
"vendor/libgit2/src/global.c",
153+
"vendor/libgit2/src/global.h",
154+
"vendor/libgit2/src/graph.c",
155+
"vendor/libgit2/src/hash.c",
156+
"vendor/libgit2/src/hash.h",
157+
"vendor/libgit2/src/hashsig.c",
158+
"vendor/libgit2/src/hashsig.h",
159+
"vendor/libgit2/src/ignore.c",
160+
"vendor/libgit2/src/ignore.h",
161+
"vendor/libgit2/src/index.c",
162+
"vendor/libgit2/src/index.h",
163+
"vendor/libgit2/src/indexer.c",
164+
"vendor/libgit2/src/iterator.c",
165+
"vendor/libgit2/src/iterator.h",
166+
"vendor/libgit2/src/khash.h",
167+
"vendor/libgit2/src/map.h",
168+
"vendor/libgit2/src/merge.c",
169+
"vendor/libgit2/src/merge.h",
170+
"vendor/libgit2/src/message.c",
171+
"vendor/libgit2/src/message.h",
172+
"vendor/libgit2/src/mwindow.c",
173+
"vendor/libgit2/src/mwindow.h",
174+
"vendor/libgit2/src/netops.c",
175+
"vendor/libgit2/src/netops.h",
176+
"vendor/libgit2/src/notes.c",
177+
"vendor/libgit2/src/notes.h",
178+
"vendor/libgit2/src/object.c",
179+
"vendor/libgit2/src/object.h",
180+
"vendor/libgit2/src/odb.c",
181+
"vendor/libgit2/src/odb.h",
182+
"vendor/libgit2/src/odb_loose.c",
183+
"vendor/libgit2/src/odb_pack.c",
184+
"vendor/libgit2/src/offmap.h",
185+
"vendor/libgit2/src/oid.c",
186+
"vendor/libgit2/src/oidmap.h",
187+
"vendor/libgit2/src/pack-objects.c",
188+
"vendor/libgit2/src/pack-objects.h",
189+
"vendor/libgit2/src/pack.c",
190+
"vendor/libgit2/src/pack.h",
191+
"vendor/libgit2/src/path.c",
192+
"vendor/libgit2/src/path.h",
193+
"vendor/libgit2/src/pathspec.c",
194+
"vendor/libgit2/src/pathspec.h",
195+
"vendor/libgit2/src/pool.c",
196+
"vendor/libgit2/src/pool.h",
197+
"vendor/libgit2/src/posix.c",
198+
"vendor/libgit2/src/posix.h",
199+
"vendor/libgit2/src/pqueue.c",
200+
"vendor/libgit2/src/pqueue.h",
201+
"vendor/libgit2/src/push.c",
202+
"vendor/libgit2/src/push.h",
203+
"vendor/libgit2/src/refdb.c",
204+
"vendor/libgit2/src/refdb.h",
205+
"vendor/libgit2/src/refdb_fs.c",
206+
"vendor/libgit2/src/refdb_fs.h",
207+
"vendor/libgit2/src/reflog.c",
208+
"vendor/libgit2/src/reflog.h",
209+
"vendor/libgit2/src/refs.c",
210+
"vendor/libgit2/src/refs.h",
211+
"vendor/libgit2/src/refspec.c",
212+
"vendor/libgit2/src/refspec.h",
213+
"vendor/libgit2/src/remote.c",
214+
"vendor/libgit2/src/remote.h",
215+
"vendor/libgit2/src/repo_template.h",
216+
"vendor/libgit2/src/repository.c",
217+
"vendor/libgit2/src/repository.h",
218+
"vendor/libgit2/src/reset.c",
219+
"vendor/libgit2/src/revparse.c",
220+
"vendor/libgit2/src/revwalk.c",
221+
"vendor/libgit2/src/revwalk.h",
222+
"vendor/libgit2/src/sha1_lookup.c",
223+
"vendor/libgit2/src/sha1_lookup.h",
224+
"vendor/libgit2/src/signature.c",
225+
"vendor/libgit2/src/signature.h",
226+
"vendor/libgit2/src/stash.c",
227+
"vendor/libgit2/src/status.c",
228+
"vendor/libgit2/src/strmap.h",
229+
"vendor/libgit2/src/submodule.c",
230+
"vendor/libgit2/src/submodule.h",
231+
"vendor/libgit2/src/tag.c",
232+
"vendor/libgit2/src/tag.h",
233+
"vendor/libgit2/src/thread-utils.c",
234+
"vendor/libgit2/src/thread-utils.h",
235+
"vendor/libgit2/src/trace.c",
236+
"vendor/libgit2/src/trace.h",
237+
"vendor/libgit2/src/transport.c",
238+
"vendor/libgit2/src/tree-cache.c",
239+
"vendor/libgit2/src/tree-cache.h",
240+
"vendor/libgit2/src/tree.c",
241+
"vendor/libgit2/src/tree.h",
242+
"vendor/libgit2/src/tsort.c",
243+
"vendor/libgit2/src/util.c",
244+
"vendor/libgit2/src/util.h",
245+
"vendor/libgit2/src/vector.c",
246+
"vendor/libgit2/src/vector.h",
247+
"vendor/libgit2/src/transports/cred.c",
248+
"vendor/libgit2/src/transports/cred_helpers.c",
249+
"vendor/libgit2/src/transports/git.c",
250+
"vendor/libgit2/src/transports/http.c",
251+
"vendor/libgit2/src/transports/local.c",
252+
"vendor/libgit2/src/transports/smart.c",
253+
"vendor/libgit2/src/transports/smart.h",
254+
"vendor/libgit2/src/transports/smart_pkt.c",
255+
"vendor/libgit2/src/transports/smart_protocol.c",
256+
"vendor/libgit2/src/transports/winhttp.c",
257+
"vendor/libgit2/src/hash/hash_generic.c",
258+
"vendor/libgit2/src/hash/hash_generic.h",
259+
"vendor/libgit2/src/hash/hash_openssl.h",
260+
"vendor/libgit2/src/xdiff/xdiff.h",
261+
"vendor/libgit2/src/xdiff/xdiffi.c",
262+
"vendor/libgit2/src/xdiff/xdiffi.h",
263+
"vendor/libgit2/src/xdiff/xemit.c",
264+
"vendor/libgit2/src/xdiff/xemit.h",
265+
"vendor/libgit2/src/xdiff/xhistogram.c",
266+
"vendor/libgit2/src/xdiff/xinclude.h",
267+
"vendor/libgit2/src/xdiff/xmacros.h",
268+
"vendor/libgit2/src/xdiff/xmerge.c",
269+
"vendor/libgit2/src/xdiff/xpatience.c",
270+
"vendor/libgit2/src/xdiff/xprepare.c",
271+
"vendor/libgit2/src/xdiff/xprepare.h",
272+
"vendor/libgit2/src/xdiff/xtypes.h",
273+
"vendor/libgit2/src/xdiff/xutils.c",
274+
"vendor/libgit2/src/xdiff/xutils.h"
275+
],
276+
"conditions": [
277+
["OS=='linux'", {
278+
"cflags": [
279+
"-w",
280+
],
281+
}],
282+
["OS=='win'", {
283+
"defines": [
284+
"GIT_WINHTTP",
285+
],
286+
"msvs_settings": {
287+
"VCLinkerTool": {
288+
"AdditionalDependencies": [
289+
"ws2_32.lib",
290+
],
291+
},
292+
# Workaround of a strange bug:
293+
# TargetMachine + static_library + x64 = nothing.
294+
"conditions": [
295+
["target_arch=='x64'", {
296+
'VCLibrarianTool': {
297+
'AdditionalOptions': [
298+
'/MACHINE:X64',
299+
],
300+
},
301+
}, {
302+
'VCLibrarianTool': {
303+
'AdditionalOptions': [
304+
'/MACHINE:x86',
305+
],
306+
},
307+
}],
308+
],
309+
},
310+
'msvs_disabled_warnings': [
311+
4244, # conversion from 'ssize_t' to 'int32_t', possible loss of data
312+
4267, # conversion from 'size_t' to 'int', possible loss of data
313+
4090, # different 'volatile' qualifiers
314+
4047, # 'volatile void *' differs in levels of indirection from 'int'
315+
4013, # 'InterlockedDecrement' undefined; assuming extern returning int
316+
],
317+
'sources': [
318+
'vendor/libgit2/src/win32/dir.c',
319+
'vendor/libgit2/src/win32/dir.h',
320+
'vendor/libgit2/src/win32/error.c',
321+
'vendor/libgit2/src/win32/error.h',
322+
'vendor/libgit2/src/win32/findfile.c',
323+
'vendor/libgit2/src/win32/findfile.h',
324+
'vendor/libgit2/src/win32/git2.rc',
325+
'vendor/libgit2/src/win32/map.c',
326+
'vendor/libgit2/src/win32/mingw-compat.h',
327+
'vendor/libgit2/src/win32/msvc-compat.h',
328+
'vendor/libgit2/src/win32/posix.h',
329+
'vendor/libgit2/src/win32/posix_w32.c',
330+
'vendor/libgit2/src/win32/precompiled.c',
331+
'vendor/libgit2/src/win32/precompiled.h',
332+
'vendor/libgit2/src/win32/pthread.c',
333+
'vendor/libgit2/src/win32/pthread.h',
334+
'vendor/libgit2/src/win32/utf-conv.c',
335+
'vendor/libgit2/src/win32/utf-conv.h',
336+
'vendor/libgit2/src/win32/version.h',
337+
"vendor/libgit2/src/hash/hash_win32.c",
338+
"vendor/libgit2/src/hash/hash_win32.h",
339+
'vendor/libgit2/deps/regex/regex.c',
340+
],
341+
}, {
342+
'libraries': [
343+
'-lpthread',
344+
],
345+
'sources': [
346+
'vendor/libgit2/src/unix/map.c',
347+
'vendor/libgit2/src/unix/posix.h',
348+
'vendor/libgit2/src/unix/realpath.c',
349+
],
350+
'cflags': [
351+
'-Wno-missing-field-initializers',
352+
'-Wno-unused-variable'
353+
],
354+
'xcode_settings': {
355+
'WARNING_CFLAGS': [
356+
'-Wno-missing-field-initializers',
357+
'-Wno-unused-variable'
358+
],
359+
},
360+
}],
361+
],
362+
'include_dirs': [
363+
'vendor/libgit2/include',
364+
'vendor/libgit2/src',
365+
'vendor/libgit2/deps/regex',
366+
],
367+
'direct_dependent_settings': {
368+
'include_dirs': [
369+
'vendor/libgit2/include',
370+
],
371+
},
372+
},
373+
{
374+
'target_name': 'zlib',
375+
'type': 'static_library',
376+
'sources': [
377+
'vendor/libgit2/deps/zlib/adler32.c',
378+
'vendor/libgit2/deps/zlib/crc32.c',
379+
'vendor/libgit2/deps/zlib/crc32.h',
380+
'vendor/libgit2/deps/zlib/deflate.c',
381+
'vendor/libgit2/deps/zlib/deflate.h',
382+
'vendor/libgit2/deps/zlib/inffast.c',
383+
'vendor/libgit2/deps/zlib/inffast.h',
384+
'vendor/libgit2/deps/zlib/inffixed.h',
385+
'vendor/libgit2/deps/zlib/inflate.c',
386+
'vendor/libgit2/deps/zlib/inflate.h',
387+
'vendor/libgit2/deps/zlib/inftrees.c',
388+
'vendor/libgit2/deps/zlib/inftrees.h',
389+
'vendor/libgit2/deps/zlib/trees.c',
390+
'vendor/libgit2/deps/zlib/trees.h',
391+
'vendor/libgit2/deps/zlib/zconf.h',
392+
'vendor/libgit2/deps/zlib/zlib.h',
393+
'vendor/libgit2/deps/zlib/zutil.c',
394+
'vendor/libgit2/deps/zlib/zutil.h',
395+
],
396+
'defines': [
397+
'NO_VIZ',
398+
'STDC',
399+
'NO_GZIP',
400+
],
401+
'include_dirs': [
402+
'vendor/libgit2/include',
403+
'vendor/libgit2/deps/regex',
404+
],
405+
'direct_dependent_settings': {
406+
'include_dirs': [
407+
'vendor/libgit2/deps/zlib',
408+
],
409+
},
410+
},
411+
{
412+
'target_name': 'http_parser',
413+
'type': 'static_library',
414+
'sources': [
415+
'vendor/libgit2/deps/http-parser/http_parser.c',
416+
'vendor/libgit2/deps/http-parser/http_parser.h',
417+
],
418+
'direct_dependent_settings': {
419+
'include_dirs': [
420+
'vendor/libgit2/deps/http-parser',
421+
],
422+
},
423+
'conditions': [
424+
['OS=="win"', {
425+
'msvs_disabled_warnings': [
426+
4244, # conversion from 'ssize_t' to 'int32_t', possible loss of data
427+
],
428+
}],
429+
],
430+
},
79431
]
80432
}

0 commit comments

Comments
 (0)