1
0
mirror of https://git.FreeBSD.org/ports.git synced 2024-11-23 00:43:28 +00:00
freebsd-ports/Mk/bsd.options.mk

605 lines
19 KiB
Makefile
Raw Normal View History

# $FreeBSD$
#
# These variables are used in port makefiles to define the options for a port.
#
2014-06-18 07:13:26 +00:00
# OPTIONS_DEFINE - List of options this ports accept
# OPTIONS_DEFINE_${ARCH} - List of options this ports accept and are
2014-06-18 07:13:26 +00:00
# specific to ${ARCH}
# OPTIONS_DEFAULT - List of options activated by default
# OPTIONS_DEFAULT_${ARCH} - List of options activated by default for a
2014-06-18 07:13:26 +00:00
# given arch
#
2014-06-18 07:13:26 +00:00
# ${OPTION}_DESC - Description of the ${OPTION}
#
2014-06-18 07:13:26 +00:00
# OPTIONS_SINGLE - List of single-choice grouped options: 1 and
# only 1 among N
# OPTIONS_RADIO - List of radio-choice grouped options: 0 or 1
# among N
# OPTIONS_MULTI - List of multiple-choice grouped options: at
# least 1 among N
# OPTIONS_GROUP - List of group-choice grouped options: 0 or
# more among N
#
# OPTIONS_SINGLE_${NAME} - List of OPTIONS grouped as single choice (for
2014-06-18 07:13:26 +00:00
# the single named as ${NAME} as defined in
# OPTIONS_SINGLE)
# OPTIONS_RADIO_${NAME} - List of OPTIONS grouped as radio choice (for
2014-06-18 07:13:26 +00:00
# the radio named as ${NAME} as defined in
# OPTIONS_RADIO)
# OPTIONS_MULTI_${NAME} - List of OPTIONS grouped as multiple-choice
2014-06-18 07:13:26 +00:00
# (for the multi named as ${NAME} as defined in
# OPTIONS_MULTI)
# OPTIONS_GROUP_${NAME} - List of OPTIONS grouped as group-choice (for
2014-06-18 07:13:26 +00:00
# the group named as ${NAME} as defined in
# OPTIONS_GROUP)
#
2014-06-18 07:13:26 +00:00
# OPTIONS_EXCLUDE - List of options unsupported (useful for slave ports)
# OPTIONS_EXCLUDE_${ARCH} - List of options unsupported on a given ${ARCH}
# OPTIONS_EXCLUDE_${OPSYS} - List of options unsupported on a given ${OPSYS}
2014-06-18 07:13:26 +00:00
# OPTIONS_SLAVE - This is designed for slave ports, it removes an
# option from the options list inherited from the
# master port and it always adds it to PORT_OPTIONS
# meaning activated
#
# These variables can be used in make.conf to configure options. They are
# processed in the order listed below, i.e. later variables override the effects
# of previous variables. Options saved using the options dialog are processed
# right before OPTIONS_SET_FORCE. When building a port a dialog to configure
# options will only appear if there are new options, i.e. options which have not
# been configured before either using the option dialog in a previous build or
# using the variables below. You can force the dialog to appear by running
# "make config".
#
2014-06-18 07:13:26 +00:00
# OPTIONS_SET - List of options to enable for all ports.
# OPTIONS_UNSET - List of options to disable for all ports.
# ${OPTIONS_NAME}_SET - List of options to enable for a specific port.
# ${OPTIONS_NAME}_UNSET - List of options to disable for a specific port.
#
2014-06-18 07:13:26 +00:00
# OPTIONS_SET_FORCE - List of options to enable for all ports.
# OPTIONS_UNSET_FORCE - List of options to disable for all ports.
# ${OPTIONS_NAME}_SET_FORCE - List of options to enable for a specific port.
# ${OPTIONS_NAME}_UNSET_FORCE
2014-06-18 07:13:26 +00:00
# - List of options to disable for a specific port.
#
# These variables can be used on the command line. They override the effects of
# the make.conf variables above.
#
2014-06-18 07:13:26 +00:00
# WITH - Set options from the command line
# WITHOUT - Unset options from the command line
#
#
Mk/bsd.options.mk: Introduce SELECTED_OPTIONS, DESELECTED_OPTIONS Until now, the only way to obtain information on the valid port options and the current selection states is by using the pretty-print-config target. It would look something like this: > make -C /usr/ports/lang/gcc5-aux print-print-config Standard[ +FORT +OBJC +NLS -TESTSUITE -ALLSTAGES -STATIC ] \ Bootstrap[ -BOOTSTRAP ] To process the total options and the selection state of each option requires additional processing, e.g. with awk and/or sed. Moreover, if other information is needed about the port it question, it would require a second execution of "make" to reveal variable values. There simply is no other way to obtain the option selection information in a single pass (this limitation came when options framework was brought in). This enhancement allows the option selection information to revealed with make -V so that all port information can be acquired in a single pass. Moreover, they won't require piping through sed or awk. Two read-only variables are introduced: SELECTED_OPTIONS (list of all "on" options) DESELECTED_OPTIONS (liss of all "off" options) Here's an example of a single pass acquisition: > make -C /usr/dports/lang/gcc5-aux -V PKGNAME -V SELECTED_OPTIONS \ -V DESELECTED_OPTIONS gcc5-aux-20150716 NLS OBJC FORT BOOTSTRAP STATIC ALLSTAGES TESTSUITE Obviously the grouping information seen in pretty-print-config is lost, so these new variables will not help if option group information is required. Approved by: portmgr (bapt)
2015-12-14 22:44:39 +00:00
# These variables are strictly informational (read-only). They indicate the
# current state of the selected options; they are space-delimited lists.
#
# SELECTED_OPTIONS - list of options set "on"
# DESELECTED_OPTIONS - list of options set "off"
#
#
# The following knobs are there to simplify the handling of OPTIONS in simple
# cases :
#
2014-06-18 07:13:26 +00:00
# OPTIONS_SUB When defined it will add to PLIST_SUB:
# Option enabled ${opt}=""
# Option disabled ${opt}="@comment "
#
# ${opt}_CONFIGURE_ON When option is enabled, it will add its content to
2014-06-18 07:13:26 +00:00
# the CONFIGURE_ARGS.
# ${opt}_CONFIGURE_OFF When option is disabled, it will add its content to
2014-06-18 07:13:26 +00:00
# the CONFIGURE_ARGS.
# ${opt}_CONFIGURE_ENABLE Will add to CONFIGURE_ARGS:
2014-06-18 07:13:26 +00:00
# Option enabled --enable-${content}
# Option disabled --disable-${content}
# ${opt}_CONFIGURE_WITH Will add to CONFIGURE_ARGS:
2014-06-18 07:13:26 +00:00
# Option enabled --with-${content}
# Option disabled --without-${content}
#
2014-06-18 07:13:26 +00:00
# ${opt}_CMAKE_ON When option is enabled, it will add its content to
# the CMAKE_ARGS.
# ${opt}_CMAKE_OFF When option is disabled, it will add its content to
# the CMAKE_ARGS.
#
2014-06-18 07:13:26 +00:00
# ${opt}_QMAKE_ON When option is enabled, it will add its content to
# the QMAKE_ARGS.
# ${opt}_QMAKE_OFF When option is disabled, it will add its content to
# the QMAKE_ARGS.
#
# ${opt}_IMPLIES When opt is enabled, options named in IMPLIES will
# get enabled too.
# ${opt}_PREVENTS When opt is enabled, if any options in PREVENTS are
# also enabled, it will produce an error.
# ${opt}_PREVENTS_MSG Provides a message explaining why the options
# cannot be selected together.
#
# ${opt}_USE= FOO=bar When option is enabled, it will enable
2014-06-18 07:13:26 +00:00
# USE_FOO+= bar
# If you need more than one option, you can do
# FOO=bar,baz and you'll get USE_FOO=bar baz
# ${opt}_USE_OFF= FOO=bar When option is disabled, it will enable
# USE_FOO+= bar
#
# ${opt}_VARS= FOO=bar When option is enabled, it will set
# FOO= bar
# ${opt}_VARS= FOO+=bar When option is enabled, it will append
# FOO+= bar
# ${opt}_VARS_OFF= FOO=bar When option is disabled, it will set
# FOO= bar
# ${opt}_VARS_OFF= FOO+=bar When option is disabled, it will append
# FOO+= bar
#
# For each of:
# ALL_TARGET BROKEN CATEGORIES CFLAGS CONFIGURE_ENV CONFLICTS CONFLICTS_BUILD
# CONFLICTS_INSTALL CPPFLAGS CXXFLAGS DESKTOP_ENTRIES DISTFILES EXTRA_PATCHES
# EXTRACT_ONLY GH_ACCOUNT GH_PROJECT GH_TAGNAME IGNORE INFO INSTALL_TARGET
# LDFLAGS LIBS MAKE_ARGS MAKE_ENV PATCHFILES PATCH_SITES PLIST_DIRS
# PLIST_DIRSTRY PLIST_FILES PLIST_SUB PORTDOCS PORTEXAMPLES SUB_FILES SUB_LIST
# TEST_TARGET USES,
# defining ${opt}_${variable} will add its content to the actual variable when
# the option is enabled. Defining ${opt}_${variable}_OFF will add its content
# to the actual variable when the option is disabled.
#
# For each of the depends target PKG FETCH EXTRACT PATCH BUILD LIB RUN,
# defining ${opt}_${deptype}_DEPENDS will add its content to the actual
# dependency when the option is enabled. Defining
# ${opt}_${deptype}_DEPENDS_OFF will add its content to the actual dependency
2014-09-22 12:09:08 +00:00
# when the option is disabled.
##
# Set all the options available for the ports, beginning with the
# global ones and ending with the ones decided by the maintainer.
.if !defined(OPTIONSMKINCLUDED)
OPTIONSMKINCLUDED= bsd.options.mk
OPTIONS_NAME?= ${PKGORIGIN:S/\//_/}
OPTIONS_FILE?= ${PORT_DBDIR}/${OPTIONS_NAME}/options
_OPTIONS_FLAGS= ALL_TARGET BROKEN CATEGORIES CFLAGS CONFIGURE_ENV CONFLICTS \
CONFLICTS_BUILD CONFLICTS_INSTALL CPPFLAGS CXXFLAGS \
DESKTOP_ENTRIES DISTFILES EXTRA_PATCHES EXTRACT_ONLY \
GH_ACCOUNT GH_PROJECT GH_TAGNAME IGNORE INFO INSTALL_TARGET \
LDFLAGS LIBS MAKE_ARGS MAKE_ENV PATCHFILES PATCH_SITES \
PLIST_DIRS PLIST_DIRSTRY PLIST_FILES PLIST_SUB PORTDOCS \
PORTEXAMPLES SUB_FILES SUB_LIST TEST_TARGET USES
_OPTIONS_DEPENDS= PKG FETCH EXTRACT PATCH BUILD LIB RUN
# The format here is target_family:priority:target-type
_OPTIONS_TARGETS= fetch:300:pre fetch:500:do fetch:700:post \
extract:300:pre extract:500:do extract:700:post \
patch:300:pre patch:500:do patch:700:post \
configure:300:pre configure:500:do configure:700:post \
build:300:pre build:500:do build:700:post \
install:300:pre install:500:do install:700:post \
test:300:pre test:500:do test:700:post \
package:300:pre package:500:do package:700:post \
stage:800:post
# Set the default values for the global options, as defined by portmgr
.if !defined(NOPORTDOCS)
PORT_OPTIONS+= DOCS
- Rename check-orphans to check-plist. Keep the old for backwards-compat. - Bug fixes: makeplist/check-plist: - Fix showing directories owned by RUN_DEPENDS/LIB_DEPENDS [1] - Use proper "rmdir PATH" syntax, not "rmdir >/dev/null... PATH" which pkg will not recognize. - Never consider base /etc/mtree/BSD.usr.dist or LOCLABASE Templates/BSD.local.dist as needing @dirrm handling. check-plist: - Fix showing PORTDOCS/PORTEXAMPLES files when the OPTIONS are not set. makeplist will still suggest them. - Fix showing files installed through unselected OPTIONS as orphans, by considering "@comment file" to be ignored. [2] - Fix @sample, @fc, @fcfontsdir, @fontsdir support - Fix return status when orphans are found to be non-zero - Add note when PREFIX=!LOCALBASE - Be more clear when orphans/no orphans are found. - Add a whitelist mechanism for globally approved ignores. - Add *.bak/*.orig to orphan whitelist for now. - Fix false-positive with dirs installed to /, such as with archivers/dpkg creating /var/db/dpkg - Fix false-positive with @dirrm ending in /, such as with ports-mgmt/poudriere with a @dirrmtry share/zsh/ - There are likely still some false-positives. I fixed as many as I could find. Please let me know of others. * One in particular that is not easily fixable is installing a file into a directory owned by another port where that other port is not a run-time dependency. So the leaf port may create all of the parent dirs and never clean them up. Cleaning them up is not proper unless no other package is depending on them. This will be addressed by pkg(8) once pkg_install is EOL, or sooner. - Consider @dirrm of directories owned by run-time dependencies, or /etc/mtree/* or Templates/BSD.local.dist (at LOCALBASE) as fatal errors. These should not be removed in the plist. @comment lines are not considered for this; they will not ignore an error. ===> Checking for directories owned by dependencies or MTREEs Error: Owned by dependency: @dirrmtry share/locale/af/LC_MESSAGES Error: Owned by dependency: @dirrmtry share/locale/af Error: Owned by dependency: @dirrmtry %%PERL5_MAN3%% - Detect files in plist that do not exist in the stagedir. Pkgng already did this, but now we have it unified with this check. @comment lines are not considered for this; they will not ignore an error. ===> Checking for items in pkg-plist which are not in STAGEDIR Error: Missing: foo Error: Missing: @dirrmtry bar - Change orphaned output due to several new errors introduced: ===> Checking for items in STAGEDIR missing from pkg-plist Error: Orphaned: foo - Send errors to stderr check_leftovers.sh: - Prefer longer values for PLIST_SUB. bsd.options.mk: - Fix NOPORTDOCS/WITHOUT_NLS/NOPORTEXAMPLES not unsetting their respective OPTIONS. - Mark NOPORTDOCS/NOPORTEXAMPLES deprecated and hook them into the OPTIONS_WARNING to tell users the new format. - check-stagedir.sh refactoring: - Switch to using new PLIST_SUB_SED - Use ! instead of , in sed(1) regex to allow files/dirs with ',' - Rework PORTEXAMPLES/PORTDOCS handling so it acts on PLIST_SUB_SED'd value and not absolutes. Also simplify the regex for these a bit to allow reuse. - No longer need DOCSDIRS/EXAMPLESDIR in env - Wrap long lines - Unset some vars in env when they are done being used to free space for larger sed vars - Cleanup redundant sed regexes - Add a Scripts/plist_sub_sed_sort.sh to prefer longer values when substituting over shorter values. - To make check-plist ignore a file *as an orphan* do one of the following: 1. Install it 2. post-install: ${RM} ${STAGEDIR}file 3. Put the file behind an OPTION with a PLIST_SUB: %%OPTION%%file 4. Add to plist as a @comment [2]: @comment file @comment @dirrmtry dir Reviewed by: mat (much earlier version) Discussed with: mat, antoine, bapt, swills (various bits) With hat: portmgr PR: ports/185561 [1] Reported By: Alexander Yerenkow <yerenkow@gmail.com> [1] Tested with: pkg and pkg_install Reported by: many (false-positives) [2] This is a partial solution, we may still need a plist.ignore too. It doesn't make much sense to add files in main pkg-plist we don't care about, but maybe it does since you'll see and reconsider them being ignored someday. @comment is used as all the OPTION PLIST_SUB deactivations use @comment instead of something like @ignore.
2014-04-19 06:44:56 +00:00
.else
2014-06-18 07:13:26 +00:00
OPTIONS_WARNINGS+= "NOPORTDOCS"
- Rename check-orphans to check-plist. Keep the old for backwards-compat. - Bug fixes: makeplist/check-plist: - Fix showing directories owned by RUN_DEPENDS/LIB_DEPENDS [1] - Use proper "rmdir PATH" syntax, not "rmdir >/dev/null... PATH" which pkg will not recognize. - Never consider base /etc/mtree/BSD.usr.dist or LOCLABASE Templates/BSD.local.dist as needing @dirrm handling. check-plist: - Fix showing PORTDOCS/PORTEXAMPLES files when the OPTIONS are not set. makeplist will still suggest them. - Fix showing files installed through unselected OPTIONS as orphans, by considering "@comment file" to be ignored. [2] - Fix @sample, @fc, @fcfontsdir, @fontsdir support - Fix return status when orphans are found to be non-zero - Add note when PREFIX=!LOCALBASE - Be more clear when orphans/no orphans are found. - Add a whitelist mechanism for globally approved ignores. - Add *.bak/*.orig to orphan whitelist for now. - Fix false-positive with dirs installed to /, such as with archivers/dpkg creating /var/db/dpkg - Fix false-positive with @dirrm ending in /, such as with ports-mgmt/poudriere with a @dirrmtry share/zsh/ - There are likely still some false-positives. I fixed as many as I could find. Please let me know of others. * One in particular that is not easily fixable is installing a file into a directory owned by another port where that other port is not a run-time dependency. So the leaf port may create all of the parent dirs and never clean them up. Cleaning them up is not proper unless no other package is depending on them. This will be addressed by pkg(8) once pkg_install is EOL, or sooner. - Consider @dirrm of directories owned by run-time dependencies, or /etc/mtree/* or Templates/BSD.local.dist (at LOCALBASE) as fatal errors. These should not be removed in the plist. @comment lines are not considered for this; they will not ignore an error. ===> Checking for directories owned by dependencies or MTREEs Error: Owned by dependency: @dirrmtry share/locale/af/LC_MESSAGES Error: Owned by dependency: @dirrmtry share/locale/af Error: Owned by dependency: @dirrmtry %%PERL5_MAN3%% - Detect files in plist that do not exist in the stagedir. Pkgng already did this, but now we have it unified with this check. @comment lines are not considered for this; they will not ignore an error. ===> Checking for items in pkg-plist which are not in STAGEDIR Error: Missing: foo Error: Missing: @dirrmtry bar - Change orphaned output due to several new errors introduced: ===> Checking for items in STAGEDIR missing from pkg-plist Error: Orphaned: foo - Send errors to stderr check_leftovers.sh: - Prefer longer values for PLIST_SUB. bsd.options.mk: - Fix NOPORTDOCS/WITHOUT_NLS/NOPORTEXAMPLES not unsetting their respective OPTIONS. - Mark NOPORTDOCS/NOPORTEXAMPLES deprecated and hook them into the OPTIONS_WARNING to tell users the new format. - check-stagedir.sh refactoring: - Switch to using new PLIST_SUB_SED - Use ! instead of , in sed(1) regex to allow files/dirs with ',' - Rework PORTEXAMPLES/PORTDOCS handling so it acts on PLIST_SUB_SED'd value and not absolutes. Also simplify the regex for these a bit to allow reuse. - No longer need DOCSDIRS/EXAMPLESDIR in env - Wrap long lines - Unset some vars in env when they are done being used to free space for larger sed vars - Cleanup redundant sed regexes - Add a Scripts/plist_sub_sed_sort.sh to prefer longer values when substituting over shorter values. - To make check-plist ignore a file *as an orphan* do one of the following: 1. Install it 2. post-install: ${RM} ${STAGEDIR}file 3. Put the file behind an OPTION with a PLIST_SUB: %%OPTION%%file 4. Add to plist as a @comment [2]: @comment file @comment @dirrmtry dir Reviewed by: mat (much earlier version) Discussed with: mat, antoine, bapt, swills (various bits) With hat: portmgr PR: ports/185561 [1] Reported By: Alexander Yerenkow <yerenkow@gmail.com> [1] Tested with: pkg and pkg_install Reported by: many (false-positives) [2] This is a partial solution, we may still need a plist.ignore too. It doesn't make much sense to add files in main pkg-plist we don't care about, but maybe it does since you'll see and reconsider them being ignored someday. @comment is used as all the OPTION PLIST_SUB deactivations use @comment instead of something like @ignore.
2014-04-19 06:44:56 +00:00
WITHOUT+= DOCS
OPTIONS_WARNINGS_UNSET+= DOCS
.endif
.if !defined(WITHOUT_NLS)
PORT_OPTIONS+= NLS
- Rename check-orphans to check-plist. Keep the old for backwards-compat. - Bug fixes: makeplist/check-plist: - Fix showing directories owned by RUN_DEPENDS/LIB_DEPENDS [1] - Use proper "rmdir PATH" syntax, not "rmdir >/dev/null... PATH" which pkg will not recognize. - Never consider base /etc/mtree/BSD.usr.dist or LOCLABASE Templates/BSD.local.dist as needing @dirrm handling. check-plist: - Fix showing PORTDOCS/PORTEXAMPLES files when the OPTIONS are not set. makeplist will still suggest them. - Fix showing files installed through unselected OPTIONS as orphans, by considering "@comment file" to be ignored. [2] - Fix @sample, @fc, @fcfontsdir, @fontsdir support - Fix return status when orphans are found to be non-zero - Add note when PREFIX=!LOCALBASE - Be more clear when orphans/no orphans are found. - Add a whitelist mechanism for globally approved ignores. - Add *.bak/*.orig to orphan whitelist for now. - Fix false-positive with dirs installed to /, such as with archivers/dpkg creating /var/db/dpkg - Fix false-positive with @dirrm ending in /, such as with ports-mgmt/poudriere with a @dirrmtry share/zsh/ - There are likely still some false-positives. I fixed as many as I could find. Please let me know of others. * One in particular that is not easily fixable is installing a file into a directory owned by another port where that other port is not a run-time dependency. So the leaf port may create all of the parent dirs and never clean them up. Cleaning them up is not proper unless no other package is depending on them. This will be addressed by pkg(8) once pkg_install is EOL, or sooner. - Consider @dirrm of directories owned by run-time dependencies, or /etc/mtree/* or Templates/BSD.local.dist (at LOCALBASE) as fatal errors. These should not be removed in the plist. @comment lines are not considered for this; they will not ignore an error. ===> Checking for directories owned by dependencies or MTREEs Error: Owned by dependency: @dirrmtry share/locale/af/LC_MESSAGES Error: Owned by dependency: @dirrmtry share/locale/af Error: Owned by dependency: @dirrmtry %%PERL5_MAN3%% - Detect files in plist that do not exist in the stagedir. Pkgng already did this, but now we have it unified with this check. @comment lines are not considered for this; they will not ignore an error. ===> Checking for items in pkg-plist which are not in STAGEDIR Error: Missing: foo Error: Missing: @dirrmtry bar - Change orphaned output due to several new errors introduced: ===> Checking for items in STAGEDIR missing from pkg-plist Error: Orphaned: foo - Send errors to stderr check_leftovers.sh: - Prefer longer values for PLIST_SUB. bsd.options.mk: - Fix NOPORTDOCS/WITHOUT_NLS/NOPORTEXAMPLES not unsetting their respective OPTIONS. - Mark NOPORTDOCS/NOPORTEXAMPLES deprecated and hook them into the OPTIONS_WARNING to tell users the new format. - check-stagedir.sh refactoring: - Switch to using new PLIST_SUB_SED - Use ! instead of , in sed(1) regex to allow files/dirs with ',' - Rework PORTEXAMPLES/PORTDOCS handling so it acts on PLIST_SUB_SED'd value and not absolutes. Also simplify the regex for these a bit to allow reuse. - No longer need DOCSDIRS/EXAMPLESDIR in env - Wrap long lines - Unset some vars in env when they are done being used to free space for larger sed vars - Cleanup redundant sed regexes - Add a Scripts/plist_sub_sed_sort.sh to prefer longer values when substituting over shorter values. - To make check-plist ignore a file *as an orphan* do one of the following: 1. Install it 2. post-install: ${RM} ${STAGEDIR}file 3. Put the file behind an OPTION with a PLIST_SUB: %%OPTION%%file 4. Add to plist as a @comment [2]: @comment file @comment @dirrmtry dir Reviewed by: mat (much earlier version) Discussed with: mat, antoine, bapt, swills (various bits) With hat: portmgr PR: ports/185561 [1] Reported By: Alexander Yerenkow <yerenkow@gmail.com> [1] Tested with: pkg and pkg_install Reported by: many (false-positives) [2] This is a partial solution, we may still need a plist.ignore too. It doesn't make much sense to add files in main pkg-plist we don't care about, but maybe it does since you'll see and reconsider them being ignored someday. @comment is used as all the OPTION PLIST_SUB deactivations use @comment instead of something like @ignore.
2014-04-19 06:44:56 +00:00
.else
WITHOUT+= NLS
.endif
.if !defined(NOPORTEXAMPLES)
PORT_OPTIONS+= EXAMPLES
- Rename check-orphans to check-plist. Keep the old for backwards-compat. - Bug fixes: makeplist/check-plist: - Fix showing directories owned by RUN_DEPENDS/LIB_DEPENDS [1] - Use proper "rmdir PATH" syntax, not "rmdir >/dev/null... PATH" which pkg will not recognize. - Never consider base /etc/mtree/BSD.usr.dist or LOCLABASE Templates/BSD.local.dist as needing @dirrm handling. check-plist: - Fix showing PORTDOCS/PORTEXAMPLES files when the OPTIONS are not set. makeplist will still suggest them. - Fix showing files installed through unselected OPTIONS as orphans, by considering "@comment file" to be ignored. [2] - Fix @sample, @fc, @fcfontsdir, @fontsdir support - Fix return status when orphans are found to be non-zero - Add note when PREFIX=!LOCALBASE - Be more clear when orphans/no orphans are found. - Add a whitelist mechanism for globally approved ignores. - Add *.bak/*.orig to orphan whitelist for now. - Fix false-positive with dirs installed to /, such as with archivers/dpkg creating /var/db/dpkg - Fix false-positive with @dirrm ending in /, such as with ports-mgmt/poudriere with a @dirrmtry share/zsh/ - There are likely still some false-positives. I fixed as many as I could find. Please let me know of others. * One in particular that is not easily fixable is installing a file into a directory owned by another port where that other port is not a run-time dependency. So the leaf port may create all of the parent dirs and never clean them up. Cleaning them up is not proper unless no other package is depending on them. This will be addressed by pkg(8) once pkg_install is EOL, or sooner. - Consider @dirrm of directories owned by run-time dependencies, or /etc/mtree/* or Templates/BSD.local.dist (at LOCALBASE) as fatal errors. These should not be removed in the plist. @comment lines are not considered for this; they will not ignore an error. ===> Checking for directories owned by dependencies or MTREEs Error: Owned by dependency: @dirrmtry share/locale/af/LC_MESSAGES Error: Owned by dependency: @dirrmtry share/locale/af Error: Owned by dependency: @dirrmtry %%PERL5_MAN3%% - Detect files in plist that do not exist in the stagedir. Pkgng already did this, but now we have it unified with this check. @comment lines are not considered for this; they will not ignore an error. ===> Checking for items in pkg-plist which are not in STAGEDIR Error: Missing: foo Error: Missing: @dirrmtry bar - Change orphaned output due to several new errors introduced: ===> Checking for items in STAGEDIR missing from pkg-plist Error: Orphaned: foo - Send errors to stderr check_leftovers.sh: - Prefer longer values for PLIST_SUB. bsd.options.mk: - Fix NOPORTDOCS/WITHOUT_NLS/NOPORTEXAMPLES not unsetting their respective OPTIONS. - Mark NOPORTDOCS/NOPORTEXAMPLES deprecated and hook them into the OPTIONS_WARNING to tell users the new format. - check-stagedir.sh refactoring: - Switch to using new PLIST_SUB_SED - Use ! instead of , in sed(1) regex to allow files/dirs with ',' - Rework PORTEXAMPLES/PORTDOCS handling so it acts on PLIST_SUB_SED'd value and not absolutes. Also simplify the regex for these a bit to allow reuse. - No longer need DOCSDIRS/EXAMPLESDIR in env - Wrap long lines - Unset some vars in env when they are done being used to free space for larger sed vars - Cleanup redundant sed regexes - Add a Scripts/plist_sub_sed_sort.sh to prefer longer values when substituting over shorter values. - To make check-plist ignore a file *as an orphan* do one of the following: 1. Install it 2. post-install: ${RM} ${STAGEDIR}file 3. Put the file behind an OPTION with a PLIST_SUB: %%OPTION%%file 4. Add to plist as a @comment [2]: @comment file @comment @dirrmtry dir Reviewed by: mat (much earlier version) Discussed with: mat, antoine, bapt, swills (various bits) With hat: portmgr PR: ports/185561 [1] Reported By: Alexander Yerenkow <yerenkow@gmail.com> [1] Tested with: pkg and pkg_install Reported by: many (false-positives) [2] This is a partial solution, we may still need a plist.ignore too. It doesn't make much sense to add files in main pkg-plist we don't care about, but maybe it does since you'll see and reconsider them being ignored someday. @comment is used as all the OPTION PLIST_SUB deactivations use @comment instead of something like @ignore.
2014-04-19 06:44:56 +00:00
.else
2014-06-18 07:13:26 +00:00
OPTIONS_WARNINGS+= "NOPORTEXAMPLES"
- Rename check-orphans to check-plist. Keep the old for backwards-compat. - Bug fixes: makeplist/check-plist: - Fix showing directories owned by RUN_DEPENDS/LIB_DEPENDS [1] - Use proper "rmdir PATH" syntax, not "rmdir >/dev/null... PATH" which pkg will not recognize. - Never consider base /etc/mtree/BSD.usr.dist or LOCLABASE Templates/BSD.local.dist as needing @dirrm handling. check-plist: - Fix showing PORTDOCS/PORTEXAMPLES files when the OPTIONS are not set. makeplist will still suggest them. - Fix showing files installed through unselected OPTIONS as orphans, by considering "@comment file" to be ignored. [2] - Fix @sample, @fc, @fcfontsdir, @fontsdir support - Fix return status when orphans are found to be non-zero - Add note when PREFIX=!LOCALBASE - Be more clear when orphans/no orphans are found. - Add a whitelist mechanism for globally approved ignores. - Add *.bak/*.orig to orphan whitelist for now. - Fix false-positive with dirs installed to /, such as with archivers/dpkg creating /var/db/dpkg - Fix false-positive with @dirrm ending in /, such as with ports-mgmt/poudriere with a @dirrmtry share/zsh/ - There are likely still some false-positives. I fixed as many as I could find. Please let me know of others. * One in particular that is not easily fixable is installing a file into a directory owned by another port where that other port is not a run-time dependency. So the leaf port may create all of the parent dirs and never clean them up. Cleaning them up is not proper unless no other package is depending on them. This will be addressed by pkg(8) once pkg_install is EOL, or sooner. - Consider @dirrm of directories owned by run-time dependencies, or /etc/mtree/* or Templates/BSD.local.dist (at LOCALBASE) as fatal errors. These should not be removed in the plist. @comment lines are not considered for this; they will not ignore an error. ===> Checking for directories owned by dependencies or MTREEs Error: Owned by dependency: @dirrmtry share/locale/af/LC_MESSAGES Error: Owned by dependency: @dirrmtry share/locale/af Error: Owned by dependency: @dirrmtry %%PERL5_MAN3%% - Detect files in plist that do not exist in the stagedir. Pkgng already did this, but now we have it unified with this check. @comment lines are not considered for this; they will not ignore an error. ===> Checking for items in pkg-plist which are not in STAGEDIR Error: Missing: foo Error: Missing: @dirrmtry bar - Change orphaned output due to several new errors introduced: ===> Checking for items in STAGEDIR missing from pkg-plist Error: Orphaned: foo - Send errors to stderr check_leftovers.sh: - Prefer longer values for PLIST_SUB. bsd.options.mk: - Fix NOPORTDOCS/WITHOUT_NLS/NOPORTEXAMPLES not unsetting their respective OPTIONS. - Mark NOPORTDOCS/NOPORTEXAMPLES deprecated and hook them into the OPTIONS_WARNING to tell users the new format. - check-stagedir.sh refactoring: - Switch to using new PLIST_SUB_SED - Use ! instead of , in sed(1) regex to allow files/dirs with ',' - Rework PORTEXAMPLES/PORTDOCS handling so it acts on PLIST_SUB_SED'd value and not absolutes. Also simplify the regex for these a bit to allow reuse. - No longer need DOCSDIRS/EXAMPLESDIR in env - Wrap long lines - Unset some vars in env when they are done being used to free space for larger sed vars - Cleanup redundant sed regexes - Add a Scripts/plist_sub_sed_sort.sh to prefer longer values when substituting over shorter values. - To make check-plist ignore a file *as an orphan* do one of the following: 1. Install it 2. post-install: ${RM} ${STAGEDIR}file 3. Put the file behind an OPTION with a PLIST_SUB: %%OPTION%%file 4. Add to plist as a @comment [2]: @comment file @comment @dirrmtry dir Reviewed by: mat (much earlier version) Discussed with: mat, antoine, bapt, swills (various bits) With hat: portmgr PR: ports/185561 [1] Reported By: Alexander Yerenkow <yerenkow@gmail.com> [1] Tested with: pkg and pkg_install Reported by: many (false-positives) [2] This is a partial solution, we may still need a plist.ignore too. It doesn't make much sense to add files in main pkg-plist we don't care about, but maybe it does since you'll see and reconsider them being ignored someday. @comment is used as all the OPTION PLIST_SUB deactivations use @comment instead of something like @ignore.
2014-04-19 06:44:56 +00:00
WITHOUT+= EXAMPLES
OPTIONS_WARNINGS_UNSET+= EXAMPLES
.endif
.if defined(DEVELOPER)
PORT_OPTIONS+= TEST
.endif
PORT_OPTIONS+= IPV6
# Add per arch options
.for opt in ${OPTIONS_DEFINE_${ARCH}}
.if empty(OPTIONS_DEFINE:M${opt})
OPTIONS_DEFINE+= ${opt}
.endif
.endfor
# Add per arch defaults
OPTIONS_DEFAULT+= ${OPTIONS_DEFAULT_${ARCH}}
_ALL_EXCLUDE= ${OPTIONS_EXCLUDE_${ARCH}} ${OPTIONS_EXCLUDE} \
${OPTIONS_SLAVE} ${OPTIONS_EXCLUDE_${OPSYS}}
# Remove options the port maintainer doesn't want
.for opt in ${_ALL_EXCLUDE:O:u}
OPTIONS_DEFAULT:= ${OPTIONS_DEFAULT:N${opt}}
OPTIONS_DEFINE:= ${OPTIONS_DEFINE:N${opt}}
PORT_OPTIONS:= ${PORT_OPTIONS:N${opt}}
2013-06-10 09:19:38 +00:00
. for otype in SINGLE RADIO MULTI GROUP
. for m in ${OPTIONS_${otype}}
OPTIONS_${otype}_${m}:= ${OPTIONS_${otype}_${m}:N${opt}}
. endfor
. endfor
.endfor
# Remove empty SINGLE/GROUP/RADIO/MULTI
# Can be empty because of exclude/slaves
2013-06-10 09:19:38 +00:00
.for otype in SINGLE RADIO MULTI GROUP
. for m in ${OPTIONS_${otype}}
. if empty(OPTIONS_${otype}_${m})
OPTIONS_${otype}:= ${OPTIONS_${otype}:N${m}}
. endif
. endfor
.endfor
# Sort options
ALL_OPTIONS:= ${OPTIONS_DEFINE:O:u}
OPTIONS_DEFAULT:= ${OPTIONS_DEFAULT:O:u}
# complete list
COMPLETE_OPTIONS_LIST= ${ALL_OPTIONS}
2013-06-10 09:27:19 +00:00
.for otype in SINGLE RADIO MULTI GROUP
. for m in ${OPTIONS_${otype}}
COMPLETE_OPTIONS_LIST+= ${OPTIONS_${otype}_${m}}
. endfor
.endfor
## Now create the list of activated options
.if defined(OPTIONS_OVERRIDE)
# Special case $OPTIONS_OVERRIDE; if it is defined forget about anything done
# before
NEW_OPTIONS=
PORT_OPTIONS:= ${OPTIONS_OVERRIDE}
.else
NEW_OPTIONS= ${COMPLETE_OPTIONS_LIST}
## Set default options defined by the port maintainer
PORT_OPTIONS+= ${OPTIONS_DEFAULT}
## Set system-wide defined options (set by user in make.conf)
. for opt in ${OPTIONS_SET}
. if !empty(COMPLETE_OPTIONS_LIST:M${opt})
PORT_OPTIONS+= ${opt}
NEW_OPTIONS:= ${NEW_OPTIONS:N${opt}}
. endif
. endfor
## Remove the options excluded system-wide (set by user in make.conf)
. for opt in ${OPTIONS_UNSET}
PORT_OPTIONS:= ${PORT_OPTIONS:N${opt}}
NEW_OPTIONS:= ${NEW_OPTIONS:N${opt}}
. endfor
## Set the options specified per-port (set by user in make.conf)
. for opt in ${${OPTIONS_NAME}_SET}
. if !empty(COMPLETE_OPTIONS_LIST:M${opt})
PORT_OPTIONS+= ${opt}
NEW_OPTIONS:= ${NEW_OPTIONS:N${opt}}
. endif
. endfor
## Unset the options excluded per-port (set by user in make.conf)
. for opt in ${${OPTIONS_NAME}_UNSET}
PORT_OPTIONS:= ${PORT_OPTIONS:N${opt}}
NEW_OPTIONS:= ${NEW_OPTIONS:N${opt}}
. endfor
## options files (from dialog)
. if exists(${OPTIONS_FILE}) && !make(rmconfig)
. include "${OPTIONS_FILE}"
. endif
. sinclude "${OPTIONS_FILE}.local"
### convert WITH and WITHOUT found in make.conf or reloaded from old optionsfile
# XXX once WITH_DEBUG is not magic any more, do remove the :NDEBUG from here.
.for opt in ${ALL_OPTIONS:NDEBUG}
.if defined(WITH_${opt})
OPTIONS_WARNINGS+= "WITH_${opt}"
OPTIONS_WARNINGS_SET+= ${opt}
PORT_OPTIONS+= ${opt}
.endif
.if defined(WITHOUT_${opt})
OPTIONS_WARNINGS+= "WITHOUT_${opt}"
OPTIONS_WARNINGS_UNSET+= ${opt}
PORT_OPTIONS:= ${PORT_OPTIONS:N${opt}}
.endif
.endfor
_OPTIONS_UNIQUENAME= ${PKGNAMEPREFIX}${PORTNAME}
.for _k in SET UNSET SET_FORCE UNSET_FORCE
.if defined(${_OPTIONS_UNIQUENAME}_${_k})
WARNING+= "You are using ${_OPTIONS_UNIQUENAME}_${_k} which is not supported any more, use:"
WARNING+= "${OPTIONS_NAME}_${_k}= ${${_OPTIONS_UNIQUENAME}_${_k}}"
.endif
.endfor
.if defined(OPTIONS_WARNINGS)
WARNING+= "You are using the following deprecated options: ${OPTIONS_WARNINGS}"
WARNING+= "If you added them on the command line, you should replace them by"
WARNING+= "WITH=\"${OPTIONS_WARNINGS_SET}\" WITHOUT=\"${OPTIONS_WARNINGS_UNSET}\""
WARNING+= ""
WARNING+= "If they are global options set in your make.conf, you should replace them with:"
.if defined(OPTIONS_WARNINGS_SET)
WARNING+= "OPTIONS_SET=${OPTIONS_WARNINGS_SET}"
.endif
.if defined(OPTIONS_WARNINGS_UNSET)
WARNING+= "OPTIONS_UNSET=${OPTIONS_WARNINGS_UNSET}"
.endif
WARNING+= ""
WARNING+= "If they are local to this port, you should use:"
.if defined(OPTIONS_WARNINGS_SET)
WARNING+= "${OPTIONS_NAME}_SET=${OPTIONS_WARNINGS_SET}"
.endif
.if defined(OPTIONS_WARNINGS_UNSET)
WARNING+= "${OPTIONS_NAME}_UNSET=${OPTIONS_WARNINGS_UNSET}"
.endif
.endif
## Finish by using the options set by the port config dialog, if any
. for opt in ${OPTIONS_FILE_SET}
. if !empty(COMPLETE_OPTIONS_LIST:M${opt})
PORT_OPTIONS+= ${opt}
NEW_OPTIONS:= ${NEW_OPTIONS:N${opt}}
. endif
. endfor
.for opt in ${OPTIONS_FILE_UNSET}
PORT_OPTIONS:= ${PORT_OPTIONS:N${opt}}
NEW_OPTIONS:= ${NEW_OPTIONS:N${opt}}
.endfor
.endif
## FORCE
## Set system-wide defined options (set by user in make.conf)
. for opt in ${OPTIONS_SET_FORCE}
. if !empty(COMPLETE_OPTIONS_LIST:M${opt})
PORT_OPTIONS+= ${opt}
NEW_OPTIONS:= ${NEW_OPTIONS:N${opt}}
. endif
. endfor
## Remove the options excluded system-wide (set by user in make.conf)
. for opt in ${OPTIONS_UNSET_FORCE}
PORT_OPTIONS:= ${PORT_OPTIONS:N${opt}}
NEW_OPTIONS:= ${NEW_OPTIONS:N${opt}}
. endfor
## Set the options specified per-port (set by user in make.conf)
. for opt in ${${OPTIONS_NAME}_SET_FORCE}
. if !empty(COMPLETE_OPTIONS_LIST:M${opt})
PORT_OPTIONS+= ${opt}
NEW_OPTIONS:= ${NEW_OPTIONS:N${opt}}
. endif
. endfor
## Unset the options excluded per-port (set by user in make.conf)
. for opt in ${${OPTIONS_NAME}_UNSET_FORCE}
PORT_OPTIONS:= ${PORT_OPTIONS:N${opt}}
NEW_OPTIONS:= ${NEW_OPTIONS:N${opt}}
. endfor
## Cmdline always win over the rest
.for opt in ${WITH}
. if !empty(COMPLETE_OPTIONS_LIST:M${opt})
PORT_OPTIONS+= ${opt}
NEW_OPTIONS:= ${NEW_OPTIONS:N${opt}}
. endif
.endfor
.for opt in ${WITHOUT}
PORT_OPTIONS:= ${PORT_OPTIONS:N${opt}}
NEW_OPTIONS:= ${NEW_OPTIONS:N${opt}}
.endfor
## Enable options implied by other options
# _PREVENTS is handled in bsd.port.mk:pre-check-config
## 1) Build dependency chain in A.B format:
_DEPCHAIN=
.for opt in ${COMPLETE_OPTIONS_LIST}
. for o in ${${opt}_IMPLIES}
_DEPCHAIN+= ${opt}.$o
. endfor
.endfor
## 2) Check each dependency pair and if LHS is in PORT_OPTIONS then add RHS.
## All of RHS of "RHS.*" (i.e. indirect dependency) are also added for
## fast convergence.
_PORT_OPTIONS:= ${PORT_OPTIONS}
.for _count in _0 ${COMPLETE_OPTIONS_LIST}
count= ${_count}
### Check if all of the nested dependency are resolved already.
. if ${count} == _0 || ${_PORT_OPTIONS} != ${PORT_OPTIONS}
PORT_OPTIONS:= ${_PORT_OPTIONS}
. for dc in ${_DEPCHAIN}
. for opt in ${_PORT_OPTIONS}
_opt=${opt}
### Add all of direct and indirect dependency only if
### they are not in ${PORT_OPTIONS}.
. if !empty(_opt:M${dc:R})
. for d in ${dc:E} ${_DEPCHAIN:M${dc:E}.*:E}
. if empty(_PORT_OPTIONS:M$d)
_PORT_OPTIONS+= $d
. endif
. endfor
. endif
. endfor
. endfor
. endif
.endfor
# Finally, add options required by slave ports
PORT_OPTIONS+= ${OPTIONS_SLAVE}
# Sort options and eliminate duplicates
PORT_OPTIONS:= ${PORT_OPTIONS:O:u}
## Now some compatibility
.if empty(PORT_OPTIONS:MDOCS)
NOPORTDOCS= yes
.endif
.if empty(PORT_OPTIONS:MEXAMPLES)
NOPORTEXAMPLES= yes
.endif
2014-03-28 11:04:54 +00:00
.if ${PORT_OPTIONS:MDEBUG}
WITH_DEBUG= yes
.endif
.if defined(NO_OPTIONS_SORT)
ALL_OPTIONS= ${OPTIONS_DEFINE}
.endif
.for target in ${_OPTIONS_TARGETS:C/:.*//:u}
_OPTIONS_${target}?=
.endfor
.for opt in ${COMPLETE_OPTIONS_LIST} ${_ALL_EXCLUDE:O:u}
# PLIST_SUB
PLIST_SUB?=
SUB_LIST?=
. if defined(OPTIONS_SUB)
. if ! ${PLIST_SUB:M${opt}=*}
. if ${PORT_OPTIONS:M${opt}}
PLIST_SUB:= ${PLIST_SUB} ${opt}="" NO_${opt}="@comment "
. else
PLIST_SUB:= ${PLIST_SUB} ${opt}="@comment " NO_${opt}=""
. endif
. endif
. if ! ${SUB_LIST:M${opt}=*}
. if ${PORT_OPTIONS:M${opt}}
SUB_LIST:= ${SUB_LIST} ${opt}="" NO_${opt}="@comment "
. else
SUB_LIST:= ${SUB_LIST} ${opt}="@comment " NO_${opt}=""
. endif
. endif
. endif
. if ${PORT_OPTIONS:M${opt}}
. if defined(${opt}_USE)
. for option in ${${opt}_USE}
_u= ${option:C/=.*//g}
USE_${_u:tu}+= ${option:C/.*=//g:C/,/ /g}
. endfor
. endif
. if defined(${opt}_VARS)
. for var in ${${opt}_VARS:C/=.*//:O:u}
_u= ${var}
. if ${_u:M*+}
${_u:C/.$//:tu}+= ${${opt}_VARS:M${var}=*:C/[^+]*\+=//:C/^"(.*)"$$/\1/}
. else
${_u:tu}= ${${opt}_VARS:M${var}=*:C/[^=]*=//:C/^"(.*)"$$/\1/}
. endif
. endfor
. endif
. if defined(${opt}_CONFIGURE_ENABLE)
. for iopt in ${${opt}_CONFIGURE_ENABLE}
CONFIGURE_ARGS+= --enable-${iopt}
. endfor
. endif
. if defined(${opt}_CONFIGURE_WITH)
. for iopt in ${${opt}_CONFIGURE_WITH}
CONFIGURE_ARGS+= --with-${iopt}
. endfor
. endif
. for configure in CONFIGURE CMAKE QMAKE
. if defined(${opt}_${configure}_ON)
${configure}_ARGS+= ${${opt}_${configure}_ON}
. endif
. endfor
. for flags in ${_OPTIONS_FLAGS}
. if defined(${opt}_${flags})
${flags}+= ${${opt}_${flags}}
. endif
. endfor
. for deptype in ${_OPTIONS_DEPENDS}
. if defined(${opt}_${deptype}_DEPENDS)
${deptype}_DEPENDS+= ${${opt}_${deptype}_DEPENDS}
. endif
. endfor
. for target in ${_OPTIONS_TARGETS}
_target= ${target:C/:.*//}
_prio= ${target:C/.*:(.*):.*/\1/}
_type= ${target:C/.*://}
_OPTIONS_${_target}:= ${_OPTIONS_${_target}} ${_prio}:${_type}-${_target}-${opt}-on
. endfor
. else
. if defined(${opt}_USE_OFF)
. for option in ${${opt}_USE_OFF}
_u= ${option:C/=.*//g}
USE_${_u:tu}+= ${option:C/.*=//g:C/,/ /g}
. endfor
. endif
. if defined(${opt}_VARS_OFF)
. for var in ${${opt}_VARS_OFF:C/=.*//:O:u}
_u= ${var}
. if ${_u:M*+}
${_u:C/.$//:tu}+= ${${opt}_VARS_OFF:M${var}=*:C/[^+]*\+=//:C/^"(.*)"$$/\1/}
. else
${_u:tu}= ${${opt}_VARS_OFF:M${var}=*:C/[^=]*=//:C/^"(.*)"$$/\1/}
. endif
. endfor
. endif
. if defined(${opt}_CONFIGURE_ENABLE)
. for iopt in ${${opt}_CONFIGURE_ENABLE}
CONFIGURE_ARGS+= --disable-${iopt:C/=.*//}
. endfor
. endif
. if defined(${opt}_CONFIGURE_WITH)
. for iopt in ${${opt}_CONFIGURE_WITH}
CONFIGURE_ARGS+= --without-${iopt:C/=.*//}
. endfor
. endif
. for configure in CONFIGURE CMAKE QMAKE
. if defined(${opt}_${configure}_OFF)
${configure}_ARGS+= ${${opt}_${configure}_OFF}
. endif
. endfor
. for flags in ${_OPTIONS_FLAGS}
. if defined(${opt}_${flags}_OFF)
${flags}+= ${${opt}_${flags}_OFF}
. endif
. endfor
. for deptype in ${_OPTIONS_DEPENDS}
. if defined(${opt}_${deptype}_DEPENDS_OFF)
${deptype}_DEPENDS+= ${${opt}_${deptype}_DEPENDS_OFF}
. endif
. endfor
. for target in ${_OPTIONS_TARGETS}
_target= ${target:C/:.*//}
_prio= ${target:C/.*:(.*):.*/\1/}
_type= ${target:C/.*://}
_OPTIONS_${_target}:= ${_OPTIONS_${_target}} ${_prio}:${_type}-${_target}-${opt}-off
. endfor
. endif
.endfor
Mk/bsd.options.mk: Introduce SELECTED_OPTIONS, DESELECTED_OPTIONS Until now, the only way to obtain information on the valid port options and the current selection states is by using the pretty-print-config target. It would look something like this: > make -C /usr/ports/lang/gcc5-aux print-print-config Standard[ +FORT +OBJC +NLS -TESTSUITE -ALLSTAGES -STATIC ] \ Bootstrap[ -BOOTSTRAP ] To process the total options and the selection state of each option requires additional processing, e.g. with awk and/or sed. Moreover, if other information is needed about the port it question, it would require a second execution of "make" to reveal variable values. There simply is no other way to obtain the option selection information in a single pass (this limitation came when options framework was brought in). This enhancement allows the option selection information to revealed with make -V so that all port information can be acquired in a single pass. Moreover, they won't require piping through sed or awk. Two read-only variables are introduced: SELECTED_OPTIONS (list of all "on" options) DESELECTED_OPTIONS (liss of all "off" options) Here's an example of a single pass acquisition: > make -C /usr/dports/lang/gcc5-aux -V PKGNAME -V SELECTED_OPTIONS \ -V DESELECTED_OPTIONS gcc5-aux-20150716 NLS OBJC FORT BOOTSTRAP STATIC ALLSTAGES TESTSUITE Obviously the grouping information seen in pretty-print-config is lost, so these new variables will not help if option group information is required. Approved by: portmgr (bapt)
2015-12-14 22:44:39 +00:00
.undef (SELECTED_OPTIONS)
.undef (DESELECTED_OPTIONS)
.for opt in ${ALL_OPTIONS}
. if ${PORT_OPTIONS:M${opt}}
SELECTED_OPTIONS:= ${opt} ${SELECTED_OPTIONS}
. else
DESELECTED_OPTIONS:= ${opt} ${DESELECTED_OPTIONS}
. endif
.endfor
.for otype in MULTI GROUP SINGLE RADIO
. for m in ${OPTIONS_${otype}}
. for opt in ${OPTIONS_${otype}_${m}}
. if ${PORT_OPTIONS:M${opt}}
SELECTED_OPTIONS:= ${opt} ${SELECTED_OPTIONS}
. else
DESELECTED_OPTIONS:= ${opt} ${DESELECTED_OPTIONS}
. endif
. endfor
. endfor
.endfor
.endif