summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorgregory guy <[email protected]>2020-11-17 16:31:13 +0100
committergregory guy <[email protected]>2020-11-17 16:31:13 +0100
commit17a1fd91159f59a36eddac7061afe6531143ff01 (patch)
tree4e0672f15ed86f1073c000bd25c88277200e2914
parent4ee0745f55cba100da59f9ac4107b25ac92eadd4 (diff)
downloadtqca-tls-17a1fd91159f59a36eddac7061afe6531143ff01.tar.gz
tqca-tls-17a1fd91159f59a36eddac7061afe6531143ff01.zip
Drop tqmake build support.
Add basic cmake build instructions. Rework of the README file. Signed-off-by: gregory guy <[email protected]>
-rw-r--r--INSTALL29
-rw-r--r--README27
-rwxr-xr-xconfigure598
-rw-r--r--openssl.qcm80
-rwxr-xr-xprepare5
-rw-r--r--qca-tls.pro26
-rw-r--r--qca-tls.qc9
-rwxr-xr-xqcextra9
8 files changed, 44 insertions, 739 deletions
diff --git a/INSTALL b/INSTALL
new file mode 100644
index 0000000..8c88833
--- /dev/null
+++ b/INSTALL
@@ -0,0 +1,29 @@
+Basic Installation
+==================
+
+tqca-tls relies on cmake to build.
+
+Here are suggested default options:
+
+ -DCMAKE_EXPORT_COMPILE_COMMANDS="ON" \
+ -DCMAKE_INSTALL_PREFIX="/usr" \
+ -DCONFIG_INSTALL_DIR="/etc/trinity" \
+ -DSYSCONF_INSTALL_DIR="/etc/trinity" \
+ -DXDG_MENU_INSTALL_DIR="/etc/xdg/menus" \
+ -DCMAKE_BUILD_TYPE=RelWithDebInfo \
+ -DCMAKE_VERBOSE_MAKEFILE="ON" \
+ -DCMAKE_SKIP_RPATH="OFF" \
+ -DWITH_ALL_OPTIONS="ON"
+
+
+
+Requirements:
+=============
+
+- OpenSSL
+
+
+Optional:
+=========
+
+- tqca
diff --git a/README b/README
index eb3d5b3..b4fdde4 100644
--- a/README
+++ b/README
@@ -1,16 +1,19 @@
-TQCA TLS Plugin v1.0
--------------------
-Author: Justin Karneges <[email protected]>
-Date: September 15th, 2003
-This is a plugin to provide SSL/TLS capability to programs that
-utilize the TQt Cryptographic Architecture (TQCA).
+ tqca-tls - TQCA TLS Plugin
-Requirements:
- OpenSSL Library (http://www.openssl.org/)
-Installation procedure:
- ./configure
- make
- su -c "make install"
+tqca-tls is a plugin to provide SSL/TLS capability to programs that
+use the TQt Cryptographic Architecture (TQCA).
+
+
+CONTRIBUTING
+==============
+
+If you wish to contribute to tqca-tls, you might do so:
+
+- TDE Gitea Workspace (TGW) collaboration tool.
+ https://mirror.git.trinitydesktop.org/gitea
+
+- TDE Weblate Translation Workspace (TWTW) collaboration tool.
+ https://mirror.git.trinitydesktop.org/weblate
diff --git a/configure b/configure
deleted file mode 100755
index d5e2250..0000000
--- a/configure
+++ /dev/null
@@ -1,598 +0,0 @@
-#!/bin/sh
-
-show_usage() {
-cat <<EOT
-Usage: ./configure [OPTION]...
-
-This script creates necessary configuration files to build/install.
-
-Main options:
- --tqtdir=[path] Directory where TQt is installed.
- --help This help text.
-
-Dependency options:
- --with-openssl-inc=[path] Path to OpenSSL include files
- --with-openssl-lib=[path] Path to OpenSSL library files
-
-EOT
-}
-
-while [ $# -gt 0 ]; do
- case "$1" in
- --tqtdir=*)
- TQTDIR=`expr "${1}" : "--tqtdir=\(.*\)"`
- shift
- ;;
-
- --with-openssl-inc=*)
- QC_WITH_OPENSSL_INC=`expr "${1}" : "--with-openssl-inc=\(.*\)"`
- shift
- ;;
-
- --with-openssl-lib=*)
- QC_WITH_OPENSSL_LIB=`expr "${1}" : "--with-openssl-lib=\(.*\)"`
- shift
- ;;
-
- --debug)
- QC_DEBUG="Y"
- shift
- ;;
- --help) show_usage; exit ;;
- *) show_usage; exit ;;
- esac
-done
-
-
-echo "Configuring tqca-tls ..."
-
-if [ "$QC_DEBUG" = "Y" ]; then
-echo
-echo TQTDIR=$TQTDIR
-echo QC_WITH_OPENSSL_INC=$QC_WITH_OPENSSL_INC
-echo QC_WITH_OPENSSL_LIB=$QC_WITH_OPENSSL_LIB
-echo
-fi
-
-printf "Verifying TQt 3.x Multithreaded (MT) build environment ... "
-
-if [ -z "$TQTDIR" ]; then
- if [ "$QC_DEBUG" = "Y" ]; then
- echo \$TQTDIR not set... trying to find TQt manually
- fi
- for p in /usr/lib/tqt /usr/share/tqt /usr/share/tqt3 /usr/local/lib/tqt /usr/local/share/tqt /usr/lib/tqt3 /usr/local/lib/tqt3 /usr/lib/qt /usr/share/qt /usr/share/qt3 /usr/local/lib/qt /usr/local/share/qt /usr/lib/qt3 /usr/local/lib/qt3 /usr/lib64/tqt /usr/local/lib64/tqt /usr/lib64/tqt3 /usr/local/lib64/tqt3 /usr/lib64/qt /usr/local/lib64/qt /usr/lib64/qt3 /usr/local/lib64/qt3 /usr/X11R6/share/qt /usr/qt/3 ; do
- if [ -d "$p/mkspecs" ]; then
- TQTDIR=$p
- break;
- fi;
- done
- if [ -z "$TQTDIR" ]; then
- echo fail
- echo
- echo Unable to find TQt 'mkspecs'. Please set TQTDIR
- echo manually. Perhaps you need to install TQt 3
- echo development utilities. You may download them
- echo the repos of your distribution or from
- echo https://mirror.git.trinitydesktop.org/gitea/TDE/tqt3/.
- echo
- exit 1;
- fi
-fi
-
-if [ ! -x "$TQTDIR/bin/tqmake" ]; then
- if [ "$QC_DEBUG" = "Y" ]; then
- echo Warning: tqmake not in \$TQTDIR/bin/tqmake
- echo trying to find it in \$PATH
- fi
- qm=`type -p tqmake`
- if [ -x "$qm" ]; then
- if [ "$QC_DEBUG" = "Y" ]; then
- echo tqmake found in $qm
- fi
- else
- echo fail
- echo
- echo Sorry, you seem to have a very unusual setup,
- echo or I missdetected \$TQTDIR=$TQTDIR
- echo
- echo Please set \$TQTDIR manually and make sure that
- echo \$TQTDIR/bin/tqmake exists.
- echo
- exit 1;
- fi
-else
- qm=$TQTDIR/bin/tqmake
-fi
-
-gen_files() {
-cat >$1/modules.cpp <<EOT
-/*
------BEGIN QCMOD-----
-name: OpenSSL
-arg: with-openssl-inc=[path],Path to OpenSSL include files
-arg: with-openssl-lib=[path],Path to OpenSSL library files
------END QCMOD-----
-*/
-class qc_openssl : public ConfObj
-{
-public:
- qc_openssl(Conf *c) : ConfObj(c) {}
- TQString name() const { return "OpenSSL"; }
- TQString shortname() const { return "openssl"; }
- bool exec()
- {
- TQString inc, lib;
- TQString s;
- bool kb = false;
- TQString kbdir = "/usr/kerberos/include";
-
- // Redhat 9?
- if(TQFileInfo(kbdir).exists())
- kb = true;
-
- s = conf->getenv("QC_WITH_OPENSSL_INC");
- if(!s.isEmpty()) {
- if(!conf->checkHeader(s, "openssl/ssl.h"))
- return false;
- inc = s;
- }
- else {
- if(!conf->findHeader("openssl/ssl.h", TQStringList(), &s))
- return false;
- inc = s;
- }
-
- s = conf->getenv("QC_WITH_OPENSSL_LIB");
- if(!s.isEmpty()) {
- if(!conf->checkLibrary(s, "ssl"))
- return false;
- lib = s;
- }
- else {
- if(!conf->findLibrary("ssl", &s))
- return false;
- lib = s;
- }
-
- // is it at least openssl 0.9.7?
- TQString str =
- "#include<openssl/opensslv.h>\n"
- "int main()\n"
- "{\n"
- " unsigned long x = OPENSSL_VERSION_NUMBER;\n"
- " if(x >= 0x00907000) return 0; else return 1;\n"
- "}\n";
- TQString ext;
- if(!inc.isEmpty())
- ext += TQString("-I") + inc + ' ';
- if(kb)
- ext += TQString("-I") + kbdir + ' ';
- if(!lib.isEmpty())
- ext += TQString("-L") + lib + " -lssl -lcrypto ";
- int ret;
- if(!conf->doCompileAndLink(str, ext, &ret))
- return false;
- if(ret == 0)
- conf->addDefine("OSSL_097");
-
- if(!inc.isEmpty())
- conf->addIncludePath(inc);
- if(kb)
- conf->addIncludePath(kbdir);
- if(!lib.isEmpty())
- conf->addLib(TQString("-L") + s);
- conf->addLib("-lssl -lcrypto");
-
- // Make sure tqtinterface can be found
- conf->addIncludePath("/usr/include/tqt");
-
- return true;
- }
-};
-
-EOT
-cat >$1/modules_new.cpp <<EOT
- o = new qc_openssl(conf);
- o->required = true;
- o->disabled = false;
-
-EOT
-cat >$1/conf.cpp <<EOT
-#include<stdio.h>
-#include<stdlib.h>
-#include<tqstring.h>
-#include<tqdict.h>
-#include<tqptrlist.h>
-#include<tqfileinfo.h>
-#include<tqfile.h>
-#include<tqdir.h>
-#include<tqstringlist.h>
-
-class Conf;
-
-class ConfObj
-{
-public:
- ConfObj(Conf *c);
- virtual ~ConfObj();
-
- virtual TQString name() const=0;
- virtual TQString shortname() const=0;
- virtual bool exec()=0;
-
- Conf *conf;
- bool required;
- bool disabled;
-};
-
-typedef TQPtrList<ConfObj> ConfObjList;
-typedef TQPtrListIterator<ConfObj> ConfObjListIt;
-
-class Conf
-{
-public:
- Conf() : vars(17)
- {
- list.setAutoDelete(true);
- vars.setAutoDelete(true);
-
- vars.insert("QMAKE_INCDIR_X11", new TQString(X11_INC));
- vars.insert("QMAKE_LIBDIR_X11", new TQString(X11_LIBDIR));
- vars.insert("QMAKE_LIBS_X11", new TQString(X11_LIB));
- vars.insert("QMAKE_CC", new TQString(CC));
- }
-
- ~Conf()
- {
- }
-
- void added(ConfObj *o)
- {
- list.append(o);
- }
-
- TQString getenv(const TQString &var)
- {
- char *p = ::getenv(var.latin1());
- if(!p)
- return TQString::null;
- return TQString(p);
- }
-
- bool exec()
- {
- ConfObjListIt it(list);
- for(ConfObj *o; (o = it.current()); ++it) {
- // if this was a disabled-by-default option, check if it was enabled
- if(o->disabled) {
- TQString v = TQString("QC_ENABLE_") + o->shortname();
- if(getenv(v) != "Y")
- continue;
- }
- // and the opposite?
- else {
- TQString v = TQString("QC_DISABLE_") + o->shortname();
- if(getenv(v) == "Y")
- continue;
- }
-
- printf("Checking for %s ...", o->name().latin1());
- fflush(stdout);
- bool ok = o->exec();
- if(ok)
- printf(" yes\n");
- else
- printf(" no\n");
- if(!ok && o->required) {
- printf("\nError: need %s!\n", o->name().latin1());
- return false;
- }
- }
- return true;
- }
-
- const TQString & qvar(const TQString &s)
- {
- TQString *p = vars.find(s);
- if(p)
- return *p;
- else
- return blank;
- }
-
- TQString expandIncludes(const TQString &inc)
- {
- return TQString("-I") + inc;
- }
-
- TQString expandLibs(const TQString &lib)
- {
- return TQString("-L") + lib;
- }
-
- int doCommand(const TQString &s)
- {
- //printf("[%s]\n", s.latin1());
- int r = system((s + " 1>/dev/null 2>/dev/null").latin1());
- //printf("returned: %d\n", r);
- return r;
- }
-
- bool doCompileAndLink(const TQString &filedata, const TQString &flags, int *retcode=0)
- {
- TQDir dir(".");
- TQString fname = "atest.c";
- TQString out = "atest";
- TQFile f(fname);
- TQCString cs = filedata.latin1();
- if(!f.open(IO_WriteOnly | IO_Truncate))
- return false;
- f.writeBlock(cs.data(), cs.length());
- f.close();
-
- TQString str = qvar("QMAKE_CC") + ' ' + fname + " -o " + out + ' ' + flags;
- int r = doCommand(str);
- if(r == 0 && retcode)
- *retcode = doCommand(TQString("./") + out);
- dir.remove(fname);
- dir.remove(out);
- if(r != 0)
- return false;
- return true;
- }
-
- bool checkHeader(const TQString &path, const TQString &h)
- {
- TQFileInfo fi(path + '/' + h);
- if(fi.exists())
- return true;
- return false;
- }
-
- bool findHeader(const TQString &h, const TQStringList &ext, TQString *inc)
- {
- if(checkHeader("/usr/include", h)) {
- *inc = "";
- return true;
- }
- TQStringList dirs;
- dirs += "/usr/local/include";
- dirs += ext;
- for(TQStringList::ConstIterator it = dirs.begin(); it != dirs.end(); ++it) {
- if(checkHeader(*it, h)) {
- *inc = *it;
- return true;
- }
- }
- return false;
- }
-
- bool checkLibrary(const TQString &path, const TQString &name)
- {
- TQString str =
- "int main()\n"
- "{\n"
- " return 0;\n"
- "}\n";
-
- TQString extra;
- if(!path.isEmpty())
- extra += TQString("-L") + path + ' ';
- extra += TQString("-l") + name;
- if(!doCompileAndLink(str, extra))
- return false;
- return true;
- }
-
- bool findLibrary(const TQString &name, TQString *lib)
- {
- if(checkLibrary("", name)) {
- *lib = "";
- return true;
- }
- if(checkLibrary("/usr/local/lib", name)) {
- *lib = "/usr/local/lib";
- return true;
- }
- if(checkLibrary("/usr/local/lib64", name)) {
- *lib = "/usr/local/lib64";
- return true;
- }
- return false;
- }
-
- void addDefine(const TQString &str)
- {
- if(DEFINES.isEmpty())
- DEFINES = str;
- else
- DEFINES += TQString(" ") + str;
- }
-
- void addLib(const TQString &str)
- {
- if(LIBS.isEmpty())
- LIBS = str;
- else
- LIBS += TQString(" ") + str;
- }
-
- void addIncludePath(const TQString &str)
- {
- if(INCLUDEPATH.isEmpty())
- INCLUDEPATH = str;
- else
- INCLUDEPATH += TQString(" ") + str;
- }
-
- void addExtra(const TQString &str)
- {
- extra += str + '\n';
- }
-
- TQString DEFINES;
- TQString INCLUDEPATH;
- TQString LIBS;
- TQString extra;
-
-private:
- ConfObjList list;
- TQDict<TQString> vars;
- TQString blank;
-};
-
-ConfObj::ConfObj(Conf *c)
-{
- conf = c;
- conf->added(this);
- required = false;
- disabled = false;
-}
-
-ConfObj::~ConfObj()
-{
-}
-
-#include"modules.cpp"
-
-//----------------------------------------------------------------------------
-// main
-//----------------------------------------------------------------------------
-int main()
-{
- Conf *conf = new Conf;
- ConfObj *o;
- o = 0;
-#include"modules_new.cpp"
-
- printf("ok\n");
- bool success = false;
- if(conf->exec()) {
- TQFile f("conf.pri");
- if(!f.open(IO_WriteOnly | IO_Truncate)) {
- printf("Error writing %s\n", f.name().latin1());
- return 1;
- }
-
- TQString str;
- str += "# qconf\n";
- str += "QT_PATH_PLUGINS = " + TQString(tqInstallPathPlugins()) + '\n';
- if(!conf->DEFINES.isEmpty())
- str += "DEFINES += " + conf->DEFINES + '\n';
- if(!conf->INCLUDEPATH.isEmpty())
- str += "INCLUDEPATH += " + conf->INCLUDEPATH + '\n';
- if(!conf->LIBS.isEmpty())
- str += "LIBS += " + conf->LIBS + '\n';
- if(!conf->extra.isEmpty())
- str += conf->extra;
- str += '\n';
-
- char *p = getenv("BINDIR");
- if(p) {
- str += TQString("target.path = ") + p + '\n';
- str += "INSTALLS += target\n";
- }
-
- TQCString cs = str.latin1();
- f.writeBlock(cs.data(), cs.length());
- f.close();
- success = true;
- }
- delete conf;
-
- if(success)
- return 0;
- else
- return 1;
-}
-
-EOT
-cat >$1/conf.pro <<EOT
-TEMPLATE = app
-CONFIG += qt x11 thread console
-TARGET = conf
-INCLUDEPATH += '/usr/include/tqt'
-
-DEFINES += X11_INC='"\$\$QMAKE_INCDIR_X11"'
-DEFINES += X11_LIBDIR='"\$\$QMAKE_LIBDIR_X11"'
-DEFINES += X11_LIB='"\$\$QMAKE_LIBS_X11"'
-DEFINES += CC='"\$\$QMAKE_CC"'
-
-SOURCES += conf.cpp
-
-EOT
-}
-
-export TQTDIR
-export QC_WITH_OPENSSL_INC
-export QC_WITH_OPENSSL_LIB
-rm -rf .qconftemp
-(
- mkdir .qconftemp
- gen_files .qconftemp
- cd .qconftemp
- $qm conf.pro >/dev/null
- TQTDIR=$TQTDIR make clean >/dev/null 2>&1
- TQTDIR=$TQTDIR make >../conf.log 2>&1
-)
-
-if [ "$?" != "0" ]; then
- rm -rf .qconftemp
- echo fail
- echo
- echo "There was an error compiling 'conf'. Be sure you have a proper"
- echo "TQt 3.x Multithreaded (MT) build environment set up."
- if [ ! -f "$TQTDIR/lib/libtqt-mt.so.3" ]; then
- if [ ! -f "$TQTDIR/lib64/libtqt-mt.so.3" ]; then
- echo
- echo "One possible reason is that you don't have"
- echo "libtqt-mt.so.3 installed in $TQTDIR/lib/"
- echo "or $TQTDIR/lib64/."
- fi
- fi
- echo
- exit 1;
-fi
-
-.qconftemp/conf
-ret="$?"
-if [ "$ret" = "1" ]; then
- rm -rf .qconftemp
- echo
- exit 1;
-else
- if [ "$ret" != "0" ]; then
- rm -rf .qconftemp
- echo fail
- echo
- echo Unexpected error launching 'conf'
- echo
- exit 1;
- fi
-fi
-rm -rf .qconftemp
-
-if [ -x "./qcextra" ]; then
- ./qcextra
-fi
-# run tqmake
-if expr "$DEB_BUILD_OPTIONS" : ".*nostrip"; then
- $qm QMAKE_STRIP=true qca-tls.pro
-else
- $qm qca-tls.pro
-fi
-if [ "$?" != "0" ]; then
- echo
- exit 1;
-fi
-cat >Makefile.tmp <<EOT
-export TQTDIR = $TQTDIR
-EOT
-cat Makefile >> Makefile.tmp
-rm -f Makefile
-cp -f Makefile.tmp Makefile
-rm -f Makefile.tmp
-
-echo
-echo Good, your configure finished. Now run \'make\'.
-echo
diff --git a/openssl.qcm b/openssl.qcm
deleted file mode 100644
index 242ad20..0000000
--- a/openssl.qcm
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
------BEGIN QCMOD-----
-name: OpenSSL
-arg: with-openssl-inc=[path],Path to OpenSSL include files
-arg: with-openssl-lib=[path],Path to OpenSSL library files
------END QCMOD-----
-*/
-class qc_openssl : public ConfObj
-{
-public:
- qc_openssl(Conf *c) : ConfObj(c) {}
- QString name() const { return "OpenSSL"; }
- QString shortname() const { return "openssl"; }
- bool exec()
- {
- QString inc, lib;
- QString s;
- bool kb = false;
- QString kbdir = "/usr/kerberos/include";
-
- // Redhat 9?
- if(QFileInfo(kbdir).exists())
- kb = true;
-
- s = conf->getenv("QC_WITH_OPENSSL_INC");
- if(!s.isEmpty()) {
- if(!conf->checkHeader(s, "openssl/ssl.h"))
- return false;
- inc = s;
- }
- else {
- if(!conf->findHeader("openssl/ssl.h", QStringList(), &s))
- return false;
- inc = s;
- }
-
- s = conf->getenv("QC_WITH_OPENSSL_LIB");
- if(!s.isEmpty()) {
- if(!conf->checkLibrary(s, "ssl"))
- return false;
- lib = s;
- }
- else {
- if(!conf->findLibrary("ssl", &s))
- return false;
- lib = s;
- }
-
- // is it at least openssl 0.9.7?
- QString str =
- "#include<openssl/opensslv.h>\n"
- "int main()\n"
- "{\n"
- " unsigned long x = OPENSSL_VERSION_NUMBER;\n"
- " if(x >= 0x00907000) return 0; else return 1;\n"
- "}\n";
- QString ext;
- if(!inc.isEmpty())
- ext += QString("-I") + inc + ' ';
- if(kb)
- ext += QString("-I") + kbdir + ' ';
- if(!lib.isEmpty())
- ext += QString("-L") + lib + " -lssl -lcrypto ";
- int ret;
- if(!conf->doCompileAndLink(str, ext, &ret))
- return false;
- if(ret == 0)
- conf->addDefine("OSSL_097");
-
- if(!inc.isEmpty())
- conf->addIncludePath(inc);
- if(kb)
- conf->addIncludePath(kbdir);
- if(!lib.isEmpty())
- conf->addLib(QString("-L") + s);
- conf->addLib("-lssl -lcrypto");
-
- return true;
- }
-};
diff --git a/prepare b/prepare
deleted file mode 100755
index d7936f4..0000000
--- a/prepare
+++ /dev/null
@@ -1,5 +0,0 @@
-#!/bin/sh
-
-cp ../../src/qca.h .
-cp ../../src/qcaprovider.h .
-
diff --git a/qca-tls.pro b/qca-tls.pro
deleted file mode 100644
index 74bd997..0000000
--- a/qca-tls.pro
+++ /dev/null
@@ -1,26 +0,0 @@
-# tqca-tls qmake profile
-
-TEMPLATE = lib
-CONFIG += qt thread release plugin
-TARGET = tqca-tls
-
-!exists(qcaprovider.h) {
- Q_PREFIX = ../../src
- INCLUDEPATH += $$Q_PREFIX
-}
-HEADERS += ($$Q_PREFIX)qcaprovider.h
-
-HEADERS = tqca-tls.h
-SOURCES = tqca-tls.cpp
-
-DEFINES += TQCA_PLUGIN
-win32:{
- DEFINES += TQCA_PLUGIN_DLL OSSL_097
- INCLUDEPATH += c:\local\include
- LIBS += c:\local\lib\libeay32.lib c:\local\lib\ssleay32.lib
-}
-
-include(conf.pri)
-include(extra.pri)
-
-QMAKE_PROJECT_DEPTH=0
diff --git a/qca-tls.qc b/qca-tls.qc
deleted file mode 100644
index 91179cf..0000000
--- a/qca-tls.qc
+++ /dev/null
@@ -1,9 +0,0 @@
-<qconf>
- <name>tqca-tls</name>
- <profile>qca-tls.pro</profile>
- <noprefix/>
- <dep type='openssl'>
- <required/>
- </dep>
- <moddir>.</moddir>
-</qconf>
diff --git a/qcextra b/qcextra
deleted file mode 100755
index fef4f18..0000000
--- a/qcextra
+++ /dev/null
@@ -1,9 +0,0 @@
-#!/bin/sh
-
-cat >extra.pri <<EOT
-target.path=\$\$QT_PATH_PLUGINS/crypto
-INSTALLS += target
-
-INSTALL_ROOT = $PREFIX
-
-EOT