mk: fix FreeBSD build

The sed syntax of '0,/regexp/' is GNU specific and fails with
non GNU sed in FreeBSD.

To solve the issue we can use awk instead to remove duplicates.

The awk script basically keeps the last config value, while
maintaining order and comments from original config file.

Fixes: b2063f104db7 ("mk: filter duplicate configuration entries")

Signed-off-by: Sergio Gonzalez Monroy <sergio.gonzalez.monroy@intel.com>
Acked-by: Christian Ehrhardt <christian.ehrhardt@canonical.com>
This commit is contained in:
Sergio Gonzalez Monroy 2016-07-19 14:40:37 +01:00 committed by Thomas Monjalon
parent 2f6414f4ba
commit 658cf5bc54

View File

@ -88,11 +88,13 @@ $(RTE_OUTPUT)/.config: $(RTE_CONFIG_TEMPLATE) FORCE | $(RTE_OUTPUT)
$(CPP) -undef -P -x assembler-with-cpp \
-ffreestanding \
-o $(RTE_OUTPUT)/.config_tmp $(RTE_CONFIG_TEMPLATE) ; \
for config in $$(grep -v "^#" $(RTE_OUTPUT)/.config_tmp | cut -d"=" -f1 | sort | uniq -d); do \
while [ $$(grep "^$${config}=" $(RTE_OUTPUT)/.config_tmp -c ) -gt 1 ]; do \
sed -i "0,/^$${config}=/{//d}" $(RTE_OUTPUT)/.config_tmp; \
done; \
done; \
config=$$(cat $(RTE_OUTPUT)/.config_tmp) ; \
echo "$$config" | awk -F '=' 'BEGIN {i=1} \
/^#/ {pos[i++]=$$0} \
!/^#/ {if (!s[$$1]) {pos[i]=$$0; s[$$1]=i++} \
else {pos[s[$$1]]=$$0}} END \
{for (j=1; j<i; j++) print pos[j]}' \
> $(RTE_OUTPUT)/.config_tmp ; \
if ! cmp -s $(RTE_OUTPUT)/.config_tmp $(RTE_OUTPUT)/.config; then \
cp $(RTE_OUTPUT)/.config_tmp $(RTE_OUTPUT)/.config ; \
cp $(RTE_OUTPUT)/.config_tmp $(RTE_OUTPUT)/.config.orig ; \