## Compiling wxWindows samples with the Borland CBuilder

This document is available online here.

## Before you begin

This refers to the 2.1.15 wxWindows distribution. It is my account of trying to compile the samples so I can use the Borland IDE to edit/compile/debug. I have used CBuilder 1.00 (2 patches, nice and fast) CBuilder 3 (slower) and CBuilder 4 (only occasionally)

Make sure that the wx distribution is extracted to a path with no spaces in it, and preferably on the root of your drive. Borland's compilers sometimes have problems with spaces and with the long paths which occur if you try to place it in a tree like `d:\compiler\gui\wx...`

## Part 1 Build the library

Build the wx\wx32.lib and related files using the command line compiler
Run a command prompt in the `wx/src/msw` directory and type

`set wxwin=pathtowx`
`set bccdir=pathtobc4`
`make -f makefile.b32`

In my case this I extracted the wx distribution in c:\ and the compiler is in w:\borland\cb\bin so this looks:

`set wxwin=c:\wx`
`set bccdir=w:\borland\cb`
`make -f makefile.b32`

If this doesn't compile,

- you've probably got the `set wxwin` command wrong,
- or the path was not set by the Borland setup

If this doesn't link,

- you've probably got the `set bccdir` command wrong

## To make the samples

### Solution 1

#### Download a zip file which contains modifed cpp, mak and bpr files - it will overwrite your wx distribution cpp files!

#### Solution 2

Creating the files by hand . This is for the calendar sample; you will have to change the names for the other samples

- Create a calendar.mak file [must have the same name as the cpp file] in a plain text editor with this contents

`#-----------------------------------------------------------------------------`
`#this is for Borland CBuilder IDE v1 and 3`
`#add a \ at the end of the lines if you editor breaks the long lines up`
`#copy this into notepad and save from there`
`#-----------------------------------------------------------------------------`
`!ifndef BCB`
`BCB = $(MAKEDIR)\..`
`!endif`
`PROJECT = calendar.exe`
`OBJFILES =`
`RESFILES = calendar.res`
`RESDEPEN = $(RESFILES)`
`LIBFILES =`
`#-----------------------------------------------------------------------------`
`CFLAG1 = -Od -v -a1 -c`
`# -Od disable optimisations -v debug -a1 byte align -c compile only (matches my make for the library)`
`CFLAG2 = -DINC_OLE2;__WIN95__;__WXMSW__;__WINDOWS__;WIN32;__BIDE__;-I$(BCB)\include;$(BCB)\include\vcl;..\..\include; -H=BC32.CSM`
`PFLAGS =`
`RFLAGS = -DINC_OLE2;__WIN95__;__WXMSW__;__WINDOWS__;WIN32;__BIDE__; -I$(BCB)\include;..\..\include;`
`LFLAGS = -L$(BCB)\lib;$(BCB)\lib\obj;..\..\lib -aa -Tpe -v -V4.0 -c`
`IFLAGS =`
`LINKER = ilink32`
`#-----------------------------------------------------------------------------`
`ALLOBJ = c0w32.obj $(OBJFILES)`
`ALLRES = $(RESFILES)`
`ALLLIB = $(LIBFILES) vcl.lib xpm.lib wx32.lib ole2w32.lib import32.lib odbc32.lib cw32mt.lib`
`#you will need to add other libraries to the line above, eg the jpeg.lib for image samples`
`---------------------------------------------------------------------------`
`.autodepend`

`#-----------------------------------------------------------------------------`
`$(PROJECT): $(OBJFILES) $(RESDEPEN)`

`#end of file`

- modify the .cpp file to include these lines near the top

`#ifdef __BIDE__`
`#define _NO_VCL`
`#include "condefs.h"`
`#define WinMain WinMain`
`// USEUNIT ("another.cpp"); // use a line like this if you have more than one .cpp file`
`USERC ("calendar.rc");`
`#endif`

In CBuilder 1 you can use Open Project to open the mak file and edit/compile/debug.
In CBuilder 3 and 4, then you can use Open Project and choose the Open Borland CBuilder 1 Project from the drop down file types. The system will modify the mak file and update it for you.

Now try compiling it in the ide.

#### Hints:

- You can set it up for normal and debug modes (change the -v switch in CFLAG1 and LFLAG)
- If you get problems saying Project undefined, then copy the text using a simple editor like notepad to the file minimal.mak (I have had problems in CBuilder 1.00 with Unix style line endings)
- If you want to avoid the warnings about hiding virtual methods add `-w-hid` to the CFLAGS1 line
- the #define WinMain WinMain line allows CBuilder to think it has a non-VCL `main` function
- the USEUNIT macros tell CBuilder which other source files to include, without needing a VCL form
- the condefs.h file defines the USEUNIT macros for non-VCL use
- For the other samples, change the names of the cpp and rc files. If you have multiple files, just add more USEUNIT and USERC macros

### Solution 3

- download the wxWindows-2.1.15-bcb.zip file,
- extract it
- use the `idetomak` (CBuilder 1) or `idetobpr` (CBuilder 3/4) utility on the `.ide` file in the samples directory. This modifies the cpp source and makes a "suitable" bpr file (at least in CBuilder 1/3/4).
- add the location of the wx/include files in the project | options | directory dialog

I found in CBuilder 1 that the `idetomak` utility did not manage to convert all the samples, but `idetobpr` worked OK in CBuilder 3 and 4. I have a report that not all the bpr files made inb CBuilder 4 are correct

## Error with ODBC32

Sometimes you get an error saying that there are unreolved externals in ODBC. The soltuion is to run a command prompt in your `wx\lib` directory and use the `implib` command:

`C:\wx\lib>implib odbc32 c:\windows\system\odbc32.dll`

This creates the necessary library, odbc32.lib

## Unresolved Problem

`In Borland CBuilder 1.00 (with linker service patch) I frequently get an error`

`Turbo Incremental Link Version 1.0 Copyright (c) 1997 Borland International`
`Fatal: Assertion failed: typeInx < typeCnt at "ilinkdbg.c", line 2060`
`Fatal: Access violation. Program terminated.`
`Error: Internal failure -- retrying link...`
`Fatal: Assertion failed: typeInx < typeCnt at "ilinkdbg.c", line 2060`
`Fatal: Access violation. Program terminated.`

`** error 2 ** deleting minimal.exe`

I have not been able to track down why sometimes this error occurs and other times it is OK
I have not seen this in Cbuilder 3 or 4

Page updated on 31 May 2000 by Chris Elliott