Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions 6 generate/templates/manual/include/init_ssh2.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
#ifndef INIT_SSH2
#define INIT_SSH2

void init_ssh2();

#endif
12 changes: 12 additions & 0 deletions 12 generate/templates/manual/src/init_ssh2.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
// We are initializing libssh2 from a separate .cc file to avoid ssize_t
// redefinition conflicts caused by incliding both node.h and libssh2.h from
// the same file (e.g. nodegit.cc)
//
// The redefinition can also be avoided by #defines but that is risky in case
// the libraries depend on the different definitions.

#include <libssh2.h>

void init_ssh2() {
libssh2_init(0);
}
3 changes: 3 additions & 0 deletions 3 generate/templates/templates/binding.gyp
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
"sources": [
"src/lock_master.cc",
"src/nodegit.cc",
"src/init_ssh2.cc",
"src/promise_completion.cc",
"src/wrapper.cc",
"src/functions/copy.cc",
Expand All @@ -32,6 +33,8 @@

"include_dirs": [
"vendor/libv8-convert",
"vendor/libssh2/include",
"vendor/openssl/openssl/include",
"<!(node -e \"require('nan')\")"
],

Expand Down
32 changes: 32 additions & 0 deletions 32 generate/templates/templates/nodegit.cc
Original file line number Diff line number Diff line change
@@ -1,11 +1,15 @@
// This is a generated file, modify: generate/templates/nodegit.cc.
#include <v8.h>

#include <node.h>
#include <git2.h>
#include <map>
#include <algorithm>
#include <set>

#include <openssl/crypto.h>

#include "../include/init_ssh2.h"
#include "../include/lock_master.h"
#include "../include/wrapper.h"
#include "../include/promise_completion.h"
Expand Down Expand Up @@ -39,7 +43,35 @@ void LockMasterGetDiagnostics(const FunctionCallbackInfo<Value>& info) {
info.GetReturnValue().Set(result);
}

static uv_mutex_t *opensslMutexes;

void OpenSSL_LockingCallback(int mode, int type, const char *, int) {
if (mode & CRYPTO_LOCK) {
uv_mutex_lock(&opensslMutexes[type]);
} else {
uv_mutex_unlock(&opensslMutexes[type]);
}
}

unsigned long OpenSSL_IDCallback() {
return (unsigned long)uv_thread_self();
}

void OpenSSL_ThreadSetup() {
opensslMutexes=(uv_mutex_t *)malloc(CRYPTO_num_locks() * sizeof(uv_mutex_t));

for (int i=0; i<CRYPTO_num_locks(); i++) {
uv_mutex_init(&opensslMutexes[i]);
}

CRYPTO_set_locking_callback(OpenSSL_LockingCallback);
CRYPTO_set_id_callback(OpenSSL_IDCallback);
}

extern "C" void init(Local<v8::Object> target) {
// Initialize thread safety in openssl and libssh2
OpenSSL_ThreadSetup();
init_ssh2();
// Initialize libgit2.
git_libgit2_init();

Expand Down
16 changes: 13 additions & 3 deletions 16 lifecycleScripts/configureLibssh2.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,19 @@ module.exports = function retrieveExternalDependencies() {

return new Promise(function(resolve, reject) {
console.info("[nodegit] Configuring libssh2.");
cp.execFile(
rooted("vendor/libssh2/") + "configure",
{cwd: rooted("vendor/libssh2/")},
var opensslDir = rooted("vendor/openssl/openssl");
var newEnv = {};
Object.keys(process.env).forEach(function(key) {
newEnv[key] = process.env[key];
});
newEnv.CPPFLAGS = newEnv.CPPFLAGS || "";
newEnv.CPPFLAGS += " -I" + path.join(opensslDir, "include");
newEnv.CPPFLAGS = newEnv.CPPFLAGS.trim();

cp.exec(
rooted("vendor/libssh2/configure") +
" --with-libssl-prefix=" + opensslDir,
{cwd: rooted("vendor/libssh2/"), env: newEnv},
function(err, stdout, stderr) {
if (err) {
console.error(err);
Expand Down
40 changes: 22 additions & 18 deletions 40 lifecycleScripts/install.js
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
var promisify = require("promisify-node");
var path = require("path");
var fs = require("fs");

var cp = require("child_process");
var prepareForBuild = require("./prepareForBuild");

var exec = promisify(function(command, opts, callback) {
return require("child_process").exec(command, opts, callback);
return cp.exec(command, opts, callback);
});

var fromRegistry;
Expand Down Expand Up @@ -52,7 +52,9 @@ function installPrebuilt() {

function pathForTool(name) {
var toolPath = path.resolve(".", "node_modules", ".bin", name);
toolPath = "\"" + toolPath + "\"";
if (process.platform == "win32") {
toolPath += ".cmd";
}
return toolPath;
}

Expand All @@ -72,7 +74,8 @@ function build() {
var opts = {
cwd: ".",
maxBuffer: Number.MAX_VALUE,
env: process.env
env: process.env,
stdio: "inherit"
};

var builder = "node-gyp";
Expand Down Expand Up @@ -104,26 +107,27 @@ function build() {

opts.env.HOME = path.join(home, ".nodegit-gyp");

var cmd = [
pathForTool(builder),
var cmd = pathForTool(builder);
var args = [
"rebuild",
debug,
target,
distUrl
]
.join(" ")
.trim();

return exec(cmd, opts)
.then(function() {
console.info("[nodegit] Compilation complete.");
console.info("[nodegit] Completed installation successfully.");
process.exitCode = 0;
},
function(err, stderr) {
console.error(err);
console.error(stderr);
.trim()
.split(" ");
return new Promise(function(resolve, reject) {
var child = cp.spawn(cmd, args, opts);
child.on("close", function(code) {
console.log(code);
if (code) {
reject(code);
process.exitCode = 13;
}
);
else {
resolve();
}
});
});
}
Morty Proxy This is a proxified and sanitized view of the page, visit original site.