Page 1 of 1

actexec : fork sous win xp

Posted: 18 Oct 2012, 20:48
by Michel
Je lance actexec avec un script en paramètre avec windows XP (sous virtualbox), le processus se termine immédiatement, mais s'exécute quand même correctement, rendant la main à la ligne de commande dès son lancement.

Du coup c'est un peu difficile si on veut enchaîner plusieurs scripts séquentiellement.

Re: actexec : fork sous win xp

Posted: 18 Oct 2012, 20:53
by Michel
Bon, j'ai un palliatif en lançant le processus avec un start :-)

Code: Select all

C:\Program Files\Actionaz>start /WAIT actexec.exe  monscript.ascr
Par contre on ne voit pas les options de lancement quand on lance sous windows.

Re: actexec : fork sous win xp

Posted: 18 Oct 2012, 22:02
by Jmgr
Oui les programmes console sous Windows c'est vraiment pas terrible...

En fait le soucis c'est que ActExec doit être une application graphique et non console car elle peut afficher des fenêtres.
Du coup Windows n'affiche pas la sortie standard des applications graphiques.

Une raison supplémentaire pour passer sur Ubuntu (ou autre GNU/Linux) :D

Re: actexec : fork sous win xp

Posted: 19 Oct 2012, 08:05
by Michel
Jmgr wrote:Une raison supplémentaire pour passer sur Ubuntu (ou autre GNU/Linux) :D
Oh mais j'y suis :mrgreen:
l'application que je teste est sous Windows, que je lance sous VirtualBox sur ma Ubuntu 12.04. Du coup on peut conclure que que Actionaz fonctionne très bien avec Virtualbox :)
Qu'est ce qui est utilisé pour la compil sous windows? si j'ai un peu de temps, j'aimerais pouvoir "regarder sous le capot"...

Re: actexec : fork sous win xp

Posted: 19 Oct 2012, 12:44
by Jmgr
La compilation sous Windows se fait avec le compilateur de Microsoft, j'ai beau être un libriste je dois admettre que GCC sous Windows n'est pas vraiment au point : il génère des exécutables plus gros et plus lents...

Pour Windows, les étapes sont :
1) Compiler Qt avec le support du SSL (les versions binaires ne l'activent pas par défaut)
2) Compiler Qt Mobility
3) Compiler Qt Script Generator & générer les scripts & les compiler
4) Compiler les différents plugins (SQL, mediaplayer, etc.)
5) qmake -r && nmake

Il est à noter que les étapes 3 et 4 peuvent être passées, par contre cela va réduire le nombre de fonctionnalités du logiciel.
L'étape 1 dure environ une journée sur un PC moderne.

Le code source est dispo sur GitHub : https://github.com/Jmgr/actionaz
Si tu es motivé voilà la todolist : http://wiki.actionaz.org/doku.php?id=fr:todolist

Re: actexec : fork sous win xp

Posted: 20 Dec 2012, 09:13
by Michel
Après quelques jours de lutte, j'en suis à 3)
j'ai une erreur de compil pour qtscriptgenerator

Code: Select all

C:\Program Files\Microsoft Visual Studio 10.0\VC\INCLUDE\xutility(275) : error C2679: '=' binaire : aucun opérateur trouvé qui accepte un opérande de partie dro
ite de type 'rpp::pp_output_iterator<_Container>' (ou il n'existe pas de conversion acceptable)
        with
        [
            _Container=std::string
        ]
        c:\devactionaz\qtscriptgenerator\qtscriptgenerator\generator\parser\rpp\pp-iterator.h(74): peut être 'rpp::pp_output_iterator<_Container> &rpp::pp_outpu
t_iterator<_Container>::operator =(const char &)'
        with
        [
            _Container=std::string
        ]
        lors de la tentative de mise en correspondance de la liste des arguments '(rpp::pp_output_iterator<_Container>, rpp::pp_output_iterator<_Container>)'
        with
        [
            _Container=std::string
        ]
        C:\Program Files\Microsoft Visual Studio 10.0\VC\INCLUDE\xutility(2176) : voir la référence à l'instanciation de la fonction modèle '_Iter &std::_Rechec
ked<_OutIt,_OutIt>(_Iter &,_UIter)' en cours de compilation
        with
        [
            _Iter=rpp::pp_output_iterator<std::string>,
            _OutIt=rpp::pp_output_iterator<std::string>,
            _UIter=rpp::pp_output_iterator<std::string>
        ]
        c:\devactionaz\qtscriptgenerator\qtscriptgenerator\generator\parser\rpp\pp-internal.h(83) : voir la référence à l'instanciation de la fonction modèle '_
OutIt std::copy<std::_String_iterator<_Elem,_Traits,_Alloc>,_OutputIterator>(_InIt,_InIt,_OutIt)' en cours de compilation
        with
        [
            _OutIt=rpp::pp_output_iterator<std::string>,
            _Elem=char,
            _Traits=std::char_traits<char>,
            _Alloc=std::allocator<char>,
            _OutputIterator=rpp::pp_output_iterator<std::string>,
            _InIt=std::_String_iterator<char,std::char_traits<char>,std::allocator<char>>
        ]
        c:\devactionaz\qtscriptgenerator\qtscriptgenerator\generator\parser\rpp\pp-engine-bits.h(500) : voir la référence à l'instanciation de la fonction modèl
e 'void rpp::_PP_internal::output_line<_OutputIterator>(const std::string &,int,_OutputIterator)' en cours de compilation
        with
        [
            _OutputIterator=rpp::pp_output_iterator<std::string>
        ]
        c:\devactionaz\qtscriptgenerator\qtscriptgenerator\generator\parser\rpp\pp-engine-bits.h(116) : voir la référence à l'instanciation de la fonction modèl
e 'void rpp::pp::operator ()<const _Elem*,_OutputIterator>(_InputIterator,_InputIterator,_OutputIterator)' en cours de compilation
        with
        [
            _Elem=char,
            _OutputIterator=rpp::pp_output_iterator<std::string>,
            _InputIterator=const char *
        ]
        c:\devactionaz\qtscriptgenerator\qtscriptgenerator\generator\parser\rpp\pp-engine-bits.h(84) : voir la référence à l'instanciation de la fonction modèle
 'void rpp::pp::file<rpp::pp_output_iterator<_Container>>(FILE *,_OutputIterator)' en cours de compilation
        with
        [
            _Container=std::string,
            _OutputIterator=rpp::pp_output_iterator<std::string>
        ]
        c:\devactionaz\qtscriptgenerator\qtscriptgenerator\generator\main.h(130) : voir la référence à l'instanciation de la fonction modèle 'void rpp::pp::file
<rpp::pp_output_iterator<_Container>>(const std::string &,_OutputIterator)' en cours de compilation
        with
        [
            _Container=std::string,
            _OutputIterator=rpp::pp_output_iterator<std::string>
        ]
C:\Program Files\Microsoft Visual Studio 10.0\VC\INCLUDE\xutility(275) : error C2582: 'operator =' fonction non disponible dans 'rpp::pp_output_iterator<_Contai
ner>'
        with
        [
            _Container=std::string
        ]
est-ce que quelqu'un l'a compilé sous windows récemment ?


Ma config :
Win XP 32bits, Visual Studio 2010

Re: actexec : fork sous win xp

Posted: 20 Dec 2012, 10:03
by Jmgr
Ah oui j'avais oublié : il faut patcher qtscriptgenerator, voilà le sujet de StackOverflow qui m'a aidé à corriger ce bug : http://stackoverflow.com/questions/2791 ... tudio-2010
Plus précisément :
Just an update.. I've replaced the assignment line with _M_result = __v._M_result;. I think that makes more sense. Still plugging away at it.. – guesser May 8 '10 at 6:18

This fixed my problem -- qtscriptgenerator generated the bindings and it all seems to work. Thank you. I would upvote your answer, but my reputation's too low. .......... To clarify my comments here.. I replaced the _M_result.push_back(*__v._M_result.begin()); in my first comment with _M_result = __v._M_result;. – guesser May 8 '10 at 7:18

Alright, I'm a newb. I found the little check mark and accepted the answer. Thanks again. – guesser May 8 '10 at 19:10

For anyone else trying to build qtscriptgenerator with Visual Studio who stumbles upon this answer.. I will also mention that during the final stage of building the bindings, I had to hack around a couple 0-sized arrays. To get it to build, comment those out, and also comment out the for-loops that reference them (the for loops typically go from 0 to <0.. so there's no effect anyway). – guesser May 8 '10 at 19:20
En fait il y a deux choses à faire, 1) remplacer _M_result.push_back(__v); par _M_result = __v._M_result; (pas certain que la modification soit exactement celle-là; j'ai le code chez moi mais pas ici)
2) Supprimer les tableaux de taille 0 dans le code généré par le qtscriptgenerator une fois compilé

Re: actexec : fork sous win xp

Posted: 20 Dec 2012, 15:04
by Michel
Merci, je vais patcher.
Du coup, je me propose pour faire la partie "windows" de ta page compilation sur le wiki, je suis dedans jusqu'au cou !

Re: actexec : fork sous win xp

Posted: 20 Dec 2012, 17:47
by Jmgr
Bonne idée, mais à la limite c'est peut-être plus simple de faire une version pour les gens qui veulent juste avoir la dernière version du dépôt.
C'est à dire sans les bindings SQL, sans SSL (donc pas besoin de recompiler Qt) et sans le "qtscriptgenerator".
Peut-être créer un autre chapitre dédié au développeurs avec toutes les fonctionnalités activées.

Re: actexec : fork sous win xp

Posted: 20 Dec 2012, 20:17
by Michel

Pour Windows, les étapes sont :
1) Compiler Qt avec le support du SSL (les versions binaires ne l'activent pas par défaut)
2) Compiler Qt Mobility
3) Compiler Qt Script Generator & générer les scripts & les compiler
4) Compiler les différents plugins (SQL, mediaplayer, etc.)
5) qmake -r && nmake
Je pense qu'il manque OpenCV dans la liste des dépendances. Je l'ai ramené et compilé, par contre, je ne vois pas où je peux dire à Actionaz où il peut trouver les librairies et les .h, à moins d'aller modifier à la main les Makefile.

