diff -rup luarocks-2.4.1/src/luarocks/cfg.lua luarocks-2.4.1-ricky/src/luarocks/cfg.lua
--- luarocks-2.4.1/src/luarocks/cfg.lua	2016-10-07 03:01:56.000000000 +0800
+++ luarocks-2.4.1-ricky/src/luarocks/cfg.lua	2016-11-03 12:17:21.724973800 +0800
@@ -123,6 +123,7 @@ elseif system and system:match("^MINGW")
    cfg.platforms.windows = true
    cfg.platforms.mingw32 = true
    cfg.platforms.win32 = true
+   cfg.platforms.msys = true
 elseif system == "Haiku" then
    cfg.platforms.unix = true
    cfg.platforms.haiku = true
@@ -157,7 +158,13 @@ local sys_config_dir, home_config_dir
 local sys_config_ok, home_config_ok = false, false
 local extra_luarocks_module_dir
 sys_config_dir = site_config.LUAROCKS_SYSCONFDIR or site_config.LUAROCKS_PREFIX
-if cfg.platforms.windows then
+
+if cfg.platforms.mingw32 then
+   cfg.home = os.getenv("HOME") or ""
+   sys_config_dir = sys_config_dir or "/etc/luarocks"
+   home_config_dir = cfg.home.."/.luarocks"
+   cfg.home_tree = (os.getenv("USER") ~= "root") and cfg.home.."/.luarocks/"
+elseif cfg.platforms.windows then
    cfg.home = os.getenv("APPDATA") or "c:"
    sys_config_dir = sys_config_dir or "c:/luarocks"
    home_config_dir = cfg.home.."/luarocks"
@@ -426,13 +433,6 @@ if cfg.platforms.windows then
    defaults.variables.CFLAGS = "/nologo /MD /O2"
    defaults.variables.LIBFLAG = "/nologo /dll"
 
