I'm trying to compile a HelloBrad project from the command line. After compiling the project once (to generate the makefiles etc) I then tried:

C:\USERS\workareas\carbide\HelloBrad\S60 3.0 Emulator Debug>set EPOCROOT=C:\APPS\Symbian\9.1\S60_3rd\

C:\USERS\workareas\carbide\HelloBrad\S60 3.0 Emulator Debug>make

ERROR: EPOCROOT must be an absolute path, not containing a drive letter.

Fair enough. So I reset %EPOCROOT% to no contain a drive letter:

C:\USERS\workareas\carbide\HelloBrad\S60 3.0 Emulator Debug>set EPOCROOT=\APPS\S

C:\USERS\workareas\carbide\HelloBrad\S60 3.0 Emulator Debug>make
'Building file: ../src/HelloBrad.cpp'
'Invoking: WINSCW C/C++ Compiler'
mwccsym2.exe -sym full -c -wchar_t off -align 4 -enum int -str pool -nostdinc -e
xc ms -inline off -msgstyle parseable -nowraplines -O0 -D_UNICODE -D__SYMBIAN32_
NS__ -D__SERIES60_30__ -D__SERIES60_3X__ -include "\APPS\Symbian\9.1\S60_3rd\epo
" -i "C:\USERS\workareas\carbide\HelloBra
d\inc" -i "C:\USERS\workareas\carbide\HelloBrad\data" -i- -i "\APPS\Symbian\9.1\
S60_3rd\epoc32\include" -i "\APPS\Symbian\9.1\S60_3rd\epoc32\include\variant" -w
cmdline -w pragmas -w empty -w possible -w unusedarg -w unusedvar -w extracomma
-w pedantic -w largeargs -w ptrintconv -w tokenpasting -w missingreturn -o src/
HelloBrad.o ../src/HelloBrad.cpp
(C:\USERS\workareas\carbide\HelloBrad\S60 3.0 Emulator Debug\(command-line defin
=#include "\APPS\Symbian\9.1\S60_3rd\epoc32\include\variant\Symbian_OS_v9.1.hrh"

>the file '\APPS\Symbian\9.1\S60_3rd\epoc32\include\variant\Symbian_OS_v9.1.hrh'
cannot be opened
= return new CHelloBradApplication;
>illegal use of abstract class ('CApaApplication::OpenAppInfoFileLC() const')

Errors caused tool to abort.
C:\apps\Symbian\9.1\S60_3rd\epoc32\tools\make.exe: *** [src/HelloBrad.o] Error 1

C:\USERS\workareas\carbide\HelloBrad\S60 3.0 Emulator Debug>

Um, \APPS\Symbian\9.1\S60_3rd\epoc32\include\variant\Symbian_OS_v9.1.hrh exists just fine.

So, it seems that there is either a bug in the compiler (since it didn't find the header unless the drive letter is included in EPOCROOT) or there is a problem the make system (for requiring no drive letter to be included in EPOCROOT).

I don't have access to the compiler source but I dug around in the make system.

Commenting out lines 254 and 255 of C:\Program Files\Common Files\Symbian\tools\tlaunch.pm and setting EPOCROOT to include the drive letter seems to make the problem go away.

Are those lines in tlaunch.pm a bug, or is there a valid reason for EPOCROOT to not include a drive letter?