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



111
112
113
114
115
116
# File 'lib/tebako/packager/patch_buildsystem.rb', line 111

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
# 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?
    "S[\"MAINLIBS\"]=\"-lshell32 -lws2_32 -liphlpapi -limagehlp -lshlwapi -lbcrypt \""
  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