diff --git a/builtin.lua b/builtin.lua
index 5c58265..b461f67 100644
--- a/builtin.lua
+++ b/builtin.lua
@@ -51,14 +51,26 @@ function run(rockspec)
    local build = rockspec.build
    local variables = rockspec.variables
 
-   local function add_flags(extras, flag, flags)
+   local function add_flags(extras, flag, flags, check_framework)
       if flags then
          if type(flags) ~= "table" then
             flags = { tostring(flags) }
          end
          util.variable_substitutions(flags, variables)
-         for _, v in ipairs(flags) do
-            table.insert(extras, flag:format(v))
+         if check_framework then
+           for _, v in ipairs(flags) do
+             local fname = v:match('^%-framework +(.+)')
+             if fname then
+               table.insert(extras, '-framework')
+               table.insert(extras, fname)
+             else
+               table.insert(extras, flag:format(v))
+             end
+           end
+         else
+           for _, v in ipairs(flags) do
+             table.insert(extras, flag:format(v))
+           end
          end
       end
    end
@@ -158,7 +170,7 @@ function run(rockspec)
          if cfg.gcc_rpath then
             add_flags(extras, "-Wl,-rpath,%s:", libdirs)
          end
-         add_flags(extras, "-l%s", libraries)
+         add_flags(extras, "-l%s", libraries, true)
          if cfg.is_platform("cygwin") then
             add_flags(extras, "-l%s", {"lua"})
          end
