• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1-- Copyright (C) 1997-2016 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, "w")
37	templateFileContents = readfile(template, "r")
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
69