diff -urpa rpm-4.5.orig/configure.ac rpm-4.5/configure.ac --- rpm-4.5.orig/configure.ac 2011-10-03 01:50:17.000000000 +0000 +++ rpm-4.5/configure.ac 2018-02-23 13:52:54.438364538 +0000 @@ -291,6 +291,7 @@ AC_PATH_PROG(__PHP, php, %{_bindir}/php, AC_PATH_PROG(__PYTHON, python, %{_bindir}/python, $MYPATH) AC_PATH_PROG(__RM, rm, /bin/rm, $MYPATH) AC_PATH_PROG(__RSH, rsh, %{_bindir}/rsh, $MYPATH) +AC_PATH_PROG(__RUBY, ruby, %{_bindir}/ruby, $MYPATH) AC_PATH_PROG(__SED, sed, /bin/sed, $MYPATH) AC_PATH_PROG(__SH, sh, /bin/sh, $MYPATH) AC_PATH_PROG(__SSH, ssh, %{_bindir}/ssh, $MYPATH) diff -urpa rpm-4.5.orig/lib/rpmfc.c rpm-4.5/lib/rpmfc.c --- rpm-4.5.orig/lib/rpmfc.c 2008-06-10 22:13:27.000000000 +0000 +++ rpm-4.5/lib/rpmfc.c 2018-02-23 14:04:42.056356571 +0000 @@ -478,6 +478,9 @@ static struct rpmfcTokens_s rpmfcTokens[ { "Java ", RPMFC_JAVA|RPMFC_INCLUDE }, + { "ruby script text", RPMFC_RUBY|RPMFC_INCLUDE }, + { "Ruby script text", RPMFC_RUBY|RPMFC_INCLUDE }, + /* .NET executables and libraries. file(1) cannot differ it from native win32 executables unfortunatelly */ { "PE executable", RPMFC_MONO|RPMFC_INCLUDE }, { "executable PE", RPMFC_MONO|RPMFC_INCLUDE }, @@ -740,6 +743,8 @@ static int rpmfcSCRIPT(rpmfc fc) fc->fcolor->vals[fc->ix] |= RPMFC_PYTHON; else if (!strncmp(bn, "php", sizeof("php")-1)) fc->fcolor->vals[fc->ix] |= RPMFC_PHP; + else if (!strncmp(bn, "ruby", sizeof("ruby")-1)) + fc->fcolor->vals[fc->ix] |= RPMFC_RUBY; break; } @@ -788,6 +793,13 @@ static int rpmfcSCRIPT(rpmfc fc) if (is_executable) xx = rpmfcHelper(fc, 'R', "php"); } else + if (fc->fcolor->vals[fc->ix] & RPMFC_RUBY) { + xx = rpmfcHelper(fc, 'P', "ruby"); +#ifdef NOTYET + if (is_executable) +#endif + xx = rpmfcHelper(fc, 'R', "ruby"); + } else if (fc->fcolor->vals[fc->ix] & RPMFC_JAVA) { xx = rpmfcHelper(fc, 'P', "java"); xx = rpmfcHelper(fc, 'R', "java"); @@ -898,7 +910,7 @@ typedef struct rpmfcApplyTbl_s { /*@unchecked@*/ static struct rpmfcApplyTbl_s rpmfcApplyTable[] = { { rpmfcELF, RPMFC_ELF }, - { rpmfcSCRIPT, (RPMFC_SCRIPT|RPMFC_PERL|RPMFC_PYTHON|RPMFC_LIBTOOL|RPMFC_PKGCONFIG|RPMFC_BOURNE|RPMFC_JAVA|RPMFC_PHP|RPMFC_DESKTOP_FILE) }, + { rpmfcSCRIPT, (RPMFC_SCRIPT|RPMFC_PERL|RPMFC_PYTHON|RPMFC_LIBTOOL|RPMFC_PKGCONFIG|RPMFC_BOURNE|RPMFC_JAVA|RPMFC_PHP|RPMFC_RUBY|RPMFC_DESKTOP_FILE) }, { rpmfcMONO, RPMFC_MONO }, { NULL, 0 } }; @@ -925,7 +937,7 @@ int rpmfcApply(rpmfc fc) /* Generate package and per-file dependencies. */ for (fc->ix = 0; fc->fn[fc->ix] != NULL; fc->ix++) { - /* XXX Insure that /usr/lib{,64}/python files are marked RPMFC_PYTHON */ + /* XXX Insure that /usr/{share,lib{,64}}/python files are marked RPMFC_PYTHON */ /* XXX HACK: classification by path is intrinsically stupid. */ { const char *fn = strstr(fc->fn[fc->ix], "/usr/lib"); if (fn) { @@ -934,6 +946,36 @@ int rpmfcApply(rpmfc fc) fn += 2; if (!strncmp(fn, "/python", sizeof("/python")-1)) fc->fcolor->vals[fc->ix] |= RPMFC_PYTHON; + else if (!strncmp(fn, "/ruby", sizeof("/ruby")-1)) { + fc->fcolor->vals[fc->ix] |= RPMFC_RUBY; + if ((strstr(fn, ".gemspec") || strstr(fn, "rbconfig.rb"))) { + miRE mire = mireNew(RPMMIRE_REGEX, RPMTAG_FILEPATHS); + if (!mireRegcomp(mire, ".*/(specifications/.*\\.gemspec|rbconfig\\.rb)$")) + if (mireRegexec(mire, fc->fn[fc->ix])) + fc->fcolor->vals[fc->ix] |= RPMFC_MODULE; + mire = mireFree(mire); + } + } + /* XXX: lacking better, more generic classifier... */ + else if (!strncmp(fn, "/gstreamer", sizeof("/gstreamer")-1) && + fc->fcolor->vals[fc->ix] & RPMFC_LIBRARY) + fc->fcolor->vals[fc->ix] |= (RPMFC_MODULE|RPMFC_SCRIPT); + } + fn = strstr(fc->fn[fc->ix], "/usr/share"); + if (fn) { + fn += sizeof("/usr/share")-1; + if (!strncmp(fn, "/python", sizeof("/python")-1)) + fc->fcolor->vals[fc->ix] |= RPMFC_PYTHON; + else if (!strncmp(fn, "/ruby", sizeof("/ruby")-1) || !strncmp(fn, "/gems/specifications", sizeof("/gems/specifications")-1)) { + fc->fcolor->vals[fc->ix] |= RPMFC_RUBY; + if ((strstr(fn, ".gemspec") || strstr(fn, "rbconfig.rb"))) { + miRE mire = mireNew(RPMMIRE_REGEX, RPMTAG_FILEPATHS); + if (!mireRegcomp(mire, ".*/(specifications/.*\\.gemspec|rbconfig\\.rb)$")) + if (mireRegexec(mire, fc->fn[fc->ix])) + fc->fcolor->vals[fc->ix] |= RPMFC_MODULE; + mire = mireFree(mire); + } + } } } diff -urpa rpm-4.5.orig/lib/rpmfc.h rpm-4.5/lib/rpmfc.h --- rpm-4.5.orig/lib/rpmfc.h 2008-06-10 21:21:57.000000000 +0000 +++ rpm-4.5/lib/rpmfc.h 2018-02-23 13:52:54.438364538 +0000 @@ -31,8 +31,9 @@ enum FCOLOR_e { #define RPMFC_ELF (RPMFC_ELF32|RPMFC_ELF64|RPMFC_ELFMIPSN32) /* bits 4-7 unused */ - RPMFC_DESKTOP_FILE = (1 << 7), /* XXX */ + RPMFC_DESKTOP_FILE = (1 << 6), /* XXX */ + RPMFC_RUBY = (1 << 7), RPMFC_PKGCONFIG = (1 << 8), RPMFC_LIBTOOL = (1 << 9), RPMFC_BOURNE = (1 << 10), diff -urpa rpm-4.5.orig/macros.in rpm-4.5/macros.in --- rpm-4.5.orig/macros.in 2008-06-10 22:00:43.000000000 +0000 +++ rpm-4.5/macros.in 2018-02-23 13:52:54.439364538 +0000 @@ -78,6 +78,7 @@ %__python @__PYTHON@ %__rm @__RM@ %__rsh @__RSH@ +%__ruby @__RUBY@ %__sed @__SED@ %__sh @__SH@ %__ssh @__SSH@ @@ -1421,6 +1422,44 @@ PreReq: python >= %{python_version}, pyt #%__java_requires %{_rpmhome}/javadeps.sh --requires #------------------------------------------------------------------------ +# ruby(...) configuration. +# +# Path to scripts to autogenerate ruby package dependencies, + +# Note: Used if _use_internal_dependency_generator is non-zero. The +# helpers are also used by %{_rpmhome}/rpmdeps {--provides|--requires}. +%__ruby_provides %{_rpmhome}/rubygems.rb --provides +%__ruby_requires %{_rpmhome}/rubygems.rb --requires + +%ruby_version %(%{__ruby} -rrbconfig -e 'print RbConfig::CONFIG["ruby_version"]') + +%ruby_archdir %(%{__ruby} -rrbconfig -e 'print RbConfig::CONFIG["archdir"]') +%ruby_libdir %(%{__ruby} -rrbconfig -e 'print RbConfig::CONFIG["rubylibdir"]') +%ruby_sitedir %(%{__ruby} -rrbconfig -e 'print RbConfig::CONFIG["sitedir"]') +%ruby_sitearchdir %(%{__ruby} -rrbconfig -e 'print RbConfig::CONFIG["sitearchdir"]') +%ruby_sitelibdir %(%{__ruby} -rrbconfig -e 'print RbConfig::CONFIG["sitelibdir"]') +%ruby_vendordir %(%{__ruby} -rrbconfig -e 'print RbConfig::CONFIG["vendordir"]') +%ruby_vendorarchdir %(%{__ruby} -rrbconfig -e 'print RbConfig::CONFIG["vendorarchdir"]') +%ruby_vendorlibdir %(%{__ruby} -rrbconfig -e 'print RbConfig::CONFIG["vendorlibdir"]') +%ruby_gemdir %(%{__ruby} -rrbconfig -e 'print RbConfig::CONFIG["rubylibdir"].sub(RbConfig::CONFIG["ruby_version"], "gems/#{RbConfig::CONFIG["ruby_version"]}")') +%ruby_ridir %(%{__ruby} -rrbconfig -e 'print File.join(RbConfig::CONFIG["datadir"], "ri", RbConfig::CONFIG["ruby_version"])') + +%__gem_helper %{_usrlibrpm}/gem_helper.rb + +%gem_build(f:j:) \ + %__gem_helper build \\\ + %{-f:-f%{-f*}} \\\ + %{!-j:%{_smp_mflags}}%{-j:-j%{-j*}} + +%gem_install(i:n:C) \ + DESTDIR=${DESTDIR:-%{buildroot}} \\\ + %__gem_helper install \\\ + --env-shebang --rdoc --ri --force --ignore-dependencies \\\ + %{!-i:--install-dir %{buildroot}%{ruby_gemdir}}%{-i:--install-dir %{-i*}} \\\ + %{!-n:--bindir %{buildroot}%{_bindir}}%{-n:--bindir%{-n*}} \\\ + %{!-C:--fix-permissions} + +#------------------------------------------------------------------------ # libtool(...) configuration. # # Path to scripts to autogenerate libtool package dependencies,