Win32: Refactor configurations

Pass configure options to the generated Makefile as-is.
This commit is contained in:
Nobuyoshi Nakada 2024-10-28 14:48:41 +09:00
parent a687b2eced
commit a3bfddf96f
No known key found for this signature in database
GPG Key ID: 3582D74E1FEE4465
3 changed files with 123 additions and 166 deletions

View File

@ -190,9 +190,6 @@ ruby_version = $(MAJOR).$(MINOR).0
!if defined(ABI_VERSION)
ruby_version = $(ruby_version)+$(ABI_VERSION)
!endif
!if !defined(RUBY_VERSION_NAME)
RUBY_VERSION_NAME = $(RUBY_BASE_NAME)-$(ruby_version)
!endif
RUBY_PROGRAM_VERSION = $(MAJOR).$(MINOR).$(TEENY)
!ifndef RUBY_SO_NAME
@ -1131,6 +1128,11 @@ 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
@ -1140,7 +1142,7 @@ 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_BASE_NAME}-$$(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

View File

@ -10,13 +10,16 @@ for %%I in (%0) do if /%%~dpI/ == /%CD%\/ (
set XINCFLAGS=
set XLDFLAGS=
echo> ~tmp~.mak ####
echo>> ~tmp~.mak conf = %0
echo>> ~tmp~.mak $(conf): nul
echo>> ~tmp~.mak @del ~setup~.mak
echo>> ~tmp~.mak @$(MAKE) -l$(MAKEFLAGS) -f $(@D)/setup.mak \
if exist pathlist.tmp del pathlist.tmp
echo>confargs.tmp #define CONFIGURE_ARGS \
set conf=%0
set pathlist=
set config_make=confargs~%RANDOM%.mak
set confargs=%config_make:.mak=.c%
echo>%config_make% # CONFIGURE
(
echo #define $ $$ //
echo !ifndef CONFIGURE_ARGS
echo #define CONFIGURE_ARGS \
) >%confargs%
:loop
set opt=%1
if "%1" == "" goto :end
@ -28,6 +31,7 @@ if "%1" == "target" goto :target
if "%1" == "--with-static-linked-ext" goto :extstatic
if "%1" == "--program-prefix" goto :pprefix
if "%1" == "--program-suffix" goto :suffix
if "%1" == "--program-transform-name" goto :transform_name
if "%1" == "--program-name" goto :installname
if "%1" == "--install-name" goto :installname
if "%1" == "--so-name" goto :soname
@ -59,166 +63,170 @@ if "%opt:~0,7%" == "--with-" goto :witharg
if "%1" == "-h" goto :help
if "%1" == "--help" goto :help
if "%opt:~0,1%" == "-" (
echo>>confargs.tmp %1 \
echo>>%confargs% %1 \
set witharg=
) else if "%witharg%" == "" (
echo>>confargs.tmp %1 \
echo>>%confargs% %1 \
) else (
echo>>confargs.tmp ,%1\
echo>>%confargs% ,%1\
)
shift
goto :loop ;
:srcdir
echo>> ~tmp~.mak "srcdir=%~2" \
echo>>confargs.tmp --srcdir=%2 \
echo>> %config_make% srcdir = %~2
echo>>%confargs% --srcdir=%2 \
shift
shift
goto :loop ;
:prefix
echo>> ~tmp~.mak "prefix=%~2" \
echo>>confargs.tmp %1=%2 \
echo>> %config_make% prefix = %~2
echo>>%confargs% %1=%2 \
shift
shift
goto :loop ;
:pprefix
echo>> ~tmp~.mak "PROGRAM_PREFIX=%~2" \
echo>>confargs.tmp %1=%2 \
echo>> %config_make% PROGRAM_PREFIX = %~2
echo>>%confargs% %1=%2 \
shift
shift
goto :loop ;
:suffix
echo>> ~tmp~.mak "PROGRAM_SUFFIX=%~2" \
echo>>confargs.tmp %1=%2 \
echo>> %config_make% PROGRAM_SUFFIX = %~2
echo>>%confargs% %1=%2 \
shift
shift
goto :loop ;
:installname
echo>> ~tmp~.mak "RUBY_INSTALL_NAME=%~2" \
echo>>confargs.tmp %1=%2 \
echo>> %config_make% RUBY_INSTALL_NAME = %~2
echo>>%confargs% %1=%2 \
shift
shift
goto :loop ;
:soname
echo>> ~tmp~.mak "RUBY_SO_NAME=%~2" \
echo>>confargs.tmp %1=%2 \
echo>> %config_make% RUBY_SO_NAME = %~2
echo>>%confargs% %1=%2 \
shift
shift
goto :loop ;
:transform_name
shift
shift
goto :loop ;
:target
echo>> ~tmp~.mak "%~2" \
echo>>confargs.tmp --target=%2 \
if NOT "%~2" == "x64-mswin64" goto target3
:target2
echo>> ~tmp~.mak "TARGET_OS=mswin64" \
:target3
echo>> %config_make% target = %~2
echo>>%confargs% --target=%2 \
if "%~2" == "x64-mswin64" (
echo>> %config_make% TARGET_OS = mswin64
)
shift
shift
goto :loop ;
:extstatic
echo>> ~tmp~.mak "EXTSTATIC=static" \
echo>>confargs.tmp %1 \
echo>> %config_make% EXTSTATIC = static
echo>>%confargs% %1 \
shift
goto :loop ;
:enable-rdoc
echo>> ~tmp~.mak "RDOCTARGET=rdoc" \
echo>>confargs.tmp %1 \
echo>> %config_make% RDOCTARGET = rdoc
echo>>%confargs% %1 \
shift
goto :loop ;
:disable-rdoc
echo>> ~tmp~.mak "RDOCTARGET=nodoc" \
echo>>confargs.tmp %1 \
echo>> %config_make% RDOCTARGET = nodoc
echo>>%confargs% %1 \
shift
goto :loop ;
:enable-lib
echo>> ~tmp~.mak "INSTALL_STATIC_LIBRARY=yes" \
echo>>confargs.tmp %1 \
echo>> %config_make% INSTALL_STATIC_LIBRARY = yes
echo>>%confargs% %1 \
shift
goto :loop ;
:disable-lib
echo>> ~tmp~.mak "INSTALL_STATIC_LIBRARY=no" \
echo>>confargs.tmp %1 \
echo>> %config_make% INSTALL_STATIC_LIBRARY = no
echo>>%confargs% %1 \
shift
goto :loop ;
:enable-debug-env
echo>> ~tmp~.mak "ENABLE_DEBUG_ENV=yes" \
echo>>confargs.tmp %1 \
echo>> %config_make% ENABLE_DEBUG_ENV = yes
echo>>%confargs% %1 \
shift
goto :loop ;
:disable-debug-env
echo>> ~tmp~.mak "ENABLE_DEBUG_ENV=no" \
echo>>confargs.tmp %1 \
echo>> %config_make% ENABLE_DEBUG_ENV = no
echo>>%confargs% %1 \
shift
goto :loop ;
:enable-devel
echo>> ~tmp~.mak "RUBY_DEVEL=yes" \
echo>>confargs.tmp %1 \
echo>> %config_make% RUBY_DEVEL = yes
echo>>%confargs% %1 \
shift
goto :loop ;
:disable-devel
echo>> ~tmp~.mak "RUBY_DEVEL=no" \
echo>>confargs.tmp %1 \
echo>> %config_make% RUBY_DEVEL = no
echo>>%confargs% %1 \
shift
goto :loop ;
:enable-rubygems
echo>> ~tmp~.mak "USE_RUBYGEMS=yes" \
echo>>confargs.tmp %1 \
echo>> %config_make% USE_RUBYGEMS = yes
echo>>%confargs% %1 \
shift
goto :loop ;
:disable-rubygems
echo>> ~tmp~.mak "USE_RUBYGEMS=no" \
echo>>confargs.tmp %1 \
echo>> %config_make% USE_RUBYGEMS = no
echo>>%confargs% %1 \
shift
goto :loop ;
:ntver
echo>> ~tmp~.mak "NTVER=%~2" \
echo>>confargs.tmp %1=%2 \
echo>> %config_make% NTVER = %~2
echo>>%confargs% %1=%2 \
shift
shift
goto :loop ;
:extout
echo>> ~tmp~.mak "EXTOUT=%~2" \
echo>>confargs.tmp %1=%2 \
if not "%~2" == ".ext" (echo>> %config_make% EXTOUT = %~2)
echo>>%confargs% %1=%2 \
shift
shift
goto :loop ;
:path
echo>>pathlist.tmp %~2;\
echo>>confargs.tmp %1=%2 \
set pathlist=%pathlist%%~2;
echo>>%confargs% %1=%2 \
shift
shift
goto :loop ;
:baseruby
echo>> ~tmp~.mak "BASERUBY=%~2" \
echo>>confargs.tmp %1=%2 \
echo>> %config_make% BASERUBY = %~2
echo>>%confargs% %1=%2 \
shift
shift
goto :loop ;
:nobaseruby
echo>> ~tmp~.mak "HAVE_BASERUBY=no" \
echo>>confargs.tmp %1=%2 \
echo>> %config_make% HAVE_BASERUBY = no
echo>>%confargs% %1=%2 \
shift
goto :loop ;
:libdir
echo>> ~tmp~.mak "libdir_basename=%~2" \
echo>>confargs.tmp %1=%2 \
echo>> %config_make% libdir_basename = %~2
echo>>%confargs% %1=%2 \
shift
shift
goto :loop ;
:git
echo>> ~tmp~.mak "GIT=%~2" \
echo>>confargs.tmp %1=%2 \
echo>> %config_make% GIT = %~2
echo>>%confargs% %1=%2 \
shift
shift
goto :loop ;
:nogit
echo>> ~tmp~.mak "GIT=never-use" \
echo>> ~tmp~.mak "HAVE_GIT=no" \
echo>>confargs.tmp %1 \
echo>> %config_make% GIT = never-use
echo>> %config_make% HAVE_GIT = no
echo>>%confargs% %1 \
shift
goto :loop ;
:gmp
echo>> ~tmp~.mak "WITH_GMP=yes" \
echo>>confargs.tmp %1=1 \
echo>> %config_make% WITH_GMP = yes
echo>>%confargs% %1=1 \
shift
shift
goto :loop ;
@ -233,13 +241,13 @@ goto :loop ;
)
)
:witharg
echo>>confargs.tmp %1=%2\
echo>>%confargs% %1=%2\
set witharg=1
shift
shift
goto :loop ;
:withoutarg
echo>>confargs.tmp %1 \
echo>>%confargs% %1 \
shift
goto :loop ;
:help
@ -259,35 +267,41 @@ goto :loop ;
echo --disable-install-doc do not install rdoc indexes during install
echo --with-ntver=0xXXXX target NT version (shouldn't use with old SDK)
echo Note that `,' and `;' need to be enclosed within double quotes in batch file command line.
del *.tmp
del ~tmp~.mak
del %confargs% %config_make%
goto :exit
:end
echo>> ~tmp~.mak WIN32DIR=$(@D:\=/)
echo.>>confargs.tmp
echo>confargs.c #define $ $$ //
echo>>confargs.c !ifndef CONFIGURE_ARGS
type>>confargs.c confargs.tmp
echo>>confargs.c configure_args = CONFIGURE_ARGS
echo>>confargs.c !endif
echo>>confargs.c #undef $
if exist pathlist.tmp echo>>confargs.c #define PATH_LIST \
if exist pathlist.tmp type>>confargs.c pathlist.tmp
if exist pathlist.tmp echo.>>confargs.c
if exist pathlist.tmp echo>>confargs.c pathlist = PATH_LIST
cl -EP confargs.c > ~setup~.mak 2>nul
if exist pathlist.tmp echo>>~setup~.mak PATH = $(pathlist:;=/bin;)$(PATH)
if exist pathlist.tmp echo>>~setup~.mak INCLUDE = $(pathlist:;=/include;)
if exist pathlist.tmp echo>>~setup~.mak LIB = $(pathlist:;=/lib;)
echo>>~setup~.mak XINCFLAGS = %XINCFLAGS%
echo>>~setup~.mak XLDFLAGS = %XLDFLAGS%
type>>~setup~.mak ~tmp~.mak
del *.tmp > nul
del ~tmp~.mak > nul
echo>>~setup~.mak @if exist Makefile.old del Makefile.old
echo>>~setup~.mak @if exist Makefile ren Makefile Makefile.old
echo>>~setup~.mak @ren Makefile.new Makefile
nmake -alf ~setup~.mak MAKEFILE=Makefile.new
(
echo //
echo configure_args = CONFIGURE_ARGS
echo !endif
echo #undef $
) >> %confargs%
(
cl -EP %confargs% 2>nul | findstr "! ="
echo.
if NOT "%XINCFLAGS%" == "" echo XINCFLAGS = %XINCFLAGS%
if NOT "%XLDFLAGS%" == "" echo XLDFLAGS = %XLDFLAGS%
if NOT "%pathlist%" == "" (
call echo PATH = %%pathlist:;=/bin;%%$^(PATH^)
call echo INCLUDE = %%pathlist:;=/include;%%$^(INCLUDE^)
call echo LIB = %%pathlist:;=/lib;%%$^(LIB^)
)
) >> %config_make%
del %confargs% > nul
set setup_make=%config_make:confargs=setup%
(
echo #### -*- makefile -*-
echo conf = %conf%
echo $^(conf^): nul
echo @del %setup_make%
echo @$^(MAKE^) -l$^(MAKEFLAGS^) -f $^(@D^)/setup.mak \
echo WIN32DIR=$^(@D:\=/^) config_make=%config_make%
echo -@move /y Makefile Makefile.old ^> nul 2^> nul
echo @ren Makefile.new Makefile
) > %setup_make%
nmake -alf %setup_make% MAKEFILE=Makefile.new
exit /b %ERRORLEVEL%
:exit
@endlocal

View File

@ -1,5 +1,7 @@
# -*- makefile -*-
!include $(config_make)
!if "$(srcdir)" != ""
WIN32DIR = $(srcdir)/win32
!elseif "$(WIN32DIR)" == "win32"
@ -40,51 +42,13 @@ x64-mswin64: -prologue- -x64- -epilogue-
MAKE = nmake
srcdir = $(srcdir:\=/)
prefix = $(prefix:\=/)
!if defined(libdir_basename)
libdir_basename = $(libdir_basename)
!endif
EXTSTATIC = $(EXTSTATIC)
!if defined(RDOCTARGET)
RDOCTARGET = $(RDOCTARGET)
!endif
!if defined(EXTOUT) && "$(EXTOUT)" != ".ext"
EXTOUT = $(EXTOUT)
!endif
!if defined(NTVER)
NTVER = $(NTVER)
!endif
!if defined(USE_RUBYGEMS)
USE_RUBYGEMS = $(USE_RUBYGEMS)
!endif
!if defined(ENABLE_DEBUG_ENV)
ENABLE_DEBUG_ENV = $(ENABLE_DEBUG_ENV)
!endif
!if defined(RJIT_SUPPORT)
RJIT_SUPPORT = $(RJIT_SUPPORT)
!endif
!if defined(XINCFLAGS)
CPPFLAGS = $(XINCFLAGS)
!endif
!if defined(XLDFLAGS)
XLDFLAGS = $(XLDFLAGS)
!endif
# TOOLS
<<
@type $(config_make) >>$(MAKEFILE)
@del $(config_make) > nul
!if defined(BASERUBY)
$(BASERUBY:/=\) "$(srcdir)/tool/missing-baseruby.bat"
@echo BASERUBY = $(BASERUBY:/=\)>> $(MAKEFILE)
!endif
!if "$(RUBY_DEVEL)" == "yes"
RUBY_DEVEL = yes
!endif
!if "$(GIT)" != ""
@echo GIT = $(GIT)>> $(MAKEFILE)
!endif
!if "$(HAVE_GIT)" != ""
@echo HAVE_GIT = $(HAVE_GIT)>> $(MAKEFILE)
!endif
!if "$(WITH_GMP)" != "no"
@($(CC) $(XINCFLAGS) <<conftest.c -link $(XLDFLAGS) gmp.lib > nul && (echo USE_GMP = yes) || exit /b 0) >>$(MAKEFILE)
#include <gmp.h>
@ -235,24 +199,6 @@ set MSC_VER
del %0 & exit
<<
-program-name-:
@type << >>$(MAKEFILE)
# PROGRAM-NAME
!ifdef PROGRAM_PREFIX
PROGRAM_PREFIX = $(PROGRAM_PREFIX)
!endif
!ifdef PROGRAM_SUFFIX
PROGRAM_SUFFIX = $(PROGRAM_SUFFIX)
!endif
!ifdef RUBY_INSTALL_NAME
RUBY_INSTALL_NAME = $(RUBY_INSTALL_NAME)
!endif
!ifdef RUBY_SO_NAME
RUBY_SO_NAME = $(RUBY_SO_NAME)
!endif
<<
-generic-: nul
@$(CPP) <<conftest.c 2>nul | findstr = >>$(MAKEFILE)
#if defined _M_X64
@ -281,7 +227,7 @@ MACHINE = x86
-i686-: -ix86-
@echo $(CPU) = 6>>$(MAKEFILE)
-epilogue-: -compiler- -program-name- -encs-
-epilogue-: -compiler- -encs-
-encs-: nul
@$(APPEND)
@ -289,11 +235,6 @@ MACHINE = x86
@$(MAKE) -l -f $(srcdir)/win32/enc-setup.mak srcdir="$(srcdir)" MAKEFILE=$(MAKEFILE)
-epilogue-: nul
!if exist(confargs.c)
@$(APPEND)
@$(CPP) confargs.c 2>&1 | findstr "! =" >> $(MAKEFILE)
@del confargs.c
!endif
@type << >>$(MAKEFILE)
# RUBY_INSTALL_NAME = ruby