Talk:Apertium on Ubuntu or Debian

From Apertium
Jump to navigation Jump to search

Here are the output for Ubuntu Edgy.

SVN

Configure

youssef@youssef-desktop:~/apertium/apertium/lttoolbox$ ./configure
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking whether make sets $(MAKE)... yes
checking for working aclocal-1.4... found
checking for working autoconf... found
checking for working automake-1.4... found
checking for working autoheader... found
checking for working makeinfo... missing
checking Compilation architecture: PPC, i686, Other... i686
checking for g++... g++
checking for C++ compiler default output file name... a.out
checking whether the C++ compiler works... yes
checking whether we are cross compiling... no
checking for suffix of executables... 
checking for suffix of object files... o
checking whether we are using the GNU C++ compiler... yes
checking whether g++ accepts -g... yes
checking build system type... i686-pc-linux-gnu
checking host system type... i686-pc-linux-gnu
checking for gcc... gcc
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ISO C89... none needed
checking for a sed that does not truncate output... /bin/sed
checking for grep that handles long lines and -e... /bin/grep
checking for egrep... /bin/grep -E
checking for ld used by gcc... /usr/bin/ld
checking if the linker (/usr/bin/ld) is GNU ld... yes
checking for /usr/bin/ld option to reload object files... -r
checking for BSD-compatible nm... /usr/bin/nm -B
checking whether ln -s works... yes
checking how to recognise dependent libraries... pass_all
checking how to run the C preprocessor... gcc -E
checking for ANSI C header files... yes
checking for sys/types.h... yes
checking for sys/stat.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for memory.h... yes
checking for strings.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for unistd.h... yes
checking dlfcn.h usability... yes
checking dlfcn.h presence... yes
checking for dlfcn.h... yes
checking how to run the C++ preprocessor... g++ -E
checking for g77... no
checking for f77... no
checking for xlf... no
checking for frt... no
checking for pgf77... no
checking for cf77... no
checking for fort77... no
checking for fl32... no
checking for af77... no
checking for f90... no
checking for xlf90... no
checking for pgf90... no
checking for pghpf... no
checking for epcf90... no
checking for gfortran... no
checking for g95... no
checking for f95... no
checking for fort... no
checking for xlf95... no
checking for ifort... no
checking for ifc... no
checking for efc... no
checking for pgf95... no
checking for lf95... no
checking for ftn... no
checking whether we are using the GNU Fortran 77 compiler... no
checking whether  accepts -g... no
checking the maximum length of command line arguments... 32768
checking command to parse /usr/bin/nm -B output from gcc object... ok
checking for objdir... .libs
checking for ar... ar
checking for ranlib... ranlib
checking for strip... strip
checking if gcc supports -fno-rtti -fno-exceptions... no
checking for gcc option to produce PIC... -fPIC
checking if gcc PIC flag -fPIC works... yes
checking if gcc static flag -static works... yes
checking if gcc supports -c -o file.o... yes
checking whether the gcc linker (/usr/bin/ld) supports shared libraries... yes
checking whether -lc should be explicitly linked in... no
checking dynamic linker characteristics... cat: /etc/ld.so.conf.d/*.conf: No such file or directory
GNU/Linux ld.so
checking how to hardcode library paths into programs... immediate
checking whether stripping libraries is possible... yes
checking if libtool supports shared libraries... yes
checking whether to build shared libraries... yes
checking whether to build static libraries... yes
configure: creating libtool
appending configuration tag "CXX" to libtool
checking for ld used by g++... /usr/bin/ld
checking if the linker (/usr/bin/ld) is GNU ld... yes
checking whether the g++ linker (/usr/bin/ld) supports shared libraries... yes
checking for g++ option to produce PIC... -fPIC
checking if g++ PIC flag -fPIC works... yes
checking if g++ static flag -static works... yes
checking if g++ supports -c -o file.o... yes
checking whether the g++ linker (/usr/bin/ld) supports shared libraries... yes
checking dynamic linker characteristics... cat: /etc/ld.so.conf.d/*.conf: No such file or directory
GNU/Linux ld.so
checking how to hardcode library paths into programs... immediate
appending configuration tag "F77" to libtool
checking whether build environment is sane... yes
checking for pkg-config... /usr/bin/pkg-config
checking pkg-config is at least version 0.9.0... yes
checking for LTTOOLBOX... yes
checking for xmlReaderForFile in -lxml2... yes
checking for ANSI C header files... (cached) yes
checking for stdlib.h... (cached) yes
checking for string.h... (cached) yes
checking for unistd.h... (cached) yes
checking stddef.h usability... yes
checking stddef.h presence... yes
checking for stddef.h... yes
checking for stdbool.h that conforms to C99... yes
checking for _Bool... no
checking for an ANSI C-conforming const... yes
checking for size_t... yes
checking for error_at_line... no
checking for stdlib.h... (cached) yes
checking for GNU libc compatible malloc... yes
checking for stdlib.h... (cached) yes
checking for GNU libc compatible realloc... yes
checking whether fread_unlocked is declared... yes
checking whether fwrite_unlocked is declared... yes
checking whether fgetc_unlocked is declared... yes
checking whether fputc_unlocked is declared... yes
checking whether fputs_unlocked is declared... yes
checking for setlocale... yes
checking for strdup... yes
checking for getopt_long... yes
configure: creating ./config.status
config.status: creating Makefile
config.status: WARNING:  Makefile.in seems to ignore the --datarootdir setting
config.status: creating lttoolbox-2.0.pc
config.status: creating lttoolbox/Makefile
config.status: WARNING:  lttoolbox/Makefile.in seems to ignore the --datarootdir setting
config.status: creating lttoolbox/LttoolsConfig.H
config.status: lttoolbox/LttoolsConfig.H is unchanged


SLT es tu sur d'avoir toutes les dependances pour que l'install se deroule sans soucis ? du genre XML-parser entre autres (je suppose,pas certain)

Sinon tu peux tenter d'installer juste ds le home!!pour cela crées un dossier prevu a cet effet puis tappes ./configure --prefix=/chemin/juska/tondossier puis poursuis make et make install ( etant donné que c'est ds le home ,le sudo n'est nullement requis)

voila en esperant que ça t'aide

Make

youssef@youssef-desktop:~/apertium/apertium/lttoolbox$ make
Making all in lttoolbox
make[1]: entrant dans le répertoire « /home/youssef/apertium/apertium/lttoolbox/lttoolbox »
/bin/bash ../libtool --mode=compile g++ -DHAVE_CONFIG_H -I. -I. -I../[lttoolbox -I..     -Wall -ansi -march=i686 -O3               -fomit-frame-pointer -funroll-loops -c Compiler.C
 g++ -DHAVE_CONFIG_H -I. -I. "-I../[lttoolbox" -I.. -Wall -ansi -march=i686 -O3 -fomit-frame-pointer -funroll-loops -Wp,-MD,.deps/Compiler.pp -c Compiler.C  -fPIC -DPIC -o .libs/Compiler.o
In file included from Compiler.C:19:
../lttoolbox/Compiler.H:31:30: error: libxml/xmlreader.h: No such file or directory
In file included from Compiler.C:23:
../lttoolbox/XMLParseUtil.H:22:29: error: libxml/encoding.h: No such file or directory
../lttoolbox/Compiler.H:44: error: 'xmlTextReaderPtr' does not name a type
../lttoolbox/Compiler.H:273: error: 'xmlChar' has not been declared
../lttoolbox/XMLParseUtil.H:31: error: 'xmlTextReaderPtr' has not been declared
../lttoolbox/XMLParseUtil.H:32: error: 'xmlChar' has not been declared
Compiler.C: In member function 'void Compiler::parse(const std::string&, const std::string&)':
Compiler.C:73: error: 'reader' was not declared in this scope
Compiler.C:73: error: 'xmlReaderForFile' was not declared in this scope
Compiler.C:80: error: 'xmlTextReaderRead' was not declared in this scope
Compiler.C:92: error: 'xmlFreeTextReader' was not declared in this scope
Compiler.C:93: error: 'xmlCleanupParser' was not declared in this scope
Compiler.C: At global scope:
Compiler.C:107: error: 'std::string Compiler::latin1' is not a static member of 'class Compiler'
Compiler.C:107: error: 'xmlChar' was not declared in this scope
Compiler.C:108: error: expected ',' or ';' before '{' token
Compiler.C: In member function 'void Compiler::procAlphabet()':
Compiler.C:115: error: 'reader' was not declared in this scope
Compiler.C:115: error: 'xmlTextReaderNodeType' was not declared in this scope
Compiler.C:117: error: 'XML_READER_TYPE_END_ELEMENT' was not declared in this scope
Compiler.C:119: error: 'xmlTextReaderRead' was not declared in this scope
Compiler.C:122: error: 'xmlChar' was not declared in this scope
Compiler.C:122: error: expected `;' before 'const'
Compiler.C:123: error: 'valor' was not declared in this scope
Compiler.C:127: error: 'xmlTextReaderGetParserLineNumber' was not declared in this scope
Compiler.C: In member function 'void Compiler::procParDef()':
Compiler.C:143: error: 'reader' was not declared in this scope
Compiler.C:143: error: 'xmlTextReaderNodeType' was not declared in this scope
Compiler.C:145: error: 'XML_READER_TYPE_END_ELEMENT' was not declared in this scope
Compiler.C: In member function 'void Compiler::requireEmptyError(const std::string&)':
Compiler.C:225: error: 'reader' was not declared in this scope
Compiler.C:225: error: 'xmlTextReaderIsEmptyElement' was not declared in this scope
Compiler.C:227: error: 'xmlTextReaderGetParserLineNumber' was not declared in this scope
Compiler.C: In member function 'bool Compiler::allBlanks()':
Compiler.C:237: error: 'reader' was not declared in this scope
Compiler.C:237: error: 'xmlTextReaderConstValue' was not declared in this scope
Compiler.C: In member function 'void Compiler::readString(std::list<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&, const std::string&)':
Compiler.C:252: error: 'reader' was not declared in this scope
Compiler.C:252: error: 'xmlTextReaderConstValue' was not declared in this scope
Compiler.C:275: error: 'reader' was not declared in this scope
Compiler.C:275: error: 'xmlTextReaderNodeType' was not declared in this scope
Compiler.C:276: error: 'XML_READER_TYPE_END_ELEMENT' was not declared in this scope
Compiler.C:288: error: 'reader' was not declared in this scope
Compiler.C:288: error: 'xmlTextReaderGetParserLineNumber' was not declared in this scope
Compiler.C:297: error: 'reader' was not declared in this scope
Compiler.C:297: error: 'xmlTextReaderGetParserLineNumber' was not declared in this scope
Compiler.C: In member function 'void Compiler::skipBlanks(std::string&)':
Compiler.C:313: error: 'reader' was not declared in this scope
Compiler.C:313: error: 'xmlTextReaderGetParserLineNumber' was not declared in this scope
Compiler.C:318: error: 'reader' was not declared in this scope
Compiler.C:318: error: 'xmlTextReaderRead' was not declared in this scope
Compiler.C:319: error: 'xmlTextReaderConstName' was not declared in this scope
Compiler.C: In member function 'void Compiler::skip(std::string&, const std::string&)':
Compiler.C:326: error: 'reader' was not declared in this scope
Compiler.C:326: error: 'xmlTextReaderRead' was not declared in this scope
Compiler.C:327: error: 'xmlTextReaderConstName' was not declared in this scope
Compiler.C:335: error: 'xmlTextReaderGetParserLineNumber' was not declared in this scope
Compiler.C:346: error: 'xmlTextReaderGetParserLineNumber' was not declared in this scope
Compiler.C: In member function 'EntryToken Compiler::procIdentity()':
Compiler.C:357: error: 'reader' was not declared in this scope
Compiler.C:357: error: 'xmlTextReaderIsEmptyElement' was not declared in this scope
Compiler.C:363: error: 'xmlTextReaderRead' was not declared in this scope
Compiler.C:364: error: 'xmlTextReaderConstName' was not declared in this scope
Compiler.C: In member function 'EntryToken Compiler::procTransduction()':
Compiler.C:386: error: 'reader' was not declared in this scope
Compiler.C:386: error: 'xmlTextReaderIsEmptyElement' was not declared in this scope
Compiler.C:391: error: 'xmlTextReaderRead' was not declared in this scope
Compiler.C:392: error: 'xmlTextReaderConstName' was not declared in this scope
Compiler.C:403: error: 'reader' was not declared in this scope
Compiler.C:403: error: 'xmlTextReaderIsEmptyElement' was not declared in this scope
Compiler.C:408: error: 'xmlTextReaderRead' was not declared in this scope
Compiler.C:409: error: 'xmlTextReaderConstName' was not declared in this scope
Compiler.C: In member function 'std::string Compiler::attrib(const std::string&)':
Compiler.C:428: error: 'reader' was not declared in this scope
Compiler.C: In member function 'EntryToken Compiler::procPar()':
Compiler.C:439: error: 'reader' was not declared in this scope
Compiler.C:439: error: 'xmlTextReaderGetParserLineNumber' was not declared in this scope
Compiler.C: In member function 'void Compiler::insertEntryTokens(const std::vector<EntryToken, std::allocator<EntryToken> >&)':
Compiler.C:476: error: 'reader' was not declared in this scope
Compiler.C:476: error: 'xmlTextReaderGetParserLineNumber' was not declared in this scope
Compiler.C: In member function 'void Compiler::requireAttribute(const std::string&, const std::string&, const std::string&)':
Compiler.C:552: error: 'reader' was not declared in this scope
Compiler.C:552: error: 'xmlTextReaderGetParserLineNumber' was not declared in this scope
Compiler.C: In member function 'void Compiler::procSection()':
Compiler.C:564: error: 'reader' was not declared in this scope
Compiler.C:564: error: 'xmlTextReaderNodeType' was not declared in this scope
Compiler.C:566: error: 'XML_READER_TYPE_END_ELEMENT' was not declared in this scope
Compiler.C: In member function 'void Compiler::procEntry()':
Compiler.C:597: error: 'reader' was not declared in this scope
Compiler.C:597: error: 'xmlTextReaderRead' was not declared in this scope
Compiler.C:598: error: 'xmlTextReaderConstName' was not declared in this scope
Compiler.C:608: error: 'reader' was not declared in this scope
Compiler.C:608: error: 'xmlTextReaderRead' was not declared in this scope
Compiler.C:611: error: 'xmlTextReaderGetParserLineNumber' was not declared in this scope
Compiler.C:615: error: 'xmlTextReaderConstName' was not declared in this scope
Compiler.C:618: error: 'xmlTextReaderNodeType' was not declared in this scope
Compiler.C:641: error: 'xmlTextReaderGetParserLineNumber' was not declared in this scope
Compiler.C:649: error: 'XML_READER_TYPE_END_ELEMENT' was not declared in this scope
Compiler.C:658: error: 'XML_READER_TYPE_END_ELEMENT' was not declared in this scope
Compiler.C:673: error: 'xmlTextReaderGetParserLineNumber' was not declared in this scope
Compiler.C: In member function 'void Compiler::procNode()':
Compiler.C:684: error: 'xmlChar' was not declared in this scope
Compiler.C:684: error: expected `;' before 'const'
Compiler.C:685: error: 'xnombre' was not declared in this scope
Compiler.C:731: error: 'reader' was not declared in this scope
Compiler.C:731: error: 'xmlTextReaderGetParserLineNumber' was not declared in this scope
Compiler.C: In member function 'EntryToken Compiler::procRegExp()':
Compiler.C:741: error: 'reader' was not declared in this scope
Compiler.C:741: error: 'xmlTextReaderRead' was not declared in this scope
Compiler.C:742: error: 'xmlTextReaderConstValue' was not declared in this scope
make[1]: *** [Compiler.lo] Erreur 1
make[1]: quittant le répertoire « /home/youssef/apertium/apertium/lttoolbox/lttoolbox »
make: *** [all-recursive] Erreur 1

SF tarball

Configure

youssef@youssef-desktop:~/My Downloads/lttoolbox-2.0.3$ ./configure
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
/bin/bash: /home/youssef/My: No such file or directory
configure: WARNING: `missing' script is too old or missing
checking for gawk... no
checking for mawk... mawk
checking whether make sets $(MAKE)... yes
checking Compilation architecture: PPC, i686, Other... i686
checking for g++... g++
checking for C++ compiler default output file name... a.out
checking whether the C++ compiler works... yes
checking whether we are cross compiling... no
checking for suffix of executables... 
checking for suffix of object files... o
checking whether we are using the GNU C++ compiler... yes
checking whether g++ accepts -g... yes
checking for style of include used by make... GNU
checking dependency style of g++... gcc3
checking build system type... i686-pc-linux-gnu
checking host system type... i686-pc-linux-gnu
checking for gcc... gcc
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ISO C89... none needed
checking dependency style of gcc... gcc3
checking for a sed that does not truncate output... /bin/sed
checking for grep that handles long lines and -e... /bin/grep
checking for egrep... /bin/grep -E
checking for ld used by gcc... /usr/bin/ld
checking if the linker (/usr/bin/ld) is GNU ld... yes
checking for /usr/bin/ld option to reload object files... -r
checking for BSD-compatible nm... /usr/bin/nm -B
checking whether ln -s works... yes
checking how to recognise dependent libraries... pass_all
checking how to run the C preprocessor... gcc -E
checking for ANSI C header files... yes
checking for sys/types.h... yes
checking for sys/stat.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for memory.h... yes
checking for strings.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for unistd.h... yes
checking dlfcn.h usability... yes
checking dlfcn.h presence... yes
checking for dlfcn.h... yes
checking how to run the C++ preprocessor... g++ -E
checking for g77... no
checking for xlf... no
checking for f77... no
checking for frt... no
checking for pgf77... no
checking for cf77... no
checking for fort77... no
checking for fl32... no
checking for af77... no
checking for xlf90... no
checking for f90... no
checking for pgf90... no
checking for pghpf... no
checking for epcf90... no
checking for gfortran... no
checking for g95... no
checking for xlf95... no
checking for f95... no
checking for fort... no
checking for ifort... no
checking for ifc... no
checking for efc... no
checking for pgf95... no
checking for lf95... no
checking for ftn... no
checking whether we are using the GNU Fortran 77 compiler... no
checking whether  accepts -g... no
checking the maximum length of command line arguments... 32768
checking command to parse /usr/bin/nm -B output from gcc object... ok
checking for objdir... .libs
checking for ar... ar
checking for ranlib... ranlib
checking for strip... strip
checking if gcc supports -fno-rtti -fno-exceptions... no
checking for gcc option to produce PIC... -fPIC
checking if gcc PIC flag -fPIC works... yes
checking if gcc static flag -static works... yes
checking if gcc supports -c -o file.o... yes
checking whether the gcc linker (/usr/bin/ld) supports shared libraries... yes
checking whether -lc should be explicitly linked in... no
checking dynamic linker characteristics... cat: /etc/ld.so.conf.d/*.conf: No such file or directory
GNU/Linux ld.so
checking how to hardcode library paths into programs... immediate
checking whether stripping libraries is possible... yes
checking if libtool supports shared libraries... yes
checking whether to build shared libraries... yes
checking whether to build static libraries... yes
configure: creating libtool
appending configuration tag "CXX" to libtool
checking for ld used by g++... /usr/bin/ld
checking if the linker (/usr/bin/ld) is GNU ld... yes
checking whether the g++ linker (/usr/bin/ld) supports shared libraries... yes
checking for g++ option to produce PIC... -fPIC
checking if g++ PIC flag -fPIC works... yes
checking if g++ static flag -static works... yes
checking if g++ supports -c -o file.o... yes
checking whether the g++ linker (/usr/bin/ld) supports shared libraries... yes
checking dynamic linker characteristics... cat: /etc/ld.so.conf.d/*.conf: No such file or directory
GNU/Linux ld.so
checking how to hardcode library paths into programs... immediate
appending configuration tag "F77" to libtool
checking whether build environment is sane... yes
checking for pkg-config... /usr/bin/pkg-config
checking pkg-config is at least version 0.9.0... yes
checking for LTTOOLBOX... yes
checking for xmlReaderForFile in -lxml2... yes
checking for ANSI C header files... (cached) yes
checking for stdlib.h... (cached) yes
checking for string.h... (cached) yes
checking for unistd.h... (cached) yes
checking stddef.h usability... yes
checking stddef.h presence... yes
checking for stddef.h... yes
checking for stdbool.h that conforms to C99... yes
checking for _Bool... no
checking for an ANSI C-conforming const... yes
checking for size_t... yes
checking for error_at_line... yes
checking for stdlib.h... (cached) yes
checking for GNU libc compatible malloc... yes
checking for stdlib.h... (cached) yes
checking for GNU libc compatible realloc... yes
checking whether fread_unlocked is declared... yes
checking whether fwrite_unlocked is declared... yes
checking whether fgetc_unlocked is declared... yes
checking whether fputc_unlocked is declared... yes
checking whether fputs_unlocked is declared... yes
checking for setlocale... yes
checking for strdup... yes
checking for getopt_long... yes
configure: creating ./config.status
config.status: creating Makefile
config.status: creating lttoolbox-2.0.pc
config.status: creating lttoolbox/Makefile
config.status: creating lttoolbox/LttoolsConfig.H
config.status: lttoolbox/LttoolsConfig.H is unchanged
config.status: executing depfiles commands

Make

youssef@youssef-desktop:~/My Downloads/lttoolbox-2.0.3$ make
Making all in lttoolbox
make[1]: entrant dans le répertoire « /home/youssef/My Downloads/lttoolbox-2.0.3/lttoolbox »
make  all-am
make[2]: entrant dans le répertoire « /home/youssef/My Downloads/lttoolbox-2.0.3/lttoolbox »
/bin/bash ../libtool --tag=CXX --mode=link g++  -Wall -ansi -march=i686 -O3               -fomit-frame-pointer -funroll-loops   -o lt-comp -llttoolbox-2.0 -lxml2   ltcomp.o liblttoolbox-2.0.la -lxml2 
g++ -Wall -ansi -march=i686 -O3 -fomit-frame-pointer -funroll-loops -o .libs/lt-comp ltcomp.o  -llttoolbox-2.0 ./.libs/liblttoolbox-2.0.so /usr/lib/libxml2.so -Wl,--rpath -Wl,/usr/local/lib
/usr/bin/ld: cannot open output file .libs/lt-comp: Permission denied
collect2: ld returned 1 exit status
make[2]: *** [lt-comp] Erreur 1
make[2]: quittant le répertoire « /home/youssef/My Downloads/lttoolbox-2.0.3/lttoolbox »
make[1]: *** [all] Erreur 2
make[1]: quittant le répertoire « /home/youssef/My Downloads/lttoolbox-2.0.3/lttoolbox »
make: *** [all-recursive] Erreur 1

Changing these howTos

I think installation had better to be divided into two ways:

  • From binary or repositories
  • From SVN

the second is quite the same for all Linux and the first will need to be divided for different Linux.--Soroush 22:56, 21 March 2008 (UTC)

Recent comments

((((((((((((((((((ERROR 1))))))))))))))))))))<P>
*********************************there is no such directory lttoolbox,<BR> please provide other directions on getting this installed, thanks!!!!!!!!!!!!!!!!!!!!**************<BR>
what I did was just put lttoolbox folder myself manually into the apertium DIR<BR>
This allowed me to work up to point ERROR 2, further below.
cd apertium/lttoolbox

This should be fixed. - Francis Tyers 07:53, 19 August 2008 (UTC)


(((((((((((((((((((((((ERROR 2)))))))))))))))))))))))

 cd .. 
 cd apertium 

this is wrong, direction should likely be stating: return to /home/$USER/apertium (((((((((((((((((((((ERROR 2)))))))))))))))))))))))

(((((((((((((((((((ERROR 3)))))))))))))))))))))))))

This allows

./autogen.sh
PKG_CONFIG_PATH=/home/$USER/local/lib/pkgconfig ./configure --prefix=/home/$USER/local/

((((((((((((((((((ERROR 3)))))))))))))))))))))))))

Dead END :This should also be fixed. :If you have any more trouble, please don't hesitate to comment here, or on our irc channel or mailing list. - ~~~~