diff --git a/common.mk b/common.mk index aabff602e8..837825df57 100644 --- a/common.mk +++ b/common.mk @@ -2030,12 +2030,11 @@ iseq.$(OBJEXT): {$(VPATH)}util.h iseq.$(OBJEXT): {$(VPATH)}vm_core.h iseq.$(OBJEXT): {$(VPATH)}vm_debug.h iseq.$(OBJEXT): {$(VPATH)}vm_opts.h -mjit.$(OBJEXT): $(top_srcdir)/revision.h +mjit.$(OBJEXT): $(hdrdir)/ruby/version.h mjit.$(OBJEXT): {$(VPATH)}mjit.c mjit.$(OBJEXT): {$(VPATH)}mjit.h mjit.$(OBJEXT): {$(VPATH)}ruby_assert.h mjit.$(OBJEXT): {$(VPATH)}util.h -mjit.$(OBJEXT): {$(VPATH)}version.h mjit.$(OBJEXT): {$(VPATH)}vm_core.h mjit_compile.$(OBJEXT): {$(VPATH)}insns.inc mjit_compile.$(OBJEXT): {$(VPATH)}insns_info.inc diff --git a/mjit.c b/mjit.c index 8b062d5606..517eadbbf5 100644 --- a/mjit.c +++ b/mjit.c @@ -76,12 +76,12 @@ #include "internal.h" #include "vm_core.h" #include "mjit.h" -#include "version.h" #include "gc.h" #include "constant.h" #include "id_table.h" #include "ruby_assert.h" #include "ruby/util.h" +#include "ruby/version.h" #ifdef _WIN32 #include @@ -1113,7 +1113,7 @@ mjit_get_iseq_func(const struct rb_iseq_constant_body *body) } /* A name of the header file included in any C file generated by MJIT for iseqs. */ -#define RUBY_MJIT_HEADER_FILE "rb_mjit_min_header-" RUBY_VERSION ".h" +#define RUBY_MJIT_HEADER_NAME "rb_mjit_min_header-" /* GCC and CLANG executable paths. TODO: The paths should absolute ones to prevent changing C compiler for security reasons. */ #define GCC_PATH "gcc" @@ -1130,8 +1130,9 @@ init_header_filename(void) VALUE basedir_val; char *basedir; size_t baselen; + size_t verlen; static const char header_name[] = - "/" MJIT_HEADER_INSTALL_DIR "/" RUBY_MJIT_HEADER_FILE; + "/" MJIT_HEADER_INSTALL_DIR "/" RUBY_MJIT_HEADER_NAME; char *p; #ifdef _WIN32 static const char libpathflag[] = @@ -1146,12 +1147,15 @@ init_header_filename(void) basedir_val = rb_const_get(rb_cObject, rb_intern_const("TMP_RUBY_PREFIX")); basedir = StringValuePtr(basedir_val); baselen = RSTRING_LEN(basedir_val); + verlen = strlen(ruby_version); - header_file = xmalloc(baselen + sizeof(header_name)); + header_file = xmalloc(baselen + sizeof(header_name) + verlen + 2); if (header_file == NULL) return; p = append_str2(header_file, basedir, baselen); - p = append_str2(p, header_name, sizeof(header_name)); + p = append_str2(p, header_name, sizeof(header_name)-1); + p = append_str2(p, ruby_version, verlen); + p = append_str2(p, ".h", 3); if ((fd = rb_cloexec_open(header_file, O_RDONLY, 0)) < 0) { xfree(header_file); header_file = NULL;