Repository: lucy-charmonizer Updated Branches: refs/heads/master bc6b920f9 -> 998a1d11a
Try to execute small test file Also test whether it's possible to execute compiled executables before running any probes. Project: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/repo Commit: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/commit/998a1d11 Tree: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/tree/998a1d11 Diff: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/diff/998a1d11 Branch: refs/heads/master Commit: 998a1d11ae492cd8ecb8a4301fc72259887067ee Parents: bc6b920 Author: Nick Wellnhofer <[email protected]> Authored: Thu Apr 9 14:17:42 2015 +0200 Committer: Nick Wellnhofer <[email protected]> Committed: Thu Apr 9 14:28:53 2015 +0200 ---------------------------------------------------------------------- src/Charmonizer/Core/Compiler.c | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/998a1d11/src/Charmonizer/Core/Compiler.c ---------------------------------------------------------------------- diff --git a/src/Charmonizer/Core/Compiler.c b/src/Charmonizer/Core/Compiler.c index 17ca3e8..ea482b2 100644 --- a/src/Charmonizer/Core/Compiler.c +++ b/src/Charmonizer/Core/Compiler.c @@ -14,6 +14,7 @@ * limitations under the License. */ +#include <errno.h> #include <string.h> #include <stdlib.h> #include "Charmonizer/Core/Util.h" @@ -58,6 +59,7 @@ void chaz_CC_init(const char *compiler_command, const char *compiler_flags) { const char *code = "int main() { return 0; }\n"; int compile_succeeded = 0; + int retval = -1; if (chaz_Util_verbosity) { printf("Creating compiler object...\n"); } @@ -71,23 +73,37 @@ chaz_CC_init(const char *compiler_command, const char *compiler_flags) { chaz_CC.try_exe_name = chaz_Util_join("", CHAZ_CC_TRY_BASENAME, chaz_OS_exe_ext(), NULL); - /* If we can't compile anything, game over. */ + /* If we can't compile or execute anything, game over. */ if (chaz_Util_verbosity) { - printf("Trying to compile a small test file...\n"); + printf("Trying to compile and execute a small test file...\n"); + } + if (!chaz_Util_remove_and_verify(chaz_CC.try_exe_name)) { + chaz_Util_die("Failed to delete file '%s'", chaz_CC.try_exe_name); } /* Try MSVC argument style. */ strcpy(chaz_CC.obj_ext, ".obj"); chaz_CC.cflags_style = CHAZ_CFLAGS_STYLE_MSVC; - compile_succeeded = chaz_CC_test_compile(code); + compile_succeeded = chaz_CC_compile_exe(CHAZ_CC_TRY_SOURCE_PATH, + CHAZ_CC_TRY_BASENAME, code); if (!compile_succeeded) { /* Try POSIX argument style. */ strcpy(chaz_CC.obj_ext, ".o"); chaz_CC.cflags_style = CHAZ_CFLAGS_STYLE_POSIX; - compile_succeeded = chaz_CC_test_compile(code); + compile_succeeded = chaz_CC_compile_exe(CHAZ_CC_TRY_SOURCE_PATH, + CHAZ_CC_TRY_BASENAME, code); } if (!compile_succeeded) { chaz_Util_die("Failed to compile a small test file"); } + retval = chaz_OS_run_local_redirected(chaz_CC.try_exe_name, + chaz_OS_dev_null()); + chaz_Util_remove_and_verify(chaz_CC.try_exe_name); + if (retval < 0) { + chaz_Util_die("Failed to execute test file (errno=%d)", errno); + } + if (retval > 0) { + chaz_Util_die("Unexpected exit code %d from test file", retval); + } chaz_CC_detect_known_compilers();
