зеркало из https://github.com/github/ruby.git
* configure.in (RUBY_APPEND_OPTION, RUBY_APPEND_OPTIONS),
(RUBY_PREPEND_OPTION, RUBY_PREPEND_OPTIONS): add option(s) without duplication. * configure.in (RUBY_DEFINE_IF): changed parameter order, now condition comes first. * configure.in (universal_binary): checks architecture macros, and improved thin load paths. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@22119 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
Родитель
e3cc17a3ac
Коммит
6dd9865ff2
12
ChangeLog
12
ChangeLog
|
@ -1,3 +1,15 @@
|
||||||
|
Sun Feb 8 13:09:32 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||||
|
|
||||||
|
* configure.in (RUBY_APPEND_OPTION, RUBY_APPEND_OPTIONS),
|
||||||
|
(RUBY_PREPEND_OPTION, RUBY_PREPEND_OPTIONS): add option(s)
|
||||||
|
without duplication.
|
||||||
|
|
||||||
|
* configure.in (RUBY_DEFINE_IF): changed parameter order, now
|
||||||
|
condition comes first.
|
||||||
|
|
||||||
|
* configure.in (universal_binary): checks architecture macros, and
|
||||||
|
improved thin load paths.
|
||||||
|
|
||||||
Sun Feb 8 09:41:47 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
Sun Feb 8 09:41:47 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||||
|
|
||||||
* runruby.rb: gets extout and arch from rbconfig.rb.
|
* runruby.rb: gets extout and arch from rbconfig.rb.
|
||||||
|
|
149
configure.in
149
configure.in
|
@ -105,6 +105,27 @@ AC_CANONICAL_TARGET
|
||||||
target_os=`echo $target_os | sed 's/linux-gnu$/linux/;s/linux-gnu/linux-/'`
|
target_os=`echo $target_os | sed 's/linux-gnu$/linux/;s/linux-gnu/linux-/'`
|
||||||
ac_install_sh='' # unusable for extension libraries.
|
ac_install_sh='' # unusable for extension libraries.
|
||||||
|
|
||||||
|
AC_DEFUN([RUBY_APPEND_OPTION],
|
||||||
|
[# RUBY_APPEND_OPTION($1, $2)
|
||||||
|
{ case "( [$]{$1-} " dnl )
|
||||||
|
in '('*' $2 '*);; '( ') $1="$2";; '('*) $1="[$]$1 $2";; esac; }])
|
||||||
|
AC_DEFUN([RUBY_APPEND_OPTIONS],
|
||||||
|
[# RUBY_APPEND_OPTIONS($1, $2)
|
||||||
|
{ for rb_opt in $2; do
|
||||||
|
case "( [$]{$1-} " dnl )
|
||||||
|
in '('*" [$]{rb_opt} "*);; '( ') $1="[$]{rb_opt}";; '('*) $1="[$]$1 [$]{rb_opt}";; esac; done; }])
|
||||||
|
AC_DEFUN([RUBY_PREPEND_OPTION],
|
||||||
|
[# RUBY_PREPEND_OPTION($1, $2)
|
||||||
|
{ case "( [$]{$1-} " dnl )
|
||||||
|
in '('*' $2 '*);; '( ') $1="$2";; '('*) $1="$2 [$]$1";; esac; }])
|
||||||
|
AC_DEFUN([RUBY_PREPEND_OPTIONS],
|
||||||
|
[# RUBY_PREPEND_OPTIONS($1, $2)
|
||||||
|
{ unset rb_opts; for rb_opt in $2; do
|
||||||
|
case "( [$]{rb_opts} [$]{$1-} " dnl )
|
||||||
|
in '('*" [$]{rb_opt} "*);; '( ') $1="[$]{rb_opt}";; '('*) rb_opts="[$]{rb_opts}[$]{rb_opt} ";; esac
|
||||||
|
done
|
||||||
|
$1="[$]{rb_opts}[$]$1"; }])
|
||||||
|
|
||||||
AC_ARG_WITH(arch, [dnl
|
AC_ARG_WITH(arch, [dnl
|
||||||
--with-arch=ARCHS build an Apple/NeXT Multi Architecture Binary (MAB);
|
--with-arch=ARCHS build an Apple/NeXT Multi Architecture Binary (MAB);
|
||||||
ARCHS is a comma-delimited list of architectures for
|
ARCHS is a comma-delimited list of architectures for
|
||||||
|
@ -114,7 +135,7 @@ AC_ARG_WITH(arch, [dnl
|
||||||
[target_archs="$withval"], [unset target_archs])
|
[target_archs="$withval"], [unset target_archs])
|
||||||
test ${CFLAGS+set} && CFLAGS=`echo "$CFLAGS" | sed 's/ *-arch *[^ ]*//g'`
|
test ${CFLAGS+set} && CFLAGS=`echo "$CFLAGS" | sed 's/ *-arch *[^ ]*//g'`
|
||||||
test ${LDFLAGS+set} && LDFLAGS=`echo "$LDFLAGS" | sed 's/ *-arch *[^ ]*//g'`
|
test ${LDFLAGS+set} && LDFLAGS=`echo "$LDFLAGS" | sed 's/ *-arch *[^ ]*//g'`
|
||||||
unset ARCH_FLAG universal_binary
|
unset ARCH_FLAG universal_binary universal_archnames
|
||||||
if test ${target_archs+set}; then
|
if test ${target_archs+set}; then
|
||||||
AC_MSG_CHECKING([target architectures])
|
AC_MSG_CHECKING([target architectures])
|
||||||
target_archs=`echo $target_archs | tr , ' '`
|
target_archs=`echo $target_archs | tr , ' '`
|
||||||
|
@ -127,7 +148,13 @@ if test ${target_archs+set}; then
|
||||||
;;
|
;;
|
||||||
dnl (
|
dnl (
|
||||||
*)
|
*)
|
||||||
universal_binary="${universal_binary+$universal_binary,}$archs"
|
cpu=`$SHELL "$srcdir/config.sub" "${archs}-${target_os}" 2>&1` || {
|
||||||
|
AC_MSG_RESULT([failed])
|
||||||
|
AC_MSG_ERROR([$cpu])
|
||||||
|
}
|
||||||
|
cpu=`echo $cpu | sed 's/-.*-.*//'`
|
||||||
|
universal_binary="${universal_binary+$universal_binary,}$cpu"
|
||||||
|
universal_archnames="${universal_archnames} ${archs}=${cpu}"
|
||||||
ARCH_FLAG="${ARCH_FLAG+$ARCH_FLAG }-arch $archs"
|
ARCH_FLAG="${ARCH_FLAG+$ARCH_FLAG }-arch $archs"
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
@ -136,6 +163,7 @@ if test ${target_archs+set}; then
|
||||||
unset universal_binary
|
unset universal_binary
|
||||||
case "$target_archs" in dnl (
|
case "$target_archs" in dnl (
|
||||||
*,*) universal_binary=yes;;
|
*,*) universal_binary=yes;;
|
||||||
|
*) unset universal_archnames;;
|
||||||
esac
|
esac
|
||||||
AC_MSG_RESULT([$target_archs])
|
AC_MSG_RESULT([$target_archs])
|
||||||
|
|
||||||
|
@ -146,7 +174,7 @@ if test ${target_archs+set}; then
|
||||||
target_cpu=universal
|
target_cpu=universal
|
||||||
fi
|
fi
|
||||||
CFLAGS="$CFLAGS ${ARCH_FLAG}"
|
CFLAGS="$CFLAGS ${ARCH_FLAG}"
|
||||||
LDFLAGS="${LDFLAGS+$LDFLAGS } ${ARCH_FLAG}"
|
LDFLAGS="${LDFLAGS+$LDFLAGS }${ARCH_FLAG}"
|
||||||
else
|
else
|
||||||
target_archs="$target_cpu"
|
target_archs="$target_cpu"
|
||||||
fi
|
fi
|
||||||
|
@ -418,13 +446,13 @@ if test "$rb_cv_va_args_macro" = yes; then
|
||||||
fi
|
fi
|
||||||
|
|
||||||
AC_DEFUN([RUBY_DEFINE_IF], [dnl
|
AC_DEFUN([RUBY_DEFINE_IF], [dnl
|
||||||
m4_ifval([$3],[test "$3" && cat <<EOH >> confdefs.h
|
m4_ifval([$1],[test "$1" && cat <<EOH >> confdefs.h
|
||||||
@%:@if $3
|
@%:@if $1
|
||||||
EOH
|
EOH
|
||||||
])dnl
|
])dnl
|
||||||
AC_DEFINE_UNQUOTED($1, $2)
|
AC_DEFINE_UNQUOTED($2, $3)
|
||||||
m4_ifval([$3],[test "$3" && cat <<EOH >> confdefs.h
|
m4_ifval([$1],[test "$1" && cat <<EOH >> confdefs.h
|
||||||
@%:@endif /* $3 */
|
@%:@endif /* $1 */
|
||||||
EOH
|
EOH
|
||||||
])dnl
|
])dnl
|
||||||
])dnl
|
])dnl
|
||||||
|
@ -465,7 +493,7 @@ else
|
||||||
fi
|
fi
|
||||||
])
|
])
|
||||||
if test "$rbcv" != x; then
|
if test "$rbcv" != x; then
|
||||||
RUBY_DEFINE_IF(attrib[(x)], $rbcv, [${rbcv_cond}])
|
RUBY_DEFINE_IF([${rbcv_cond}], attrib[(x)], $rbcv)
|
||||||
fi
|
fi
|
||||||
AS_VAR_POPDEF([attrib])
|
AS_VAR_POPDEF([attrib])
|
||||||
AS_VAR_POPDEF([rbcv])
|
AS_VAR_POPDEF([rbcv])
|
||||||
|
@ -505,7 +533,7 @@ for mac in "__attribute__((dllimport))" "__declspec(dllimport)"; do
|
||||||
done])
|
done])
|
||||||
test "x$rb_cv_ruby_extern" = xno || AC_DEFINE_UNQUOTED(RUBY_EXTERN, $rb_cv_ruby_extern)
|
test "x$rb_cv_ruby_extern" = xno || AC_DEFINE_UNQUOTED(RUBY_EXTERN, $rb_cv_ruby_extern)
|
||||||
|
|
||||||
XCFLAGS="$XCFLAGS -DRUBY_EXPORT"
|
RUBY_APPEND_OPTION(XCFLAGS, -DRUBY_EXPORT)
|
||||||
|
|
||||||
dnl Check whether we need to define sys_nerr locally
|
dnl Check whether we need to define sys_nerr locally
|
||||||
AC_CHECK_DECLS([sys_nerr], [], [], [$ac_includes_default
|
AC_CHECK_DECLS([sys_nerr], [], [], [$ac_includes_default
|
||||||
|
@ -542,8 +570,8 @@ case "$target_os" in
|
||||||
nextstep*) ;;
|
nextstep*) ;;
|
||||||
openstep*) ;;
|
openstep*) ;;
|
||||||
rhapsody*) ;;
|
rhapsody*) ;;
|
||||||
darwin*) LIBS="-lobjc $LIBS"
|
darwin*) RUBY_PREPEND_OPTION(LIBS, -lobjc)
|
||||||
CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE"
|
RUBY_APPEND_OPTIONS(CPPFLAGS, -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE)
|
||||||
AC_MSG_CHECKING(whether Mac OS X 10.5 or later)
|
AC_MSG_CHECKING(whether Mac OS X 10.5 or later)
|
||||||
AC_TRY_CPP([#include <AvailabilityMacros.h>
|
AC_TRY_CPP([#include <AvailabilityMacros.h>
|
||||||
#if MAC_OS_X_VERSION_MAX_ALLOWED <= 1040
|
#if MAC_OS_X_VERSION_MAX_ALLOWED <= 1040
|
||||||
|
@ -794,8 +822,8 @@ dnl (
|
||||||
universal-darwin*:*ppc*)
|
universal-darwin*:*ppc*)
|
||||||
AC_LIBSOURCES(alloca.c)
|
AC_LIBSOURCES(alloca.c)
|
||||||
AC_SUBST([ALLOCA], [\${LIBOBJDIR}alloca.${ac_objext}])
|
AC_SUBST([ALLOCA], [\${LIBOBJDIR}alloca.${ac_objext}])
|
||||||
RUBY_DEFINE_IF(C_ALLOCA, 1, [defined __powerpc__])
|
RUBY_DEFINE_IF([defined __powerpc__], C_ALLOCA, 1)
|
||||||
RUBY_DEFINE_IF(alloca, alloca)
|
RUBY_DEFINE_IF([defined __powerpc__], alloca, alloca)
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
AC_FUNC_ALLOCA
|
AC_FUNC_ALLOCA
|
||||||
|
@ -1350,12 +1378,21 @@ if test "$with_dln_a_out" != yes; then
|
||||||
AC_MSG_CHECKING(whether OS depend dynamic link works)
|
AC_MSG_CHECKING(whether OS depend dynamic link works)
|
||||||
if test "$GCC" = yes; then
|
if test "$GCC" = yes; then
|
||||||
case "$target_os" in
|
case "$target_os" in
|
||||||
nextstep*) CCDLFLAGS="$CCDLFLAGS -fno-common";;
|
dnl (
|
||||||
openstep*) CCDLFLAGS="$CCDLFLAGS -fno-common";;
|
nextstep*|openstep*|rhapsody*|darwin*)
|
||||||
rhapsody*) CCDLFLAGS="$CCDLFLAGS -fno-common";;
|
# The -fno-common is needed if we wish to embed the Ruby interpreter
|
||||||
darwin*) CCDLFLAGS="$CCDLFLAGS -fno-common";;
|
# into a plugin module of some project (as opposed to embedding it
|
||||||
|
# within the project's application). The -I/usr/local/include is
|
||||||
|
# needed because CPP as discovered by configure (cc -E -traditional)
|
||||||
|
# fails to consult /usr/local/include by default. This causes
|
||||||
|
# mkmf.rb's have_header() to fail if the desired resource happens to be
|
||||||
|
# installed in the /usr/local tree.
|
||||||
|
RUBY_APPEND_OPTION(CCDLFLAGS, -fno-common);;
|
||||||
|
dnl (
|
||||||
human*|bsdi*|beos*|haiku*|cygwin*|mingw*|aix*|interix*) ;;
|
human*|bsdi*|beos*|haiku*|cygwin*|mingw*|aix*|interix*) ;;
|
||||||
*) CCDLFLAGS="$CCDLFLAGS -fPIC";;
|
dnl (
|
||||||
|
*)
|
||||||
|
RUBY_APPEND_OPTION(CCDLFLAGS, -fPIC);;
|
||||||
esac
|
esac
|
||||||
else
|
else
|
||||||
case "$target_os" in
|
case "$target_os" in
|
||||||
|
@ -1733,7 +1770,7 @@ LIBRUBYARG_SHARED='-l$(RUBY_SO_NAME)'
|
||||||
if test "$enable_shared" = 'yes'; then
|
if test "$enable_shared" = 'yes'; then
|
||||||
LIBRUBY='$(LIBRUBY_SO)'
|
LIBRUBY='$(LIBRUBY_SO)'
|
||||||
LIBRUBYARG='$(LIBRUBYARG_SHARED)'
|
LIBRUBYARG='$(LIBRUBYARG_SHARED)'
|
||||||
CFLAGS="$CFLAGS $CCDLFLAGS"
|
test -z "$CCDLFLAGS" || CFLAGS="$CFLAGS $CCDLFLAGS"
|
||||||
ENABLE_SHARED=yes
|
ENABLE_SHARED=yes
|
||||||
if test "$rb_cv_binary_elf" = yes; then
|
if test "$rb_cv_binary_elf" = yes; then
|
||||||
SOLIBS='$(LIBS)'
|
SOLIBS='$(LIBS)'
|
||||||
|
@ -1834,25 +1871,17 @@ case "$target_os" in
|
||||||
linux*)
|
linux*)
|
||||||
;;
|
;;
|
||||||
netbsd*)
|
netbsd*)
|
||||||
CFLAGS="$CFLAGS -pipe"
|
RUBY_APPEND_OPTION(CFLAGS, -pipe)
|
||||||
;;
|
;;
|
||||||
nextstep*|openstep*)
|
nextstep*|openstep*)
|
||||||
# The -fno-common is needed if we wish to embed the Ruby interpreter
|
RUBY_APPEND_OPTION(CPPFLAGS, -I/usr/local/include)
|
||||||
# into a plugin module of some project (as opposed to embedding it
|
|
||||||
# within the project's application). The -I/usr/local/include is
|
|
||||||
# needed because CPP as discovered by configure (cc -E -traditional)
|
|
||||||
# fails to consult /usr/local/include by default. This causes
|
|
||||||
# mkmf.rb's have_header() to fail if the desired resource happens to be
|
|
||||||
# installed in the /usr/local tree.
|
|
||||||
CFLAGS="$CFLAGS -pipe -fno-common"
|
|
||||||
CPPFLAGS="$CPPFLAGS -I/usr/local/include"
|
|
||||||
;;
|
;;
|
||||||
rhapsody*)
|
rhapsody*)
|
||||||
CFLAGS="$CFLAGS -pipe -no-precomp -fno-common"
|
RUBY_APPEND_OPTIONS(CFLAGS, -pipe -no-precomp)
|
||||||
;;
|
;;
|
||||||
darwin*)
|
darwin*)
|
||||||
CFLAGS="$CFLAGS -pipe -fno-common"
|
RUBY_APPEND_OPTION(CFLAGS, -pipe)
|
||||||
MINIDLNOBJ=dmydln.o
|
MINIDLNOBJ=dmydln.o
|
||||||
;;
|
;;
|
||||||
os2-emx)
|
os2-emx)
|
||||||
CFLAGS="$CFLAGS -DOS2"
|
CFLAGS="$CFLAGS -DOS2"
|
||||||
|
@ -1962,6 +1991,38 @@ dnl (
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
|
if test "${universal_binary-no}" = yes ; then
|
||||||
|
AC_MSG_CHECKING([for architecture macros])
|
||||||
|
mv confdefs.h confdefs1.h
|
||||||
|
: > confdefs.h
|
||||||
|
AC_TRY_COMPILE([@%:@if defined __`echo ${universal_archnames} |
|
||||||
|
sed 's/=[^ ]*//g;s/ /__ || defined __/g'`__
|
||||||
|
@%:@else
|
||||||
|
@%:@error
|
||||||
|
>>>>>><<<<<<
|
||||||
|
@%:@endif], [],
|
||||||
|
[
|
||||||
|
AC_MSG_RESULT(yes)
|
||||||
|
mv -f confdefs1.h confdefs.h
|
||||||
|
], [
|
||||||
|
AC_MSG_RESULT(no)
|
||||||
|
archflagpat=`eval echo '"'"${ARCH_FLAG}"'"' | sed 's/[[][|.*]]/\\&/g'`
|
||||||
|
cflags=`echo "$CFLAGS" | sed "s|$archflagpat"'||'`
|
||||||
|
for archs in ${universal_archnames}; do
|
||||||
|
cpu=${archs#*=}
|
||||||
|
archs=${archs%=*}
|
||||||
|
CFLAGS="$cflags -arch $archs"
|
||||||
|
archs="__${archs}__"
|
||||||
|
AC_MSG_CHECKING([for macro ${archs} on ${cpu}])
|
||||||
|
AC_TRY_COMPILE([@%:@ifndef ${archs}
|
||||||
|
@%:@error
|
||||||
|
@%:@endif], [], [AC_MSG_RESULT([yes])], [AC_MSG_RESULT([no])])
|
||||||
|
done
|
||||||
|
mv -f confdefs1.h confdefs.h
|
||||||
|
AC_MSG_ERROR([failed])
|
||||||
|
])
|
||||||
|
fi
|
||||||
|
|
||||||
CPPFLAGS="$CPPFLAGS "'$(DEFS)'
|
CPPFLAGS="$CPPFLAGS "'$(DEFS)'
|
||||||
test -z "$CPPFLAGS" || CPPFLAGS="$CPPFLAGS "; CPPFLAGS="$CPPFLAGS"'${cppflags}'
|
test -z "$CPPFLAGS" || CPPFLAGS="$CPPFLAGS "; CPPFLAGS="$CPPFLAGS"'${cppflags}'
|
||||||
cflagspat=`eval echo '"'"${cflags}"'"' | sed 's/[[][|.*]]/\\&/g'`
|
cflagspat=`eval echo '"'"${cflags}"'"' | sed 's/[[][|.*]]/\\&/g'`
|
||||||
|
@ -2121,15 +2182,23 @@ if test "${universal_binary-no}" = yes ; then
|
||||||
AC_CACHE_CHECK(whether __ARCHITECTURE__ is available, rb_cv_architecture_available,
|
AC_CACHE_CHECK(whether __ARCHITECTURE__ is available, rb_cv_architecture_available,
|
||||||
AC_TRY_COMPILE([const char arch[] = __ARCHITECTURE__;], [puts(arch);],
|
AC_TRY_COMPILE([const char arch[] = __ARCHITECTURE__;], [puts(arch);],
|
||||||
[rb_cv_architecture_available=yes], [rb_cv_architecture_available=no]))
|
[rb_cv_architecture_available=yes], [rb_cv_architecture_available=no]))
|
||||||
|
if test "${rb_cv_architecture_available}" = yes; then
|
||||||
|
AC_DEFINE_UNQUOTED(RUBY_PLATFORM_CPU, __ARCHITECTURE__)
|
||||||
|
else
|
||||||
|
for archs in ${universal_archnames}; do
|
||||||
|
cpu=`echo $archs | sed 's/.*=//'`
|
||||||
|
archs=`echo $archs | sed 's/=.*//'`
|
||||||
|
RUBY_DEFINE_IF([defined __${archs}__], RUBY_PLATFORM_CPU, ["${cpu}"])
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
AC_DEFINE_UNQUOTED(RUBY_PLATFORM_OS, "${target_os}")
|
||||||
|
AC_DEFINE_UNQUOTED(RUBY_ARCH, "universal-"RUBY_PLATFORM_OS)
|
||||||
|
AC_DEFINE_UNQUOTED(RUBY_PLATFORM, "universal."RUBY_PLATFORM_CPU"-"RUBY_PLATFORM_OS)
|
||||||
|
AC_DEFINE_UNQUOTED(RUBY_THIN_ARCHLIB, RUBY_LIB"/"RUBY_PLATFORM_CPU"-"RUBY_PLATFORM_OS)
|
||||||
|
AC_DEFINE_UNQUOTED(RUBY_SITE_THIN_ARCHLIB, RUBY_SITE_LIB2"/"RUBY_PLATFORM_CPU"-"RUBY_PLATFORM_OS)
|
||||||
|
AC_DEFINE_UNQUOTED(RUBY_VENDOR_THIN_ARCHLIB, RUBY_VENDOR_LIB2"/"RUBY_PLATFORM_CPU"-"RUBY_PLATFORM_OS)
|
||||||
else
|
else
|
||||||
arch="${target_cpu}-${target_os}"
|
arch="${target_cpu}-${target_os}"
|
||||||
fi
|
|
||||||
if test "${rb_cv_architecture_available}" = yes; then
|
|
||||||
AC_DEFINE_UNQUOTED(RUBY_THIN_ARCHLIB, RUBY_LIB"/"RUBY_PLATFORM)
|
|
||||||
AC_DEFINE_UNQUOTED(RUBY_SITE_THIN_ARCHLIB, RUBY_SITE_LIB"/"RUBY_PLATFORM)
|
|
||||||
AC_DEFINE_UNQUOTED(RUBY_VENDOR_THIN_ARCHLIB, RUBY_VENDOR_LIB"/"RUBY_PLATFORM)
|
|
||||||
AC_DEFINE_UNQUOTED(RUBY_PLATFORM, __ARCHITECTURE__"-${target_os}")
|
|
||||||
else
|
|
||||||
AC_DEFINE_UNQUOTED(RUBY_PLATFORM, "${arch}")
|
AC_DEFINE_UNQUOTED(RUBY_PLATFORM, "${arch}")
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче