Skip to content

Commit

Permalink
Merge pull request #872 from zbjornson/has-lib-js
Browse files Browse the repository at this point in the history
src(build): port has_lib.js to javascript
  • Loading branch information
LinusU committed Feb 26, 2017
2 parents 468a926 + 5702c47 commit 610e3ad
Show file tree
Hide file tree
Showing 5 changed files with 119 additions and 67 deletions.
5 changes: 5 additions & 0 deletions History.md
@@ -1,3 +1,8 @@
Unreleased / patch
==================

* Port has_lib.sh to javascript (#872)

1.6.0 / 2016-10-16
==================

Expand Down
4 changes: 2 additions & 2 deletions binding.gyp
Expand Up @@ -8,8 +8,8 @@
}
}, { # 'OS!="win"'
'variables': {
'with_jpeg%': '<!(./util/has_lib.sh jpeg)',
'with_gif%': '<!(./util/has_lib.sh gif)'
'with_jpeg%': '<!(node ./util/has_lib.js jpeg)',
'with_gif%': '<!(node ./util/has_lib.js gif)'
}
}]
],
Expand Down
2 changes: 1 addition & 1 deletion package.json
Expand Up @@ -24,7 +24,7 @@
"prebenchmark": "node-gyp build",
"benchmark": "node benchmarks/run.js",
"pretest": "node-gyp build",
"test": "standard examples/*.js test/server.js test/public/*.js benchmark/run.js && mocha test/*.test.js",
"test": "standard examples/*.js test/server.js test/public/*.js benchmark/run.js util/has_lib.js && mocha test/*.test.js",
"pretest-server": "node-gyp build",
"test-server": "node test/server.js"
},
Expand Down
111 changes: 111 additions & 0 deletions util/has_lib.js
@@ -0,0 +1,111 @@
var query = process.argv[2]
var fs = require('fs')
var childProcess = require('child_process')

var SYSTEM_PATHS = [
'/lib',
'/usr/lib',
'/usr/local/lib',
'/opt/local/lib',
'/usr/lib/x86_64-linux-gnu',
'/usr/lib/i386-linux-gnu'
]

/**
* Checks for lib using ldconfig if present, or searching SYSTEM_PATHS
* otherwise.
* @param String library name, e.g. 'jpeg' in 'libjpeg64.so' (see first line)
* @return Boolean exists
*/
function hasSystemLib (lib) {
var libName = 'lib' + lib + '.+(so|dylib)'
var libNameRegex = new RegExp(libName)

// Try using ldconfig on linux systems
if (hasLdconfig()) {
try {
if (childProcess.execSync('ldconfig -p 2>/dev/null | grep -E "' + libName + '"').length) {
return true
}
} catch (err) {
// noop -- proceed to other search methods
}
}

// Try checking common library locations
return SYSTEM_PATHS.some(function (systemPath) {
try {
var dirListing = fs.readdirSync(systemPath)
return dirListing.some(function (file) {
return libNameRegex.test(file)
})
} catch (err) {
return false
}
})
}

/**
* Checks for ldconfig on the path and /sbin
* @return Boolean exists
*/
function hasLdconfig () {
try {
// Add /sbin to path as ldconfig is located there on some systems -- e.g.
// Debian (and it can still be used by unprivileged users):
childProcess.execSync('export PATH="$PATH:/sbin"')
process.env.PATH = '...'
// execSync throws on nonzero exit
childProcess.execSync('hash ldconfig 2>/dev/null')
return true
} catch (err) {
return false
}
}

/**
* Checks for freetype2 with --cflags-only-I
* @return Boolean exists
*/
function hasFreetype () {
try {
if (childProcess.execSync('pkg-config cairo --cflags-only-I 2>/dev/null | grep freetype2').length) {
return true
}
} catch (err) {
// noop
}
return false
}

/**
* Checks for lib using pkg-config.
* @param String library name
* @return Boolean exists
*/
function hasPkgconfigLib (lib) {
try {
// execSync throws on nonzero exit
childProcess.execSync('pkg-config --exists "' + lib + '" 2>/dev/null')
return true
} catch (err) {
return false
}
}

function main (query) {
switch (query) {
case 'gif':
case 'jpeg':
case 'cairo':
return hasSystemLib(query)
case 'pango':
return hasPkgconfigLib(query)
case 'freetype':
return hasFreetype()
default:
throw new Error('Unknown library: ' + query)
}
}

process.stdout.write(main(query).toString())
64 changes: 0 additions & 64 deletions util/has_lib.sh

This file was deleted.

0 comments on commit 610e3ad

Please sign in to comment.