On Wed, Jun 26, 2013 at 07:30:55PM +0700, Alexey Dokuchaev wrote: > On Wed, Jun 26, 2013 at 07:12:41PM +0700, Alexey Dokuchaev wrote: > > I've cooked something up just now, take a look at the attached diff. I've > > only barely tested it, but it seems to work for a few of my hand-crafted > > configurations. It also handles known options groups (single/multi/etc.), > > tested on www/firefox. > > One known limitation of option groups right now is that you cannot have > per-arch or !arch stuff, only :on. It should not be hard to fix, but I > need to think how to avoid code duplication. I miss $(call ...) of GNU > make sometimes...
It just occurred to me that it seems we actually do not support something like OPTIONS_SINGLE_AUDIO_${ARCH}, which simplifies my work (please tell me if I'm wrong). So all I need is to remember about OPTIONS_EXCLUDE's in this case. Now it's possible (example for www/firefox/Makefile.options): OPTIONS_SINGLE_AUDIO= ALSA:on OSS!sparc64 PULSEAUDIO!powerpc,mips,i386 New diff attached (also comes with some comments tweaks, and I've switched from ^ to ~ as regex delimiter: it looks nicer and there is no confusion with start-of-line marker). I hope now it can cover anything possible to achieve with current OptionsNG. But we need reviewers and testers! ./danfe P.S. This was all developed on 8.3-STABLE, that is, with our traditional make(1). I will test new make(1) on 10-CURRENT tomorrow.
Index: bsd.options.mk =================================================================== --- bsd.options.mk (revision 321792) +++ bsd.options.mk (working copy) @@ -10,7 +10,7 @@ # specific to ${ARCH} # OPTIONS_DEFAULT - List of options activated by default # OPTIONS_DEFAULT_${ARCH} - List of options activated by default for a -# given arch +# given ${ARCH} # # ${OPTION}_DESC - Description of the ${OPTION} # @@ -94,14 +94,59 @@ PORT_OPTIONS+= IPV6 -# Add per arch options +### Parse new extended syntax OPTIONS knob (architecture-independent) +.for opt in ${OPTIONS:N*/*:N*!*} +OPTIONS_DEFINE+= ${opt:C~:.*~~} +OPTIONS_DEFAULT+= ${opt:M*\:on:S~:on~~} +.endfor + +# Process known option groups (only architecture exclusion supported) +.for otype in SINGLE RADIO MULTI GROUP +. for group in ${OPTIONS_${otype}} +# Here we need the temporary variables because of the := operator used few +# lines below +_exclude:= ${OPTIONS_${otype}_${group}:M*!*} +_default:= ${OPTIONS_${otype}_${group}:M*\:on*:C~:.*~~} +OPTIONS_DEFAULT+= ${_default} +OPTIONS_${otype}_${group}:= ${OPTIONS_${otype}_${group}:C~[:!].*~~} +. for opt in ${_exclude} +. for arch in ${opt:C~.*!~~:S~,~ ~g} +OPTIONS_EXCLUDE_${arch}+= ${opt:C~[:!].*~~} +. endfor +. endfor +. endfor +.endfor + +# Process architecture-specific options +.for opt in ${OPTIONS:M*/*} +. for arch in ${opt:C~.*/~~:S~,~ ~g} +. for defarch in OPTIONS_DEFINE_${arch:C~:.*~~} +${defarch}+= ${opt:C~/.*~~} +. endfor +. for defarch in OPTIONS_DEFAULT_${arch:M*\:on:S~:on~~} +${defarch}+= ${opt:C~/.*~~} +. endfor +. endfor +.endfor + +# Process options unsupported on some architectures +.for opt in ${OPTIONS:M*!*} +OPTIONS_DEFINE+= ${opt:C~[:!].*~~} +OPTIONS_DEFAULT+= ${opt:M*\:on!*:C~:.*~~} +. for arch in ${opt:C~.*!~~:S~,~ ~g} +OPTIONS_EXCLUDE_${arch}+= ${opt:C~[:!].*~~} +. endfor +.endfor +### + +# Add per-architecture options .for opt in ${OPTIONS_DEFINE_${ARCH}} .if empty(OPTIONS_DEFINE:M${opt}) OPTIONS_DEFINE+= ${opt} .endif .endfor -# Add per arch defaults +# Add per-architecture defaults OPTIONS_DEFAULT+= ${OPTIONS_DEFAULT_${ARCH}} # Remove options the port maintainer doesn't want @@ -130,7 +175,7 @@ ALL_OPTIONS:= ${OPTIONS_DEFINE:O:u} OPTIONS_DEFAULT:= ${OPTIONS_DEFAULT:O:u} -# complete list +# Complete list COMPLETE_OPTIONS_LIST= ${ALL_OPTIONS} .for otype in SINGLE RADIO MULTI GROUP . for m in ${OPTIONS_${otype}}
_______________________________________________ freebsd-ports@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-ports To unsubscribe, send any mail to "freebsd-ports-unsubscr...@freebsd.org"