Передача опции configure в rpmbuild?

Согласно POSIX, диапазоны выражений в квадратных скобках указываются только на основе кодовой точки в локали C/POSIX. В других регионах это не указано и часто зависит от порядка сортировки, как вы узнали. Вы обнаружите, что в некоторых локалях, в зависимости от инструмента, [g-j], например, включает i, но также и ı, ǵ, иногда даже Iили даже ch, как в некоторых чешских локалях.

zsh— один из тех редких, чьи диапазоны [x-y]основаны на кодовой точке независимо от локали. Для однобайтовых наборов символов -это будет основано на значении байта, для многобайтовых -байтовых — на кодовой точке Unicode или на том, что система использует для представления широких символов внутри с mbstowc()и ко. API (обычно Unicode ).

Так в zsh,

  • [[ $char = [$'\u452'-$'\u490'] ]]
  • [[ $char = [^ђ-Ґ] ]]
  • y=${x//[^ђ-Ґ]/}

будет работать в вашем случае для сопоставления символов в этом диапазоне Unicode при условии, что кодировка локали является многобайтовой -и имеет эти два символа. Существуют однобайтовые наборы символов -, которые содержат некоторые из этих символов (, например ISO8859 -5, в котором большинство из них находятся в U+0401..U+045F ), но в локалях, которые их используют, диапазоны [ђ-Ґ]будут основываться на кодовой точке байтового значения (в соответствующем наборе символов, а не на кодовой точке Unicode ).

В локали C диапазоны основаны на кодовой точке, но набор символов в локали C гарантированно включает только символы из переносимого набора символов , который представляет собой лишь несколько символов, необходимых для написания POSIX. или код C (, ни один из которых не написан кириллицей ). Также гарантируется одиночный -байт , поэтому он не может включать все символы, указанные в Unicode. На практике чаще всего это ASCII.

На практике вы не можете установить LC_COLLATEна C, не установив также LC_CTYPEна C (или, по крайней мере, локаль с одной -байтовой кодировкой ). Однако многие системы имеют локаль C.UTF-8, которую вы можете использовать здесь.

UTF -8 — это один из тех наборов символов, которые могут представлять все символы Unicode, а значит, и все символы любой кодировки. Так что вы могли бы сделать:

< file iconv -t utf-8 |
  LC_ALL=C.UTF-8 sh -c 'sed "$(printf "s/[^\321\222-\322\220]//g")"' |
  iconv -f utf-8

Первое iconvпреобразование из кодировки локали пользователя в UTF -8, \321\222и \322\220представляет собой кодировку UTF -8 U+0452 и U+0490 соответственно, второе iconvпреобразование обратно в кодировку локали.

Если текущая локаль уже использует UTF -8, так как кодировка (и fileзаписываются с использованием этой кодировки ), это можно упростить до:

<file LC_ALL=C.UTF-8 sed 's/[^ђ-Ґ]//g'

или:

<file LC_ALL=C.UTF-8 sed "$(printf "s/[^\321\222-\322\220]//g")"

С помощью GNU sedи при условии, что $POSIXLY_CORRECTне находится в среде, вы можете указывать символы на основе значения байтов их кодировки.

<file LC_ALL=C.UTF-8 sed 's/[^\321\222-\322\220]//g'

Хотя в старых версиях вам может понадобиться:

<file LC_ALL=C.UTF-8 sed 's/[^\o321\o222-\o322\o220]//g'

Или шестнадцатеричный вариант:

<file LC_ALL=C.UTF-8 sed 's/[^\xd1\x92-\xd2\x90]//g'

Другой вариант,для локалей, использующих многобайтовый набор символов -, который включает эти символы в системах, где широкоформатное представление символов основано на Unicode, следует использовать GNU awkи:

awk 'BEGIN{for (i = 0x452; i<=0x490; i++) range = range sprintf("%c", i)}
     {gsub("[^" range "]", ""); print}'

(Первоначально я считал, что POSIX требует, чтобы реализации awk вели себя как GNU awk, но это не так, поскольку POSIX оставляет поведение sprintf("%c", i)неопределенным для значений i, которые не соответствуют кодировке .(не кодовая точка )символа в локали. Это означает, что его нельзя использовать переносимо для многобайтовых -символов ).

В любом случае обратите внимание, что диапазон U+0400.. U+052F — не единственные символы Unicode в кириллице , не говоря уже о языках, использующих кириллицу в качестве письма. Список символов также зависит от версии Unicode.

В системе, подобной Debian -, вы можете получить их список с помощью:

unicode --max 0 cyrillic

(, что дает 435 различных на Ubuntu 16.04, 444 на Debian sid (, вероятно, использующих другую версию Unicode ).

В perlсм. \p{Block: Cyrillic}, \p{Block: Cyrillic_Ext_A,B,C}, \p{Block: Cyrillic_Supplement}... для сопоставления блоков Unicode и \p{Cyrillic}для сопоставления символов кириллицы (, назначенных в настоящее время в версии Unicode, которая ваша версия perlиспользует (см. perl -MUnicode::UCD -le 'print Unicode::UCD::UnicodeVersion', например )).

Так:

perl -Mopen=locale 's/\P{Cyrillic}//g'
0
20.12.2019, 13:46
2 ответа

Что вы можете сделать, так это создать файл SPEC и заставить rpmbuildего использовать. В этом файле вы можете включить различные параметры в процесс сборки. Вы можете проверить здесь , например, использование файла SPEC

  1. In a shell prompt, go into the buildroot and create a new spec file for your package.
  2. Open the spec file in a text editor. The spec file should be similar to the following example:
%build
%configure
make %{?_smp_mflags} 

....

  1. Edit the BuildRequires tag with requirements that are needed to build the package. BuildRequires can contain either a list of required packages or files. For example, the eject package requires the gettext and libtool packages.....
1
28.01.2020, 02:59

Я понял, чем действительно хочу заниматься, а именно

rpmbuild --define "_with_pmix --with-pmix=/path/to/pmxi" -ta slurm-19.05.5.tar.bz2
1
13.02.2020, 11:44

Теги

Похожие вопросы