Skip to content

Commit 9b454bf

Browse files
committed
rubystub
* rubystub.c: generalize win32/stub.c. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@55973 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
1 parent e79b23c commit 9b454bf

File tree

7 files changed

+99
-66
lines changed

7 files changed

+99
-66
lines changed

ChangeLog

+4
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
Sat Aug 20 11:20:32 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
2+
3+
* rubystub.c: generalize win32/stub.c.
4+
15
Fri Aug 19 11:39:06 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
26

37
* parse.y (primary): allow parenthesised statement as a method

cygwin/GNUmakefile.in

+1-16
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,6 @@ else
1313
DLL_BASE_NAME := $(RUBY_SO_NAME)
1414
DLLWRAP += -mno-cygwin
1515
VPATH := $(VPATH):$(srcdir)/win32
16-
STUBPROGRAM = rubystub$(EXEEXT)
17-
IGNOREDPATTERNS = %~ .% %.orig %.rej \#%\#
18-
SCRIPTPROGRAMS = $(addsuffix $(EXEEXT),$(filter-out $(IGNOREDPATTERNS),$(notdir $(wildcard $(srcdir)/bin/*))))
1916
endif
2017

2118
ifneq ($(ENABLE_SHARED),yes)
@@ -44,13 +41,6 @@ RUBYDEF = $(DLL_BASE_NAME).def
4441

4542
ruby: $(PROGRAM)
4643
rubyw: $(WPROGRAM)
47-
stub: $(STUBPROGRAM)
48-
scriptbin: $(SCRIPTPROGRAMS)
49-
50-
%$(EXEEXT): bin/% $(STUBPROGRAM)
51-
$(ECHO) generating $@
52-
$(Q) { cat $(STUBPROGRAM); echo; sed -e '1{' -e '/^#!.*ruby/!i\' -e '#!/bin/ruby' -e '}' $<; } > $@
53-
$(Q) chmod +x $@
5444

5545
$(LIBRUBY): $(RUBY_EXP) $(LIBRUBY_SO)
5646
$(RUBY_EXP) $(LIBRUBY_SO): $(DLL_BASE_NAME).res.@OBJEXT@
@@ -72,12 +62,7 @@ $(WPROGRAM): $(RUBYW_INSTALL_NAME).res.@OBJEXT@
7262
$(ECHO) linking $@
7363
$(Q) $(PURIFY) $(CC) -mwindows -e $(SYMBOL_PREFIX)mainCRTStartup $(LDFLAGS) $(XLDFLAGS) \
7464
$(MAINOBJ) $(EXTOBJS) $(LIBRUBYARG) $(LIBS) -o $@
75-
$(STUBPROGRAM): $(RUBY_INSTALL_NAME).res.@OBJEXT@ win32/stub.@OBJEXT@
76-
@rm -f $@
77-
$(ECHO) linking $@
78-
$(Q) $(PURIFY) $(CC) $(LDFLAGS) $(XLDFLAGS) \
79-
win32/stub.@OBJEXT@ $(EXTOBJS) $(LIBRUBYARG) $(LIBS) -o $@
80-
$(if $(STRIP),$(Q) $(STRIP) $@)
65+
$(STUBPROGRAM): $(RUBY_INSTALL_NAME).res.@OBJEXT@
8166

8267
$(RUBY_EXP): $(LIBRUBY_A)
8368
$(ECHO) creating $@

defs/gmake.mk

+33
Original file line numberDiff line numberDiff line change
@@ -92,3 +92,36 @@ else
9292
$(Q) mv $@.new $@
9393
$(Q) $(RMALL) make_des_table*
9494
endif
95+
96+
STUBPROGRAM = rubystub$(EXEEXT)
97+
IGNOREDPATTERNS = %~ .% %.orig %.rej \#%\#
98+
SCRIPTBINDIR := $(if $(EXEEXT),,exec/)
99+
SCRIPTPROGRAMS = $(addprefix $(SCRIPTBINDIR),$(addsuffix $(EXEEXT),$(filter-out $(IGNOREDPATTERNS),$(notdir $(wildcard $(srcdir)/bin/*)))))
100+
101+
stub: $(STUBPROGRAM)
102+
scriptbin: $(SCRIPTPROGRAMS)
103+
ifneq ($(STUBPROGRAM),rubystub)
104+
rubystub: $(STUBPROGRAM)
105+
endif
106+
107+
$(SCRIPTPROGRAMS): $(STUBPROGRAM)
108+
109+
$(STUBPROGRAM): rubystub.$(OBJEXT) $(LIBRUBY) $(MAINOBJ) $(OBJS) $(EXTOBJS) $(SETUP) $(PREP)
110+
111+
rubystub$(EXEEXT):
112+
@rm -f $@
113+
$(ECHO) linking $@
114+
$(Q) $(PURIFY) $(CC) $(LDFLAGS) $(XLDFLAGS) rubystub.$(OBJEXT) $(EXTOBJS) $(LIBRUBYARG) $(MAINLIBS) $(LIBS) $(EXTLIBS) $(OUTFLAG)$@
115+
$(Q) $(POSTLINK)
116+
$(if $(STRIP),$(Q) $(STRIP) $@)
117+
118+
$(SCRIPTBINDIR)%$(EXEEXT): bin/% $(STUBPROGRAM) \
119+
$(if $(SCRIPTBINDIR),$(TIMESTAMPDIR)/.exec.time)
120+
$(ECHO) generating $@
121+
$(Q) { cat $(STUBPROGRAM); echo; sed -e '1{' -e '/^#!.*ruby/!i\' -e '#!/bin/ruby' -e '}' $<; } > $@
122+
$(Q) chmod +x $@
123+
$(Q) $(POSTLINK)
124+
125+
$(TIMESTAMPDIR)/.exec.time:
126+
$(Q) mkdir exec
127+
$(Q) exit > $@

missing/setproctitle.c

+1
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
#include "ruby.h"
3636
#include "ruby/util.h"
3737
#define compat_init_setproctitle ruby_init_setproctitle
38+
RUBY_FUNC_EXPORTED void ruby_init_setproctitle(int argc, char *argv[]);
3839

3940
#ifndef HAVE_SETPROCTITLE
4041

rubystub.c

+57
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
#include "internal.h"
2+
#if defined HAVE_DLADDR
3+
#include <dlfcn.h>
4+
#endif
5+
static void* stub_options(int argc, char **argv);
6+
#define ruby_options stub_options
7+
#include <main.c>
8+
#undef ruby_options
9+
10+
void *
11+
stub_options(int argc, char **argv)
12+
{
13+
char xflag[] = "-x";
14+
char *xargv[4] = {NULL, xflag};
15+
char *cmd = argv[0];
16+
void *ret;
17+
18+
#if defined __CYGWIN__ || defined _WIN32
19+
/* GetCommandLineW should contain the accessible path,
20+
* use argv[0] as is */
21+
#elif defined __linux__
22+
{
23+
char selfexe[MAXPATHLEN];
24+
ssize_t len = readlink("/proc/self/exe", selfexe, sizeof(selfexe));
25+
if (len < 0) {
26+
perror("readlink(\"/proc/self/exe\")");
27+
return NULL;
28+
}
29+
selfexe[len] = '\0';
30+
cmd = selfexe;
31+
}
32+
#elif defined HAVE_DLADDR
33+
{
34+
Dl_info dli;
35+
if (!dladdr(stub_options, &dli)) {
36+
perror("dladdr");
37+
return NULL;
38+
}
39+
cmd = (char *)dli.dli_fname;
40+
}
41+
#endif
42+
43+
#ifndef HAVE_SETPROCTITLE
44+
/* argc and argv must be the original */
45+
ruby_init_setproctitle(argc, argv);
46+
#endif
47+
48+
/* set script with -x option */
49+
/* xargv[0] is NULL not to re-initialize setproctitle again */
50+
xargv[2] = cmd;
51+
ret = ruby_options(3, xargv);
52+
53+
/* set all arguments to ARGV */
54+
ruby_set_argv(argc - 1, argv + 1);
55+
56+
return ret;
57+
}

win32/Makefile.sub

+3-2
Original file line numberDiff line numberDiff line change
@@ -418,6 +418,7 @@ prog: config
418418
ruby: $(PROGRAM)
419419
rubyw: $(WPROGRAM)
420420
stub: $(STUBPROGRAM)
421+
rubystub: $(STUBPROGRAM)
421422

422423
!if !exist(enc/trans/newline.c) && exist($(srcdir)/enc/trans/newline.c)
423424
NEWLINE_C = $(srcdir)/enc/trans/newline.c
@@ -1005,9 +1006,9 @@ $(WPROGRAM): $(MAINOBJ) $(WINMAINOBJ) $(LIBRUBY_SO) $(RUBYW_INSTALL_NAME).res
10051006
!endif
10061007

10071008
!if "$(STUBPROGRAM)" != ""
1008-
$(STUBPROGRAM): win32/stub.$(OBJEXT) $(LIBRUBY) $(LIBRUBY_SO) $(RUBY_INSTALL_NAME).res
1009+
$(STUBPROGRAM): rubystub.$(OBJEXT) $(LIBRUBY) $(LIBRUBY_SO) $(RUBY_INSTALL_NAME).res
10091010
$(ECHO) linking $(@:\=/)
1010-
$(Q) $(PURIFY) $(CC) win32/stub.$(OBJEXT) $(RUBY_INSTALL_NAME).res \
1011+
$(Q) $(PURIFY) $(CC) rubystub.$(OBJEXT) $(RUBY_INSTALL_NAME).res \
10111012
$(OUTFLAG)$@ $(LIBRUBYARG) -link $(LDFLAGS) $(XLDFLAGS)
10121013
$(Q) $(LDSHARED_0)
10131014
$(Q) $(LDSHARED_1)

win32/stub.c

-48
This file was deleted.

0 commit comments

Comments
 (0)