sdl_gen_config.lua (2700B)
1-- Copyright (C) 1997-2014 Sam Lantinga <slouken@libsdl.org> 2-- 3-- This software is provided 'as-is', without any express or implied 4-- warranty. In no event will the authors be held liable for any damages 5-- arising from the use of this software. 6-- 7-- Permission is granted to anyone to use this software for any purpose, 8-- including commercial applications, and to alter it and redistribute it 9-- freely. 10-- 11-- Meta-build system using premake created and maintained by 12-- Benjamin Henning <b.henning@digipen.edu> 13 14--[[ 15sdl_gen_config.lua 16 17 Given a series of set configuration values from the project definitions, 18 this file contains a series of functions that generate valid preprocessor 19 definitions to enable or disable various features of the SDL2 library. These 20 definitions are pasted into a template SDL config header file, which is then 21 saved in the local directory and referenced to in generated project files. 22 23 This file depends on sdl_file.lua. 24]] 25 26-- The line that must exist in the template file in order to properly paste 27-- the generated definitions. 28local searchKey = "/%* Paste generated code here %*/\n" 29 30local configFile, templateFileContents 31local insertLocation 32 33-- This function begins config header generation given the name of the generated 34-- file and the name of the template file to use. 35function startGeneration(file, template) 36 configFile = fileopen(file, "wt") 37 templateFileContents = readfile(template, "rt") 38 insertLocation = templateFileContents:find(searchKey) 39 if insertLocation then 40 configFile:write(templateFileContents:sub(1, insertLocation - 1)) 41 end 42end 43 44-- Adds a table of configuration values to the generated file. Each 45-- configuration line is wrapped around a preprocessor definition check, so they 46-- can be manually overwritten by the developer if necessary. The definition 47-- pastes string versions of both the key and the value on the line, where 48-- either is allowed to be empty. That means the table stores key-value pairs. 49function addConfig(tbl) 50 -- if no insert location, don't paste anything 51 if not insertLocation then return end 52 for k,v in pairs(tbl) do 53 configFile:print(0, "#ifndef " .. k) 54 configFile:print(0, "#define " .. tostring(k) .. " " .. tostring(v)) 55 configFile:print(0, "#endif") 56 end 57end 58 59-- Finishes the generation and writes the remains of the template file into the 60-- generated config file. 61function endGeneration() 62 if insertLocation then 63 configFile:write(templateFileContents:sub(insertLocation + #searchKey - 2)) 64 else -- write entire file since nothing is being pasted 65 configFile:write(templateFileContents) 66 end 67 configFile:close() 68end