-- -- tests/test_gcc.lua -- Automated test suite for the GCC toolset interface. -- Copyright (c) 2009-2013 Jason Perkins and the Premake project -- T.tools_gcc = { } local suite = T.tools_gcc local gcc = premake.tools.gcc local project = premake5.project -- -- Setup/teardown -- local sln, prj, cfg function suite.setup() sln = test.createsolution() system "Linux" end local function prepare() prj = premake.solution.getproject_ng(sln, 1) cfg = premake5.project.getconfig(prj, "Debug") end -- -- Check the selection of tools based on the target system. -- function suite.tools_onDefaults() prepare() test.isnil(gcc.gettoolname(cfg, "cc")) test.isnil(gcc.gettoolname(cfg, "cxx")) test.isnil(gcc.gettoolname(cfg, "ar")) end function suite.tools_onPS3() system "PS3" prepare() test.isequal("ppu-lv2-g++", gcc.gettoolname(cfg, "cc")) test.isequal("ppu-lv2-g++", gcc.gettoolname(cfg, "cxx")) test.isequal("ppu-lv2-ar", gcc.gettoolname(cfg, "ar")) end -- -- By default, the -MMD -MP are used to generate dependencies. -- function suite.cppflags_defaultWithMMD() prepare() test.isequal({"-MMD", "-MP"}, gcc.getcppflags(cfg)) end -- -- Haiku OS doesn't support the -MP flag yet (that's weird, isn't it?) -- function suite.cppflagsExcludeMP_onHaiku() system "Haiku" prepare() test.isequal({ "-MMD" }, gcc.getcppflags(cfg)) end -- -- Check the translation of CFLAGS. -- function suite.cflags_onEnableSSE() flags { "EnableSSE" } prepare() test.isequal({ "-msse" }, gcc.getcflags(cfg)) end function suite.cflags_onFatalWarnings() flags { "FatalWarnings" } prepare() test.isequal({ "-Werror" }, gcc.getcflags(cfg)) end -- -- Check the translation of CXXFLAGS. -- function suite.cflags_onNoExceptions() flags { "NoExceptions" } prepare() test.isequal({ "-fno-exceptions" }, gcc.getcxxflags(cfg)) end -- -- Check the basic translation of LDFLAGS for a Posix system. -- function suite.ldflags_defaultOnLinux() prepare() test.isequal({ "-s" }, gcc.getldflags(cfg)) end function suite.ldflags_onSymbols() flags { "Symbols" } prepare() test.isequal({}, gcc.getldflags(cfg)) end function suite.ldflags_onSharedLib() kind "SharedLib" prepare() test.isequal({ "-s", "-shared" }, gcc.getldflags(cfg)) end -- -- Check Mac OS X variants on LDFLAGS. -- function suite.ldflags_onMacOSXStrip() system "MacOSX" prepare() test.isequal({ "-Wl,-x" }, gcc.getldflags(cfg)) end function suite.ldflags_onMacOSXSharedLib() system "MacOSX" kind "SharedLib" prepare() test.isequal({ "-Wl,-x", "-dynamiclib" }, gcc.getldflags(cfg)) end -- -- Check Windows variants on LDFLAGS. -- function suite.ldflags_onWindowsharedLib() system "Windows" kind "SharedLib" prepare() test.isequal({ "-s", "-shared", '-Wl,--out-implib="MyProject.lib"' }, gcc.getldflags(cfg)) end function suite.ldflags_onWindowsApp() system "Windows" kind "WindowedApp" prepare() test.isequal({ "-s", "-mwindows" }, gcc.getldflags(cfg)) end -- -- Make sure system or architecture flags are added properly. -- function suite.cflags_onX32() architecture "x32" prepare() test.isequal({ "-m32" }, gcc.getcflags(cfg)) end function suite.ldflags_onX32() architecture "x32" prepare() test.isequal({ "-s", "-m32", "-L/usr/lib32" }, gcc.getldflags(cfg)) end function suite.cflags_onX64() architecture "x64" prepare() test.isequal({ "-m64" }, gcc.getcflags(cfg)) end function suite.ldflags_onX64() architecture "x64" prepare() test.isequal({ "-s", "-m64", "-L/usr/lib64" }, gcc.getldflags(cfg)) end -- -- Non-Windows shared libraries should marked as position independent. -- function suite.cflags_onWindowsSharedLib() system "MacOSX" kind "SharedLib" prepare() test.isequal({ "-fPIC" }, gcc.getcflags(cfg)) end -- -- Check the formatting of linked system libraries. -- function suite.links_onSystemLibs() links { "fs_stub", "net_stub" } prepare() test.isequal({ "-lfs_stub", "-lnet_stub" }, gcc.getlinks(cfg)) end function suite.links_onFramework() links { "Cocoa.framework" } prepare() test.isequal({ "-framework Cocoa" }, gcc.getlinks(cfg)) end -- -- When linking to a static sibling library, the relative path to the library -- should be used instead of the "-l" flag. This prevents linking against a -- shared library of the same name, should one be present. -- function suite.links_onStaticSiblingLibrary() links { "MyProject2" } test.createproject(sln) system "Linux" kind "StaticLib" targetdir "lib" prepare() test.isequal({ "lib/libMyProject2.a" }, gcc.getlinks(cfg)) end -- -- Use the -lname format when linking to sibling shared libraries. -- function suite.links_onSharedSiblingLibrary() links { "MyProject2" } test.createproject(sln) system "Linux" kind "SharedLib" targetdir "lib" prepare() test.isequal({ "lib/libMyProject2.so" }, gcc.getlinks(cfg)) end -- -- When linking object files, leave off the "-l". -- function suite.links_onObjectFile() links { "generated.o" } prepare() test.isequal({ "generated.o" }, gcc.getlinks(cfg)) end -- -- If the object file is referenced with a path, it should be -- made relative to the project. -- function suite.links_onObjectFileOutsideProject() location "MyProject" links { "obj/Debug/generated.o" } prepare() test.isequal({ "../obj/Debug/generated.o" }, gcc.getlinks(cfg)) end -- -- Make sure shell variables are kept intact for object file paths. -- function suite.links_onObjectFileWithShellVar() location "MyProject" links { "$(IntDir)/generated.o" } prepare() test.isequal({ "$(IntDir)/generated.o" }, gcc.getlinks(cfg)) end -- -- Include directories should be made project relative. -- function suite.includeDirsAreRelative() includedirs { "../include", "src/include" } prepare() test.isequal({ "-I../include", "-Isrc/include" }, gcc.getincludedirs(cfg, cfg.includedirs)) end -- -- Skip external projects when building the list of linked -- libraries, since I don't know the actual output target. -- function suite.skipsExternalProjectRefs() links { "MyProject2" } external "MyProject2" kind "StaticLib" language "C++" prepare() test.isequal({}, gcc.getlinks(cfg, false)) end -- -- Check handling of forced includes. -- function suite.forcedIncludeFiles() forceincludes { "stdafx.h", "include/sys.h" } prepare() test.isequal({"-MMD", "-MP", '-include "stdafx.h"', '-include "include/sys.h"'}, gcc.getcppflags(cfg)) end