ports/135221: [bsd.port.mk] unified support for LINUX_OSRELEASE dependency
Gabor Kovesdan
gabor at FreeBSD.org
Wed Jun 3 18:10:03 UTC 2009
>Number: 135221
>Category: ports
>Synopsis: [bsd.port.mk] unified support for LINUX_OSRELEASE dependency
>Confidential: no
>Severity: non-critical
>Priority: medium
>Responsible: freebsd-ports-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: change-request
>Submitter-Id: current-users
>Arrival-Date: Wed Jun 03 18:10:01 UTC 2009
>Closed-Date:
>Last-Modified:
>Originator: Gabor Kovesdan
>Release:
>Organization:
>Environment:
>Description:
So far we haven't had a unified support for dealing with cases where a specific
version of Linux emulation is necessary. We have the same for GCC versions or
Perl version but not for Linux emulation, so I thought it would be useful to
add similar knobs to the Ports Collection infrastructure. Also, the current
IGNORE reasons that ports give, don't seem quite clear to our users, I got a
PR for my Gentoo port because a user couldn't understand the actual problem.
This is another reason I thought of unifying this part.
>How-To-Repeat:
>Fix:
--- linux-osrel.diff begins here ---
Index: ports/Mk/bsd.port.mk
===================================================================
RCS file: /home/pcvs/ports/Mk/bsd.port.mk,v
retrieving revision 1.619
diff -u -r1.619 bsd.port.mk
--- ports/Mk/bsd.port.mk 22 May 2009 21:57:33 -0000 1.619
+++ ports/Mk/bsd.port.mk 3 Jun 2009 17:37:10 -0000
@@ -477,6 +477,13 @@
# Set to value <X>, if the port needs emulators/linux_base-<X>.
# If set to "7", a dependency is registered to emulators/linux_base.
# Implies appropriate settings for STRIP and STRIP_CMD.
+#
+# USE_LINUX_OSRELEASE - Controls the exact, the maximal or the minimal working LINUX_OSRELEASE
+# value the port works with.
+#
+# USE_LINUX_OSRELEASE_REASON - Sets a reason for the dependency, which is used to
+# set IGNORE.
+#
# USE_LINUX_PREFIX
# - controls the action of PREFIX (see above). Only use this
# if the port is a linux infrastructure port (e.g. contains libs
@@ -1809,8 +1816,53 @@
USE_LINUX?= yes
.endif
-.if defined(USE_LINUX)
+.if defined(USE_LINUX_OSRELEASE)
+.if !defined(LINUX_OSRELEASE)
+LINUX_OSRELEASE!= ${ECHO_CMD} `${SYSCTL} -n compat.linux.osrelease 2>/dev/null`
+.endif
+
+.if ${LINUX_OSRELEASE}x == "x"
+IGNORE= Linuxulator is not (kld)loaded
+.endif
+
+linux_major= ${LINUX_OSRELEASE:C|\..*||}
+_linux_minor= ${LINUX_OSRELEASE:S|^${linux_major}||:S|^.||:C|\..*||}
+_linux_micro= ${LINUX_OSRELEASE:S|^${linux_major}||:S|^.${_linux_minor}||:S|^.||:C|\..*||}
+linux_minor= ${_linux_minor:S|^|000|:C|.*(...)|\1|}
+linux_micro= ${_linux_micro:S|^|00|:C|.*(..)|\1|}
+linux_osrel= ${linux_major}${linux_minor}${linux_micro}
+
+want_linux_sign= ${USE_LINUX_OSRELEASE:C|^[0-9.]+||}
+want_linux_ver= ${USE_LINUX_OSRELEASE:S|${want_linux_sign}$||}
+want_linux_major= ${want_linux_ver:C|\..*||}
+_want_linux_minor= ${want_linux_ver:S|^${want_linux_major}||:S|^.||:C|\..*||}
+_want_linux_micro= ${want_linux_ver:S|^${want_linux_major}||:S|^.${_want_linux_minor}||:S|^.||:C|\..*||}
+want_linux_minor= ${_want_linux_minor:S|^|000|:C|.*(...)|\1|}
+want_linux_micro= ${_want_linux_micro:S|^|00|:C|.*(..)|\1|}
+want_linux_osrel= ${want_linux_major}${want_linux_minor}${want_linux_micro}
+
+.if ${want_linux_sign} == "+"
+.if ${want_linux_osrel} > ${linux_osrel}
+USE_LINUX_OSRELEASE_REASON?= requires Linux emulation ${want_linux_ver} or later, please consult the documentation and set the compat.linux.osrelease sysctl appropriately
+IGNORE= ${USE_LINUX_OSRELEASE_REASON}
+.endif
+.elif ${want_linux_sign} == ""
+.if ${want_linux_osrel} != ${linux_osrel}
+USE_LINUX_OSRELEASE_REASON?= requires Linux emulation ${want_linux_ver} exactly, please consult the documentation and set the compat.linux.osrelease sysctl appropriately
+IGNORE= ${USE_LINUX_OSRELEASE_REASON}
+.endif
+.elif ${want_linux_sign} == "-"
+.if ${want_linux_osrel} <= ${linux_osrel}
+USE_LINUX_OSRELEASE_REASON?= requires Linux emulation earlier than ${want_linux_ver}, please consult the documentation and set the compat.linux.osrelease sysctl appropriately
+IGNORE= ${USE_LINUX_OSRELEASE_REASON}
+.endif
+.else # wrong suffix
+IGNORE= improper use of USE_LINUX_OSRELEASE
+.endif
+.endif
+
+.if defined(USE_LINUX)
. if !defined(LINUX_OSRELEASE)
LINUX_OSRELEASE!= ${ECHO_CMD} `${SYSCTL} -n compat.linux.osrelease 2>/dev/null`
. endif
Index: ports/devel/uppaal/Makefile
===================================================================
RCS file: /home/pcvs/ports/devel/uppaal/Makefile,v
retrieving revision 1.9
diff -u -r1.9 Makefile
--- ports/devel/uppaal/Makefile 10 Jan 2009 15:27:26 -0000 1.9
+++ ports/devel/uppaal/Makefile 3 Jun 2009 17:37:10 -0000
@@ -15,6 +15,7 @@
USE_ZIP= yes
USE_LINUX= yes
+USE_LINUX_OSRELEASE= 2.6.16+
USE_JAVA= yes
JAVA_VERSION= 1.6+
JAVA_RUN= yes
@@ -33,12 +34,6 @@
.include <bsd.port.pre.mk>
-LINUX_OSRELEASE!= ${ECHO_CMD} `${SYSCTL} -n compat.linux.osrelease 2>/dev/null`
-
-.if ${LINUX_OSRELEASE} == "2.4.2" || ${OSVERSION} < 700000
-IGNORE=requires compat.linux.osrelease of at least 2.6.16 (needs 7.0 or later)
-.endif
-
.if !exists(${DISTDIR}/${DISTNAME}${EXTRACT_SUFX}) && !defined(PACKAGE_BUILDING)
ECHO_MSG=/usr/bin/printf
IGNORE=Please download ${DISTNAME}${EXTRACT_SUFX} into\
Index: ports/emulators/linux_base-f10/Makefile
===================================================================
RCS file: /home/pcvs/ports/emulators/linux_base-f10/Makefile,v
retrieving revision 1.53
diff -u -r1.53 Makefile
--- ports/emulators/linux_base-f10/Makefile 1 Jun 2009 17:26:13 -0000 1.53
+++ ports/emulators/linux_base-f10/Makefile 3 Jun 2009 17:37:10 -0000
@@ -108,6 +108,7 @@
ONLY_FOR_ARCHS= i386 amd64
LINUX_RPM_ARCH= i386
USE_LINUX_PREFIX= yes
+USE_LINUX_OSRELEASE= 2.6.16+
NO_WRKSUBDIR= yes
MD5_FILE?= ${MASTERDIR}/distinfo.${LINUX_RPM_ARCH}
PLIST_SUB= GLIBCVER="2.9"
@@ -123,14 +124,6 @@
.include <bsd.port.pre.mk>
-LINUX_OSRELEASE!= ${ECHO_CMD} `${SYSCTL} -n compat.linux.osrelease 2>/dev/null`
-
-.if ${LINUX_OSRELEASE}x == "x"
-IGNORE= linuxulator is not (kld)loaded
-.elif ${LINUX_OSRELEASE} == "2.4.2"
-IGNORE= compat.linux.osrelease: 2.4.2 is not supported, please use 2.6.16
-.endif
-
REMOVE_DIRS= boot dev etc/fonts home initrd root tmp var/log var/run var/tmp \
usr/local usr/tmp
REMOVE_FILES= bin/df bin/su etc/exports etc/group etc/localtime \
Index: ports/emulators/linux_base-f7/Makefile
===================================================================
RCS file: /home/pcvs/ports/emulators/linux_base-f7/Makefile,v
retrieving revision 1.38
diff -u -r1.38 Makefile
--- ports/emulators/linux_base-f7/Makefile 31 Mar 2008 03:54:46 -0000 1.38
+++ ports/emulators/linux_base-f7/Makefile 3 Jun 2009 17:37:10 -0000
@@ -98,6 +98,7 @@
ONLY_FOR_ARCHS= i386 amd64
LINUX_RPM_ARCH= i386
USE_LINUX_PREFIX= yes
+USE_LINUX_OSRELEASE= 2.6.16+
NO_WRKSUBDIR= yes
MD5_FILE?= ${MASTERDIR}/distinfo.${LINUX_RPM_ARCH}
PLIST_SUB= GLIBCVER="2.6"
@@ -113,14 +114,6 @@
.include <bsd.port.pre.mk>
-LINUX_OSRELEASE!= ${ECHO_CMD} `${SYSCTL} -n compat.linux.osrelease 2>/dev/null`
-
-.if ${LINUX_OSRELEASE}x == "x"
-IGNORE= linuxulator is not (kld)loaded
-.elif ${LINUX_OSRELEASE} == "2.4.2"
-IGNORE= compat.linux.osrelease: 2.4.2 is not supported
-.endif
-
REMOVE_DIRS= boot dev home initrd root tmp var/log var/run var/tmp \
usr/local usr/tmp
REMOVE_FILES= bin/df bin/su etc/exports etc/group etc/localtime \
Index: ports/emulators/linux_base-f8/Makefile
===================================================================
RCS file: /home/pcvs/ports/emulators/linux_base-f8/Makefile,v
retrieving revision 1.51
diff -u -r1.51 Makefile
--- ports/emulators/linux_base-f8/Makefile 28 Jan 2009 22:16:43 -0000 1.51
+++ ports/emulators/linux_base-f8/Makefile 3 Jun 2009 17:37:10 -0000
@@ -107,6 +107,7 @@
ONLY_FOR_ARCHS= i386 amd64
LINUX_RPM_ARCH= i386
USE_LINUX_PREFIX= yes
+USE_LINUX_OSRELEASE= 2.6.16+
NO_WRKSUBDIR= yes
MD5_FILE?= ${MASTERDIR}/distinfo.${LINUX_RPM_ARCH}
PLIST_SUB= GLIBCVER="2.7"
@@ -122,14 +123,6 @@
.include <bsd.port.pre.mk>
-LINUX_OSRELEASE!= ${ECHO_CMD} `${SYSCTL} -n compat.linux.osrelease 2>/dev/null`
-
-.if ${LINUX_OSRELEASE}x == "x"
-IGNORE= linuxulator is not (kld)loaded
-.elif ${LINUX_OSRELEASE} == "2.4.2"
-IGNORE= compat.linux.osrelease: 2.4.2 is not supported
-.endif
-
REMOVE_DIRS= boot dev etc/fonts home initrd root tmp var/log var/run var/tmp \
usr/local usr/tmp
REMOVE_FILES= bin/df bin/su etc/exports etc/group etc/localtime \
Index: ports/emulators/linux_base-f9/Makefile
===================================================================
RCS file: /home/pcvs/ports/emulators/linux_base-f9/Makefile,v
retrieving revision 1.53
diff -u -r1.53 Makefile
--- ports/emulators/linux_base-f9/Makefile 6 Apr 2009 13:22:27 -0000 1.53
+++ ports/emulators/linux_base-f9/Makefile 3 Jun 2009 17:37:10 -0000
@@ -112,6 +112,7 @@
linux_base-f7-[0-9]* linux_base-f8-[0-9]* linux-glib2-*
ONLY_FOR_ARCHS= i386 amd64
LINUX_RPM_ARCH= i386
+USE_LINUX_OSRELEASE= 2.6.16+
USE_LINUX_PREFIX= yes
NO_WRKSUBDIR= yes
MD5_FILE?= ${MASTERDIR}/distinfo.${LINUX_RPM_ARCH}
@@ -128,14 +129,6 @@
.include <bsd.port.pre.mk>
-LINUX_OSRELEASE!= ${ECHO_CMD} `${SYSCTL} -n compat.linux.osrelease 2>/dev/null`
-
-.if ${LINUX_OSRELEASE}x == "x"
-IGNORE= linuxulator is not (kld)loaded
-.elif ${LINUX_OSRELEASE} == "2.4.2"
-IGNORE= compat.linux.osrelease: 2.4.2 is not supported, please use 2.6.16
-.endif
-
REMOVE_DIRS= boot dev etc/fonts home initrd root tmp var/log var/run var/tmp \
usr/local usr/tmp
REMOVE_FILES= bin/df bin/su etc/exports etc/group etc/localtime \
Index: ports/emulators/linux_base-fc6/Makefile
===================================================================
RCS file: /home/pcvs/ports/emulators/linux_base-fc6/Makefile,v
retrieving revision 1.34
diff -u -r1.34 Makefile
--- ports/emulators/linux_base-fc6/Makefile 31 Mar 2008 03:54:45 -0000 1.34
+++ ports/emulators/linux_base-fc6/Makefile 3 Jun 2009 17:37:10 -0000
@@ -102,6 +102,7 @@
ONLY_FOR_ARCHS= i386 amd64
LINUX_RPM_ARCH= i386
USE_LINUX_PREFIX= yes
+USE_LINUX_OSRELEASE= 2.6.16+
NO_WRKSUBDIR= yes
MD5_FILE?= ${MASTERDIR}/distinfo.${LINUX_RPM_ARCH}
PLIST_SUB= GLIBCVER="2.5"
@@ -117,14 +118,6 @@
.include <bsd.port.pre.mk>
-LINUX_OSRELEASE!= ${ECHO_CMD} `${SYSCTL} -n compat.linux.osrelease 2>/dev/null`
-
-.if ${LINUX_OSRELEASE}x == "x"
-IGNORE= linuxulator is not (kld)loaded
-.elif ${LINUX_OSRELEASE} == "2.4.2"
-IGNORE= compat.linux.osrelease: 2.4.2 is not supported
-.endif
-
REMOVE_DIRS= boot dev home initrd root tmp var/log var/run var/tmp \
usr/local usr/tmp
REMOVE_FILES= bin/df bin/su etc/exports etc/group etc/localtime \
Index: ports/emulators/linux_dist-gentoo-stage1/Makefile
===================================================================
RCS file: /home/pcvs/ports/emulators/linux_dist-gentoo-stage1/Makefile,v
retrieving revision 1.41
diff -u -r1.41 Makefile
--- ports/emulators/linux_dist-gentoo-stage1/Makefile 24 Nov 2008 13:22:28 -0000 1.41
+++ ports/emulators/linux_dist-gentoo-stage1/Makefile 3 Jun 2009 17:37:10 -0000
@@ -18,6 +18,7 @@
RESTRICTED= binaries licensed under GNU GPL without accompanying source
USE_BZIP2= YES
+USE_LINUX_OSRELEASE= 2.6.16+
DIST_SUBDIR= gentoo-linux
NO_BUILD= YES
ONLY_FOR_ARCHS= amd64 i386
@@ -43,14 +44,6 @@
.include <bsd.port.pre.mk>
-LINUX_OSRELEASE!= ${ECHO_CMD} `${SYSCTL} -n compat.linux.osrelease 2>/dev/null`
-
-.if ${LINUX_OSRELEASE}x == "x"
-IGNORE= linuxulator is not (kld)loaded
-.elif ${LINUX_OSRELEASE} == "2.4.2"
-IGNORE= compat.linux.osrelease: 2.4.2 is not supported
-.endif
-
do-extract:
${MKDIR} ${WRKDIR}
Index: ports/emulators/linux_dist-gentoo-stage3/Makefile
===================================================================
RCS file: /home/pcvs/ports/emulators/linux_dist-gentoo-stage3/Makefile,v
retrieving revision 1.12
diff -u -r1.12 Makefile
--- ports/emulators/linux_dist-gentoo-stage3/Makefile 24 Nov 2008 13:23:21 -0000 1.12
+++ ports/emulators/linux_dist-gentoo-stage3/Makefile 3 Jun 2009 17:37:10 -0000
@@ -16,6 +16,7 @@
RESTRICTED= binaries licensed under GNU GPL without accompanying source
USE_BZIP2= YES
+USE_LINUX_OSRELEASE= 2.6.16+
DIST_SUBDIR= gentoo-linux
NO_BUILD= YES
ONLY_FOR_ARCHS= i386 amd64
@@ -43,14 +44,6 @@
.include <bsd.port.pre.mk>
-LINUX_OSRELEASE!= ${ECHO_CMD} `${SYSCTL} -n compat.linux.osrelease 2>/dev/null`
-
-.if ${LINUX_OSRELEASE}x == "x"
-IGNORE= linuxulator is not (kld)loaded
-.elif ${LINUX_OSRELEASE} == "2.4.2"
-IGNORE= compat.linux.osrelease: 2.4.2 is not supported
-.endif
-
.if (${GENTOO_OPTIMIZED} == "i686")
MASTER_SITE_SUBDIR= releases/x86/${PORTVERSION}/stages
DISTNAME= stage3-${GENTOO_OPTIMIZED}-${PORTVERSION}
--- linux-osrel.diff ends here ---
>Release-Note:
>Audit-Trail:
>Unformatted:
More information about the freebsd-ports-bugs
mailing list