From 46ddffdd3f766224fc03bd755fd755920e4d86d9 Mon Sep 17 00:00:00 2001 From: Itms Date: Wed, 26 Dec 2018 16:00:53 +0000 Subject: [PATCH] Drop premake4 support, refs #3729. premake4 has been unused for a long time now, and was only left available as a safety net. Differential Revision: https://code.wildfiregames.com/D1275 This was SVN commit r21955. --- LICENSE.txt | 1 - build/premake/extern_libs4.lua | 782 -- build/premake/premake4.lua | 1493 --- build/premake/premake4/BUILD.txt | 123 - build/premake/premake4/CHANGES.txt | 547 - build/premake/premake4/LICENSE.txt | 27 - build/premake/premake4/README.txt | 15 - .../premake/premake4/bin/release/premake4.exe | Bin 499200 -> 0 bytes .../premake/premake4/build/gmake.bsd/Makefile | 34 - .../premake4/build/gmake.bsd/Premake4.make | 305 - .../premake4/build/gmake.macosx/Makefile | 34 - .../premake4/build/gmake.macosx/Premake4.make | 305 - .../premake4/build/gmake.unix/Makefile | 34 - .../premake4/build/gmake.unix/Premake4.make | 305 - .../premake4/build/vs2013/Premake4.sln | 20 - .../premake4/build/vs2013/Premake4.vcxproj | 332 - .../build/vs2013/Premake4.vcxproj.filters | 574 -- .../build/vs2013/Premake4.vcxproj.user | 3 - build/premake/premake4/doxyfile | 258 - build/premake/premake4/premake4.lua | 128 - build/premake/premake4/scripts/RELEASE.txt | 57 - build/premake/premake4/scripts/embed.lua | 96 - build/premake/premake4/scripts/release.lua | 216 - build/premake/premake4/src/_manifest.lua | 74 - build/premake/premake4/src/_premake_main.lua | 154 - .../premake4/src/actions/clean/_clean.lua | 104 - .../src/actions/codeblocks/_codeblocks.lua | 38 - .../src/actions/codeblocks/codeblocks_cbp.lua | 144 - .../codeblocks/codeblocks_workspace.lua | 27 - .../src/actions/codelite/_codelite.lua | 40 - .../src/actions/codelite/codelite_project.lua | 146 - .../actions/codelite/codelite_workspace.lua | 40 - .../premake4/src/actions/example/_example.lua | 99 - .../src/actions/example/example_project.lua | 91 - .../src/actions/example/example_solution.lua | 46 - .../premake4/src/actions/make/_make.lua | 141 - .../premake4/src/actions/make/make_cpp.lua | 338 - .../premake4/src/actions/make/make_csharp.lua | 271 - .../src/actions/make/make_solution.lua | 74 - .../premake4/src/actions/vstudio/_vstudio.lua | 551 -- .../src/actions/vstudio/vs2002_csproj.lua | 143 - .../actions/vstudio/vs2002_csproj_user.lua | 50 - .../src/actions/vstudio/vs2002_solution.lua | 47 - .../src/actions/vstudio/vs2003_solution.lua | 57 - .../src/actions/vstudio/vs2005_csproj.lua | 208 - .../actions/vstudio/vs2005_csproj_user.lua | 18 - .../src/actions/vstudio/vs2005_solution.lua | 105 - .../src/actions/vstudio/vs200x_vcproj.lua | 654 -- .../src/actions/vstudio/vs2010_vcxproxj.lua | 762 -- .../actions/vstudio/vs_generic_solution.lua | 70 - .../premake4/src/actions/xcode/_xcode.lua | 111 - .../src/actions/xcode/xcode4_workspace.lua | 40 - .../src/actions/xcode/xcode_common.lua | 885 -- .../src/actions/xcode/xcode_project.lua | 165 - build/premake/premake4/src/base/action.lua | 159 - build/premake/premake4/src/base/api.lua | 745 -- build/premake/premake4/src/base/cmdline.lua | 90 - build/premake/premake4/src/base/configs.lua | 502 - build/premake/premake4/src/base/globals.lua | 145 - build/premake/premake4/src/base/help.lua | 51 - build/premake/premake4/src/base/io.lua | 81 - build/premake/premake4/src/base/option.lua | 107 - build/premake/premake4/src/base/os.lua | 290 - build/premake/premake4/src/base/path.lua | 298 - build/premake/premake4/src/base/premake.lua | 34 - build/premake/premake4/src/base/project.lua | 623 -- build/premake/premake4/src/base/solution.lua | 113 - build/premake/premake4/src/base/string.lua | 50 - build/premake/premake4/src/base/table.lua | 139 - build/premake/premake4/src/base/tree.lua | 195 - build/premake/premake4/src/base/validate.lua | 91 - .../premake4/src/host/lua-5.1.4/COPYRIGHT | 34 - .../premake4/src/host/lua-5.1.4/HISTORY | 183 - .../premake4/src/host/lua-5.1.4/INSTALL | 99 - .../premake4/src/host/lua-5.1.4/Makefile | 128 - .../premake4/src/host/lua-5.1.4/README | 37 - .../src/host/lua-5.1.4/doc/amazon.gif | Bin 797 -> 0 bytes .../src/host/lua-5.1.4/doc/contents.html | 499 - .../premake4/src/host/lua-5.1.4/doc/cover.png | 3 - .../premake4/src/host/lua-5.1.4/doc/logo.gif | Bin 4232 -> 0 bytes .../premake4/src/host/lua-5.1.4/doc/lua.1 | 163 - .../premake4/src/host/lua-5.1.4/doc/lua.css | 41 - .../premake4/src/host/lua-5.1.4/doc/lua.html | 172 - .../premake4/src/host/lua-5.1.4/doc/luac.1 | 136 - .../premake4/src/host/lua-5.1.4/doc/luac.html | 145 - .../src/host/lua-5.1.4/doc/manual.css | 13 - .../src/host/lua-5.1.4/doc/manual.html | 8801 ----------------- .../src/host/lua-5.1.4/doc/readme.html | 40 - .../premake4/src/host/lua-5.1.4/etc/Makefile | 44 - .../premake4/src/host/lua-5.1.4/etc/README | 37 - .../premake4/src/host/lua-5.1.4/etc/all.c | 38 - .../premake4/src/host/lua-5.1.4/etc/lua.hpp | 9 - .../premake4/src/host/lua-5.1.4/etc/lua.ico | Bin 1078 -> 0 bytes .../premake4/src/host/lua-5.1.4/etc/lua.pc | 31 - .../premake4/src/host/lua-5.1.4/etc/luavs.bat | 28 - .../premake4/src/host/lua-5.1.4/etc/min.c | 39 - .../src/host/lua-5.1.4/etc/noparser.c | 50 - .../src/host/lua-5.1.4/etc/strict.lua | 41 - .../premake4/src/host/lua-5.1.4/src/Makefile | 182 - .../premake4/src/host/lua-5.1.4/src/lapi.c | 1087 -- .../premake4/src/host/lua-5.1.4/src/lapi.h | 16 - .../premake4/src/host/lua-5.1.4/src/lauxlib.c | 652 -- .../premake4/src/host/lua-5.1.4/src/lauxlib.h | 174 - .../src/host/lua-5.1.4/src/lbaselib.c | 653 -- .../premake4/src/host/lua-5.1.4/src/lcode.c | 839 -- .../premake4/src/host/lua-5.1.4/src/lcode.h | 76 - .../premake4/src/host/lua-5.1.4/src/ldblib.c | 397 - .../premake4/src/host/lua-5.1.4/src/ldebug.c | 638 -- .../premake4/src/host/lua-5.1.4/src/ldebug.h | 33 - .../premake4/src/host/lua-5.1.4/src/ldo.c | 518 - .../premake4/src/host/lua-5.1.4/src/ldo.h | 57 - .../premake4/src/host/lua-5.1.4/src/ldump.c | 164 - .../premake4/src/host/lua-5.1.4/src/lfunc.c | 174 - .../premake4/src/host/lua-5.1.4/src/lfunc.h | 34 - .../premake4/src/host/lua-5.1.4/src/lgc.c | 711 -- .../premake4/src/host/lua-5.1.4/src/lgc.h | 110 - .../premake4/src/host/lua-5.1.4/src/linit.c | 38 - .../premake4/src/host/lua-5.1.4/src/liolib.c | 553 -- .../premake4/src/host/lua-5.1.4/src/llex.c | 461 - .../premake4/src/host/lua-5.1.4/src/llex.h | 81 - .../premake4/src/host/lua-5.1.4/src/llimits.h | 128 - .../src/host/lua-5.1.4/src/lmathlib.c | 263 - .../premake4/src/host/lua-5.1.4/src/lmem.c | 86 - .../premake4/src/host/lua-5.1.4/src/lmem.h | 49 - .../premake4/src/host/lua-5.1.4/src/loadlib.c | 666 -- .../premake4/src/host/lua-5.1.4/src/lobject.c | 214 - .../premake4/src/host/lua-5.1.4/src/lobject.h | 381 - .../src/host/lua-5.1.4/src/lopcodes.c | 102 - .../src/host/lua-5.1.4/src/lopcodes.h | 268 - .../premake4/src/host/lua-5.1.4/src/loslib.c | 243 - .../premake4/src/host/lua-5.1.4/src/lparser.c | 1339 --- .../premake4/src/host/lua-5.1.4/src/lparser.h | 82 - .../premake4/src/host/lua-5.1.4/src/lstate.c | 214 - .../premake4/src/host/lua-5.1.4/src/lstate.h | 169 - .../premake4/src/host/lua-5.1.4/src/lstring.c | 111 - .../premake4/src/host/lua-5.1.4/src/lstring.h | 31 - .../premake4/src/host/lua-5.1.4/src/lstrlib.c | 869 -- .../premake4/src/host/lua-5.1.4/src/ltable.c | 588 -- .../premake4/src/host/lua-5.1.4/src/ltable.h | 40 - .../premake4/src/host/lua-5.1.4/src/ltablib.c | 287 - .../premake4/src/host/lua-5.1.4/src/ltm.c | 75 - .../premake4/src/host/lua-5.1.4/src/ltm.h | 54 - .../premake4/src/host/lua-5.1.4/src/lua.c | 392 - .../premake4/src/host/lua-5.1.4/src/lua.h | 388 - .../premake4/src/host/lua-5.1.4/src/luac.c | 200 - .../premake4/src/host/lua-5.1.4/src/luaconf.h | 763 -- .../premake4/src/host/lua-5.1.4/src/lualib.h | 53 - .../premake4/src/host/lua-5.1.4/src/lundump.c | 227 - .../premake4/src/host/lua-5.1.4/src/lundump.h | 36 - .../premake4/src/host/lua-5.1.4/src/lvm.c | 763 -- .../premake4/src/host/lua-5.1.4/src/lvm.h | 36 - .../premake4/src/host/lua-5.1.4/src/lzio.c | 82 - .../premake4/src/host/lua-5.1.4/src/lzio.h | 67 - .../premake4/src/host/lua-5.1.4/src/print.c | 227 - .../premake4/src/host/lua-5.1.4/test/README | 26 - .../src/host/lua-5.1.4/test/bisect.lua | 27 - .../premake4/src/host/lua-5.1.4/test/cf.lua | 16 - .../premake4/src/host/lua-5.1.4/test/echo.lua | 5 - .../premake4/src/host/lua-5.1.4/test/env.lua | 7 - .../src/host/lua-5.1.4/test/factorial.lua | 32 - .../premake4/src/host/lua-5.1.4/test/fib.lua | 40 - .../src/host/lua-5.1.4/test/fibfor.lua | 13 - .../src/host/lua-5.1.4/test/globals.lua | 13 - .../src/host/lua-5.1.4/test/hello.lua | 3 - .../premake4/src/host/lua-5.1.4/test/life.lua | 111 - .../premake4/src/host/lua-5.1.4/test/luac.lua | 7 - .../src/host/lua-5.1.4/test/printf.lua | 7 - .../src/host/lua-5.1.4/test/readonly.lua | 12 - .../src/host/lua-5.1.4/test/sieve.lua | 29 - .../premake4/src/host/lua-5.1.4/test/sort.lua | 66 - .../src/host/lua-5.1.4/test/table.lua | 12 - .../src/host/lua-5.1.4/test/trace-calls.lua | 32 - .../src/host/lua-5.1.4/test/trace-globals.lua | 38 - .../premake4/src/host/lua-5.1.4/test/xd.lua | 14 - build/premake/premake4/src/host/os_chdir.c | 32 - build/premake/premake4/src/host/os_copyfile.c | 34 - build/premake/premake4/src/host/os_getcwd.c | 34 - .../premake/premake4/src/host/os_getversion.c | 242 - build/premake/premake4/src/host/os_isdir.c | 34 - build/premake/premake4/src/host/os_isfile.c | 30 - build/premake/premake4/src/host/os_match.c | 183 - build/premake/premake4/src/host/os_mkdir.c | 33 - .../premake/premake4/src/host/os_pathsearch.c | 84 - build/premake/premake4/src/host/os_rmdir.c | 33 - build/premake/premake4/src/host/os_uuid.c | 45 - .../premake4/src/host/path_isabsolute.c | 22 - build/premake/premake4/src/host/premake.c | 275 - build/premake/premake4/src/host/premake.h | 71 - build/premake/premake4/src/host/scripts.c | 307 - .../premake4/src/host/string_endswith.c | 28 - build/premake/premake4/src/tools/dotnet.lua | 91 - build/premake/premake4/src/tools/gcc.lua | 227 - build/premake/premake4/src/tools/msc.lua | 9 - build/premake/premake4/src/tools/ow.lua | 132 - .../tests/actions/make/test_make_escaping.lua | 30 - .../tests/actions/make/test_make_pch.lua | 92 - .../premake4/tests/actions/test_clean.lua | 186 - .../actions/vstudio/test_vs2005_csproj.lua | 122 - .../actions/vstudio/test_vs200x_vcproj.lua | 721 -- .../vstudio/test_vs200x_vcproj_linker.lua | 117 - .../actions/vstudio/test_vs2010_filters.lua | 294 - .../actions/vstudio/test_vs2010_flags.lua | 259 - .../actions/vstudio/test_vs2010_links.lua | 143 - .../vstudio/test_vs2010_project_kinds.lua | 206 - .../actions/vstudio/test_vs2010_vcxproj.lua | 429 - .../tests/actions/xcode/test_xcode_common.lua | 76 - .../actions/xcode/test_xcode_dependencies.lua | 311 - .../actions/xcode/test_xcode_project.lua | 1879 ---- .../premake4/tests/base/test_action.lua | 73 - .../premake/premake4/tests/base/test_api.lua | 343 - .../premake4/tests/base/test_baking.lua | 186 - .../premake4/tests/base/test_config.lua | 58 - build/premake/premake4/tests/base/test_os.lua | 121 - .../premake/premake4/tests/base/test_path.lua | 216 - .../premake4/tests/base/test_table.lua | 57 - .../premake/premake4/tests/base/test_tree.lua | 143 - build/premake/premake4/tests/folder/ok.lua | 1 - build/premake/premake4/tests/folder/ok.lua.2 | 1 - .../premake4/tests/pepperfish_profiler.lua | 616 -- build/premake/premake4/tests/premake4.lua | 104 - build/premake/premake4/tests/stress | 2 - build/premake/premake4/tests/test | 2 - build/premake/premake4/tests/test.bat | 3 - build/premake/premake4/tests/test_dofile.lua | 36 - build/premake/premake4/tests/test_gcc.lua | 60 - .../premake/premake4/tests/test_gmake_cpp.lua | 195 - .../premake/premake4/tests/test_gmake_cs.lua | 80 - .../premake/premake4/tests/test_keywords.lua | 87 - .../premake/premake4/tests/test_platforms.lua | 58 - build/premake/premake4/tests/test_premake.lua | 47 - build/premake/premake4/tests/test_project.lua | 149 - build/premake/premake4/tests/test_stress.lua | 44 - build/premake/premake4/tests/test_string.lua | 73 - build/premake/premake4/tests/test_targets.lua | 235 - .../premake4/tests/test_vs2002_sln.lua | 61 - .../premake4/tests/test_vs2003_sln.lua | 61 - .../premake4/tests/test_vs2005_sln.lua | 241 - .../premake4/tests/test_vs2008_sln.lua | 60 - .../premake4/tests/test_vs2010_sln.lua | 118 - build/premake/premake4/tests/testfx.lua | 257 - build/workspaces/clean-workspaces.sh | 3 - build/workspaces/update-workspaces.sh | 16 +- 242 files changed, 4 insertions(+), 54171 deletions(-) delete mode 100644 build/premake/extern_libs4.lua delete mode 100644 build/premake/premake4.lua delete mode 100644 build/premake/premake4/BUILD.txt delete mode 100644 build/premake/premake4/CHANGES.txt delete mode 100644 build/premake/premake4/LICENSE.txt delete mode 100644 build/premake/premake4/README.txt delete mode 100644 build/premake/premake4/bin/release/premake4.exe delete mode 100644 build/premake/premake4/build/gmake.bsd/Makefile delete mode 100644 build/premake/premake4/build/gmake.bsd/Premake4.make delete mode 100644 build/premake/premake4/build/gmake.macosx/Makefile delete mode 100644 build/premake/premake4/build/gmake.macosx/Premake4.make delete mode 100644 build/premake/premake4/build/gmake.unix/Makefile delete mode 100644 build/premake/premake4/build/gmake.unix/Premake4.make delete mode 100644 build/premake/premake4/build/vs2013/Premake4.sln delete mode 100644 build/premake/premake4/build/vs2013/Premake4.vcxproj delete mode 100644 build/premake/premake4/build/vs2013/Premake4.vcxproj.filters delete mode 100644 build/premake/premake4/build/vs2013/Premake4.vcxproj.user delete mode 100644 build/premake/premake4/doxyfile delete mode 100644 build/premake/premake4/premake4.lua delete mode 100644 build/premake/premake4/scripts/RELEASE.txt delete mode 100644 build/premake/premake4/scripts/embed.lua delete mode 100644 build/premake/premake4/scripts/release.lua delete mode 100644 build/premake/premake4/src/_manifest.lua delete mode 100644 build/premake/premake4/src/_premake_main.lua delete mode 100644 build/premake/premake4/src/actions/clean/_clean.lua delete mode 100644 build/premake/premake4/src/actions/codeblocks/_codeblocks.lua delete mode 100644 build/premake/premake4/src/actions/codeblocks/codeblocks_cbp.lua delete mode 100644 build/premake/premake4/src/actions/codeblocks/codeblocks_workspace.lua delete mode 100644 build/premake/premake4/src/actions/codelite/_codelite.lua delete mode 100644 build/premake/premake4/src/actions/codelite/codelite_project.lua delete mode 100644 build/premake/premake4/src/actions/codelite/codelite_workspace.lua delete mode 100644 build/premake/premake4/src/actions/example/_example.lua delete mode 100644 build/premake/premake4/src/actions/example/example_project.lua delete mode 100644 build/premake/premake4/src/actions/example/example_solution.lua delete mode 100644 build/premake/premake4/src/actions/make/_make.lua delete mode 100644 build/premake/premake4/src/actions/make/make_cpp.lua delete mode 100644 build/premake/premake4/src/actions/make/make_csharp.lua delete mode 100644 build/premake/premake4/src/actions/make/make_solution.lua delete mode 100644 build/premake/premake4/src/actions/vstudio/_vstudio.lua delete mode 100644 build/premake/premake4/src/actions/vstudio/vs2002_csproj.lua delete mode 100644 build/premake/premake4/src/actions/vstudio/vs2002_csproj_user.lua delete mode 100644 build/premake/premake4/src/actions/vstudio/vs2002_solution.lua delete mode 100644 build/premake/premake4/src/actions/vstudio/vs2003_solution.lua delete mode 100644 build/premake/premake4/src/actions/vstudio/vs2005_csproj.lua delete mode 100644 build/premake/premake4/src/actions/vstudio/vs2005_csproj_user.lua delete mode 100644 build/premake/premake4/src/actions/vstudio/vs2005_solution.lua delete mode 100644 build/premake/premake4/src/actions/vstudio/vs200x_vcproj.lua delete mode 100644 build/premake/premake4/src/actions/vstudio/vs2010_vcxproxj.lua delete mode 100644 build/premake/premake4/src/actions/vstudio/vs_generic_solution.lua delete mode 100644 build/premake/premake4/src/actions/xcode/_xcode.lua delete mode 100644 build/premake/premake4/src/actions/xcode/xcode4_workspace.lua delete mode 100644 build/premake/premake4/src/actions/xcode/xcode_common.lua delete mode 100644 build/premake/premake4/src/actions/xcode/xcode_project.lua delete mode 100644 build/premake/premake4/src/base/action.lua delete mode 100644 build/premake/premake4/src/base/api.lua delete mode 100644 build/premake/premake4/src/base/cmdline.lua delete mode 100644 build/premake/premake4/src/base/configs.lua delete mode 100644 build/premake/premake4/src/base/globals.lua delete mode 100644 build/premake/premake4/src/base/help.lua delete mode 100644 build/premake/premake4/src/base/io.lua delete mode 100644 build/premake/premake4/src/base/option.lua delete mode 100644 build/premake/premake4/src/base/os.lua delete mode 100644 build/premake/premake4/src/base/path.lua delete mode 100644 build/premake/premake4/src/base/premake.lua delete mode 100644 build/premake/premake4/src/base/project.lua delete mode 100644 build/premake/premake4/src/base/solution.lua delete mode 100644 build/premake/premake4/src/base/string.lua delete mode 100644 build/premake/premake4/src/base/table.lua delete mode 100644 build/premake/premake4/src/base/tree.lua delete mode 100644 build/premake/premake4/src/base/validate.lua delete mode 100644 build/premake/premake4/src/host/lua-5.1.4/COPYRIGHT delete mode 100644 build/premake/premake4/src/host/lua-5.1.4/HISTORY delete mode 100644 build/premake/premake4/src/host/lua-5.1.4/INSTALL delete mode 100644 build/premake/premake4/src/host/lua-5.1.4/Makefile delete mode 100644 build/premake/premake4/src/host/lua-5.1.4/README delete mode 100644 build/premake/premake4/src/host/lua-5.1.4/doc/amazon.gif delete mode 100644 build/premake/premake4/src/host/lua-5.1.4/doc/contents.html delete mode 100644 build/premake/premake4/src/host/lua-5.1.4/doc/cover.png delete mode 100644 build/premake/premake4/src/host/lua-5.1.4/doc/logo.gif delete mode 100644 build/premake/premake4/src/host/lua-5.1.4/doc/lua.1 delete mode 100644 build/premake/premake4/src/host/lua-5.1.4/doc/lua.css delete mode 100644 build/premake/premake4/src/host/lua-5.1.4/doc/lua.html delete mode 100644 build/premake/premake4/src/host/lua-5.1.4/doc/luac.1 delete mode 100644 build/premake/premake4/src/host/lua-5.1.4/doc/luac.html delete mode 100644 build/premake/premake4/src/host/lua-5.1.4/doc/manual.css delete mode 100644 build/premake/premake4/src/host/lua-5.1.4/doc/manual.html delete mode 100644 build/premake/premake4/src/host/lua-5.1.4/doc/readme.html delete mode 100644 build/premake/premake4/src/host/lua-5.1.4/etc/Makefile delete mode 100644 build/premake/premake4/src/host/lua-5.1.4/etc/README delete mode 100644 build/premake/premake4/src/host/lua-5.1.4/etc/all.c delete mode 100644 build/premake/premake4/src/host/lua-5.1.4/etc/lua.hpp delete mode 100644 build/premake/premake4/src/host/lua-5.1.4/etc/lua.ico delete mode 100644 build/premake/premake4/src/host/lua-5.1.4/etc/lua.pc delete mode 100644 build/premake/premake4/src/host/lua-5.1.4/etc/luavs.bat delete mode 100644 build/premake/premake4/src/host/lua-5.1.4/etc/min.c delete mode 100644 build/premake/premake4/src/host/lua-5.1.4/etc/noparser.c delete mode 100644 build/premake/premake4/src/host/lua-5.1.4/etc/strict.lua delete mode 100644 build/premake/premake4/src/host/lua-5.1.4/src/Makefile delete mode 100644 build/premake/premake4/src/host/lua-5.1.4/src/lapi.c delete mode 100644 build/premake/premake4/src/host/lua-5.1.4/src/lapi.h delete mode 100644 build/premake/premake4/src/host/lua-5.1.4/src/lauxlib.c delete mode 100644 build/premake/premake4/src/host/lua-5.1.4/src/lauxlib.h delete mode 100644 build/premake/premake4/src/host/lua-5.1.4/src/lbaselib.c delete mode 100644 build/premake/premake4/src/host/lua-5.1.4/src/lcode.c delete mode 100644 build/premake/premake4/src/host/lua-5.1.4/src/lcode.h delete mode 100644 build/premake/premake4/src/host/lua-5.1.4/src/ldblib.c delete mode 100644 build/premake/premake4/src/host/lua-5.1.4/src/ldebug.c delete mode 100644 build/premake/premake4/src/host/lua-5.1.4/src/ldebug.h delete mode 100644 build/premake/premake4/src/host/lua-5.1.4/src/ldo.c delete mode 100644 build/premake/premake4/src/host/lua-5.1.4/src/ldo.h delete mode 100644 build/premake/premake4/src/host/lua-5.1.4/src/ldump.c delete mode 100644 build/premake/premake4/src/host/lua-5.1.4/src/lfunc.c delete mode 100644 build/premake/premake4/src/host/lua-5.1.4/src/lfunc.h delete mode 100644 build/premake/premake4/src/host/lua-5.1.4/src/lgc.c delete mode 100644 build/premake/premake4/src/host/lua-5.1.4/src/lgc.h delete mode 100644 build/premake/premake4/src/host/lua-5.1.4/src/linit.c delete mode 100644 build/premake/premake4/src/host/lua-5.1.4/src/liolib.c delete mode 100644 build/premake/premake4/src/host/lua-5.1.4/src/llex.c delete mode 100644 build/premake/premake4/src/host/lua-5.1.4/src/llex.h delete mode 100644 build/premake/premake4/src/host/lua-5.1.4/src/llimits.h delete mode 100644 build/premake/premake4/src/host/lua-5.1.4/src/lmathlib.c delete mode 100644 build/premake/premake4/src/host/lua-5.1.4/src/lmem.c delete mode 100644 build/premake/premake4/src/host/lua-5.1.4/src/lmem.h delete mode 100644 build/premake/premake4/src/host/lua-5.1.4/src/loadlib.c delete mode 100644 build/premake/premake4/src/host/lua-5.1.4/src/lobject.c delete mode 100644 build/premake/premake4/src/host/lua-5.1.4/src/lobject.h delete mode 100644 build/premake/premake4/src/host/lua-5.1.4/src/lopcodes.c delete mode 100644 build/premake/premake4/src/host/lua-5.1.4/src/lopcodes.h delete mode 100644 build/premake/premake4/src/host/lua-5.1.4/src/loslib.c delete mode 100644 build/premake/premake4/src/host/lua-5.1.4/src/lparser.c delete mode 100644 build/premake/premake4/src/host/lua-5.1.4/src/lparser.h delete mode 100644 build/premake/premake4/src/host/lua-5.1.4/src/lstate.c delete mode 100644 build/premake/premake4/src/host/lua-5.1.4/src/lstate.h delete mode 100644 build/premake/premake4/src/host/lua-5.1.4/src/lstring.c delete mode 100644 build/premake/premake4/src/host/lua-5.1.4/src/lstring.h delete mode 100644 build/premake/premake4/src/host/lua-5.1.4/src/lstrlib.c delete mode 100644 build/premake/premake4/src/host/lua-5.1.4/src/ltable.c delete mode 100644 build/premake/premake4/src/host/lua-5.1.4/src/ltable.h delete mode 100644 build/premake/premake4/src/host/lua-5.1.4/src/ltablib.c delete mode 100644 build/premake/premake4/src/host/lua-5.1.4/src/ltm.c delete mode 100644 build/premake/premake4/src/host/lua-5.1.4/src/ltm.h delete mode 100644 build/premake/premake4/src/host/lua-5.1.4/src/lua.c delete mode 100644 build/premake/premake4/src/host/lua-5.1.4/src/lua.h delete mode 100644 build/premake/premake4/src/host/lua-5.1.4/src/luac.c delete mode 100644 build/premake/premake4/src/host/lua-5.1.4/src/luaconf.h delete mode 100644 build/premake/premake4/src/host/lua-5.1.4/src/lualib.h delete mode 100644 build/premake/premake4/src/host/lua-5.1.4/src/lundump.c delete mode 100644 build/premake/premake4/src/host/lua-5.1.4/src/lundump.h delete mode 100644 build/premake/premake4/src/host/lua-5.1.4/src/lvm.c delete mode 100644 build/premake/premake4/src/host/lua-5.1.4/src/lvm.h delete mode 100644 build/premake/premake4/src/host/lua-5.1.4/src/lzio.c delete mode 100644 build/premake/premake4/src/host/lua-5.1.4/src/lzio.h delete mode 100644 build/premake/premake4/src/host/lua-5.1.4/src/print.c delete mode 100644 build/premake/premake4/src/host/lua-5.1.4/test/README delete mode 100644 build/premake/premake4/src/host/lua-5.1.4/test/bisect.lua delete mode 100644 build/premake/premake4/src/host/lua-5.1.4/test/cf.lua delete mode 100644 build/premake/premake4/src/host/lua-5.1.4/test/echo.lua delete mode 100644 build/premake/premake4/src/host/lua-5.1.4/test/env.lua delete mode 100644 build/premake/premake4/src/host/lua-5.1.4/test/factorial.lua delete mode 100644 build/premake/premake4/src/host/lua-5.1.4/test/fib.lua delete mode 100644 build/premake/premake4/src/host/lua-5.1.4/test/fibfor.lua delete mode 100644 build/premake/premake4/src/host/lua-5.1.4/test/globals.lua delete mode 100644 build/premake/premake4/src/host/lua-5.1.4/test/hello.lua delete mode 100644 build/premake/premake4/src/host/lua-5.1.4/test/life.lua delete mode 100644 build/premake/premake4/src/host/lua-5.1.4/test/luac.lua delete mode 100644 build/premake/premake4/src/host/lua-5.1.4/test/printf.lua delete mode 100644 build/premake/premake4/src/host/lua-5.1.4/test/readonly.lua delete mode 100644 build/premake/premake4/src/host/lua-5.1.4/test/sieve.lua delete mode 100644 build/premake/premake4/src/host/lua-5.1.4/test/sort.lua delete mode 100644 build/premake/premake4/src/host/lua-5.1.4/test/table.lua delete mode 100644 build/premake/premake4/src/host/lua-5.1.4/test/trace-calls.lua delete mode 100644 build/premake/premake4/src/host/lua-5.1.4/test/trace-globals.lua delete mode 100644 build/premake/premake4/src/host/lua-5.1.4/test/xd.lua delete mode 100644 build/premake/premake4/src/host/os_chdir.c delete mode 100644 build/premake/premake4/src/host/os_copyfile.c delete mode 100644 build/premake/premake4/src/host/os_getcwd.c delete mode 100644 build/premake/premake4/src/host/os_getversion.c delete mode 100644 build/premake/premake4/src/host/os_isdir.c delete mode 100644 build/premake/premake4/src/host/os_isfile.c delete mode 100644 build/premake/premake4/src/host/os_match.c delete mode 100644 build/premake/premake4/src/host/os_mkdir.c delete mode 100644 build/premake/premake4/src/host/os_pathsearch.c delete mode 100644 build/premake/premake4/src/host/os_rmdir.c delete mode 100644 build/premake/premake4/src/host/os_uuid.c delete mode 100644 build/premake/premake4/src/host/path_isabsolute.c delete mode 100644 build/premake/premake4/src/host/premake.c delete mode 100644 build/premake/premake4/src/host/premake.h delete mode 100644 build/premake/premake4/src/host/scripts.c delete mode 100644 build/premake/premake4/src/host/string_endswith.c delete mode 100644 build/premake/premake4/src/tools/dotnet.lua delete mode 100644 build/premake/premake4/src/tools/gcc.lua delete mode 100644 build/premake/premake4/src/tools/msc.lua delete mode 100644 build/premake/premake4/src/tools/ow.lua delete mode 100644 build/premake/premake4/tests/actions/make/test_make_escaping.lua delete mode 100644 build/premake/premake4/tests/actions/make/test_make_pch.lua delete mode 100644 build/premake/premake4/tests/actions/test_clean.lua delete mode 100644 build/premake/premake4/tests/actions/vstudio/test_vs2005_csproj.lua delete mode 100644 build/premake/premake4/tests/actions/vstudio/test_vs200x_vcproj.lua delete mode 100644 build/premake/premake4/tests/actions/vstudio/test_vs200x_vcproj_linker.lua delete mode 100644 build/premake/premake4/tests/actions/vstudio/test_vs2010_filters.lua delete mode 100644 build/premake/premake4/tests/actions/vstudio/test_vs2010_flags.lua delete mode 100644 build/premake/premake4/tests/actions/vstudio/test_vs2010_links.lua delete mode 100644 build/premake/premake4/tests/actions/vstudio/test_vs2010_project_kinds.lua delete mode 100644 build/premake/premake4/tests/actions/vstudio/test_vs2010_vcxproj.lua delete mode 100644 build/premake/premake4/tests/actions/xcode/test_xcode_common.lua delete mode 100644 build/premake/premake4/tests/actions/xcode/test_xcode_dependencies.lua delete mode 100644 build/premake/premake4/tests/actions/xcode/test_xcode_project.lua delete mode 100644 build/premake/premake4/tests/base/test_action.lua delete mode 100644 build/premake/premake4/tests/base/test_api.lua delete mode 100644 build/premake/premake4/tests/base/test_baking.lua delete mode 100644 build/premake/premake4/tests/base/test_config.lua delete mode 100644 build/premake/premake4/tests/base/test_os.lua delete mode 100644 build/premake/premake4/tests/base/test_path.lua delete mode 100644 build/premake/premake4/tests/base/test_table.lua delete mode 100644 build/premake/premake4/tests/base/test_tree.lua delete mode 100644 build/premake/premake4/tests/folder/ok.lua delete mode 100644 build/premake/premake4/tests/folder/ok.lua.2 delete mode 100644 build/premake/premake4/tests/pepperfish_profiler.lua delete mode 100644 build/premake/premake4/tests/premake4.lua delete mode 100644 build/premake/premake4/tests/stress delete mode 100755 build/premake/premake4/tests/test delete mode 100644 build/premake/premake4/tests/test.bat delete mode 100644 build/premake/premake4/tests/test_dofile.lua delete mode 100644 build/premake/premake4/tests/test_gcc.lua delete mode 100644 build/premake/premake4/tests/test_gmake_cpp.lua delete mode 100644 build/premake/premake4/tests/test_gmake_cs.lua delete mode 100644 build/premake/premake4/tests/test_keywords.lua delete mode 100644 build/premake/premake4/tests/test_platforms.lua delete mode 100644 build/premake/premake4/tests/test_premake.lua delete mode 100644 build/premake/premake4/tests/test_project.lua delete mode 100644 build/premake/premake4/tests/test_stress.lua delete mode 100644 build/premake/premake4/tests/test_string.lua delete mode 100644 build/premake/premake4/tests/test_targets.lua delete mode 100644 build/premake/premake4/tests/test_vs2002_sln.lua delete mode 100644 build/premake/premake4/tests/test_vs2003_sln.lua delete mode 100644 build/premake/premake4/tests/test_vs2005_sln.lua delete mode 100644 build/premake/premake4/tests/test_vs2008_sln.lua delete mode 100644 build/premake/premake4/tests/test_vs2010_sln.lua delete mode 100644 build/premake/premake4/tests/testfx.lua diff --git a/LICENSE.txt b/LICENSE.txt index d16048e618..b430904803 100644 --- a/LICENSE.txt +++ b/LICENSE.txt @@ -36,7 +36,6 @@ in particular, let us know and we can try to clarify it. /build Various (unspecified) - /build/premake/premake4 /build/premake/premake5 BSD diff --git a/build/premake/extern_libs4.lua b/build/premake/extern_libs4.lua deleted file mode 100644 index fed12dafaf..0000000000 --- a/build/premake/extern_libs4.lua +++ /dev/null @@ -1,782 +0,0 @@ --- this file provides project_add_extern_libs, which takes care of the --- dirty details of adding the libraries' include and lib paths. --- --- TYPICAL TASK: add new library. Instructions: --- 1) add a new extern_lib_defs entry --- 2) add library name to extern_libs tables in premake.lua for all 'projects' that want to use it - - --- directory in which OS-specific library subdirectories reside. -if os.is("macosx") then - libraries_dir = rootdir.."/libraries/osx/" -elseif os.is("windows") then - libraries_dir = rootdir.."/libraries/win32/" -else - -- No Unix-specific libs yet (use source directory instead!) -end --- directory for shared, bundled libraries -libraries_source_dir = rootdir.."/libraries/source/" -third_party_source_dir = rootdir.."/source/third_party/" - -local function add_default_lib_paths(extern_lib) - libdirs { libraries_dir .. extern_lib .. "/lib" } -end - -local function add_source_lib_paths(extern_lib) - libdirs { libraries_source_dir .. extern_lib .. "/lib" } -end - -local function add_default_include_paths(extern_lib) - includedirs { libraries_dir .. extern_lib .. "/include" } -end - -local function add_source_include_paths(extern_lib) - includedirs { libraries_source_dir .. extern_lib .. "/include" } -end - -local function add_third_party_include_paths(extern_lib) - includedirs { third_party_source_dir .. extern_lib .. "/include" } -end - - --- For unixes: add buildflags and linkflags using pkg-config or another similar command. --- By default, pkg-config is used. Other commands can be passed as "alternative_cmd". --- Running such commands at build/linktime does not work on all environments. --- For those environments where it does not work, we already run it now. --- Any better ideas? -local function pkgconfig_cflags(lib, alternative_cmd) - local cmd_cflags = "" - local result_cflags - if not alternative_cmd then - cmd_cflags = "pkg-config "..lib.." --cflags" - else - cmd_cflags = alternative_cmd - end - - if _ACTION == "xcode3" or _ACTION == "xcode4" then - result_cflags = string.gsub(os.capture(cmd_cflags), "\n", "") - buildoptions { result_cflags } - else - buildoptions { "`"..cmd_cflags.."`" } - end -end - -local function pkgconfig_libs(lib, alternative_cmd) - local cmd_libs = "" - local result_libs - if not alternative_cmd then - cmd_libs = "pkg-config "..lib.." --libs" - else - cmd_libs = alternative_cmd - end - - if _ACTION == "xcode3" or _ACTION == "xcode4" then - -- The syntax of -Wl with the comma separated list doesn't work and -Wl apparently isn't needed in xcode. - -- This is a hack, but it works... - result_libs = string.gsub(os.capture(cmd_libs), "-Wl", "") - result_libs = string.gsub(result_libs, ",", " ") - result_libs = string.gsub(result_libs, "\n", "") - linkoptions { result_libs } - elseif _ACTION == "gmake" then - gnuexternals { "`"..cmd_libs.."`" } - else - linkoptions { "`"..cmd_libs.."`" } - end -end - -function os.capture(cmd) - local f = io.popen(cmd, 'r') - local s = f:read('*a') - return s -end - -local function add_delayload(name, suffix, def) - - if def["no_delayload"] then - return - end - - -- currently only supported by VC; nothing to do on other platforms. - if not os.is("windows") then - return - end - - -- no extra debug version; use same library in all configs - if suffix == "" then - linkoptions { "/DELAYLOAD:"..name..".dll" } - -- extra debug version available; use in debug config - else - local dbg_cmd = "/DELAYLOAD:" .. name .. suffix .. ".dll" - local cmd = "/DELAYLOAD:" .. name .. ".dll" - - configuration "Debug" - linkoptions { dbg_cmd } - configuration "Release" - linkoptions { cmd } - configuration { } - end - -end - -local function add_default_links(def) - - -- careful: make sure to only use *_names when on the correct platform. - local names = {} - if os.is("windows") then - if def.win_names then - names = def.win_names - end - elseif _OPTIONS["android"] and def.android_names then - names = def.android_names - elseif os.is("linux") and def.linux_names then - names = def.linux_names - elseif os.is("macosx") and def.osx_names then - names = def.osx_names - elseif os.is("bsd") and def.bsd_names then - names = def.bsd_names - elseif def.unix_names then - names = def.unix_names - end - - local suffix = "d" - -- library is overriding default suffix (typically "" to indicate there is none) - if def["dbg_suffix"] then - suffix = def["dbg_suffix"] - end - -- non-Windows doesn't have the distinction of debug vs. release libraries - -- (to be more specific, they do, but the two are binary compatible; - -- usually only one type - debug or release - is installed at a time). - if not os.is("windows") then - suffix = "" - end - - -- OS X "Frameworks" need to be added in a special way to the link - -- i.e. by linkoptions += "-framework ..." - if os.is("macosx") and def.osx_frameworks then - for i,name in pairs(def.osx_frameworks) do - linkoptions { "-framework " .. name } - end - else - for i,name in pairs(names) do - configuration "Debug" - links { name .. suffix } - configuration "Release" - links { name } - configuration { } - - add_delayload(name, suffix, def) - end - end -end - --- Library definitions --- In a perfect world, libraries would have a common installation template, --- i.e. location of include directory, naming convention for .lib, etc. --- this table provides a means of working around each library's differences. --- --- The basic approach is defining two functions per library: --- --- 1. compile_settings --- This function should set all settings requred during the compile-phase like --- includedirs, defines etc... --- --- 2. link_settings --- This function should set all settings required during the link-phase like --- libdirs, linkflag etc... --- --- The main reason for separating those settings is different linking behaviour --- on osx and xcode. For more details, read the comment in project_add_extern_libs. --- --- There are some helper functions for the most common tasks. You should use them --- if they can be used in your situation to make the definitions more consistent and --- use their default beviours as a guideline. --- --- --- add_default_lib_paths(extern_lib) --- Description: Add '//lib'to the libpaths --- Parameters: --- * extern_lib: to be used in the libpath. --- --- add_default_include_paths(extern_lib) --- Description: Add '//include' to the includepaths --- Parameters: --- * extern_lib: to be used in the libpath. --- --- add_default_links --- Description: Adds links to libraries and configures delayloading. --- If the *_names parameter for a plattform is missing, no linking will be done --- on that plattform. --- The default assumptions are: --- * debug import library and DLL are distinguished with a "d" suffix --- * the library should be marked for delay-loading. --- Parameters: --- * win_names: table of import library / DLL names (no extension) when --- running on Windows. --- * unix_names: as above; shared object names when running on non-Windows. --- * osx_names: as above; for OS X specifically (overrides unix_names if both are --- specified) --- * bsd_names: as above; for BSD specifically (overrides unix_names if both are --- specified) --- * linux_names: ditto for Linux (overrides unix_names if both given) --- * dbg_suffix: changes the debug suffix from the above default. --- can be "" to indicate the library doesn't have a debug build; --- in that case, the same library (without suffix) is used in --- all build configurations. --- * no_delayload: indicate the library is not to be delay-loaded. --- this is necessary for some libraries that do not support it, --- e.g. Xerces (which is so stupid as to export variables). - -extern_lib_defs = { - boost = { - compile_settings = function() - if os.is("windows") then - add_default_include_paths("boost") - elseif os.is("macosx") then - -- Suppress all the Boost warnings on OS X by including it as a system directory - buildoptions { "-isystem../" .. libraries_dir .. "boost/include" } - end - -- TODO: This actually applies to most libraries we use on BSDs, make this a global setting. - if os.is("bsd") then - includedirs { "/usr/local/include" } - end - end, - link_settings = function() - if os.is("windows") or os.is("macosx") then - add_default_lib_paths("boost") - end - add_default_links({ - -- The following are not strictly link dependencies on all systems, but - -- are included for compatibility with different versions of Boost - android_names = { "boost_filesystem-gcc-mt", "boost_system-gcc-mt" }, - unix_names = { os.findlib("boost_filesystem-mt") and "boost_filesystem-mt" or "boost_filesystem", os.findlib("boost_system-mt") and "boost_system-mt" or "boost_system" }, - osx_names = { "boost_filesystem-mt", "boost_system-mt" }, - }) - end, - }, - comsuppw = { - link_settings = function() - add_default_links({ - win_names = { "comsuppw" }, - dbg_suffix = "d", - no_delayload = 1, - }) - end, - }, - cxxtest = { - compile_settings = function() - includedirs { libraries_source_dir .. "cxxtest-4.4" } - end, - }, - enet = { - compile_settings = function() - if os.is("windows") or os.is("macosx") then - add_default_include_paths("enet") - end - end, - link_settings = function() - if os.is("windows") or os.is("macosx") then - add_default_lib_paths("enet") - end - add_default_links({ - win_names = { "enet" }, - unix_names = { "enet" }, - }) - end, - }, - fcollada = { - compile_settings = function() - add_source_include_paths("fcollada") - end, - link_settings = function() - add_source_lib_paths("fcollada") - if os.is("windows") then - configuration "Debug" - links { "FColladaD" } - configuration "Release" - links { "FCollada" } - configuration { } - else - configuration "Debug" - links { "FColladaSD" } - configuration "Release" - links { "FColladaSR" } - configuration { } - end - end, - }, - gloox = { - compile_settings = function() - if os.is("windows") then - add_default_include_paths("gloox") - elseif os.is("macosx") then - -- Support GLOOX_CONFIG for overriding the default PATH-based gloox-config - gloox_config_path = os.getenv("GLOOX_CONFIG") - if not gloox_config_path then - gloox_config_path = "gloox-config" - end - pkgconfig_cflags(nil, gloox_config_path.." --cflags") - end - end, - link_settings = function() - if os.is("windows") then - add_default_lib_paths("gloox") - end - if os.is("macosx") then - gloox_config_path = os.getenv("GLOOX_CONFIG") - if not gloox_config_path then - gloox_config_path = "gloox-config" - end - pkgconfig_libs(nil, gloox_config_path.." --libs") - else - -- TODO: consider using pkg-config on non-Windows (for compile_settings too) - add_default_links({ - win_names = { "gloox-1.0" }, - unix_names = { "gloox" }, - no_delayload = 1, - }) - end - end, - }, - iconv = { - compile_settings = function() - if os.is("windows") then - add_default_include_paths("iconv") - defines { "HAVE_ICONV_CONST" } - defines { "ICONV_CONST=const" } - defines { "LIBICONV_STATIC" } - elseif os.is("macosx") then - add_default_include_paths("iconv") - defines { "LIBICONV_STATIC" } - elseif os.getversion().description == "FreeBSD" then - defines { "HAVE_ICONV_CONST" } - defines { "ICONV_CONST=const" } - end - end, - link_settings = function() - if os.is("windows") or os.is("macosx") then - add_default_lib_paths("iconv") - end - add_default_links({ - win_names = { "libiconv" }, - osx_names = { "iconv" }, - dbg_suffix = "", - no_delayload = 1, - }) - -- glibc (used on Linux and GNU/kFreeBSD) has iconv - -- FreeBSD 10+ has iconv as a part of libc - if os.is("bsd") - and not (os.getversion().description == "FreeBSD" and os.getversion().majorversion >= 10 - or os.getversion().description == "GNU/kFreeBSD") then - add_default_links({ - bsd_names = { "iconv" }, - }) - end - end, - }, - icu = { - compile_settings = function() - if os.is("windows") then - add_default_include_paths("icu") - elseif os.is("macosx") then - -- Support ICU_CONFIG for overriding the default PATH-based icu-config - icu_config_path = os.getenv("ICU_CONFIG") - if not icu_config_path then - icu_config_path = "icu-config" - end - pkgconfig_cflags(nil, icu_config_path.." --cppflags") - end - end, - link_settings = function() - if os.is("windows") then - add_default_lib_paths("icu") - end - if os.is("macosx") then - icu_config_path = os.getenv("ICU_CONFIG") - if not icu_config_path then - icu_config_path = "gloox-config" - end - pkgconfig_libs(nil, icu_config_path.." --ldflags-searchpath --ldflags-libsonly --ldflags-system") - else - add_default_links({ - win_names = { "icuuc", "icuin" }, - unix_names = { "icui18n", "icuuc" }, - dbg_suffix = "", - no_delayload = 1, - }) - end - end, - }, - libcurl = { - compile_settings = function() - if os.is("windows") or os.is("macosx") then - add_default_include_paths("libcurl") - end - end, - link_settings = function() - if os.is("windows") or os.is("macosx") then - add_default_lib_paths("libcurl") - end - add_default_links({ - win_names = { "libcurl" }, - unix_names = { "curl" }, - }) - end, - }, - libpng = { - compile_settings = function() - if os.is("windows") or os.is("macosx") then - add_default_include_paths("libpng") - end - if os.getversion().description == "OpenBSD" then - includedirs { "/usr/local/include/libpng" } - end - end, - link_settings = function() - if os.is("windows") or os.is("macosx") then - add_default_lib_paths("libpng") - end - add_default_links({ - win_names = { "libpng16" }, - unix_names = { "png" }, - -- Otherwise ld will sometimes pull in ancient 1.2 from the SDK, which breaks the build :/ - -- TODO: Figure out why that happens - osx_names = { "png16" }, - }) - end, - }, - libsodium = { - compile_settings = function() - if os.is("windows") or os.is("macosx") then - add_default_include_paths("libsodium") - end - end, - link_settings = function() - if os.is("windows") or os.is("macosx") then - add_default_lib_paths("libsodium") - end - add_default_links({ - win_names = { "libsodium" }, - unix_names = { "sodium" }, - }) - end, - }, - libxml2 = { - compile_settings = function() - if os.is("windows") then - add_default_include_paths("libxml2") - elseif os.is("macosx") then - -- Support XML2_CONFIG for overriding for the default PATH-based xml2-config - xml2_config_path = os.getenv("XML2_CONFIG") - if not xml2_config_path then - xml2_config_path = "xml2-config" - end - - -- use xml2-config instead of pkg-config on OS X - pkgconfig_cflags(nil, xml2_config_path.." --cflags") - -- libxml2 needs _REENTRANT or __MT__ for thread support; - -- OS X doesn't get either set by default, so do it manually - defines { "_REENTRANT" } - else - pkgconfig_cflags("libxml-2.0") - end - end, - link_settings = function() - if os.is("windows") then - add_default_lib_paths("libxml2") - configuration "Debug" - links { "libxml2" } - configuration "Release" - links { "libxml2" } - configuration { } - elseif os.is("macosx") then - xml2_config_path = os.getenv("XML2_CONFIG") - if not xml2_config_path then - xml2_config_path = "xml2-config" - end - pkgconfig_libs(nil, xml2_config_path.." --libs") - else - pkgconfig_libs("libxml-2.0") - end - end, - }, - miniupnpc = { - compile_settings = function() - if os.is("windows") or os.is("macosx") then - add_default_include_paths("miniupnpc") - end - end, - link_settings = function() - if os.is("windows") or os.is("macosx") then - add_default_lib_paths("miniupnpc") - end - add_default_links({ - win_names = { "miniupnpc" }, - unix_names = { "miniupnpc" }, - }) - end, - }, - nvtt = { - compile_settings = function() - if not _OPTIONS["with-system-nvtt"] then - add_source_include_paths("nvtt") - end - defines { "NVTT_SHARED=1" } - end, - link_settings = function() - if not _OPTIONS["with-system-nvtt"] then - add_source_lib_paths("nvtt") - end - add_default_links({ - win_names = { "nvtt" }, - unix_names = { "nvcore", "nvmath", "nvimage", "nvtt" }, - osx_names = { "nvcore", "nvmath", "nvimage", "nvtt", "squish" }, - dbg_suffix = "", -- for performance we always use the release-mode version - }) - end, - }, - openal = { - compile_settings = function() - if os.is("windows") then - add_default_include_paths("openal") - end - end, - link_settings = function() - if os.is("windows") then - add_default_lib_paths("openal") - end - add_default_links({ - win_names = { "openal32" }, - unix_names = { "openal" }, - osx_frameworks = { "OpenAL" }, - dbg_suffix = "", - no_delayload = 1, -- delayload seems to cause errors on startup - }) - end, - }, - opengl = { - compile_settings = function() - if os.is("windows") then - add_default_include_paths("opengl") - end - end, - link_settings = function() - if os.is("windows") then - add_default_lib_paths("opengl") - end - if _OPTIONS["gles"] then - add_default_links({ - unix_names = { "GLESv2" }, - dbg_suffix = "", - }) - else - add_default_links({ - win_names = { "opengl32", "gdi32" }, - unix_names = { "GL" }, - osx_frameworks = { "OpenGL" }, - dbg_suffix = "", - no_delayload = 1, -- delayload seems to cause errors on startup - }) - end - end, - }, - sdl = { - compile_settings = function() - if os.is("windows") then - includedirs { libraries_dir .. "sdl2/include/SDL" } - elseif not _OPTIONS["android"] then - -- Support SDL2_CONFIG for overriding the default (pkg-config sdl2) - -- i.e. on OSX where it gets set in update-workspaces.sh - sdl_config_path = os.getenv("SDL2_CONFIG") - if sdl_config_path then - pkgconfig_cflags(nil, sdl_config_path.." --cflags") - else - pkgconfig_cflags("sdl2") - end - end - end, - link_settings = function() - if os.is("windows") then - add_default_lib_paths("sdl2") - elseif not _OPTIONS["android"] then - sdl_config_path = os.getenv("SDL2_CONFIG") - if sdl_config_path then - pkgconfig_libs(nil, sdl_config_path.." --libs") - else - pkgconfig_libs("sdl2") - end - end - end, - }, - spidermonkey = { - compile_settings = function() - if _OPTIONS["with-system-mozjs38"] then - if not _OPTIONS["android"] then - pkgconfig_cflags("mozjs-38") - end - else - if os.is("windows") then - include_dir = "include-win32" - buildoptions { "/FI\"js/RequiredDefines.h\"" } - else - include_dir = "include-unix" - end - configuration "Debug" - includedirs { libraries_source_dir.."spidermonkey/"..include_dir.."-debug" } - defines { "DEBUG" } - configuration "Release" - includedirs { libraries_source_dir.."spidermonkey/"..include_dir.."-release" } - configuration { } - end - end, - link_settings = function() - if _OPTIONS["with-system-mozjs38"] then - if _OPTIONS["android"] then - links { "mozjs-38" } - else - pkgconfig_libs("nspr") - pkgconfig_libs("mozjs-38") - end - else - if os.is("macosx") then - add_default_lib_paths("nspr") - links { "nspr4", "plc4", "plds4" } - end - configuration "Debug" - links { "mozjs38-ps-debug" } - configuration "Release" - links { "mozjs38-ps-release" } - configuration { } - add_source_lib_paths("spidermonkey") - end - end, - }, - tinygettext = { - compile_settings = function() - add_third_party_include_paths("tinygettext") - end, - }, - valgrind = { - compile_settings = function() - add_source_include_paths("valgrind") - end, - }, - vorbis = { - compile_settings = function() - if os.is("windows") then - add_default_include_paths("vorbis") - elseif os.is("macosx") then - add_default_include_paths("libogg") - add_default_include_paths("vorbis") - end - end, - link_settings = function() - if os.is("windows") then - add_default_lib_paths("vorbis") - elseif os.is("macosx") then - add_default_lib_paths("libogg") - add_default_lib_paths("vorbis") - end - -- TODO: We need to force linking with these as currently - -- they need to be loaded explicitly on execution - if os.getversion().description == "OpenBSD" then - add_default_links({ - unix_names = { "ogg", - "vorbis" }, - }) - end - add_default_links({ - win_names = { "vorbisfile" }, - unix_names = { "vorbisfile" }, - osx_names = { "vorbis", "vorbisenc", "vorbisfile", "ogg" }, - dbg_suffix = "_d", - }) - end, - }, - wxwidgets = { - compile_settings = function() - if os.is("windows") then - includedirs { libraries_dir.."wxwidgets/include/msvc" } - add_default_include_paths("wxwidgets") - else - - -- Support WX_CONFIG for overriding for the default PATH-based wx-config - wx_config_path = os.getenv("WX_CONFIG") - if not wx_config_path then - wx_config_path = "wx-config" - end - - pkgconfig_cflags(nil, wx_config_path.." --unicode=yes --cxxflags") - end - end, - link_settings = function() - if os.is("windows") then - libdirs { libraries_dir.."wxwidgets/lib/vc_lib" } - else - wx_config_path = os.getenv("WX_CONFIG") - if not wx_config_path then - wx_config_path = "wx-config" - end - pkgconfig_libs(nil, wx_config_path.." --unicode=yes --libs std,gl") - end - end, - }, - x11 = { - link_settings = function() - add_default_links({ - win_names = { }, - unix_names = { "X11" }, - }) - end, - }, - xcursor = { - link_settings = function() - add_default_links({ - unix_names = { "Xcursor" }, - }) - end, - }, - zlib = { - compile_settings = function() - if os.is("windows") or os.is("macosx") then - add_default_include_paths("zlib") - end - end, - link_settings = function() - if os.is("windows") or os.is("macosx") then - add_default_lib_paths("zlib") - end - add_default_links({ - win_names = { "zlib1" }, - unix_names = { "z" }, - no_delayload = 1, - }) - end, - }, -} - - --- add a set of external libraries to the project; takes care of --- include / lib path and linking against the import library. --- extern_libs: table of library names [string] --- target_type: String defining the projects kind [string] -function project_add_extern_libs(extern_libs, target_type) - - for i,extern_lib in pairs(extern_libs) do - local def = extern_lib_defs[extern_lib] - assert(def, "external library " .. extern_lib .. " not defined") - - if def.compile_settings then - def.compile_settings() - end - - -- Linking to external libraries will only be done in the main executable and not in the - -- static libraries. Premake would silently skip linking into static libraries for some - -- actions anyway (e.g. vs2010). - -- On osx using xcode, if this linking would be defined in the static libraries, it would fail to - -- link if only dylibs are available. If both *.a and *.dylib are available, it would link statically. - -- I couldn't find any problems with that approach. - if target_type ~= "StaticLib" and def.link_settings then - def.link_settings() - end - end -end diff --git a/build/premake/premake4.lua b/build/premake/premake4.lua deleted file mode 100644 index 8b997e22a7..0000000000 --- a/build/premake/premake4.lua +++ /dev/null @@ -1,1493 +0,0 @@ -newoption { trigger = "android", description = "Use non-working Android cross-compiling mode" } -newoption { trigger = "atlas", description = "Include Atlas scenario editor projects" } -newoption { trigger = "collada", description = "Include COLLADA projects (requires FCollada library)" } -newoption { trigger = "coverage", description = "Enable code coverage data collection (GCC only)" } -newoption { trigger = "gles", description = "Use non-working OpenGL ES 2.0 mode" } -newoption { trigger = "icc", description = "Use Intel C++ Compiler (Linux only; should use either \"--cc icc\" or --without-pch too, and then set CXX=icpc before calling make)" } -newoption { trigger = "jenkins-tests", description = "Configure CxxTest to use the XmlPrinter runner which produces Jenkins-compatible output" } -newoption { trigger = "minimal-flags", description = "Only set compiler/linker flags that are really needed. Has no effect on Windows builds" } -newoption { trigger = "outpath", description = "Location for generated project files" } -newoption { trigger = "with-system-mozjs38", description = "Search standard paths for libmozjs38, instead of using bundled copy" } -newoption { trigger = "with-system-nvtt", description = "Search standard paths for nvidia-texture-tools library, instead of using bundled copy" } -newoption { trigger = "without-audio", description = "Disable use of OpenAL/Ogg/Vorbis APIs" } -newoption { trigger = "without-lobby", description = "Disable the use of gloox and the multiplayer lobby" } -newoption { trigger = "without-miniupnpc", description = "Disable use of miniupnpc for port forwarding" } -newoption { trigger = "without-nvtt", description = "Disable use of NVTT" } -newoption { trigger = "without-pch", description = "Disable generation and usage of precompiled headers" } -newoption { trigger = "without-tests", description = "Disable generation of test projects" } - --- OS X specific options -newoption { trigger = "macosx-bundle", description = "Enable OSX bundle, the argument is the bundle identifier string (e.g. com.wildfiregames.0ad)" } -newoption { trigger = "macosx-version-min", description = "Set minimum required version of the OS X API, the build will possibly fail if an older SDK is used, while newer API functions will be weakly linked (i.e. resolved at runtime)" } -newoption { trigger = "sysroot", description = "Set compiler system root path, used for building against a non-system SDK. For example /usr/local becomes SYSROOT/user/local" } - --- Windows specific options -newoption { trigger = "build-shared-glooxwrapper", description = "Rebuild glooxwrapper DLL for Windows. Requires the same compiler version that gloox was built with" } -newoption { trigger = "use-shared-glooxwrapper", description = "Use prebuilt glooxwrapper DLL for Windows" } -newoption { trigger = "large-address-aware", description = "Make the executable large address aware. Do not use for development, in order to spot memory issues easily" } - --- Install options -newoption { trigger = "bindir", description = "Directory for executables (typically '/usr/games'); default is to be relocatable" } -newoption { trigger = "datadir", description = "Directory for data files (typically '/usr/share/games/0ad'); default is ../data/ relative to executable" } -newoption { trigger = "libdir", description = "Directory for libraries (typically '/usr/lib/games/0ad'); default is ./ relative to executable" } - --- Root directory of project checkout relative to this .lua file -rootdir = "../.." - -dofile("extern_libs4.lua") - --- detect compiler for non-Windows -if os.is("macosx") then - cc = "clang" -elseif os.is("linux") and _OPTIONS["icc"] then - cc = "icc" -elseif not os.is("windows") then - cc = os.getenv("CC") - if cc == nil or cc == "" then - local hasgcc = os.execute("which gcc > .gccpath") - local f = io.open(".gccpath", "r") - local gccpath = f:read("*line") - f:close() - os.execute("rm .gccpath") - if gccpath == nil then - cc = "clang" - else - cc = "gcc" - end - end -end - --- TODO: proper clang support -if cc == "clang" then - premake.gcc.cc = "clang" - premake.gcc.cxx = "clang++" -end - --- detect CPU architecture (simplistic, currently only supports x86, amd64 and ARM) -arch = "x86" -if _OPTIONS["android"] then - arch = "arm" -elseif os.is("windows") then - if os.getenv("PROCESSOR_ARCHITECTURE") == "amd64" or os.getenv("PROCESSOR_ARCHITEW6432") == "amd64" then - arch = "amd64" - end -else - arch = os.getenv("HOSTTYPE") - if arch == "x86_64" or arch == "amd64" then - arch = "amd64" - else - os.execute(cc .. " -dumpmachine > .gccmachine.tmp") - local f = io.open(".gccmachine.tmp", "r") - local machine = f:read("*line") - f:close() - if string.find(machine, "x86_64") == 1 or string.find(machine, "amd64") == 1 then - arch = "amd64" - elseif string.find(machine, "i.86") == 1 then - arch = "x86" - elseif string.find(machine, "arm") == 1 then - arch = "arm" - elseif string.find(machine, "aarch64") == 1 then - arch = "aarch64" - else - print("WARNING: Cannot determine architecture from GCC, assuming x86") - end - end -end - --- Set up the Solution -solution "pyrogenesis" -targetdir(rootdir.."/binaries/system") -libdirs(rootdir.."/binaries/system") -if not _OPTIONS["outpath"] then - error("You must specify the 'outpath' parameter") -end -location(_OPTIONS["outpath"]) -configurations { "Release", "Debug" } - --- Get some environement specific information used later. -if os.is("windows") then - lcxxtestpath = rootdir.."/build/bin/cxxtestgen.exe" -else - lcxxtestpath = rootdir.."/libraries/source/cxxtest-4.4/bin/cxxtestgen" -end - -source_root = rootdir.."/source/" -- default for most projects - overridden by local in others - --- Rationale: projects should not have any additional include paths except for --- those required by external libraries. Instead, we should always write the --- full relative path, e.g. #include "maths/Vector3d.h". This avoids confusion --- ("which file is meant?") and avoids enormous include path lists. - - --- projects: engine static libs, main exe, atlas, atlas frontends, test. - --------------------------------------------------------------------------------- --- project helper functions --------------------------------------------------------------------------------- - -function project_set_target(project_name) - - -- Note: On Windows, ".exe" is added on the end, on unices the name is used directly - - local obj_dir_prefix = _OPTIONS["outpath"].."/obj/"..project_name.."_" - - configuration "Debug" - objdir(obj_dir_prefix.."Debug") - targetsuffix("_dbg") - - configuration "Release" - objdir(obj_dir_prefix.."Release") - - configuration { } - -end - - -function project_set_build_flags() - - flags { "NoEditAndContinue" } - - if not _OPTIONS["minimal-flags"] then - flags { "Symbols" } - end - - if cc ~= "icc" and (os.is("windows") or not _OPTIONS["minimal-flags"]) then - -- adds the -Wall compiler flag - flags { "ExtraWarnings" } -- this causes far too many warnings/remarks on ICC - end - - -- disable Windows debug heap, since it makes malloc/free hugely slower when - -- running inside a debugger - if os.is("windows") then - flags { "NoDebugHeap" } - end - - configuration "Debug" - defines { "DEBUG" } - - configuration "Release" - if os.is("windows") or not _OPTIONS["minimal-flags"] then - flags { "OptimizeSpeed" } - end - defines { "NDEBUG", "CONFIG_FINAL=1" } - - configuration { } - - if _OPTIONS["gles"] then - defines { "CONFIG2_GLES=1" } - end - - if _OPTIONS["without-audio"] then - defines { "CONFIG2_AUDIO=0" } - end - - if _OPTIONS["without-nvtt"] then - defines { "CONFIG2_NVTT=0" } - end - - if _OPTIONS["without-lobby"] then - defines { "CONFIG2_LOBBY=0" } - end - - if _OPTIONS["without-miniupnpc"] then - defines { "CONFIG2_MINIUPNPC=0" } - end - - -- required for the lowlevel library. must be set from all projects that use it, otherwise it assumes it is - -- being used as a DLL (which is currently not the case in 0ad) - defines { "LIB_STATIC_LINK" } - - -- various platform-specific build flags - if os.is("windows") then - - -- use native wchar_t type (not typedef to unsigned short) - flags { "NativeWChar" } - - else -- *nix - - -- TODO, FIXME: This check is incorrect because it means that some additional flags will be added inside the "else" branch if the - -- compiler is ICC and minimal-flags is specified (ticket: #2994) - if cc == "icc" and not _OPTIONS["minimal-flags"] then - buildoptions { - "-w1", - -- "-Wabi", - -- "-Wp64", -- complains about OBJECT_TO_JSVAL which is annoying - "-Wpointer-arith", - "-Wreturn-type", - -- "-Wshadow", - "-Wuninitialized", - "-Wunknown-pragmas", - "-Wunused-function", - "-wd1292" -- avoid lots of 'attribute "__nonnull__" ignored' - } - configuration "Debug" - buildoptions { "-O0" } -- ICC defaults to -O2 - configuration { } - if os.is("macosx") then - linkoptions { "-multiply_defined","suppress" } - end - else - -- exclude most non-essential build options for minimal-flags - if not _OPTIONS["minimal-flags"] then - buildoptions { - -- enable most of the standard warnings - "-Wno-switch", -- enumeration value not handled in switch (this is sometimes useful, but results in lots of noise) - "-Wno-reorder", -- order of initialization list in constructors (lots of noise) - "-Wno-invalid-offsetof", -- offsetof on non-POD types (see comment in renderer/PatchRData.cpp) - - "-Wextra", - "-Wno-missing-field-initializers", -- (this is common in external headers we can't fix) - - -- add some other useful warnings that need to be enabled explicitly - "-Wunused-parameter", - "-Wredundant-decls", -- (useful for finding some multiply-included header files) - -- "-Wformat=2", -- (useful sometimes, but a bit noisy, so skip it by default) - -- "-Wcast-qual", -- (useful for checking const-correctness, but a bit noisy, so skip it by default) - "-Wnon-virtual-dtor", -- (sometimes noisy but finds real bugs) - "-Wundef", -- (useful for finding macro name typos) - - -- enable security features (stack checking etc) that shouldn't have - -- a significant effect on performance and can catch bugs - "-fstack-protector-all", - "-U_FORTIFY_SOURCE", -- (avoid redefinition warning if already defined) - "-D_FORTIFY_SOURCE=2", - - -- always enable strict aliasing (useful in debug builds because of the warnings) - "-fstrict-aliasing", - - -- don't omit frame pointers (for now), because performance will be impacted - -- negatively by the way this breaks profilers more than it will be impacted - -- positively by the optimisation - "-fno-omit-frame-pointer" - } - - if not _OPTIONS["without-pch"] then - buildoptions { - -- do something (?) so that ccache can handle compilation with PCH enabled - -- (ccache 3.1+ also requires CCACHE_SLOPPINESS=time_macros for this to work) - "-fpch-preprocess" - } - end - - if os.is("linux") or os.is("bsd") then - buildoptions { "-fPIC" } - linkoptions { "-Wl,--no-undefined", "-Wl,--as-needed", "-Wl,-z,relro" } - end - - if arch == "x86" then - buildoptions { - -- To support intrinsics like __sync_bool_compare_and_swap on x86 - -- we need to set -march to something that supports them (i686). - -- We use pentium3 to also enable other features like mmx and sse, - -- while tuning for generic to have good performance on every - -- supported CPU. - -- Note that all these features are already supported on amd64. - "-march=pentium3 -mtune=generic" - } - end - end - - buildoptions { - -- Enable C++11 standard. - "-std=c++0x" - } - - if arch == "arm" then - -- disable warnings about va_list ABI change and use - -- compile-time flags for futher configuration. - buildoptions { "-Wno-psabi" } - if _OPTIONS["android"] then - -- Android uses softfp, so we should too. - buildoptions { "-mfloat-abi=softfp" } - end - end - - if _OPTIONS["coverage"] then - buildoptions { "-fprofile-arcs", "-ftest-coverage" } - links { "gcov" } - end - - -- We don't want to require SSE2 everywhere yet, but OS X headers do - -- require it (and Intel Macs always have it) so enable it here - if os.is("macosx") then - buildoptions { "-msse2" } - end - - -- Check if SDK path should be used - if _OPTIONS["sysroot"] then - buildoptions { "-isysroot " .. _OPTIONS["sysroot"] } - linkoptions { "-Wl,-syslibroot," .. _OPTIONS["sysroot"] } - end - - -- On OS X, sometimes we need to specify the minimum API version to use - if _OPTIONS["macosx-version-min"] then - buildoptions { "-mmacosx-version-min=" .. _OPTIONS["macosx-version-min"] } - -- clang and llvm-gcc look at mmacosx-version-min to determine link target - -- and CRT version, and use it to set the macosx_version_min linker flag - linkoptions { "-mmacosx-version-min=" .. _OPTIONS["macosx-version-min"] } - end - - -- Check if we're building a bundle - if _OPTIONS["macosx-bundle"] then - defines { "BUNDLE_IDENTIFIER=" .. _OPTIONS["macosx-bundle"] } - end - - -- On OS X, force using libc++ since it has better C++11 support, - -- now required by the game - if os.is("macosx") then - buildoptions { "-stdlib=libc++" } - linkoptions { "-stdlib=libc++" } - end - end - - buildoptions { - -- Hide symbols in dynamic shared objects by default, for efficiency and for equivalence with - -- Windows - they should be exported explicitly with __attribute__ ((visibility ("default"))) - "-fvisibility=hidden" - } - - if _OPTIONS["bindir"] then - defines { "INSTALLED_BINDIR=" .. _OPTIONS["bindir"] } - end - if _OPTIONS["datadir"] then - defines { "INSTALLED_DATADIR=" .. _OPTIONS["datadir"] } - end - if _OPTIONS["libdir"] then - defines { "INSTALLED_LIBDIR=" .. _OPTIONS["libdir"] } - end - - if os.is("linux") or os.is("bsd") then - -- To use our local shared libraries, they need to be found in the - -- runtime dynamic linker path. Add their path to -rpath. - if _OPTIONS["libdir"] then - linkoptions {"-Wl,-rpath," .. _OPTIONS["libdir"] } - else - -- On FreeBSD we need to allow use of $ORIGIN - if os.is("bsd") then - linkoptions { "-Wl,-z,origin" } - end - - -- Adding the executable path and taking care of correct escaping - if _ACTION == "gmake" then - linkoptions { "-Wl,-rpath,'$$ORIGIN'" } - elseif _ACTION == "codeblocks" then - linkoptions { "-Wl,-R\\\\$$$ORIGIN" } - end - end - end - - end -end - --- add X11 includes paths after all the others so they don't conflict with --- bundled libs -function project_add_x11_dirs() - if not os.is("windows") and not os.is("macosx") then - -- X11 includes may be installed in one of a gadzillion of five places - -- Famous last words: "You can't include too much! ;-)" - includedirs { - "/usr/X11R6/include/X11", - "/usr/X11R6/include", - "/usr/local/include/X11", - "/usr/local/include", - "/usr/include/X11" - } - libdirs { "/usr/X11R6/lib" } - end -end - --- create a project and set the attributes that are common to all projects. -function project_create(project_name, target_type) - - project(project_name) - language "C++" - kind(target_type) - - project_set_target(project_name) - project_set_build_flags() -end - - --- OSX creates a .app bundle if the project type of the main application is set to "WindowedApp". --- We don't want this because this bundle would be broken (it lacks all the resources and external dependencies, Info.plist etc...) --- Windows opens a console in the background if it's set to ConsoleApp, which is not what we want. --- I didn't check if this setting matters for linux, but WindowedApp works there. -function get_main_project_target_type() - if _OPTIONS["android"] then - return "SharedLib" - elseif os.is("macosx") then - return "ConsoleApp" - else - return "WindowedApp" - end -end - - --- source_root: rel_source_dirs and rel_include_dirs are relative to this directory --- rel_source_dirs: A table of subdirectories. All source files in these directories are added. --- rel_include_dirs: A table of subdirectories to be included. --- extra_params: table including zero or more of the following: --- * no_pch: If specified, no precompiled headers are used for this project. --- * pch_dir: If specified, this directory will be used for precompiled headers instead of the default --- /pch//. --- * extra_files: table of filenames (relative to source_root) to add to project --- * extra_links: table of library names to add to link step -function project_add_contents(source_root, rel_source_dirs, rel_include_dirs, extra_params) - - for i,v in pairs(rel_source_dirs) do - local prefix = source_root..v.."/" - files { prefix.."*.cpp", prefix.."*.h", prefix.."*.inl", prefix.."*.js", prefix.."*.asm", prefix.."*.mm" } - end - - -- Put the project-specific PCH directory at the start of the - -- include path, so '#include "precompiled.h"' will look in - -- there first - local pch_dir - if not extra_params["pch_dir"] then - pch_dir = source_root .. "pch/" .. project().name .. "/" - else - pch_dir = extra_params["pch_dir"] - end - includedirs { pch_dir } - - -- Precompiled Headers - -- rationale: we need one PCH per static lib, since one global header would - -- increase dependencies. To that end, we can either include them as - -- "projectdir/precompiled.h", or add "source/PCH/projectdir" to the - -- include path and put the PCH there. The latter is better because - -- many projects contain several dirs and it's unclear where there the - -- PCH should be stored. This way is also a bit easier to use in that - -- source files always include "precompiled.h". - -- Notes: - -- * Visual Assist manages to use the project include path and can - -- correctly open these files from the IDE. - -- * precompiled.cpp (needed to "Create" the PCH) also goes in - -- the abovementioned dir. - if (not _OPTIONS["without-pch"] and not extra_params["no_pch"]) then - pchheader(pch_dir.."precompiled.h") - pchsource(pch_dir.."precompiled.cpp") - defines { "USING_PCH" } - files { pch_dir.."precompiled.h", pch_dir.."precompiled.cpp" } - else - flags { "NoPCH" } - end - - -- next is source root dir, for absolute (nonrelative) includes - -- (e.g. "lib/precompiled.h") - includedirs { source_root } - - for i,v in pairs(rel_include_dirs) do - includedirs { source_root .. v } - end - - if extra_params["extra_files"] then - for i,v in pairs(extra_params["extra_files"]) do - -- .rc files are only needed on Windows - if path.getextension(v) ~= ".rc" or os.is("windows") then - files { source_root .. v } - end - end - end - - if extra_params["extra_links"] then - links { extra_params["extra_links"] } - end -end - - --- Add command-line options to set up the manifest dependencies for Windows --- (See lib/sysdep/os/win/manifest.cpp) -function project_add_manifest() - linkoptions { "\"/manifestdependency:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='X86' publicKeyToken='6595b64144ccf1df'\"" } -end - --------------------------------------------------------------------------------- --- engine static libraries --------------------------------------------------------------------------------- - --- the engine is split up into several static libraries. this eases separate --- distribution of those components, reduces dependencies a bit, and can --- also speed up builds. --- more to the point, it is necessary to efficiently support a separate --- test executable that also includes much of the game code. - --- names of all static libs created. automatically added to the --- main app project later (see explanation at end of this file) -static_lib_names = {} -static_lib_names_debug = {} -static_lib_names_release = {} - --- set up one of the static libraries into which the main engine code is split. --- extra_params: --- no_default_link: If specified, linking won't be done by default. --- For the rest of extra_params, see project_add_contents(). --- note: rel_source_dirs and rel_include_dirs are relative to global source_root. -function setup_static_lib_project (project_name, rel_source_dirs, extern_libs, extra_params) - - local target_type = "StaticLib" - project_create(project_name, target_type) - project_add_contents(source_root, rel_source_dirs, {}, extra_params) - project_add_extern_libs(extern_libs, target_type) - project_add_x11_dirs() - - if not extra_params["no_default_link"] then - table.insert(static_lib_names, project_name) - end - - if os.is("windows") then - flags { "NoRTTI" } - end -end - -function setup_third_party_static_lib_project (project_name, rel_source_dirs, extern_libs, extra_params) - - setup_static_lib_project(project_name, rel_source_dirs, extern_libs, extra_params) - includedirs { source_root .. "third_party/" .. project_name .. "/include/" } -end - -function setup_shared_lib_project (project_name, rel_source_dirs, extern_libs, extra_params) - - local target_type = "SharedLib" - project_create(project_name, target_type) - project_add_contents(source_root, rel_source_dirs, {}, extra_params) - project_add_extern_libs(extern_libs, target_type) - project_add_x11_dirs() - - if not extra_params["no_default_link"] then - table.insert(static_lib_names, project_name) - end - - if os.is("windows") then - flags { "NoRTTI" } - links { "delayimp" } - end -end - - --- this is where the source tree is chopped up into static libs. --- can be changed very easily; just copy+paste a new setup_static_lib_project, --- or remove existing ones. static libs are automagically added to --- main_exe link step. -function setup_all_libs () - - -- relative to global source_root. - local source_dirs = {} - -- names of external libraries used (see libraries_dir comment) - local extern_libs = {} - - - source_dirs = { - "network", - } - extern_libs = { - "spidermonkey", - "enet", - "boost", -- dragged in via server->simulation.h->random - } - if not _OPTIONS["without-miniupnpc"] then - table.insert(extern_libs, "miniupnpc") - end - setup_static_lib_project("network", source_dirs, extern_libs, {}) - - source_dirs = { - "third_party/tinygettext/src", - } - extern_libs = { - "iconv", - "boost", - } - setup_third_party_static_lib_project("tinygettext", source_dirs, extern_libs, { } ) - - -- it's an external library and we don't want to modify its source to fix warnings, so we just disable them to avoid noise in the compile output - if _ACTION == "vs2013" then - buildoptions { - "/wd4127", - "/wd4309", - "/wd4800", - "/wd4100", - "/wd4996", - "/wd4099", - "/wd4503" - } - end - - - if not _OPTIONS["without-lobby"] then - source_dirs = { - "lobby", - "lobby/scripting", - "i18n", - "third_party/encryption" - } - - extern_libs = { - "spidermonkey", - "boost", - "enet", - "gloox", - "icu", - "iconv", - "libsodium", - "tinygettext" - } - setup_static_lib_project("lobby", source_dirs, extern_libs, {}) - - if _OPTIONS["use-shared-glooxwrapper"] and not _OPTIONS["build-shared-glooxwrapper"] then - table.insert(static_lib_names_debug, "glooxwrapper_dbg") - table.insert(static_lib_names_release, "glooxwrapper") - else - source_dirs = { - "lobby/glooxwrapper", - } - extern_libs = { - "boost", - "gloox", - } - if _OPTIONS["build-shared-glooxwrapper"] then - setup_shared_lib_project("glooxwrapper", source_dirs, extern_libs, {}) - else - setup_static_lib_project("glooxwrapper", source_dirs, extern_libs, {}) - end - end - else - source_dirs = { - "lobby/scripting", - "third_party/encryption" - } - extern_libs = { - "spidermonkey", - "boost", - "libsodium" - } - setup_static_lib_project("lobby", source_dirs, extern_libs, {}) - files { source_root.."lobby/Globals.cpp" } - end - - - source_dirs = { - "simulation2", - "simulation2/components", - "simulation2/helpers", - "simulation2/scripting", - "simulation2/serialization", - "simulation2/system", - "simulation2/testcomponents", - } - extern_libs = { - "boost", - "opengl", - "spidermonkey", - } - setup_static_lib_project("simulation2", source_dirs, extern_libs, {}) - - - source_dirs = { - "scriptinterface", - "scriptinterface/third_party" - } - extern_libs = { - "boost", - "spidermonkey", - "valgrind", - "sdl", - } - setup_static_lib_project("scriptinterface", source_dirs, extern_libs, {}) - - - source_dirs = { - "ps", - "ps/scripting", - "network/scripting", - "ps/GameSetup", - "ps/XML", - "soundmanager", - "soundmanager/data", - "soundmanager/items", - "soundmanager/scripting", - "maths", - "maths/scripting", - "i18n", - "i18n/scripting", - "third_party/cppformat", - } - extern_libs = { - "spidermonkey", - "sdl", -- key definitions - "libxml2", - "opengl", - "zlib", - "boost", - "enet", - "libcurl", - "tinygettext", - "icu", - "iconv", - "libsodium", - } - - if not _OPTIONS["without-audio"] then - table.insert(extern_libs, "openal") - table.insert(extern_libs, "vorbis") - end - - setup_static_lib_project("engine", source_dirs, extern_libs, {}) - - - source_dirs = { - "graphics", - "graphics/scripting", - "renderer", - "renderer/scripting", - "third_party/mikktspace" - } - extern_libs = { - "opengl", - "sdl", -- key definitions - "spidermonkey", -- for graphics/scripting - "boost" - } - if not _OPTIONS["without-nvtt"] then - table.insert(extern_libs, "nvtt") - end - setup_static_lib_project("graphics", source_dirs, extern_libs, {}) - - - source_dirs = { - "tools/atlas/GameInterface", - "tools/atlas/GameInterface/Handlers" - } - extern_libs = { - "boost", - "sdl", -- key definitions - "opengl", - "spidermonkey" - } - setup_static_lib_project("atlas", source_dirs, extern_libs, {}) - - - source_dirs = { - "gui", - "gui/scripting", - "i18n" - } - extern_libs = { - "spidermonkey", - "sdl", -- key definitions - "opengl", - "boost", - "enet", - "tinygettext", - "icu", - "iconv", - } - if not _OPTIONS["without-audio"] then - table.insert(extern_libs, "openal") - end - setup_static_lib_project("gui", source_dirs, extern_libs, {}) - - - source_dirs = { - "lib", - "lib/adts", - "lib/allocators", - "lib/external_libraries", - "lib/file", - "lib/file/archive", - "lib/file/common", - "lib/file/io", - "lib/file/vfs", - "lib/pch", - "lib/posix", - "lib/res", - "lib/res/graphics", - "lib/sysdep", - "lib/tex" - } - extern_libs = { - "boost", - "sdl", - "openal", - "opengl", - "libpng", - "zlib", - "valgrind", - "cxxtest", - } - - -- CPU architecture-specific - if arch == "amd64" then - table.insert(source_dirs, "lib/sysdep/arch/amd64"); - table.insert(source_dirs, "lib/sysdep/arch/x86_x64"); - elseif arch == "x86" then - table.insert(source_dirs, "lib/sysdep/arch/ia32"); - table.insert(source_dirs, "lib/sysdep/arch/x86_x64"); - elseif arch == "arm" then - table.insert(source_dirs, "lib/sysdep/arch/arm"); - elseif arch == "aarch64" then - table.insert(source_dirs, "lib/sysdep/arch/aarch64"); - end - - -- OS-specific - sysdep_dirs = { - linux = { "lib/sysdep/os/linux", "lib/sysdep/os/unix" }, - -- note: RC file must be added to main_exe project. - -- note: don't add "lib/sysdep/os/win/aken.cpp" because that must be compiled with the DDK. - windows = { "lib/sysdep/os/win", "lib/sysdep/os/win/wposix", "lib/sysdep/os/win/whrt" }, - macosx = { "lib/sysdep/os/osx", "lib/sysdep/os/unix" }, - bsd = { "lib/sysdep/os/bsd", "lib/sysdep/os/unix", "lib/sysdep/os/unix/x" }, - } - for i,v in pairs(sysdep_dirs[os.get()]) do - table.insert(source_dirs, v); - end - - if os.is("linux") then - if _OPTIONS["android"] then - table.insert(source_dirs, "lib/sysdep/os/android") - else - table.insert(source_dirs, "lib/sysdep/os/unix/x") - end - end - - -- runtime-library-specific - if _ACTION == "vs2013" then - table.insert(source_dirs, "lib/sysdep/rtl/msc"); - else - table.insert(source_dirs, "lib/sysdep/rtl/gcc"); - end - - setup_static_lib_project("lowlevel", source_dirs, extern_libs, {}) - - - -- Third-party libraries that are built as part of the main project, - -- not built externally and then linked - source_dirs = { - "third_party/mongoose", - } - extern_libs = { - } - setup_static_lib_project("mongoose", source_dirs, extern_libs, { no_pch = 1 }) - - - -- CxxTest mock function support - extern_libs = { - "boost", - "cxxtest", - } - - -- 'real' implementations, to be linked against the main executable - -- (files are added manually and not with setup_static_lib_project - -- because not all files in the directory are included) - setup_static_lib_project("mocks_real", {}, extern_libs, { no_default_link = 1, no_pch = 1 }) - files { "mocks/*.h", source_root.."mocks/*_real.cpp" } - -- 'test' implementations, to be linked against the test executable - setup_static_lib_project("mocks_test", {}, extern_libs, { no_default_link = 1, no_pch = 1 }) - files { source_root.."mocks/*.h", source_root.."mocks/*_test.cpp" } -end - --------------------------------------------------------------------------------- --- main EXE --------------------------------------------------------------------------------- - --- used for main EXE as well as test -used_extern_libs = { - "opengl", - "sdl", - - "libpng", - "zlib", - - "spidermonkey", - "libxml2", - - "boost", - "cxxtest", - "comsuppw", - "enet", - "libcurl", - "tinygettext", - "icu", - "iconv", - "libsodium", - - "valgrind", -} - -if not os.is("windows") and not _OPTIONS["android"] and not os.is("macosx") then - -- X11 should only be linked on *nix - table.insert(used_extern_libs, "x11") - table.insert(used_extern_libs, "xcursor") -end - -if not _OPTIONS["without-audio"] then - table.insert(used_extern_libs, "openal") - table.insert(used_extern_libs, "vorbis") -end - -if not _OPTIONS["without-nvtt"] then - table.insert(used_extern_libs, "nvtt") -end - -if not _OPTIONS["without-lobby"] then - table.insert(used_extern_libs, "gloox") -end - -if not _OPTIONS["without-miniupnpc"] then - table.insert(used_extern_libs, "miniupnpc") -end - --- Bundles static libs together with main.cpp and builds game executable. -function setup_main_exe () - - local target_type = get_main_project_target_type() - project_create("pyrogenesis", target_type) - - links { "mocks_real" } - - local extra_params = { - extra_files = { "main.cpp" }, - no_pch = 1 - } - project_add_contents(source_root, {}, {}, extra_params) - project_add_extern_libs(used_extern_libs, target_type) - project_add_x11_dirs() - - -- Platform Specifics - if os.is("windows") then - - files { source_root.."lib/sysdep/os/win/icon.rc" } - -- from "lowlevel" static lib; must be added here to be linked in - files { source_root.."lib/sysdep/os/win/error_dialog.rc" } - - flags { "NoRTTI" } - - linkoptions { - -- wraps main thread in a __try block(see wseh.cpp). replace with mainCRTStartup if that's undesired. - "/ENTRY:wseh_EntryPoint", - - -- see wstartup.h - "/INCLUDE:_wstartup_InitAndRegisterShutdown", - - -- allow manual unload of delay-loaded DLLs - "/DELAY:UNLOAD", - } - - -- allow the executable to use more than 2GB of RAM. - -- this should not be enabled during development, so that memory issues are easily spotted. - if _OPTIONS["large-address-aware"] then - linkoptions { "/LARGEADDRESSAWARE" } - end - - -- see manifest.cpp - project_add_manifest() - - elseif os.is("linux") or os.is("bsd") then - - if not _OPTIONS["android"] and not (os.getversion().description == "OpenBSD") then - links { "rt" } - end - - if _OPTIONS["android"] then - -- NDK's STANDALONE-TOOLCHAIN.html says this is required - linkoptions { "-Wl,--fix-cortex-a8" } - - links { "log" } - end - - if os.is("linux") or os.getversion().description == "GNU/kFreeBSD" then - links { - -- Dynamic libraries (needed for linking for gold) - "dl", - } - elseif os.is("bsd") then - links { - -- Needed for backtrace* on BSDs - "execinfo", - } - end - - -- Threading support - buildoptions { "-pthread" } - if not _OPTIONS["android"] then - linkoptions { "-pthread" } - end - - -- For debug_resolve_symbol - configuration "Debug" - linkoptions { "-rdynamic" } - configuration { } - - elseif os.is("macosx") then - - links { "pthread" } - linkoptions { "-framework ApplicationServices", "-framework Cocoa", "-framework CoreFoundation" } - - end -end - - --------------------------------------------------------------------------------- --- atlas --------------------------------------------------------------------------------- - --- setup a typical Atlas component project --- extra_params, rel_source_dirs and rel_include_dirs: as in project_add_contents; -function setup_atlas_project(project_name, target_type, rel_source_dirs, rel_include_dirs, extern_libs, extra_params) - - local source_root = rootdir.."/source/tools/atlas/" .. project_name .. "/" - project_create(project_name, target_type) - - -- if not specified, the default for atlas pch files is in the project root. - if not extra_params["pch_dir"] then - extra_params["pch_dir"] = source_root - end - - project_add_contents(source_root, rel_source_dirs, rel_include_dirs, extra_params) - project_add_extern_libs(extern_libs, target_type) - project_add_x11_dirs() - - -- Platform Specifics - if os.is("windows") then - defines { "_UNICODE" } - -- Link to required libraries - links { "winmm", "comctl32", "rpcrt4", "delayimp", "ws2_32" } - -- required to use WinMain() on Windows, otherwise will default to main() - flags { "WinMain" } - - elseif os.is("linux") or os.is("bsd") then - buildoptions { "-rdynamic", "-fPIC" } - linkoptions { "-fPIC", "-rdynamic" } - - -- warnings triggered by wxWidgets - buildoptions { "-Wno-unused-local-typedefs" } - - elseif os.is("macosx") then - -- install_name settings aren't really supported yet by premake, but there are plans for the future. - -- we currently use this hack to work around some bugs with wrong install_names. - if target_type == "SharedLib" then - if _OPTIONS["macosx-bundle"] then - -- If we're building a bundle, it will be in ../Frameworks - configuration "Debug" - linkoptions { "-install_name @executable_path/../Frameworks/lib"..project_name.."_dbg.dylib" } - configuration "Release" - linkoptions { "-install_name @executable_path/../Frameworks/lib"..project_name..".dylib" } - configuration { } - else - configuration "Debug" - linkoptions { "-install_name @executable_path/lib"..project_name.."_dbg.dylib" } - configuration "Release" - linkoptions { "-install_name @executable_path/lib"..project_name..".dylib" } - configuration { } - end - end - end - -end - - --- build all Atlas component projects -function setup_atlas_projects() - - setup_atlas_project("AtlasObject", "StaticLib", - { -- src - ".", - "../../../third_party/jsonspirit" - - },{ -- include - "../../../third_party/jsonspirit" - },{ -- extern_libs - "boost", - "iconv", - "libxml2", - "wxwidgets" - },{ -- extra_params - no_pch = 1 - }) - - atlas_src = { - "ActorEditor", - "CustomControls/Buttons", - "CustomControls/Canvas", - "CustomControls/ColorDialog", - "CustomControls/DraggableListCtrl", - "CustomControls/EditableListCtrl", - "CustomControls/FileHistory", - "CustomControls/HighResTimer", - "CustomControls/MapDialog", - "CustomControls/SnapSplitterWindow", - "CustomControls/VirtualDirTreeCtrl", - "CustomControls/Windows", - "General", - "General/VideoRecorder", - "Misc", - "ScenarioEditor", - "ScenarioEditor/Sections/Common", - "ScenarioEditor/Sections/Cinema", - "ScenarioEditor/Sections/Environment", - "ScenarioEditor/Sections/Map", - "ScenarioEditor/Sections/Object", - "ScenarioEditor/Sections/Player", - "ScenarioEditor/Sections/Terrain", - "ScenarioEditor/Tools", - "ScenarioEditor/Tools/Common", - } - atlas_extra_links = { - "AtlasObject" - } - - atlas_extern_libs = { - "boost", - "comsuppw", - "iconv", - "libxml2", - "sdl", -- key definitions - "wxwidgets", - "zlib", - } - if not os.is("windows") and not os.is("macosx") then - -- X11 should only be linked on *nix - table.insert(atlas_extern_libs, "x11") - end - - setup_atlas_project("AtlasUI", "SharedLib", atlas_src, - { -- include - "..", - "CustomControls", - "Misc" - }, - atlas_extern_libs, - { -- extra_params - pch_dir = rootdir.."/source/tools/atlas/AtlasUI/Misc/", - no_pch = false, - extra_links = atlas_extra_links, - extra_files = { "Misc/atlas.rc" } - }) -end - - --- Atlas 'frontend' tool-launching projects -function setup_atlas_frontend_project (project_name) - - local target_type = get_main_project_target_type() - project_create(project_name, target_type) - project_add_x11_dirs() - - local source_root = rootdir.."/source/tools/atlas/AtlasFrontends/" - files { source_root..project_name..".cpp" } - - if os.is("windows") then - files { source_root..project_name..".rc" } - end - - includedirs { source_root .. ".." } - - -- Platform Specifics - if os.is("windows") then - defines { "_UNICODE" } - - -- required to use WinMain() on Windows, otherwise will default to main() - flags { "WinMain" } - - -- see manifest.cpp - project_add_manifest() - - else -- Non-Windows, = Unix - links { "AtlasObject" } - end - - links { "AtlasUI" } - -end - -function setup_atlas_frontends() - setup_atlas_frontend_project("ActorEditor") -end - - --------------------------------------------------------------------------------- --- collada --------------------------------------------------------------------------------- - -function setup_collada_project(project_name, target_type, rel_source_dirs, rel_include_dirs, extern_libs, extra_params) - - project_create(project_name, target_type) - local source_root = source_root.."collada/" - extra_params["pch_dir"] = source_root - project_add_contents(source_root, rel_source_dirs, rel_include_dirs, extra_params) - project_add_extern_libs(extern_libs, target_type) - project_add_x11_dirs() - - -- Platform Specifics - if os.is("windows") then - -- required to use WinMain() on Windows, otherwise will default to main() - flags { "WinMain" } - - elseif os.is("linux") then - defines { "LINUX" } - - links { - "dl", - } - - -- FCollada is not aliasing-safe, so disallow dangerous optimisations - -- (TODO: It'd be nice to fix FCollada, but that looks hard) - buildoptions { "-fno-strict-aliasing" } - - buildoptions { "-rdynamic" } - linkoptions { "-rdynamic" } - - elseif os.is("bsd") then - if os.getversion().description == "OpenBSD" then - links { "c", } - end - - if os.getversion().description == "GNU/kFreeBSD" then - links { - "dl", - } - end - - buildoptions { "-fno-strict-aliasing" } - - buildoptions { "-rdynamic" } - linkoptions { "-rdynamic" } - - elseif os.is("macosx") then - -- define MACOS-something? - - -- install_name settings aren't really supported yet by premake, but there are plans for the future. - -- we currently use this hack to work around some bugs with wrong install_names. - if target_type == "SharedLib" then - if _OPTIONS["macosx-bundle"] then - -- If we're building a bundle, it will be in ../Frameworks - linkoptions { "-install_name @executable_path/../Frameworks/lib"..project_name..".dylib" } - else - linkoptions { "-install_name @executable_path/lib"..project_name..".dylib" } - end - end - - buildoptions { "-fno-strict-aliasing" } - -- On OSX, fcollada uses a few utility functions from coreservices - linkoptions { "-framework CoreServices" } - end - -end - --- build all Collada component projects -function setup_collada_projects() - - setup_collada_project("Collada", "SharedLib", - { -- src - "." - },{ -- include - },{ -- extern_libs - "fcollada", - "iconv", - "libxml2" - },{ -- extra_params - }) - -end - - --------------------------------------------------------------------------------- --- tests --------------------------------------------------------------------------------- - --- Cxxtestgen needs to create .cpp files from the .h files before they can be compiled. --- By default we are using prebuildcommands, but we are also using customizations of premake --- for makefiles. The reason is that premake currently has a bug with makefiles and parallel --- builds (e.g. -j5). It's not guaranteed that prebuildcommands always run before building. --- All the *.cpp and *.h files need to be added to files no matter if prebuildcommands --- or customizations are used. --- If no customizations are implemented for a specific action (e.g. vs2013), passing the --- parameters won't have any effects. -function configure_cxxtestgen() - - local lcxxtestrootfile = source_root.."test_root.cpp" - files { lcxxtestrootfile } - - -- Define the options used for cxxtestgen - local lcxxtestoptions = "--have-std" - local lcxxtestrootoptions = "--have-std" - - if _OPTIONS["jenkins-tests"] then - lcxxtestrootoptions = lcxxtestrootoptions .. " --runner=XmlPrinter" - else - lcxxtestrootoptions = lcxxtestrootoptions .. " --runner=ErrorPrinter" - end - - -- Precompiled headers - the header is added to all generated .cpp files - -- note that the header isn't actually precompiled here, only #included - -- so that the build stage can use it as a precompiled header. - local include = " --include=precompiled.h" - -- This is required to build against SDL 2.0.4 on Windows - include = include .. " --include=lib/external_libraries/libsdl.h" - lcxxtestrootoptions = lcxxtestrootoptions .. include - lcxxtestoptions = lcxxtestoptions .. include - - -- Set all the parameters used in our cxxtestgen customization in premake. - cxxtestrootfile(lcxxtestrootfile) - cxxtestpath(lcxxtestpath) - cxxtestrootoptions(lcxxtestrootoptions) - cxxtestoptions(lcxxtestoptions) - - -- The file paths needs to be made relative to the project directory for the prebuildcommands. - -- premake's paths are relative to premake4.lua by default. - lcxxtestrootfile = path.rebase(lcxxtestrootfile, path.getabsolute("."), _OPTIONS["outpath"]) - lcxxtestpath = path.rebase(lcxxtestpath, path.getabsolute("."), _OPTIONS["outpath"]) - - -- On windows we have to use backlashes in our paths. We don't have to take care - -- of that for the parameters passed to our cxxtestgen customizations. - if os.is("windows") then - lcxxtestrootfile = path.translate(lcxxtestrootfile, "\\") - lcxxtestpath = path.translate(lcxxtestpath, "\\") - end - - if _ACTION ~= "gmake" and _ACTION ~= "vs2013" then - prebuildcommands { lcxxtestpath.." --root "..lcxxtestrootoptions.." -o "..lcxxtestrootfile } - end - - -- Find header files in 'test' subdirectories - local all_files = os.matchfiles(source_root .. "**/tests/*.h") - for i,v in pairs(all_files) do - -- Don't include sysdep tests on the wrong sys - -- Don't include Atlas tests unless Atlas is being built - if not (string.find(v, "/sysdep/os/win/") and not os.is("windows")) and - not (string.find(v, "/tools/atlas/") and not _OPTIONS["atlas"]) and - not (string.find(v, "/sysdep/arch/x86_x64/") and ((arch ~= "amd64") or (arch ~= "x86"))) - then - local src_file = string.sub(v, 1, -3) .. ".cpp" - cxxtestsrcfiles { src_file } - files { src_file } - cxxtesthdrfiles { v } - - if _ACTION ~= "gmake" and _ACTION ~= "vs2013" then - -- see detailed comment above. - src_file = path.rebase(src_file, path.getabsolute("."), _OPTIONS["outpath"]) - v = path.rebase(v, path.getabsolute("."), _OPTIONS["outpath"]) - - if os.is("windows") then - src_file = path.translate(src_file, "\\") - v = path.translate(v, "\\") - end - prebuildcommands { lcxxtestpath.." --part "..lcxxtestoptions.." -o "..src_file.." "..v } - end - end - - - end -end - - -function setup_tests() - - local target_type = get_main_project_target_type() - project_create("test", target_type) - - configure_cxxtestgen() - - links { static_lib_names } - configuration "Debug" - links { static_lib_names_debug } - configuration "Release" - links { static_lib_names_release } - configuration { } - - links { "mocks_test" } - if _OPTIONS["atlas"] then - links { "AtlasObject" } - project_add_extern_libs({"wxwidgets"}, target_type) - end - extra_params = { - extra_files = { "test_setup.cpp" }, - } - - project_add_contents(source_root, {}, {}, extra_params) - project_add_extern_libs(used_extern_libs, target_type) - project_add_x11_dirs() - - -- TODO: should fix the duplication between this OS-specific linking - -- code, and the similar version in setup_main_exe - - if os.is("windows") then - -- from "lowlevel" static lib; must be added here to be linked in - files { source_root.."lib/sysdep/os/win/error_dialog.rc" } - - flags { "NoRTTI" } - - -- see wstartup.h - linkoptions { "/INCLUDE:_wstartup_InitAndRegisterShutdown" } - -- Enables console for the TEST project on Windows - linkoptions { "/SUBSYSTEM:CONSOLE" } - - project_add_manifest() - - elseif os.is("linux") or os.is("bsd") then - - if not _OPTIONS["android"] and not (os.getversion().description == "OpenBSD") then - links { "rt" } - end - - if _OPTIONS["android"] then - -- NDK's STANDALONE-TOOLCHAIN.html says this is required - linkoptions { "-Wl,--fix-cortex-a8" } - end - - if os.is("linux") or os.getversion().description == "GNU/kFreeBSD" then - links { - -- Dynamic libraries (needed for linking for gold) - "dl", - } - elseif os.is("bsd") then - links { - -- Needed for backtrace* on BSDs - "execinfo", - } - end - - -- Threading support - buildoptions { "-pthread" } - if not _OPTIONS["android"] then - linkoptions { "-pthread" } - end - - -- For debug_resolve_symbol - configuration "Debug" - linkoptions { "-rdynamic" } - configuration { } - - includedirs { source_root .. "pch/test/" } - end -end - --- must come first, so that VC sets it as the default project and therefore --- allows running via F5 without the "where is the EXE" dialog. -setup_main_exe() - -setup_all_libs() - --- add the static libs to the main EXE project. only now (after --- setup_all_libs has run) are the lib names known. cannot move --- setup_main_exe to run after setup_all_libs (see comment above). --- we also don't want to hardcode the names - that would require more --- work when changing the static lib breakdown. -project("pyrogenesis") -- Set the main project active - links { static_lib_names } - configuration "Debug" - links { static_lib_names_debug } - configuration "Release" - links { static_lib_names_release } - configuration { } - -if _OPTIONS["atlas"] then - setup_atlas_projects() - setup_atlas_frontends() -end - -if _OPTIONS["collada"] then - setup_collada_projects() -end - -if not _OPTIONS["without-tests"] then - setup_tests() -end diff --git a/build/premake/premake4/BUILD.txt b/build/premake/premake4/BUILD.txt deleted file mode 100644 index ef9af02a12..0000000000 --- a/build/premake/premake4/BUILD.txt +++ /dev/null @@ -1,123 +0,0 @@ -PREMAKE BUILD INSTRUCTIONS - - Premake is written in a mix of C and Lua. This mix enables many new - features, but also makes building Premake a bit more complicated than - your typical application. - - If you downloaded a source code package from SourceForge (as opposed - to pulling the sources from the repository), you will find project - files for all of the currently supported toolsets in the build/ folder. - Build the release configuration (the default for the makefiles) and you - will find the executable in bin/release ready to go. - - If you want to use a debug build instead, or if you pulled the sources - from BitBucket instead of a SourceForge release, or if you plan on - making changes to Premake, read the next section to learn how to - prepare the project files. - - If you find all of this very confusing and need some help, see the end - of this document for contact information. I'll be glad to help. And if - you have any suggestions for improving this process, we'd be glad to - hear them too. - - -GENERATING THE PROJECT FILES - - If you downloaded a source code package from SourceForge, the project - files are already included (in build/) and you can skip ahead to the - next section. - - If you pulled the sources from BitBucket, you'll need to generate your - own project files before you can build. - - We use Premake to generate the project files for Premake (bootstrapping, - or eating our own dog food). So in order to generate the project files, - you need to have a working version of Premake 4.x installed on your - system. You can get it as source code (with pre-generated project files - ready to build) or a prebuilt binary from the SourceForge download page. - - Once you have a working Premake 4.x installed, the first thing you need - to do is to embed the Lua scripts into the application by running this - command in the top-level Premake directory: - - premake4 embed - - This creates a C file (at src/host/scripts.c) which contains all of the - Lua scripts as static string buffers. These then get compiled into the - executable, which is how we get away with shipping a single file instead - of one executable and whole bunch of scripts. See EMBEDDING THE SCRIPTS, - below, for more information. - - Now you can generate project files for your toolset of choice by running - a command like: - - premake4 gmake -- for GNU makefiles using GCC - premake4 vs2008 -- for a Visual Studio 2008 solution - - Use the "--help" option to see all of the available targets. - - This will create a solution/makefile/workspace in the top-level folder, - which you can now go ahead and build. - - -RELEASE vs. DEBUG BUILDS - - Premake can be built in either "release" or "debug" modes. Makefile users - can choose which configuration to build with the "config" argument: - - make config=debug -- build in debug mode - make config=release -- build in release mode - - IDEs like Visual Studio provide their own mechanism for switching build - configurations. - - In release mode you can build and run Premake like any other C application - (once you've embedded the scripts, see the next section). - - In debug mode, Premake ignores the embedded Lua scripts and instead reads the - latest versions from the disk at runtime. This allows you to change a script, - and then immediately test it without having to embed or compile first. Speedy! - But Premake needs some help to find the scripts. - - You can specify the location of the scripts in one of two ways: using - the /scripts command line argument, like so: - - premake4 /scripts=~/Code/premake4/src gmake - - Or by setting a PREMAKE_PATH environment variable. - - PREMAKE_PATH=~/Code/premake4/src - - As you can see, you need to specify the location of the Premake "src" - directory, the one containing "_premake_main.lua". - - -EMBEDDING THE SCRIPTS - - One of the nice things about Premake is that it comes as a single file, - easy to install or move around. To manage this, we need to embed all of - the Lua scripts into the executable, so we can deliver just the one file, - rather than an executable and a whole bunch of scripts. - - Scripts are embedded by running the command - - premake4 embed - - This copies all of the scripts listed in _manifest.lua into the file - src/host/scripts.c, where they are represented as a set of static C - string buffers. This file is then compiled as part of Premake's release - builds. - - So: very important to embed the scripts before each release build! - - -CONFUSED? - - I'll be glad to help you out. Stop by the main project website where - you can leave a note in the forums (the preferred approach), join the - mailing list, or contact me directly. - - http://industriousone.com/premake - - Enjoy! - \ No newline at end of file diff --git a/build/premake/premake4/CHANGES.txt b/build/premake/premake4/CHANGES.txt deleted file mode 100644 index 544da6f7b6..0000000000 --- a/build/premake/premake4/CHANGES.txt +++ /dev/null @@ -1,547 +0,0 @@ -------- - 4.3.1 (in progress) -------- - -* Bug 3119793: Fixed ClCompile blocks with vs10 and PCH (Dan Dunham) -* Bug 2920784: Symbol visibility in Xcode3 libraries (burnson2) -* Bug 3133743: Sets ONLY_ACTIVE_ARCH = YES in Xcode debug builds (James Wynn) -* Properly pass return codes back to shell in release builds -* Bug 3135734: Remove WholeProgramOptimization setting in vs10 (doug) -* Bug 3138377: Link dependencies ignored within "SharedLib" configuration - - -------- - 4.3 -------- - -* CHANGED LICENSE FROM GPLv2 TO BSD -* Added Visual Studio 2010 C/C++ support (Liam Devine) -* Added Solaris support (Dean Ross-Smith) -* Added deployment and image options for Xbox360 (dvoid) -* Patch 2963313: Enable setting .NET framework version (Justen Hyde) -* Patch 2965229: Fix handling of '+' symbol in file patterns (Rachel Blum) -* Patch 2997449: Print configuration with target (ergosys) -* Patch 2997452: Suppress gmake's "nothing to be done" message (ergosys) -* Patch 3011940: Add support for MFC (JTAnderson) -* Patch 3053959: kind() crashes when called with no arguments (rjmyst3) -* Bug 2997728: Project dependencies should be case-sensitive -* Bug 3056381: Xcode project breaks on special chars -* Bug 3007101: Generating PDB in Release builds is not supported -* Bug 2971841: Gmake escaping of shell variable $(...) is broken -* Fixed handling of icons in Xcode (bitshifter) -* Added imagepath to set Xbox360 image file name (Jarod) -* Patch 3063804: Set CompileAs flag for VS200x C projects (rjmyst3) -* Implemented StaticRuntime flag for Xcode (William Burnson) -* Improved portability of Mac OS X binaries (William Burnson) -* Bug 3035545: The pattern { "./folder/*.c" } matches no files -* Bug 3034222: StaticLib projects ignore linkoptions -* Bug 3020382: GCC PCH not working -* Bug 3016050: {"../Dir/file1.c","../../Dir/file2.c"} breaks Xcode (Stephane) -* Bug 3015312: Makefiles are not quoted correctly -* Bug 3097868: Removes relative paths from vs2010 filters (Robert Konrad) -* Bug 3095274: Pre-compiled header support missing for VS2010 target -* Bug 3100062: vs2010 Runtime library selection - - -------- - 4.2.1 -------- - -* Feature 2944697: Add flag to disable Minimal Rebuild in Visual Studio -* Patch 2928029: Add EnableSSE, EnableSSE2 flags -* Patch 2936443: Expose configuration terms to scripts (Laurent Humbertclaude) -* Bug 2928775: Error loading external Lua module with require() -* Bug 2942438: Wrong runtime library linked -* Bug 2931722: pchheader handling not consistent between tools -* Bug 2958829: Files pattern matching including too many files -* Bug 2953594: includedirs / libdirs converting absolute paths to relative -* Bug 2936188: Improve handling for invalid values in lists - - ------ - 4.2 ------ - -- Feature 1526976: Add support for Apple Xcode 3 -- Feature 2900623: Add targetsuffix and implibsuffix properties -- Added project kind to list of configuration filters -- Feature 2839002: Add gcc switch to improve header dependency generation (Johannes Spohr) -- Feature 2832906: Global variable (_SCRIPT) for current script path -- Feature 2905303: Enable better folder matching in file lists -- Feature 2919629: Add help target for makefiles -- Feature 2820644: Add Xbox360 deployment and image options -- Bug 2909463: Fix Xcode handling of Obj-C++ .mm files -- Bug 2903430: Using relative instead of absolute paths with $() macro -- Bug 2910691: Duplicate build options -- Bug 2910639: Nil reference on dylib project dependency -- Bug 2872066: Two test failures in 4.1.2 -- Bug 2912756: dylibs missing lib prefix -- Bug 2910202: Code::Blocks building C files as C++ -- Bug 2926917: Use target name for Visual Studio PDB file -- Bug 2927604: Unable to build Premake with Visual Studio -- Clean action now removes MonoDevelop .pidb files correctly -- Added os.executef() - - -------- - 4.1.2 -------- - -- Fixed ManagedExtension setting for Visual Studio -- Fixed os.match() bug for large result sets (David Raulo) -- Patch 2840052: Order problem of static link -- Patch 2802722: Floating Point Model Flags (Suigintou) -- Patch 2865333: Support for ObjC and ObjC++ sources (Johannes Spohr) -- Patch 2832852: Fix descriptions in cmd help (Sebastian Schuberth) -- Patch 2832848: Show default script name in help (Sebastian Schuberth) - - -------- - 4.1.1 -------- - -- Use libtool instead of ar for Mac OS X Universal static libraries -- Fixed Xbox 360 linker settings in Visual Studio -- Remove platform-specific intermediate objects on clean -- Bug 2819232: Buildoptions not used when creating Makefile for C# -- Bug 2813297: OS X universal config should be "univ" (William Burnson) -- Bug 2814179: Xbox 360 precompiled headers not working - - ------ - 4.1 ------ - -- Added support for cross-compiling target platforms -- Added Xbox 360 support to Visual Studio 2005/2008 -- Added Mac OS X universal binary support -- Added Playstation 3 support -- Added precompiled header support for GCC -- Support links and libdirs for Visual Studio static libraries -- Fail gracefully when list is assigned to string field -- Changed GCC flags to -fno-exceptions and -fno-rtti -- Improved performance of configuration building step -- Fixed crash when configuration is missing a kind -- Patch 2031626: Support for additional manifest files (Colin Graf) -- Patch 2558089: workaround for --as-needed/correct link order (idl0r) -- Patch 2609028: verbose linking in makefile (kaidokert) -- Bug 2564404: FatalWarnings has no effect with gmake target -- Bug 2550759: pchheader option has wrong type -- Bug 1900333: Parentheses in build path -- Bug 2790865: SharedLib on OSX fixes (Ash Berlin) -- Bug 2790882: Trailing slash in path.getabsolute (Ash Berlin) - - -RC2 -> RC3 - -- Bug 2805763: GCC PCH breaks on path -- Bug 2709641: Location field does not propagate to projects -- Bug 2675518: Dependencies wrong on config links -- Bug 2152526: Code::Blocks doesn't build PCH correctly on GCC - -RC1 -> RC2 - -- Removed additional MonoDevelop files in clean action -- Fixed naming of system libraries in Visual Studio link step -- Set OS to Windows when generating for Visual Studio -- Bug 2801257: Linker error LNK1112 when cross-compiling for x64 - - ------ - 4.0 ------ - -This version is a complete rewrite of Premake. - -- A new, more readable and extensible syntax for projects -- More robust syntax validation -- A new command-line format, with better argument validation -- Improved path handling across all project settings -- Upgraded to Lua 5.1.4 -- Many, many bug fixes - -RC4 -> Final - -- Set Mac OS X linker flags for Code::Blocks -- Bug 2533504: Files above project root not added to project - -RC3 -> RC4 - -- Embed scripts instead of bytecodes to avoid portability issues -- solution() and project() now only set the active object when - called with a name; remains unchanged otherwise - -RC2 -> RC3 - -- Bug: GCC Windows release builds of Premake4 crash on script errors -- Patched Lua to load precompiled bytecodes on PPC architectures. -- Display paths of generated files - -RC1 -> RC2 - -- Enabled use of absolute Windows paths to different drive letter -- Bug: Post-build commands run before build on Code::Blocks -- Removed FatalWarnings build flag -- Fixed GCC 4.2 warnings (Ryan Pusztai) -- Enable Windows linking to shared libraries even with NoImportLib - flag set (just in case) -- Fixed handling of paths in links -- Added "ToolsVersion" attribute to VS2005 and VS2008 C# projects -- Fixed separator between library dependencies in C++ makefiles -- Added missing os.copyfile() function -- Bug: Sometimes takes a long time to complete on Linux -- Enabled Lua popen support on Linux and Mac OS X - - ------ - 3.7 ------ - -- Updated Lua to 5.1.3 -- Added new CodeLite support target (Ryan Pusztai) -- Added new cb-ow (Code::Blocks Open Watcom) target (Tim Channon) -- Place OSX winexe's into Content/MacOS folder (William Burnson) -- Sibling executables may now be listed in package.links -- Bug 1520012: Improper Makefiles when filenames have spaces - (Diaa Sami) -- Bug 2045506: "no-exceptions" flag ignored for VS200x (Benoit Miller) -- Bug 2034470: Error in cmd line error handler -- Bug 2114152: package or config table isn't generated automatically - - ------ - 3.6 ------ - -- Patch 1946122: Add support for VS2008 (Ryan Pusztai) -- Patch 1913448: Win32 crash when using '--clean --usetargetpath' - (David Walters) -- Patch 1771168: luaL_getn speed optimization (Richard O'Grady) -- Bug 1939089: Premake segfault on Linux/PPC (Fabio Till) -- Fixed "bad argument #2 to 'chdir'" error -- Disable -MMD on multiple -arch flags (poor man's Universal binary - support) - - ------ - 3.5 ------ - -- Prevent creation of import libraries on OS X -- Improved handling of dylibs on OS X -- Patch 1771977: Ability to compile C source as C++ in Code::Blocks - (Ryan Pusztai) -- Bug 1804810: out-implib not present in linux gnu compler toolchain -- Bug 1806949: .Net reference paths are broken when bindir is specified -- Bug 1806960: Make clean does not remove .mdb files -- Bug 1831389: Makefiles stored in subdirs contain no targets on - first run - - ------ - 3.4 ------ - -- Added `no-pch` flag to suppress precompiled headers -- Added App.config support to GNU makefiles -- Add os.mkdir() to script environment -- Makefile now creates target directory before copying .NET references -- Feature 1520182: Enhanced file-handling functions -- Bug 531878: Problems with relative paths -- Bug 1723867: Config-specific post-build on GNU target (Benoit Miller) -- Bug 1596826: XML targets doesn't escape xml entities -- Bug 1600155: Core dump due to newpackage() and matchfiles() -- Bug 1608895: resgen command shown -- Bug 1639730: Output filename is not set -- Bug 1729227: non-portable executable with relative library path -- Bug 1559951: default clean rule removes package dir -- Patch 1733674: PCH support for Code::Block targets (Ryan Pusztai) -- Patch 1746563: Ability to specify GUID for VS targets (Ryan Pusztai) -- Patch 1754867: Creating import lib of different name (Ryan Pusztai) - - ------ - 3.3 ------ - -- Added support for prebuild, prelink, and postbuild commands -- Added `target` global variable to script environment -- Added build flag `no-edit-and-continue` -- Added build flags `native-wchar` and `no-native-wchar` -- Added build flag `no-manifest` -- Added build flag `seh-exceptions` (VS2005 only) -- Added `resdefines`, `respaths`, and `resoptions` -- Added `prebuildcommands`, `prelinkcommands`, and `postbuildcommands` -- Added `pchheader` and `pchsource` (Visual Studio only) -- Feature 1337547: Package-level bindir and libdir -- Bug 1565755: Generated makefiles do not work with MSYS -- Bug 1587955: Target path ignored for libs -- Bug 1574725: Static library extension for "gnu" target -- Bug 1522861: Fixed by using "ar -rcs" instead of "ar -cr && ranlib" -- Bug 1656816: Mkdir set wrong directory rights -- Bug 1655595: Compile/build problem on FreeBSD -- Bug: "gnu" clean rule doesn't work in cmd.exe -- Improved behavior of Linux findlib() -- Updated Code::Blocks support to latest project version - (major="1" minor="6") -- Patch 1681666: GNU targets always show the console if kind = 'winexe' - - ------ - 3.2 ------ - -- Added support for Code::Blocks -- Updated MonoDevelop support -- Upgraded Lua to 5.0.3 -- Added new matchdirs() to Lua script environment -- Expose list of packages as _PACKAGES global in Lua -- Turn off edit-and-continue in release builds with symbols -- Bug 1559873: libpaths inserts extra space after -L - - ------ - 3.1 ------ - -- Added support for Visual Studio 2005 -- Added support for Windows resources to GNU make target -- Added path handling functions to Lua environment -- Added matchrecursive() for recursive file searches -- Added os.fileexists() function to Lua environment -- Added os.appendfile() function to Lua environment -- Changed `monoresgen` to `resgen` to keep up with Mono project -- Added `mono2` .NET compiler set for Mono .NET 2.0 support -- Feature 1096677: exclude files from matchfiles (package.excludes) -- Bug 1439463: VS2003 RTTI problem -- Bug 1439446: GNU Makefile problem under Mingw32 -- Bug 1422068: package.path="." causes bad makefiles -- Bug 1431530: makefile target fails when project path specified - - ------ - 3.0 ------ - -- Upgraded Lua interpreter to version 5.0.1 -- The options table now stores simple values, rather than tables -- Completed MonoDevelop support -- Improved .NET resource handling for GNU generator -- Added unit test suite -- Merged Scott Graham unicode build flag patch -- Removed package.warninglevel in favor of extra-warnings flag -- Added package.targetprefix -- Overhauled structure of generated GNU makefiles -- Added --os command line option -- Fixed bug 1268588: Use gcc to link C packages -- Fixed bug 1363306: GNU C# should copy referenced DLLs - - ------ - 2.4 ------ - -- Added chdir() to Lua script environment -- Merged Thomas Harning's patch for .NET resources on GNU -- Fixed bug 1194702: Can't put multiple packages in same directory -- Fixed bug in GNU shared library builds (doh!) -- Added target 'vs2002' to replace 'vs7' - - ------ - 2.3 ------ - -- Added 'project.config[]' with 'bindir' and 'libdir' -- Merged Scott Graham's "warninglevel" patch. -- Fixed bug 1153484: Import lib in wrong directory. -- Fixed bug 1013352: Stack overflow with large projects. -- Fixed bug 945406: package.files, bad value = crash - - ------ - 2.2 ------ - -- Worked around VS.NET bug for .NET assemblies > 64K. -- Added --very-verbose flag to GNU generator. -- GNU generator now supports assembly sources. - - ------ - 2.1 ------ - -- File extension of generated binaries can now be set - with config.targetextension. -- Windows targets now handle .def files for DLLs. - - ------ - 2.0 ------ - -- Can now specify build actions per file -- Include paths are now passed to VC7 resource compiler -- Removed _WIN32 define from Cygwin makefiles -- Added package.objdir to set intermediates directory -- Added rmdir() to Lua script environment -- A big bag of bug fixes - - ------ - 1.9 ------ - -- Made verbose mode even more verbose. -- posix.c now builds properly as C. -- Fixed package dependency generation for GNU and VS2003. -- Display Lua version number in usage text. -- Fixed VS link between *.aspx and *.aspx.cs files. -- Fixed VS link between *.resx and *.cs files. -- Fixed *.d file generation for gcc 2.9x. -- Unified various help options under '--help'. -- Bin and Lib paths can now be arbitrarily long. -- linkoptions are now applied in VC6 and VC7 projects. - - ------ - 1.8 ------ - -- Added support for ASP.NET projects. -- Fixed a bug in VC6 support for static libraries. -- matchfiles() now uses package path instead of script path. -- Added --verbose option. -- No longer apply no-rtti and no-exceptions to *.c files. - - ------ - 1.7 ------ - -- Location of generated project files can now be specified with - the project.path variable. -- Inter-package dependencies are fixed for GNU makefiles. -- No longer need to execute in same directory as project script. -- Added "c" language specifier. -- Added support for .resx and .config files to C# projects. -- Added support for full assembly names in .NET references. -- Fixed handling of paths in package.target variable. -- Improved support for SharpDevelop. -- Started support for OS X. -- Added support for Digital Mars compiler. - - -------- - 1.6.1 -------- - -- VS7 generator crashed if a package was built before one of its - dependencies. Now immediately assigns UUID before processing. - - ------ - 1.6 ------ - -- Added support for Visual Studio 2003 and SharpDevelop. -- Added binaries directory as a reference path for VS7. - - ------ - 1.5 ------ - -- Added initial support for building static libraries. -- Added "no-main" flag, prevents overriding WinMain() on - Windows builds. -- Added "--no-rtti" and "no-exceptions" build flags to - disable those C++ features. -- Display error message when project has no packages. -- Moved VC7 *.pdb files into intermediates directory. - - ------ - 1.4 ------ - -- Bug fixes to the path manipulation routines. -- GNU makefiles are regenerated when premake scripts change. - - ------ - 1.3 ------ - -- Added support for the Cygwin environment. -- Added "static-runtime" build flag to statically link against C/C++ - standard runtime libraries. -- Bug fixes to Visual Studio 6 and 7 generators and path reversing - algorithm. - - ------ - 1.2 ------ - -- Standardized format of command-line options. -- Can now handle custom command-line options in script. -- Added new function findlib(). -- Added new C++ build flag "managed" for writing C++ .NET code. -- Can now use open-source C# compilers in VS6 generator. -- Several bug fixes to the VS7 generator. - - ------ - 1.1 ------ - -- Added support for custom build configurations. Added "optimize", - "optimize-size", "optimize-speed", and "no-symbols" flags to control - build settings. -- Added matchfiles() to select files using wildcards. -- Added "unsafe" flag for C# projects. -- Added newpackage() function for creating new package objects inline, - instead of creating separate scripts. -- Changed include() to dopackage() and option() to addoption(). The old - versions have been kept for compatibility, but will be deprecated - eventually. -- Major cleanup of the source code. - - ------ - 1.0 ------ - -- Fixed a bug related to the reference paths in VS7 C# projects. -- Display a warning message if a reference path can't be found. -- Automatically create bin and lib directories if they do not exist. -- GNU C# projects will now properly use the configured library paths. - - -------- - 0.9.2 -------- - -- Added --with-mono and --with-pnet options. -- VS7 C# projects will now properly use the configured library paths. - - -------- - 0.9.1 -------- - -- Switched to Lua (http://www.lua.org/) for project script parsing. -- Add support for custom project options. -- Changed 'type' to 'kind' to avoid conflict with Lua function of the - same name. -- Changed 'conexe' to 'exe' because I liked it better. -- Changed 'library' to 'dll' for C# projects to keep things consistent. - - -------- - 0.9.0 -------- - -- Initial public release. diff --git a/build/premake/premake4/LICENSE.txt b/build/premake/premake4/LICENSE.txt deleted file mode 100644 index bb0f699690..0000000000 --- a/build/premake/premake4/LICENSE.txt +++ /dev/null @@ -1,27 +0,0 @@ -Copyright (c) 2003-2011 Jason Perkins and individual contributors. -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the Premake nor the names of its contributors may be - used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/build/premake/premake4/README.txt b/build/premake/premake4/README.txt deleted file mode 100644 index b5a4335644..0000000000 --- a/build/premake/premake4/README.txt +++ /dev/null @@ -1,15 +0,0 @@ -PREMAKE -A build configuration tool - - Copyright (C) 2002-2011 by Jason Perkins - Distributed under the terms of the BSD License, see LICENSE.txt - - The Lua language and runtime library is (C) TeCGraf, PUC-Rio. - See their website at http://www.lua.org/ - - - See the file BUILD.txt for instructions on building Premake. - - - For questions, comments, or more information, visit the project - website at http://industriousone.com/premake diff --git a/build/premake/premake4/bin/release/premake4.exe b/build/premake/premake4/bin/release/premake4.exe deleted file mode 100644 index 404914a1dd118f102a03335bbe6ad4df4f32f860..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 499200 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 z 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