1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- --
- -- Embed the Lua scripts into src/host/scripts.c as static data buffers.
- -- I embed the actual scripts, rather than Lua bytecodes, because the
- -- bytecodes are not portable to different architectures, which causes
- -- issues in Mac OS X Universal builds.
- --
- local scriptdir = path.getdirectory(_SCRIPT)
- local function stripfile(fname)
- local f = io.open(fname)
- local s = assert(f:read("*a"))
- f:close()
- -- strip tabs
- s = s:gsub("[\t]", "")
-
- -- strip any CRs
- s = s:gsub("[\r]", "")
-
- -- strip out comments
- s = s:gsub("\n%-%-[^\n]*", "")
-
- -- escape backslashes
- s = s:gsub("\\", "\\\\")
- -- strip duplicate line feeds
- s = s:gsub("\n+", "\n")
- -- strip out leading comments
- s = s:gsub("^%-%-\n", "")
- -- escape line feeds
- s = s:gsub("\n", "\\n")
-
- -- escape double quote marks
- s = s:gsub("\"", "\\\"")
-
- return s
- end
- local function writeline(out, s, continues)
- out:write("\t\"")
- out:write(s)
- out:write(iif(continues, "\"\n", "\",\n"))
- end
-
-
- local function writefile(out, fname, contents)
- local max = 1024
- out:write("\t/* " .. fname .. " */\n")
-
- -- break up large strings to fit in Visual Studio's string length limit
- local start = 1
- local len = contents:len()
- while start <= len do
- local n = len - start
- if n > max then n = max end
- local finish = start + n
- -- make sure I don't cut an escape sequence
- while contents:sub(finish, finish) == "\\" do
- finish = finish - 1
- end
- writeline(out, contents:sub(start, finish), finish < len)
- start = finish + 1
- end
- out:write("\n")
- end
- function doembed()
- -- load the manifest of script files
- scripts = dofile(path.join(scriptdir, "../src/_manifest.lua"))
-
- -- main script always goes at the end
- table.insert(scripts, "_premake_main.lua")
-
- -- open scripts.c and write the file header
- local out = io.open(path.join(scriptdir, "../src/host/scripts.c"), "w+b")
- out:write("/* Premake's Lua scripts, as static data buffers for release mode builds */\n")
- out:write("/* DO NOT EDIT - this file is autogenerated - see BUILD.txt */\n")
- out:write("/* To regenerate this file, run: premake4 embed */ \n\n")
- out:write("const char* builtin_scripts[] = {\n")
-
- for i,fn in ipairs(scripts) do
- print(fn)
- local s = stripfile(path.join(scriptdir,"../src/" .. fn))
- writefile(out, fn, s)
- end
-
- out:write("\t0\n};\n");
- out:close()
- end
|