summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--win32/rtname.cmd18
-rw-r--r--win32/setup.mak69
3 files changed, 29 insertions, 63 deletions
diff --git a/ChangeLog b/ChangeLog
index 1628d8afdc..a80ddc6b8f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Sat Jan 12 16:12:46 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * win32/setup.mak (-runtime-): see msvcrt from link header on mswin
+ instead of running testing executable file, for cross compiling.
+
Sat Jan 12 08:58:47 2013 Aaron Patterson <aaron@tenderlovemaking.com>
* ext/psych/lib/psych/visitors/to_ruby.rb: merge key values that
diff --git a/win32/rtname.cmd b/win32/rtname.cmd
new file mode 100644
index 0000000000..1f410a02db
--- /dev/null
+++ b/win32/rtname.cmd
@@ -0,0 +1,18 @@
+@echo off
+set rt=
+set rtver=
+set osver=
+for /f "usebackq" %%I in (`dumpbin -dependents %1 ^| findstr -r -i "\<msvcr.*\.dll$"`) do set rt=%%~nI
+if "%rt%" == "" (
+ (echo %0: %1 is not linked to msvcrt) 1>&2
+ exit 1
+)
+for %%i in (a b c d e f g h i j k l m n o p q r s t u v w x y z) do @call set rt=%%rt:%%i=%%i%%
+if "%rt%" == "msvcrt" (
+ call set rtver=60
+) else (
+ call set rtver=%%rt:msvcr=%%
+ call set rt=msvcr%%rtver%%
+ call set osver=_%%rtver%%
+)
+for %%I in ("PLATFORM = $(TARGET_OS)%osver%" "RT = %rt%" "RT_VER = %rtver%") do @echo %%~I
diff --git a/win32/setup.mak b/win32/setup.mak
index 7c69334581..515271b85e 100644
--- a/win32/setup.mak
+++ b/win32/setup.mak
@@ -77,10 +77,10 @@ USE_RUBYGEMS = $(USE_RUBYGEMS)
-system-vars64-: -osname64- -runtime-
-osname32-: nul
- @echo TARGET_OS = mswin32 >>$(MAKEFILE)
+ @echo TARGET_OS = mswin32>>$(MAKEFILE)
-osname64-: nul
- @echo TARGET_OS = mswin64 >>$(MAKEFILE)
+ @echo TARGET_OS = mswin64>>$(MAKEFILE)
-osname-: nul
@echo !ifndef TARGET_OS>>$(MAKEFILE)
@@ -93,69 +93,12 @@ USE_RUBYGEMS = $(USE_RUBYGEMS)
@$(WIN32DIR:/=\)\rm.bat conftest.*
-runtime-: nul
- @$(CC) -MD <<rtname.c user32.lib -link > nul
-#include <windows.h>
-#include <memory.h>
-#include <string.h>
-#include <stddef.h>
+ @$(CC) -MD <<conftest.c user32.lib -link > nul
#include <stdio.h>
-#include <stdlib.h>
-#ifndef MAXPATHLEN
-# define MAXPATHLEN 1024
-#endif
-
-int
-runtime_name()
-{
- char libpath[MAXPATHLEN+1];
- char *p, *base = NULL, *ver = NULL;
- HMODULE msvcrt = NULL;
- MEMORY_BASIC_INFORMATION m;
-
- memset(&m, 0, sizeof(m));
- if (VirtualQuery(stdin, &m, sizeof(m)) && m.State == MEM_COMMIT)
- msvcrt = (HMODULE)m.AllocationBase;
- GetModuleFileName(msvcrt, libpath, sizeof libpath);
-
- libpath[sizeof(libpath) - 1] = '\0';
- for (p = libpath; *p; p = CharNext(p)) {
- if (*p == '\\') {
- base = ++p;
- }
- }
- if (!base) return 0;
- if (p = strchr(base, '.')) *p = '\0';
- for (p = base; *p; p = CharNext(p)) {
- if (!isascii(*p)) continue;
- if (isupper(*p)) {
- *p = tolower(*p);
- }
- if (!isdigit(*p)) {
- ver = NULL;
- } else if (!ver) {
- ver = p;
- }
- }
- if (ver) {
- printf("PLATFORM = $$(TARGET_OS)_%s\n", ver);
- }
- else {
- printf("PLATFORM = $$(TARGET_OS)\n");
- ver = "60";
- }
- printf("RT = %s\n", base);
- printf("RT_VER = %s\n", ver);
- return 1;
-}
-
-int main(int argc, char **argv)
-{
- if (!runtime_name()) return EXIT_FAILURE;
- return EXIT_SUCCESS;
-}
+int main(void) {FILE *volatile f = stdin; return 0;}
<<
- @.\rtname >>$(MAKEFILE)
- @for %I in (rtname.*) do @del %I
+ @$(WIN32DIR:/=\)\rtname conftest.exe >>$(MAKEFILE)
+ @$(WIN32DIR:/=\)\rm.bat conftest.*
-version-: nul
@$(APPEND)