Here's a diff to move most of the shared logic for building ruby from the version specific Makefiles to Makefile.inc.
In order to allow this, a BINREV variable is added to track the dotless version (REV 2.4 => BINREV 24). This also removes the RUBYLIBREV variable. RUBYLIBREV was in the version specific Makefiles, but it just duplicates REV from Makefile.inc. This complicates update-plist and similar code. Not shown here are changes to the PLISTs to use REV instead of RUBYLIBREV, as those are large and mechanical. This diff made work on a new port for ruby 2.5.0-preview1 significantly easier (will send that one later as it needs more work). Will be committing in a day or so unless I hear objections. Thanks, Jeremy Index: Makefile.inc =================================================================== RCS file: /cvs/ports/lang/ruby/Makefile.inc,v retrieving revision 1.17 diff -u -p -u -p -r1.17 Makefile.inc --- Makefile.inc 1 Nov 2017 10:52:06 -0000 1.17 +++ Makefile.inc 1 Nov 2017 11:53:33 -0000 @@ -1,7 +1,20 @@ # $OpenBSD: Makefile.inc,v 1.17 2017/11/01 10:52:06 jeremy Exp $ +COMMENT-main ?= object oriented script language with threads +COMMENT-gdbm ?= gdbm interface for ruby +COMMENT-ri_docs ?= ri documentation files for ruby + DISTNAME ?= ruby-${VERSION} +PKGNAME-main ?= ruby-${VERSION} +PKGNAME-gdbm ?= ruby${BINREV}-gdbm-${VERSION} +PKGNAME-ri_docs ?= ruby${BINREV}-ri_docs-${VERSION} + +PKG_ARCH-ri_docs ?= * +WANTLIB-ri_docs ?= # empty + +PKGSPEC-main ?= ruby->=${REV},<${NEXTVER} + CATEGORIES ?= lang HOMEPAGE ?= http://www.ruby-lang.org/ @@ -16,20 +29,73 @@ PERMIT_DISTFILES_FTP ?= Yes MASTER_SITES ?= http://cache.ruby-lang.org/pub/ruby/${VERSION:R}/ CONFIGURE_STYLE ?= gnu -CONFIGURE_ARGS += --enable-shared -CONFIGURE_ENV += PREFIX="${PREFIX}" \ +CONFIGURE_ARGS += --enable-shared \ + --program-suffix=${BINREV} \ + --with-soname=ruby${BINREV} \ + --with-ruby-version=minor \ + --with-mantype=doc \ + --enable-pthread \ + --enable-ipv6 \ + --without-bundled-libffi \ + --disable-option-checking + +CONFIGURE_ENV += LIBruby${BINREV}_VERSION=${LIBruby${BINREV}_VERSION} \ + PREFIX="${PREFIX}" \ CPPFLAGS="-DOPENSSL_NO_STATIC_ENGINE -I${LOCALBASE}/include" \ - LDFLAGS="-L${LOCALBASE}/lib" + LDFLAGS="-L${LOCALBASE}/lib" \ + DLDFLAGS="-L${LOCALBASE}/lib" \ + ac_cv_prog_DOXYGEN="" \ + ac_cv_prog_DOT="" \ + +MAKE_ENV += DLDFLAGS="-I${LOCALBASE}/lib" + + +WANTLIB-main += c crypto ffi gmp m ncurses pthread readline ssl \ + util yaml z +LIB_DEPENDS-main += devel/gmp \ + devel/libyaml \ + devel/libffi + +WANTLIB-gdbm += c m gdbm gmp pthread ruby${BINREV} +LIB_DEPENDS-gdbm += databases/gdbm \ + devel/gmp \ + lang/ruby/${REV},-main>=${VERSION},<${NEXTVER} +RUN_DEPENDS-gdbm ?= + +ALL_TARGET = V=1 main +INSTALL_TARGET = V=1 install-nodoc + +RI_DOCS ?= No + +TEST_DEPENDS ?= ${FULLPKGNAME-main}:${BUILD_PKGPATH} + +POST_EXTRACT ?= rm -rf ${WRKSRC}/ext/fiddle/libffi-* \ + ${WRKSRC}/tool/downloader.rb; + +# cc(1) uses too much ram to build ext/ripper/ripper.c +# XXX remove arch if vmparam.h + login.conf give more than 1024M to pbuild +.if ${MACHINE_ARCH:Malpha} || ${MACHINE_ARCH:Marm} || ${MACHINE_ARCH:Mhppa} +CFLAGS_OVERRIDE = -O1 +.endif + +FIX_RIPPER ?= sed -i 's/%%CFLAGS_OVERRIDE%%/${CFLAGS_OVERRIDE}/g' \ + ${WRKSRC}/ext/ripper/depend; + +PRE_INSTALL ?= find ${WRKSRC} -name '*.orig' -print0 | xargs -0r rm; \ + ${INSTALL_DATA_DIR} ${PREFIX}/share/doc/ruby \ + ${PREFIX}/lib/ruby/gems/${REV}/extensions/${SUB} \ + ${PREFIX}/lib/ruby/gems/${REV}/extensions/${SUB}/${REV}; # Ruby itself is clean, but some extensions (e.g. devel/ruby-therubyracer) # need W|X mappings. USE_WXNEEDED ?= Yes REV ?= ${VERSION:R} +BINREV ?= ${REV:S/.//} SUB ?= ${MACHINE_ARCH:S/amd64/x86_64/}-openbsd SUBST_VARS += SUB REV FILESDIR ?= ${.CURDIR}/../files FIX_RBCONFIG ?= sed 's/INSTALL_ARGS/-c -o ${BINOWN} -g ${BINGRP}/' < \ ${FILESDIR}/rbconfig_fix.rb >> \ - ${PREFIX}/lib/ruby/${RUBYLIBREV}/${SUB}/rbconfig.rb + ${PREFIX}/lib/ruby/${REV}/${SUB}/rbconfig.rb Index: 2.3/Makefile =================================================================== RCS file: /cvs/ports/lang/ruby/2.3/Makefile,v retrieving revision 1.20 diff -u -p -u -p -r1.20 Makefile --- 2.3/Makefile 1 Nov 2017 10:52:06 -0000 1.20 +++ 2.3/Makefile 1 Nov 2017 11:44:37 -0000 @@ -1,49 +1,11 @@ # $OpenBSD: Makefile,v 1.20 2017/11/01 10:52:06 jeremy Exp $ -COMMENT-main = object oriented script language with threads -COMMENT-gdbm = gdbm interface for ruby -COMMENT-tk = tk interface for ruby -COMMENT-ri_docs = ri documentation files for ruby - VERSION = 2.3.5 -RUBYLIBREV = 2.3 - -SHARED_LIBS = ruby23 2.0 -PKGNAME-main = ruby-${VERSION} -PKGNAME-gdbm = ruby23-gdbm-${VERSION} -PKGNAME-tk = ruby23-tk-${VERSION} -PKGNAME-ri_docs = ruby23-ri_docs-${VERSION} - -PKG_ARCH-ri_docs = * -WANTLIB-ri_docs = # empty - NEXTVER = 2.4 -PKGSPEC-main = ruby->=${RUBYLIBREV},<${NEXTVER} +SHARED_LIBS = ruby${BINREV} 2.0 -CONFIGURE_ARGS = --program-suffix=23 \ - --with-soname=ruby23 \ - --with-ruby-version=minor \ - --with-mantype=doc \ - --enable-pthread \ - --enable-ipv6 \ - --without-bundled-libffi \ - --disable-option-checking - -CONFIGURE_ENV = LIBruby23_VERSION=${LIBruby23_VERSION} \ - ac_cv_prog_DOXYGEN="" \ - ac_cv_prog_DOT="" \ - DLDFLAGS="-L${LOCALBASE}/lib" - -MAKE_ENV = DLDFLAGS="-I${LOCALBASE}/lib" - -ALL_TARGET = V=1 main -INSTALL_TARGET = V=1 install-nodoc - -WANTLIB-main = c crypto ffi gmp m ncurses pthread readline ssl \ - util yaml z -LIB_DEPENDS-main = devel/gmp \ - devel/libyaml \ - devel/libffi +COMMENT-tk = tk interface for ruby +PKGNAME-tk = ruby${BINREV}-tk-${VERSION} PSEUDO_FLAVORS= no_tk no_ri_docs bootstrap # Do not build the RI docs on slow arches @@ -56,19 +18,13 @@ FLAVOR?= MULTI_PACKAGES = -main -gdbm -tk -ri_docs .include <bsd.port.arch.mk> -WANTLIB-gdbm = c m gdbm gmp pthread ruby23 -LIB_DEPENDS-gdbm = databases/gdbm \ - devel/gmp \ - lang/ruby/${REV},-main>=${VERSION},<${NEXTVER} -RUN_DEPENDS-gdbm = - .if ${BUILD_PACKAGES:M-tk} CONFIGURE_ARGS+= --with-tcl-include=${LOCALBASE}/include/tcl8.5 \ --with-tk-include=${LOCALBASE}/include/tk8.5 \ --with-tcllib=tcl85 \ --with-tklib=tk85 \ --with-X11-dir=${X11BASE} -WANTLIB-tk = X11 c gmp m pthread ruby23 tcl85 tk85 +WANTLIB-tk = X11 c gmp m pthread ruby${BINREV} tcl85 tk85 LIB_DEPENDS-tk = tk->=8.5,<8.6:x11/tk/8.5 \ devel/gmp \ lang/ruby/${REV},-main>=${VERSION},<${NEXTVER} @@ -80,31 +36,18 @@ ALL_TARGET += rdoc INSTALL_TARGET += install-doc .endif -SUBST_VARS += RUBYLIBREV - -TEST_DEPENDS = ${FULLPKGNAME-main}:${BUILD_PKGPATH} - post-extract: - rm -rf ${WRKSRC}/ext/fiddle/libffi-* ${WRKSRC}/tool/downloader.rb + ${POST_EXTRACT} -# cc(1) uses too much ram to build ext/ripper/ripper.c -# XXX remove arch if vmparam.h + login.conf give more than 1024M to pbuild -.if ${MACHINE_ARCH:Malpha} || ${MACHINE_ARCH:Marm} || ${MACHINE_ARCH:Mhppa} -CFLAGS_OVERRIDE = -O1 -.endif pre-configure: - sed -i 's/%%CFLAGS_OVERRIDE%%/${CFLAGS_OVERRIDE}/g' \ - ${WRKSRC}/ext/ripper/depend + ${FIX_RIPPER} pre-install: - find ${WRKSRC} -name '*.orig' -print0 | xargs -0r rm - ${INSTALL_DATA_DIR} ${PREFIX}/share/doc/ruby \ - ${PREFIX}/lib/ruby/gems/${RUBYLIBREV}/extensions/${SUB} \ - ${PREFIX}/lib/ruby/gems/${RUBYLIBREV}/extensions/${SUB}/${RUBYLIBREV} + ${PRE_INSTALL} post-install: ${FIX_RBCONFIG} - chmod 444 ${PREFIX}/lib/ruby/gems/${RUBYLIBREV}/{cache,specifications}/*.gem* + chmod 444 ${PREFIX}/lib/ruby/gems/${REV}/{cache,specifications}/*.gem* # 16021 tests, 2256593 assertions, 3 failures, 5 errors, 127 skips do-test: Index: 2.4/Makefile =================================================================== RCS file: /cvs/ports/lang/ruby/2.4/Makefile,v retrieving revision 1.7 diff -u -p -u -p -r1.7 Makefile --- 2.4/Makefile 1 Nov 2017 10:52:06 -0000 1.7 +++ 2.4/Makefile 1 Nov 2017 11:44:41 -0000 @@ -1,47 +1,8 @@ # $OpenBSD: Makefile,v 1.7 2017/11/01 10:52:06 jeremy Exp $ -COMMENT-main = object oriented script language with threads -COMMENT-gdbm = gdbm interface for ruby -COMMENT-ri_docs = ri documentation files for ruby - VERSION = 2.4.2 -RUBYLIBREV = 2.4 - SHARED_LIBS = ruby24 2.0 -PKGNAME-main = ruby-${VERSION} -PKGNAME-gdbm = ruby24-gdbm-${VERSION} -PKGNAME-ri_docs = ruby24-ri_docs-${VERSION} - -PKG_ARCH-ri_docs = * -WANTLIB-ri_docs = # empty - NEXTVER = 2.5 -PKGSPEC-main = ruby->=${RUBYLIBREV},<${NEXTVER} - -CONFIGURE_ARGS = --program-suffix=24 \ - --with-soname=ruby24 \ - --with-ruby-version=minor \ - --with-mantype=doc \ - --enable-pthread \ - --enable-ipv6 \ - --without-bundled-libffi \ - --disable-option-checking - -CONFIGURE_ENV = LIBruby24_VERSION=${LIBruby24_VERSION} \ - ac_cv_prog_DOXYGEN="" \ - ac_cv_prog_DOT="" \ - DLDFLAGS="-L${LOCALBASE}/lib" - -MAKE_ENV = DLDFLAGS="-I${LOCALBASE}/lib" - -ALL_TARGET = V=1 main -INSTALL_TARGET = V=1 install-nodoc - -WANTLIB-main = c crypto ffi gmp m ncurses pthread readline ssl \ - util yaml z -LIB_DEPENDS-main = devel/gmp \ - devel/libyaml \ - devel/libffi PSEUDO_FLAVORS= no_ri_docs bootstrap # Do not build the RI docs on slow arches @@ -54,38 +15,19 @@ FLAVOR?= MULTI_PACKAGES = -main -gdbm -ri_docs .include <bsd.port.arch.mk> -WANTLIB-gdbm = c m gdbm gmp pthread ruby24 -LIB_DEPENDS-gdbm = databases/gdbm \ - devel/gmp \ - lang/ruby/${REV},-main>=${VERSION},<${NEXTVER} -RUN_DEPENDS-gdbm = - .if ${BUILD_PACKAGES:M-ri_docs} ALL_TARGET += rdoc INSTALL_TARGET += install-doc .endif -SUBST_VARS += RUBYLIBREV - -TEST_DEPENDS = ${FULLPKGNAME-main}:${BUILD_PKGPATH} - post-extract: - rm -rf ${WRKSRC}/ext/fiddle/libffi-* ${WRKSRC}/tool/downloader.rb + ${POST_EXTRACT} -# cc(1) uses too much ram to build ext/ripper/ripper.c -# XXX remove arch if vmparam.h + login.conf give more than 1024M to pbuild -.if ${MACHINE_ARCH:Malpha} || ${MACHINE_ARCH:Marm} || ${MACHINE_ARCH:Mhppa} -CFLAGS_OVERRIDE = -O1 -.endif pre-configure: - sed -i 's/%%CFLAGS_OVERRIDE%%/${CFLAGS_OVERRIDE}/g' \ - ${WRKSRC}/ext/ripper/depend + ${FIX_RIPPER} pre-install: - find ${WRKSRC} -name '*.orig' -print0 | xargs -0r rm - ${INSTALL_DATA_DIR} ${PREFIX}/share/doc/ruby \ - ${PREFIX}/lib/ruby/gems/${RUBYLIBREV}/extensions/${SUB} \ - ${PREFIX}/lib/ruby/gems/${RUBYLIBREV}/extensions/${SUB}/${RUBYLIBREV} + ${PRE_INSTALL} post-install: ${FIX_RBCONFIG}