ac プログラムで、z シェルが提供する関数を使用して glob を実行するにはどうすればよいですか?
これまでの探索の README を作成しました。これは、オープン ソース ライブラリで使用するためのものです。
https://bitbucket.org/sentimental/zsh_source_experimentation/src/master/README
ここにコピーします:
始める
ソースを入手しましょう
apt-get source zsh
apt-get source zsh-dev
ldd を使用して、zsh がライブラリ ファイルを生成しないことを発見しました::
#ldd /bin/zsh4
linux-gate.so.1 => (0xb7775000)
libcap.so.2 => /lib/i386-linux-gnu/libcap.so.2 (0xb7751000)
libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0xb774c000)
libtinfo.so.5 => /lib/i386-linux-gnu/libtinfo.so.5 (0xb772c000)
libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xb7700000)
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb755b000)
ソースファイルを直接使用する必要があると思います。
拡張グロブリングへの参照を含むファイルを見つけてみましょう (シェルとして zsh を使用しています)::
grep -ir EXTENDEDGLOB . | egrep "\.(c|h):" | cut -d: -f1 | sort -u
./README
./zsh-4.3.17/Etc/ChangeLog-3.0
./zsh-4.3.17/Src/glob.c
./zsh-4.3.17/Src/Modules/zutil.c
./zsh-4.3.17/Src/options.c
./zsh-4.3.17/Src/pattern.c
./zsh-4.3.17/Src/utils.c
./zsh-4.3.17/Src/Zle/complist.c
./zsh-4.3.17/Src/Zle/zle_tricky.c
./zsh-4.3.17/Src/zsh.h
これらのファイルのいくつかを考えてみましょう
zsh.h
ここで、EXTENDEDGLOB は匿名列挙の一部として定義されています
出版物があります
ここ http://publications.gbdirect.co.uk/c_book/chapter6/enums.html
そしてここ http://bytes.com/topic/c/answers/63891-enum-within-function-standard
cでのenumの使用の詳細
その使用例は、おそらく関数のメソッド引数です.......
static int
bin_zregexparse(char *nam, char **args, Options ops, UNUSED(int func))
ファイルで見つかった
..................................
./zsh-4.3.17/Src/Modules/zutil.c
その関数を呼び出しているものを見てみましょう。うーん、呼び出しは 1 つだけです。その呼び出しへの唯一の参照は、そのファイルにあります。
grep -r bin_zregexparse . | egrep "\.(c|h):" | cut -d: -f1 | sort -u
./zsh-4.3.17/Src/Modules/zutil.c
うーん....この関数を呼び出すものがない場合、どのように機能しますか?
このコードを何らかの方法でセットアップまたはエイリアスする条件付き構成があるかどうか見てみましょう。
grep -i regex ./**/conf*
/zsh-4.3.17/config.h.in :/* Define to 1 if you have the `regexec' function. */
./zsh-4.3.17/config.h.in :#undef HAVE_REGEXEC
./zsh-4.3.17/config.h.in :/* Define to 1 if you have the `regexec' function. */
./zsh-4.3.17/config.h.in :#undef HAVE_REGEXEC
./zsh-4.3.17/configure : regcomp regexecc regerror regfree \
./zsh-4.3.17/configure : regcomp regexec regexecerror regfree \
./zsh-4.3.17/configure.ac : regcomp regexec regerrorror regfree \
これらのファイルを調べてみましょう。
config.h.in
存在しないようですが、おそらく生成されていますか?
中にブロックがありそう
configure
8148 for ac_func in strftime strptime mktime timelocal \
8149 difftime gettimeofday clock_gettime \
8150 select poll \
8151 readlink faccessx fchdir ftruncate \
etc etc etc ..
8178 htons ntohs \
8179 regcomp regexec regerror regfree \
8180 gdbm_open getxattr \
8181 realpath canonicalize_file_name \
8182 symlink getcwd
8183 do :
8184 as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
8185 ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
8186 if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
8187 cat >>confdefs.h <<_ACEOF
8188 #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
8189 _ACEOF
8190
8191 fi
8192 done
}}}
私はそれが何をしているのか分かりません。TODO: 調査してください!
の
./zsh-4.3.17/configure.ac
1167 dnl ---------------
1168 dnl CHECK FUNCTIONS
1169 dnl ---------------
1170 | rglobdata.gd_gf_noglobdot
1171 dnl need to integrate this function
1172 dnl AC_FUNC_STRFTIME
1173 | rglobdata.gd_gf_listtypes
1174 AC_CHECK_FUNCS(strftime strptime mktime timelocal \
1175 difftime gettimeofday clock_gettime \
1176 select poll \
etc etc etc
1205 regcomp regexec regerror regfree \
1206 gdbm_open getxattr \
1207 realpath canonicalize_file_name \
1208 symlink getcwd)
1209 AC_FUNC_STRCOLL
この段階では、これを行う方法がよくわかりません。おそらくその機能を単体テストしたいと考えていますが、どうすればよいでしょうか?