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