mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
setup.mak: -runtime-
* win32/setup.mak (-runtime-): see msvcrt from link header on mswin instead of running testing executable file, for cross compiling. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@38791 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
9f7717e836
commit
8d816aef2e
3 changed files with 29 additions and 63 deletions
|
@ -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
|
||||
|
|
18
win32/rtname.cmd
Normal file
18
win32/rtname.cmd
Normal file
|
@ -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
|
|
@ -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)
|
||||
|
|
Loading…
Reference in a new issue