Differences between revisions 1 and 22 (spanning 21 versions)
Revision 1 as of 2008-08-03 09:05:37
Size: 3774
Editor: dslb-088-064-018-203
Comment:
Revision 22 as of 2008-09-29 22:13:44
Size: 11158
Comment:
Deletions are marked like this. Additions are marked like this.
Line 13: Line 13:
Due to things being a little complex, it's not unusual to have some problem in between. Take a look at:
 WxArt2dInstall
#CommonIssues

In this documentation there might be a certain bias towards MS Windows (MSW) systems with Visual Studio. However, wxArt2D is known to work with CygWin and natively on Linux as well. See [[WxArt2dInstallWorking|Working combinations]] for more.
Due to things being a little complex, it's not unusual to have some problem in between. You might want to take a look at the [[#CommonIssues|common issues]].

In this documentation there might be a certain bias towards MS Windows (MSW) systems with Visual Studio. However, wxArt2D is known to work with Cygwin and natively on Linux as well. See [[WxArt2dInstallWorking|Working platform and tool sets]] for more.
Line 22: Line 21:
 * Get wxWidgets, http://www.wxwidgets.org/
   * Latest released version is 2.8.8. From here on, it is assumed you use version 2.8.8, not an older version. The development branch 2.9.0 is not yet supported (there are incompatibilities), any volunteeers?
 * Get a CVS client, e.g. TortoiseCVS, http://www.tortoisecvs.org/
 * Get CMake, version 2.6 or newer, http://www.cmake.org/
 * Get wxWidgets, [[http://www.wxwidgets.org/|wxWidgets]]
   * Latest released version is 2.8.8. From here on, it is assumed you use version 2.8.8, not an older version. The development branch 2.9.0 is not yet supported (there are incompatibilities).
 * Get a CVS client, e.g. [[http://www.tortoisecvs.org/|TortoiseCVS]] [[http://www.wincvs.org/|WinCvs]]
 * Get CMake, version 2.6 or newer, [[http://www.cmake.org/|CMake]]
Line 42: Line 41:
 * For wxArt2D, wxWidgets must be compiled with OpenGL support
   * For Visual Studio: set {{{USE_OPENGL = 1}}} in %WXWIN%\build\msw\config.vc
   * But use nmake from within a DOS box, to compile wxWidgets in order to have it generate build.cfg. Project files are not oke.
   * VC command line tools, requires running vcvars32.bat, which is found in Visual Studio installation its: VC\bin directory. There also a menu for Visual studio, which start a commandline window ready to go.
   * For the debug version: '''nmake -f makefile.vc BUILD=debug'''
   * For the release version: '''nmake -f makefile.vc BUILD=release'''

 * For wxArt2D, wxWidgets must be compiled with OpenGL support.
   * For Visual Studio: set {{{USE_OPENGL = 1}}} in {{{%WXWIN%\build\msw\config.vc }}}
Line 45: Line 49:
   * On Unix/Linux, use option --with-opengl in configure line.
 * If you intend to use e.g. static CRT, unicode, or wxWidgets using STL, be prepared for additional, matching changes in wxArt2D.
 * Build wxWidgets itself
   * On Unix/Linux, use option {{{--with-opengl}}} in configure line.
 * If you intend to use e.g. static CRT, unicode, or wxWidgets using STL, be prepared for additional, matching changes in wxArt2D and your application.
 * Build wxWidgets itself.
Line 57: Line 61:
TDO

== Focus on your own application ==

TDO

== Common issues ==

TDO
The building process of wxArt2D relies on CMake generated makefiles resp. project files. See [[WxArt2dInstallCmake|CMake]] for a more detailed explanation.

Once your project files or else makefiles are generated, wxArt2D should build without trouble.

== Generating wxArt2D Documentation ==

WxArt2D uses doxygen to generate API documentation straight from the source code.
Doxygen again itself uses graphviz to generate graphs of classes.

Next to that Docbook is used to generate the general documentation.
You will need to download the Docbookk XSL style sheets from here http://docbook.sourceforge.net/projects/xsl/
The dtd of docbook is in CVS itself.
And the STSL processor you might use is located here http://saxon.sourceforge.net/, I use Instant Saxon 6.5.3

For the doxygen documentation there is the option {{{BUILD_DOCUMENTATION}}} in CMakeSetup.

Make sure doxygen and the graphviz its dot tool is in your path variable.
You can also set {{{DOT_PATH}}} in doxygen.doxy.

For docbook, search for {{{gendocbook.bat}}}, hack its paths until it works ;-)

== Focus on your own Application ==

Exploring wxArt2D

An overview of samples and the hierarchy of the modules can be found in readme.html.

Build your own wxArt2d-based project using CMake. After you have build wxArt2D as explained above, you will find that the samples and all are included in its make and project files.

For your own project there are several options. The easiest is to use the myproject template which is automatically generated in
your build directory. This template generates a {{{CMakeLists.txt}}}, which you should use to generate the project files.
So use CMakeSetup on windows and ccmake or cmake on Unix to generate the makefile and project files
for your own project. In our case the input to CMakeSetup is something like this:
"Where is the source installed" c:/libraries/buildwxart2dhere
"Where to build binaries" c:/whereEver

 The default is a simple program, the {{{CmakeLists.txt}}} (see down here) should be edited to contain your own files.
You can place this {{{CmakeLists.txt}}} and {{{/bin/FindwxArt2D.cmake}}} wherever you want, FindwxArt2D itself searches for {{{wxart2dconfig.cmake}}} in your build directory.
The line {{{SET( WXART2D D:/notebook/wxartcvs/vcp )}}} can be edited later if you want to try different wxArt2D builds.
Down here the file you will find in your {{{build_wxart2d/myproject}}}.
{{{
    PROJECT( myapp )

    #modify this!!
    SET( WXART2D D:/notebook/wxartcvs/vcp )

    INCLUDE (${myapp_SOURCE_DIR}/bin/FindwxArt2D.cmake)

    INCLUDE_DIRECTORIES( ${myapp_SOURCE_DIR}/include )

    ADD_EXECUTABLE( myappname WIN32
        src/myfile1.cpp include/myfile1.h
        d:/notebook/wxwin/wx251vc/include/wx/msw/wx.rc
    )
}}}
One other option is to use {{{wxart2dconfig}}} Unix script in some way in your own makefiles.

== Common Issues ==

=== Static CRT ===

The CMake scripts do not fully support the use of static C run time libraries. They always use the compiler switches {{{/MDd}}} resp. {{{/MD}}}, instead of the then needed {{{/MTd}}} resp. {{{/MT}}}. To get around this, you need to manually modify the CMake lines for the C++-flags and C-flags before you generate the makefiles. These lines are usually hidden, activate "show advanced values". The names you look for start with {{{CMAKE_CXX_FLAGS_}}} and {{{CMAKE_C_FLAGS_}}}.

Typical error codes show up at link time or at run time, e.g.
{{{
LINK : warning LNK4098: defaultlib 'LIBCMTD' conflicts with use of other libs; use /NODEFAULTLIB:library
}}}
or
{{{
STATUS_DLL_NOT_FOUND exception
}}}

Remember, these {{{/MTd, /MT, /MDd, /MD}}} flags must be the same throghout wxWidgets, wxArt2D and the rest of your application.

=== Manifest ===

Starting with VS2005 manifests are auto generated. Before manual generation was neccessary, so wxWidgets offers a default manifest. Using the auto generated is strongly preferred, unless you know what you do.

In case you get something like
{{{
CVTRES : fatal error CVT1100: duplicate resource. type:MANIFEST, name:1, language:0x0409
LINK : fatal error LNK1123: failure during conversion to COFF: file invalid or corrupt
}}}
chances are good, your include files have a wrong order, therefore the wrong {{{rcdef.h}}} gets loaded. The order of includes in your makefile should look like
{{{/I.\..\..\lib\vc_lib\mswd /I.\..\..\include}}}. Then the right {{{lib\vc_lib\mswd\wx\msw\rcdef.h}}} gets included, instead of {{{include\wx\msw\rcdefs.h}}}. They differ by (not) defining {{{WX_MSC_FULL_VER}}}, which is used by {{{wx.rc}}} to decide on inclusion of wx's own manifest or not (to rely on the auto generated one).


--------

= wxArt2D with wxLua and wxStEdit =

Some modules are default not compiled, since they depend on third party libraries. One of them is wxLua to be used as scripting language.
As scripting language within wxArt2D, wxLua is currently available. wxLua itself needs wxStEdit, so you need to get wxLua and wxStEdit compiled for your system.
On windows make sure you have the following environment variables set, before starting CmakeSetup.exe to generate your project files. First you build wxStEdit and Next wxLua, both in all flavors you need.

I assume the following are set:
{{{
SET WXSTEDIT=c:\soft\art2d\wxstedit
SET WXLUA=c:\soft\art2d\wxLua
SET WXWIN=c:\soft\wxWidgest-2.8.8
}}}
Just check on your MDOS command line with:
{{{
echo %WXLUA%
echo %WXSTEDIT%
echo %WXWIN%

cd %WXSTEDIT%\build
#for debug
nmake -f makefile.vc WX_DEBUG=1
#for release
nmake -f makefile.vc WX_DEBUG=0

cd %WXLUA%\build
#for debug
nmake -f makefile.vc BUILD=debug
#for release
nmake -f makefile.vc BUILD=release
}}}
This should give you all the libraries for wxLua and wxStEdit in debug and release mode.
Now you start !CmakeSetup.exe and enable the option {{{WXART2D_USE_LUA}}} to be ON.
The project files wxArt2D.sln, now gets extra targets and samples using wxlua.

P.S. for the moment gdiplus.lib is not used by wxLua, and so {{{WXART2d_USE_GDIPLUSDRAWER}}} is only possible if you add by hand gdiplus.lib to the wxLua makefile.vc files. That is in {{{%WXLUA%\apps\build\msw\makefile.vc}}}, just add it where you see *.lib files.

On Unix you need to set the same variable on your shell command line.

I assume:
{{{
export WXSTEDIT=/home/myhome/art2d/wxstedit
export WXLUA=/home/myhome/art2d/wxLua
export WXWIN=/home/myhome/art2d/wxWidgest-2.8.8
}}}
Use: this to compile and install for wxstedit and wxlua.
{{{
./configure (right option see ./configure --help)
make
make install
}}}

Next configure wxArt2D and compile:
{{{
export WXART2D=/home/myhome/art2d/wxArt2D
cd $WXART2D
cd ..
mkdir buildArt2dWithWxLua
cd buildArt2dWithWxLua
ccmake ../wxArt2D
make
}}}

Download and Installation of wxArt2D

General Approach

The general approach to get the wxArt2D library and its demos running is:

  • Download tools and sources
  • Configure and build wxWidgets
  • Configure and build wxArt2D
  • Focus on your own application

Due to things being a little complex, it's not unusual to have some problem in between. You might want to take a look at the common issues.

In this documentation there might be a certain bias towards MS Windows (MSW) systems with Visual Studio. However, wxArt2D is known to work with Cygwin and natively on Linux as well. See Working platform and tool sets for more.

Download Tools and Sources

Being able to be built on different platforms, wxArt2D requires more than just its own sources.

  • Get wxWidgets, wxWidgets

    • Latest released version is 2.8.8. From here on, it is assumed you use version 2.8.8, not an older version. The development branch 2.9.0 is not yet supported (there are incompatibilities).
  • Get a CVS client, e.g. TortoiseCVS WinCvs

  • Get CMake, version 2.6 or newer, CMake

    • wxArt2D uses CMake as its build system. It will generate makefiles & project-files using template files present in wxArt2d folders.

  • Get wxArt2D by CVS
    • Choose a home for your wxArt2D installation, on MSW e.g. D:\
    • From console run cvs -z3 -d:pserver:anonymous@wxart2d.cvs.sourceforge.net:/cvsroot/wxart2d co -P wxArt2D

    • Now you should have e.g. D:\wxArt2D.
    • No, there is no zip-file or msi-installer. Though wxart2d is well maintained, there are no releases, yet.
    • To get the latest wxArt2D sources, just rerun the cvs command anytime.
  • Features not provided by wxWidgets, but required by wxArt2D are embedded in wxArt2d\thirdparty folder to make the compile process easier (however you can still configure wxArt2d so that they are not used).

Now you have the tools and sources needed to build wxArt2D.

Configure and build wxWidgets

wxWidgets and wxArt2D need to be made with matching configurations. Especially, wxArt2D requires OpenGL support and the contributed scintilla library from wxWidgets.

  • For introduction and details on how to configure or build wxWidgets on your system at all, please refer to the extensive wxWidgets documentation (offline and online)
    • But use nmake from within a DOS box, to compile wxWidgets in order to have it generate build.cfg. Project files are not oke.
    • VC command line tools, requires running vcvars32.bat, which is found in Visual Studio installation its: VC\bin directory. There also a menu for Visual studio, which start a commandline window ready to go.
    • For the debug version: nmake -f makefile.vc BUILD=debug

    • For the release version: nmake -f makefile.vc BUILD=release

  • For wxArt2D, wxWidgets must be compiled with OpenGL support.
    • For Visual Studio: set USE_OPENGL = 1 in %WXWIN%\build\msw\config.vc 

    • If you prefer NMake, add USE_OPENGL=1 to your nmake command.

    • On Unix/Linux, use option --with-opengl in configure line.

  • If you intend to use e.g. static CRT, unicode, or wxWidgets using STL, be prepared for additional, matching changes in wxArt2D and your application.
  • Build wxWidgets itself.
  • Build wxWidgets contributions, stc (scintilla library) is required, LUA is optional
    • Configure and build them identically to wxWidgets itself (repeat the steps above).
    • stc is required for wxArt2D.
    • Optional is wxLua, which is used in some modules and samples of wxArt2D. So you can configure and compile wxArt2d without it. In case you have wxLua installed and compiled, wxArt2d's CMake configure script finds wxLua by setting the environment variable WXLUA on windows. When using wxLua, also wxStEdit is required, see wxCode project. WXSTEDIT should be set to its root, in order for CMake to find it.

Now you have a functional wxWidgets library, including some contribs. Ideally you have verified on some wxWidgets demo, that everything is running well.

Configure and build wxArt2D

The building process of wxArt2D relies on CMake generated makefiles resp. project files. See CMake for a more detailed explanation.

Once your project files or else makefiles are generated, wxArt2D should build without trouble.

Generating wxArt2D Documentation

WxArt2D uses doxygen to generate API documentation straight from the source code. Doxygen again itself uses graphviz to generate graphs of classes.

Next to that Docbook is used to generate the general documentation. You will need to download the Docbookk XSL style sheets from here http://docbook.sourceforge.net/projects/xsl/ The dtd of docbook is in CVS itself. And the STSL processor you might use is located here http://saxon.sourceforge.net/, I use Instant Saxon 6.5.3

For the doxygen documentation there is the option BUILD_DOCUMENTATION in CMakeSetup.

Make sure doxygen and the graphviz its dot tool is in your path variable. You can also set DOT_PATH in doxygen.doxy.

For docbook, search for gendocbook.bat, hack its paths until it works ;-)

Focus on your own Application

Exploring wxArt2D

An overview of samples and the hierarchy of the modules can be found in readme.html.

Build your own wxArt2d-based project using CMake. After you have build wxArt2D as explained above, you will find that the samples and all are included in its make and project files.

For your own project there are several options. The easiest is to use the myproject template which is automatically generated in your build directory. This template generates a CMakeLists.txt, which you should use to generate the project files. So use CMakeSetup on windows and ccmake or cmake on Unix to generate the makefile and project files for your own project. In our case the input to CMakeSetup is something like this: "Where is the source installed" c:/libraries/buildwxart2dhere "Where to build binaries" c:/whereEver

  • The default is a simple program, the CmakeLists.txt (see down here) should be edited to contain your own files.

You can place this CmakeLists.txt and /bin/FindwxArt2D.cmake wherever you want, FindwxArt2D itself searches for wxart2dconfig.cmake in your build directory. The line SET( WXART2D D:/notebook/wxartcvs/vcp ) can be edited later if you want to try different wxArt2D builds. Down here the file you will find in your build_wxart2d/myproject.

    PROJECT( myapp )

    #modify this!!
    SET( WXART2D D:/notebook/wxartcvs/vcp )

    INCLUDE (${myapp_SOURCE_DIR}/bin/FindwxArt2D.cmake)

    INCLUDE_DIRECTORIES( ${myapp_SOURCE_DIR}/include )

    ADD_EXECUTABLE( myappname  WIN32
        src/myfile1.cpp include/myfile1.h
        d:/notebook/wxwin/wx251vc/include/wx/msw/wx.rc
    )

One other option is to use wxart2dconfig Unix script in some way in your own makefiles.

Common Issues

Static CRT

The CMake scripts do not fully support the use of static C run time libraries. They always use the compiler switches /MDd resp. /MD, instead of the then needed /MTd resp. /MT. To get around this, you need to manually modify the CMake lines for the C++-flags and C-flags before you generate the makefiles. These lines are usually hidden, activate "show advanced values". The names you look for start with CMAKE_CXX_FLAGS_ and CMAKE_C_FLAGS_.

Typical error codes show up at link time or at run time, e.g.

LINK : warning LNK4098: defaultlib 'LIBCMTD' conflicts with use of other libs; use /NODEFAULTLIB:library

or

STATUS_DLL_NOT_FOUND exception

Remember, these /MTd, /MT, /MDd, /MD flags must be the same throghout wxWidgets, wxArt2D and the rest of your application.

Manifest

Starting with VS2005 manifests are auto generated. Before manual generation was neccessary, so wxWidgets offers a default manifest. Using the auto generated is strongly preferred, unless you know what you do.

In case you get something like

CVTRES : fatal error CVT1100: duplicate resource.  type:MANIFEST, name:1, language:0x0409
LINK : fatal error LNK1123: failure during conversion to COFF: file invalid or corrupt

chances are good, your include files have a wrong order, therefore the wrong rcdef.h gets loaded. The order of includes in your makefile should look like /I.\..\..\lib\vc_lib\mswd /I.\..\..\include. Then the right lib\vc_lib\mswd\wx\msw\rcdef.h gets included, instead of include\wx\msw\rcdefs.h. They differ by (not) defining WX_MSC_FULL_VER, which is used by wx.rc to decide on inclusion of wx's own manifest or not (to rely on the auto generated one).


wxArt2D with wxLua and wxStEdit

Some modules are default not compiled, since they depend on third party libraries. One of them is wxLua to be used as scripting language. As scripting language within wxArt2D, wxLua is currently available. wxLua itself needs wxStEdit, so you need to get wxLua and wxStEdit compiled for your system. On windows make sure you have the following environment variables set, before starting CmakeSetup.exe to generate your project files. First you build wxStEdit and Next wxLua, both in all flavors you need.

I assume the following are set:

SET WXSTEDIT=c:\soft\art2d\wxstedit
SET WXLUA=c:\soft\art2d\wxLua
SET WXWIN=c:\soft\wxWidgest-2.8.8

Just check on your MDOS command line with:

echo %WXLUA% 
echo %WXSTEDIT% 
echo %WXWIN%

cd %WXSTEDIT%\build 
#for debug
nmake -f makefile.vc WX_DEBUG=1
#for release
nmake -f makefile.vc WX_DEBUG=0

cd %WXLUA%\build 
#for debug
nmake -f makefile.vc BUILD=debug
#for release
nmake -f makefile.vc BUILD=release

This should give you all the libraries for wxLua and wxStEdit in debug and release mode. Now you start CmakeSetup.exe and enable the option WXART2D_USE_LUA to be ON. The project files wxArt2D.sln, now gets extra targets and samples using wxlua.

P.S. for the moment gdiplus.lib is not used by wxLua, and so WXART2d_USE_GDIPLUSDRAWER is only possible if you add by hand gdiplus.lib to the wxLua makefile.vc files. That is in %WXLUA%\apps\build\msw\makefile.vc, just add it where you see *.lib files.

On Unix you need to set the same variable on your shell command line.

I assume:

export WXSTEDIT=/home/myhome/art2d/wxstedit
export WXLUA=/home/myhome/art2d/wxLua
export WXWIN=/home/myhome/art2d/wxWidgest-2.8.8

Use: this to compile and install for wxstedit and wxlua.

./configure (right option see ./configure --help)
make
make install 

Next configure wxArt2D and compile:

export WXART2D=/home/myhome/art2d/wxArt2D
cd $WXART2D
cd ..
mkdir buildArt2dWithWxLua
cd buildArt2dWithWxLua
ccmake ../wxArt2D
make

wxArt2D: WxArt2dInstall (last edited 2016-04-30 06:23:23 by ip5657d226)