Allow users to specify complete dylib path  (#221)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 6950615..be98e9a 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,6 @@
+# 3.1.0-dev.1
+- Users can now specify exact path to dynamic library in `llvm-path`.
+
 # 3.1.0-dev.0
 - Added support for generating unions.
 
diff --git a/README.md b/README.md
index ae66d69..10911df 100644
--- a/README.md
+++ b/README.md
@@ -98,7 +98,8 @@
     <td>llvm-path</td>
     <td>Path to <i>llvm</i> folder.<br> ffigen will sequentially search
     for `lib/libclang.so` on linux, `lib/libclang.dylib` on macOs and
-    `bin\libclang.dll` on windows, in the specified paths.<br>
+    `bin\libclang.dll` on windows, in the specified paths.<br><br>
+    Complete path to the dynamic library can also be supplied.<br>
     <i>Required</i> if ffigen is unable to find this at default locations.</td>
     <td>
 
@@ -107,6 +108,8 @@
   - '/usr/local/opt/llvm'
   - 'C:\Program Files\llvm`
   - '/usr/lib/llvm-11'
+  # Specify exact path to dylib
+  - '/usr/lib64/libclang.so'
 ```
   </td>
   </tr>
diff --git a/lib/src/config_provider/spec_utils.dart b/lib/src/config_provider/spec_utils.dart
index a36ee50..52a5df9 100644
--- a/lib/src/config_provider/spec_utils.dart
+++ b/lib/src/config_provider/spec_utils.dart
@@ -349,6 +349,14 @@
       _logger.fine('Found dynamic library at: $dylibPath');
       return dylibPath;
     }
+    // Check if user has specified complete path to dylib.
+    final completeDylibPath = path;
+    if (p.extension(completeDylibPath).isNotEmpty &&
+        File(completeDylibPath).existsSync()) {
+      _logger.info(
+          'Using complete dylib path: $completeDylibPath from llvm-path.');
+      return completeDylibPath;
+    }
   }
   _logger.fine(
       "Couldn't find dynamic library under paths specified by ${strings.llvmPath}.");
diff --git a/pubspec.yaml b/pubspec.yaml
index 54793af..ef3ff76 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -3,7 +3,7 @@
 # BSD-style license that can be found in the LICENSE file.
 
 name: ffigen
-version: 3.1.0-dev.0
+version: 3.1.0-dev.1
 homepage: https://github.com/dart-lang/ffigen
 description: Generator for FFI bindings, using LibClang to parse C header files.