Giter Site home page Giter Site logo

moc-ng's Introduction

moc-ng:  a replacement for Qt's moc that is using clang libraries

This is really two project:

  * A plugin for clang which removes the needs of running moc
    if your code is compiled with this plugin.

  * A replacement for moc that aim to be compatible with qt's moc,
    but uses the clang libraries for the parsing step.

Read the blog post:  http://woboq.com/blog/moc-with-clang.html

BROWSE SOURCE CODE ONLINE:
http://code.woboq.org/mocng/src/

COMPILE:

You need llvm and clang (3.2 or 3.3).
Then run cmake and make (adapt your paths)

 cmake . -DCMAKE_CXX_COMPILER=/opt/llvm/bin/clang++  -DLLVM_CONFIG_EXECUTABLE=/opt/llvm/bin/llvm-config
 make

USE:

 * As a binary:  replace the moc provided by Qt by the one which is in src/moc

 * As a clang plugin: Tell your build system not to run moc, and add this to the CXXFLAGS
    -Xclang -load  -Xclang /path/to/src/libmocng_plugin.so -Xclang -add-plugin -Xclang moc

PROBLEMS?

Make sure that the Qt include paths (and other include paths) are correctly passed to moc via the -I option

Report bugs on github: https://github.com/woboq/moc-ng/issues

TESTS:

Replace the moc binary in the builddir (qtbase/bin/moc)  and run the tests.

Known issue:
 * FAIL!  : tst_QObject::normalize() 'object.connect(&object, SIGNAL(unsignedlongintSignal(unsigned long int)), SLOT(unsignedlongintSlot(unsigned long int)))' returned FALSE. ()
   Because unsigned long int don't have the right metatype according to Qt. And clang looses the "int" in "long int"

 * tst_qmetaobjectbuilder
   reimplements its own metaobject but still is Q_OBJECT_CHECK which we use to detect it is a QObject

(if moc is in the paths:)

 * FAIL!  : tst_Moc::warnings
   FAIL!  : tst_Moc::warnOnExtraSignalSlotQualifiaction
   FAIL!  : tst_Moc::warnOnMultipleInheritance
   FAIL!  : tst_Moc::forgottenQInterface
   FAIL!  : tst_Moc::defineMacroViaCmdline
   FAIL!  : tst_Moc::warnOnPropertyWithoutREAD
   FAIL!  : tst_Moc::warnOnVirtualSignal
   FAIL!  : tst_Moc::notifyError

   The wording of the warnings is not the same with moc ng  (it is better)

 * FAIL!  : tst_Moc::ignoreOptionClashes
   Small difference in the handling of the options

 * FAIL!  : tst_Moc::frameworkSearchPath
   Not implemented

 * FAIL!  : tst_Moc::templateGtGt()
   the header don't include QObject

 * FAIL!  : tst_Moc::unterminatedFunctionMacro()
   moc -E  to preprocess nehave differently

moc-ng's People

Contributors

ogoffart avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.