summaryrefslogtreecommitdiffstatshomepage
path: root/3rdparty/genie/src/base/premake.lua
diff options
context:
space:
mode:
Diffstat (limited to '3rdparty/genie/src/base/premake.lua')
-rw-r--r--3rdparty/genie/src/base/premake.lua38
1 files changed, 31 insertions, 7 deletions
diff --git a/3rdparty/genie/src/base/premake.lua b/3rdparty/genie/src/base/premake.lua
index b27790cbbcc..292e42eca6b 100644
--- a/3rdparty/genie/src/base/premake.lua
+++ b/3rdparty/genie/src/base/premake.lua
@@ -22,20 +22,44 @@
function premake.generate(obj, filename, callback)
filename = premake.project.getfilename(obj, filename)
- printf("Generating %s...", filename)
- local f, err = io.open(filename, "wb")
+ io.capture()
+ callback(obj)
+ local new = io.endcapture()
+
+ local delta = false
+
+ local f, err = io.open(filename, "rb")
if (not f) then
- error(err, 0)
+ if string.find(err, "No such file or directory") then
+ delta = true
+ else
+ error(err, 0)
+ end
+ else
+ local existing = f:read("*all")
+ if existing ~= new then
+ delta = true
+ end
+ f:close()
end
- io.output(f)
- callback(obj)
- f:close()
+ if delta then
+ printf("Generating %s...", filename)
+ local f, err = io.open(filename, "wb")
+ if (not f) then
+ error(err, 0)
+ end
+
+ f:write(new)
+ f:close()
+ else
+ printf("Skipping %s as its contents would not change.", filename)
+ end
end
---
+--
-- Finds a valid premake build file in the specified directory
-- Used by both the main genie process, and include commands
--