make syntax

Программирование на sh, быть может немного про альтернативные языки
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Гость
проходил мимо

make syntax

Непрочитанное сообщение Гость » 2009-01-28 12:17:35

Есть ли какой-нибудь способ объединить pattern matching от флагов N/M? Сейчас у мя в /etc/make.conf что-то типа:

Код: Выделить всё

.if ${.CURDIR:N/usr/src/*} && ${.CURDIR:N/usr/obj/*}
WITHOUT_NLS=yes
#NOPORTDOCS=yes
DISTDIR?=/d/dist
PYTHON_DEFAULT_VERSION=python2.6
WITH_BDB_VER=47
WITH_GECKO=xulrunner
.MAKEFLAGS+=JAVA_HOME=/usr/local/jdk1.6.0
.if ${.CURDIR:M/usr/ports/*}
WRKDIRPREFIX?=/var/tmp/ports
.endif

#CFLAGS+=-ggdb
#WITH_DEBUG=yes

# exceptions for parallel ports' build
.if ${.CURDIR:N*/emacs-devel} && ${.CURDIR:N*/cross-binutils} \
        && ${.CURDIR:N*/libgpg-error} && ${.CURDIR:N*/perl5.8} \
        && ${.CURDIR:N*/libthai} && ${.CURDIR:N*/libiconv} \
        && ${.CURDIR:N*/m17n-lib} && ${.CURDIR:N*/qemu-devel} \
        && ${.CURDIR:N*/nasm} && ${.CURDIR:N*/tightvnc} \
        && ${.CURDIR:N*/db47} && ${.CURDIR:N*/subversion*} \
        && ${.CURDIR:N*/ghostscript8} && ${.CURDIR:N*/pth} \
        && ${.CURDIR:N*/cdrtools*} && ${.CURDIR:N*/w3m*} \
        && ${.CURDIR:N*/xmp} && ${.CURDIR:N*/libslang2} \
        && ${.CURDIR:N*/ezm3} && ${.CURDIR:N*/dcget} \
        && ${.CURDIR:N*/libxml2} && ${.CURDIR:N*/vim} \
        && ${.CURDIR:N*/gperf} && ${.CURDIR:N*/ffcall} \
        && ${.CURDIR:N*/ORBit2} && ${.CURDIR:N*/py-gtk2} \
        && ${.CURDIR:N*/xkeyboard-config} && ${.CURDIR:N*/ruby18} \
        && ${.CURDIR:N*/clisp} && ${.CURDIR:N*/jdk16} \
        && ${.CURDIR:N*/p7zip}
JOBS!= let `sysctl -n hw.ncpu` + 1
MAKE_FLAGS= -j${JOBS} -f
.endif

.if ${.CURDIR:N*/xmp}
CFLAGS+= -combine
.endif

# don't over-optimize kernel modules, they can easily send you to heaven
.if ${.CURDIR:M*/nvidia-driver*} || ${.CURDIR:M*/kqemu-kmod*} \
	|| ${.CURDIR:M*/devcpu*} || ${.CURDIR:M*/drm/bsd-core} \
	|| ${.CURDIR:M*/fusefs-kmod*}
CC=/usr/bin/cc
MAKE_FLAGS=WITH_CTF=yes -f
DEBUG_FLAGS?= -ggdb
.else

## exceptions for gcc44
# add to /etc/csh.cshrc `set path = ( /usr/local/libexec/ccache /usr/local/libexec/mygcc $path )'
# and populate mygcc with symlinks from gcc44 and cross-binutils
# note: some ports don't care about CC and CXX variables and sometimes even CFLAGS
.if ${.CURDIR:M*/nmap} || ${.CURDIR:M*/boost*} || ${.CURDIR:M*/wesnoth*}
CXX=/usr/bin/c++
CFLAGS+= -msse3
.elif ${.CURDIR:M*/xulrunner} || ${.CURDIR:M*/firefox3}
CC=/usr/bin/cc
CXX=/usr/bin/c++
CFLAGS+= -msse3
.elif ${.CURDIR:M*/sdl12} # crashes on SDL_BlitCopy with gcc44
CC=/usr/bin/cc
CFLAGS+= -msse3
.else
CFLAGS+= -msse4.1
.endif

CFLAGS+=	-frename-registers -fweb -ftree-vectorize \
		-freorder-blocks-and-partition \
		-fgcse-sm -fgcse-las -fgcse-after-reload \
		-fmerge-all-constants
.endif

# for -msse4.1
.if ${.CURDIR:M*/cross-binutils}
TGTARCH=amd64
TGTABI=freebsd
.endif

.if ${.CURDIR:M*/sqlite3}
TCL_V=8.5
.endif

.endif
и, честно говоря, мне надоело видеть мусор вида ${.CURDIR:N*/foo} && ${.CURDIR:N*/bar} && ${.CURDIR:N*/boo} && ${.CURDIR:N*/blah}. Есть ли какой-нибудь способ от них избавиться в пользу regexp'ов вида ${.CURDIR:N.*/foo|bar|baz|boo|blah} ?

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35411
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: make syntax

Непрочитанное сообщение Alex Keda » 2009-02-10 1:10:41

вы чего-то сложного хотите, на мой взгляд....
Убей их всех! Бог потом рассортирует...

Аватара пользователя
f_andrey
майор
Сообщения: 2651
Зарегистрирован: 2007-12-26 1:22:58
Откуда: СПб
Контактная информация:

Re: make syntax

Непрочитанное сообщение f_andrey » 2009-02-10 9:40:44

lissyara писал(а):вы чего-то сложного хотите, на мой взгляд....
Так развеж это плохо :)

