diff --git a/harbour/ChangeLog b/harbour/ChangeLog index daf717b0c7..c78a128bfa 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -17,6 +17,20 @@ past entries belonging to these authors: Viktor Szakats. */ +2009-05-01 13:17 UTC+0200 Viktor Szakats (harbour.01 syenar hu) + * bin/postinst.bat + + Added generation of libpq.lib from .dll for msvc. (not tested) + + Added generation of QT implibs for msvc. (not tested) + + Copying QT implibs for mingw. + + * source/common/hbverdsp.c + ! Minor in comment. + + * utils/hbmk2/hbmk2.prg + + Added MT support for C compilation phase. + Single input compilers aren't covered yet (gcc, pocc). + + Added -debugtime internal option to measure running time. + 2009-04-30 15:25 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl) * harbour/utils/hbmk2/Makefile ! do not use hbvmmt on platforms which does not support MT diff --git a/harbour/bin/postinst.bat b/harbour/bin/postinst.bat index 52b288eb97..9250bf149f 100644 --- a/harbour/bin/postinst.bat +++ b/harbour/bin/postinst.bat @@ -82,27 +82,32 @@ if "%HB_BUILD_IMPLIB%" == "yes" ( if "%HB_COMPILER%" == "msvc" ( - if exist "%HB_DIR_ADS%\Redistribute\ace32.lib" copy /b /y "%HB_DIR_ADS%\Redistribute\ace32.lib" "%HB_LIB_INSTALL%\ace32.lib" - if exist "%HB_DIR_ADS%\ace32.lib" copy /b /y "%HB_DIR_ADS%\ace32.lib" "%HB_LIB_INSTALL%\ace32.lib" - if exist "%HB_DIR_ADS%\32bit\ace32.lib" copy /b /y "%HB_DIR_ADS%\32bit\ace32.lib" "%HB_LIB_INSTALL%\ace32.lib" - if exist "%HB_DIR_ALLEGRO%\lib\alleg.lib" copy /b /y "%HB_DIR_ALLEGRO%\lib\alleg.lib" "%HB_LIB_INSTALL%\alleg.lib" - if exist "%HB_DIR_APOLLO%\sde61.dll" call :P_MSVC_IMPLIB "%HB_DIR_APOLLO%\sde61.dll" "%HB_LIB_INSTALL%\sde61.lib" - if exist "%HB_DIR_BLAT%\full\blat.lib" copy /b /y "%HB_DIR_BLAT%\full\blat.lib" "%HB_LIB_INSTALL%\blat.lib" - if exist "%HB_DIR_CURL%\libcurl.dll" call :P_MSVC_IMPLIB "%HB_DIR_CURL%\libcurl.dll" "%HB_LIB_INSTALL%\libcurl.lib" - if exist "%HB_DIR_CURL%\bin\libcurl.dll" call :P_MSVC_IMPLIB "%HB_DIR_CURL%\bin\libcurl.dll" "%HB_LIB_INSTALL%\libcurl.lib" - if exist "%HB_DIR_FIREBIRD%\lib\fbclient_ms.lib" copy /b /y "%HB_DIR_FIREBIRD%\lib\fbclient_ms.lib" "%HB_LIB_INSTALL%\fbclient.lib" - if exist "%HB_DIR_FREEIMAGE%\Dist\FreeImage.lib" copy /b /y "%HB_DIR_FREEIMAGE%\Dist\FreeImage.lib" "%HB_LIB_INSTALL%\FreeImage.lib" - if exist "%HB_DIR_GD%\lib\bgd.lib" copy /b /y "%HB_DIR_GD%\lib\bgd.lib" "%HB_LIB_INSTALL%\bgd.lib" - if exist "%HB_DIR_LIBHARU%\libhpdf.lib" copy /b /y "%HB_DIR_LIBHARU%\libhpdf.lib" "%HB_LIB_INSTALL%\libhpdf.lib" - if exist "%HB_DIR_LIBHARU%\lib_dll\libhpdf.lib" copy /b /y "%HB_DIR_LIBHARU%\lib_dll\libhpdf.lib" "%HB_LIB_INSTALL%\libhpdf.lib" - if exist "%HB_DIR_MYSQL%\lib\opt\libmySQL.lib" copy /b /y "%HB_DIR_MYSQL%\lib\opt\libmySQL.lib" "%HB_LIB_INSTALL%\libmySQL.lib" - if exist "%HB_DIR_OPENSSL%\out32dll\libeay32.lib" copy /b /y "%HB_DIR_OPENSSL%\out32dll\libeay32.lib" "%HB_LIB_INSTALL%\libeay32.lib" - if exist "%HB_DIR_OPENSSL%\dll\libeay32.lib" copy /b /y "%HB_DIR_OPENSSL%\dll\libeay32.lib" "%HB_LIB_INSTALL%\libeay32.lib" - if exist "%HB_DIR_OPENSSL%\libeay32.lib" copy /b /y "%HB_DIR_OPENSSL%\libeay32.lib" "%HB_LIB_INSTALL%\libeay32.lib" - if exist "%HB_DIR_OPENSSL%\out32dll\ssleay32.lib" copy /b /y "%HB_DIR_OPENSSL%\out32dll\ssleay32.lib" "%HB_LIB_INSTALL%\ssleay32.lib" - if exist "%HB_DIR_OPENSSL%\dll\ssleay32.lib" copy /b /y "%HB_DIR_OPENSSL%\dll\ssleay32.lib" "%HB_LIB_INSTALL%\ssleay32.lib" - if exist "%HB_DIR_OPENSSL%\ssleay32.lib" copy /b /y "%HB_DIR_OPENSSL%\ssleay32.lib" "%HB_LIB_INSTALL%\ssleay32.lib" - if exist "%HB_DIR_PGSQL%\lib\libpq.lib" copy /b /y "%HB_DIR_PGSQL%\lib\libpq.lib" "%HB_LIB_INSTALL%\libpq.lib" + if exist "%HB_DIR_ADS%\Redistribute\ace32.lib" copy /b /y "%HB_DIR_ADS%\Redistribute\ace32.lib" "%HB_LIB_INSTALL%\ace32.lib" + if exist "%HB_DIR_ADS%\ace32.lib" copy /b /y "%HB_DIR_ADS%\ace32.lib" "%HB_LIB_INSTALL%\ace32.lib" + if exist "%HB_DIR_ADS%\32bit\ace32.lib" copy /b /y "%HB_DIR_ADS%\32bit\ace32.lib" "%HB_LIB_INSTALL%\ace32.lib" + if exist "%HB_DIR_ALLEGRO%\lib\alleg.lib" copy /b /y "%HB_DIR_ALLEGRO%\lib\alleg.lib" "%HB_LIB_INSTALL%\alleg.lib" + if exist "%HB_DIR_APOLLO%\sde61.dll" call :P_MSVC_IMPLIB "%HB_DIR_APOLLO%\sde61.dll" "%HB_LIB_INSTALL%\sde61.lib" + if exist "%HB_DIR_BLAT%\full\blat.lib" copy /b /y "%HB_DIR_BLAT%\full\blat.lib" "%HB_LIB_INSTALL%\blat.lib" + if exist "%HB_DIR_CURL%\libcurl.dll" call :P_MSVC_IMPLIB "%HB_DIR_CURL%\libcurl.dll" "%HB_LIB_INSTALL%\libcurl.lib" + if exist "%HB_DIR_CURL%\bin\libcurl.dll" call :P_MSVC_IMPLIB "%HB_DIR_CURL%\bin\libcurl.dll" "%HB_LIB_INSTALL%\libcurl.lib" + if exist "%HB_DIR_FIREBIRD%\lib\fbclient_ms.lib" copy /b /y "%HB_DIR_FIREBIRD%\lib\fbclient_ms.lib" "%HB_LIB_INSTALL%\fbclient.lib" + if exist "%HB_DIR_FREEIMAGE%\Dist\FreeImage.lib" copy /b /y "%HB_DIR_FREEIMAGE%\Dist\FreeImage.lib" "%HB_LIB_INSTALL%\FreeImage.lib" + if exist "%HB_DIR_GD%\lib\bgd.lib" copy /b /y "%HB_DIR_GD%\lib\bgd.lib" "%HB_LIB_INSTALL%\bgd.lib" + if exist "%HB_DIR_LIBHARU%\libhpdf.lib" copy /b /y "%HB_DIR_LIBHARU%\libhpdf.lib" "%HB_LIB_INSTALL%\libhpdf.lib" + if exist "%HB_DIR_LIBHARU%\lib_dll\libhpdf.lib" copy /b /y "%HB_DIR_LIBHARU%\lib_dll\libhpdf.lib" "%HB_LIB_INSTALL%\libhpdf.lib" + if exist "%HB_DIR_MYSQL%\lib\opt\libmySQL.lib" copy /b /y "%HB_DIR_MYSQL%\lib\opt\libmySQL.lib" "%HB_LIB_INSTALL%\libmySQL.lib" + if exist "%HB_DIR_OPENSSL%\out32dll\libeay32.lib" copy /b /y "%HB_DIR_OPENSSL%\out32dll\libeay32.lib" "%HB_LIB_INSTALL%\libeay32.lib" + if exist "%HB_DIR_OPENSSL%\dll\libeay32.lib" copy /b /y "%HB_DIR_OPENSSL%\dll\libeay32.lib" "%HB_LIB_INSTALL%\libeay32.lib" + if exist "%HB_DIR_OPENSSL%\libeay32.lib" copy /b /y "%HB_DIR_OPENSSL%\libeay32.lib" "%HB_LIB_INSTALL%\libeay32.lib" + if exist "%HB_DIR_OPENSSL%\out32dll\ssleay32.lib" copy /b /y "%HB_DIR_OPENSSL%\out32dll\ssleay32.lib" "%HB_LIB_INSTALL%\ssleay32.lib" + if exist "%HB_DIR_OPENSSL%\dll\ssleay32.lib" copy /b /y "%HB_DIR_OPENSSL%\dll\ssleay32.lib" "%HB_LIB_INSTALL%\ssleay32.lib" + if exist "%HB_DIR_OPENSSL%\ssleay32.lib" copy /b /y "%HB_DIR_OPENSSL%\ssleay32.lib" "%HB_LIB_INSTALL%\ssleay32.lib" + if exist "%HB_DIR_PGSQL%\bin\libpq.dll" call :P_MSVC_IMPLIB "%HB_DIR_PGSQL%\bin\libpq.dll" "%HB_LIB_INSTALL%\libpq.lib" + if exist "%HB_DIR_PGSQL%\lib\libpq.lib" copy /b /y "%HB_DIR_PGSQL%\lib\libpq.lib" "%HB_LIB_INSTALL%\libpq.lib" + if exist "%HB_DIR_QT%\bin\QtCore4.dll" call :P_MSVC_IMPLIB "%HB_DIR_QT%\bin\QtCore4.dll" "%HB_LIB_INSTALL%\QtCore4.lib" + if exist "%HB_DIR_QT%\bin\QtGui4.dll" call :P_MSVC_IMPLIB "%HB_DIR_QT%\bin\QtGui4.dll" "%HB_LIB_INSTALL%\QtGui4.lib" + if exist "%HB_DIR_QT%\bin\QtNetwork4.dll" call :P_MSVC_IMPLIB "%HB_DIR_QT%\bin\QtNetwork4.dll" "%HB_LIB_INSTALL%\QtNetwork4.lib" + if exist "%HB_DIR_QT%\bin\QtWebKit4.dll" call :P_MSVC_IMPLIB "%HB_DIR_QT%\bin\QtWebKit4.dll" "%HB_LIB_INSTALL%\QtWebKit4.lib" goto END ) @@ -129,6 +134,10 @@ if "%HB_BUILD_IMPLIB%" == "yes" ( if exist "%HB_DIR_OPENSSL%\dll\ssleay32.lib" copy /b /y "%HB_DIR_OPENSSL%\dll\ssleay32.lib" "%HB_LIB_INSTALL%\libssleay32.a" if exist "%HB_DIR_OPENSSL%\ssleay32.lib" copy /b /y "%HB_DIR_OPENSSL%\ssleay32.lib" "%HB_LIB_INSTALL%\libssleay32.a" if exist "%HB_DIR_PGSQL%\lib\libpq.lib" copy /b /y "%HB_DIR_PGSQL%\lib\libpq.lib" "%HB_LIB_INSTALL%\libpq.a" + if exist "%HB_DIR_QT%\lib\libQtCore4.a" copy /b /y "%HB_DIR_QT%\lib\libQtCore4.a" "%HB_LIB_INSTALL%\libQtCore4.a" + if exist "%HB_DIR_QT%\lib\libQtGui4.a" copy /b /y "%HB_DIR_QT%\lib\libQtGui4.a" "%HB_LIB_INSTALL%\libQtGui4.a" + if exist "%HB_DIR_QT%\lib\libQtNetwork4.a" copy /b /y "%HB_DIR_QT%\lib\libQtNetwork4.a" "%HB_LIB_INSTALL%\libQtNetwork4.a" + if exist "%HB_DIR_QT%\lib\libQtWebKit4.a" copy /b /y "%HB_DIR_QT%\lib\libQtWebKit4.a" "%HB_LIB_INSTALL%\libQtWebKit4.a" goto END ) diff --git a/harbour/source/common/hbverdsp.c b/harbour/source/common/hbverdsp.c index d8301845d8..ed6335566a 100644 --- a/harbour/source/common/hbverdsp.c +++ b/harbour/source/common/hbverdsp.c @@ -4,7 +4,7 @@ /* * Harbour Project source code: - * Display build information - code moved from hb_ver.c + * Display build information * * Copyright 1999 {list of individual authors and e-mail addresses} * www - http://www.harbour-project.org diff --git a/harbour/utils/hbmk2/hbmk2.prg b/harbour/utils/hbmk2/hbmk2.prg index f65ec9d2ec..8ac72d594c 100644 --- a/harbour/utils/hbmk2/hbmk2.prg +++ b/harbour/utils/hbmk2/hbmk2.prg @@ -138,6 +138,7 @@ STATIC s_aINCPATH STATIC s_aINCTRYPATH STATIC s_lREBUILD := .F. +STATIC s_lDEBUGTIME := .F. STATIC s_lDEBUGINC := .F. STATIC s_lDEBUGSTUB := .F. @@ -359,6 +360,7 @@ FUNCTION hbmk( aArgs ) LOCAL aCommand #endif LOCAL cOpt_CompC + LOCAL cOpt_CompCLoop LOCAL cOpt_Link LOCAL cOpt_Res LOCAL cOpt_Lib @@ -414,10 +416,12 @@ FUNCTION hbmk( aArgs ) hb_ntos( hb_Version( HB_VERSION_MINOR ) ) + "." +; hb_ntos( hb_Version( HB_VERSION_RELEASE ) ) - LOCAL aPRG_TODO + LOCAL aTODO LOCAL aThreads LOCAL thread + LOCAL nStart := secondscpu() + IF Empty( aArgs ) ShowHeader() ShowHelp() @@ -956,6 +960,7 @@ FUNCTION hbmk( aArgs ) CASE cParamL == "-opt" ; s_lOPT := .T. CASE cParamL == "-opt-" .OR. ; cParamL == "-noopt" ; s_lOPT := .F. + CASE cParamL == "-debugtime" ; s_lDEBUGTIME := .T. CASE cParamL == "-debuginc" ; s_lDEBUGINC := .T. CASE cParamL == "-debugstub" ; s_lDEBUGSTUB := .T. CASE cParamL == "-nulrdd" ; s_lNULRDD := .T. @@ -2446,9 +2451,9 @@ FUNCTION hbmk( aArgs ) #if defined( HBMK_INTEGRATED_COMPILER ) aThreads := {} - FOR EACH aPRG_TODO IN ArraySplit( s_aPRG_TODO, s_nJOBS ) + FOR EACH aTODO IN ArraySplit( s_aPRG_TODO, s_nJOBS ) aCommand := ArrayAJoin( { { iif( lCreateLib .OR. lCreateDyn, "-n1", "-n2" ) },; - aPRG_TODO,; + aTODO,; iif( s_lBLDFLGP, { " " + cSelfFlagPRG }, {} ),; ListToArray( iif( ! Empty( GetEnv( "HB_USER_PRGFLAGS" ) ), " " + GetEnv( "HB_USER_PRGFLAGS" ), "" ) ),; s_aOPTPRG } ) @@ -2456,7 +2461,7 @@ FUNCTION hbmk( aArgs ) IF s_lTRACE IF ! s_lQuiet IF hb_mtvm() - OutStd( "hbmk: Harbour compiler command (internal) job #" + hb_ntos( aPRG_TODO:__enumIndex() ) + ":" + hb_osNewLine() ) + OutStd( "hbmk: Harbour compiler command (internal) job #" + hb_ntos( aTODO:__enumIndex() ) + ":" + hb_osNewLine() ) ELSE OutStd( "hbmk: Harbour compiler command (internal):" + hb_osNewLine() ) ENDIF @@ -2467,7 +2472,7 @@ FUNCTION hbmk( aArgs ) IF ! s_lDONTEXEC IF hb_mtvm() - AAdd( aThreads, hb_threadStart( @hb_compile(), "", aCommand ) ) + AAdd( aThreads, { hb_threadStart( @hb_compile(), "", aCommand ), aCommand } ) ELSE IF ( tmp := hb_compile( "", aCommand ) ) != 0 OutErr( "hbmk: Error: Running Harbour compiler. " + hb_ntos( tmp ) + hb_osNewLine() ) @@ -2480,10 +2485,10 @@ FUNCTION hbmk( aArgs ) IF hb_mtvm() FOR EACH thread IN aThreads - hb_threadJoin( thread, @tmp ) + hb_threadJoin( thread[ 1 ], @tmp ) IF tmp != 0 OutErr( "hbmk: Error: Running Harbour compiler job #" + hb_ntos( thread:__enumIndex() ) + ". " + hb_ntos( tmp ) + hb_osNewLine() ) - OutErr( ArrayToList( aCommand ) + hb_osNewLine() ) + OutErr( ArrayToList( thread[ 2 ] ) + hb_osNewLine() ) RETURN 6 ENDIF NEXT @@ -2832,47 +2837,73 @@ FUNCTION hbmk( aArgs ) ENDIF NEXT ELSE - cOpt_CompC := StrTran( cOpt_CompC, "{LC}" , ArrayToList( ArrayJoin( ListDirExt( s_aPRG_TODO, cWorkDir, ".c" ), s_aC_TODO ) ) ) cOpt_CompC := StrTran( cOpt_CompC, "{OO}" , PathSepToTarget( FN_ExtSet( s_cPROGNAME, cObjExt ) ) ) cOpt_CompC := StrTran( cOpt_CompC, "{OW}" , PathSepToTarget( cWorkDir ) ) - cOpt_CompC := AllTrim( cOpt_CompC ) + aThreads := {} + FOR EACH aTODO IN ArraySplit( ArrayJoin( ListDirExt( s_aPRG_TODO, cWorkDir, ".c" ), s_aC_TODO ), s_nJOBS ) - /* Handle moving the whole command line to a script, if requested. */ - IF "{SCRIPT}" $ cOpt_CompC - fhnd := hb_FTempCreateEx( @cScriptFile, NIL, NIL, ".cpl" ) - IF fhnd != F_ERROR - FWrite( fhnd, StrTran( cOpt_CompC, "{SCRIPT}", "" ) ) - FClose( fhnd ) - cOpt_CompC := "@" + cScriptFile - ELSE - OutErr( "hbmk: Warning: C compiler script couldn't be created, continuing in command line." + hb_osNewLine() ) + cOpt_CompCLoop := AllTrim( StrTran( cOpt_CompC, "{LC}" , ArrayToList( aTODO ) ) ) + + /* Handle moving the whole command line to a script, if requested. */ + IF "{SCRIPT}" $ cOpt_CompCLoop + fhnd := hb_FTempCreateEx( @cScriptFile, NIL, NIL, ".cpl" ) + IF fhnd != F_ERROR + FWrite( fhnd, StrTran( cOpt_CompCLoop, "{SCRIPT}", "" ) ) + FClose( fhnd ) + cOpt_CompCLoop := "@" + cScriptFile + ELSE + OutErr( "hbmk: Warning: C compiler script couldn't be created, continuing in command line." + hb_osNewLine() ) + ENDIF ENDIF - ENDIF - cCommand := cBin_CompC + " " + cOpt_CompC + cCommand := cBin_CompC + " " + cOpt_CompCLoop - IF s_lTRACE - IF ! s_lQuiet - OutStd( "hbmk: C compiler command:" + hb_osNewLine() ) + IF s_lTRACE + IF ! s_lQuiet + IF hb_mtvm() + OutStd( "hbmk: C compiler command job #" + hb_ntos( aTODO:__enumIndex() ) + ":" + hb_osNewLine() ) + ELSE + OutStd( "hbmk: C compiler command:" + hb_osNewLine() ) + ENDIF + ENDIF + OutStd( cCommand + hb_osNewLine() ) + IF ! Empty( cScriptFile ) + OutStd( "hbmk: C compiler script:" + hb_osNewLine() ) + OutStd( hb_MemoRead( cScriptFile ) + hb_osNewLine() ) + ENDIF ENDIF - OutStd( cCommand + hb_osNewLine() ) + + IF ! s_lDONTEXEC + IF hb_mtvm() + AAdd( aThreads, { hb_threadStart( @hbmk_run(), cCommand ), cCommand } ) + ELSE + IF ( tmp := hbmk_run( cCommand ) ) != 0 + OutErr( "hbmk: Error: Running C compiler. " + hb_ntos( tmp ) + ":" + hb_osNewLine() ) + IF ! s_lQuiet + OutErr( cCommand + hb_osNewLine() ) + ENDIF + nErrorLevel := 6 + ENDIF + ENDIF + ENDIF + IF ! Empty( cScriptFile ) - OutStd( "hbmk: C compiler script:" + hb_osNewLine() ) - OutStd( hb_MemoRead( cScriptFile ) + hb_osNewLine() ) + FErase( cScriptFile ) ENDIF - ENDIF + NEXT - IF ! s_lDONTEXEC .AND. ( tmp := hbmk_run( cCommand ) ) != 0 - OutErr( "hbmk: Error: Running C compiler. " + hb_ntos( tmp ) + ":" + hb_osNewLine() ) - IF ! s_lQuiet - OutErr( cCommand + hb_osNewLine() ) - ENDIF - nErrorLevel := 6 - ENDIF - - IF ! Empty( cScriptFile ) - FErase( cScriptFile ) + IF hb_mtvm() + FOR EACH thread IN aThreads + hb_threadJoin( thread[ 1 ], @tmp ) + IF tmp != 0 + OutErr( "hbmk: Error: Running C compiler job #" + hb_ntos( thread:__enumIndex() ) + ". " + hb_ntos( tmp ) + hb_osNewLine() ) + IF ! s_lQuiet + OutErr( thread[ 2 ] + hb_osNewLine() ) + ENDIF + nErrorLevel := 6 + ENDIF + NEXT ENDIF ENDIF ELSE @@ -3203,6 +3234,10 @@ FUNCTION hbmk( aArgs ) ENDIF ENDIF + IF s_lDEBUGTIME + OutStd( "hbmk: Running time: " + hb_ntos( secondscpu() - nStart ) + "s" + hb_osNewLine() ) + ENDIF + RETURN nErrorLevel STATIC FUNCTION SetupForGT( cGT, /* @ */ s_cGT, /* @ */ s_lGUI ) @@ -4963,9 +4998,6 @@ STATIC FUNCTION VCSDetect( cDir ) RETURN _VCS_UNKNOWN STATIC FUNCTION VCSID( cDir, /* @ */ cType ) -#ifdef _VCSID_USE_PROCESS - LOCAL hStdOut -#endif LOCAL hnd, cStdOut LOCAL nType := VCSDetect( cDir ) LOCAL cCommand @@ -4992,17 +5024,6 @@ STATIC FUNCTION VCSID( cDir, /* @ */ cType ) IF ! Empty( cCommand ) -#ifdef _VCSID_USE_PROCESS - /* This is cleaner, but won't work when using aliases/wrappers - for version control commands. */ - hnd := hb_processOpen( cCommand,, @hStdOut ) - IF hnd != F_ERROR - cStdOut := Space( 256 ) - tmp := FRead( hStdOut, @cStdOut, Len( cStdOut ) ) - cStdOut := Left( cStdOut, tmp ) - hb_processClose( hnd ) - FClose( hStdOut ) -#else hnd := hb_FTempCreateEx( @cTemp ) IF hnd != F_ERROR FClose( hnd ) @@ -5010,7 +5031,6 @@ STATIC FUNCTION VCSID( cDir, /* @ */ cType ) hb_run( cCommand ) cStdOut := hb_MemoRead( cTemp ) FErase( cTemp ) -#endif SWITCH nType CASE _VCS_SVN