# Manually written configuration script for yash
# (C) 2007-2012 magicant
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see .
makefile="Makefile"
makefilein="Makefile.in"
configlog="config.log"
configstatus="config.status"
configh="config.h"
tempsrc=".temp.c"
tempo=".temp.o"
tempd=".temp.d"
tempout="./.temp.out"
temptxt="./.temp.txt"
dirs=". builtins lineedit po tests"
target="yash"
version="2.30"
copyright="Copyright (C) 2007-2012 magicant"
# object files to be linked as `yash'
objs='$(MAIN_OBJS)'
# object files compiled into builtins.a
builtin_objs=''
null=""
help="false"
nocreate="false"
debug="false"
enable_alias="true"
enable_array="true"
enable_dirstack="true"
enable_nls="true"
enable_help="true"
enable_history="true"
enable_lineedit="true"
enable_printf="true"
enable_socket="true"
enable_test="true"
enable_ulimit="true"
default_loadpath='$(yashdatadir)'
ctags_args=""
etags_args=""
intl_lib='intl'
term_lib='tinfo curses ncurses ncursesw'
prefix='/usr/local'
exec_prefix='$(prefix)'
bindir='$(exec_prefix)/bin'
datarootdir='$(prefix)/share'
datadir='$(datarootdir)'
localedir='$(datarootdir)/locale'
install_program='$(INSTALL) -c'
install_data='$(INSTALL) -c -m 644'
install_dir='$(INSTALL) -d'
unset checkresult
unset MAKEFLAGS
umask u=rwx
quoted0="'"$(printf '%s\n' "$0" | sed -e "s/'/'\\\\''/g")"'"
quoted_args=
for i
do
if [ x"$i" != x"--no-create" ]
then
quoted_args="${quoted_args} '"$(printf '%s\n' "$i" |
sed -e "s/'/'\\\\''/g")"'"
fi
done
parseenable() {
case "$1" in
--enable-*=yes|--enable-*=true) val=true ;;
--enable-*=no|--enable-*=false) val=false ;;
*=*) echo "$0: $1: invalid option" >&2; exit 2 ;;
--enable-*) val=true ;;
--disable-*) val=false ;;
esac
opt="${1#--*able-}"
opt="${opt%%=*}"
case "$opt" in
alias) enable_alias=$val ;;
array) enable_array=$val ;;
dirstack) enable_dirstack=$val ;;
help) enable_help=$val ;;
history) enable_history=$val ;;
lineedit) enable_lineedit=$val ;;
nls) enable_nls=$val ;;
printf) enable_printf=$val ;;
socket) enable_socket=$val ;;
test) enable_test=$val ;;
ulimit) enable_ulimit=$val ;;
*) echo "$0: $1: invalid option" >&2; exit 2 ;;
esac
}
# parse options
for i
do
case "$i" in
-h|--help)
help="true" ;;
--no-create)
nocreate="true" ;;
-d|--debug)
debug="true" ;;
--prefix=*)
prefix="${i#--prefix=}" ;;
--exec-prefix=*)
exec_prefix="${i#--exec-prefix=}" ;;
--bindir=*)
bindir="${i#--bindir=}" ;;
--datarootdir=*)
datarootdir="${i#--datarootdir=}" ;;
--datadir=*)
datadir="${i#--datadir=}" ;;
--localedir=*)
localedir="${i#--localedir=}" ;;
--enable-*|--disable-*)
parseenable "$i" ;;
--default-loadpath=*)
default_loadpath="${i#--default-loadpath=}" ;;
--with-intl-lib=*)
intl_lib="${i#--with-intl-lib=}" ;;
--with-term-lib=*)
term_lib="${i#--with-term-lib=}" ;;
?*=*)
# parse variable assignment
if echo "$i" | grep -E "^[[:alpha:]][[:alnum:]]*=" >/dev/null
then
export "$i"
else
echo "$0: $i: unknown argument" >&2
exit 1
fi
;;
*)
echo "$0: $i: unknown argument" >&2
exit 1
esac
done
if ${help}
then
exec cat <"${configlog}"
{
printf '===== Configuration log: generated by %s\n' "${0##*/}"
echo
LC_TIME=C date
echo
printf '# Invocation command line was:\n%%'
for i in "$0" "$@"
do
printf ' %s' "$(printf '%s\n' "$i" |
sed -e '/[^[:alnum:]./=-]/ {
s/'"'"'/'"'\\''"'/g
s/\(.*\)/'"'"'\1'"'"'/
}')"
done
echo
echo
printf '# uname -i = %s\n' "$(uname -i 2>/dev/null || echo \?)"
printf '# uname -n = %s\n' "$(uname -n 2>/dev/null || echo \?)"
printf '# uname -m = %s\n' "$(uname -m 2>/dev/null || echo \?)"
printf '# uname -o = %s\n' "$(uname -o 2>/dev/null || echo \?)"
printf '# uname -p = %s\n' "$(uname -p 2>/dev/null || echo \?)"
printf '# uname -r = %s\n' "$(uname -r 2>/dev/null || echo \?)"
printf '# uname -s = %s\n' "$(uname -s 2>/dev/null || echo \?)"
printf '# uname -v = %s\n' "$(uname -v 2>/dev/null || echo \?)"
printf '# uname -a = %s\n' "$(uname -a 2>/dev/null || echo \?)"
echo
printf '# PATH=%s\n' "$PATH"
echo
} >&5
checking () {
printf 'checking %s... ' "$1"
printf '\nchecking %s...\n' "$1" >&5
}
checkby () {
printf '%% %s\n' "$*" >&5
"$@" >&5 2>&1
laststatus=$?
if [ ${laststatus} -eq 0 ]
then
checkresult="yes"
else
printf '# exit status: %d\n' "${laststatus}" >&5
checkresult="no"
return ${laststatus}
fi
}
trymake () {
checkby ${CC-${cc}} ${CFLAGS-${cflags}} ${CADDS-${null}} \
${CPPFLAGS-${cppflags}} ${CPPADDS-${null}} \
${LDFLAGS-${ldflags}} ${LDADDS-${null}} -o "${tempout}" "${tempsrc}" \
"$@" ${LDLIBS-${ldlibs}}
}
trycompile () {
checkby ${CC-${cc}} ${CFLAGS-${cflags}} ${CADDS-${null}} \
${CPPFLAGS-${cppflags}} ${CPPADDS-${null}} \
-c -o "${tempo}" "${tempsrc}" "$@"
}
trylink () {
checkby ${CC-${cc}} ${LDFLAGS-${ldflags}} ${LDADDS-${null}} \
-o "${tempout}" "${tempo}" "$@" ${LDLIBS-${ldlibs}}
}
tryexec () {
checkby "${tempout}"
}
checked () {
if [ $# -ge 1 ]
then
checkresult="$1"
fi
printf '%s\n' "${checkresult}"
printf '# result: %s\n' "${checkresult}" >&5
}
defconfigh () {
printf '# defining %s=%s in %s\n' "$1" "${2-1}" "${configh}" >&5
confighdefs="${confighdefs}
#define ${1} ${2-1}"
}
fail () {
echo "configuration failed" >&2
exit 1
}
cc="${CC-c99}"
cflags="${CFLAGS--O1 -g}"
cppflags="${CPPFLAGS-${null}}"
ldflags="${LDFLAGS-${null}}"
ldlibs="${LDLIBS-${null}}"
ar="${AR-ar}"
arflags="${ARFLAGS--rc}"
xgettext="${XGETTEXT-xgettext}"
xgettextflags="${XGETTEXTFLAGS--kgt -kNgt -kngt:1,2 \
--flag=sb_vprintf:1:c-format --flag=sb_printf:1:c-format \
--flag=malloc_vprintf:1:c-format --flag=malloc_printf:1:c-format \
--flag=xerror:1:c-format --flag=serror:1:c-format \
--flag=le_compdebug:1:c-format}"
msginit="${MSGINIT-msginit}"
msgfmt="${MSGFMT-msgfmt}"
msgfmtflags="${MSGFMTFLAGS--c}"
msgmerge="${MSGMERGE-msgmerge}"
msgmergeflags="${MSGMERGEFLAGS-${null}}"
msgconv="${MSGCONV-msgconv}"
msgfilter="${MSGFILTER-msgfilter}"
ctags="${CTAGS-ctags}"
etags="${ETAGS-etags}"
cscope="${CSCOPE-cscope}"
confighdefs=''
# check OS type
checking 'operating system'
ostype=$(uname -s | tr "[:upper:]" "[:lower:]")
checked "${ostype}"
case "${ostype}" in
darwin)
defconfigh "_DARWIN_C_SOURCE"
;;
sunos)
defconfigh "__EXTENSIONS__"
;;
esac
# check POSIX conformance
checking 'POSIX conformance'
posixver=$(getconf _POSIX_VERSION 2>/dev/null)
if [ -n "${posixver}" ] && [ x"${posixver}" != x"undefined" ]
then
checked "${posixver}"
else
checked "no"
posixver=""
fi
checking 'SUS conformance'
xopenver=$(getconf _XOPEN_VERSION 2>/dev/null)
if [ -n "${xopenver}" ] && [ x"${xopenver}" != x"undefined" ]
then
checked "${xopenver}"
else
checked "no"
xopenver=""
fi
case "${ostype}" in
freebsd)
# FreeBSD doesn't have a feature test macro to enable non-POSIX
# extensions. We don't define _POSIX_C_SOURCE or _XOPEN_SOURCE so that
# non-POSIX extensions are available.
posix=
xopen=
;;
*)
posix=${posixver}
xopen=${xopenver}
;;
esac
# check if gcc is available if the debug option is enabled
if ${debug}
then
checking 'whether GCC is available'
if
checkby eval "${CC-gcc -std=c99} --version | grep -i gcc"
then
checked "yes"
cc="${CC-gcc -std=c99}"
cflags="-pedantic -MMD -Wall -Wextra -O1 -fno-inline -ggdb"
else
checked "no"
echo "--debug option specified but GCC is not available" >&2
fail
fi
else
defconfigh "NDEBUG"
fi
# check if the compiler works
checking 'whether the compiler works'
cat >"${tempsrc}" <&2
fail
fi
# check if the compiler accepts the -O2 option if we are not debugging
if ! ${debug} && [ x"${CFLAGS+set}" != x"set" ]
then
checking 'whether the compiler accepts -O2 flag'
savecflags=${cflags}
cflags="-O2 -g"
cat >"${tempsrc}" <"${temptxt}" </dev/null
END
checkby eval "${MAKE-make} -f - _TEST_ <|"${tempsrc}"
checkby pax -w -x ustar -f "${tempout}" "${tempsrc}"
checked
if [ x"${checkresult}" = x"yes" ]
then
archiver='pax -w -x ustar -f'
else
archiver='tar cf'
fi
fi
# check if the install command is available
if [ x"${INSTALL+set}" != x"set" ]
then
checking 'for the install command'
>|"${tempsrc}"
checkby install -c -m 644 "${tempsrc}" "${tempout}"
checked
if [ x"${checkresult}" = x"yes" ]
then
install='install'
else
install='$(topdir)/install-sh'
fi
fi
# check if defining _POSIX_C_SOURCE and _XOPEN_SOURCE as values larger than
# _POSIX_VERSION and _XOPEN_VERSION is accepted.
if [ -n "${posix}" ]
then
checking 'what values _POSIX_C_SOURCE and _XOPEN_SOURCE should have'
if
cat >"${tempsrc}" <
int main(void) { fork(); return 0; }
END
trycompile
then
checked "_POSIX_C_SOURCE=200809L, _XOPEN_SOURCE=700"
posix=200809 xopen=700
elif
cat >"${tempsrc}" <
int main(void) { fork(); return 0; }
END
trycompile
then
checked "_POSIX_C_SOURCE=200112L, _XOPEN_SOURCE=600"
posix=200112 xopen=600
else
checked "failed"
fi
fi
if [ -n "${posix}" ]
then
defconfigh "_POSIX_C_SOURCE" "${posix}L"
fi
if [ -n "${xopen}" ]
then
defconfigh "_XOPEN_SOURCE" "${xopen}"
fi
# check if _XOPEN_SOURCE_EXTENDED is accepted
if [ -n "${posix}" ]
then
checking 'whether _XOPEN_SOURCE_EXTENDED should be defined'
cat >"${tempsrc}" <
int main(void) { fork(); return 0; }
END
trycompile
checked
if [ x"${checkresult}" = x"yes" ]
then
defconfigh "_XOPEN_SOURCE_EXTENDED" "1"
fi
fi
# check if we need -lm
if [ x"${LDLIBS+set}" != x"set" ]
then
checking 'if loader flag -lm can be omitted'
cat >"${tempsrc}" <
int main(int argc, char **argv) {
return fmod(argc, 1.1) == trunc(argc) || argv == 0;
}
END
trymake
checked
if [ x"${checkresult}" = x"no" ]
then
ldlibs="${ldlibs} -lm"
fi
fi
# enable/disable socket redirection
if ${enable_socket}
then
checking 'for socket library'
cat >"${tempsrc}" <
#include
int main(void) {
struct addrinfo ai = {
.ai_flags = 0, .ai_family = AF_UNSPEC, .ai_protocol = 0,
.ai_socktype = 1 ? SOCK_STREAM : SOCK_DGRAM,
.ai_addrlen = 0, .ai_addr = (void*)0, .ai_canonname = (void*)0,
.ai_next = (void*)0
};
gai_strerror(getaddrinfo("", "", &ai, (void*)0));
connect(socket(ai.ai_family, ai.ai_socktype, ai.ai_protocol),
ai.ai_addr, ai.ai_addrlen);
freeaddrinfo(&ai);
}
END
saveldlibs="${ldlibs}"
if
trymake
then
checked "yes"
else
for lib in '-lxnet' '-lsocket' '-lnsl' '-lsocket -lnsl'
do
ldlibs="${saveldlibs} ${lib}"
if trymake
then
checked "with ${lib}"
break
fi
done
fi
case "${checkresult}" in
yes|with*)
defconfigh "YASH_ENABLE_SOCKET"
unset saveldlibs
;;
no)
checked "no"
printf 'The socket library is unavailable!\n' >&2
printf 'Add the "--disable-socket" option and try again.\n' >&2
fail
;;
esac
fi
# check if gettext is available
if ${enable_nls}
then
checking 'for ngettext'
cat >"${tempsrc}" <
int main(void) { const char *s = ngettext("foo", "bar", 1); return s == 0; }
END
trycompile
checked
if [ x"${checkresult}" = x"yes" ]
then
defconfigh "HAVE_NGETTEXT"
fi
checking 'for gettext library'
cat >"${tempsrc}" <
int main(void) {
bindtextdomain("", "");
textdomain("");
const char *s = gettext("");
#if HAVE_NGETTEXT
s = ngettext("", "", 0);
#endif
return s == 0;
}
END
if
trycompile
then
saveldlibs="${ldlibs}"
if trylink
then
checked "yes"
else
for lib in ${intl_lib}
do
ldlibs="${saveldlibs} -l${lib}"
if trylink
then
checked "with -l${lib}"
break
fi
done
fi
fi
case "${checkresult}" in
yes|with*)
defconfigh "HAVE_GETTEXT"
unset saveldlibs
;;
no)
checked "no"
printf 'The gettext library is unavailable!\n' >&2
printf 'Add the "--disable-nls" option and try again.\n' >&2
fail
;;
esac
fi
# check if terminfo is available
if ${enable_lineedit}
then
for i in curses.h:CURSES_H ncurses.h:NCURSES_H \
ncurses/ncurses.h:NCURSES_NCURSES_H \
ncursesw/ncurses.h:NCURSESW_NCURSES_H
do
checking "for ${i%:*}"
cat >"${tempsrc}" <
int main(void) { return ERR; }
END
trycompile
checked
if [ x"${checkresult}" = x"yes" ]
then
defconfigh "HAVE_${i#*:}"
break
fi
done
for i in term.h:TERM_H ncurses/term.h:NCURSES_TERM_H \
ncursesw/term.h:NCURSESW_TERM_H
do
checking "for ${i%:*}"
cat >"${tempsrc}" <
#elif HAVE_NCURSES_H
#include
#elif HAVE_NCURSES_NCURSES_H
#include
#elif HAVE_NCURSESW_NCURSES_H
#include
#endif
#include <${i%:*}>
int main(void) {
int (*f1)(char *, int, int *) = setupterm; f1("", 0, 0);
int (*f2)(char *) = tigetflag; f2("");
int (*f3)(char *) = tigetnum; f3("");
char *(*f4)(char *) = tigetstr; f4("");
int (*f5)(const char *, int, int (*)(int)) = tputs; f5("", 0, 0);
/* char *(*f6)(char *, long,long,long,long,long,long,long,long,long) = tparm;
f6("", 0, 0, 0, 0, 0, 0, 0, 0, 0); */
int (*f7)(TERMINAL *) = del_curterm; f7(cur_term);
}
END
trycompile
checked
if [ x"${checkresult}" = x"yes" ]
then
defconfigh "HAVE_${i#*:}"
break
fi
done
checking 'for terminfo library'
cat >"${tempsrc}" <
#if HAVE_CURSES_H
#include
#elif HAVE_NCURSES_H
#include
#elif HAVE_NCURSES_NCURSES_H
#include
#elif HAVE_NCURSESW_NCURSES_H
#include
#endif
#if HAVE_TERM_H
#include
#elif HAVE_NCURSES_TERM_H
#include
#elif HAVE_NCURSESW_TERM_H
#include
#endif
int main(void) {
int i1 = setupterm((char*)0, 1, (int*)0);
int i2 = tigetflag("");
int i3 = tigetnum("");
char *s1 = tigetstr("");
char *s2 = tparm(s1, (long) i1, (long) i2, (long) i3, 0L, 0L, 0L, 0L, 0L, 0L);
int i4 = tputs(s2, 1, putchar);
del_curterm(cur_term);
return i4;
}
END
if
trycompile
then
saveldlibs="${ldlibs}"
if trylink
then
checked "yes"
else
for lib in ${term_lib}
do
ldlibs="${saveldlibs} -l${lib}"
if trylink
then
checked "with -l${lib}"
break
fi
done
fi
fi
case "${checkresult}" in
yes|with*)
defconfigh "YASH_ENABLE_LINEEDIT"
unset saveldlibs
;;
no)
checked "no"
printf 'The terminfo (curses) library is unavailable!\n' >&2
printf 'Add the "--disable-lineedit" option and try again.\n' >&2
fail
;;
esac
fi
# check whether system has /proc/self/exe or similar utility file
if
checking 'for /proc/self/exe'
checkby /proc/self/exe -c true
checked
[ x"${checkresult}" = x"yes" ]
then
defconfigh "HAVE_PROC_SELF_EXE"
elif
checking 'for /proc/curproc/file'
checkby /proc/curproc/file -c true
checked
[ x"${checkresult}" = x"yes" ]
then
defconfigh "HAVE_PROC_CURPROC_FILE"
elif
checking 'for /proc/$$/object/a.out'
checkby eval '/proc/$$/object/a.out -c true'
checked
[ x"${checkresult}" = x"yes" ]
then
defconfigh "HAVE_PROC_OBJECT_AOUT"
fi
# check for strnlen
checking 'for strnlen'
cat >"${tempsrc}" <
#ifndef strnlen
size_t strnlen(const char*, size_t);
#endif
int main(void) { return strnlen("12345", 3) != 3; }
END
trymake && tryexec
checked
if [ x"${checkresult}" = x"yes" ]
then
defconfigh "HAVE_STRNLEN"
fi
# check for wcsnlen
checking 'for wcsnlen'
cat >"${tempsrc}" <
#ifndef wcsnlen
size_t wcsnlen(const wchar_t*, size_t);
#endif
int main(void) { return wcsnlen(L"12345", 3) != 3; }
END
trymake && tryexec
checked
if [ x"${checkresult}" = x"yes" ]
then
defconfigh "HAVE_WCSNLEN"
fi
# check for wcscasecmp
checking 'for wcscasecmp'
cat >"${tempsrc}" <
#ifndef wcscasecmp
int wcscasecmp(const wchar_t*, const wchar_t*);
#endif
int main(void) { return wcscasecmp(L"1a2b3c", L"1A2B3C") != 0; }
END
trymake && tryexec
checked
if [ x"${checkresult}" = x"yes" ]
then
defconfigh "HAVE_WCSCASECMP"
fi
# check for wcsnrtombs
checking 'for wcsnrtombs'
cat >"${tempsrc}" <
#include
#include
#ifndef wcsnrtombs
size_t wcsnrtombs(char *restrict, const wchar_t **restrict, size_t, size_t,
mbstate_t *restrict);
#endif
int main(void) {
mbstate_t s;
char out[10];
const wchar_t w[] = L"abcde";
const wchar_t *in = w;
memset(&s, 0, sizeof s);
return wcsnrtombs(out, &in, SIZE_MAX, sizeof out, &s) != 5 ||
in != NULL ||
strcmp(out, "abcde") != 0 ||
wcsnrtombs(out, (in = &w[1], &in), 3, sizeof out, &s) != 3 ||
in != &w[4] ||
strncmp(out, "bcd", 3) != 0;
}
END
trymake && tryexec
checked
if [ x"${checkresult}" = x"yes" ]
then
defconfigh "HAVE_WCSNRTOMBS"
fi
# check for wcstold
checking 'for wcstold'
cat >"${tempsrc}" <
#ifndef wcstold
long double wcstold(const wchar_t *restrict, wchar_t **restrict);
#endif
int main(void) { return wcstold(L"10.0", (wchar_t **) 0) != 10.0; }
END
trymake && tryexec
checked
if [ x"${checkresult}" = x"yes" ]
then
defconfigh "HAVE_WCSTOLD"
fi
# check for wcwidth
checking 'for wcwidth'
cat >"${tempsrc}" <
#ifndef wcwidth
int wcwidth(wchar_t);
#endif
int main(void) { return wcwidth(L'\0'); }
END
trymake && tryexec
checked
if [ x"${checkresult}" = x"yes" ]
then
defconfigh "HAVE_WCWIDTH"
fi
# check if sys/stat.h defines S_ISVTX
checking 'if defines S_ISVTX'
cat >"${tempsrc}" <
int main(void) { return S_ISVTX & 0; }
END
trymake
checked
if [ x"${checkresult}" = x"yes" ]
then
defconfigh "HAVE_S_ISVTX"
fi
# check if the "st_atim"/"st_atimespec"/"st_atimensec"/"__st_atimensec" member
# of the "stat" structure is available
if ${enable_test}
then
if
checking 'for st_atim'
cat >"${tempsrc}" <
int main(void) {
struct stat st;
st.st_atim = (struct timespec) { .tv_sec = 0, .tv_nsec = 0 };
struct timespec ts = st.st_atim;
return ts.tv_nsec != 0;
}
END
trymake
checked
[ x"${checkresult}" = x"yes" ]
then
defconfigh "HAVE_ST_ATIM"
elif
checking 'for st_atimespec'
cat >"${tempsrc}" <
int main(void) {
struct stat st;
st.st_atimespec = (struct timespec) { .tv_sec = 0, .tv_nsec = 0 };
struct timespec ts = st.st_atimespec;
return ts.tv_nsec != 0;
}
END
trymake
checked
[ x"${checkresult}" = x"yes" ]
then
defconfigh "HAVE_ST_ATIMESPEC"
elif
checking 'for st_atimensec'
cat >"${tempsrc}" <
int main(void) {
struct stat st;
st.st_atimensec = 0;
return st.st_atimensec != 0;
}
END
trymake
checked
[ x"${checkresult}" = x"yes" ]
then
defconfigh "HAVE_ST_ATIMENSEC"
elif
checking 'for __st_atimensec'
cat >"${tempsrc}" <
int main(void) {
struct stat st;
st.__st_atimensec = 0;
return st.__st_atimensec != 0;
}
END
trymake
checked
[ x"${checkresult}" = x"yes" ]
then
defconfigh "HAVE___ST_ATIMENSEC"
fi
fi
# check if the "st_mtim"/"st_mtimespec"/"st_mtimensec"/"__st_mtimensec" member
# of the "stat" structure is available
if
checking 'for st_mtim'
cat >"${tempsrc}" <
int main(void) {
struct stat st;
st.st_mtim = (struct timespec) { .tv_sec = 0, .tv_nsec = 0 };
struct timespec ts = st.st_mtim;
return ts.tv_nsec != 0;
}
END
trymake
checked
[ x"${checkresult}" = x"yes" ]
then
defconfigh "HAVE_ST_MTIM"
elif
checking 'for st_mtimespec'
cat >"${tempsrc}" <
int main(void) {
struct stat st;
st.st_mtimespec = (struct timespec) { .tv_sec = 0, .tv_nsec = 0 };
struct timespec ts = st.st_mtimespec;
return ts.tv_nsec != 0;
}
END
trymake
checked
[ x"${checkresult}" = x"yes" ]
then
defconfigh "HAVE_ST_MTIMESPEC"
elif
checking 'for st_mtimensec'
cat >"${tempsrc}" <
int main(void) {
struct stat st;
st.st_mtimensec = 0;
return st.st_mtimensec != 0;
}
END
trymake
checked
[ x"${checkresult}" = x"yes" ]
then
defconfigh "HAVE_ST_MTIMENSEC"
elif
checking 'for __st_mtimensec'
cat >"${tempsrc}" <
int main(void) {
struct stat st;
st.__st_mtimensec = 0;
return st.__st_mtimensec != 0;
}
END
trymake
checked
[ x"${checkresult}" = x"yes" ]
then
defconfigh "HAVE___ST_MTIMENSEC"
fi
# check if WCONTINUED and WIFCONTINUED are available
checking 'for WCONTINUED and WIFCONTINUED'
cat >"${tempsrc}" <
#include
static int s;
int main(void) {
if (WIFCONTINUED(s)) { }
return waitpid(-1, &s, WNOHANG|WCONTINUED) < 0 && errno == EINVAL;
}
END
trymake && tryexec
checked
if [ x"${checkresult}" = x"yes" ]
then
defconfigh "HAVE_WCONTINUED"
fi
# check for faccessat/eaccess
if
checking 'for faccessat'
cat >"${tempsrc}" <
#include
#ifndef faccessat
extern int faccessat(int, const char *, int, int);
#endif
int main(void) {
faccessat(AT_FDCWD, ".", F_OK | R_OK | W_OK | X_OK, AT_EACCESS);
}
END
trymake
checked
[ x"${checkresult}" = x"yes" ]
then
defconfigh "HAVE_FACCESSAT"
elif
checking 'for eaccess'
cat >"${tempsrc}" <
#ifndef eaccess
extern int eaccess(const char *, int);
#endif
int main(void) { eaccess(".", F_OK | R_OK | W_OK | X_OK); }
END
trymake
checked
[ x"${checkresult}" = x"yes" ]
then
defconfigh "HAVE_EACCESS"
fi
# check for strsignal
checking 'for strsingal'
cat >"${tempsrc}" <
#include
#ifndef strsignal
char *strsignal(int);
#endif
int main(void) { (void) strsignal(SIGKILL); }
END
trymake
checked
if [ x"${checkresult}" = x"yes" ]
then
defconfigh "HAVE_STRSIGNAL"
fi
# check for setpwent & getpwent & endpwent
checking 'for setpwent/getpwent/endpwent'
cat >"${tempsrc}" <
#ifndef setpwent
void setpwent(void);
#endif
#ifndef getpwent
struct passwd *getpwent(void);
#endif
#ifndef endpwent
void endpwent(void);
#endif
struct passwd *p;
int main(void) { setpwent(); p = getpwent(); endpwent(); }
END
trymake
checked
if [ x"${checkresult}" = x"yes" ]
then
defconfigh "HAVE_GETPWENT"
# check for pw_gecos
checking 'for pw_gecos'
cat >"${tempsrc}" <
const char *s;
struct passwd pwd;
int main(void) { pwd.pw_gecos = ""; s = pwd.pw_gecos; }
END
trycompile
checked
if [ x"${checkresult}" = x"yes" ]
then
defconfigh "HAVE_PW_GECOS"
fi
fi
# check for setgrent & getgrent & endgrent
checking 'for setgrent/getgrent/endgrent'
cat >"${tempsrc}" <
/* don't declare setgrent to avoid conflict on BSD */
#ifndef getgrent
struct group *getgrent(void);
#endif
#ifndef endgrent
void endgrent(void);
#endif
struct group *g;
int main(void) { setgrent(); g = getgrent(); endgrent(); }
END
trymake
checked
if [ x"${checkresult}" = x"yes" ]
then
defconfigh "HAVE_GETGRENT"
fi
# check for sethostent & gethostent & endhostent
# This check may fail if socket redirection is disabled
# because the -lxnet compiler option is not specified.
checking 'for sethostent/gethostent/endhostent'
cat >"${tempsrc}" <
/* don't declare sethostent and endhostent to avoid conflict on SunOS */
#ifndef gethostent
struct hostent *gethostent(void);
#endif
struct hostent *h;
int main(void) { sethostent(1); h = gethostent(); endhostent(); }
END
trymake
checked
if [ x"${checkresult}" = x"yes" ]
then
defconfigh "HAVE_GETHOSTENT"
fi
# check for paths.h
checking 'for paths.h'
cat >"${tempsrc}" <
#include
int main(void) { printf("%s\n", _PATH_BSHELL); }
END
trycompile
checked
if [ x"${checkresult}" = x"yes" ]
then
defconfigh "HAVE_PATHS_H"
fi
# check if getcwd accepts (NULL,0) as argument
checking "if getcwd(NULL,0) returns malloc'ed string"
cat >"${tempsrc}" <
#include
#include
#include
char *xgetcwd(void) {
size_t pwdlen = 80;
char *pwd = malloc(pwdlen);
if (!pwd) return NULL;
while (getcwd(pwd, pwdlen) == NULL) {
if (errno == ERANGE) {
pwdlen *= 2;
pwd = realloc(pwd, pwdlen);
if (!pwd) return NULL;
} else {
free(pwd);
return NULL;
}
}
return pwd;
}
int main(void) {
char *wd1 = getcwd(NULL, 0);
if (!wd1) return 1;
char *wd2 = xgetcwd();
if (!wd2 || strcmp(wd1, wd2) != 0) return 1;
char *wd11 = realloc(wd1, strlen(wd1) + 10);
if (!wd11 || strcmp(wd11, wd2) != 0) return 1;
free(wd11); free(wd2); return 0;
}
END
trymake && tryexec
checked
if [ x"${checkresult}" = x"yes" ]
then
defconfigh "GETCWD_AUTO_MALLOC"
fi
# check if ioctl supports TIOCGWINSZ
if ${enable_lineedit}
then
checking 'if ioctl supports TIOCGWINSZ'
cat >"${tempsrc}" <
int main(void) {
struct winsize ws;
ioctl(0, TIOCGWINSZ, &ws);
(void) ws.ws_row, (void) ws.ws_col;
}
END
trymake
checked
if [ x"${checkresult}" = x"yes" ]
then
defconfigh "HAVE_TIOCGWINSZ"
fi
fi
# check if wide-oriented I/O is working
checking 'if wide-oriented I/O is fully working'
cat >"${tempsrc}" <
#include
#define LEN 12345
int main(void)
{
FILE *f;
fpos_t pos;
f = fopen("${tempsrc}", "w+");
if (f == NULL) return 1;
if (fwprintf(f, L"123\n") != 4) return 2;
if (fseek(f, 0, SEEK_SET) != 0) return 3;
if (fgetwc(f) != L'1') return 4;
if (fgetwc(f) != L'2') return 5;
if (fgetpos(f, &pos) != 0) return 6;
if (fseek(f, 0, SEEK_SET) != 0) return 7;
if (fgetwc(f) != L'1') return 8;
if (fsetpos(f, &pos) != 0) return 9;
if (fgetwc(f) != L'3') return 10;
if (fseek(f, 0, SEEK_SET) != 0) return 11;
for (size_t i = 0; i < LEN; i++)
if (fputwc(L'0', f) != L'0') return 12;
if (fgetpos(f, &pos) != 0) return 13;
if (fputwc(L'1', f) != L'1') return 14;
if (fseek(f, 0, SEEK_SET) != 0) return 15;
if (fgetwc(f) != L'0') return 16;
if (fsetpos(f, &pos) != 0) return 17;
if (fgetwc(f) != L'1') return 18;
if (fseek(f, 0, SEEK_SET) != 0) return 19;
for (size_t i = 0; i < LEN; i++)
if (fgetwc(f) != L'0') return 20;
if (fgetwc(f) != L'1') return 21;
if (fclose(f) != 0) return 22;
return 0;
}
END
trymake && tryexec
checked
if [ x"${checkresult}" = x"no" ]
then
defconfigh "WIO_BROKEN"
fi
# check if fgetws is working
checking 'if fgetws is fully working'
cat >"${tempsrc}" <
#include
int main(void)
{
wchar_t buf[100];
FILE *f = fopen("${tempsrc}", "w+");
if (f == NULL) return 1;
if (fwprintf(f, L"123\n") != 4) return 2;
if (fseek(f, 0, SEEK_SET) != 0) return 3;
if (fgetws(buf, 2, f) == NULL) return 4;
if (wcscmp(buf, L"1") != 0) return 5;
if (fclose(f) != 0) return 6;
return 0;
}
END
trymake && tryexec
checked
if [ x"${checkresult}" = x"no" ]
then
defconfigh "FGETWS_BROKEN"
fi
echo >&5
# enable/disable aliases
if ${enable_alias}
then
defconfigh "YASH_ENABLE_ALIAS"
objs="$objs "'$(ALIAS_OBJS)'
fi
# enable/disable the array builtin
if ${enable_array}
then
defconfigh "YASH_ENABLE_ARRAY"
fi
# enable/disable the directory stack
if ${enable_dirstack}
then
defconfigh "YASH_ENABLE_DIRSTACK"
fi
# enable/disable the help builtin
if ${enable_help}
then
defconfigh "YASH_ENABLE_HELP"
fi
# enable/disable history
if ${enable_history}
then
defconfigh "YASH_ENABLE_HISTORY"
objs="$objs "'$(HISTORY_OBJS)'
else
if ${enable_lineedit}
then
printf 'History is required for lineedit but disabled.\n' >&2
printf 'Add the "--disable-lineedit" option and try again.\n' >&2
fail
fi
fi
# enable/disable the echo/printf builtins
if ${enable_printf}
then
defconfigh "YASH_ENABLE_PRINTF"
builtin_objs="$builtin_objs "'$(PRINTF_OBJS)'
fi
# enable/disable the test builtin
if ${enable_test}
then
defconfigh "YASH_ENABLE_TEST"
builtin_objs="$builtin_objs "'$(TEST_OBJS)'
fi
# check for getrlimit and setrlimit
if ${enable_ulimit}
then
checking "for getrlimit and setrlimit"
cat >"${tempsrc}" < /* required before on freebsd */
#include
int main(void) {
struct rlimit l = { .rlim_cur = RLIM_INFINITY, .rlim_max = RLIM_INFINITY };
getrlimit(RLIMIT_FSIZE, &l);
setrlimit(RLIMIT_FSIZE, &l);
}
END
trymake
checked
if [ x"${checkresult}" = x"yes" ]
then
defconfigh "YASH_ENABLE_ULIMIT"
builtin_objs="$builtin_objs "'$(ULIMIT_OBJS)'
else
printf 'The getrlimit and setrlimit functions are unavailable.\n' >&2
printf 'Add the "--disable-ulimit" option and try again.\n' >&2
fail
fi
# check for RLIM_SAVED_CUR & RLIM_SAVED_MAX
for i in CUR MAX
do
checking "for RLIM_SAVED_${i}"
cat >"${tempsrc}" < /* required before on freebsd */
#include
int main(void) {
struct rlimit l = { .rlim_cur = RLIM_SAVED_${i}, .rlim_max = RLIM_SAVED_${i} };
return l.rlim_cur == l.rlim_max;
}
END
trymake
checked
if [ x"${checkresult}" = x"yes" ]
then
defconfigh "HAVE_RLIM_SAVED_${i}"
fi
done
# check for RLIMIT_***
for i in LOCKS MEMLOCK MSGQUEUE NICE NPROC RSS RTPRIO SIGPENDING
do
checking "for RLIMIT_${i}"
cat >"${tempsrc}" < /* required before on freebsd */
#include
int main(void) { return RLIMIT_${i} == RLIMIT_AS; getrlimit(RLIMIT_${i}, 0); }
END
trymake && tryexec
checked
if [ x"${checkresult}" = x"yes" ]
then
defconfigh "HAVE_RLIMIT_${i}"
fi
done
fi
# check if ctags/etags accepts the --recurse option
if [ x"${CTAGSARGS+set}" != x"set" ]
then
checking "if ctags accepts --recurse option"
checkby ${ctags} --recurse -f /dev/null /dev/null
checked
if [ x"${checkresult}" = x"yes" ]
then
CTAGSARGS='--recurse'
else
CTAGSARGS='*.[ch]'
fi
fi
if [ x"${ETAGSARGS+set}" != x"set" ]
then
checking "if etags accepts --recurse option"
checkby ${etags} --recurse -o /dev/null /dev/null >/dev/null 2>&1
checked
if [ x"${checkresult}" = x"yes" ]
then
ETAGSARGS='--recurse'
else
ETAGSARGS='*.[ch]'
fi
fi
# set cscope invocation parameter
: ${CSCOPEARGS=-bR}
if [ -n "${builtin_objs}" ]
then
objs="${objs} "'$(BUILTINS_ARCHIVE)'
fi
if ${enable_lineedit}
then
objs="${objs} "'$(LINEEDIT_ARCHIVE)'
fi
if [ x"${LINGUAS+set}" = x"set" ]
then
CATALOGS=''
for i in ${LINGUAS}
do
CATALOGS="${CATALOGS} ${i}.mo"
done
else
CATALOGS='$(MOFILES)'
fi
MAKE_INCLUDE="${MAKE_INCLUDE-${make_include}}"
MAKE_SHELL="${MAKE_SHELL-${make_shell}}"
CC="${CC-${cc}}"
CFLAGS="${CFLAGS-${cflags}}${CADDS:+ ${CADDS}}"
CPPFLAGS="${CPPFLAGS-${cppflags}}${CPPADDS:+ ${CPPADDS}}"
LDFLAGS="${LDFLAGS-${ldflags}}${LDADDS:+ ${LDADDS}}"
LDLIBS="${LDLIBS-${ldlibs}}"
AR="${AR-${ar}}"
ARFLAGS="${ARFLAGS-${arflags}}"
ARCHIVER="${ARCHIVER-${archiver}}"
XGETTEXT="${XGETTEXT-${xgettext}}"
XGETTEXTFLAGS="${XGETTEXTFLAGS-${xgettextflags}}"
MSGINIT="${MSGINIT-${msginit}}"
MSGFMT="${MSGFMT-${msgfmt}}"
MSGFMTFLAGS="${MSGFMTFLAGS-${msgfmtflags}}"
MSGMERGE="${MSGMERGE-${msgmerge}}"
MSGMERGEFLAGS="${MSGMERGEFLAGS-${msgmergeflags}}"
MSGCONV="${MSGCONV-${msgconv}}"
MSGFILTER="${MSGFILTER-${msgfilter}}"
CTAGS="${CTAGS-${ctags}}"
ETAGS="${ETAGS-${etags}}"
CSCOPE="${CSCOPE-${cscope}}"
DIRS="${dirs}"
OBJS="${objs}"
BUILTIN_OBJS="${builtin_objs}"
TARGET="${target}"
VERSION="${version}"
COPYRIGHT="${copyright}"
INSTALL="${INSTALL-${install}}"
INSTALL_PROGRAM="${INSTALL_PROGRAM-${install_program}}"
INSTALL_DATA="${INSTALL_DATA-${install_data}}"
INSTALL_DIR="${INSTALL_DIR-${install_dir}}"
case "${prefix}" in
/ ) prefix= ;;
//) prefix=/ ;;
esac
case "${exec_prefix}" in
/ ) exec_prefix= ;;
//) exec_prefix=/ ;;
esac
case "${bindir}" in
/ ) bindir= ;;
//) bindir=/ ;;
esac
case "${datarootdir}" in
/ ) datarootdir= ;;
//) datarootdir=/ ;;
esac
case "${datadir}" in
/ ) datadir= ;;
//) datadir=/ ;;
esac
case "${localedir}" in
/ ) localedir= ;;
//) localedir=/ ;;
esac
sed_subst_cmd="
s!@MAKE_INCLUDE@!${MAKE_INCLUDE}!g
s!@MAKE_SHELL@!${MAKE_SHELL}!g
s!@CC@!${CC}!g
s!@CFLAGS@!${CFLAGS}!g
s!@CPPFLAGS@!${CPPFLAGS}!g
s!@LDFLAGS@!${LDFLAGS}!g
s!@LDLIBS@!${LDLIBS}!g
s!@AR@!${AR}!g
s!@ARFLAGS@!${ARFLAGS}!g
s!@ARCHIVER@!${ARCHIVER}!g
s!@XGETTEXT@!${XGETTEXT}!g
s!@XGETTEXTFLAGS@!${XGETTEXTFLAGS}!g
s!@MSGINIT@!${MSGINIT}!g
s!@MSGFMT@!${MSGFMT}!g
s!@MSGFMTFLAGS@!${MSGFMTFLAGS}!g
s!@MSGMERGE@!${MSGMERGE}!g
s!@MSGMERGEFLAGS@!${MSGMERGEFLAGS}!g
s!@MSGCONV@!${MSGCONV}!g
s!@MSGFILTER@!${MSGFILTER}!g
s!@CATALOGS@!${CATALOGS}!g
s!@CTAGS@!${CTAGS}!g
s!@CTAGSARGS@!${CTAGSARGS}!g
s!@ETAGS@!${ETAGS}!g
s!@ETAGSARGS@!${ETAGSARGS}!g
s!@CSCOPE@!${CSCOPE}!g
s!@CSCOPEARGS@!${CSCOPEARGS}!g
s!@DIRS@!${DIRS}!g
s!@OBJS@!${OBJS}!g
s!@BUILTIN_OBJS@!${BUILTIN_OBJS}!g
s!@TARGET@!${TARGET}!g
s!@VERSION@!${VERSION}!g
s!@COPYRIGHT@!${COPYRIGHT}!g
s!@INSTALL@!${INSTALL}!g
s!@INSTALL_PROGRAM@!${INSTALL_PROGRAM}!g
s!@INSTALL_DATA@!${INSTALL_DATA}!g
s!@INSTALL_DIR@!${INSTALL_DIR}!g
s!@prefix@!${prefix}!g
s!@exec_prefix@!${exec_prefix}!g
s!@bindir@!${bindir}!g
s!@datarootdir@!${datarootdir}!g
s!@datadir@!${datadir}!g
s!@localedir@!${localedir}!g
s!@default_loadpath@!${default_loadpath}!g
s!@enable_nls@!${enable_nls}!g
"
printf '\n\n===== Output variables =====\n%s\n' "${sed_subst_cmd}" >&5
# create dependency files if there are none
makedep() {
for i in ${1}*.c
do
if [ -f "${i}" ] && [ ! -f "${i%.c}.d" ]
then
printf 'touching %s\n' "${i%.c}.d"
>>"${i%.c}.d"
printf 'Touched %s\n' "${i%.c}.d" >&5
fi
done
for i in ${1}*/
do
if [ -d "${i}" ]
then
makedep "${i}"
fi
done
}
makedep ''
# create config.status
printf 'creating %s... ' "${configstatus}"
cat >"${configstatus}" <&2
exit 1 ;;
*)
break ;;
esac
shift
done
if \$help
then
exec cat <'${configh}' <"\${target}"
if ! ${make_supports_include} &&
ls "\${dir}"/*.d >/dev/null 2>&1
then
printf '(including dependencies) '
cat "\${dir}"/*.d >>"\${target}"
fi
;;
esac
printf 'done\n'
done
CONFIG_STATUS_END
chmod a+x "${configstatus}"
printf 'done\n'
printf 'Created %s\n' "${configstatus}" >&5
if ! ${nocreate}
then
printf '%% %s\n' "${CONFIG_SHELL-sh} ${configstatus}" >&5
${CONFIG_SHELL-sh} ${configstatus}
fi
# print warning if POSIX conformance is missing
if [ -z "${posixver}" ] || [ "${posixver}" -lt 200112 ]
then
echo "WARNING: yash is designed for systems that conform to POSIX.1-2001"
echo " but your system does not"
fi
# vim: set ft=sh ts=8 sts=4 sw=4 noet tw=80: