Use option args in find_library.
diff --git a/mesonbuild/compilers/c.py b/mesonbuild/compilers/c.py
index af3e2c4..aae98cb 100644
--- a/mesonbuild/compilers/c.py
+++ b/mesonbuild/compilers/c.py
@@ -898,12 +898,14 @@
                 return f
         return None
 
-    def find_library_real(self, libname, env, extra_dirs, code, libtype):
+    def find_library_real(self, libname, env, extra_dirs, code, extra_args, libtype):
+        if not isinstance(extra_args, list):
+            extra_args = [extra_args]
         # First try if we can just add the library as -l.
         # Gcc + co seem to prefer builtin lib dirs to -L dirs.
         # Only try to find std libs if no extra dirs specified.
         if not extra_dirs:
-            args = ['-l' + libname]
+            args = extra_args + ['-l' + libname]
             if self.links(code, env, extra_args=args):
                 return args
         # Not found or we want to use a specific libtype? Try to find the
@@ -936,19 +938,19 @@
                 # symbols from the main C file.
                 extra_link_args = self.get_link_whole_for([trial])
                 extra_link_args = self.linker_to_compiler_args(extra_link_args)
-                if self.links(code, env, extra_args=extra_link_args):
+                if self.links(code, env, extra_args=(extra_args + extra_link_args)):
                     return [trial]
         return None
 
-    def find_library_impl(self, libname, env, extra_dirs, code, libtype):
+    def find_library_impl(self, libname, env, extra_dirs, code, extra_args, libtype):
         # These libraries are either built-in or invalid
         if libname in self.ignore_libs:
             return []
         if isinstance(extra_dirs, str):
             extra_dirs = [extra_dirs]
-        key = (tuple(self.exelist), libname, tuple(extra_dirs), code, libtype)
+        key = (tuple(self.exelist), libname, tuple(extra_dirs), code, tuple(extra_args), libtype)
         if key not in self.find_library_cache:
-            value = self.find_library_real(libname, env, extra_dirs, code, libtype)
+            value = self.find_library_real(libname, env, extra_dirs, code, extra_args, libtype)
             self.find_library_cache[key] = value
         else:
             value = self.find_library_cache[key]
@@ -956,9 +958,9 @@
             return None
         return value[:]
 
-    def find_library(self, libname, env, extra_dirs, libtype='default'):
+    def find_library(self, libname, env, extra_dirs, extra_args, libtype='default'):
         code = 'int main(int argc, char **argv) { return 0; }'
-        return self.find_library_impl(libname, env, extra_dirs, code, libtype)
+        return self.find_library_impl(libname, env, extra_dirs, code, extra_args, libtype)
 
     def thread_flags(self, env):
         if for_haiku(self.is_cross, env):
diff --git a/mesonbuild/compilers/fortran.py b/mesonbuild/compilers/fortran.py
index d6e41e3..3d24419 100644
--- a/mesonbuild/compilers/fortran.py
+++ b/mesonbuild/compilers/fortran.py
@@ -185,11 +185,11 @@
     def find_library_impl(self, *args):
         return CCompiler.find_library_impl(self, *args)
 
-    def find_library(self, libname, env, extra_dirs, libtype='default'):
+    def find_library(self, libname, env, extra_dirs, extra_args, libtype='default'):
         code = '''program main
             call exit(0)
         end program main'''
-        return self.find_library_impl(libname, env, extra_dirs, code, libtype)
+        return self.find_library_impl(libname, env, extra_dirs, code, extra_args, libtype)
 
     def thread_flags(self, env):
         return CCompiler.thread_flags(self, env)
diff --git a/mesonbuild/compilers/vala.py b/mesonbuild/compilers/vala.py
index 6194d1a..ca621b7 100644
--- a/mesonbuild/compilers/vala.py
+++ b/mesonbuild/compilers/vala.py
@@ -74,7 +74,7 @@
             return ['--debug']
         return []
 
-    def find_library(self, libname, env, extra_dirs):
+    def find_library(self, libname, env, extra_dirs, extra_args):
         if extra_dirs and isinstance(extra_dirs, str):
             extra_dirs = [extra_dirs]
         # Valac always looks in the default vapi dir, so only search there if
diff --git a/mesonbuild/dependencies/base.py b/mesonbuild/dependencies/base.py
index 0fe702f..dc1498a 100644
--- a/mesonbuild/dependencies/base.py
+++ b/mesonbuild/dependencies/base.py
@@ -634,7 +634,7 @@
                     continue
                 if self.clib_compiler:
                     args = self.clib_compiler.find_library(lib[2:], self.env,
-                                                           list(libpaths), libtype)
+                                                           list(libpaths), [], libtype)
                 # If the project only uses a non-clib language such as D, Rust,
                 # C#, Python, etc, all we can do is limp along by adding the
                 # arguments as-is and then adding the libpaths at the end.
diff --git a/mesonbuild/dependencies/boost.py b/mesonbuild/dependencies/boost.py
index 59d8070..126a9f7 100644
--- a/mesonbuild/dependencies/boost.py
+++ b/mesonbuild/dependencies/boost.py
@@ -352,7 +352,7 @@
             return None
 
     def find_libraries_with_abi_tag(self, tag):
-
+        extra_args = []
         # All modules should have the same tag
         self.lib_modules = {}
 
@@ -361,7 +361,7 @@
         for module in self.requested_modules:
             libname = 'boost_' + module + tag
 
-            args = self.clib_compiler.find_library(libname, self.env, self.extra_lib_dirs())
+            args = self.clib_compiler.find_library(libname, self.env, self.extra_lib_dirs(), extra_args)
             if args is None:
                 mlog.debug("Couldn\'t find library '{}' for boost module '{}'  (ABI tag = '{}')".format(libname, module, tag))
                 all_found = False
diff --git a/mesonbuild/dependencies/dev.py b/mesonbuild/dependencies/dev.py
index 4ea3385..9971aed 100644
--- a/mesonbuild/dependencies/dev.py
+++ b/mesonbuild/dependencies/dev.py
@@ -36,8 +36,8 @@
 
     def detect(self):
         self.version = '1.something_maybe'
-        gtest_detect = self.clib_compiler.find_library("gtest", self.env, [])
-        gtest_main_detect = self.clib_compiler.find_library("gtest_main", self.env, [])
+        gtest_detect = self.clib_compiler.find_library("gtest", self.env, [], [])
+        gtest_main_detect = self.clib_compiler.find_library("gtest_main", self.env, [], [])
         if gtest_detect and (not self.main or gtest_main_detect):
             self.is_found = True
             self.compile_args = []
@@ -83,7 +83,7 @@
         self.version = '1.something_maybe'
         # GMock may be a library or just source.
         # Work with both.
-        gmock_detect = self.clib_compiler.find_library("gmock", self.env, [])
+        gmock_detect = self.clib_compiler.find_library("gmock", self.env, [], [])
         if gmock_detect:
             self.is_found = True
             self.compile_args = []
diff --git a/mesonbuild/interpreter.py b/mesonbuild/interpreter.py
index 1607904..9d19aac 100644
--- a/mesonbuild/interpreter.py
+++ b/mesonbuild/interpreter.py
@@ -1443,7 +1443,8 @@
         for i in search_dirs:
             if not os.path.isabs(i):
                 raise InvalidCode('Search directory %s is not an absolute path.' % i)
-        linkargs = self.compiler.find_library(libname, self.environment, search_dirs)
+        extra_args = self.determine_args(kwargs)
+        linkargs = self.compiler.find_library(libname, self.environment, search_dirs, extra_args)
         if required and not linkargs:
             raise InterpreterException('{} library {!r} not found'.format(self.compiler.get_display_language(), libname))
         lib = dependencies.ExternalLibrary(libname, linkargs, self.environment,
diff --git a/mesonbuild/modules/python.py b/mesonbuild/modules/python.py
index 9a90fe9..f821711 100644
--- a/mesonbuild/modules/python.py
+++ b/mesonbuild/modules/python.py
@@ -123,7 +123,7 @@
                 libname += self.variables['ABIFLAGS']
             libdirs = []
 
-        largs = self.clib_compiler.find_library(libname, environment, libdirs)
+        largs = self.clib_compiler.find_library(libname, environment, libdirs, [])
 
         self.is_found = largs is not None
 
diff --git a/run_unittests.py b/run_unittests.py
index dd109aa..f07bccd 100755
--- a/run_unittests.py
+++ b/run_unittests.py
@@ -542,7 +542,7 @@
                 f.write('')
             with open(os.path.join(tmpdir, 'libfoo.so.70.0.so.1'), 'w') as f:
                 f.write('')
-            found = cc.find_library_real('foo', env, [tmpdir], '', 'default')
+            found = cc.find_library_real('foo', env, [tmpdir], '', [], 'default')
             self.assertEqual(os.path.basename(found[0]), 'libfoo.so.54.0')
 
     def test_find_library_patterns(self):