Strategies for finding binary dependencies

add tests for c and rubyext

+318
contrib/c/myprog.bin

This is a binary file and will not be displayed.

+7
contrib/c/test.c
··· 1 + #include <curl/curl.h> 2 + 3 + int main() { 4 + CURL *curl; 5 + curl = curl_easy_init(); 6 + return 0; 7 + }
+1
contrib/rubyext/.gitignore
··· 1 + *.so
+269
contrib/rubyext/Makefile
··· 1 + 2 + SHELL = /bin/sh 3 + 4 + # V=0 quiet, V=1 verbose. other values don't work. 5 + V = 0 6 + V0 = $(V:0=) 7 + Q1 = $(V:1=) 8 + Q = $(Q1:0=@) 9 + ECHO1 = $(V:1=@ :) 10 + ECHO = $(ECHO1:0=@ echo) 11 + NULLCMD = : 12 + 13 + #### Start of system configuration section. #### 14 + 15 + srcdir = . 16 + topdir = /home/vladh/.rvm/rubies/ruby-3.3.9/include/ruby-3.3.0 17 + hdrdir = $(topdir) 18 + arch_hdrdir = /home/vladh/.rvm/rubies/ruby-3.3.9/include/ruby-3.3.0/x86_64-linux 19 + PATH_SEPARATOR = : 20 + VPATH = $(srcdir):$(arch_hdrdir)/ruby:$(hdrdir)/ruby 21 + prefix = $(DESTDIR)/home/vladh/.rvm/rubies/ruby-3.3.9 22 + rubysitearchprefix = $(rubylibprefix)/$(sitearch) 23 + rubyarchprefix = $(rubylibprefix)/$(arch) 24 + rubylibprefix = $(libdir)/$(RUBY_BASE_NAME) 25 + exec_prefix = $(prefix) 26 + vendorarchhdrdir = $(vendorhdrdir)/$(sitearch) 27 + sitearchhdrdir = $(sitehdrdir)/$(sitearch) 28 + rubyarchhdrdir = $(rubyhdrdir)/$(arch) 29 + vendorhdrdir = $(rubyhdrdir)/vendor_ruby 30 + sitehdrdir = $(rubyhdrdir)/site_ruby 31 + rubyhdrdir = $(includedir)/$(RUBY_VERSION_NAME) 32 + vendorarchdir = $(vendorlibdir)/$(sitearch) 33 + vendorlibdir = $(vendordir)/$(ruby_version) 34 + vendordir = $(rubylibprefix)/vendor_ruby 35 + sitearchdir = $(sitelibdir)/$(sitearch) 36 + sitelibdir = $(sitedir)/$(ruby_version) 37 + sitedir = $(rubylibprefix)/site_ruby 38 + rubyarchdir = $(rubylibdir)/$(arch) 39 + rubylibdir = $(rubylibprefix)/$(ruby_version) 40 + sitearchincludedir = $(includedir)/$(sitearch) 41 + archincludedir = $(includedir)/$(arch) 42 + sitearchlibdir = $(libdir)/$(sitearch) 43 + archlibdir = $(libdir)/$(arch) 44 + ridir = $(datarootdir)/$(RI_BASE_NAME) 45 + mandir = $(datarootdir)/man 46 + localedir = $(datarootdir)/locale 47 + libdir = $(exec_prefix)/lib 48 + psdir = $(docdir) 49 + pdfdir = $(docdir) 50 + dvidir = $(docdir) 51 + htmldir = $(docdir) 52 + infodir = $(datarootdir)/info 53 + docdir = $(datarootdir)/doc/$(PACKAGE) 54 + oldincludedir = $(DESTDIR)/usr/include 55 + includedir = $(prefix)/include 56 + runstatedir = $(localstatedir)/run 57 + localstatedir = $(prefix)/var 58 + sharedstatedir = $(prefix)/com 59 + sysconfdir = $(prefix)/etc 60 + datadir = $(datarootdir) 61 + datarootdir = $(prefix)/share 62 + libexecdir = $(exec_prefix)/libexec 63 + sbindir = $(exec_prefix)/sbin 64 + bindir = $(exec_prefix)/bin 65 + archdir = $(rubyarchdir) 66 + 67 + 68 + CC_WRAPPER = 69 + CC = gcc 70 + CXX = g++ 71 + LIBRUBY = $(LIBRUBY_SO) 72 + LIBRUBY_A = lib$(RUBY_SO_NAME)-static.a 73 + LIBRUBYARG_SHARED = -Wl,-rpath,$(libdir) -L$(libdir) -l$(RUBY_SO_NAME) 74 + LIBRUBYARG_STATIC = -Wl,-rpath,$(libdir) -L$(libdir) -l$(RUBY_SO_NAME)-static $(MAINLIBS) 75 + empty = 76 + OUTFLAG = -o $(empty) 77 + COUTFLAG = -o $(empty) 78 + CSRCFLAG = $(empty) 79 + 80 + RUBY_EXTCONF_H = 81 + cflags = $(optflags) $(debugflags) $(warnflags) 82 + cxxflags = 83 + optflags = -O3 -fno-fast-math 84 + debugflags = -ggdb3 85 + warnflags = -Wall -Wextra -Wdeprecated-declarations -Wdiv-by-zero -Wduplicated-cond -Wimplicit-function-declaration -Wimplicit-int -Wpointer-arith -Wwrite-strings -Wold-style-definition -Wimplicit-fallthrough=0 -Wmissing-noreturn -Wno-cast-function-type -Wno-constant-logical-operand -Wno-long-long -Wno-missing-field-initializers -Wno-overlength-strings -Wno-packed-bitfield-compat -Wno-parentheses-equality -Wno-self-assign -Wno-tautological-compare -Wno-unused-parameter -Wno-unused-value -Wsuggest-attribute=format -Wsuggest-attribute=noreturn -Wunused-variable -Wmisleading-indentation -Wundef 86 + cppflags = 87 + CCDLFLAGS = -fPIC 88 + CFLAGS = $(CCDLFLAGS) $(cflags) -fPIC $(ARCH_FLAG) 89 + INCFLAGS = -I. -I$(arch_hdrdir) -I$(hdrdir)/ruby/backward -I$(hdrdir) -I$(srcdir) 90 + DEFS = 91 + CPPFLAGS = $(DEFS) $(cppflags) 92 + CXXFLAGS = $(CCDLFLAGS) $(ARCH_FLAG) 93 + ldflags = -L. -fstack-protector-strong -rdynamic -Wl,-export-dynamic -Wl,--no-as-needed 94 + dldflags = -Wl,--compress-debug-sections=zlib 95 + ARCH_FLAG = 96 + DLDFLAGS = $(ldflags) $(dldflags) $(ARCH_FLAG) 97 + LDSHARED = $(CC) -shared 98 + LDSHAREDXX = $(CXX) -shared 99 + AR = gcc-ar 100 + EXEEXT = 101 + 102 + RUBY_INSTALL_NAME = $(RUBY_BASE_NAME) 103 + RUBY_SO_NAME = ruby 104 + RUBYW_INSTALL_NAME = 105 + RUBY_VERSION_NAME = $(RUBY_BASE_NAME)-$(ruby_version) 106 + RUBYW_BASE_NAME = rubyw 107 + RUBY_BASE_NAME = ruby 108 + 109 + arch = x86_64-linux 110 + sitearch = $(arch) 111 + ruby_version = 3.3.0 112 + ruby = $(bindir)/$(RUBY_BASE_NAME) 113 + RUBY = $(ruby) 114 + BUILTRUBY = $(bindir)/$(RUBY_BASE_NAME) 115 + ruby_headers = $(hdrdir)/ruby.h $(hdrdir)/ruby/backward.h $(hdrdir)/ruby/ruby.h $(hdrdir)/ruby/defines.h $(hdrdir)/ruby/missing.h $(hdrdir)/ruby/intern.h $(hdrdir)/ruby/st.h $(hdrdir)/ruby/subst.h $(arch_hdrdir)/ruby/config.h 116 + 117 + RM = rm -f 118 + RM_RF = rm -fr 119 + RMDIRS = rmdir --ignore-fail-on-non-empty -p 120 + MAKEDIRS = /usr/bin/mkdir -p 121 + INSTALL = /usr/bin/install -c 122 + INSTALL_PROG = $(INSTALL) -m 0755 123 + INSTALL_DATA = $(INSTALL) -m 644 124 + COPY = cp 125 + TOUCH = exit > 126 + 127 + #### End of system configuration section. #### 128 + 129 + preload = 130 + libpath = . $(libdir) 131 + LIBPATH = -L. -L$(libdir) -Wl,-rpath,$(libdir) 132 + DEFFILE = 133 + 134 + CLEANFILES = mkmf.log 135 + DISTCLEANFILES = 136 + DISTCLEANDIRS = 137 + 138 + extout = 139 + extout_prefix = 140 + target_prefix = 141 + LOCAL_LIBS = 142 + LIBS = $(LIBRUBYARG_SHARED) -lm -lpthread -lc 143 + ORIG_SRCS = my_c_ext.c 144 + SRCS = $(ORIG_SRCS) 145 + OBJS = my_c_ext.o 146 + HDRS = 147 + LOCAL_HDRS = 148 + TARGET = my_c_ext 149 + TARGET_NAME = my_c_ext 150 + TARGET_ENTRY = Init_$(TARGET_NAME) 151 + DLLIB = $(TARGET).so 152 + EXTSTATIC = 153 + STATIC_LIB = 154 + 155 + TIMESTAMP_DIR = . 156 + BINDIR = $(bindir) 157 + RUBYCOMMONDIR = $(sitedir)$(target_prefix) 158 + RUBYLIBDIR = $(sitelibdir)$(target_prefix) 159 + RUBYARCHDIR = $(sitearchdir)$(target_prefix) 160 + HDRDIR = $(sitehdrdir)$(target_prefix) 161 + ARCHHDRDIR = $(sitearchhdrdir)$(target_prefix) 162 + TARGET_SO_DIR = 163 + TARGET_SO = $(TARGET_SO_DIR)$(DLLIB) 164 + CLEANLIBS = $(TARGET_SO) false 165 + CLEANOBJS = $(OBJS) *.bak 166 + TARGET_SO_DIR_TIMESTAMP = $(TIMESTAMP_DIR)/.sitearchdir.time 167 + 168 + all: $(DLLIB) 169 + static: $(STATIC_LIB) 170 + .PHONY: all install static install-so install-rb 171 + .PHONY: clean clean-so clean-static clean-rb 172 + 173 + clean-static:: 174 + clean-rb-default:: 175 + clean-rb:: 176 + clean-so:: 177 + clean: clean-so clean-static clean-rb-default clean-rb 178 + -$(Q)$(RM_RF) $(CLEANLIBS) $(CLEANOBJS) $(CLEANFILES) .*.time 179 + 180 + distclean-rb-default:: 181 + distclean-rb:: 182 + distclean-so:: 183 + distclean-static:: 184 + distclean: clean distclean-so distclean-static distclean-rb-default distclean-rb 185 + -$(Q)$(RM) Makefile $(RUBY_EXTCONF_H) conftest.* mkmf.log 186 + -$(Q)$(RM) core ruby$(EXEEXT) *~ $(DISTCLEANFILES) 187 + -$(Q)$(RMDIRS) $(DISTCLEANDIRS) 2> /dev/null || true 188 + 189 + realclean: distclean 190 + install: install-so install-rb 191 + 192 + install-so: $(DLLIB) $(TARGET_SO_DIR_TIMESTAMP) 193 + $(INSTALL_PROG) $(DLLIB) $(RUBYARCHDIR) 194 + clean-static:: 195 + -$(Q)$(RM) $(STATIC_LIB) 196 + install-rb: pre-install-rb do-install-rb install-rb-default 197 + install-rb-default: pre-install-rb-default do-install-rb-default 198 + pre-install-rb: Makefile 199 + pre-install-rb-default: Makefile 200 + do-install-rb: 201 + do-install-rb-default: 202 + pre-install-rb-default: 203 + @$(NULLCMD) 204 + $(TARGET_SO_DIR_TIMESTAMP): 205 + $(Q) $(MAKEDIRS) $(@D) $(RUBYARCHDIR) 206 + $(Q) $(TOUCH) $@ 207 + 208 + site-install: site-install-so site-install-rb 209 + site-install-so: install-so 210 + site-install-rb: install-rb 211 + 212 + .SUFFIXES: .c .m .cc .mm .cxx .cpp .o .S 213 + 214 + .cc.o: 215 + $(ECHO) compiling $(<) 216 + $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $(CSRCFLAG)$< 217 + 218 + .cc.S: 219 + $(ECHO) translating $(<) 220 + $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -S $(CSRCFLAG)$< 221 + 222 + .mm.o: 223 + $(ECHO) compiling $(<) 224 + $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $(CSRCFLAG)$< 225 + 226 + .mm.S: 227 + $(ECHO) translating $(<) 228 + $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -S $(CSRCFLAG)$< 229 + 230 + .cxx.o: 231 + $(ECHO) compiling $(<) 232 + $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $(CSRCFLAG)$< 233 + 234 + .cxx.S: 235 + $(ECHO) translating $(<) 236 + $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -S $(CSRCFLAG)$< 237 + 238 + .cpp.o: 239 + $(ECHO) compiling $(<) 240 + $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $(CSRCFLAG)$< 241 + 242 + .cpp.S: 243 + $(ECHO) translating $(<) 244 + $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -S $(CSRCFLAG)$< 245 + 246 + .c.o: 247 + $(ECHO) compiling $(<) 248 + $(Q) $(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) $(COUTFLAG)$@ -c $(CSRCFLAG)$< 249 + 250 + .c.S: 251 + $(ECHO) translating $(<) 252 + $(Q) $(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) $(COUTFLAG)$@ -S $(CSRCFLAG)$< 253 + 254 + .m.o: 255 + $(ECHO) compiling $(<) 256 + $(Q) $(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) $(COUTFLAG)$@ -c $(CSRCFLAG)$< 257 + 258 + .m.S: 259 + $(ECHO) translating $(<) 260 + $(Q) $(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) $(COUTFLAG)$@ -S $(CSRCFLAG)$< 261 + 262 + $(TARGET_SO): $(OBJS) Makefile 263 + $(ECHO) linking shared-object $(DLLIB) 264 + -$(Q)$(RM) $(@) 265 + $(Q) $(LDSHARED) -o $@ $(OBJS) $(LIBPATH) $(DLDFLAGS) $(LOCAL_LIBS) $(LIBS) 266 + 267 + 268 + 269 + $(OBJS): $(HDRS) $(ruby_headers)
+3
contrib/rubyext/extconf.rb
··· 1 + require "mkmf" 2 + 3 + create_makefile "my_c_ext"
+36
contrib/rubyext/my_c_ext.c
··· 1 + // https://blog.peterzhu.ca/ruby-c-ext-part-1/ 2 + 3 + #include <signal.h> 4 + 5 + #include <ruby/ruby.h> 6 + 7 + static ID id_puts; 8 + 9 + static void kernel_puts(VALUE val) 10 + { 11 + rb_funcall(rb_mKernel, id_puts, 1, val); 12 + } 13 + 14 + static VALUE foo(VALUE self) 15 + { 16 + raise(SIGINT); 17 + kernel_puts(self); 18 + 19 + return Qnil; 20 + } 21 + 22 + void Init_methods(void) 23 + { 24 + id_puts = rb_intern("puts"); 25 + 26 + rb_define_method(rb_cObject, "foo", foo, 0); 27 + } 28 + 29 + void Init_my_c_ext(void) 30 + { 31 + ID id_puts = rb_intern("puts"); 32 + 33 + raise(SIGINT); 34 + VALUE hello_world_str = rb_str_new_cstr("Hello world!"); 35 + rb_funcall(rb_mKernel, id_puts, 1, hello_world_str); 36 + }
contrib/rubyext/my_c_ext.o

This is a binary file and will not be displayed.

+2
contrib/rubyext/test.rb
··· 1 + #!/usr/bin/env ruby 2 + require_relative "my_c_ext"