Est-ce qu'il y a un autre moyen de le faire ?

Re: actexec : fork sous win xp

Posted: 20 Dec 2012, 20:53
by Jmgr
Oui, c'est au moment de l'appel de qmake qu'on peut le passer en paramètre.
Par exemple chez moi c'est :

Code: Select all

qmake -r -spec win32-msvc2010 "CONFIG+=release" "BOOST_INCLUDE=$BOOST_INCLUDE" "OPENCV_INCLUDE=$OPENCV_INCLUDE" "OPENCV_LIB=$OPENCV_LIB" "OPENCV_LIB_CORE=$OPENCV_LIB_CORE" "OPENCV_LIB_IMGPROC=$OPENCV_LIB_IMGPROC"
Avec

Code: Select all

BOOST_INCLUDE="F:/libs/boost_1_49_0"
OPENCV_INCLUDE="F:/libs/opencv/build/include"
OPENCV32_LIB="F:/libs/opencv/build/x86/vc10/lib"
OPENCV64_LIB="F:/libs/opencv/build/x64/vc10/lib"
OPENCV_LIB_CORE="opencv_core231"
OPENCV_LIB_IMGPROC="opencv_imgproc231"

Re: actexec : fork sous win xp

Posted: 21 Dec 2012, 11:14
by Michel
j'ai une erreur de compilation sur readregistryinstance.cpp :

Code: Select all

  readregistryinstance.cpp
actions\readregistryinstance.cpp(63): error C2664: 'ActionTools::ActionInstance::setVariable' : impossible de convertir le paramètre 2 de 'QVariant' en 'const QScriptValue &'
          Raison : impossible de convertir de 'QVariant' en 'const QScriptValue'
          Aucun opérateur de conversion définie par l'utilisateur disponible qui puisse effectuer cette conversion, ou l'opérateur ne peut pas être appelé
la ligne en question est :

Code: Select all

setVariable(variable, resultValue);
Ça semble être lié à ce commit d'il y a 2 jours :
https://github.com/Jmgr/actionaz/commit ... cee945fa85
j'ai essayer de corriger, mais pour le moment, je ne vois pas comment faire rentrer un QVariant dans un QScriptValue ... :-(

Re: actexec : fork sous win xp

Posted: 21 Dec 2012, 11:24
by Jmgr
Ah, oui, c'est toujours le problème quand on développe sur un OS : penser à tester sur les autres...
Solution temporaire, ajouter

Code: Select all

#include <QScriptEngine>
au début et remplacer

Code: Select all

setVariable(variable, resultValue);
par

Code: Select all

setVariable(variable, scriptEngine()->newVariant(resultValue));

Re: actexec : fork sous win xp

Posted: 23 Dec 2012, 13:35
by Michel
j'ai un nouveau problème que je n'arrive pas à résoudre dans mon long chemin vers la compilation... décidément !

dans le répertoire gui, j'ai un problème d'édition de lien :

Code: Select all

link /LIBPATH:"c:\DevActionaz\qt-everywhere-opensource-src-4.8.4\lib" /NOLOGO /DYNAMICBASE /NXCOMPAT /DEBUG /MANIFEST /MANIFESTFILE:"generated\actionaz.
intermediate.manifest" /SUBSYSTEM:WINDOWS "/MANIFESTDEPENDENCY:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' publicKeyToken='6595b6414
4ccf1df' language='*' processorArchitecture='*'" /VERSION:3.50 /OUT:..\actionaz.exe @C:\DOCUME~1\ADMINI~1.0AC\LOCALS~1\Temp\nm3A3.tmp
main.obj : error LNK2019: symbole externe non résolu "public: void __thiscall QtSingleApplication::setActivationWindow(class QWidget *,bool)" (?setActivationWin
dow@QtSingleApplication@@QAEXPAVQWidget@@_N@Z) référencé dans la fonction _main
main.obj : error LNK2019: symbole externe non résolu "public: bool __thiscall QtSingleApplication::sendMessage(class QString const &,int)" (?sendMessage@QtSingl
eApplication@@QAE_NABVQString@@H@Z) référencé dans la fonction _main
..\actionaz.exe : fatal error LNK1120: 2 externes non résolus
NMAKE : fatal error U1077: '"C:\Program Files\Microsoft Visual Studio 10.0\VC\BIN\link.EXE"' : code retour '0x460'
Stop.
NMAKE : fatal error U1077: '"C:\Program Files\Microsoft Visual Studio 10.0\VC\BIN\nmake.exe"' : code retour '0x2'
j'en comprend qu'il me manque QtSingleApplication, que je retrouve dans actiontools\qtsingleapplication, mais je ne vois pas pourquoi le problème apparaît maintenant.

une idée ? ...

Re: actexec : fork sous win xp

Posted: 27 Dec 2012, 15:28
by Jmgr
Désolé de la réponse tardive, je n'étais pas chez moi et sans connection à Internet.

Hm, dans ce cas je tenterais d'exécuter à nouveau qmake -r et de recompiler tout le projet.