summaryrefslogtreecommitdiff
path: root/cygwin/GNUmakefile.in
blob: 5385cfde64e7ee9fbc50a6afa1392a093b4e9179 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
override MFLAGS := $(filter-out -j%,$(MFLAGS))
override MAKEFLAGS := $(filter-out -j%,$(MAKEFLAGS))
include Makefile

ENABLE_SHARED=@ENABLE_SHARED@
DLLWRAP = @DLLWRAP@ --target=@target_os@ --driver-name="$(CC)"
WINDRES = @WINDRES@ --preprocessor="$(CPP) -xc" -DRC_INVOKED
STRIP = @STRIP@

ifeq (@target_os@,cygwin)
  DLL_BASE_NAME := $(LIBRUBY_SO:.dll=)
else
  DLL_BASE_NAME := $(RUBY_SO_NAME)
  DLLWRAP += -mno-cygwin
  VPATH := $(VPATH):$(srcdir)/win32
endif

ifneq ($(ENABLE_SHARED),yes)
  RUBY_EXP = $(RUBY_INSTALL_NAME).exp
  EXTOBJS = $(RUBY_EXP)
  LIBRUBYARG = $(LIBRUBY_A)
  LIBRUBY_SO =
endif

ifeq ($(RUBY_INSTALL_NAME),ruby)
  RUBYW_INSTALL_NAME = $(RUBY_INSTALL_NAME)w
else
  RUBYW_INSTALL_NAME = $(subst ruby,rubyw,$(RUBY_INSTALL_NAME))
endif

WPROGRAM = $(RUBYW_INSTALL_NAME)$(EXEEXT)
STUBPROGRAM = rubystub$(EXEEXT)
IGNOREDPATTERNS = %~ .% %.orig %.rej \#%\#
SCRIPTPROGRAMS = $(addsuffix $(EXEEXT),$(filter-out $(IGNOREDPATTERNS),$(notdir $(wildcard $(srcdir)/bin/*))))

-include uncommon.mk

include $(srcdir)/defs/gmake.mk

SOLIBS := $(DLL_BASE_NAME).res.@OBJEXT@ $(SOLIBS)
override EXTOBJS += $(if $(filter-out $(RUBYW_INSTALL_NAME),$(@:$(EXEEXT)=)),$(RUBY_INSTALL_NAME),$(@:$(EXEEXT)=)).res.$(OBJEXT)
RCFILES = $(RUBY_INSTALL_NAME).rc $(RUBYW_INSTALL_NAME).rc $(DLL_BASE_NAME).rc
RUBYDEF = $(DLL_BASE_NAME).def

ruby: $(PROGRAM)
rubyw: $(WPROGRAM)
stub: $(STUBPROGRAM)
scriptbin: $(SCRIPTPROGRAMS)

%$(EXEEXT): bin/% $(STUBPROGRAM)
	$(ECHO) generating $@
	$(Q) { cat $(STUBPROGRAM); echo; sed -e '1{' -e '/^#!.*ruby/!i\' -e '#!/bin/ruby' -e '}' $<; } > $@
	$(Q) chmod +x $@

$(LIBRUBY): $(RUBY_EXP) $(LIBRUBY_SO)
$(RUBY_EXP) $(LIBRUBY_SO): $(DLL_BASE_NAME).res.@OBJEXT@

%.res.@OBJEXT@: %.rc
	$(ECHO) compiling $@
	$(Q) $(WINDRES) --include-dir . --include-dir $(<D) --include-dir $(srcdir)/win32 $< $@

%.rc: $(RBCONFIG) $(srcdir)/revision.h $(srcdir)/win32/resource.rb
	$(ECHO) generating $@
	$(Q) $(MINIRUBY) $(srcdir)/win32/resource.rb \
	  -ruby_name=$(RUBY_INSTALL_NAME) -rubyw_name=$(RUBYW_INSTALL_NAME) \
	  -so_name=$(DLL_BASE_NAME) -output=$(*F) \
	  . $(icondirs) $(srcdir)/win32

$(PROGRAM): $(RUBY_INSTALL_NAME).res.@OBJEXT@
$(WPROGRAM): $(RUBYW_INSTALL_NAME).res.@OBJEXT@
	@rm -f $@
	$(ECHO) linking $@
	$(Q) $(PURIFY) $(CC) -mwindows -e $(SYMBOL_PREFIX)mainCRTStartup $(LDFLAGS) $(XLDFLAGS) \
	  $(MAINOBJ) $(EXTOBJS) $(LIBRUBYARG) $(LIBS) -o $@
$(STUBPROGRAM): $(RUBY_INSTALL_NAME).res.@OBJEXT@ win32/stub.@OBJEXT@
	@rm -f $@
	$(ECHO) linking $@
	$(Q) $(PURIFY) $(CC) $(LDFLAGS) $(XLDFLAGS) \
	  win32/stub.@OBJEXT@ $(EXTOBJS) $(LIBRUBYARG) $(LIBS) -o $@
	$(if $(STRIP),$(Q) $(STRIP) $@)

$(RUBY_EXP): $(LIBRUBY_A)
	$(ECHO) creating $@
	$(Q) $(DLLWRAP) \
	  --output-exp=$(RUBY_EXP) \
	  --export-all $(LIBRUBY_A) $(LIBS) -o $(PROGRAM)
	$(Q) $(LDSHARED) $(DLDFLAGS) $(OBJS) dmyext.o $(SOLIBS) -o $(PROGRAM)
	@rm -f $(PROGRAM)

GNUmakefile:	$(srcdir)/cygwin/GNUmakefile.in

ifeq (@target_os@,mingw32)
$(OBJS) $(MAINOBJ): win32.h

dir.$(OBJEXT) win32/win32.$(OBJEXT): win32/dir.h
file.$(OBJEXT) win32/win32.$(OBJEXT): win32/file.h

MSYS2_ARG_CONV_EXCL_PARAM = --exclude=;--name=

yes-test-ruby:	 export MSYS2_ARG_CONV_EXCL=$(MSYS2_ARG_CONV_EXCL_PARAM)
yes-test-all:	 export MSYS2_ARG_CONV_EXCL=$(MSYS2_ARG_CONV_EXCL_PARAM)
yes-test-almost: export MSYS2_ARG_CONV_EXCL=$(MSYS2_ARG_CONV_EXCL_PARAM)

endif

$(LIBRUBY_SO): $(RUBYDEF)

$(RUBYDEF): $(LIBRUBY_A) $(PREP) $(RBCONFIG)
	$(ECHO) generating $@
	$(Q) $(MINIRUBY) $(srcdir)/win32/mkexports.rb -output=$@ $(LIBRUBY_A)

clean-local::
	@$(RM) $(RUBYDEF)

ifeq (@target_os@,cygwin)
cygwin-$(RUBY_INSTALL_NAME)$(MAJOR)$(MINOR)0.dll: $(LIBRUBY_A) $(RUBYDEF)
	$(ECHO) generating $@
	$(Q) @DLLWRAP@ -s --def=$(RUBYDEF) -o $@

win32/stub.@OBJEXT@: $(TIMESTAMPDIR)/.win32.time

$(TIMESTAMPDIR)/.win32.time:
	$(Q) $(MAKEDIRS) win32 $(@D)
	@exit > $@

clean-platform: clean-win32
clean-win32:
	$(Q) $(RM) $(TIMESTAMPDIR)/.win32.time
	-$(Q) $(RMDIR) win32 2> $(NULL) || exit 0
endif

clean-local::
	@$(RM) $(RUBY_EXP) $(RCFILES:.rc=.res.@OBJEXT@)
	@$(RM) $(RCFILES)