Files
ruby/win32/Makefile.sub
Hiroshi SHIBATAandClaude Opus 5.5 4b95d69fc4 Reject incompatible pointer types on mswin
An extension passing a long * to rb_range_beg_len() or another output parameter of rb_len_t * would have 8 bytes written into a 4-byte variable. C4133 reaches extensions through the warnflags in RbConfig, so they now fail to compile instead.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 16:07:39 +09:00

1568 lines
45 KiB
Makefile

# -*- mode: makefile; indent-tabs-mode: t -*-
SHELL = $(COMSPEC)
ECHO1 = $(V:1=@:)
RUNCMD = $(COMSPEC) /c
MKFILES = Makefile verconf.mk
NULLCMD = exit /b0. # exit ignores the rest
NULL = nul
CHDIR = cd
PATH_SEPARATOR = ;
TZ = # skip timezone tests
PWD = $(MAKEDIR)
empty =
tooldir = $(srcdir)/tool
nmake = yes
PROMPT = +$$S
MAKEFLAGS = l$(MAKEFLAGS)
!ifndef MFLAGS
MFLAGS=-l
!endif
!if "$(HAVE_BASERUBY)" == "no"
BASERUBY =
!else if "$(BASERUBY)" == ""
# After `nmake`, just built `ruby.exe` exists in the build directory,
# and is searched first prior to $PATH. Assume that no ruby
# executable in $(tooldir).
! if [cd $(tooldir) && ruby missing-baseruby.bat 2> nul]
! else if [(cd $(tooldir) && for %I in (ruby.exe) do @echo BASERUBY = %~s$$PATH:I) > baseruby.mk]
! else if exist(baseruby.mk)
! include baseruby.mk
! endif
! if [del baseruby.mk 2> nul]
! endif
!else if [($(BASERUBY) $(tooldir)/missing-baseruby.bat) > nul 2> nul]
BASERUBY =
!endif
!if "$(BASERUBY)" == ""
BASERUBY = $(tooldir:/=\)\missing-baseruby.bat
HAVE_BASERUBY = no
!else
HAVE_BASERUBY = yes
!endif
!if "$(HAVE_BASERUBY)" == "yes"
DEPENDENCIES_DIR = .deps
!else
DEPENDENCIES_DIR = $(srcdir)
!endif
!ifndef REVISION_FORCE
!if "$(HAVE_BASERUBY)" == "yes"
REVISION_FORCE = PHONY
!endif
!endif
!ifndef CROSS_COMPILING
CROSS_COMPILING = no
!else if "$(CROSS_COMPILING)" == "yes"
! if "$(HAVE_BASERUBY)" != "yes"
! error executable host ruby is required for cross-compiling
! endif
!else
! if "$(CROSS_COMPILING)" != "no"
! error Bad CROSS_COMPILING
! endif
!endif
!ifndef win_srcdir
win_srcdir = $(srcdir)/win32
!endif
!if exist(verconf.mk)
! include verconf.mk
!endif
#### Start of system configuration section. ####
!if defined(pathlist)
PATH = $(pathlist:;=/bin;)$(PATH)
INCLUDE = $(pathlist:;=/include;)
LIB = $(pathlist:;=/lib;)
!endif
## variables may be overridden by $(compile_dir)/Makefile
!ifndef srcdir
srcdir = ..
!endif
!ifndef RUBY_BASE_NAME
RUBY_BASE_NAME = ruby
!endif
!ifndef RUBY_INSTALL_NAME
RUBY_INSTALL_NAME = $(PROGRAM_PREFIX)$(RUBY_BASE_NAME)$(PROGRAM_SUFFIX)
!endif
!if !defined(RUBYW_INSTALL_NAME) || "$(RUBYW_INSTALL_NAME)" == "$(RUBY_INSTALL_NAME)"
RUBYW_INSTALL_NAME = $(RUBY_INSTALL_NAME:ruby=rubyw)
!endif
!if "$(RUBYW_INSTALL_NAME)" == "$(RUBY_INSTALL_NAME)"
RUBYW_INSTALL_NAME = $(RUBY_INSTALL_NAME)w
!endif
STUBPROGRAM = rubystub$(EXEEXT)
!if !defined(icondirs) && defined(ICONDIRS)
icondirs=$(ICONDIRS)
!endif
!if defined(icondirs)
icondirs=$(icondirs:\=/)
iconinc=-I$(icondirs: = -I)
!endif
###############
.SUFFIXES: .def .lib
!if !defined(CC)
CC = cl -nologo
!endif
!if !defined(CPP) || "$(CPP)" == "cl"
CPP = $(CC) -E
!endif
!if !defined(LRAMA)
LRAMA = $(BASERUBY) $(top_srcdir)/tool/lrama/exe/lrama
!endif
AR = lib -nologo
PURIFY =
AUTOCONF = autoconf
LASTREV = $(COMSPEC) /C $(srcdir:/=\)\win32\lastrev.bat
IFCHANGE = $(COMSPEC) /C $(srcdir:/=\)\win32\ifchange.bat
RM = $(COMSPEC) /C $(srcdir:/=\)\win32\rm.bat
RM1 = del
RMDIR = $(COMSPEC) /C $(srcdir:/=\)\win32\rmdirs.bat
RMDIRS = $(COMSPEC) /C $(srcdir:/=\)\win32\rmdirs.bat -p
RMALL = $(COMSPEC) /C $(srcdir:/=\)\win32\rm.bat -f -r
MAKEDIRS = $(COMSPEC) /E:ON /C $(srcdir:/=\)\win32\makedirs.bat
TOUCH = $(BASERUBY) -run -e touch --
CP = copy > nul
MV = move > nul
RM1 = del /f /q
!if !defined(TEST_RUNNABLE)
TEST_RUNNABLE = yes
!endif
CAT_DEPEND = type
!if !defined(MSC_VER)
! error MSC_VER not defined. Retry from configure pass.
!else if $(MSC_VER) < 1915
! error MSVC $(MSC_VER) is not supported. 1915 (Visual Studio 2017 version 15.8) or later is required for the conforming preprocessor.
!endif
!if defined(CLANG_VER)
!if $(CLANG_VER) < 15
! error clang-cl $(CLANG_VER) is not supported. 15 or later is required for pragma optimize, which RB_GC_GUARD relies on.
!endif
!endif
!if !defined(MACHINE)
MACHINE = x86
!endif
!if "$(MACHINE)" == "x86"
!if !defined(PROCESSOR_LEVEL)
PROCESSOR_LEVEL = 5
!endif
!if 6 < $(PROCESSOR_LEVEL)
PROCESSOR_LEVEL = 6
!endif
CPU = i$(PROCESSOR_LEVEL)86
ARCH = i386
!else
CPU = $(MACHINE)
ARCH = $(MACHINE)
!endif
!if !defined(DEBUGFLAGS)
DEBUGFLAGS = -Zi
!endif
!if "$(RUBY_DEVEL)" == "yes"
XCFLAGS = $(XCFLAGS) -DRUBY_DEVEL=1
!endif
!if "$(modular_gc_dir)" != ""
XCFLAGS = $(XCFLAGS) -Dmodular_gc_dir="$(modular_gc_dir)"
!endif
!if !defined(OPTFLAGS)
!if defined(CLANG_VER)
# clang-cl takes -O2sy- as -Os
OPTFLAGS = -O2 -Oy-
!else
OPTFLAGS = -O2sy-
!endif
!endif
OPTFLAGS = $(OPTFLAGS) -Zc:inline
!if !defined(incflags)
incflags =
!endif
!if !defined(PLATFORM)
PLATFORM = mswin32
!endif
!if !defined(RT)
!error RT not defined. Retry from configure pass.
!else if $(RT_VER) < 140
! error Runtime library $(RT_VER) is not supported
!endif
!ifndef NTVER
NTVER = _WIN32_WINNT_WIN10
!endif
!ifdef NTVER
ARCHDEFS = -D_WIN32_WINNT=$(NTVER) $(ARCHDEFS)
!endif
!if !defined(PLATFORM_DIR)
PLATFORM_DIR = win32
!endif
arch = $(ARCH)-$(PLATFORM)
sitearch = $(ARCH)-$(RT)
!if !defined(ruby_version)
ruby_version = $(MAJOR).$(MINOR).0
!endif
!if defined(ABI_VERSION)
ruby_version = $(ruby_version)+$(ABI_VERSION)
!endif
RUBY_PROGRAM_VERSION = $(MAJOR).$(MINOR).$(TEENY)
!ifndef RUBY_SO_NAME
RUBY_SO_NAME = $(RT)-$(RUBY_BASE_NAME)$(MAJOR)$(MINOR)0
!if "$(ARCH)" != "i386"
RUBY_SO_NAME = $(ARCH)-$(RUBY_SO_NAME)
!endif
!endif
!ifndef RUBY_PLATFORM
RUBY_PLATFORM = $(arch)
!endif
!if !defined(prefix)
prefix = /usr
!endif
!if !defined(exec_prefix)
exec_prefix = $(prefix)
!endif
!if !defined(libdir_basename)
libdir_basename = lib
!endif
!if !defined(libdir)
libdir = $(exec_prefix)/$(libdir_basename)
!endif
!if !defined(datadir)
datadir = $(prefix)/share
!endif
!ifndef EXTOUT
EXTOUT = .ext
!endif
!ifndef TESTUI
TESTUI = console
!endif
!ifndef TESTS
TESTS =
!endif
!ifndef CAPITARGET
! ifdef DOXYGEN
CAPITARGET = capi
! else
CAPITARGET = nodoc
! endif
!endif
!ifndef DOCTARGETS
! if "$(RDOCTARGET)" == "rdoc" || "$(RDOCTARGET)" == ""
DOCTARGETS = $(DOCTARGETS) rdoc
! endif
! if "$(CAPITARGET)" == "capi"
DOCTARGETS = $(DOCTARGETS) capi
! endif
!endif
!ifndef INSTALLDOC
! if "$(DOCTARGETS)" != ""
INSTALLDOC = all
! else
INSTALLDOC = nodoc
DOCTARGETS = nodoc
! endif
!endif
!if !defined(OUTFLAG)
OUTFLAG = -Fe
!endif
!if !defined(COUTFLAG)
COUTFLAG = -Fo
!endif
!if !defined(CPPOUTFLAG)
CPPOUTFLAG = -Fi
!endif
!if !defined(CSRCFLAG)
CSRCFLAG = -Tc
!endif
!if !defined(RUNTIMEFLAG)
RUNTIMEFLAG = -MD
!endif
!if !defined(COMPILERFLAG)
COMPILERFLAG = -Zm600
!endif
!if !defined(WARNFLAGS)
WARNFLAGS = -W2 -wd4100 -wd4127 -wd4210 -wd4214 -wd4255 -wd4574 \
-wd4668 -wd4710 -wd4711 -wd4820 -wd4996 \
-we4028 -we4142 -we4047 -we4013 -we4133
!if $(MSC_VER) >= 1944
# https://developercommunity.visualstudio.com/t/warning-C5287:-operands-are-different-e/10877942
WARNFLAGS = $(WARNFLAGS) -wd5287
!endif
!endif
WERRORFLAG = -WX
!if !defined(CFLAGS_NO_ARCH)
CFLAGS_NO_ARCH = $(RUNTIMEFLAG) $(DEBUGFLAGS) $(WARNFLAGS) $(OPTFLAGS) $(COMPILERFLAG)
!endif
!if !defined(CFLAGS)
CFLAGS = $(CFLAGS_NO_ARCH) $(ARCH_FLAG)
!endif
!if !defined(CXXFLAGS)
CXXFLAGS = $(CFLAGS)
!endif
!if !defined(LDFLAGS)
LDFLAGS = -incremental:no -debug -opt:ref -opt:icf
!endif
XLDFLAGS = -stack:$(STACK) $(XLDFLAGS)
!if !defined(RFLAGS)
RFLAGS = -r
!endif
!if !defined(EXTLIBS)
EXTLIBS =
!endif
!if !defined(EXTSOLIBS)
EXTSOLIBS =
!endif
!if !defined(LIBS)
LIBS = user32.lib advapi32.lib shell32.lib ws2_32.lib
LIBS = $(LIBS) iphlpapi.lib
!if defined(USE_GMP)
LIBS = $(LIBS) gmp.lib
!endif
LIBS = $(LIBS) imagehlp.lib shlwapi.lib bcrypt.lib $(EXTLIBS)
!endif
!if !defined(MISSING)
MISSING = crypt.obj ffs.obj lgamma_r.obj strlcat.obj strlcpy.obj win32/win32.obj win32/file.obj setproctitle.obj
MISSING = $(MISSING) explicit_bzero.obj memrchr.obj
!endif
DLNOBJS = dln.obj
!if "$(YJIT_SUPPORT)" == "yes"
!if "$(ARCH)" != "x64"
!error YJIT is supported only on x64, not $(ARCH). Retry without --enable-yjit.
!endif
!if !defined(RUSTC)
RUSTC = rustc
!endif
YJIT_OBJ = yjit.$(OBJEXT)
JIT_OBJ = jit.$(OBJEXT)
YJIT_LIBS = target/release/yjit.lib
RUST_LIB = $(YJIT_LIBS)
# Not archived into $(LIBRUBY_A), whose every symbol mkexports.rb exports.
# After $(LIBS), so C code imports imagehlp.dll, which loads dbghelp lazily.
JIT_LIBS = $(RUST_LIB) ntdll.lib userenv.lib dbghelp.lib
!if !defined(INSTALL_STATIC_LIBRARY)
INSTALL_STATIC_LIBRARY = no
!elseif "$(INSTALL_STATIC_LIBRARY)" != "no"
!error YJIT does not support the static library. Retry without --enable-install-static-library.
!endif
# Explicit, so that a windows-gnu default toolchain does not build libyjit.a.
JIT_RUST_FLAGS = --crate-type=staticlib --target=x86_64-pc-windows-msvc --cfg feature=\"stats_allocator\"
!if !defined(RUSTC_FLAGS)
RUSTC_FLAGS = -g -C lto=thin -C opt-level=3 -C overflow-checks=on
!endif
!elseif defined(YJIT_SUPPORT) && "$(YJIT_SUPPORT)" != "no"
!error YJIT_SUPPORT accepts only yes or no, not $(YJIT_SUPPORT). Retry without YJIT_SUPPORT=$(YJIT_SUPPORT).
!else
YJIT_SUPPORT = no
!if !defined(RUSTC)
RUSTC = no
!endif
!endif
!if !defined(INSTALL_STATIC_LIBRARY)
INSTALL_STATIC_LIBRARY = yes
!endif
!if "$(ARCH)" == "x64"
COROUTINE_OBJ = coroutine/win64/Context.obj
COROUTINE_SRC = $(COROUTINE_OBJ:.obj=.asm)
!elseif "$(ARCH)" == "i386"
COROUTINE_OBJ = coroutine/win32/Context.obj
COROUTINE_SRC = $(COROUTINE_OBJ:.obj=.asm)
!elseif "$(ARCH)" == "arm64"
COROUTINE_OBJ = coroutine/arm64/Context.obj
COROUTINE_SRC = $(COROUTINE_OBJ:.obj=.asm)
!else
!error copy coroutine has been replaced with pthread implementation at 42130a64f02294dc8025af3a51bda518c67ab33d
!endif
COROUTINE_H = $(COROUTINE_OBJ:.obj=.h)
COROUTINE_TEST_LINK = $(CC) $(COROUTINE_TEST_OBJS) $(COROUTINE_OBJ) $(MAINLIBS) $(OUTFLAG)$(COROUTINE_TEST) -link $(LDFLAGS) $(XLDFLAGS)
COROUTINE_TEST_RUN = .\$(COROUTINE_TEST:/=\)
ARFLAGS = -machine:$(MACHINE) -out:
LD = $(CC)
LDSHARED = $(LD) -LD
XCFLAGS = -DRUBY_EXPORT $(INCFLAGS) $(XCFLAGS) $(XINCFLAGS)
LDFLAGS = $(LDFLAGS) -manifest:embed,ID=2
CPPFLAGS = $(DEFS) $(ARCHDEFS) $(CPPFLAGS)
!if "$(USE_RUBYGEMS)" == "no"
CPPFLAGS = -DDISABLE_RUBYGEMS $(CPPFLAGS)
!endif
# https://learn.microsoft.com/en-us/cpp/build/reference/zc-preprocessor?view=msvc-170
!if defined(CLANG_VER)
# clang-cl conforms already and warns that -Zc:preprocessor is unused
!elseif $(MSC_VER) >= 1925
# maybe >= 1926?
# https://devblogs.microsoft.com/cppblog/announcing-full-support-for-a-c-c-conformant-preprocessor-in-msvc/
CPPFLAGS = -Zc:preprocessor $(CPPFLAGS)
!else
CPPFLAGS = -experimental:preprocessor $(CPPFLAGS)
!endif
POSTLINK =
DLDFLAGS = $(LDFLAGS) -dll
MAINLIBS = $(LIBS)
SOLIBS =
RCFILES = $(RUBY_INSTALL_NAME).rc $(RUBYW_INSTALL_NAME).rc $(RUBY_SO_NAME).rc
!ifndef RCFLAGS
RCFLAGS=-nologo
!endif
ENABLE_SHARED = yes
LIBRUBY_LDSHARED = $(LDSHARED)
LIBRUBY_DLDFLAGS = $(EXTLDFLAGS) -implib:dummy.lib -def:$(RUBYDEF)
EXEEXT = .exe
BUILD_EXEEXT = $(EXEEXT)
EXECUTABLE_EXTS = ".exe",".com",".cmd",".bat"
!if !defined(PROGRAM)
PROGRAM=$(RUBY_INSTALL_NAME)$(EXEEXT)
!endif
!if !defined(WPROGRAM) && defined(RUBYW_INSTALL_NAME)
WPROGRAM=$(RUBYW_INSTALL_NAME)$(EXEEXT)
!endif
RUBYDEF = $(RUBY_SO_NAME).def
!if "$(CROSS_COMPILING)" == "yes"
MINIRUBY = $(RUBY) -I$(MAKEDIR) -r$(arch)-fake
RUNRUBY = $(MINIRUBY)
!else
MINIRUBY = .\miniruby$(EXEEXT) -I$(srcdir)/lib -I.
RUNRUBY = .\$(PROGRAM) -I$(srcdir)/lib -I"$(EXTOUT)/$(arch)" -I.
!endif
MINIRUBY = $(MINIRUBY) $(MINIRUBYOPT)
RUNRUBY = $(RUNRUBY) "$(tooldir)/runruby.rb" --extout="$(EXTOUT)" $(RUNRUBYOPT) -- $(RUN_OPTS)
yes_baseruby = $(HAVE_BASERUBY:no=)
no_baseruby = $(HAVE_BASERUBY:yes=)
!if "$(CROSS_COMPILING)" == "yes"
XRUBY = $(MINIRUBY)
BOOTSTRAPRUBY = $(BASERUBY)
BOOTSTRAPRUBY_OPT = -r./$(arch)-fake
!else
BOOTSTRAPRUBY = $(MINIRUBY)
BOOTSTRAPRUBY_OPT =
XRUBY = $(RUNRUBY)
!endif
BTESTRUBY = $(MINIRUBY) -r./$(arch)-fake
!ifndef RUBY
RUBY = ruby
!endif
DTRACE_EXT = dmyh
!if !defined(STACK)
!if "$(ARCH)" == "x64"
STACK = 0x400000
!else
STACK = 0x200000
!endif
!if defined(STACK_COMMIT)
STACK = $(STACK),$(STACK_COMMIT)
!endif
!endif
ORGLIBPATH = $(LIB)
#### End of system configuration section. ####
LIBRUBY_A = $(RUBY_SO_NAME)-static.lib
LIBRUBY_SO = $(RUBY_SO_NAME).dll
LIBRUBY_SONAME= $(RUBY_SO_NAME).dll
LIBRUBY = $(RUBY_SO_NAME).lib
LIBRUBYARG = $(LIBRUBY)
LIBRUBYARG_SHARED = $(LIBRUBY)
LIBRUBY_RELATIVE = yes
THREAD_MODEL = win32
THREAD_IMPL_H = thread_$(THREAD_MODEL).h
THREAD_IMPL_SRC = thread_$(THREAD_MODEL).c
!if "$(CROSS_COMPILING)" == "yes"
PREP = $(arch)-fake.rb
BUILTIN_BINARY = no
!else
PREP = miniruby$(EXEEXT)
BUILTIN_BINARY = yes
!endif
BUILTIN_GC = default
!if !defined(EXTSTATIC)
EXTSTATIC =
!endif
OBJEXT = obj
ASMEXT = asm
DLEXT = so
INSTALLED_LIST= .installed.list
HASH_SIGN = ^#
SRC_FILE = $(<:\=/)
OS_SRC_FILE = $(<:/=\)
DEST_FILE = $(@:\=/)
OS_DEST_FILE = $(@:/=\)
!if !defined(WINMAINOBJ)
WINMAINOBJ = winmain.$(OBJEXT)
!endif
MAINSRC = $(MAINOBJ:.obj=.c)
ARCHMINIOBJS = dmydln.$(OBJEXT) miniruby.res
LIBOBJS = $(MISSING) $(LIBOBJS)
!ifndef COMMON_LIBS
COMMON_LIBS = m
!endif
!ifndef COMMON_MACROS
COMMON_MACROS = WIN32_LEAN_AND_MEAN WIN32
!endif
!ifndef COMMON_HEADERS
COMMON_HEADERS = winsock2.h ws2tcpip.h windows.h
!endif
!if "$(EXTSTATIC)" == "static"
ENCOBJS = enc/encinit.$(OBJEXT) enc/libenc.lib enc/libtrans.lib
! if !defined(ENCSTATIC)
ENCSTATIC = static
! endif
!else
ENCOBJS = dmyenc.$(OBJEXT)
!endif
EXTOBJS = dmyext.$(OBJEXT)
!if "$(EXTSTATIC)" != ""
PROGRAM_EXTS = exts
!endif
ext_hdrdir = $(EXTOUT)/include
arch_hdrdir = $(ext_hdrdir)/$(arch)
top_srcdir = $(srcdir)
hdrdir = $(srcdir)/include
VPATH = $(arch_hdrdir)/ruby;$(hdrdir)/ruby;$(srcdir);$(srcdir)/missing;$(win_srcdir)
!ifndef GIT
GIT = git
!endif
!if "$(HAVE_GIT)" == "yes" || "$(HAVE_GIT)" == "no"
!else if "$(GIT)" == ""
HAVE_GIT = no
!else if [for %I in ($(GIT)) do @if not "%~xI" == "" exit 1]
! if [for %I in ($(GIT)) do @if not "%~$$PATH:I" == "" exit 1]
HAVE_GIT = yes
! else
HAVE_GIT = no
! endif
!else
! if [for %x in (%PATHEXT:;= %) do @for %I in ($(GIT)%x) do @if not "%~$$PATH:I" == "" exit 1]
HAVE_GIT = yes
! else
HAVE_GIT = no
! endif
!endif
!if "$(HAVE_GIT)" == "no"
!else if [for /f "tokens=3" %I in ('git --version') do @(\
for /f "delims=. tokens=1-2" %I in ("%I") do @(\
if %I lss 2 (exit 1) else if %I gtr 2 (exit 0) \
else if %J lss 10 (exit 1) else (exit 0)\
)\
)]
HAVE_GIT = no
!endif
!if defined(VCS)
!else if exist($(srcdir)/.git)
VCS = $(GIT)
VCSUP = $(VCS) pull --rebase $(GITPULLOPTIONS)
!else
VCSUP = rem
!endif
ruby_pc = $(RUBY_BASE_NAME)-$(MAJOR).$(MINOR).pc
MESSAGE_BEGIN = @(for %I in (
MESSAGE_END = ) do @echo.%~I)
ECHO_BEGIN = @echo.
ECHO_END =
all: $(srcdir)/win32/Makefile.sub $(win_srcdir)/Makefile.sub $(srcdir)/common.mk $(srcdir)/depend
prog: config
# The default non-transformed names without $(EXEEXT).
ruby: $(PROGRAM)
rubyw: $(WPROGRAM)
stub: $(STUBPROGRAM)
rubystub: $(STUBPROGRAM)
!if !exist(enc/trans/newline.c) && exist($(srcdir)/enc/trans/newline.c)
NEWLINE_C = $(srcdir)/enc/trans/newline.c
!else
NEWLINE_C = enc/trans/newline.c
!endif
!if !exist(miniprelude.c) && exist($(srcdir)/miniprelude.c)
MINIPRELUDE_C = $(srcdir)/miniprelude.c
!else
MINIPRELUDE_C = miniprelude.c
!endif
RBCONFIG = ./.rbconfig.time
!if "$(GITHUB_ACTIONS)" == "true"
# 93(bright yellow) is copied from .github/workflows/mingw.yml
ACTIONS_GROUP = @echo ::group::$(@:yes-=)
ACTIONS_ENDGROUP = @echo ::endgroup::
!else
ACTIONS_GROUP = @:: $(empty)
ACTIONS_ENDGROUP = @::
!endif
ABI_VERSION_HDR = $(hdrdir)/ruby/internal/abi.h
!if defined(DUMP_AST)
DUMP_AST_TARGET = $(empty)
!else if defined(RUBY_DUMP_AST)
DUMP_AST = $(RUBY_DUMP_AST)
DUMP_AST_TARGET = $(empty)
!else if "$(CROSS_COMPILING)" == "yes"
DUMP_AST = ruby-dump_ast$(BUILD_EXEEXT)
DUMP_AST_TARGET = $(DUMP_AST)
!else
DUMP_AST = dump_ast$(BUILD_EXEEXT)
DUMP_AST_TARGET = $(DUMP_AST)
!endif
!include $(srcdir)/common.mk
!ifdef SCRIPTPROGRAMS
!else if [echo>scriptbin.mk SCRIPTPROGRAMS = \]
!else if [for %I in ($(srcdir:/=\)\bin\*) do @echo>>scriptbin.mk %~nI.exe \]
!else if [echo.>>scriptbin.mk]
!else if [echo.>>scriptbin.mk]
!endif
!if [for %I in ($(srcdir:/=\)\bin\*) do @for %J in (\
"%~nI.exe: $$(srcdir)/bin/%~nI" \
" $$(ECHO) generating $$(@)" \
" $$(Q) copy /y /b $$(STUBPROGRAM) $$(@) > nul" \
" $$(Q) echo.>>$$(@)" \
" $$(Q) echo.>>$$(@)" \
" $$(Q) copy /b $$(@)+$$(srcdir:/=\)\bin\%~nI $$(@) > nul" \
"" \
) do @echo.%~J>>scriptbin.mk]
!else
! include scriptbin.mk
! if [del scriptbin.mk > nul]
! endif
!endif
scriptbin: $(SCRIPTPROGRAMS)
!if "$(SCRIPTPROGRAMS)" != ""
$(SCRIPTPROGRAMS): $(STUBPROGRAM)
!endif
update-src::
@cd "$(srcdir:/=\)" && set LC_TIME=C && $(VCSUP)
!ifndef VCPKG_DEFAULT_TRIPLET
VCPKG_DEFAULT_TRIPLET = $(MACHINE)-windows
!endif
TRIPLET_OPTION = --triplet $(VCPKG_DEFAULT_TRIPLET)
update-vcpkg::
@cd "$(srcdir:/=\)" && set LC_TIME=C && vcpkg x-update-baseline $(TRIPLET_OPTION)
install-vcpkg::
@cd "$(srcdir:/=\)" && set LC_TIME=C && vcpkg install $(TRIPLET_OPTION)
prepare-vcpkg::
@del /a:l *.dll 2> nul
for %%I in ($(srcdir:/=\)\vcpkg_installed\$(VCPKG_DEFAULT_TRIPLET)\bin\*.dll) do @( \
if not %%~nI == readline mklink %%~nxI %%I \
)
!ifndef VCPKG_INSTALLED
VCPKG_INSTALLED = $(srcdir)/vcpkg_installed/$(VCPKG_DEFAULT_TRIPLET)
!endif
BINARY_PACKAGE_NAME = $(RUBY_BASE_NAME)-$(RUBY_PROGRAM_VERSION)-$(arch)
BINARY_PACKAGE_STAGE = binary-package-stage
binary-package:
@if exist $(BINARY_PACKAGE_STAGE)\. rd /s /q $(BINARY_PACKAGE_STAGE)
@$(MAKE) DESTDIR="$(MAKEDIR)\$(BINARY_PACKAGE_STAGE)" install-nodoc
$(RUNRUBY) "$(tooldir)/binary-package.rb" --stage=$(BINARY_PACKAGE_STAGE) \
--name=$(BINARY_PACKAGE_NAME) --srcdir="$(srcdir)" \
--vcpkg-dir="$(VCPKG_INSTALLED)" \
--output=$(BINARY_PACKAGE_NAME).zip
.PHONY: reconfig
reconfig $(MKFILES): $(srcdir)/common.mk $(srcdir)/version.h \
$(hdrdir)/ruby/version.h $(ABI_VERSION_HDR) \
$(win_srcdir)/Makefile.sub $(win_srcdir)/configure.bat \
$(win_srcdir)/setup.mak $(win_srcdir)/enc-setup.mak \
$(srcdir)/enc/Makefile.in
$(COMSPEC) /C $(win_srcdir:/=\)\configure.bat $(configure_args)
@fc Makefile Makefile.old > nul && echo Makefile unchanged || \
(echo $(MKFILES) was updated, re-run $(MAKE). & exit 1)
RUBY_CONFIG_H = $(arch_hdrdir)/ruby/config.h
CONFIG_H = ./.config.h.time
config: config.status
config.status: $(CONFIG_H)
# {$(VPATH)}config.h prerequisites in common.mk resolve to this bare
# name until $(RUBY_CONFIG_H) is generated.
config.h: $(CONFIG_H)
BANG = !
!if !exist(config.status)
!else if [for /f "skip=1 delims=, tokens=2-3" %I in (config.status) do @ \
if "%I" == "@RUBY_SO_NAME@" ( \
if not "%J" == "$(RUBY_SO_NAME)" exit 1 \
) else if "%I" == "@target_alias@" ( \
if not "%J" == "$(ARCH)-$(PLATFORM)" exit 1 \
) \
]
config.status: nul
!endif
guard = INCLUDE_RUBY_CONFIG_H
$(CONFIG_H): $(MKFILES) $(srcdir)/win32/Makefile.sub $(win_srcdir)/Makefile.sub \
$(ABI_VERSION_HDR)
@echo Creating config.h
!if !exist("$(arch_hdrdir)")
@md $(arch_hdrdir:/=\)
!endif
!if !exist("$(arch_hdrdir)/ruby")
@md $(arch_hdrdir:/=\)\ruby
!endif
@$(IFCHANGE) "--timestamp=$(@:/=\)" $(RUBY_CONFIG_H:/=\) <<
#ifndef $(guard)
#define $(guard) 1
!if defined(MSC_VER_LOWER)
#if (_MSC_VER < $(MSC_VER_LOWER)) || (_MSC_VER > $(MSC_VER_UPPER))
#error MSC version unmatch: $(MSC_VER_LOWER)..$(MSC_VER_UPPER) is expected.
#endif
!else
#if _MSC_VER != $(MSC_VER)
#error MSC version unmatch: $(MSC_VER) is expected.
#endif
!endif
#define RUBY_MSVCRT_VERSION $(RT_VER)
!if defined(ABI_VERSION)
#define RUBY_ABI_VERSION $(ABI_VERSION)
!endif
#define _WIN32_WINNT $(NTVER)
#define STDC_HEADERS 1
#define HAVE_SYS_TYPES_H 1
#define HAVE_SYS_STAT_H 1
#define HAVE_STDBOOL_H 1
#define HAVE_STDLIB_H 1
#define HAVE_STDDEF_H 1
#define HAVE_STRING_H 1
#define HAVE_MEMORY_H 1
!if $(MSC_VER) >= 1920
#define HAVE_AFUNIX_H 1
!endif
#define HAVE_LONG_LONG 1
#define HAVE_OFF_T 1
#define rb_off_t __int64
#define SIGNEDNESS_OF_OFF_T -1
#define OFFT2NUM(v) LL2NUM(v)
#define NUM2OFFT(v) NUM2LL(v)
#define SIZEOF_INT 4
#define SIZEOF_SHORT 2
#define SIZEOF_LONG 4
#define SIZEOF_LONG_LONG 8
#define SIZEOF___INT64 8
#ifndef _INTEGRAL_MAX_BITS
#define _INTEGRAL_MAX_BITS 64
#endif
#define SIZEOF_OFF_T 8
!if "$(TARGET_OS)" == "mswin64"
#define SIZEOF_VOIDP 8
#define SIZEOF_RB_LEN_T 8
!else
#define SIZEOF_VOIDP 4
!endif
#define SIZEOF_FLOAT 4
#define SIZEOF_DOUBLE 8
#define SIGNEDNESS_OF_TIME_T -1
#define NEGATIVE_TIME_T 1
#define SIZEOF_TIME_T 8
#define TIMET2NUM(v) LL2NUM(v)
#define NUM2TIMET(v) NUM2LL(v)
#define CLOCKID2NUM(v) INT2NUM(v)
#define NUM2CLOCKID(v) NUM2INT(v)
#define SIZEOF_CLOCK_T 4
#define SIZEOF_RLIM_T 0
!if "$(TARGET_OS)" == "mswin64"
#define SIZEOF_SIZE_T 8
#define SIZEOF_PTRDIFF_T 8
#define SIZEOF_INTPTR_T 8
#define SIZEOF_UINTPTR_T 8
!else
#define SIZEOF_SIZE_T 4
#define SIZEOF_PTRDIFF_T 4
#define SIZEOF_INTPTR_T 4
#define SIZEOF_UINTPTR_T 4
!endif
#define HAVE_VA_COPY 1
#define NORETURN(x) __declspec(noreturn) x
#define DEPRECATED(x) __declspec(deprecated) x
#define RUBY_CXX_DEPRECATED(mesg) __declspec(deprecated(mesg))
#define NOINLINE(x) __declspec(noinline) x
#define ALWAYS_INLINE(x) __forceinline x
#define WARN_UNUSED_RESULT(x) x
#define MAYBE_UNUSED(x) x
#define HAVE___ASSUME 1
#define FUNC_STDCALL(x) __stdcall x
#define FUNC_CDECL(x) __cdecl x
#define FUNC_FASTCALL(x) __fastcall x
#define RUBY_FUNCTION_NAME_STRING __FUNCTION__
#define RBIMPL_ATTR_PACKED_STRUCT_BEGIN() __pragma(pack(push, 1))
#define RBIMPL_ATTR_PACKED_STRUCT_END() __pragma(pack(pop))
#define RUBY_EXTERN extern __declspec(dllimport)
#define RUBY_FUNC_EXPORTED extern __declspec(dllexport)
#define RUBY_ALIGNAS(n) __declspec(align(n))
#define RUBY_ALIGNOF __alignof
#define HAVE_DECL_SYS_NERR 1
#define HAVE_LIMITS_H 1
#define HAVE_FCNTL_H 1
#define HAVE_SYS_UTIME_H 1
#define HAVE_FLOAT_H 1
#define HAVE_TIME_H 1
#define rb_pid_t int
#define rb_gid_t int
#define rb_uid_t int
#define HAVE_STRUCT_STAT_ST_RDEV 1
#define HAVE_STRUCT_TIMEVAL 1
#define HAVE_STRUCT_TIMESPEC
#define HAVE_INTTYPES_H 1
#define HAVE_STDINT_H 1
#define HAVE_INT8_T 1
#define HAVE_UINT8_T 1
#define SIZEOF_INT8_T 1
#define SIZEOF_UINT8_T 1
#define HAVE_INT16_T 1
#define HAVE_UINT16_T 1
#define SIZEOF_INT16_T 2
#define SIZEOF_UINT16_T 2
#define HAVE_INT32_T 1
#define HAVE_UINT32_T 1
#define SIZEOF_INT32_T 4
#define SIZEOF_UINT32_T 4
#define HAVE_INT64_T 1
#define HAVE_UINT64_T 1
#define SIZEOF_INT64_T 8
#define SIZEOF_UINT64_T 8
#define HAVE_INTPTR_T 1
#define HAVE_UINTPTR_T 1
#define HAVE_SSIZE_T 1
!if "$(TARGET_OS)" == "mswin64"
#define ssize_t __int64
#define PRI_PTR_PREFIX "I64"
!else
#define ssize_t int
#define PRI_PTR_PREFIX PRI_INT_PREFIX
!endif
#define PRI_LL_PREFIX "I64"
#define PRI_PIDT_PREFIX PRI_INT_PREFIX
#define GETGROUPS_T int
#define TYPEOF_TIMEVAL_TV_SEC long
#define HAVE_ACOSH 1
#define HAVE_ASINH 1
#define HAVE_ATANH 1
#define HAVE_CBRT 1
#define HAVE_LOG2 1
#define log2(x) log2(x)
#define HAVE_ERF 1
#define HAVE_ERFC 1
#define HAVE_ROUND 1
#define HAVE_TGAMMA 1
#define HAVE_NEXTAFTER 1
#define HAVE_ALLOCA 1
#define HAVE_DUP2 1
#define HAVE_MEMCMP 1
#define HAVE_MEMMOVE 1
#define HAVE_MKDIR 1
#define HAVE_CLOCK_GETTIME 1
#define HAVE_CLOCK_GETRES 1
#define HAVE_GETTIMEOFDAY 1
#define HAVE_SPAWNV 1
#define HAVE_STRCASECMP 1
#define HAVE_STRNCASECMP 1
#define HAVE_STRERROR 1
#define HAVE_STRFTIME 1
#define HAVE_STRCHR 1
#define HAVE_STRSTR 1
#define HAVE_FLOCK 1
#define HAVE_ISINF 1
#define HAVE_ISNAN 1
#define HAVE_FINITE 1
#define HAVE_NAN 1
#define HAVE_HYPOT 1
#define HAVE_FMOD 1
#define HAVE_FREXP 1
#define HAVE_MODF 1
#define HAVE_WAITPID 1
#define HAVE_FSYNC 1
#define HAVE_GETCWD 1
#define HAVE_TRUNCATE 1
#define HAVE_FTRUNCATE 1
#define HAVE_LSTAT 1
#define HAVE_TIMES 1
#define HAVE_FCNTL 1
#define HAVE_LINK 1
#define HAVE_READLINK 1
#define HAVE_SYMLINK 1
#define HAVE_LCHOWN 1
#define HAVE__SETJMP 1
#define HAVE_TELLDIR 1
#define HAVE_SEEKDIR 1
#define HAVE_MKTIME 1
#define HAVE_COSH 1
#define HAVE_SINH 1
#define HAVE_TANH 1
#define HAVE_SIGNBIT 1
#define HAVE_TZNAME 1
#define HAVE_DAYLIGHT 1
#define HAVE_GMTIME_R 1
#define HAVE_CHMOD 1
#define HAVE_CHOWN 1
#define HAVE_DUP 1
#define HAVE_EXECL 1
#define HAVE_EXECLE 1
#define HAVE_EXECV 1
#define HAVE_EXECVE 1
#define HAVE_GETEGID 1
#define HAVE_GETEUID 1
#define HAVE_GETGID 1
#define HAVE_GETUID 1
#define HAVE_PCLOSE 1
#define HAVE_PIPE 1
#define HAVE_POPEN 1
#define HAVE_SHUTDOWN 1
#define HAVE_SYSTEM 1
#define HAVE_TZSET 1
#define HAVE_UMASK 1
#define HAVE_QSORT_S
#define HAVE_TYPE_NET_LUID 1
#define HAVE_NULLPTR 1
#define SETPGRP_VOID 1
#define RSHIFT(x,y) ((x)>>(int)y)
#define HAVE_RB_FD_INIT 1
#define RUBY_SETJMP(env) _setjmp(env)
#define RUBY_LONGJMP(env,val) longjmp(env,val)
#define RUBY_JMP_BUF jmp_buf
#ifndef __cplusplus
#define inline __inline
#define restrict __restrict
#endif
#define NEED_IO_SEEK_BETWEEN_RW 1
#define STACK_GROW_DIRECTION -1
#define COROUTINE_H "$(COROUTINE_H)"
#define THREAD_IMPL_H "$(THREAD_IMPL_H)"
#define THREAD_IMPL_SRC "$(THREAD_IMPL_SRC)"
#define LOAD_RELATIVE 1
#define DLEXT ".$(DLEXT)"
!if "$(libdir_basename)" != "lib"
#define LIBDIR_BASENAME "$(libdir_basename)"
!endif
!if "$(EXTSTATIC)" == "static"
#define EXTSTATIC 1
!endif
!if "$(USE_GMP)" != ""
#define USE_GMP 1
!endif
!if "$(YJIT_SUPPORT)" == "yes"
#define USE_YJIT 1
!endif
#define EXECUTABLE_EXTS $(EXECUTABLE_EXTS)
#define RUBY_COREDLL "$(RT)"
#define RUBY_PLATFORM "$(arch)"
#define RUBY_SITEARCH "$(sitearch)"
#endif /* $(guard) */
<<
#!if exist($(RUBY_CONFIG_H))
#! if exist(config_h.bak)
# @del $(RUBY_CONFIG_H:.h=_h).bak
#! endif
# @copy $(RUBY_CONFIG_H) $(RUBY_CONFIG_H:.h=_h).bak
#!endif
#!if exist($(RUBY_CONFIG_H))
# @echo NMAKE will abort if config.h is changed, then restart NMAKE.
# @fc.exe $(RUBY_CONFIG_H) $(RUBY_CONFIG_H:.h=_h).bak > nul
# @echo $(RUBY_CONFIG_H) unchanged.
# @del $(RUBY_CONFIG_H)
# @ren $(RUBY_CONFIG_H:.h=_h).bak $(RUBY_CONFIG_H)
#!endif
EXECUTABLE_EXTS = $(EXECUTABLE_EXTS:"=) # "
EXECUTABLE_EXTS = $(EXECUTABLE_EXTS:,= )
config.status: $(MKFILES) $(srcdir)/win32/Makefile.sub $(win_srcdir)/Makefile.sub $(srcdir)/common.mk
@echo Creating <<$@
# Generated automatically by Makefile.sub.
s,@SHELL@,$$(COMSPEC),;t t
s,@BUILD_FILE_SEPARATOR@,\,;t t
s,@PATH_SEPARATOR@,;,;t t
s,@CFLAGS@,$(CFLAGS),;t t
s,@warnflags@,$(WARNFLAGS),;t t
s,@WERRORFLAG@,$(WERRORFLAG),;t t
s,@DEFS@,$(DEFS),;t t
s,@CPPFLAGS@,$(CPPFLAGS),;t t
s,@CXXFLAGS@,$(CXXFLAGS),;t t
s,@incflags@,$(incflags),;t t
s,@FFLAGS@,$(FFLAGS),;t t
s,@LDFLAGS@,$(LDFLAGS),;t t
s,@LIBS@,user32.lib,;t t
s,@MAINLIBS@,$(MAINLIBS),;t t
s,@exec_prefix@,$${prefix},;t t
s,@prefix@,$(prefix),;t t
s,@program_transform_name@,s,.*,$(PROGRAM_PREFIX)&$(PROGRAM_SUFFIX),,;t t
s,@bindir@,$${exec_prefix}/bin,;t t
s,@sbindir@,$${exec_prefix}/sbin,;t t
s,@libexecdir@,$${exec_prefix}/libexec,;t t
s,@datadir@,$${prefix}/share,;t t
s,@sysconfdir@,,;t t
s,@sharedstatedir@,$${prefix}/com,;t t
s,@localstatedir@,$${prefix}/var,;t t
s,@libdir@,$${exec_prefix}/$(libdir_basename),;t t
s,@includedir@,$${prefix}/include,;t t
s,@oldincludedir@,/usr/include,;t t
s,@infodir@,$${datadir}/info,;t t
s,@mandir@,$${datadir}/man,;t t
s,@ridir@,$${datadir}/ri,;t t
s,@docdir@,$${datadir}/doc/$${RUBY_BASE_NAME},;t t
s,@build@,$(CPU)-pc-$(PLATFORM),;t t
s,@build_alias@,$(CPU)-$(PLATFORM),;t t
s,@build_cpu@,$(CPU),;t t
s,@build_vendor@,pc,;t t
s,@build_os@,$(PLATFORM),;t t
s,@host@,$(CPU)-pc-$(PLATFORM),;t t
s,@host_alias@,$(CPU)-$(PLATFORM),;t t
s,@host_cpu@,$(CPU),;t t
s,@host_vendor@,pc,;t t
s,@host_os@,$(PLATFORM),;t t
s,@target@,$(ARCH)-pc-$(PLATFORM),;t t
s,@target_alias@,$(ARCH)-$(PLATFORM),;t t
s,@target_cpu@,$(ARCH),;t t
s,@target_vendor@,pc,;t t
s,@target_os@,$(PLATFORM),;t t
s,@NULLCMD@,$(NULLCMD),;t t
s,@CC@,$(CC),;t t
s,@CPP@,$(CPP),;t t
s,@CXX@,$$(CC),;t t
s,@LD@,$$(CC),;t t
s,@LRAMA@,$(LRAMA),;t t
s,@RANLIB@,,;t t
s,@AR@,$(AR),;t t
s,@ARFLAGS@,$(ARFLAGS),;t t
s,@LN_S@,$(LN_S),;t t
s,@SET_MAKE@,MFLAGS = -$$(MAKEFLAGS),;t t
s,@RM@,$$(COMSPEC) /C $$(top_srcdir:/=\)\win32\rm.bat,;t t
s,@RMDIR@,$$(COMSPEC) /C $$(top_srcdir:/=\)\win32\rmdirs.bat,:t t
s,@RMDIRS@,$$(COMSPEC) /C $$(top_srcdir:/=\)\win32\rmdirs.bat -p,;t t
s,@RMALL@,$$(COMSPEC) /C $$(top_srcdir:/=\)\win32\rm.bat -f -r,:t t
s,@MAKEDIRS@,$$(COMSPEC) /E:ON /C $$(top_srcdir:/=\)\win32\makedirs.bat,;t t
s,@LIBOBJS@,$(LIBOBJS),;t t
s,@ALLOCA@,$(ALLOCA),;t t
s,@EXEEXT@,.exe,;t t
s,@EXECUTABLE_EXTS@,$(EXECUTABLE_EXTS),;t t
s,@OBJEXT@,$(OBJEXT),;t t
s,@ASMEXT@,$(ASMEXT),;t t
s,@XCFLAGS@,$(XCFLAGS),;t t
s,@XLDFLAGS@,$(XLDFLAGS),;t t
s,@DLDFLAGS@,$(DLDFLAGS) $$(LIBPATH),;t t
s,@EXTDLDFLAGS@,$(EXTDLDFLAGS),;t t
s,@ARCH_FLAG@,$(ARCH_FLAG),;t t
s,@STATIC@,$(STATIC),;t t
s,@CCDLFLAGS@,,;t t
s,@LDSHARED@,$(LDSHARED),;t t
s,@SOEXT@,dll,;t t
s,@DLEXT@,$(DLEXT),;t t
s,@LIBEXT@,lib,;t t
s,@STRIP@,$(STRIP),;t t
s,@ENCSTATIC@,$(ENCSTATIC),;t t
s,@EXTSTATIC@,$(EXTSTATIC),;t t
s,@setup@,Setup,;t t
s,@MINIRUBY@,$(MINIRUBY),;t t
s,@PREP@,miniruby$(EXEEXT),;t t
s,@RUNRUBY@,$(RUNRUBY),;t t
s,@EXTOUT@,$(EXTOUT),;t t
s,@ARCHFILE@,,;t t
s,@RDOCTARGET@,,;t t
s,@LIBRUBY_LDSHARED@,$(LIBRUBY_LDSHARED),;t t
s,@LIBRUBY_DLDFLAGS@,$(LIBRUBY_DLDFLAGS),;t t
s,@RUBY_BASE_NAME@,$(RUBY_BASE_NAME),;t t
s,@RUBY_INSTALL_NAME@,$(RUBY_INSTALL_NAME),;t t
s,@rubyw_install_name@,$(RUBYW_INSTALL_NAME),;t t
s,@RUBYW_INSTALL_NAME@,$(RUBYW_INSTALL_NAME),;t t
s,@RUBY_SO_NAME@,$(RUBY_SO_NAME),;t t
s,@LIBRUBY_A@,$$(RUBY_SO_NAME)-static.lib,;t t
s,@INSTALL_STATIC_LIBRARY@,$(INSTALL_STATIC_LIBRARY),;t t
s,@LIBRUBY_SO@,$$(RUBY_SO_NAME).dll,;t t
s,@LIBRUBY_ALIASES@,$(LIBRUBY_ALIASES),;t t
s,@LIBRUBY_RELATIVE@,$(LIBRUBY_RELATIVE),;t t
s,@LIBRUBY@,$$(RUBY_SO_NAME).lib,;t t
s,@LIBRUBYARG@,$$(LIBRUBYARG_SHARED),;t t
s,@LIBRUBYARG_STATIC@,$$(LIBRUBY_A) $$(MAINLIBS),;t t
s,@LIBRUBYARG_SHARED@,$$(LIBRUBY),;t t
s,@SOLIBS@,$(SOLIBS),;t t
s,@DLDLIBS@,$(DLDLIBS),;t t
s,@ENABLE_SHARED@,yes,;t t
s,@YJIT_SUPPORT@,$(YJIT_SUPPORT),;t t
s,@RUSTC@,$(RUSTC),;t t
s,@BASERUBY@,$(BASERUBY),;t t
s,@OUTFLAG@,$(OUTFLAG),;t t
s,@COUTFLAG@,$(COUTFLAG),;t t
s,@CSRCFLAG@,$(CSRCFLAG),;t t
s,@CPPOUTFILE@,-P,;t t
s,@PRELOADENV@,,;t t
s,@LIBPATHENV@,PATH,;t t
s,@LIBPATHFLAG@,-libpath:%s,;t t
s,@RPATHFLAG@,,;t t
s,@LIBARG@,%s.lib,;t t
s,@LINK_SO@,$$(LDSHARED) -Fe$$(@) $$(OBJS) $$(LIBS) $$(LOCAL_LIBS) -link $$(DLDFLAGS) -implib:$$(*F:.so=)-$$(arch).lib -pdb:$$(*F:.so=)-$$(arch).pdb -def:$$(DEFFILE),;t t
s,@COMPILE_C@,$$(CC) $$(INCFLAGS) $$(CFLAGS) $$(CPPFLAGS) $$(COUTFLAG)$$(@) -c $$(CSRCFLAG)$$(<:\=/),;t t
s,@COMPILE_CXX@,$$(CXX) $$(INCFLAGS) $$(CXXFLAGS) $$(CPPFLAGS) $$(COUTFLAG)$$(@) -c -Tp$$(<:\=/),;t t
s,@ASSEMBLE_C@,$$(CC) $$(CFLAGS) $$(CPPFLAGS) -Fa$$(@) -c $$(CSRCFLAG)$$(<:\=/),;t t
s,@ASSEMBLE_CXX@,$$(CXX) $$(CXXFLAGS) $$(CPPFLAGS) -Fa$$(@) -c -Tp$$(<:\=/),;t t
s,@COMPILE_RULES@,{$$(*VPATH*)}.%s.%s: .%s.%s:,;t t
s,@CXX_EXT@,cpp,;t t
s,@RULE_SUBST@,{.;$$(VPATH)}%s,;t t
s,@TRY_LINK@,$$(CC) -Feconftest $$(INCFLAGS) -I$$(hdrdir) $$(CPPFLAGS) $$(CFLAGS) $$(src) $$(LOCAL_LIBS) $$(LIBS) -link $$(LDFLAGS) $$(LIBPATH) $$(XLDFLAGS),;t t
s,@COMMON_LIBS@,$(COMMON_LIBS),;t t
s,@COMMON_MACROS@,$(COMMON_MACROS),;t t
s,@COMMON_HEADERS@,$(COMMON_HEADERS),;t t
s,@cleanobjs@,$$*.exp $$*.lib $$*.pdb,;t t
s,@DISTCLEANFILES@,vc*.pdb,;t t
s,@EXPORT_PREFIX@, ,;t t
s,@archlibdir@,$${libdir}/$${arch},;t t
s,@sitearchlibdir@,$${libdir}/$${sitearch},;t t
s,@archincludedir@,$${includedir}/$${arch},;t t
s,@sitearchincludedir@,$${includedir}/$${sitearch},;t t
s,@arch@,$(ARCH)-$(PLATFORM),;t t
s,@sitearch@,$(ARCH)-$(RT),;t t
s,@MAJOR@,$(MAJOR),;t t
s,@MINOR@,$(MINOR),;t t
s,@TEENY@,$(TEENY),;t t
s,@ruby_version@,$(ruby_version),;t t
s,@RUBY_PROGRAM_VERSION@,$$(MAJOR).$$(MINOR).$$(TEENY),;t t
s,@RUBY_API_VERSION@,$$(MAJOR).$$(MINOR),;t t
!if defined(RUBY_VERSION_NAME)
s,@RUBY_VERSION_NAME@,$(RUBY_VERSION_NAME),;t t
!else
s,@RUBY_VERSION_NAME@,$$(RUBY_BASE_NAME)-$$(ruby_version),;t t
!endif
s,@rubylibprefix@,$${prefix}/lib/$${RUBY_BASE_NAME},;t t
s,@rubyarchdir@,$${rubylibdir}/$${arch},;t t
s,@rubylibdir@,$${rubylibprefix}/$${ruby_version},;t t
s,@sitedir@,$${rubylibprefix}/site_ruby,;t t
s,@sitearchdir@,$${sitelibdir}/$${sitearch},;t t
s,@sitelibdir@,$${sitedir}/$${ruby_version},;t t
s,@vendordir@,$${rubylibprefix}/vendor_ruby,;t t
s,@vendorarchdir@,$${vendorlibdir}/$${sitearch},;t t
s,@vendorlibdir@,$${vendordir}/$${ruby_version},;t t
s,@rubyhdrdir@,$$(includedir)/$$(RUBY_VERSION_NAME),;t t
s,@sitehdrdir@,$$(rubyhdrdir)/site_ruby,;t t
s,@vendorhdrdir@,$$(rubyhdrdir)/vendor_ruby,;t t
s,@rubyarchhdrdir@,$$(rubyhdrdir)/$${arch},;t t
s,@sitearchhdrdir@,$$(sitehdrdir)/$${sitearch},;t t
s,@vendorarchhdrdir@,$$(vendorhdrdir)/$${sitearch},;t t
s,@PLATFORM_DIR@,$(PLATFORM_DIR),;t t
s,@THREAD_MODEL@,$(THREAD_MODEL),;t t
s,@configure_args@,--with-make-prog=nmake --enable-shared $(configure_args),;t t
s,@configure_input@,$$configure_input,;t t
s,@srcdir@,$(srcdir),;t t
s,@top_srcdir@,$(srcdir),;t t
s,@try_header@,try_compile,;t t
s,@ruby_pc@,$(ruby_pc),;t t
s,@PKG_CONFIG@,$(PKG_CONFIG),;t t
<<KEEP
# BOOTSTRAPRUBY is $(MINIRUBY) here even with BASERUBY, so rbconfig.rb
# generation always needs $(PREP).
$(RBCONFIG): $(PREP)
miniruby: miniruby$(EXEEXT)
miniruby$(EXEEXT): $(RUST_LIB)
@echo $(LIBS)
$(ECHO) linking $(@:\=/)
$(Q) $(PURIFY) $(CC) $(MAINOBJ) $(MINIOBJS) $(COMMONOBJS) $(LIBS) $(JIT_LIBS) \
$(OUTFLAG)$@ -link $(LDFLAGS) $(XLDFLAGS)
@$(RM) miniruby.lib miniruby.exp
$(Q) .\miniruby.exe -v
$(Q) $(LDSHARED_1)
$(Q) $(LDSHARED_2)
miniruby.rc:
@exit > $@
!if "$(PROGRAM)" != ""
$(PROGRAM): $(MAINOBJ) $(LIBRUBY_SO) $(RUBY_INSTALL_NAME).res
! if "$(PROGRAM_EXTS)" == ""
$(ECHO) linking $(@:\=/)
$(Q) $(PURIFY) $(CC) $(MAINOBJ) $(EXTOBJS) $(RUBY_INSTALL_NAME).res \
$(OUTFLAG)$@ $(LIBRUBYARG) -link $(LDFLAGS) $(XLDFLAGS)
! else
# without a command nmake would infer $(PROGRAM) from ruby.c
@$(NULLCMD)
! endif
!endif
!if "$(WPROGRAM)" != ""
$(WPROGRAM): $(MAINOBJ) $(WINMAINOBJ) $(LIBRUBY_SO) $(RUBYW_INSTALL_NAME).res
$(ECHO) linking $(@:\=/)
$(Q) $(PURIFY) $(CC) $(MAINOBJ) $(WINMAINOBJ) \
$(RUBYW_INSTALL_NAME).res $(OUTFLAG)$@ $(LIBRUBYARG) \
-link $(LDFLAGS) $(XLDFLAGS) -subsystem:Windows
!endif
!if "$(STUBPROGRAM)" != ""
$(STUBPROGRAM): rubystub.$(OBJEXT) $(LIBRUBY) $(LIBRUBY_SO) $(RUBY_INSTALL_NAME).res
$(ECHO) linking $(@:\=/)
$(Q) $(PURIFY) $(CC) rubystub.$(OBJEXT) $(RUBY_INSTALL_NAME).res \
$(OUTFLAG)$@ $(LIBRUBYARG) -link $(LDFLAGS) $(XLDFLAGS)
!endif
!if "$(EXTSTATIC)" != "" && "$(LIBRUBY_SO_UPDATE)" == ""
PRE_LIBRUBY_UPDATE = $(RM) $(LIBRUBY_EXTS)
!else
PRE_LIBRUBY_UPDATE =
!endif
$(LIBRUBY_A): $(OBJS) $(INITOBJS)
@-$(PRE_LIBRUBY_UPDATE)
$(ECHO) linking static-library $(@:\=/)
$(Q) $(AR) $(ARFLAGS)$@ $(OBJS) $(INITOBJS)
$(LIBRUBY): $(RUBYDEF)
$(ECHO) linking import-library $(@:\=/)
$(Q) $(AR) $(ARFLAGS)$@ -def:$(RUBYDEF)
$(LIBRUBY_SO): $(LIBRUBY_A) $(DLDOBJS) $(RUBYDEF) $(RUBY_SO_NAME).res $(RUST_LIB)
@echo $(DLDOBJS)
@-$(PRE_LIBRUBY_UPDATE)
$(ECHO) linking shared-library $(@:\=/)
$(Q) $(LDSHARED) $(DLDOBJS) $(LIBRUBY_A) \
$(RUBY_SO_NAME).res $(SOLIBS) $(EXTSOLIBS) $(LIBS) $(JIT_LIBS) \
$(OUTFLAG)$@ -link $(LDFLAGS) $(XLDFLAGS) \
$(LIBRUBY_DLDFLAGS)
@$(RM) dummy.lib dummy.exp
$(RUBYDEF): $(LIBRUBY_A) $(DLDOBJS) $(RBCONFIG)
$(ECHO) generating $(@:\=/)
$(Q) $(BOOTSTRAPRUBY_COMMAND) $(srcdir)/win32/mkexports.rb \
-output=$@ -arch=$(ARCH) $(LIBRUBY_A) -- $(DLDOBJS)
!if "$(YJIT_SUPPORT)" == "yes"
# A rule would mark the stamp updated even when rustc is unchanged.
!if [(if not exist target md target) & $(RUSTC) -V | $(IFCHANGE) --empty target/.rustc-version - > nul]
!endif
# Not common.mk's YJIT_RUSTC_ARGS, whose single quotes cmd.exe keeps.
$(YJIT_LIBS): $(srcdir)/yjit/src/*.rs $(srcdir)/yjit/src/asm/*.rs \
$(srcdir)/yjit/src/asm/x86_64/*.rs $(srcdir)/yjit/src/asm/arm64/*.rs \
$(srcdir)/yjit/src/asm/arm64/arg/*.rs $(srcdir)/yjit/src/asm/arm64/inst/*.rs \
$(srcdir)/yjit/src/backend/*.rs $(srcdir)/yjit/src/backend/x86_64/*.rs \
$(srcdir)/yjit/src/backend/arm64/*.rs $(srcdir)/jit/src/lib.rs \
target/.rustc-version
$(ECHO) building Rust YJIT (release mode)
$(Q) $(RUSTC) --crate-name=yjit $(JIT_RUST_FLAGS) $(RUSTC_FLAGS) \
--edition=2021 --out-dir=$(@D) $(srcdir)/yjit/src/lib.rs
!endif
{$(win_srcdir)}.def.lib:
$(Q) $(AR) $(ARFLAGS)$@ -def:$<
clean-local::
$(Q)$(RM) $(WINMAINOBJ) ext\extinit.c ext\extinit.$(OBJEXT) ext\vc*.pdb miniruby.lib
$(Q)$(RM) $(RUBY_INSTALL_NAME).res $(RUBYW_INSTALL_NAME).res $(RUBY_SO_NAME).res
$(Q)$(RM) miniruby.rc $(RUBY_INSTALL_NAME).rc $(RUBYW_INSTALL_NAME).rc $(RUBY_SO_NAME).rc
$(Q)$(RM) *.map *.pdb *.ilk *.exp *.dll $(RUBYDEF) ext\ripper\y.output
clean-local:: clean-prism
clean-prism:
@for /R $(PRISM_BUILD_DIR:/=\) %I in (.time) do @(del /q %I && $(RMDIRS) %~pI) 2> nul || $(NULLCMD)
distclean-local::
$(Q)$(RM) ext\config.cache $(RBCONFIG:/=\) $(CONFIG_H:/=\) miniprelude.c
-$(Q)$(RM) $(INSTALLED_LIST:/=\) $(arch_hdrdir:/=\)\ruby\config.h verconf.h
-$(Q)$(RMDIRS) $(arch_hdrdir:/=\)\ruby
-$(Q)$(RMDIR) win32
distclean-local:: clean-srcs-local
distclean-ext:: clean-srcs-ext
distclean-local:: distclean-prism
distclean-prism: clean-prism
!if "$(srcdir)" != "."
$(Q)for %I in ( \
$(PRISM_SRCDIR:/=\)\templates\ext\prism\*.c.erb \
$(PRISM_SRCDIR:/=\)\templates\include\prism\*.h.erb \
$(PRISM_SRCDIR:/=\)\templates\src\*.c.erb \
) do $(Q)(del /q prism\%~nI 2> nul || $(NULLCMD))
$(Q)for /D %I in (prism\*) do $(Q)$(RMDIRS) %I
$(Q)$(RMDIRS) prism
!endif
realclean-prism: distclean-prism
!if "$(srcdir)" == "."
$(Q)for %I in ( \
$(PRISM_SRCDIR:/=\)\templates\ext\prism\*.c.erb \
$(PRISM_SRCDIR:/=\)\templates\include\prism\*.h.erb \
$(PRISM_SRCDIR:/=\)\templates\src\*.c.erb \
) do $(Q)(del /q $(PRISM_SRCDIR:/=\)\%~nI 2> nul || $(NULLCMD))
!endif
.bundle/clean:: .bundle/clean.sub
.bundle/distclean:: .bundle/distclean.sub
.bundle/realclean:: .bundle/realclean.sub
.bundle/clean.sub:: ext/clean.mk
.bundle/distclean.sub:: ext/distclean.mk
.bundle/realclean.sub:: ext/realclean.mk
ext/clean.mk ext/distclean.mk ext/realclean.mk::
$(Q)if exist $(EXTS_MK) $(MAKE) $(MFLAGS) -k -f $(EXTS_MK) top_srcdir=$(srcdir) $(*F)
ext/clean.sub ext/distclean.sub ext/realclean.sub \
.bundle/clean.sub .bundle/distclean.sub .bundle/realclean.sub::
$(Q)cd $(@D) 2>nul && (for /R $(EXTS) %I in (.) \
do $(Q)if exist %I\Makefile ( \
cd %I && ( \
call set n=%I && \
call set n=%n:%CD%\$(@D)\=% && \
call set n=%n:\.=% && \
call echo $(@F:.sub=)ing %n:\=/% & \
$(MAKE) $(MFLAGS) $(@F:.sub=) & \
cd %CD% & \
$(RMDIRS) %I \
))) || $(NULLCMD)
ext/distclean ext/realclean .bundle/distclean .bundle/realclean::
$(Q)(for /D /R $(@D) %I in (.) do $(Q)$(RMDIRS) %I) || $(NULLCMD)
.bundle/distclean .bundle/realclean::
$(Q)for /D %I in ($(@D)\*) do $(Q)$(RMDIRS) %I || $(NULLCMD)
-$(Q)rmdir $(@D) 2> nul || $(NULLCMD)
.bundle/realclean::
@$(RMALL) $(tooldir)/bunlder/*.lock $(srcdir)/.bundle
gc/clean gc/distclean gc/realclean::
- for /D %G in (gc\*) do (pushd %G && $(MAKE) TARGET_SO_DIR=./ $(@F) & popd) || $(NULLCMD)
gc/distclean gc/realclean::
- for /D %G in (gc\*) do ($(RMDIR) %G) || $(NULLCMD)
clean-enc distclean-enc realclean-enc:
!if exist($(ENC_MK))
$(ECHO) $(@:-enc=ing) encodings
-$(Q)$(MAKE) $(MAKE_ENC) $(@:-enc=)
!endif
$(RCFILES): $(RBCONFIG) $(srcdir)/revision.h $(srcdir)/win32/resource.rb
@$(BOOTSTRAPRUBY_COMMAND) $(srcdir)/win32/resource.rb \
-ruby_name=$(RUBY_INSTALL_NAME) \
-rubyw_name=$(RUBYW_INSTALL_NAME) \
-so_name=$(RUBY_SO_NAME) \
. $(icondirs) $(win_srcdir)
update-benchmark-driver:
$(GIT) clone https://github.com/benchmark-driver/benchmark-driver $(srcdir)/benchmark/benchmark-driver || \
$(GIT_IN_SRC)/benchmark/benchmark-driver pull origin master
$(ruby_pc): $(RBCONFIG)
@$(BOOTSTRAPRUBY) $(tooldir)/expand-config.rb \
-output=$@ -mode=$(INSTALL_DATA_MODE) -config=rbconfig.rb \
$(srcdir)/template/ruby.pc.in
modular-gc-precheck:
!if "$(modular_gc_dir)" == ""
@echo You must configure with --with-modular-gc to use modular GC
@exit /b 1
!endif
{$(srcdir)/coroutine/win32}.asm{coroutine/win32}.obj:
$(ECHO) assembling $(<:\=/)
$(Q) $(AS) $(ASFLAGS) $(COUTFLAG)$@ -c $(<:\=/)
{$(srcdir)/coroutine/win64}.asm{coroutine/win64}.obj:
$(ECHO) assembling $(<:\=/)
$(Q) $(AS) $(ASFLAGS) $(COUTFLAG)$@ -c $(<:\=/)
{$(srcdir)/coroutine/arm64}.asm{coroutine/arm64}.obj:
$(ECHO) assembling $(<:\=/)
$(Q) $(AS) $(ASFLAGS) -o $@ $(<:\=/)
{$(srcdir)/prism}.c.obj:
$(ECHO) compiling $(<:\=/)
$(Q) $(CC) $(CFLAGS) $(XCFLAGS) $(CPPFLAGS) $(COUTFLAG)$@ -c $(CSRCFLAG)$(<:\=/)
{$(srcdir)/prism/enc}.c.obj:
$(ECHO) compiling $(<:\=/)
$(Q) $(CC) $(CFLAGS) $(XCFLAGS) $(CPPFLAGS) $(COUTFLAG)$@ -c $(CSRCFLAG)$(<:\=/)
{$(srcdir)/prism/util}.c.obj:
$(ECHO) compiling $(<:\=/)
$(Q) $(CC) $(CFLAGS) $(XCFLAGS) $(CPPFLAGS) $(COUTFLAG)$@ -c $(CSRCFLAG)$(<:\=/)
{$(srcdir)/enc/trans}.c.obj:
$(ECHO) compiling $(<:\=/)
$(Q) $(CC) $(CFLAGS) $(XCFLAGS) $(CPPFLAGS) $(COUTFLAG)$@ -c $(CSRCFLAG)$(<:\=/)
{$(srcdir)/enc}.c.obj:
$(ECHO) compiling $(<:\=/)
$(Q) $(CC) $(CFLAGS) $(XCFLAGS) $(CPPFLAGS) $(COUTFLAG)$@ -c $(CSRCFLAG)$(<:\=/)
{$(srcdir)/missing}.c.obj:
$(ECHO) compiling $(<:\=/)
$(Q) $(CC) $(CFLAGS) $(XCFLAGS) $(CPPFLAGS) $(COUTFLAG)$@ -c $(CSRCFLAG)$(<:\=/)
{$(win_srcdir)}.c.obj:
$(ECHO) compiling $(<:\=/)
$(Q) $(CC) $(CFLAGS) $(XCFLAGS) $(CPPFLAGS) $(COUTFLAG)$@ -c $(CSRCFLAG)$(<:\=/)
{$(srcdir)}.c{}.obj:
$(ECHO) compiling $(<:\=/)
$(Q) $(CC) $(CFLAGS) $(XCFLAGS) $(CPPFLAGS) $(COUTFLAG)$@ -c $(CSRCFLAG)$(<:\=/)
.c.obj:
$(ECHO) compiling $(<:\=/)
$(Q) $(CC) $(CFLAGS) $(XCFLAGS) $(CPPFLAGS) $(COUTFLAG)$@ -c $(CSRCFLAG)$(<:\=/)
BUILTIN_GC_PATH = $(srcdir)/gc/$(BUILTIN_GC).c
gc_impl.obj: $(BUILTIN_GC_PATH)
$(ECHO) compiling $(BUILTIN_GC_PATH:\=/)
$(Q) $(CC) $(CFLAGS) $(XCFLAGS) $(CPPFLAGS) $(COUTFLAG)$@ -c $(CSRCFLAG)$(BUILTIN_GC_PATH:\=/)
{$(srcdir)/missing}.c.asm:
$(ECHO) translating $(<:\=/)
$(Q) $(CC) $(CFLAGS) $(XCFLAGS) $(CPPFLAGS) -Fa$@ -c $(CSRCFLAG)$(<:\=/)
{$(win_srcdir)}.c.asm:
$(ECHO) translating $(<:\=/)
$(Q) $(CC) $(CFLAGS) $(XCFLAGS) $(CPPFLAGS) -Fa$@ -c $(CSRCFLAG)$(<:\=/)
{$(srcdir)}.c{}.asm:
$(ECHO) translating $(<:\=/)
$(Q) $(CC) $(CFLAGS) $(XCFLAGS) $(CPPFLAGS) -Fa$@ -c $(CSRCFLAG)$(<:\=/)
.c.asm:
$(ECHO) translating $(<:\=/)
$(Q) $(CC) $(CFLAGS) $(XCFLAGS) $(CPPFLAGS) -Fa$@ -c $(CSRCFLAG)$(<:\=/)
{$(srcdir)/missing}.c.i:
$(ECHO) preprocessing $(<:\=/)
$(Q) $(CC) $(XCFLAGS) $(CPPFLAGS) -P -Fi:$@ $(CSRCFLAG)$(<:\=/)
{$(win_srcdir)}.c.i:
$(ECHO) preprocessing $(<:\=/)
$(Q) $(CC) $(XCFLAGS) $(CPPFLAGS) -P -Fi:$@ $(CSRCFLAG)$(<:\=/)
{$(srcdir)}.c{}.i:
$(ECHO) preprocessing $(<:\=/)
$(Q) $(CC) $(XCFLAGS) $(CPPFLAGS) -P -Fi:$@ $(CSRCFLAG)$(<:\=/)
.c.i:
$(ECHO) preprocessing $(<:\=/)
$(Q) $(CC) $(XCFLAGS) $(CPPFLAGS) -P -Fi:$@ $(CSRCFLAG)$(<:\=/)
.rc.res:
$(ECHO) compiling $(<:\=/)
$(Q) $(RC) $(RCFLAGS) -I. -I$(<D) $(iconinc) -I$(srcdir)/win32 $(RFLAGS) -fo$@ $(<:\=/)
lex.c: {$(srcdir)}lex.c.blt
copy $(?:/=\) $@
$(srcdir)/enc/jis/props.h: {$(srcdir)}enc/jis/props.h.blt
@if not exist $(@D:/=\) md $(@D:/=\)
$(ECHO) copying $@
$(Q) copy $(?:/=\) $(@:/=\) > nul
$(OBJS): {$(hdrdir)/ruby}win32.h
win32/win32.$(OBJEXT): {$(VPATH)}id.h
dir.$(OBJEXT) win32/win32.$(OBJEXT): {$(srcdir)}win32/dir.h
file.$(OBJEXT) win32/win32.$(OBJEXT): {$(VPATH)}win32/file.h
!if "$(srcdir)" != "." && "$(HAVE_BASERUBY)" == "yes"
revision.h: $(REVISION_H)
!endif
ext/extinit.obj: ext/extinit.c $(SETUP)
$(ECHO) compiling ext/extinit.c
$(Q) $(CC) $(CFLAGS) $(XCFLAGS) $(CPPFLAGS) $(COUTFLAG)$@ -c ext/extinit.c
probes.h: {$(VPATH)}probes.dmyh
@$(ECHO) making dummy <<$(DEST_FILE)
#include "$(*F).dmyh"
<<KEEP
INSNS = optinsn.inc optunifs.inc insns.inc insns_info.inc \
vmtc.inc vm.inc
!if [exit > insns_rules.mk]
!else if [for %I in ($(INSNS)) do \
@for %J in (\
"%I: $$(srcdir)/insns.def {$$(VPATH)}vm_opts.h \" \
" $$(srcdir)/defs/opt_operand.def $$(srcdir)/defs/opt_insn_unif.def \" \
" $$(tooldir)/insns2vm.rb" \
" @$$(RM) $$(PROGRAM)" \
" $$(Q) $$(BASERUBY) -Ku $$(tooldir)/insns2vm.rb $$(INSNS2VMOPT) %I" \
"" \
) do @echo.%~J>>insns_rules.mk]
!else
! include insns_rules.mk
! if [del insns_rules.mk > nul]
! endif
!endif
verconf.h: verconf.mk
loadpath: verconf.h
@$(CPP) $(XCFLAGS) $(CPPFLAGS) $(srcdir)/loadpath.c | \
sed -e '1,/^const char ruby_initial_load_paths/d;/;/,$$d' \
-e '/^^ /!d;s/ *"\\\\0"$$//;s/" *"//g'
!if [exit > rbincs.mk]
!else if [for %I in ($(BUILTIN_RB_SRCS)) do \
@for %J in (\
"%~nI.rbinc: %I $$(tooldir)/mk_builtin_loader.rb $$(DUMP_AST_TARGET)" \
" $$(ECHO) making $$@" \
" $$(Q) $$(BASERUBY) $$(tooldir)/mk_builtin_loader.rb $$(DUMP_AST) %I" \
"" \
) do @echo.%~J>>rbincs.mk]
!else
! include rbincs.mk
! if [del rbincs.mk > nul]
! endif
!endif
RUBYSPEC_CAPIEXT_EXTS =
!if [echo>rubyspec-capiext.mk RUBYSPEC_CAPIEXT_EXTS = \]
!else if [for %I in ($(RUBYSPEC_CAPIEXT_SRCDIR)\*_spec.c) do \
@echo. $$(RUBYSPEC_CAPIEXT)/%~nI.so \>>rubyspec-capiext.mk]
!else if [echo. $$(empty)>>rubyspec-capiext.mk]
!else
! include rubyspec-capiext.mk
! if [del rubyspec-capiext.mk > nul]
! endif
!endif
$(RUBYSPEC_CAPIEXT_EXTS): $(RUBYSPEC_CAPIEXT_DEPS)
rubyspec-capiext: $(RUBYSPEC_CAPIEXT_EXTS)
{$(RUBYSPEC_CAPIEXT_SRCDIR)}.c{$(RUBYSPEC_CAPIEXT)}.so:
$(ECHO) building $(@F)
$(Q)$(MAKEDIRS) $(@D)
$(Q)(echo EXPORTS&&echo Init_$(*F))> $*.def
$(Q)$(LDSHARED) -Fe$(@) -Fo$(*).obj $(INCFLAGS) $(CFLAGS) $(CPPFLAGS) $< -link $(DLDFLAGS) $(XLDFLAGS) $(LIBRUBYARG) $(LIBS) $(LOCAL_LIBS) -implib:$*.lib -pdb:$*.pdb -def:$*.def
$(Q)$(RM) $*.def $*.exp $*.lib $*.obj $*.pdb
yesterday:
(set TZ=UTC-9) && \
for /f "usebackq" %H in \
(`$(GIT_LOG_FORMAT)%H -1 "--before=00:00"`) do \
$(GIT_IN_SRC) reset --hard %%H