-   local bins = { "SEVENZ", "CP", "FIND", "LS", "MD5SUM",
-      "MKDIR", "MV", "PWD", "RMDIR", "TEST", "UNAME", "WGET" }
-   for _, var in ipairs(bins) do
-      if defaults.variables[var] then
-         defaults.variables[var] = full_prefix.."\\tools\\"..defaults.variables[var]
-      end
-   end
 
    defaults.external_deps_patterns = {
       bin = { "?.exe", "?.bat" },
@@ -462,12 +462,14 @@ end
 if cfg.platforms.mingw32 then
    defaults.obj_extension = "o"
    defaults.cmake_generator = "MinGW Makefiles"
+   defaults.external_deps_dirs = { site_config.LUAROCKS_PREFIX }
    defaults.variables.MAKE = "mingw32-make"
-   defaults.variables.CC = "mingw32-gcc"
+   defaults.variables.CC = "gcc"
    defaults.variables.RC = "windres"
-   defaults.variables.LD = "mingw32-gcc"
+   defaults.variables.LD = "gcc"
    defaults.variables.CFLAGS = "-O2"
    defaults.variables.LIBFLAG = "-shared"
+   defaults.variables.LUALIB = "liblua"..cfg.lua_version..".dll.a"
    defaults.makefile = "Makefile"
    defaults.external_deps_patterns = {
       bin = { "?.exe", "?.bat" },
@@ -481,6 +483,15 @@ if cfg.platforms.mingw32 then
       lib = { "cyg?.dll", "?.dll", "lib?.dll" },
       include = { "?.h" }
    }
+   defaults.export_path = "export PATH='%s'"
+   defaults.export_path_separator = ":"
+   defaults.export_lua_path = "export LUA_PATH='%s'"
+   defaults.export_lua_cpath = "export LUA_CPATH='%s'"
+   defaults.wrapper_suffix = ""
+   defaults.local_cache = cfg.home.."/.cache/luarocks"
+   if not defaults.variables.CFLAGS:match("-fPIC") then
+      defaults.variables.CFLAGS = defaults.variables.CFLAGS.." -fPIC"
+   end
 
 end
 
diff -rup luarocks-2.4.1/src/luarocks/fs/tools.lua luarocks-2.4.1-ricky/src/luarocks/fs/tools.lua
--- luarocks-2.4.1/src/luarocks/fs/tools.lua	2016-10-07 03:01:56.000000000 +0800
+++ luarocks-2.4.1-ricky/src/luarocks/fs/tools.lua	2016-11-03 12:17:21.731971200 +0800
@@ -10,6 +10,13 @@ local vars = cfg.variables
 
 local dir_stack = {}
 
+local function get_windows_path(unix_path)
+   local pipe = io.popen("cygpath -w".." "..unix_path)
+   local current = pipe:read("*l")
+   pipe:close()
+   return current
+end
+
 --- Obtain current directory.
 -- Uses the module's internal directory stack.
 -- @return string: the absolute pathname of the current directory.
@@ -18,6 +25,7 @@ function tools.current_dir()
    if not current then
       local pipe = io.popen(fs.quiet_stderr(fs.Q(vars.PWD)))
       current = pipe:read("*l")
+      current = get_windows_path(current)
       pipe:close()
       cfg.cache_pwd = current
    end
diff -rup luarocks-2.4.1/src/luarocks/fs/win32/tools.lua luarocks-2.4.1-ricky/src/luarocks/fs/win32/tools.lua
--- luarocks-2.4.1/src/luarocks/fs/win32/tools.lua	2016-10-07 03:01:56.000000000 +0800
+++ luarocks-2.4.1-ricky/src/luarocks/fs/win32/tools.lua	2016-11-03 20:18:50.802128300 +0800
@@ -44,7 +44,7 @@ end
 -- @param directory string: pathname of directory to remove.
 function tools.remove_dir_if_empty(directory)
    assert(directory)
-   fs.execute_quiet(fs.Q(vars.RMDIR), directory)
+   fs.execute_quiet(vars.RMDIR, directory)
 end
 
 --- Remove a directory if it is empty.
@@ -53,19 +53,28 @@ end
 -- @param directory string: pathname of directory to remove.
 function tools.remove_dir_tree_if_empty(directory)
    assert(directory)
-   fs.execute_quiet(fs.Q(vars.RMDIR), directory)
+   fs.execute_quiet(vars.RMDIR, "-p", directory)
 end
 
 --- Copy a file.
 -- @param src string: Pathname of source
 -- @param dest string: Pathname of destination
+-- @param perm string or nil: Permissions for destination file,
 -- @return boolean or (boolean, string): true on success, false on failure,
 -- plus an error message.
-function tools.copy(src, dest)
+function tools.copy(src, dest, perm)
    assert(src and dest)
-   if dest:match("[/\\]$") then dest = dest:sub(1, -2) end
-   local ok = fs.execute(fs.Q(vars.CP), src, dest)
-   if ok then
+   if fs.execute(vars.CP, src, dest) then
+      if perm then
+         if fs.is_dir(dest) then
+            dest = dir.path(dest, dir.base_name(src))
+         end
+         if fs.chmod(dest, perm) then
+            return true
+         else
+            return false, "Failed setting permissions of "..dest
+         end
+      end
       return true
    else
       return false, "Failed copying "..src.." to "..dest
@@ -79,7 +88,7 @@ end
 -- plus an error message.
 function tools.copy_contents(src, dest)
    assert(src and dest)
-   if fs.execute_quiet(fs.Q(vars.CP), "-dR", src.."\\*.*", dest) then
+   if fs.execute_quiet(vars.CP.." -pPR "..fs.Q(src).."/* "..fs.Q(dest)) then
       return true
    else
       return false, "Failed copying "..src.." to "..dest
@@ -129,7 +138,7 @@ end
 -- additional arguments.
 -- @return boolean: true on success, false on failure.
 function tools.zip(zipfile, ...)
-   return fs.execute_quiet(fs.Q(vars.SEVENZ).." -aoa a -tzip", zipfile, ...)
+   return fs.execute(vars.ZIP.." -r", zipfile, ...)
 end
 
 --- Uncompress files from a .zip archive.
@@ -137,7 +146,7 @@ end
 -- @return boolean: true on success, false on failure.
 function tools.unzip(zipfile)
    assert(zipfile)
-   return fs.execute_quiet(fs.Q(vars.SEVENZ).." -aoa x", zipfile)
+   return fs.execute_quiet(vars.UNZIP, zipfile)
 end
 
 --- Test is pathname is a directory.
@@ -166,13 +175,6 @@ local function strip_extension(filename)
    return (filename:gsub("%.[^.]+$", "")) or filename
 end
 
---- Uncompress gzip file.
--- @param archive string: Filename of archive.
--- @return boolean : success status
-local function gunzip(archive)
-  return fs.execute_quiet(fs.Q(vars.SEVENZ).." -aoa x", archive)
-end
-
 --- Unpack an archive.
 -- Extract the contents of an archive, detecting its format by
 -- filename extension.
@@ -181,25 +183,19 @@ end
 function tools.unpack_archive(archive)
    assert(type(archive) == "string")
 
+   local pipe_to_tar = " | "..vars.TAR.." -xf -"
+
+   if not cfg.verbose then
+      pipe_to_tar = " 2> /dev/null"..fs.quiet(pipe_to_tar)
+   end
+
    local ok
-   local sevenzx = fs.Q(vars.SEVENZ).." -aoa x"
-   if archive:match("%.tar%.gz$") then
-      ok = gunzip(archive)
-      if ok then
-         ok = fs.execute_quiet(sevenzx, strip_extension(archive))
-      end
-   elseif archive:match("%.tgz$") then
-      ok = gunzip(archive)
-      if ok then
-         ok = fs.execute_quiet(sevenzx, strip_extension(archive)..".tar")
-      end
+   if archive:match("%.tar%.gz$") or archive:match("%.tgz$") then
+      ok = fs.execute_string("tar zxf "..fs.Q(archive))
    elseif archive:match("%.tar%.bz2$") then
-      ok = fs.execute_quiet(sevenzx, archive)
-      if ok then
-         ok = fs.execute_quiet(sevenzx, strip_extension(archive))
-      end
+      ok = fs.execute_string(vars.TAR.." -jxf "..fs.Q(archive))
    elseif archive:match("%.zip$") then
-      ok = fs.execute_quiet(sevenzx, archive)
+      ok = fs.execute_quiet(vars.UNZIP, archive)
    elseif archive:match("%.lua$") or archive:match("%.c$") then
       -- Ignore .lua and .c files; they don't need to be extracted.
       return true