Топикстартеру, не знаю точно но в книжке про make регекспы пару раз упоминаются, если вдруг подойдет то вот посмотрите, блин гдеб найти такую книжку но для админов а не программистов :Search:
Если ваша тема перенесена, то смотри http://forum.lissyara.su/viewtopic.php?f=1&t=32308

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: make syntax

Непрочитанное сообщение zg » 2009-02-10 9:50:58

Гость писал(а):Есть ли какой-нибудь способ объединить pattern matching от флагов N/M?
ман говорит, что можно объяединять модификаторы

Код: Выделить всё

     Variable expansion may be modified to select or modify each word of the
     variable (where a ``word'' is whitespace-delimited sequence of charac-
     ters).  The general format of a variable expansion is as follows:

           {variable[:modifier[:...]]}

     Each modifier begins with a colon and one of the following special char-
     acters.  The colon may be escaped with a backslash (`\').
....
     Mpattern    Select only those words that match the rest of the modifier.
                 The standard shell wildcard characters (`*', `?', and `[]')
                 may be used.  The wildcard characters may be escaped with a
                 backslash (`\').

     Npattern    This is identical to M, but selects all words which do not
                 match the rest of the modifier.
чего именно вы хотите добиться?

Аватара пользователя
hizel
дядя поня
Сообщения: 9032
Зарегистрирован: 2007-06-29 10:05:02
Откуда: Выборг

Re: make syntax

Непрочитанное сообщение hizel » 2009-02-10 9:53:57

а конструкшен

Код: Выделить всё

.for
  .if
не подойдет?
В дурацкие игры он не играет. Он просто жуткий, чу-чу, паровозик, и зовут его Блейн. Блейн --- это Боль.

Гость
проходил мимо

Re: make syntax

Непрочитанное сообщение Гость » 2009-02-11 7:29:05

zg писал(а):ман говорит, что можно объяединять модификаторы
спасибо, но строка тогда получиться длиной с километр. Как перенести на другую строчку я не догадался.

Код: Выделить всё

.if ${.CURDIR:N*/emacs-devel:N*/cross-binutils:N*/libgpg-error:N*/perl5.8:N*/libthai:N*/libiconv:N*/m17n-lib:N*/qemu-devel:N*/nasm:N*/tightvnc:N*/db47:N*/subversion*:N*/ghostscript8:N*/pth:N*/cdrtools*:N*/w3m*:N*/xmp:N*/libslang2:N*/ezm3:N*/dcget:N*/libxml2:N*/vim:N*/gperf:N*/ffcall:N*/ORBit2:N*/py-gtk2:N*/xkeyboard-config:N*/ruby18:N*/clisp:N*/jdk16:N*/p7zip:N*/zsh}
а таких портов можно быть очень много
hizel писал(а):а конструкшен

Код: Выделить всё

.for
  .if
не подойдет?
может и подойти ;)

Код: Выделить всё

# exceptions for parallel ports' build
.for port in \
	emacs-devel cross-binutils libgpg-error perl5.8 libthai \
	libiconv m17n-lib qemu-devel nasm tightvnc db47 subversion* \
	ghostscript8 pth cdrtools* w3m* xmp libslang2 ezm3 dcget libxml2 \
	vim gperf ffcall ORBit2 py-gtk2 xkeyboard-config ruby18 clisp \
	jdk16 p7zip zsh

. if ${.CURDIR:M*/${port}}
    SKIP=yes # define temporary global
. endif
.endfor

.ifndef SKIP
. ifndef JOBS # allow overriding from cmdline
    JOBS!= let `sysctl -n hw.ncpu` + 1
. endif # JOBS

  MAKE_FLAGS= -j${JOBS} -f
.endif # SKIP
.undef SKIP # destroy temporary global
внутрь .if'а, сразу после skipflag'а, хорошо бы добавить аналог break'а, чтобы выйти из цикла при первом совпадении. Но похоже такого оператора нет в make(1). Мне любопытно как отсутствие break повлияет на быстродействие, если список в .for возрастет до полутысячи.

ps, не знал, что между точкой и именем оператора можно ставить пробелы

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: make syntax

Непрочитанное сообщение zg » 2009-02-11 13:38:58

Гость писал(а):но строка тогда получиться длиной с километр
а чего нужно добиться?

Гость
проходил мимо

Re: make syntax

Непрочитанное сообщение Гость » 2009-02-11 22:10:29

zg писал(а):
Гость писал(а):но строка тогда получиться длиной с километр
а чего нужно добиться?
большого списка исключений портов
- кои не умеют компилиться в несколько потоков
- кои не дружат с gcc44 (cc, c++, cpp) и binutils 2.18 (as)
- коим не нравится моя оптимизация CFLAGS
- кои собираются с нестандартными опциями, коих нет в OPTIONS
в удобном для чтения и редактирования формате с управление из make.conf

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: make syntax

Непрочитанное сообщение zg » 2009-02-12 11:52:58

Гость писал(а):в удобном для чтения и редактирования формате с управление из make.conf
надо для каждого порта прописывать свой .if и не париться :smile:

Аватара пользователя
hizel
дядя поня
Сообщения: 9032
Зарегистрирован: 2007-06-29 10:05:02
Откуда: Выборг

Re: make syntax

Непрочитанное сообщение hizel » 2009-02-13 11:37:57

посмотрел в портах, примерно также делают

Код: Выделить всё

.for suffix in -ldap2 -mysql -postgresql -sa-exim -sqlite
.if !defined(PKGNAMESUFFIX) || ${PKGNAMESUFFIX} != ${suffix}
CONFLICTS+=     ${PKGNAMEPREFIX}${PORTNAME}${suffix}-4.*
.endif
.endfor
В дурацкие игры он не играет. Он просто жуткий, чу-чу, паровозик, и зовут его Блейн. Блейн --- это Боль.