Files
harbour-core/harbour/utils/hbmake/hbmake.prg
2001-03-26 22:13:26 +00:00

2003 lines
57 KiB
Plaintext

/*
* $Id$
*/
/*
* Harbour Project source code:
* hbmake.Prg Harbour make utility main file
*
* Copyright 2000 Luiz Rafael Culik <culik@sl.conex.net>
* www - http://www.harbour-project.org
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version, with one exception:
*
* The exception is that if you link the Harbour Runtime Library (HRL)
* and/or the Harbour Virtual Machine (HVM) with other files to produce
* an executable, this does not by itself cause the resulting executable
* to be covered by the GNU General Public License. Your use of that
* executable is in no way restricted on account of linking the HRL
* and/or HVM code into it.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA (or visit
* their web site at http://www.gnu.org/).
*
*/
#include 'fileio.ch'
#include "common.ch"
#include "radios.ch"
#include "checks.ch"
#ifdef __HARBOUR__
#define EOL hb_osnewline()
#define CRLF hb_osnewline()
#else
#define EOL chr(13)+chr(10)
#define hb_osnewline() chr(13)+chr(10)
#define CRLF hb_osnewline()
#endif
#xtranslate timetosec(<x>) => ((val(substr(<x>,1,2))*3600)+(val(substr(<x>,4,2))*60)+(val(substr(<x>,7,2))))
#define datediff(<x>,<y>) (<x>-<y>)
Static lPrint := .f.
Static nHandle
Static aDefines := {}
Static aBuildOrder := {}
Static aCommands := {}
Static aMacros := {}
Static aPrgs := {}
Static aCs := {}
Static aObjs := {}
Static lEof := .F.
Static aRes := {}
Static nLinkHandle
Static cLinker := "makefile.@@@"
Static cLinkcomm := ''
Static nFilePos := 1
Static aFile := {}
Static lBcc := .T.
Static lGcc := .F.
Static lVcc := .F.
Static lForce := .F.
Static szProject:=""
Static lLibrary:=.f.
Static lIgnoreErrors:=.F.
Static aDir
*+±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
*+
*+ Function main()
*+
*+±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
*+
Function main( cFile, p1, p2, p3, p4, p5, p6 )
Local nPos
Local aDef := {}
Local allParam
Default p1 To ""
Default p2 To ""
Default p3 To ""
Default p4 To ""
Default p5 To ""
Default p6 To ""
allParam:=p1 + p2 +p3+p4 + p5 +p6
allparam:=strtran(allparam,"/","-")
allparam:=strtran(allparam,"-el","-EL")
allparam:=strtran(allparam,"-e","-E")
allparam:=strtran(allparam,"-i","-I")
allparam:=strtran(allparam,"-p","-P")
allparam:=strtran(allparam,"-b","-B")
allparam:=strtran(allparam,"-g","-G")
allparam:=strtran(allparam,"-v","-V")
allparam:=strtran(allparam,"-f","-F")
If Pcount() == 0
?? "Harbour Make Utility"
? "Copyright 1999-2000, http://www.harbour-project.org"
? ""
? "Syntax: hbmake cFile [options]"
? ""
? "Options: /e[l] Create an New Makefile,If /el is"
? " used it, creates an new make file to build an library"
? " /D Define an macro"
? " /p Print all command and depencies"
? " /b+ Use BCC as C compiler"
? " /g Use GCC as C compiler"
? " /v Use MSVC as C compiler"
? " /f Force Recompiltion of all files"
? " /i Ignore errors returned by Commamnd"
? " Note: /p and /D can be used together"
? " Options with + are the default Value"
? " -D switch can accept multiple macros in the same line"
? " or use one macro per -D switch"
Return NIL
Endif
If cFile == NIL
? "File not Found"
Return Nil
Endif
If Pcount() == 2
if at("-F",allparam)>0
lforce := .T.
allparam:=strtran(allparam,"-F","")
Endif
if at("-B",allparam)>0
lBcc := .T.
lGcc := .F.
lVcc := .F.
allparam:=strtran(allparam,"-B","")
Endif
if at("-G",allparam)>0
lBcc := .F.
lGcc := .T.
lVcc := .F.
allparam:=strtran(allparam,"-G","")
Endif
if at("-V",allparam)>0
lBcc := .F.
lGcc := .F.
lVcc := .T.
allparam:=strtran(allparam,"-V","")
Endif
if at("-EL",allparam)>0
allparam:=strtran(allparam,"-EL","")
lLibrary:=.T.
crtlibmakfile( cFile )
Return nil
Endif
if at("-E",allparam)>0
allparam:=strtran(allparam,"-E","")
crtmakfile( cFile )
Return nil
Endif
if at("-I",allparam)>0
lIgnoreErrors := .T.
allparam:=strtran(allparam,"-I","")
Endif
if at("-P",allparam)>0
lPrint := .t.
allparam:=strtran(allparam,"-P","")
Endif
if at("-D",allparam)>0
allparam:="-D"+strtran(allparam,"-D",";")
allparam=strtran(allparam,"-D;","-D")
adef := listasarray2( alltrim(Substr( allparam, 3 )), ";" )
For nPos := 1 To Len( aDef )
If At( "=", adef[ nPos ] ) > 0
GetParaDefines( aDef[ nPos ] )
Endif
Next
Endif
Endif
If Pcount() > 2
if at("-F",allparam)>0
lforce := .T.
allparam:=strtran(allparam,"-F","")
Endif
if at("-B",allparam)>0
lBcc := .T.
lGcc := .F.
lVcc := .F.
allparam:=strtran(allparam,"-B","")
Endif
if at("-G",allparam)>0
lBcc := .F.
lGcc := .T.
lVcc := .F.
allparam:=strtran(allparam,"-G","")
Endif
if at("-V",allparam)>0
lBcc := .F.
lGcc := .F.
lVcc := .T.
allparam:=strtran(allparam,"-V","")
Endif
if at("-EL",allparam)>0
allparam:=strtran(allparam,"-EL","")
lLibrary:=.T.
crtlibmakfile( cFile )
Return nil
Endif
if at("-E",allparam)>0
allparam:=strtran(allparam,"-E","")
crtmakfile( cFile )
Return nil
Endif
if at("-I",allparam)>0
lIgnoreErrors := .T.
allparam:=strtran(allparam,"-I","")
Endif
if at("-P",allparam)>0
lPrint := .t.
allparam:=strtran(allparam,"-P","")
Endif
if at("-D",allparam)>0
allparam:="-D"+strtran(allparam,"-D",";")
allparam=strtran(allparam,"-D;","-D")
adef := listasarray2( alltrim(Substr( allparam, 3 )), ";" )
For nPos := 1 To Len( aDef )
If At( "=", adef[ nPos ] ) > 0
GetParaDefines( aDef[ nPos ] )
Endif
Next
Endif
Endif
parsemakfi( cFile )
If lPrint
PrintMacros()
Endif
if lForce
compfiles()
else
CompUpdatedfiles()
endif
outstd(cLinkComm)
! ( cLinkcomm )
Return nil
*+±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
*+
*+ Function parsemakfi()
*+
*+ Called from ( hbmake.prg ) 1 - function main()
*+
*+±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
*+
Function parsemakfi( cFile )
Local nPos
Local cBuffer := {}
Local cMacro := "#BCC"
Local cDep := "#DEPENDS"
Local cOpt := "#OPTS"
Local cCom := "#COMMANDS"
Local cBuild := "#BUILD"
Local cTemp := ""
Local cTemp1 := ''
Local aTemp := {}
Local lMacrosec := .f.
Local lBuildSec := .f.
Local lComSec := .f.
nHandle := FT_FUSE( cFile )
If nHandle < 0
Return nil
Endif
cBuffer := Trim( Substr( ReadLN( @lEof ), 1 ) )
Aadd( aDefines, { "HMAKEDIR", If( lgcc, GetMakeDir(), GetMakeDir() + "\.." ) } )
If lBcc
Aadd( aDefines, { "MAKEDIR", GetBccDir() + "\.." } )
Elseif lGcc
Aadd( aDefines, { "MAKEDIR", GetGccDir() } )
Elseif lVcc
Aadd( aDefines, { "MAKEDIR", GetVccDir() + "\.." } )
Endif
While !leof
If At( cMacro, cBuffer ) > 0
lMacroSec := .T.
lBuildSec := .f.
lComSec := .f.
Elseif At( cBuild, cBuffer ) > 0
lMacroSec := .f.
lBuildSec := .T.
lComSec := .f.
Elseif At( cCom, cBuffer ) > 0
lBuildSec := .f.
lComSec := .t.
lMacroSec := .f.
Endif
cTemp := Trim( Substr( ReadLN( @lEof ), 1 ) )
aTemp := listasArray2( Alltrim( cTemp ), "=" )
If lmacrosec
If Alltrim( Left( ctemp, 7 ) ) <> '!ifndef' .and. Alltrim( Left( ctemp, 6 ) ) <> "!endif"
If Len( atemp ) > 1
If At( "$", atemp[ 2 ] ) > 0
If lgcc .and. aTemp[ 1 ] = "CFLAG1" .or. lGcc .and. aTemp[ 1 ] = "CFLAG2"
Aadd( amacros, { aTemp[ 1 ], Strtran( Replacemacros( atemp[ 2 ] ), "\", "/" ) } )
Else
Aadd( amacros, { aTemp[ 1 ], Replacemacros( atemp[ 2 ] ) } )
Endif
Else
If lgcc .and. aTemp[ 1 ] = "CFLAG1" .or. lGcc .and. aTemp[ 1 ] = "CFLAG2"
Aadd( aMacros, { aTemp[ 1 ], Strtran( atemp[ 2 ], "\", "/" ) } )
Else
Aadd( aMacros, { aTemp[ 1 ], atemp[ 2 ] } )
Endif
Endif
Endif
if aTemp[ 1 ] = "PROJECT"
if at('.lib',atemp[2])>0 .or. at('.a',atemp[2])>0
lLibrary:=.t.
endif
endif
If aTemp[ 1 ] = "OBJFILES"
aObjs := listasArray2( replacemacros(atemp[ 2 ]), " " )
/* for nPos:=1 to len(aObjs)
if at('$(CF)',aObjs[nPos])>0
aObjs[nPos]:=replacemacros(aObjs[nPos])
endif
next
*/
Endif
If atemp[ 1 ] = "CFILES"
aCs := listasArray2( replacemacros(atemp[ 2 ]), " " )
/* for nPos:=1 to len(acs)
if at('$(CF)',acs[nPos])>0
acs[nPos]:=replacemacros(acs[nPos])
endif
next*/
for nPos:=1 to len(acs)
? acs[nPos]
next
Endif
If atemp[ 1 ] = "RESFILES"
aRes := listasArray2( replacemacros(atemp[ 2 ]), " " )
/* for nPos:=1 to len(aRes)
if at('$(CF)',aRes[nPos])>0
aRes[nPos]:=replacemacros(aRes[nPos])
endif
next*/
Endif
Else
// cTemp1:=TRIM( SUBSTR( ReadLN( @lEof ),1 ) )
checkDefine( cTemp )
// endif
Endif
Endif
If lbuildSec
szProject:=cTemp
aBuildOrder := listasarray2( ctemp, ":" )
// ? cTemp
if !llibrary
SetBuild()
else
SetLibBuild()
endif
Endif
If lComSec
If !Empty( ctemp )
Setcommands( cTemP )
Endif
Endif
If cTemp = "#BUILD"
cBuffer := cTEmp
Elseif cTemp == "#COMMANDS"
cbuffer := ctemp
Endif
Enddo
If Len( aCs ) > 0
For nPos := 1 To Len( aCs )
If !Empty( acs[ nPos ] )
cTemp := Strtran( acs[ nPos ], ".c", ".prg" )
If File( cTemp )
Aadd( aPrgs, Strtran( acs[ nPos ], ".c", ".prg" ) )
else
cTemp := Strtran( acs[ nPos ], ".C", ".PRG" )
If File( cTemp )
Aadd( aPrgs, Strtran( acs[ nPos ], ".C", ".PRG" ) )
endif
Endif
Endif
Next
Endif
Fclose( nhandle )
Return nil
*+±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
*+
*+ Function ListAsArray2()
*+
*+ Called from ( bccdir.prg ) 1 - function getbccdir()
*+ ( hbmake.prg ) 2 - function main()
*+ 5 - function parsemakfi()
*+ 1 - function getbccdir()
*+ 1 - function getvccdir()
*+ 1 - function getgccdir()
*+ 1 - function checkdefine()
*+ 1 - function setcommands()
*+ 1 - function replacemacros()
*+ 4 - function setbuild()
*+ 1 - function compfiles()
*+ 1 - function getparadefines()
*+
*+±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
*+
Function ListAsArray2( cList, cDelimiter )
Local nPos
Local aList := {} // Define an empty array
If cDelimiter = NIL
cDelimiter := ","
Endif
//
Do While ( nPos := At( cDelimiter, cList ) ) != 0
Aadd( aList, Alltrim( Substr( cList, 1, nPos - 1 ) ) ) // Add a new element
cList := Substr( cList, nPos + 1 )
Enddo
Aadd( aList, Alltrim( cList ) ) // Add final element
//
Return aList // Return the array
*+±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
*+
*+ Function GetMakeDir()
*+
*+ Called from ( hbmake.prg ) 2 - function parsemakfi()
*+
*+±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
*+
Function GetMakeDir()
Local cPath := ""
Local cExe := HB_ARGV( 0 )
cPath := Left( cexe, Rat( "\", cexe ) - 1 )
Return cPath
*+±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
*+
*+ Function GetBccDir()
*+
*+ Called from ( hbmake.prg ) 1 - function parsemakfi()
*+
*+±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
*+
Function GetBccDir()
Local cPath := ''
Local cEnv := Gete( "PATH" )
Local aEnv := listasarray2( cEnv, ";" )
Local nPos
For nPos := 1 To Len( aEnv )
If File( aenv[ nPos ] + '\bcc32.exe' ) .or. File( Upper( aenv[ nPos ] ) + '\BCC32.EXE' )
cPath := aenv[ nPos ]
Exit
Endif
Next
Return cPath
*+±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
*+
*+ Function GetVccDir()
*+
*+ Called from ( hbmake.prg ) 1 - function parsemakfi()
*+
*+±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
*+
Function GetVccDir()
Local cPath := ''
Local cEnv := Gete( "PATH" )
Local aEnv := listasarray2( cEnv, ";" )
Local nPos
For nPos := 1 To Len( aEnv )
If File( aenv[ nPos ] + '\cl.exe' ) .or. File( Upper( aenv[ nPos ] ) + '\cl.EXE' )
cPath := aenv[ nPos ]
Exit
Endif
Next
Return cPath
*+±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
*+
*+ Function GetGccDir()
*+
*+ Called from ( hbmake.prg ) 1 - function parsemakfi()
*+
*+±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
*+
Function GetGccDir()
Local cPath := ''
Local cEnv
Local aEnv
Local nPos
if at("linux",GetEnv("HB_ARCHITECTURE"))>0
cpath:="/usr/bin"
else
cEnv := Gete( "PATH" )
aEnv := listasarray2( cEnv, ";" )
For nPos := 1 To Len( aEnv )
If File( aenv[ nPos ] + '\gcc.exe' ) .or. File( Upper( aenv[ nPos ] ) + '\GCC.EXE' )
cPath := aenv[ nPos ]
Exit
Endif
Next
endif
Return cPath
*+±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
*+
*+ Function ReadLN()
*+
*+ Called from ( hbmake.prg ) 2 - function parsemakfi()
*+ 1 - function checkdefine()
*+ 1 - function setcommands()
*+ 2 - function setbuild()
*+
*+±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
*+
Function ReadLN( leof )
Local cBuffer := ""
cBuffer := FT_FREADLN()
cBuffer := Strtran( cBuffer, Chr( 13 ), '' )
cBuffer := Strtran( cBuffer, Chr( 10 ), '' )
FT_FSKIP( 1 )
leof := ft_FEOF()
Return cBuffer
*+±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
*+
*+ Function checkDefine()
*+
*+ Called from ( hbmake.prg ) 1 - function parsemakfi()
*+
*+±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
*+
Function checkDefine( cTemp )
Local cDef
Local nPos
Local cRead
Local aSet := {}
Local nMakePos
If cTemp == "!endif"
Return nil
Endif
cTemp := Trim( Substr( ReadLN( @lEof ), 1 ) )
cTemp := Strtran( cTemp, "!ifndef ", "" )
aSet := listasarray2( ctemp, "=" )
nPos := Ascan( adefines, { | x, y | x[ 1 ] == aset[ 1 ] } )
If nPos = 0
cRead := Alltrim( Strtran( aset[ 2 ], "$(", "" ) )
cRead := Strtran( cRead, ")\..", "" )
nMakePos := Ascan( aDefines, { | x, y | x[ 1 ] == cRead } )
If nMakePos > 0
Aadd( aDefines, { aset[ 1 ], aDefines[ nMakePos, 2 ] } )
Aadd( amacros, { aset[ 1 ], aDefines[ nMakePos, 2 ] } )
Endif
Endif
Return nil
*+±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
*+
*+ Function Setcommands()
*+
*+ Called from ( hbmake.prg ) 1 - function parsemakfi()
*+
*+±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
*+
Function Setcommands( cTemP )
Local cRead := Alltrim( readln( @leof ) )
Local nPos
Local nCount := 0
Local aTempMacros := {}
Local aLocalMacros :={}
aTempMacros := listasarray2( cREad, " " )
For nCount := 1 To Len( atempmacros )
If At( "$", atempmacros[ ncount ] ) > 0
if At( ";", atempmacros[ ncount ] ) > 0
aLocalMacros:=listasarray2( atempmacros[ ncount ], ";" )
for nPos:=1 to len( aLocalmacros)
findmacro( aLocalmacros[ nPos ], @cRead )
next
else
findmacro( atempmacros[ ncount ], @cRead )
endif
Endif
Next
Aadd( aCommands, { cTemp, cRead } )
Return nil
*+±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
*+
*+ Function Findmacro()
*+
*+ Called from ( hbmake.prg ) 1 - function setcommands()
*+ 1 - function replacemacros()
*+ 2 - function setbuild()
*+
*+±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
*+
Function Findmacro( cMacro, cRead )
Local nPos
Local cTemp
local aLocalMacros:={}
cMacro := Substr( cMacro, 1, At( ")", cMacro ) )
If At( "-", cMacro ) > 0
cMacro := Substr( cMacro, 3 )
Endif
If At( ";", cMacro ) > 0
cMacro := Substr( cMacro, At( ";", cMacro ) + 1 )
Endif
nPos := Ascan( aMacros, { | x, y | "$(" + Alltrim( x[ 1 ] ) + ")" == cMacro } )
If nPos = 0
cTemp := Strtran( cmacro, "$(", "" )
cTemp := Strtran( ctemp, ")", "" )
If !Empty( cTemp )
cRead := Alltrim( Strtran( cRead, cmacro, Gete( cTemp ) ) )
Endif
Else
cRead := Alltrim( Strtran( cRead, cmacro, amacros[ npos, 2 ] ) )
Endif
Return cRead
*+±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
*+
*+ Function Replacemacros()
*+
*+ Called from ( hbmake.prg ) 2 - function parsemakfi()
*+
*+±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
*+
Function Replacemacros( cMacros )
Local nPos
Local nCount := 0
Local aTempMacros := {}
local aLocalMacros:={}
// ? "replacing macros"
aTempMacros := listasarray2( cMacros, " " )
For nCount := 1 To Len( atempmacros )
If At( "$", atempmacros[ ncount ] ) > 0
if At( ";", atempmacros[ ncount ] ) > 0
aLocalMacros:=listasarray2( atempmacros[ ncount ], ";" )
for nPos:=1 to len( aLocalmacros)
findmacro( aLocalmacros[ nPos ], @cmacros )
next
else
findmacro( atempmacros[ ncount ], @cmacros )
endif
Endif
Next
Return cmacros
*+±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
*+
*+ Function setBuild()
*+
*+ Called from ( hbmake.prg ) 1 - function parsemakfi()
*+
*+±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
*+
Function setBuild()
Local cRead
Local nPos
Local aMacro
Local aTemp
Local nCount
// ? "setting link file"
cRead := Alltrim( readln( @leof ) )
szProject:=cRead
amacro := listasarray2( cRead, ":" )
If Len( amacro ) > 1
aTemp := listasarray2( amacro[ 2 ], " " )
For nPos := 1 To Len( aTemp )
Aadd( aBuildOrder, atemp[ nPos ] )
Next
Endif
Aadd( aBuildOrder, amacro[ 1 ] )
cRead := Strtran( cRead, "@&&!", "" )
amacro := listasarray2( cRead, '\' )
For nPos := 1 To Len( amacro )
If At( "$", amacro[ nPos ] ) > 0
findmacro( amacro[ nPos ], @cRead )
Endif
Next
cLinkcomm := cRead + " @" + cLinker
nLinkHandle := Fcreate( clinker )
//#define CRLF hb_osnewline()
For nPos := 1 To 7
cRead := Alltrim( readln( @leof ) )
amacro := listasarray2( cRead, " " )
For ncount := 1 To Len( amacro )
If At( "$", amacro[ nCount ] ) > 0
findmacro( amacro[ nCount ], @cRead )
If At( ".exe", cRead ) > 0 .and. lGcc
Fwrite( nLinkhandle, "-o" + cRead + CRLF )
Else
Fwrite( nLinkhandle, cRead + CRLF )
Endif
Endif
Next
Next
Fclose( nLinkhandle )
Return nil
*+±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
*+
*+ Function Compfiles()
*+
*+ Called from ( hbmake.prg ) 1 - function main()
*+
*+±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
*+
Function Compfiles()
Local cComm
Local cOld
Local nPos
Local nCount
Local nFiles
Local cErrText:=""
Local aOrder := listasarray2( aBuildOrder[ 2 ], " " )
Local lEnd:=.f.
For nCount := 1 To Len( aOrder )
If aOrder[ nCount ] == "$(CFILES)"
nPos := Ascan( aCommands, { | x, y | x[ 1 ] == ".prg.c:" } )
If nPos > 0
cComm := aCommands[ nPos, 2 ]
cOld := cComm
else
nPos := Ascan( aCommands, { | x, y | x[ 1 ] == ".PRG.C:" } )
If nPos > 0
cComm := aCommands[ nPos, 2 ]
cOld := cComm
endif
Endif
For nFiles := 1 To Len( aPrgs )
nPos := Ascan( aCs, { | x | Left( x, At( ".", x ) ) == Left( aPrgs[ nFiles ], At( ".", aPrgs[ nFiles ] ) ) } )
If nPos > 0
cComm := Strtran( cComm, "o$*", "o" + aCs[ nPos ] )
cComm := Strtran( cComm, "$**", aPrgs[ nFiles ] )
cComm += " > {test}.out"
! ( cComm )
cErrText := memoread( '{test}.out' )
lEnd := 'C2006' $ cErrText .or. 'No code generated' $ cErrText
if !lIgnoreErrors .and. lEnd
quit
endif
cComm := cold
Endif
Next
Endif
If aOrder[ nCount ] == "$(OBJFILES)"
If lGcc
nPos := Ascan( aCommands, { | x, y | x[ 1 ] == ".c.o:" } )
Else
nPos := Ascan( aCommands, { | x, y | x[ 1 ] == ".c.obj:" } )
Endif
If nPos > 0
cComm := aCommands[ nPos, 2 ]
cOld := ccomm
else
if lGcc
nPos := Ascan( aCommands, { | x, y | x[ 1 ] == ".C.O:" } )
If nPos > 0
cComm := aCommands[ nPos, 2 ]
cOld := cComm
endif
else
nPos := Ascan( aCommands, { | x, y | x[ 1 ] == ".C.OBJ:" } )
If nPos > 0
cComm := aCommands[ nPos, 2 ]
cOld := cComm
endif
endif
Endif
For nFiles := 1 To Len( aCs )
/* if at("$",acs[nFiles])>0
replacemacros(acs[nfiles])
endif
if at("$",aobjs[nFiles])>0
replacemacros(aobjs[nfiles])
endif
*/
nPos := Ascan( aObjs, { | x | Left( x, At( ".", x ) ) == Left( acs[ nFiles ], At( ".", acs[ nFiles ] ) ) } )
If nPos > 0
cComm := Strtran( cComm, "o$*", "o" + aObjs[ nPos ] )
cComm := Strtran( cComm, "$**", acs[ nFiles ] )
outstd( " ")
// ? cComm
! ( cComm )
ccomm := cold
Endif
Next
Endif
If aOrder[ nCount ] == "$(RESDEPEN)"
nPos := Ascan( aCommands, { | x, y | x[ 1 ] == ".rc.res:" } )
If nPos > 0
cComm := aCommands[ nPos, 2 ]
Endif
For nFiles := 1 To Len( aRes )
// nPos:=ascan(aObjs,{|x| left(x,at(".",x)) == left(acs[nFiles],at(".",acs[nFiles]))})
If !Empty( ares[ nFiles ] )
cComm := Strtran( cComm, "$<", aRes[ nFiles ] )
outstd(" ")
! ( cComm )
Endif
Next
Endif
Next
Return nil
*+±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
*+
*+ Function GetParaDefines()
*+
*+ Called from ( hbmake.prg ) 2 - function main()
*+
*+±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
*+
Function GetParaDefines( cTemp )
Local cDef
Local nPos
Local cRead
Local aSet := {}
Local nMakePos
aSet := listasarray2( ctemp, "=" )
nPos := Ascan( adefines, { | x, y | x[ 1 ] == aset[ 1 ] } )
If nPos = 0
cRead := Alltrim( Strtran( aset[ 2 ], "$(", "" ) )
cRead := Strtran( cRead, ")\..", "" )
nMakePos := Ascan( aDefines, { | x, y | x[ 1 ] == cRead } )
If nMakePos = 0
Aadd( aDefines, { aset[ 1 ], aset[ 2 ] } )
Aadd( amacros, { aset[ 1 ], aset[ 2 ] } )
Endif
Endif
Return nil
*+±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
*+
*+ Function PrintMacros()
*+
*+ Called from ( hbmake.prg ) 1 - function main()
*+
*+±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
*+
Function PrintMacros()
Local nPos
Local cRead := ""
Outstd( "HBMAKE Version ", Version(), "CopyRight (c) 2000 The Harbour Project" + CRLF )
Outstd( "" + CRLF )
Outstd( "Macros:" + CRLF )
For nPos := 1 To Len( aMacros )
Outstd( " " + aMacros[ nPos, 1 ] + " = " + aMacros[ nPos, 2 ] + CRLF )
Next
Outstd( "Implicit Rules:" + CRLF )
For nPos := 1 To Len( aCommands )
Outstd( " " + aCommands[ nPos, 1 ] + hb_osnewline() + " " + aCommands[ nPos, 2 ] + CRLF )
Next
Outstd( "" + CRLF )
Outstd( "Targets:" )
Outstd( " " + szProject + ":" + CRLF )
Outstd( " " + "Flags :" + CRLF )
Outstd( " " + "Dependents :" )
For nPos := 1 To Len( aCs )
Outstd( acs[ nPos ] + " ")
Next
For nPos := 1 To Len( aobjs )
Outstd( aobjs[ nPos ] + " ")
Next
Outstd( " " + CRLF )
Outstd( " commands:" + aBuildOrder[ Len( aBuildOrder ) ] )
Outstd( " " + CRLF )
Outstd( " " + CRLF )
Outstd( " " + CRLF )
Return Nil
*+±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
*+
*+ Function crtmakfile()
*+
*+ Called from ( hbmake.prg ) 2 - function main()
*+
*+±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
*+
Func crtmakfile( cFile )
Local ain := {}
Local aOut := {}
Local aSrc := Directory( "*.prg" )
Local nLenaSrc := Len( asrc )
Local nLenaOut
Local lFwh := .f.
Local lCw := .f.
Local lRddAds := .f.
Local cOs := "Win32"
Local cCompiler := "BCC"
Local cfwhpath := space(40)
Local ccwpath := space(40)
Local cmainfile := ""
Local cRddAds := ""
Local lAutomemvar := .f.
Local lvarismemvar := .f.
Local ldebug := .f.
Local lSupressline := .f.
Local cGrap := "NONE"
Local cDefHarOpts := ""
Local cDefcOpts := ""
Local cDefLinkOpts := ""
Local lCompMod := .f.
Local x
Local lGenppo := .f.
Local getlist := {}
Local cTopFile := ""
Local cDefBccLibs := "lang.lib vm.lib rtl.lib rdd.lib macro.lib pp.lib dbfntx.lib dbfcdx.lib common.lib gtwin.lib"
Local cDefGccLibs := "-lvm -lrtl -lgtdos -llang -lrdd -lrtl -lvm -lmacro -lpp -ldbfntx -ldbfcdx -lcommon"
Local cscreen := Savescreen( 0, 0, Maxrow(), Maxcol() )
local citem:=""
nLinkHandle := Fcreate( cFile )
Fwrite( nLinkHandle, "#BCC" + CRLF )
Fwrite( nLinkHandle, "VERSION=BCB.01" + CRLF )
Fwrite( nLinkHandle, "!ifndef BCB" + CRLF )
Fwrite( nLinkHandle, "BCB = $(MAKEDIR)\.." + CRLF )
Fwrite( nLinkHandle, "!endif" + CRLF )
Fwrite( nLinkHandle, CRLF )
Fwrite( nLinkHandle, "!ifndef BHC" + CRLF )
Fwrite( nLinkHandle, "BHC = $(HMAKEDIR)\.." + CRLF )
Fwrite( nLinkHandle, "!endif" + CRLF )
Fwrite( nLinkHandle, " " + CRLF )
Cls
Setcolor( 'w/b+,w/b,w+/b,w/b+,w/b,w+/b' )
@ 0, 0, Maxrow(), Maxcol() Box( Chr( 201 ) + Chr( 205 ) + Chr( 187 ) + Chr( 186 ) + Chr( 188 ) + Chr( 205 ) + Chr( 200 ) + Chr( 186 ) + Space( 1 ) )
ATTENTION( "Enviroment options", 0 )
@ 1, 1 Say "Select Os"
@ 1, 12 Get cos radio { "Win32", "OS/2", "Linux" }
@ 1, 23 Say "Select C Compiler"
@ 1, 40 Get cCompiler radio { "BCC", "MSVC", "GCC" }
@ 1, 48 Say "Graphic Library"
@ 1, 64 Get lFwh checkbox "Use FWH" when Cos=="Win32"
@ 2, 64 Get lcw checkbox "Use C4W" when Cos=="Win32"
@ 3, 64 Get lRddads checkbox "Use RddAds" when Cos=="Win32"
Read
If lFwh
@ 4, 1 Say "FWH path" Get cfwhpath
Elseif lCw
@ 4, 1 Say "C4H path" Get ccwpath
Endif
ATTENTION( "Harbour Options", 5 )
@ 6, 1 Get lautomemvar checkbox "Automatic memvar declaration"
@ 6, 43 Get lvarismemvar checkbox "Variables are assumed M->"
@ 7, 1 Get lDebug checkbox "Debug info"
@ 7, 43 Get lSupressline checkbox "Suppress line number information"
@ 8, 1 Get lGenppo checkbox "Generate pre-processed output"
@ 8, 43 Get lCompMod checkbox "compile module only"
Read
lBcc := If( At( "BCC", cCompiler ) > 0, .t., .f. )
lVcc := If( At( "MSVC", cCompiler ) > 0, .t., .f. )
lGcc := If( At( "GCC", cCompiler ) > 0, .t., .f. )
if lAutomemvar
cDefHarOpts+=" -a "
endif
if lvarismemvar
cDefHarOpts+=" -v "
endif
if ldebug
cDefHarOpts+=" -b "
endif
if lSupressline
cDefHarOpts+=" -l "
endif
if lGenppo
cDefHarOpts+=" -p "
endif
if lCompmod
cDefHarOpts+=" -m "
endif
If lBcc
Aadd( aCommands, { ".cpp.obj:", "$(BCB)\BIN\bcc32 $(CFLAG1) $(CFLAG2) -o$* $*" } )
Aadd( aCommands, { ".c.obj:", "$(BCB)\BIN\bcc32 -I$(BHC)\include $(CFLAG1) $(CFLAG2) -o$* $**" } )
Aadd( aCommands, { ".prg.c:", "$(BHC)\bin\harbour -n -I$(BHC)\include $(HARBOURFLAGS) -I$(FWH)\include -o$* $**" } )
Aadd( aCommands, { ".rc.res:", "$(BCB)\BIN\brcc32 $(RFLAGS) $<" } )
Elseif lGcc
if at("linux",Getenv("HB_ARCHITECTURE"))>0 .or. cOs=="Linux"
Aadd( aCommands, { ".cpp.o:", "$(BCB)/gcc $(CFLAG1) $(CFLAG2) -o$* $*" } )
Aadd( aCommands, { ".c.o:", "$(BCB)/gcc -I$(HB_INC_INSTALL) $(CFLAG1) $(CFLAG2) -I. -o$* $**" } )
Aadd( aCommands, { ".prg.c:", "$(BHC)/harbour -n -I$(HB_INC_INSTALL) -I. -o$* $**" } )
else
Aadd( aCommands, { ".cpp.o:", "$(BCB)\gcc $(CFLAG1) $(CFLAG2) -o$* $*" } )
Aadd( aCommands, { ".c.o:", "$(BCB)\gcc -I$(BHC)/../include $(CFLAG1) $(CFLAG2) -I. -o$* $**" } )
Aadd( aCommands, { ".prg.c:", "$(BHC)\harbour -n -I$(BHC)/../include $(HARBOURFLAGS) -o$* $**" } )
endif
Elseif lVcc
Aadd( aCommands, { ".cpp.obj:", "$(BCB)\bin\cl $(CFLAG1) $(CFLAG2) -Fo$* $*" } )
Aadd( aCommands, { ".c.obj:", "$(BCB)\bin\cl -I$(BHC)\include $(CFLAG1) $(CFLAG2) -Fo$* $**" } )
Aadd( aCommands, { ".prg.c:", "$(BHC)\bin\harbour -n -I$(BHC)\include $(HARBOURFLAGS) -I$(C4W)\include -o$* $**" } )
Aadd( aCommands, { ".rc.res:", "$(BCB)\BIN\rc $(RFLAGS) $<" } )
Endif
attention( 'Spacebar to select, Enter to continue process', 22 )
Asize( aIn, nLenaSrc )
For x := 1 To nLenaSrc
aIn[ x ] := Pad( aSrc[ x, 1 ], 13 ) + ;
Str( aSrc[ x, 2 ], 8 ) + ' ' + ;
Dtoc( aSrc[ x, 3 ] ) + ' ' + ;
aSrc[ x, 4 ]
Next
aOut := Aclone( aIn )
pickarry( 10, 15, 19, 64, aIn, aOut )
nLenaOut := Len( aOut )
For x := 1 To nLenaOut
aOut[ x ] := lower(Trim( Left( aOut[ x ], 12 ) ))
Next
aOut := Asort( aOut )
If Len( aOut ) == 1
cTopFile := aOut[ 1 ]
Else
attention( 'Select the TOP MODULE of your executable', 22 )
cTopFile := pickfile( "*.prg" )
Endif
x:=ascan(aOut,{|x| lower(x)==lower(cTopFile)})
if x>0
adel(aout,x)
asize(aout,len(aout)-1)
endif
aCs := aclone(aout)
For x := 1 To Len( aCs )
cItem:= aCs[ x ]
aCs[ x ]:=strtran( cItem, ".prg", ".c" )
Next
aObjs := aClone(aout)
For x := 1 To Len( aObjs )
cItem:=aObjs[ x ]
If !lGcc
aObjs[ x ]:=strtran( cItem, ".prg", ".obj" )
Else
aObjs[ x ]:=strtran( cItem, ".prg", ".o" )
Endif
Next
If lFwh
Fwrite( nLinkHandle, "FWH = " + cfwhpath + CRLF )
Elseif lCw
Fwrite( nLinkHandle, "C4W =" + ccwpath + CRLF )
Endif
if lGcc
if at("linux",Getenv("HB_ARCHITECTURE"))>0 .or. cOs=="Linux"
Fwrite( nLinkHandle, "PROJECT = " + if(isupper(cTopfile),Strtran( cTopfile, ".PRG", "" ),Strtran( cTopfile, ".prg", "" )) + " $(PR) "+CRLF )
else
Fwrite( nLinkHandle, "PROJECT = " + if(isupper(cTopfile),Strtran( cTopfile, ".PRG", ".EXE" ),Strtran( cTopfile, ".prg", ".exe" )) +" $(PR) "+ CRLF )
endif
else
Fwrite( nLinkHandle, "PROJECT = " + if(isupper(cTopfile),Strtran( cTopfile, ".PRG", ".EXE" ),Strtran( cTopfile, ".prg", ".exe" )) + " $(PR) "+CRLF )
endif
Fwrite( nLinkHandle, "OBJFILES = " + if(isupper(cTopfile),Strtran( cTopfile, ".PRG", ".OBJ" ),Strtran( cTopfile, ".prg", ".obj" )) )
if len(aObjs)<1
Fwrite( nLinkHandle, +" $(OB) "+ CRLF )
else
//Fwrite( nLinkHandle, "OBJFILES = " + if(isupper(cTopfile),Strtran( cTopfile, ".PRG", ".OBJ" ),Strtran( cTopfile, ".prg", ".obj" )))
For x := 1 To Len( aobjs )
If x <> Len( aobjs ) .and. aObjs[x]<>cTopfile
Fwrite( nLinkHandle, " " + aobjs[ x ] )
Else
Fwrite( nLinkHandle, " " + aobjs[ x ] +" $(OB) "+ CRLF )
Endif
Next
endif
Fwrite( nLinkHandle, "CFILES = " + if(isupper(cTopfile),Strtran( cTopfile, ".PRG", ".C" ),Strtran( cTopfile, ".prg", ".c" )))
if len(aCs)<1
Fwrite( nLinkHandle, +" $(CF)"+ CRLF )
//
else
//Fwrite( nLinkHandle, "CFILES = " + if(isupper(cTopfile),Strtran( cTopfile, ".PRG", ".C" ),Strtran( cTopfile, ".prg", ".c" )))
For x := 1 To Len( acs )
If x <> Len( acs ) .and. aCs[x]<>cTopfile
Fwrite( nLinkHandle, " " + aCs[ x ] )
Else
Fwrite( nLinkHandle, " " + aCs[ x ] +" $(CF) "+ CRLF )
Endif
Next
endif
Fwrite( nLinkHandle, "RESFILES = " + CRLF )
Fwrite( nLinkHandle, "RESDEPEN = $(RESFILES)" + CRLF )
if lRddads
cDefBccLibs+=" rddads.lib ace32.lib"
endif
if lBcc .or. lVcc
If lFwh
Fwrite( nLinkHandle, "LIBFILES = $(FWH)\lib\fiveh.lib $(FWH)\lib\fivehc.lib " + cDefBccLibs + CRLF )
elseif lCw
Fwrite( nLinkHandle, "LIBFILES = $(C4W)\c4wclass.lib $(C4W)\wbrowset.lib $(C4W)\otabt.lib $(C4W)\clip4win.lib" + cDefBccLibs + CRLF )
else
Fwrite( nLinkHandle, "LIBFILES = " +cDefBccLibs + CRLF )
endif
elseif lGcc
Fwrite( nLinkHandle, "LIBFILES = " +cDefgccLibs + CRLF )
endif
Fwrite( nLinkHandle, "DEFFILE = "+CRLF)
fWrite( nLinkHandle, "HARBOURFLAGS = " +cDefHarOpts+CRLF)
if lBcc
Fwrite( nLinkHandle, "CFLAG1 = -OS $(CFLAGS) -d -L$(BHC)\lib;$(FWH)\lib -c"+CRLF)
Fwrite( nLinkHandle, "CFLAG2 = -I$(BHC)\include;$(BCB)\include" +CRLF)
Fwrite( nLinkHandle, "RFLAGS = "+CRLF)
Fwrite( nLinkHandle, "LFLAGS = -L$(BCB)\lib\obj;$(BCB)\lib;$(BHC)\lib;$(FWH)\lib -Gn -M -m -s" + if(lFwh,"-Tpe","")+CRLF)
Fwrite( nLinkHandle, "IFLAGS = " +CRLF)
Fwrite( nLinkHandle, "LINKER = ilink32"+CRLF)
Fwrite( nLinkHandle, " "+CRLF)
Fwrite( nLinkHandle, "ALLOBJ = " +if(lFwh,"c0w32.obj","c0x32.obj")+ " $(OBJFILES)"+CRLF)
Fwrite( nLinkHandle, "ALLRES = $(RESFILES)"+CRLF)
Fwrite( nLinkHandle, "ALLLIB = $(LIBFILES) import32.lib cw32.lib"+CRLF)
Fwrite( nLinkHandle, ".autodepend"+CRLF)
elseif lVcc
Fwrite( nLinkHandle, "CFLAG1 = -I$(INCLUDE_DIR) -TP -W3 -nologo $(C_USR) $(CFLAGS)"+CRLF)
Fwrite( nLinkHandle, "CFLAG2 = -c"+CRLF)
Fwrite( nLinkHandle, "RFLAGS = "+CRLF)
Fwrite( nLinkHandle, "LFLAGS = /LIBPATH:$(BCB)\lib;$(BHC)\lib;$(C4W)\lib /SUBSYSTEM:CONSOLE"+CRLF)
Fwrite( nLinkHandle, "IFLAGS = "+CRLF)
Fwrite( nLinkHandle, "LINKER = link"+CRLF)
Fwrite( nLinkHandle, " "+CRLF)
Fwrite( nLinkHandle, "ALLOBJ = "+if(lCw,"$(C4W)\initc.obj","")+"$(OBJFILES)"+CRLF)
Fwrite( nLinkHandle, "ALLRES = $(RESFILES)"+CRLF)
Fwrite( nLinkHandle, "ALLLIB = $(LIBFILES) comdlg32.lib shell32.lib user32.lib gdi32.lib"+CRLF)
elseif lGcc
Fwrite( nLinkHandle, "CFLAG1 = "+if(at("linux",Getenv("HB_ARCHITECTURE"))>0 ,"-I$(HB_INC_INSTALL)"," -I$(BHC)/../include")+ " -c -Wall"+CRLF)
Fwrite( nLinkHandle, "CFLAG2 = "+if(at("linux",Getenv("HB_ARCHITECTURE"))>0 ,"-L$(HB_LIB_INSTALL)"," -L$(BHC)/../lib")+CRLF)
Fwrite( nLinkHandle, "RFLAGS = "+CRLF)
Fwrite( nLinkHandle, "LFLAGS = $(CFLAG2)"+CRLF)
Fwrite( nLinkHandle, "IFLAGS = "+CRLF)
Fwrite( nLinkHandle, "LINKER = gcc"+CRLF)
Fwrite( nLinkHandle, " "+CRLF)
Fwrite( nLinkHandle, "ALLOBJ = $(OBJFILES) "+CRLF)
Fwrite( nLinkHandle, "ALLRES = $(RESFILES) "+CRLF)
Fwrite( nLinkHandle, "ALLLIB = $(LIBFILES) "+CRLF)
Fwrite( nLinkHandle, ".autodepend"+CRLF)
endif
Fwrite( nLinkHandle, " "+CRLF)
Fwrite( nLinkHandle, "#COMMANDS"+CRLF)
For x:=1 to len(aCommands)
if lBcc
Fwrite( nLinkHandle, aCommands[x,1]+CRLF)
Fwrite( nLinkHandle, aCommands[x,2]+CRLF)
Fwrite( nLinkHandle, " "+CRLF)
elseif lVcc
Fwrite( nLinkHandle, aCommands[x,1]+CRLF)
Fwrite( nLinkHandle, aCommands[x,2]+CRLF)
Fwrite( nLinkHandle, " "+CRLF)
elseif lGcc
Fwrite( nLinkHandle, aCommands[x,1]+CRLF)
Fwrite( nLinkHandle, aCommands[x,2]+CRLF)
Fwrite( nLinkHandle, " "+CRLF)
endif
next
if lBcc
Fwrite( nLinkHandle, "#BUILD"+CRLF)
Fwrite( nLinkHandle, " "+CRLF)
Fwrite( nLinkHandle, "$(PROJECT): $(CFILES) $(OBJFILES) $(RESDEPEN) $(DEFFILE)"+CRLF)
Fwrite( nLinkHandle, " $(BCB)\BIN\$(LINKER) @&&!"+CRLF)
Fwrite( nLinkHandle, " $(LFLAGS) +"+CRLF)
Fwrite( nLinkHandle, " $(ALLOBJ), +"+CRLF)
Fwrite( nLinkHandle, " $(PROJECT),, +"+CRLF)
Fwrite( nLinkHandle, " $(ALLLIB), +"+CRLF)
Fwrite( nLinkHandle, " $(DEFFILE), +"+CRLF)
Fwrite( nLinkHandle, " $(ALLRES) "+CRLF)
Fwrite( nLinkHandle, "!"+CRLF)
elseif lVcc
Fwrite( nLinkHandle, "#BUILD"+CRLF)
Fwrite( nLinkHandle, ""+CRLF)
Fwrite( nLinkHandle, "$(PROJECT): $(CFILES) $(OBJFILES) $(RESDEPEN) $(DEFFILE)"+CRLF)
Fwrite( nLinkHandle, " $(BCB)\BIN\$(LINKER) @&&!"+CRLF)
Fwrite( nLinkHandle, " $(LFLAGS)"+CRLF)
Fwrite( nLinkHandle, " $(ALLOBJ) "+CRLF)
Fwrite( nLinkHandle, " $(PROJECT)"+CRLF)
Fwrite( nLinkHandle, " $(PROJECTMAP)"+CRLF)
Fwrite( nLinkHandle, " $(ALLLIB) "+CRLF)
Fwrite( nLinkHandle, " $(DEFFILE) "+CRLF)
Fwrite( nLinkHandle, " $(ALLRES) "+CRLF)
Fwrite( nLinkHandle, "!"+CRLF)
elseif lGcc
Fwrite( nLinkHandle, "#BUILD"+CRLF)
Fwrite( nLinkHandle, " "+CRLF)
Fwrite( nLinkHandle, "$(PROJECT): $(CFILES) $(OBJFILES) $(RESDEPEN) $(DEFFILE)"+CRLF)
Fwrite( nLinkHandle, " $(BCB)\$(LINKER) @&&!"+CRLF)
Fwrite( nLinkHandle, " $(PROJECT) "+CRLF)
Fwrite( nLinkHandle, " $(ALLOBJ) "+CRLF)
Fwrite( nLinkHandle, " $(LFLAGS) "+CRLF)
Fwrite( nLinkHandle, " $(ALLLIB) "+CRLF)
Fwrite( nLinkHandle, "!"+CRLF)
endif
Return nil
*+±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
*+
*+ Procedure ATTENTION()
*+
*+ Called from ( hbmake.prg ) 4 - function crtmakfile()
*+
*+±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
*+
Procedure ATTENTION( CSTRING, NLINENUM, CCOLOR )
Local COLDCOLOR
Default NLINENUM To 24
Default CCOLOR To 'GR+/R'
COLDCOLOR := Setcolor( CCOLOR )
CSTRING := ' ' + Alltrim( CSTRING ) + ' '
Devpos( NLINENUM, c( CSTRING ) )
Devout( CSTRING )
Setcolor( COLDCOLOR )
Return
*+±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
*+
*+ Function c()
*+
*+ Called from ( hbmake.prg ) 1 - procedure attention()
*+
*+±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
*+
Function c( CSTRING )
Return Max( ( Maxcol() / 2 ) - Int( Len( CSTRING ) / 2 ), 0 )
*+ EOF: HBMAKE.PRG
Function CompUpdatedfiles()
Local cComm
Local cOld
Local nPos
Local nCount
Local nFiles
Local aCtocompile:={}
Local aOrder := listasarray2( aBuildOrder[ 2 ], " " )
local lEnd
Local cErrText:=""
For nCount := 1 To Len( aOrder )
If aOrder[ nCount ] == "$(CFILES)"
nPos := Ascan( aCommands, { | x, y | x[ 1 ] == ".prg.c:" } )
If nPos > 0
cComm := aCommands[ nPos, 2 ]
cOld := cComm
else
nPos := Ascan( aCommands, { | x, y | x[ 1 ] == ".PRG.C:" } )
If nPos > 0
cComm := aCommands[ nPos, 2 ]
cOld := cComm
endif
Endif
For nFiles := 1 To Len( aPrgs )
nPos := Ascan( aCs, { | x | Left( x, At( ".", x ) ) == Left( aPrgs[ nFiles ], At( ".", aPrgs[ nFiles ] ) ) } )
if fileisnewer(aprgs[nFiles],aCs)
If nPos > 0
aadd(aCtocompile,acs[nPos])
cComm := Strtran( cComm, "o$*", "o" + aCs[ nPos ] )
cComm := Strtran( cComm, "$**", aPrgs[ nFiles ] )
// outstd( " ")
! ( cComm )
cErrText := memoread( '{test}.out' )
lEnd := 'C2006' $ cErrText .or. 'No code generated' $ cErrText
if file('{test}.out' )
ferase('{test}.out' )
endif
if !lIgnoreErrors .and. lEnd
quit
endif
cComm := cold
Endif
endif
Next
Endif
If aOrder[ nCount ] == "$(OBJFILES)"
If lGcc
nPos := Ascan( aCommands, { | x, y | x[ 1 ] == ".c.o:" } )
Else
nPos := Ascan( aCommands, { | x, y | x[ 1 ] == ".c.obj:" } )
Endif
If nPos > 0
cComm := aCommands[ nPos, 2 ]
cOld := ccomm
else
If lGcc
nPos := Ascan( aCommands, { | x, y | x[ 1 ] == ".C.O:" } )
Else
nPos := Ascan( aCommands, { | x, y | x[ 1 ] == ".C.OBJ:" } )
endif
Endif
For nFiles := 1 To Len( aCtocompile )
nPos := Ascan( aObjs, { | x | Left( x, At( ".", x ) ) == Left( aCtocompile[ nFiles ], At( ".", aCtocompile[ nFiles ] ) ) } )
If nPos > 0
cComm := Strtran( cComm, "o$*", "o" + aObjs[ nPos ] )
cComm := Strtran( cComm, "$**", aCtocompile[ nFiles ] )
outstd( " ")
// ? cComm
! ( cComm )
ccomm := cold
Endif
Next
Endif
If aOrder[ nCount ] == "$(RESDEPEN)"
nPos := Ascan( aCommands, { | x, y | x[ 1 ] == ".rc.res:" } )
If nPos > 0
cComm := aCommands[ nPos, 2 ]
Endif
For nFiles := 1 To Len( aRes )
// nPos:=ascan(aObjs,{|x| left(x,at(".",x)) == left(acs[nFiles],at(".",acs[nFiles]))})
If !Empty( ares[ nFiles ] )
cComm := Strtran( cComm, "$<", aRes[ nFiles ] )
outstd(" ")
! ( cComm )
Endif
Next
Endif
Next
Return nil
function fileisnewer(cFile,as)
local nCount := 0
For nCount:=1 to len(aPrgs)
adir := { cFile,, filedate( cFile ), filetime( cFile ), ;
as[nCount], filedate( as[nCount] ), filetime( as[nCount] )}
if empty( adir[ 7 ] )
adir[ 2 ] := .t.
else
adir[ 2 ] := td2jul( adir[ 4 ], adir[ 3 ] ) > td2jul( adir[ 7 ], adir[ 6 ] )
endif
next
return aDir[2]
Func crtlibmakfile( cFile )
Local ain := {}
Local aOut := {}
Local aSrc := Directory( "*.prg" )
Local nLenaSrc := Len( asrc )
Local nLenaOut
Local ainC := {}
Local aOutC := {}
Local aSrcC := Directory( "*.c" )
Local nLenaSrcC := Len( asrcc )
Local nLenaOutC
Local lFwh := .f.
Local lCw := .f.
Local lRddAds := .f.
Local cOs := "Win32"
Local cCompiler := "BCC"
Local cfwhpath := space(40)
Local ccwpath := space(40)
Local cmainfile := ""
Local cRddAds := ""
Local lAutomemvar := .f.
Local lvarismemvar := .f.
Local ldebug := .f.
Local lSupressline := .f.
Local cGrap := "NONE"
Local cDefHarOpts := ""
Local cDefcOpts := ""
Local cDefLinkOpts := ""
Local lCompMod := .f.
Local x,y,nPos
Local lGenppo := .f.
Local getlist := {}
Local cTopFile := ""
Local cscreen := Savescreen( 0, 0, Maxrow(), Maxcol() )
local citem:=""
nLinkHandle := Fcreate( cFile )
Fwrite( nLinkHandle, "#BCC" + CRLF )
Fwrite( nLinkHandle, "VERSION=BCB.01" + CRLF )
Fwrite( nLinkHandle, "!ifndef BCB" + CRLF )
Fwrite( nLinkHandle, "BCB = $(MAKEDIR)\.." + CRLF )
Fwrite( nLinkHandle, "!endif" + CRLF )
Fwrite( nLinkHandle, CRLF )
Fwrite( nLinkHandle, "!ifndef BHC" + CRLF )
Fwrite( nLinkHandle, "BHC = $(HMAKEDIR)\.." + CRLF )
Fwrite( nLinkHandle, "!endif" + CRLF )
Fwrite( nLinkHandle, " " + CRLF )
Cls
Setcolor( 'w/b+,w/b,w+/b,w/b+,w/b,w+/b' )
@ 0, 0, Maxrow(), Maxcol() Box( Chr( 201 ) + Chr( 205 ) + Chr( 187 ) + Chr( 186 ) + Chr( 188 ) + Chr( 205 ) + Chr( 200 ) + Chr( 186 ) + Space( 1 ) )
ATTENTION( "Enviroment options", 0 )
@ 1, 1 Say "Select Os"
@ 1, 12 Get cos radio { "Win32", "OS/2", "Linux" }
@ 1, 23 Say "Select C Compiler"
@ 1, 40 Get cCompiler radio { "BCC", "MSVC", "GCC" }
Read
@ 4, 1 Say "Library name with our extention" Get cfwhpath
ATTENTION( "Harbour Options", 5 )
@ 6, 1 Get lautomemvar checkbox "Automatic memvar declaration"
@ 6, 43 Get lvarismemvar checkbox "Variables are assumed M->"
@ 7, 1 Get lDebug checkbox "Debug info"
@ 7, 43 Get lSupressline checkbox "Suppress line number information"
@ 8, 1 Get lGenppo checkbox "Generate pre-processed output"
@ 8, 43 Get lCompMod checkbox "compile module only"
Read
lBcc := If( At( "BCC", cCompiler ) > 0, .t., .f. )
lVcc := If( At( "MSVC", cCompiler ) > 0, .t., .f. )
lGcc := If( At( "GCC", cCompiler ) > 0, .t., .f. )
if lAutomemvar
cDefHarOpts+=" -a "
endif
if lvarismemvar
cDefHarOpts+=" -v "
endif
if ldebug
cDefHarOpts+=" -b "
endif
if lSupressline
cDefHarOpts+=" -l "
endif
if lGenppo
cDefHarOpts+=" -p "
endif
if lCompmod
cDefHarOpts+=" -m "
endif
If lBcc
Aadd( aCommands, { ".cpp.obj:", "$(BCB)\BIN\bcc32 $(CFLAG1) $(CFLAG2) -o$* $*" } )
Aadd( aCommands, { ".c.obj:", "$(BCB)\BIN\bcc32 -I$(BHC)\include $(CFLAG1) $(CFLAG2) -o$* $**" } )
Aadd( aCommands, { ".prg.c:", "$(BHC)\bin\harbour -n -I$(BHC)\include $(HARBOURFLAGS) -I$(FWH)\include -o$* $**" } )
Aadd( aCommands, { ".rc.res:", "$(BCB)\BIN\brcc32 $(RFLAGS) $<" } )
Elseif lGcc
if at("linux",Getenv("HB_ARCHITECTURE"))>0 .or. cOs=="Linux"
Aadd( aCommands, { ".cpp.o:", "$(BCB)/gcc $(CFLAG1) $(CFLAG2) -o$* $*" } )
Aadd( aCommands, { ".c.o:", "$(BCB)/gcc -I$(HB_INC_INSTALL) $(CFLAG1) $(CFLAG2) -I. -o$* $**" } )
Aadd( aCommands, { ".prg.c:", "$(BHC)/harbour -n -I$(HB_INC_INSTALL) -I. -o$* $**" } )
else
Aadd( aCommands, { ".cpp.o:", "$(BCB)\gcc $(CFLAG1) $(CFLAG2) -o$* $*" } )
Aadd( aCommands, { ".c.o:", "$(BCB)\gcc -I$(BHC)/../include $(CFLAG1) $(CFLAG2) -I. -o$* $**" } )
Aadd( aCommands, { ".prg.c:", "$(BHC)\harbour -n -I$(BHC)/../include $(HARBOURFLAGS) -o$* $**" } )
endif
Elseif lVcc
Aadd( aCommands, { ".cpp.obj:", "$(BCB)\bin\cl $(CFLAG1) $(CFLAG2) -Fo$* $*" } )
Aadd( aCommands, { ".c.obj:", "$(BCB)\bin\cl -I$(BHC)\include $(CFLAG1) $(CFLAG2) -Fo$* $**" } )
Aadd( aCommands, { ".prg.c:", "$(BHC)\bin\harbour -n -I$(BHC)\include $(HARBOURFLAGS) -I$(C4W)\include -o$* $**" } )
Aadd( aCommands, { ".rc.res:", "$(BCB)\BIN\rc $(RFLAGS) $<" } )
Endif
attention( 'Spacebar to select, Enter to continue process', 22 )
Asize( aIn, nLenaSrc )
For x := 1 To nLenaSrc
aIn[ x ] := Pad( aSrc[ x, 1 ], 13 ) + ;
Str( aSrc[ x, 2 ], 8 ) + ' ' + ;
Dtoc( aSrc[ x, 3 ] ) + ' ' + ;
aSrc[ x, 4 ]
Next
aOut := Aclone( aIn )
pickarry( 10, 15, 19, 64, aIn, aOut )
nLenaOut := Len( aOut )
For x := 1 To nLenaOut
aOut[ x ] := lower(Trim( Left( aOut[ x ], 12 ) ))
Next
aOut := Asort( aOut )
/*
If Len( aOut ) == 1
cTopFile := aOut[ 1 ]
Else
attention( 'Select the TOP MODULE of your executable', 22 )
cTopFile := pickfile( "*.prg" )
Endif
*/
/*x:=ascan(aOut,{|x| lower(x)==lower(cTopFile)})
if x>0
adel(aout,x)
asize(aout,len(aout)-1)
endif
*/
aCs := aclone(aout)
For x := 1 To Len( aCs )
cItem:= aCs[ x ]
aCs[ x ]:=strtran( cItem, ".prg", ".c" )
Next
aObjs := aClone(aout)
For x := 1 To Len( aObjs )
cItem:=aObjs[ x ]
If !lGcc
aObjs[ x ]:=strtran( cItem, ".prg", ".obj" )
Else
aObjs[ x ]:=strtran( cItem, ".prg", ".o" )
Endif
Next
for nPos:=1 to Len(aCs)
cItem:=acS[nPos]
if (y:=FindCfile(citem,aSrcc))>0
if y>0
aDel(aSrcC,y)
aSize(aSrcc,Len(aSrcC)-1)
endif
endif
Next
nLenaSrcc:=Len(aSrcc)
Asize( aInC, nLenaSrcC )
For x := 1 To nLenaSrcC
aInC[ x ] := Pad( aSrcC[ x, 1 ], 13 ) + ;
Str( aSrcC[ x, 2 ], 8 ) + ' ' + ;
Dtoc( aSrcC[ x, 3 ] ) + ' ' + ;
aSrcc[ x, 4 ]
Next
aOutC := Aclone( aInC )
pickarry( 10, 15, 19, 64, aInC, aOutC )
nLenaOutC := Len( aOutC )
For x := 1 To nLenaOutC
aOutC[x ] := lower(Trim( Left( aOutC[ x ], 12 ) ))
Next
For x := 1 To Len( aOutC )
cItem:= aOutC[ x ]
aadd(aCs,cItem)
Next
//aObjs := aClone(aout)
For x := 1 To Len( aoutC )
cItem:=aOutc[ x ]
If !lGcc
aadd(aObjs, strtran(cItem,".c",".obj"))
Else
aadd(aObjs, strtran(cItem,".c",".o"))
Endif
Next
if lGcc
if at("linux",Getenv("HB_ARCHITECTURE"))>0 .or. cOs=="Linux"
Fwrite( nLinkHandle, "PROJECT = " + alltrim(lower(cfwhpath))+".a "+CRLF )
else
Fwrite( nLinkHandle, "PROJECT = " + alltrim(lower(cfwhpath))+".a "+CRLF )
endif
else
Fwrite( nLinkHandle, "PROJECT = " + alltrim(lower(cfwhpath))+".lib "+CRLF )
endif
Fwrite( nLinkHandle, "OBJFILES = " )
if len(aObjs)<1
Fwrite( nLinkHandle, +" $(OB) "+ CRLF )
else
//Fwrite( nLinkHandle, "OBJFILES = " + if(isupper(cTopfile),Strtran( cTopfile, ".PRG", ".OBJ" ),Strtran( cTopfile, ".prg", ".obj" )))
For x := 1 To Len( aobjs )
If x <> Len( aobjs )
Fwrite( nLinkHandle, " " + alltrim(aobjs[ x ]) )
Else
Fwrite( nLinkHandle, " " + alltrim(aobjs[ x ]) +" $(OB) "+ CRLF )
Endif
Next
endif
Fwrite( nLinkHandle, "CFILES = " )
if len(aCs)<1
Fwrite( nLinkHandle, +" $(CF)"+ CRLF )
//
else
//Fwrite( nLinkHandle, "CFILES = " + if(isupper(cTopfile),Strtran( cTopfile, ".PRG", ".C" ),Strtran( cTopfile, ".prg", ".c" )))
For x := 1 To Len( acs )
If x <> Len( acs )
Fwrite( nLinkHandle, " " + alltrim(aCs[ x ]) )
Else
Fwrite( nLinkHandle, " " + alltrim(aCs[ x ]) +" $(CF) "+ CRLF )
Endif
Next
endif
Fwrite( nLinkHandle, "RESFILES = " + CRLF )
Fwrite( nLinkHandle, "RESDEPEN = $(RESFILES)" + CRLF )
if lBcc .or. lVcc
If lFwh
Fwrite( nLinkHandle, "LIBFILES = " + CRLF )
elseif lCw
Fwrite( nLinkHandle, "LIBFILES = " + CRLF )
else
Fwrite( nLinkHandle, "LIBFILES = " + CRLF )
endif
elseif lGcc
Fwrite( nLinkHandle, "LIBFILES = " + CRLF )
endif
Fwrite( nLinkHandle, "DEFFILE = "+CRLF)
fWrite( nLinkHandle, "HARBOURFLAGS = " +cDefHarOpts+CRLF)
if lBcc
Fwrite( nLinkHandle, "CFLAG1 = -OS $(CFLAGS) -d -L$(BHC)\lib;$(FWH)\lib -c"+CRLF)
Fwrite( nLinkHandle, "CFLAG2 = -I$(BHC)\include;$(BCB)\include" +CRLF)
Fwrite( nLinkHandle, "RFLAGS = "+CRLF)
Fwrite( nLinkHandle, "LFLAGS = /P32"+CRLF)
Fwrite( nLinkHandle, "IFLAGS = " +CRLF)
Fwrite( nLinkHandle, "LINKER = tlib $(LFLAGS) $(PROJECT)"+CRLF)
Fwrite( nLinkHandle, " "+CRLF)
Fwrite( nLinkHandle, "ALLOBJ = $(OBJFILES)"+CRLF)
Fwrite( nLinkHandle, "ALLRES = $(RESFILES)"+CRLF)
Fwrite( nLinkHandle, "ALLLIB = "+CRLF)
Fwrite( nLinkHandle, ".autodepend"+CRLF)
elseif lVcc
Fwrite( nLinkHandle, "CFLAG1 = -I$(INCLUDE_DIR) -TP -W3 -nologo $(C_USR) $(CFLAGS)"+CRLF)
Fwrite( nLinkHandle, "CFLAG2 = -c"+CRLF)
Fwrite( nLinkHandle, "RFLAGS = "+CRLF)
Fwrite( nLinkHandle, "LFLAGS = "+CRLF)
Fwrite( nLinkHandle, "IFLAGS = "+CRLF)
Fwrite( nLinkHandle, "LINKER = lib $(PROJECT)"+CRLF)
Fwrite( nLinkHandle, " "+CRLF)
Fwrite( nLinkHandle, "ALLOBJ = "+CRLF)
Fwrite( nLinkHandle, "ALLRES = $(RESFILES)"+CRLF)
Fwrite( nLinkHandle, "ALLLIB = "+CRLF)
elseif lGcc
Fwrite( nLinkHandle, "CFLAG1 = "+if(at("linux",Getenv("HB_ARCHITECTURE"))>0 ,"-I$(HB_INC_INSTALL)"," -I$(BHC)/../include")+ " -c -Wall"+CRLF)
Fwrite( nLinkHandle, "CFLAG2 = "+if(at("linux",Getenv("HB_ARCHITECTURE"))>0 ,"-L$(HB_LIB_INSTALL)"," -L$(BHC)/../lib")+CRLF)
Fwrite( nLinkHandle, "RFLAGS = "+CRLF)
Fwrite( nLinkHandle, "LFLAGS = "+CRLF)
Fwrite( nLinkHandle, "IFLAGS = "+CRLF)
Fwrite( nLinkHandle, "LINKER = $(BCB)\ar -M <"+CRLF)
Fwrite( nLinkHandle, " "+CRLF)
Fwrite( nLinkHandle, "ALLOBJ = $(OBJFILES) "+CRLF)
Fwrite( nLinkHandle, "ALLRES = $(RESFILES) "+CRLF)
Fwrite( nLinkHandle, "ALLLIB = $(LIBFILES) "+CRLF)
Fwrite( nLinkHandle, ".autodepend"+CRLF)
endif
Fwrite( nLinkHandle, " "+CRLF)
Fwrite( nLinkHandle, "#COMMANDS"+CRLF)
For x:=1 to len(aCommands)
if lBcc
Fwrite( nLinkHandle, aCommands[x,1]+CRLF)
Fwrite( nLinkHandle, aCommands[x,2]+CRLF)
Fwrite( nLinkHandle, " "+CRLF)
elseif lVcc
Fwrite( nLinkHandle, aCommands[x,1]+CRLF)
Fwrite( nLinkHandle, aCommands[x,2]+CRLF)
Fwrite( nLinkHandle, " "+CRLF)
elseif lGcc
Fwrite( nLinkHandle, aCommands[x,1]+CRLF)
Fwrite( nLinkHandle, aCommands[x,2]+CRLF)
Fwrite( nLinkHandle, " "+CRLF)
endif
next
if lBcc
Fwrite( nLinkHandle, "#BUILD"+CRLF)
Fwrite( nLinkHandle, " "+CRLF)
Fwrite( nLinkHandle, "$(PROJECT): $(CFILES) $(OBJFILES)"+CRLF)
Fwrite( nLinkHandle, " $(BCB)\BIN\$(LINKER) @&&!"+CRLF)
Fwrite( nLinkHandle, " $(ALLOBJ)"+CRLF)
Fwrite( nLinkHandle, "!"+CRLF)
elseif lVcc
Fwrite( nLinkHandle, "#BUILD"+CRLF)
Fwrite( nLinkHandle, ""+CRLF)
Fwrite( nLinkHandle, "$(PROJECT): $(CFILES) $(OBJFILES)"+CRLF)
Fwrite( nLinkHandle, " $(BCB)\BIN\$(LINKER) @&&!"+CRLF)
Fwrite( nLinkHandle, " $(ALLOBJ) "+CRLF)
Fwrite( nLinkHandle, "!"+CRLF)
elseif lGcc
Fwrite( nLinkHandle, "#BUILD"+CRLF)
Fwrite( nLinkHandle, " "+CRLF)
Fwrite( nLinkHandle, "$(PROJECT): $(CFILES) $(OBJFILES) "+CRLF)
Fwrite( nLinkHandle, " $(BCB)\$(LINKER) @&&!"+CRLF)
Fwrite( nLinkHandle, " $(PROJECT) "+CRLF)
Fwrite( nLinkHandle, " $(ALLOBJ) "+CRLF)
Fwrite( nLinkHandle, "!"+CRLF)
endif
Return nil
Function setlibBuild()
Local cRead
Local nPos
Local aMacro
Local aTemp
Local nCount
Local aCurobjs
Local nObjPos
Local cProject
// ? "setting link file"
cRead := Alltrim( readln( @leof ) )
nLinkHandle := Fcreate( clinker )
szProject:=cRead
amacro := listasarray2( cRead, ":" )
//cProject:=amacro[1]
// findmacro(amacro[1],@cProject)
If Len( amacro ) > 1
aTemp := listasarray2( amacro[ 2 ], " " )
For nPos := 1 To Len( aTemp )
Aadd( aBuildOrder, atemp[ nPos ] )
Next
//if lgcc
// fwrite(nLinkHandle,"CREATE " + cProject+CRLF)
//endif
Endif
Aadd( aBuildOrder, amacro[ 1 ] )
cRead := Strtran( cRead, "@&&!", "" )
amacro := listasarray2( cRead, '\' )
For nPos := 1 To Len( amacro )
If At( "$", amacro[ nPos ] ) > 0
findmacro( amacro[ nPos ], @cRead )
Endif
Next
if lbcc .or. lVcc
cLinkcomm := cRead + " @" + cLinker
else
cLinkcomm := cRead + " " + cLinker
endif
//#define CRLF hb_osnewline()
For nPos := 1 To 7
cRead := Alltrim( readln( @leof ) )
amacro := listasarray2( cRead, " " )
For ncount := 1 To Len( amacro )
If At( "$", amacro[ nCount ] ) > 0
if (amacro[ nCount ] =="$(ALLOBJ)")
findmacro( amacro[ nCount ], @cRead )
aCurObjs:=ListasArray2(cRead," ")
for nObjPos:=1 to Len(aCurObjs)
if lGcc
fWrite(nLinkhandle, "ADDMOD " + aCurObjs[nObjPos] +CRLF)
endif
if lBcc .or. lVcc
if nObjPos< Len(aCurObjs)
fWrite(nLinkhandle, "+-" + aCurObjs[nObjPos] + " &"+CRLF)
else
fWrite(nLinkhandle, "+-" + aCurObjs[nObjPos] +CRLF)
endif
endif
next
Elseif (amacro[ nCount] = "$(PROJECT)") .and. lGcc
Findmacro(amacro[ nCount ], @cRead )
fwrite(nLinkHandle,"CREATE " + cRead+CRLF)
endif
Endif
Next
Next
if lGcc
fwrite(nLinkHandle, "SAVE" +CRLF)
fwrite(nLinkHandle, "END " +CRLF)
endif
Fclose( nLinkhandle )
Return nil
func FindCfile(citem,aSrcc)
local nReturnPos:=0
nReturnPos:=aScan(aSrcc,{|x| lower(x[1])==cItem})
return nReturnPos
function filedate( cFileName )
local aFiles := directory( cFileName )
return if( len( aFiles ) == 1, aFiles[ 1, 3 ], ctod( '' ) )
function filetime( cFileName )
local aFiles := directory( cFileName )
return if( len( aFiles ) == 1, aFiles[ 1, 4 ], '' )
function TD2JUL( CTIME, DDATE )
return DDATE - ctod( '01/01/1900' ) + ( PRB_INT( TTOS( CTIME ) / 100000,, 5 ) )
*+±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
*+
*+ Function TTOS()
*+
*+ Called from ( td2jul.prg ) 1 - function td2jul()
*+
*+±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
*+
function TTOS( CTIME )
return ( val( substr( CTIME, 7, 2 ) ) ) + ;
( val( substr( CTIME, 4, 2 ) ) * 60 ) + ;
( val( substr( CTIME, 1, 2 ) ) * 3600 )
*+±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
*+
*+ Function PRB_INT()
*+
*+ Called from ( td2jul.prg ) 1 - function td2jul()
*+
*+±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
*+
function PRB_INT( SOMENUMBER, length, NUM_DECIMALS )
local NEGATIVE := ( SOMENUMBER < 0 )
local SOMESTRING
local dotat
default NUM_DECIMALS to 0
default length to 19
if NEGATIVE
SOMENUMBER := abs( SOMENUMBER )
endif
SOMENUMBER += .0000000000000005
SOMESTRING := alltrim( str( SOMENUMBER ) )
dotat := at( '.', somestring )
do case
case NUM_DECIMALS == 0
if dotat > 0
somestring := left( somestring, dotat - 1 )
endif
case NUM_DECIMALS > 0
if dotat > 0
somestring := left( somestring, dotat + num_decimals )
endif
endcase
if NEGATIVE
SOMESTRING := '-' + SOMESTRING
endif
return val( SOMESTRING )