Fix Windows build
Project: http://git-wip-us.apache.org/repos/asf/lucy/repo Commit: http://git-wip-us.apache.org/repos/asf/lucy/commit/074a9976 Tree: http://git-wip-us.apache.org/repos/asf/lucy/tree/074a9976 Diff: http://git-wip-us.apache.org/repos/asf/lucy/diff/074a9976 Branch: refs/heads/c-bindings-cfc Commit: 074a99761c4abfaa98df9231966cd0fce56a9bac Parents: 369a995 Author: Nick Wellnhofer <[email protected]> Authored: Tue Feb 12 22:13:58 2013 +0100 Committer: Nick Wellnhofer <[email protected]> Committed: Tue Feb 12 23:03:17 2013 +0100 ---------------------------------------------------------------------- charmonizer/src/Charmonizer/Core/Make.c | 30 +++++++++++++++++----- clownfish/compiler/common/charmonizer.main | 9 ++++++- clownfish/compiler/src/CFCUtil.c | 6 ---- 3 files changed, 31 insertions(+), 14 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/lucy/blob/074a9976/charmonizer/src/Charmonizer/Core/Make.c ---------------------------------------------------------------------- diff --git a/charmonizer/src/Charmonizer/Core/Make.c b/charmonizer/src/Charmonizer/Core/Make.c index a005d73..3470af1 100644 --- a/charmonizer/src/Charmonizer/Core/Make.c +++ b/charmonizer/src/Charmonizer/Core/Make.c @@ -14,6 +14,7 @@ * limitations under the License. */ +#include <ctype.h> #include <string.h> #include "Charmonizer/Core/Make.h" #include "Charmonizer/Core/Compiler.h" @@ -324,7 +325,7 @@ chaz_MakeFile_write(chaz_MakeFile *makefile) { fprintf(file, "clean :\n"); for (i = 0; makefile->cleanups[i]; i++) { const char *cleanup = makefile->cleanups[i]; - fprintf(file, "\tfor %%i in (%s) do if exist %%i del /f %%i\n", + fprintf(file, "\tfor %%i in (%s) do @if exist %%i del /f %%i\n", cleanup); } fprintf(file, "\n"); @@ -336,17 +337,28 @@ chaz_MakeFile_write(chaz_MakeFile *makefile) { fprintf(file, "distclean : clean\n"); if (shell_type == CHAZ_OS_POSIX) { - fprintf(file, "\trm -f charmonizer charmony.h Makefile\n\n"); + fprintf(file, "\trm -f charmonizer$(EXE_EXT) charmony.h Makefile\n\n"); } else if (shell_type == CHAZ_OS_CMD_EXE) { fprintf(file, - "\tfor %%i in (charmonizer charmony.h Makefile) do" - " if exist %%i del /f %%i\n\n"); + "\tfor %%i in (charmonizer$(EXE_EXT) charmonizer$(OBJ_EXT)" + " charmony.h Makefile) do @if exist %%i del /f %%i\n\n"); } else { chaz_Util_die("Unsupported shell type: %d", shell_type); } + if (chaz_Make.is_nmake) { + /* Inference rule for .c files. */ + fprintf(file, ".c.obj :\n"); + if (chaz_CC_msvc_version_num()) { + fprintf(file, "\t$(CC) $(CFLAGS) /c $< /Fo$@\n\n"); + } + else { + fprintf(file, "\t$(CC) $(CFLAGS) -c $< -o $@\n\n"); + } + } + fclose(file); } @@ -520,7 +532,7 @@ chaz_Make_list_files(const char *dir, const char *ext, * path of the directory. This is done by using the variable * substitution feature of the 'for' command. */ - pattern = "for %%I in (%s) do echo %%~fI"; + pattern = "for %%I in (%s) do @echo %%~fI"; command_size = strlen(pattern) + strlen(dir) + 10; command = (char*)malloc(command_size); sprintf(command, pattern, dir); @@ -528,7 +540,10 @@ chaz_Make_list_files(const char *dir, const char *ext, free(command); if (!output) { chaz_Util_die("Failed to find absolute path"); } - prefix_len = strcspn(output, "\r\n"); + /* Strip whitespace from end of output. */ + for (prefix_len = output_len; prefix_len > 0; --prefix_len) { + if (!isspace(output[prefix_len-1])) { break; } + } prefix = (char*)malloc(prefix_len + 2); memcpy(prefix, output, prefix_len); prefix[prefix_len++] = '\\'; @@ -542,7 +557,8 @@ chaz_Make_list_files(const char *dir, const char *ext, if (strlen(file) <= prefix_len || memcmp(file, prefix, prefix_len) != 0 ) { - chaz_Util_die("Unexpected file name"); + chaz_Util_die("Expected prefix '%s' for file name '%s'", prefix, + file); } callback(file + prefix_len, context); http://git-wip-us.apache.org/repos/asf/lucy/blob/074a9976/clownfish/compiler/common/charmonizer.main ---------------------------------------------------------------------- diff --git a/clownfish/compiler/common/charmonizer.main b/clownfish/compiler/common/charmonizer.main index 4e9b028..4b45c3a 100644 --- a/clownfish/compiler/common/charmonizer.main +++ b/clownfish/compiler/common/charmonizer.main @@ -23,7 +23,11 @@ #include "Charmonizer/Probe.h" #include "Charmonizer/Probe/Integers.h" -#define DIR_SEP "/" +#if defined(_WIN32) && !defined(__CYGWIN__) + #define DIR_SEP "\\" +#else + #define DIR_SEP "/" +#endif typedef struct SourceFileContext { chaz_MakeVar *common_objs; @@ -134,6 +138,9 @@ S_write_makefile() { chaz_MakeFile_add_var(makefile, "CC", chaz_CC_get_cc()); + if (chaz_CC_msvc_version_num()) { + chaz_CC_add_extra_cflags("/nologo"); + } chaz_CC_set_optimization_level("2"); chaz_CC_add_include_dir("."); chaz_CC_add_include_dir("$(INCLUDE_DIR)"); http://git-wip-us.apache.org/repos/asf/lucy/blob/074a9976/clownfish/compiler/src/CFCUtil.c ---------------------------------------------------------------------- diff --git a/clownfish/compiler/src/CFCUtil.c b/clownfish/compiler/src/CFCUtil.c index c373382..7d8f7a5 100644 --- a/clownfish/compiler/src/CFCUtil.c +++ b/clownfish/compiler/src/CFCUtil.c @@ -335,12 +335,6 @@ CFCUtil_make_path(const char *path) { size_t orig_len = strlen(target); size_t len = orig_len; for (size_t i = 0; i <= len; i++) { -#ifndef WIN32 - if (target[i] == '\\') { - i++; - continue; - } -#endif if (target[i] == CHY_DIR_SEP_CHAR || i == len) { target[i] = 0; // NULL-terminate. struct stat stat_buf;
