|
36 | 36 |
|
37 | 37 | dependencies.load() |
38 | 38 |
|
| 39 | +newoption { |
| 40 | + trigger = "ci-build", |
| 41 | + description = "Enable CI builds." |
| 42 | +} |
| 43 | + |
| 44 | +newaction { |
| 45 | + trigger = "generate-buildinfo", |
| 46 | + description = "Sets up build information file like version.h.", |
| 47 | + onWorkspace = function(wks) |
| 48 | + -- get old version number from version.hpp if any |
| 49 | + local oldVersion = "(none)" |
| 50 | + local oldVersionHeader = io.open(wks.location .. "/src/version.h", "r") |
| 51 | + if oldVersionHeader ~= nil then |
| 52 | + local oldVersionHeaderContent = assert(oldVersionHeader:read('*l')) |
| 53 | + while oldVersionHeaderContent do |
| 54 | + m = string.match(oldVersionHeaderContent, "#define GIT_DESCRIBE (.+)%s*$") |
| 55 | + if m ~= nil then |
| 56 | + oldVersion = m |
| 57 | + end |
| 58 | + |
| 59 | + oldVersionHeaderContent = oldVersionHeader:read('*l') |
| 60 | + end |
| 61 | + end |
| 62 | + |
| 63 | + -- get current version via git |
| 64 | + local proc = assert(io.popen(gitVersioningCommand, "r")) |
| 65 | + local gitDescribeOutput = assert(proc:read('*a')):gsub("%s+", "") |
| 66 | + proc:close() |
| 67 | + |
| 68 | + -- generate version.hpp with a revision number if not equal |
| 69 | + gitDescribeOutputQuoted = cstrquote(gitDescribeOutput) |
| 70 | + if oldVersion ~= gitDescribeOutputQuoted then |
| 71 | + -- get current git hash and write to version.txt (used by the preliminary updater) |
| 72 | + local proc = assert(io.popen("git rev-parse HEAD", "r")) |
| 73 | + local gitCommitHash = assert(proc:read('*a')):gsub("%s+", "") |
| 74 | + proc:close() |
| 75 | + |
| 76 | + -- get whether this is a clean revision (no uncommitted changes) |
| 77 | + proc = assert(io.popen("git status --porcelain", "r")) |
| 78 | + local revDirty = (assert(proc:read('*a')) ~= "") |
| 79 | + if revDirty then revDirty = 1 else revDirty = 0 end |
| 80 | + proc:close() |
| 81 | + |
| 82 | + -- get current tag name |
| 83 | + proc = assert(io.popen("git describe --tags --abbrev=0")) |
| 84 | + local tagName = proc:read('*l') |
| 85 | + |
| 86 | + -- patch tag name to be the next one |
| 87 | + if tagName ~= nil and tagName ~= '' and tagName:find("^v%d+$") then |
| 88 | + tagName = string.format("v%u", tagName:sub(tagName:find("%d+$")) + 1) |
| 89 | + print(tagName) |
| 90 | + end |
| 91 | + |
| 92 | + -- get current branch name |
| 93 | + proc = assert(io.popen("git branch --show-current")) |
| 94 | + local branchName = proc:read('*l') |
| 95 | + |
| 96 | + -- branch for ci |
| 97 | + if branchName == nil or branchName == '' then |
| 98 | + proc = assert(io.popen("git show -s --pretty=%d HEAD")) |
| 99 | + local branchInfo = proc:read('*l') |
| 100 | + m = branchInfo:match(".+,.+, ([^)]+)") |
| 101 | + if m ~= nil then |
| 102 | + branchName = m |
| 103 | + end |
| 104 | + end |
| 105 | + |
| 106 | + if branchName == nil then |
| 107 | + branchName = "master" |
| 108 | + end |
| 109 | + |
| 110 | + print("Detected branch: " .. branchName) |
| 111 | + |
| 112 | + -- get revision number via git |
| 113 | + local proc = assert(io.popen("git rev-list --count HEAD", "r")) |
| 114 | + local revNumber = assert(proc:read('*a')):gsub("%s+", "") |
| 115 | + |
| 116 | + print ("Update " .. oldVersion .. " -> " .. gitDescribeOutputQuoted) |
| 117 | + |
| 118 | + -- write to version.txt for preliminary updater |
| 119 | + -- NOTE - remove this once we have a proper updater and proper release versioning |
| 120 | + local versionFile = assert(io.open(wks.location .. "/version.txt", "w")) |
| 121 | + versionFile:write(gitCommitHash) |
| 122 | + versionFile:close() |
| 123 | + |
| 124 | + -- write version header |
| 125 | + local versionHeader = assert(io.open(wks.location .. "/src/version.h", "w")) |
| 126 | + versionHeader:write("/*\n") |
| 127 | + versionHeader:write(" * Automatically generated by premake5.\n") |
| 128 | + versionHeader:write(" * Do not touch!\n") |
| 129 | + versionHeader:write(" */\n") |
| 130 | + versionHeader:write("\n") |
| 131 | + versionHeader:write("#define GIT_DESCRIBE " .. gitDescribeOutputQuoted .. "\n") |
| 132 | + versionHeader:write("#define GIT_DIRTY " .. revDirty .. "\n") |
| 133 | + versionHeader:write("#define GIT_HASH " .. cstrquote(gitCommitHash) .. "\n") |
| 134 | + versionHeader:write("#define GIT_TAG " .. cstrquote(tagName) .. "\n") |
| 135 | + versionHeader:write("#define GIT_BRANCH " .. cstrquote(branchName) .. "\n") |
| 136 | + versionHeader:write("\n") |
| 137 | + versionHeader:write("// Version transformed for RC files\n") |
| 138 | + versionHeader:write("#define VERSION_PRODUCT_RC " .. table.concat(vertonumarr(tagName, revNumber, 3), ",") .. "\n") |
| 139 | + versionHeader:write("#define VERSION_PRODUCT " .. cstrquote(table.concat(vertonumarr(tagName, revNumber, 3), ".")) .. "\n") |
| 140 | + versionHeader:write("#define VERSION_FILE_RC " .. table.concat(vertonumarr(tagName, revNumber, 4), ",") .. "\n") |
| 141 | + versionHeader:write("#define VERSION_FILE " .. cstrquote(table.concat(vertonumarr(tagName, revNumber, 4), ".")) .. "\n") |
| 142 | + versionHeader:write("\n") |
| 143 | + versionHeader:write("// Alias definitions\n") |
| 144 | + versionHeader:write("#define VERSION GIT_DESCRIBE\n") |
| 145 | + versionHeader:write("#define SHORTVERSION VERSION_PRODUCT\n") |
| 146 | + versionHeader:close() |
| 147 | + local versionHeader = assert(io.open(wks.location .. "/src/version.hpp", "w")) |
| 148 | + versionHeader:write("/*\n") |
| 149 | + versionHeader:write(" * Automatically generated by premake5.\n") |
| 150 | + versionHeader:write(" * Do not touch!\n") |
| 151 | + versionHeader:write(" *\n") |
| 152 | + versionHeader:write(" * This file exists for reasons of complying with our coding standards.\n") |
| 153 | + versionHeader:write(" *\n") |
| 154 | + versionHeader:write(" * The Resource Compiler will ignore any content from C++ header files if they're not from STDInclude.hpp.\n") |
| 155 | + versionHeader:write(" * That's the reason why we now place all version info in version.h instead.\n") |
| 156 | + versionHeader:write(" */\n") |
| 157 | + versionHeader:write("\n") |
| 158 | + versionHeader:write("#include \"version.h\"\n") |
| 159 | + versionHeader:close() |
| 160 | + end |
| 161 | + end |
| 162 | +} |
| 163 | + |
39 | 164 | workspace "Fuck_off_EA_App" |
40 | 165 | startproject "Fuck_off_EA_App" |
41 | 166 | location "./build" |
@@ -76,6 +201,10 @@ defines {"_WINDOWS", "WIN32", "NOMINMAX"} |
76 | 201 | buildoptions {"/utf-8"} |
77 | 202 | linkoptions {} |
78 | 203 |
|
| 204 | +if _OPTIONS["ci-build"] then |
| 205 | + defines {"CI_BUILD"} |
| 206 | +end |
| 207 | + |
79 | 208 | filter "configurations:Release" |
80 | 209 | optimize "Speed" |
81 | 210 | buildoptions {} |
|
0 commit comments