Tuesday, May 18, 2010

FreeBSD: список i386-only портов

В гугле не нашел.

# find /usr/ports -type d -depth 2 | while read d; do 
cd $d; if make -V ONLY_FOR_ARCHS | grep i386 | grep -vq amd64; then
echo $d; fi; done


З.Ы. Выполняется оочень долго

3 comments:

  1. И неправильно, потому что ещё могут быть порты "i386 ia64" :-)
    Например, audio/xmradio. Кроме того, ничего не найдет, если /usr/ports это симлинк.
    Быстро и правильно так:
    find -H /usr/ports -type f -name 'Makefile' | xargs grep -l 'ONLY_FOR_ARCHS=[[:space:]]*i386[[:space:]]*$'

    ReplyDelete
  2. > Быстро и правильно так:
    Быстро, но вряд ли правильно.
    # cd /usr/ports/x11/nvidia-driver-173
    # grep ONLY_FOR_ARCHS Makefile
    # make
    ===> nvidia-driver-173.14.25 is only for i386, while you are running amd64.
    *** Error code 1

    ReplyDelete
  3. # find -H /usr/ports -type f -name Makefile | xargs fgrep -l MASTERDIR | wc -l
    1175
    Таких портов, получается, на порядок меньше, чем общее количество. Можно сильно сэкономить, добавочно к первой команде позапускав make -V только для них :-)
    # find -H /usr/ports -type f -name Makefile | xargs fgrep -l MASTERDIR | xargs -n 1 -I ^ sh -c 'make -C `dirname ^` -V .CURDIR -V ONLY_FOR_ARCHS' | fgrep -B 1 -x i386 | egrep -v '^(i386|--)$'
    Оказывается, есть ещё и порты ONLY_FOR_ARCHS="i386 powerpc" :-)
    Например, audio/festalon и включающие его.

    ReplyDelete