-
-
Save theshadowx/438297ac465874a5e226 to your computer and use it in GitHub Desktop.
#!/bin/bash | |
set -e | |
# Install NaCl | |
wget http://storage.googleapis.com/nativeclient-mirror/nacl/nacl_sdk/nacl_sdk.zip | |
unzip nacl_sdk.zip | |
rm nacl_sdk.zip | |
nacl_sdk/naclsdk list | |
# get the latest stable bender | |
nacl_sdk/naclsdk install pepper_47 | |
NACL_SDK_ROOT=$(pwd)/$(find ./nacl_sdk -maxdepth 1 -type d -name "pepper*") | |
echo "export NACL_SDK_ROOT=$NACL_SDK_ROOT">> ~/.bashrc | |
source ~/.bashrc | |
# Checkout Qt 5.6.0 | |
git clone git://code.qt.io/qt/qt5.git Qt5.6 | |
cd Qt5.6 | |
git checkout 5.6 | |
perl init-repository | |
git checkout 5.6 | |
cd .. | |
cd Qt5.6/qtbase | |
git checkout wip/nacl | |
cd ../qtdeclarative | |
git checkout wip/nacl | |
cd ../qtxmlpatterns | |
git apply ../../qtxmlpatterns.patch | |
cd ../.. | |
mkdir QtNaCl_56 | |
cd QtNaCl_56 | |
../Qt5.6/qtbase/nacl-configure linux_x86_newlib release 64 | |
make module-qtbase -j6 | |
make module-qtdeclarative -j6 | |
make module-qtquickcontrols -j6 | |
#running the example | |
# cd ../Qt5.4.2/qtdeclarative/examples/nacl | |
# mkdir build | |
# cd build | |
# ../../../../../QtNacl_5.4/qtbase/bin/qmake .. | |
# make | |
# ../../../../../QtNacl_5.4/qtbase/bin/nacldeployqt nacl.nexe --run |
diff --git a/tools/tools.pro b/tools/tools.pro | |
index 92bbaca..0040747 100644 | |
--- a/tools/tools.pro | |
+++ b/tools/tools.pro | |
@@ -1,9 +1,11 @@ | |
TEMPLATE = subdirs | |
load(qfeatures) | |
-!android|android_app { | |
- SUBDIRS += xmlpatterns | |
- !contains(QT_DISABLED_FEATURES, xmlschema) { | |
- SUBDIRS += xmlpatternsvalidator | |
+!nacl { | |
+ !android|android_app { | |
+ SUBDIRS += xmlpatterns | |
+ !contains(QT_DISABLED_FEATURES, xmlschema) { | |
+ SUBDIRS += xmlpatternsvalidator | |
+ } | |
} | |
} | |
diff --git a/tools/xmlpatterns/xmlpatterns.pro b/tools/xmlpatterns/xmlpatterns.pro | |
index 0f1ee4f..1172883 100644 | |
--- a/tools/xmlpatterns/xmlpatterns.pro | |
+++ b/tools/xmlpatterns/xmlpatterns.pro | |
@@ -14,4 +14,4 @@ HEADERS = main.h \ | |
load(qt_tool) | |
# with c++11 / __STRICT_ANSI__ mingw.org stdio.h doesn't declare e.g. _fileno | |
-win32-g++*: QMAKE_CXXFLAGS_CXX11 = -std=gnu++0x | |
\ No newline at end of file | |
+win32-g++*: QMAKE_CXXFLAGS_CXX11 = -std=gnu++0x | |
diff --git a/tools/xmlpatternsvalidator/xmlpatternsvalidator.pro b/tools/xmlpatternsvalidator/xmlpatternsvalidator.pro | |
index af9469f..21b1b18 100644 | |
--- a/tools/xmlpatternsvalidator/xmlpatternsvalidator.pro | |
+++ b/tools/xmlpatternsvalidator/xmlpatternsvalidator.pro | |
@@ -1,6 +1,8 @@ | |
-QT = core xmlpatterns | |
+!nacl { | |
+ QT = core xmlpatterns | |
-SOURCES = main.cpp | |
-HEADERS = main.h | |
+ SOURCES = main.cpp | |
+ HEADERS = main.h | |
-load(qt_tool) | |
+ load(qt_tool) | |
+} |
no need, if you use the script and everything goes well, you should find QtNaCl_56 in the same directory as the script
In addition, I noticed that in docker command stand QtNaCl_5.4 and script creates QtNaCl_56...
Just forget about the script:
My apologies, I have given you bad docker command line.
Here is what should be done (I have just tested in my machine)
Qmake
I have added workdir argument so it will make things easier. we need just to call qmake add the path to the directory where .pro is present, I presume here that your main .pro is in /home/komche/RD_stage.
sudo docker run --rm -it -v /home/komche/CheckRD:/home/komche/RD_stage -w=/home/komche/RD_stage theshadowx/qt_nacl:pepper47_qt56 /opt/QtNaCl_56/qtbase/bin/qmake ..
Make
The Makefile has been generated in the previous command so as we are setting the workdir as build we need just to call make
sudo docker run --rm -it -v /home/komche/CheckRD:/home/komche/RD_stage -w=/home/komche/RD_stage theshadowx/qt_nacl:pepper47_qt56 make
Deploy
Just be sure that the file generated is CheckRD.bc
sudo docker run --rm -it -v /home/komche/CheckRD:/home/komche/RD_stage -p 8000:8000 -w=/home/komche/RD_stage theshadowx/qt_nacl:pepper47_qt56 /opt/QtNaCl_56/qtbase/bin/nacldeployqt CheckRD.bc --run
Hi, you are right. this is project folder
However, I tried different commands you gave but next error always arises as follows:
komche@komche-K56CM:~$ sudo docker run --rm -it -v /home/komche/CheckRD:/home/komche/RD_stage theshadowx/qt_nacl:pepper47_qt56 bash -c "/opt/QtNaCl_56/qtbase/bin/qmake /home/komche/RD_stage -o /home/komcheRD_stage/build/"
Cannot read /home/komche/RD_stage: file to open is a directory
Error processing project file: /home/komche/RD_stage
komche@komche-K56CM:~$ sudo docker run --rm -it -v /home/komche/CheckRD:/home/komche/RD_stage theshadowx/qt_nacl:pepper47_qt56 /opt/QtNaCl_56/qtbase/bin/qmake /home/komche/RD_stage -o /home/komche/RD_stage/build/
Cannot read /home/komche/RD_stage: file to open is a directory
Error processing project file: /home/komche/RD_stage
komche@komche-K56CM:~$ sudo docker run --rm -it -v /home/komche/CheckRD:/home/komche/RD_stage -w=/home/komche/RD_stage theshadowx/qt_nacl:pepper47_qt56 /opt/QtNaCl_56/qtbase/bin/qmake ..
Cannot read /home/komche: file to open is a directory
Error processing project file: ..
From the picture, the project folder is RD_stage and not CheckRD that's why it doesn't work. Then the commands should be as the following :
Qmake
sudo docker run --rm -it -v /home/komche/RD_stage:/home/komche/RD_stage -w=/home/komche/RD_stage/build theshadowx/qt_nacl:pepper47_qt56 /opt/QtNaCl_56/qtbase/bin/qmake ..
Make
sudo docker run --rm -it -v /home/komche/RD_stage:/home/komche/RD_stage -w=/home/komche/RD_stage/build theshadowx/qt_nacl:pepper47_qt56 make
Deploy
sudo docker run --rm -it -v /home/komche/RD_stage:/home/komche/RD_stage -p 8000:8000 -w=/home/komche/RD_stage/build theshadowx/qt_nacl:pepper47_qt56 /opt/QtNaCl_56/qtbase/bin/nacldeployqt CheckRD.bc --run
Hi Ali!
Finally the makefile has been generated but only with this command:
komche@komche-K56CM:~$ sudo docker run --rm -it -v /home/komche/RD_stage:/home/komche/RD_stage theshadowx/qt_nacl:pepper47_qt56 /opt/QtNaCl_56/qtbase/bin/qmake /home/komche/RD_stage -o /home/komche/RD_stage/build/
Then I started command for make as follows:
komche@komche-K56CM:~$ sudo docker run --rm -it -v /home/komche/RD_stage:/home/komche/RD_stage theshadowx/qt_nacl:pepper47_qt56 bash -c "cd /home/komche/RD_stage/build && make"
after the process has started in this way, but has stoped with error as follows
komche@komche-K56CM:~$ sudo docker run --rm -it -v /home/komche/RD_stage:/home/komche/RD_stage theshadowx/qt_nacl:pepper47_qt56 bash -c "cd /home/komche/RD_stage/build && make"
/opt/QtNaCl_56/qtbase/bin/uic ../service.ui -o ui_service.h
/opt/nacl_sdk/pepper_47/toolchain/linux_x86_newlib/bin/x86_64-nacl-g++ -m64 -c -pipe -O2 -std=gnu++0x -Wall -W -fPIC -DQ_OS_NACL_PEPPER -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I../../RD_stage -I. -I/opt/QtNaCl_56/qtbase/include -I/opt/QtNaCl_56/qtbase/include/QtWidgets -I/opt/QtNaCl_56/qtbase/include/QtGui -I/opt/QtNaCl_56/qtbase/include/QtCore -I. -I. -I/opt/nacl_sdk/pepper_47/include -I/opt/Qt5.6/qtbase/mkspecs/unsupported/nacl-x86-newlib-g++-64 -o main.o ../main.cpp
/opt/nacl_sdk/pepper_47/toolchain/linux_x86_newlib/bin/x86_64-nacl-g++ -m64 -c -pipe -O2 -std=gnu++0x -Wall -W -fPIC -DQ_OS_NACL_PEPPER -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I../../RD_stage -I. -I/opt/QtNaCl_56/qtbase/include -I/opt/QtNaCl_56/qtbase/include/QtWidgets -I/opt/QtNaCl_56/qtbase/include/QtGui -I/opt/QtNaCl_56/qtbase/include/QtCore -I. -I. -I/opt/nacl_sdk/pepper_47/include -I/opt/Qt5.6/qtbase/mkspecs/unsupported/nacl-x86-newlib-g++-64 -o service.o ../service.cpp
/opt/nacl_sdk/pepper_47/toolchain/linux_x86_newlib/bin/x86_64-nacl-g++ -m64 -c -pipe -O2 -std=gnu++0x -Wall -W -fPIC -DQ_OS_NACL_PEPPER -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I../../RD_stage -I. -I/opt/QtNaCl_56/qtbase/include -I/opt/QtNaCl_56/qtbase/include/QtWidgets -I/opt/QtNaCl_56/qtbase/include/QtGui -I/opt/QtNaCl_56/qtbase/include/QtCore -I. -I. -I/opt/nacl_sdk/pepper_47/include -I/opt/Qt5.6/qtbase/mkspecs/unsupported/nacl-x86-newlib-g++-64 -o originfpl.o ../originfpl.cpp
/opt/nacl_sdk/pepper_47/toolchain/linux_x86_newlib/bin/x86_64-nacl-g++ -m64 -c -pipe -O2 -std=gnu++0x -Wall -W -fPIC -DQ_OS_NACL_PEPPER -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I../../RD_stage -I. -I/opt/QtNaCl_56/qtbase/include -I/opt/QtNaCl_56/qtbase/include/QtWidgets -I/opt/QtNaCl_56/qtbase/include/QtGui -I/opt/QtNaCl_56/qtbase/include/QtCore -I. -I. -I/opt/nacl_sdk/pepper_47/include -I/opt/Qt5.6/qtbase/mkspecs/unsupported/nacl-x86-newlib-g++-64 -o anime.o ../anime.cpp
../anime.cpp:11: warning: unused parameter 'parent'
../anime.cpp: In member function 'void Anime::setXY(QList, QList)':
../anime.cpp:38: warning: comparison between signed and unsigned integer expressions
/opt/nacl_sdk/pepper_47/toolchain/linux_x86_newlib/bin/x86_64-nacl-g++ -m64 -c -pipe -O2 -std=gnu++0x -Wall -W -fPIC -DQ_OS_NACL_PEPPER -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I../../RD_stage -I. -I/opt/QtNaCl_56/qtbase/include -I/opt/QtNaCl_56/qtbase/include/QtWidgets -I/opt/QtNaCl_56/qtbase/include/QtGui -I/opt/QtNaCl_56/qtbase/include/QtCore -I. -I. -I/opt/nacl_sdk/pepper_47/include -I/opt/Qt5.6/qtbase/mkspecs/unsupported/nacl-x86-newlib-g++-64 -o rd-artem.nexe_plugin_import.o rd-artem.nexe_plugin_import.cpp
/opt/QtNaCl_56/qtbase/bin/rcc -name src ../src.qrc -o qrc_src.cpp
/opt/nacl_sdk/pepper_47/toolchain/linux_x86_newlib/bin/x86_64-nacl-g++ -m64 -c -pipe -O2 -std=gnu++0x -Wall -W -fPIC -DQ_OS_NACL_PEPPER -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I../../RD_stage -I. -I/opt/QtNaCl_56/qtbase/include -I/opt/QtNaCl_56/qtbase/include/QtWidgets -I/opt/QtNaCl_56/qtbase/include/QtGui -I/opt/QtNaCl_56/qtbase/include/QtCore -I. -I. -I/opt/nacl_sdk/pepper_47/include -I/opt/Qt5.6/qtbase/mkspecs/unsupported/nacl-x86-newlib-g++-64 -o qrc_src.o qrc_src.cpp
/opt/QtNaCl_56/qtbase/bin/moc -DQ_OS_NACL_PEPPER -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I/opt/Qt5.6/qtbase/mkspecs/unsupported/nacl-x86-newlib-g++-64 -I/home/komche/RD_stage -I/opt/QtNaCl_56/qtbase/include -I/opt/QtNaCl_56/qtbase/include/QtWidgets -I/opt/QtNaCl_56/qtbase/include/QtGui -I/opt/QtNaCl_56/qtbase/include/QtCore -I. -I/opt/nacl_sdk/pepper_47/toolchain/linux_x86_newlib/x86_64-nacl/include/c++/4.4.3 -I/opt/nacl_sdk/pepper_47/toolchain/linux_x86_newlib/x86_64-nacl/include/c++/4.4.3/x86_64-nacl -I/opt/nacl_sdk/pepper_47/toolchain/linux_x86_newlib/x86_64-nacl/include/c++/4.4.3/backward -I/opt/nacl_sdk/pepper_47/toolchain/linux_x86_newlib/lib/gcc/x86_64-nacl/4.4.3/include -I/opt/nacl_sdk/pepper_47/toolchain/linux_x86_newlib/lib/gcc/x86_64-nacl/4.4.3/include-fixed -I/opt/nacl_sdk/pepper_47/toolchain/linux_x86_newlib/x86_64-nacl/include ../service.h -o moc_service.cpp
/opt/nacl_sdk/pepper_47/toolchain/linux_x86_newlib/bin/x86_64-nacl-g++ -m64 -c -pipe -O2 -std=gnu++0x -Wall -W -fPIC -DQ_OS_NACL_PEPPER -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I../../RD_stage -I. -I/opt/QtNaCl_56/qtbase/include -I/opt/QtNaCl_56/qtbase/include/QtWidgets -I/opt/QtNaCl_56/qtbase/include/QtGui -I/opt/QtNaCl_56/qtbase/include/QtCore -I. -I. -I/opt/nacl_sdk/pepper_47/include -I/opt/Qt5.6/qtbase/mkspecs/unsupported/nacl-x86-newlib-g++-64 -o moc_service.o moc_service.cpp
/opt/QtNaCl_56/qtbase/bin/moc -DQ_OS_NACL_PEPPER -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I/opt/Qt5.6/qtbase/mkspecs/unsupported/nacl-x86-newlib-g++-64 -I/home/komche/RD_stage -I/opt/QtNaCl_56/qtbase/include -I/opt/QtNaCl_56/qtbase/include/QtWidgets -I/opt/QtNaCl_56/qtbase/include/QtGui -I/opt/QtNaCl_56/qtbase/include/QtCore -I. -I/opt/nacl_sdk/pepper_47/toolchain/linux_x86_newlib/x86_64-nacl/include/c++/4.4.3 -I/opt/nacl_sdk/pepper_47/toolchain/linux_x86_newlib/x86_64-nacl/include/c++/4.4.3/x86_64-nacl -I/opt/nacl_sdk/pepper_47/toolchain/linux_x86_newlib/x86_64-nacl/include/c++/4.4.3/backward -I/opt/nacl_sdk/pepper_47/toolchain/linux_x86_newlib/lib/gcc/x86_64-nacl/4.4.3/include -I/opt/nacl_sdk/pepper_47/toolchain/linux_x86_newlib/lib/gcc/x86_64-nacl/4.4.3/include-fixed -I/opt/nacl_sdk/pepper_47/toolchain/linux_x86_newlib/x86_64-nacl/include ../originfpl.h -o moc_originfpl.cpp
/opt/nacl_sdk/pepper_47/toolchain/linux_x86_newlib/bin/x86_64-nacl-g++ -m64 -c -pipe -O2 -std=gnu++0x -Wall -W -fPIC -DQ_OS_NACL_PEPPER -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I../../RD_stage -I. -I/opt/QtNaCl_56/qtbase/include -I/opt/QtNaCl_56/qtbase/include/QtWidgets -I/opt/QtNaCl_56/qtbase/include/QtGui -I/opt/QtNaCl_56/qtbase/include/QtCore -I. -I. -I/opt/nacl_sdk/pepper_47/include -I/opt/Qt5.6/qtbase/mkspecs/unsupported/nacl-x86-newlib-g++-64 -o moc_originfpl.o moc_originfpl.cpp
/opt/QtNaCl_56/qtbase/bin/moc -DQ_OS_NACL_PEPPER -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I/opt/Qt5.6/qtbase/mkspecs/unsupported/nacl-x86-newlib-g++-64 -I/home/komche/RD_stage -I/opt/QtNaCl_56/qtbase/include -I/opt/QtNaCl_56/qtbase/include/QtWidgets -I/opt/QtNaCl_56/qtbase/include/QtGui -I/opt/QtNaCl_56/qtbase/include/QtCore -I. -I/opt/nacl_sdk/pepper_47/toolchain/linux_x86_newlib/x86_64-nacl/include/c++/4.4.3 -I/opt/nacl_sdk/pepper_47/toolchain/linux_x86_newlib/x86_64-nacl/include/c++/4.4.3/x86_64-nacl -I/opt/nacl_sdk/pepper_47/toolchain/linux_x86_newlib/x86_64-nacl/include/c++/4.4.3/backward -I/opt/nacl_sdk/pepper_47/toolchain/linux_x86_newlib/lib/gcc/x86_64-nacl/4.4.3/include -I/opt/nacl_sdk/pepper_47/toolchain/linux_x86_newlib/lib/gcc/x86_64-nacl/4.4.3/include-fixed -I/opt/nacl_sdk/pepper_47/toolchain/linux_x86_newlib/x86_64-nacl/include ../anime.h -o moc_anime.cpp
/opt/nacl_sdk/pepper_47/toolchain/linux_x86_newlib/bin/x86_64-nacl-g++ -m64 -c -pipe -O2 -std=gnu++0x -Wall -W -fPIC -DQ_OS_NACL_PEPPER -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I../../RD_stage -I. -I/opt/QtNaCl_56/qtbase/include -I/opt/QtNaCl_56/qtbase/include/QtWidgets -I/opt/QtNaCl_56/qtbase/include/QtGui -I/opt/QtNaCl_56/qtbase/include/QtCore -I. -I. -I/opt/nacl_sdk/pepper_47/include -I/opt/Qt5.6/qtbase/mkspecs/unsupported/nacl-x86-newlib-g++-64 -o moc_anime.o moc_anime.cpp
/opt/nacl_sdk/pepper_47/toolchain/linux_x86_newlib/bin/x86_64-nacl-g++ -Wl,-O1 -o RD-Artem.nexe main.o service.o originfpl.o anime.o rd-artem.nexe_plugin_import.o qrc_src.o moc_service.o moc_originfpl.o moc_anime.o -L/opt/nacl_sdk/pepper_47/lib/newlib_x86_64/Release -L/opt/QtNaCl_56/qtbase/lib -lQt5Widgets -L/opt/QtNaCl_56/qtbase/plugins/imageformats -lqico -lQt5Gui -lerror_handling -lqtharfbuzzng -lqtfreetype -lQt5Core -lppapi -lppapi_cpp -lqtpcre -lm -lppapi_gles2
/opt/nacl_sdk/pepper_47/lib/newlib_x86_64/Release/libppapi_cpp.a(ppp_entrypoints_x86_64.o): In function PPP_InitializeModule': /mnt/data/b/build/slave/sdk-rel/build/src/out/pepper_47/src/ppapi_cpp/ppp_entrypoints.cc:36: undefined reference to
pp::CreateModule()'
collect2: ld returned 1 exit status
Makefile:162: recipe for target 'RD-Artem.nexe' failed
make: *** [RD-Artem.nexe] Error 1
the main function should be modified.
Have a look at :
https://github.com/msorvig/qt-nacl-manualtests/tree/dev/window_widgets
Hi, thank you for clarification of the main function. I read the your previous description:
@bgrasic here is how the main.cpp should look like
#include
#include
#include "analogclock.h"
AnalogClock *clockA = 0;
// App-provided init and exit functions:
void app_init(int argc, char **argv)
{
clockA = new AnalogClock;
clockA->show();
}
void app_exit()
{
delete clockA;
}
// Register functions with Qt. The type of register function
// selects the QApplicaiton type.
Q_GUI_MAIN(app_init, app_exit);
and inserted some changes in mine project in such way
#include "service.h"
//#include <QApplication>
//#include <QObject>
#include <QtCore>
#include <QtGui>
Service *w = 0;
void app_init(int argc, char **argv)
//int app_init(int argc, char *argv[])
{
//QApplication a(argc, argv);
//Service w;
w = new Service;
//w.show();
w->show();
//return a.exec();
}
void app_exit()
{
delete w;
}
Q_GUI_MAIN(app_init, app_exit);
Then, finaly project has been compiled. Here is the content of buid folder:
After I used run command like this:
sudo docker run --rm -it -p 8000:8000 -v /home/komche/RD_stage:/home/komche/RD_stage theshadowx/qt_nacl:pepper47_qt56 bash -c "cd /home/komche/RD_stage/build && /opt/QtNaCl_56/qtbase/bin/nacldeployqt RD-Artem.nexe --run"
Using Chrome (version 56.0.2924.87 (64-bit)) I linked to http://172.17.0.1:8000/, but unfortunately I saw only white screen with frame and the name of the project((
So do I, and also was reported by some people here. I couldn't debug it as the debug option works just for Mac OS.
I think it's better to contact the person maintaining nacl-wip branch in Qt --> https://github.com/msorvig
Thank you very much for your support. I appreciate that.
Ok, I will try to contact with him, but Have you already contacted with him?
Yes, but not for this issue.
https://github.com/msorvig/qt5-qtbase-nacl/issues
The nacl-wip branch in Qt hasn't been updated since last year.
Hi Ali!
Did you read this article on official Google web-site:
@kom1che thanks for this info.
hope Qt guys will make Qt able to work with WebAssembly.
Here is one more article I've found:
https://qtandeverything.blogspot.com/2017/06/qt-for-web-assembly.html?showComment=1497088985199
Thanks, that's great !!!
@kom1che here is porting webassembly to qt https://github.com/msorvig/qt-webassembly-examples
May be I need to launch your script inside /opt ?