|  |  |  | # detect-libc
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Node.js module to detect details of the C standard library (libc) | 
					
						
							|  |  |  | implementation provided by a given Linux system. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Currently supports detection of GNU glibc and MUSL libc. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Provides asychronous and synchronous functions for the | 
					
						
							|  |  |  | family (e.g. `glibc`, `musl`) and version (e.g. `1.23`, `1.2.3`). | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The version numbers of libc implementations | 
					
						
							|  |  |  | are not guaranteed to be semver-compliant. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | For previous v1.x releases, please see the | 
					
						
							|  |  |  | [v1](https://github.com/lovell/detect-libc/tree/v1) branch. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ## Install
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ```sh | 
					
						
							|  |  |  | npm install detect-libc | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ## API
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ### GLIBC
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ```ts | 
					
						
							|  |  |  | const GLIBC: string = 'glibc'; | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | A String constant containing the value `glibc`. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ### MUSL
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ```ts | 
					
						
							|  |  |  | const MUSL: string = 'musl'; | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | A String constant containing the value `musl`. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ### family
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ```ts | 
					
						
							|  |  |  | function family(): Promise<string | null>; | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Resolves asychronously with: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | * `glibc` or `musl` when the libc family can be determined | 
					
						
							|  |  |  | * `null` when the libc family cannot be determined | 
					
						
							|  |  |  | * `null` when run on a non-Linux platform | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ```js | 
					
						
							|  |  |  | const { family, GLIBC, MUSL } = require('detect-libc'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | switch (await family()) { | 
					
						
							|  |  |  |   case GLIBC: ... | 
					
						
							|  |  |  |   case MUSL: ... | 
					
						
							|  |  |  |   case null: ... | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ### familySync
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ```ts | 
					
						
							|  |  |  | function familySync(): string | null; | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Synchronous version of `family()`. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ```js | 
					
						
							|  |  |  | const { familySync, GLIBC, MUSL } = require('detect-libc'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | switch (familySync()) { | 
					
						
							|  |  |  |   case GLIBC: ... | 
					
						
							|  |  |  |   case MUSL: ... | 
					
						
							|  |  |  |   case null: ... | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ### version
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ```ts | 
					
						
							|  |  |  | function version(): Promise<string | null>; | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Resolves asychronously with: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | * The version when it can be determined | 
					
						
							|  |  |  | * `null` when the libc family cannot be determined | 
					
						
							|  |  |  | * `null` when run on a non-Linux platform | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ```js | 
					
						
							|  |  |  | const { version } = require('detect-libc'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const v = await version(); | 
					
						
							|  |  |  | if (v) { | 
					
						
							|  |  |  |   const [major, minor, patch] = v.split('.'); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ### versionSync
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ```ts | 
					
						
							|  |  |  | function versionSync(): string | null; | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Synchronous version of `version()`. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ```js | 
					
						
							|  |  |  | const { versionSync } = require('detect-libc'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const v = versionSync(); | 
					
						
							|  |  |  | if (v) { | 
					
						
							|  |  |  |   const [major, minor, patch] = v.split('.'); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ### isNonGlibcLinux
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ```ts | 
					
						
							|  |  |  | function isNonGlibcLinux(): Promise<boolean>; | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Resolves asychronously with: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | * `false` when the libc family is `glibc` | 
					
						
							|  |  |  | * `true` when the libc family is not `glibc` | 
					
						
							|  |  |  | * `false` when run on a non-Linux platform | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ```js | 
					
						
							|  |  |  | const { isNonGlibcLinux } = require('detect-libc'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if (await isNonGlibcLinux()) { ... } | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ### isNonGlibcLinuxSync
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ```ts | 
					
						
							|  |  |  | function isNonGlibcLinuxSync(): boolean; | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Synchronous version of `isNonGlibcLinux()`. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ```js | 
					
						
							|  |  |  | const { isNonGlibcLinuxSync } = require('detect-libc'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if (isNonGlibcLinuxSync()) { ... } | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ## Licensing
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Copyright 2017 Lovell Fuller and others. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Licensed under the Apache License, Version 2.0 (the "License"); | 
					
						
							|  |  |  | you may not use this file except in compliance with the License. | 
					
						
							|  |  |  | You may obtain a copy of the License at [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0.html) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Unless required by applicable law or agreed to in writing, software | 
					
						
							|  |  |  | distributed under the License is distributed on an "AS IS" BASIS, | 
					
						
							|  |  |  | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
					
						
							|  |  |  | See the License for the specific language governing permissions and | 
					
						
							|  |  |  | limitations under the License. |