Module: Tebako::Packager::PatchBuildsystem

Included in:
Pass2Patch
Defined in:
lib/tebako/packager/patch_buildsystem.rb

Overview

Ruby buildsystem patches (pass2)

Constant Summary collapse

COMMON_MK_PATCH =

This patch forces rebuild of extinit.c when exts.mk changes exts.mk changes when we rebuild extensions to make them statically linked [TODO] it is possible that we can build extensions statically on pass1 and it will eliminate the need for this patch

{
  "ext/extinit.c: $(srcdir)/template/extinit.c.tmpl $(PREP)" =>
    "ext/extinit.c: $(srcdir)/template/extinit.c.tmpl $(PREP) $(EXTS_MK)"
}.freeze
TEMPLATE_MAKEFILE_IN_BASE_PATTERN_PRE_3_1 =

This patch changes libraries that are used for Ruby linking MAINLIBS is patched elsewhere (not with literal but dynamically) to haold the list of sattic libraries and related options Also we have to put LIBRUBYARG_STATIC instead of LIBRUBYARG to link with static libruby, configure's --disable-shared option does not do it Several variants depending on os and version

"\t\t$(Q) $(PURIFY) $(CC) $(LDFLAGS) $(XLDFLAGS) $(MAINOBJ) " \
"$(EXTOBJS) $(LIBRUBYARG) $(MAINLIBS) $(LIBS) $(EXTLIBS) $(OUTFLAG)$@"
TEMPLATE_MAKEFILE_IN_BASE_PATCH_PRE_3_1 =
"# -- Start of tebako patch --\n" \
"\t\t$(Q) $(PURIFY) $(CC) $(LDFLAGS) $(MAINOBJ) " \
"$(EXTOBJS) $(LIBRUBYARG_STATIC) $(OUTFLAG)$@\n" \
"# -- End of tebako patch --"
TEMPLATE_MAKEFILE_IN_BASE_PATTERN_PRE_3_3 =
"\t\t$(Q) $(PURIFY) $(CC) $(EXE_LDFLAGS) $(XLDFLAGS) $(MAINOBJ) $(EXTOBJS) " \
"$(LIBRUBYARG) $(MAINLIBS) $(LIBS) $(EXTLIBS) $(OUTFLAG)$@"
TEMPLATE_MAKEFILE_IN_BASE_PATTERN =
"\t\t$(Q) $(PURIFY) $(CC) $(EXE_LDFLAGS) $(XLDFLAGS) $(MAINOBJ) $(EXTOBJS) " \
"$(LIBRUBYARG) $(MAINLIBS) $(EXTLIBS) $(OUTFLAG)$@"
TEMPLATE_MAKEFILE_IN_BASE_PATCH =
"# -- Start of tebako patch --\n" \
"\t\t$(Q) $(PURIFY) $(CC) $(EXE_LDFLAGS) $(MAINOBJ) " \
"$(EXTOBJS) $(LIBRUBYARG_STATIC) $(OUTFLAG)$@\n" \
"# -- End of tebako patch --"
TEMPLATE_MAKEFILE_IN_BASE_PATCH_MSYS =
"# -- Start of tebako patch --\n" \
"\t\t$(Q) $(PURIFY) $(CC) $(EXE_LDFLAGS) $(RUBY_EXP) $(MAINOBJ) " \
"$(EXTOBJS) $(LIBRUBYARG_STATIC) $(OUTFLAG)$@\n" \
"# -- End of tebako patch --"

Instance Method Summary collapse

Instance Method Details

#get_config_status_patch(ostype, deps_lib_dir, ruby_ver) ⇒ Object



115
116
117
118
119
120
# File 'lib/tebako/packager/patch_buildsystem.rb', line 115

def get_config_status_patch(ostype, deps_lib_dir, ruby_ver)
  {
    get_config_status_pattern(ostype) =>
      "S[\"MAINLIBS\"]=\"#{PatchLibraries.mlibs(ostype, deps_lib_dir, ruby_ver, false)}\""
  }
end

#get_config_status_pattern(ostype) ⇒ Object



100
101
102
103
104
105
106
107
108
109
110
111
112
113
# File 'lib/tebako/packager/patch_buildsystem.rb', line 100

def get_config_status_pattern(ostype)
  scmb = ScenarioManagerBase.new(ostype)
  if scmb.macos?
    "S[\"MAINLIBS\"]=\"-ldl -lobjc -lpthread \""
  elsif scmb.msys?
    # The configure LIBS env (crypt32 & co. for the static vcpkg OpenSSL,
    # tebako#345) is appended to MAINLIBS after ruby's defaults; the
    # pattern must match the resulting line exactly or the mlibs
    # substitution silently misses and the engine libs never get in
    "S[\"MAINLIBS\"]=\"-lshell32 -lws2_32 -liphlpapi -limagehlp -lshlwapi -lbcrypt -lcrypt32 -ladvapi32 -luser32 "
  else
    "S[\"MAINLIBS\"]=\"-lz -lrt -lrt -ldl -lcrypt -lm -lpthread \""
  end
end

#template_makefile_in_patch_two(ruby_ver) ⇒ Object



90
91
92
93
94
95
96
97
98
# File 'lib/tebako/packager/patch_buildsystem.rb', line 90

def template_makefile_in_patch_two(ruby_ver)
  if !ruby_ver.ruby31?
    { TEMPLATE_MAKEFILE_IN_BASE_PATTERN_PRE_3_1 => template_makefile_in_subst(ruby_ver) }
  elsif !ruby_ver.ruby33?
    { TEMPLATE_MAKEFILE_IN_BASE_PATTERN_PRE_3_3 => template_makefile_in_subst(ruby_ver) }
  else
    { TEMPLATE_MAKEFILE_IN_BASE_PATTERN => template_makefile_in_subst(ruby_ver) }
  end
end

#template_makefile_in_subst(ruby_ver) ⇒ Object



80
81
82
83
84
85
86
87
88
# File 'lib/tebako/packager/patch_buildsystem.rb', line 80

def template_makefile_in_subst(ruby_ver)
  if ScenarioManagerBase.new.msys?
    TEMPLATE_MAKEFILE_IN_BASE_PATCH_MSYS
  elsif !ruby_ver.ruby31?
    TEMPLATE_MAKEFILE_IN_BASE_PATCH_PRE_3_1
  else
    TEMPLATE_MAKEFILE_IN_BASE_PATCH
  end
end