2010-05-28 18:28 UTC+0200 Viktor Szakats (harbour.01 syenar.hu)
* utils/hbmk2/hbmk2.prg
+ Added untested, experimental support for -reqpkg=/reqpkgs=
(.hbp/.hbc) options. F.e. '-reqpkg=libcurl' option causes
hbmk2 to query library, library path and include path
information from 'pkg-config' tool and if not found using
'*-config' script, and to automatically pass these information
to C compiler/linker. In addition, it will automatically add
a macro named HBMK2_HAS_LIBCURL to C compiler cmdline, so
that the sources get to know that this package was found.
; NOTE: Nothing is finalized, it is still a question how to
setup obligatory and optional components, current
implementation is rather a mixture, but anyway pls
feel free to test it. It's also a question how to merge
this method with the -inctrypath/-reqheader one.
Later we can consider adopting extra C flags, too,
and it can be extended to know about more package
detection methods (even platform dependent ones can
be used if they adhere to more or less the same
principle of 'pkgname->IN incpaths/libpaths/libs->OUT')
Thanks to Tamas Tevesz for sparking the idea.
This commit is contained in:
@@ -17,6 +17,28 @@
|
||||
past entries belonging to author(s): Viktor Szakats.
|
||||
*/
|
||||
|
||||
2010-05-28 18:28 UTC+0200 Viktor Szakats (harbour.01 syenar.hu)
|
||||
* utils/hbmk2/hbmk2.prg
|
||||
+ Added untested, experimental support for -reqpkg=/reqpkgs=
|
||||
(.hbp/.hbc) options. F.e. '-reqpkg=libcurl' option causes
|
||||
hbmk2 to query library, library path and include path
|
||||
information from 'pkg-config' tool and if not found using
|
||||
'*-config' script, and to automatically pass these information
|
||||
to C compiler/linker. In addition, it will automatically add
|
||||
a macro named HBMK2_HAS_LIBCURL to C compiler cmdline, so
|
||||
that the sources get to know that this package was found.
|
||||
; NOTE: Nothing is finalized, it is still a question how to
|
||||
setup obligatory and optional components, current
|
||||
implementation is rather a mixture, but anyway pls
|
||||
feel free to test it. It's also a question how to merge
|
||||
this method with the -inctrypath/-reqheader one.
|
||||
Later we can consider adopting extra C flags, too,
|
||||
and it can be extended to know about more package
|
||||
detection methods (even platform dependent ones can
|
||||
be used if they adhere to more or less the same
|
||||
principle of 'pkgname->IN incpaths/libpaths/libs->OUT')
|
||||
Thanks to Tamas Tevesz for sparking the idea.
|
||||
|
||||
2010-05-28 17:31 UTC+0200 Viktor Szakats (harbour.01 syenar.hu)
|
||||
* src/common/hbver.c
|
||||
+ Fine tuned SunPro version detection.
|
||||
|
||||
@@ -318,59 +318,60 @@ REQUEST hbmk_KEYW
|
||||
#define _HBMK_lHBCPPMM 60
|
||||
#define _HBMK_aVAR 61
|
||||
#define _HBMK_hKEYHEADER 62
|
||||
#define _HBMK_aREQPKG 63 /* TODO */
|
||||
|
||||
#define _HBMK_lCreateLib 63
|
||||
#define _HBMK_lCreateDyn 64
|
||||
#define _HBMK_lCreateImpLib 65
|
||||
#define _HBMK_lCreateLib 64
|
||||
#define _HBMK_lCreateDyn 65
|
||||
#define _HBMK_lCreateImpLib 66
|
||||
|
||||
#define _HBMK_lDynVM 66
|
||||
#define _HBMK_lDynVM 67
|
||||
|
||||
#define _HBMK_lBLDFLGP 67
|
||||
#define _HBMK_lBLDFLGC 68
|
||||
#define _HBMK_lBLDFLGL 69
|
||||
#define _HBMK_lBLDFLGP 68
|
||||
#define _HBMK_lBLDFLGC 69
|
||||
#define _HBMK_lBLDFLGL 70
|
||||
|
||||
#define _HBMK_cFIRST 70
|
||||
#define _HBMK_aPRG 71
|
||||
#define _HBMK_aC 72
|
||||
#define _HBMK_aCPP 73
|
||||
#define _HBMK_aRESSRC 74
|
||||
#define _HBMK_aRESCMP 75
|
||||
#define _HBMK_aOBJUSER 76
|
||||
#define _HBMK_aICON 77
|
||||
#define _HBMK_aIMPLIBSRC 78
|
||||
#define _HBMK_aDEF 79
|
||||
#define _HBMK_hDEPTS 80
|
||||
#define _HBMK_cFIRST 71
|
||||
#define _HBMK_aPRG 72
|
||||
#define _HBMK_aC 73
|
||||
#define _HBMK_aCPP 74
|
||||
#define _HBMK_aRESSRC 75
|
||||
#define _HBMK_aRESCMP 76
|
||||
#define _HBMK_aOBJUSER 77
|
||||
#define _HBMK_aICON 78
|
||||
#define _HBMK_aIMPLIBSRC 79
|
||||
#define _HBMK_aDEF 80
|
||||
#define _HBMK_hDEPTS 81
|
||||
|
||||
#define _HBMK_aPO 81
|
||||
#define _HBMK_cHBL 82
|
||||
#define _HBMK_cHBLDir 83
|
||||
#define _HBMK_aLNG 84
|
||||
#define _HBMK_cPO 85
|
||||
#define _HBMK_aPO 82
|
||||
#define _HBMK_cHBL 83
|
||||
#define _HBMK_cHBLDir 84
|
||||
#define _HBMK_aLNG 85
|
||||
#define _HBMK_cPO 86
|
||||
|
||||
#define _HBMK_aPLUGIN 86
|
||||
#define _HBMK_hPLUGINHRB 87
|
||||
#define _HBMK_hPLUGINVars 88
|
||||
#define _HBMK_aPLUGINPars 89
|
||||
#define _HBMK_aPLUGIN 87
|
||||
#define _HBMK_hPLUGINHRB 88
|
||||
#define _HBMK_hPLUGINVars 89
|
||||
#define _HBMK_aPLUGINPars 90
|
||||
|
||||
#define _HBMK_lDEBUGTIME 90
|
||||
#define _HBMK_lDEBUGINC 91
|
||||
#define _HBMK_lDEBUGSTUB 92
|
||||
#define _HBMK_lDEBUGI18N 93
|
||||
#define _HBMK_lDEBUGTIME 91
|
||||
#define _HBMK_lDEBUGINC 92
|
||||
#define _HBMK_lDEBUGSTUB 93
|
||||
#define _HBMK_lDEBUGI18N 94
|
||||
|
||||
#define _HBMK_cCCPATH 94
|
||||
#define _HBMK_cCCPREFIX 95
|
||||
#define _HBMK_cCCPOSTFIX 96
|
||||
#define _HBMK_cCCEXT 97
|
||||
#define _HBMK_cCCPATH 95
|
||||
#define _HBMK_cCCPREFIX 96
|
||||
#define _HBMK_cCCPOSTFIX 97
|
||||
#define _HBMK_cCCEXT 98
|
||||
|
||||
#define _HBMK_cWorkDir 98
|
||||
#define _HBMK_nCmd_Esc 99
|
||||
#define _HBMK_nScr_Esc 100
|
||||
#define _HBMK_nErrorLevel 101
|
||||
#define _HBMK_cWorkDir 99
|
||||
#define _HBMK_nCmd_Esc 100
|
||||
#define _HBMK_nScr_Esc 101
|
||||
#define _HBMK_nErrorLevel 102
|
||||
|
||||
#define _HBMK_cPROGDIR 102
|
||||
#define _HBMK_cPROGNAME 103
|
||||
#define _HBMK_cPROGDIR 103
|
||||
#define _HBMK_cPROGNAME 104
|
||||
|
||||
#define _HBMK_MAX_ 103
|
||||
#define _HBMK_MAX_ 104
|
||||
|
||||
#ifndef _HBMK_EMBEDDED_
|
||||
|
||||
@@ -1914,7 +1915,7 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause )
|
||||
|
||||
cParam := MacroProc( hbmk, SubStr( cParam, 3 ), aParam[ _PAR_cFileName ] )
|
||||
IF ! Empty( cParam )
|
||||
AAdd( hbmk[ _HBMK_aLIBPATH ], PathSepToTarget( hbmk, DirDelPathSep( PathSepToSelf( PathProc( cParam, aParam[ _PAR_cFileName ] ) ) ) ) )
|
||||
AAdd( hbmk[ _HBMK_aLIBPATH ], PathSepToTarget( hbmk, DirDelPathSep( PathProc( PathSepToSelf( cParam ), aParam[ _PAR_cFileName ] ) ) ) )
|
||||
ENDIF
|
||||
|
||||
CASE Left( cParamL, Len( "-instpath=" ) ) == "-instpath=" .AND. ;
|
||||
@@ -2099,6 +2100,13 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause )
|
||||
ENDIF
|
||||
ENDIF
|
||||
|
||||
CASE Left( cParam, Len( "-reqpkg=" ) ) == "-reqpkg="
|
||||
|
||||
cParam := MacroProc( hbmk, SubStr( cParam, Len( "-reqpkg=" ) + 1 ), aParam[ _PAR_cFileName ] )
|
||||
IF ! Empty( cParam )
|
||||
AAdd( hbmk[ _HBMK_aREQPKG ], cParam )
|
||||
ENDIF
|
||||
|
||||
CASE Left( cParam, 1 ) $ cOptPrefix
|
||||
|
||||
DO CASE
|
||||
@@ -2376,6 +2384,11 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause )
|
||||
ENDIF
|
||||
ENDIF
|
||||
|
||||
/* Process any package requirements */
|
||||
FOR EACH tmp IN hbmk[ _HBMK_aREQPKG ]
|
||||
pkg_try_detection( hbmk, tmp )
|
||||
NEXT
|
||||
|
||||
IF ( ! lStopAfterInit .AND. ! lStopAfterHarbour ) .OR. hbmk[ _HBMK_lCreateImpLib ]
|
||||
|
||||
IF hbmk[ _HBMK_cGT ] != NIL .AND. hbmk[ _HBMK_cGT ] == hbmk[ _HBMK_cGTDEFAULT ]
|
||||
@@ -5748,6 +5761,58 @@ STATIC FUNCTION deplst_add( hDeps, cList )
|
||||
|
||||
RETURN .T.
|
||||
|
||||
/* Try '*-config' and 'pkg-config *' detection */
|
||||
STATIC FUNCTION pkg_try_detection( hbmk, cName )
|
||||
LOCAL cStdOut
|
||||
LOCAL cItem
|
||||
|
||||
LOCAL lFound := .F.
|
||||
|
||||
cStdOut := ""
|
||||
hb_processRun( "pkg-config --libs --cflags " + cName,, @cStdOut )
|
||||
IF Empty( cStdOut )
|
||||
hb_processRun( cName + "-config --libs --cflags",, @cStdOut )
|
||||
ENDIF
|
||||
|
||||
IF ! Empty( cStdOut )
|
||||
FOR EACH cItem IN hb_ATokens( cStdOut,, .T. )
|
||||
IF ! Empty( cItem )
|
||||
lFound := .T.
|
||||
DO CASE
|
||||
CASE Left( cItem, Len( "-l" ) ) == "-l"
|
||||
IF _IS_AUTOLIBSYSPRE( cItem )
|
||||
AAdd( hbmk[ _HBMK_aLIBUSERSYSPRE ], PathSepToTarget( hbmk, cItem ) )
|
||||
ELSE
|
||||
AAdd( hbmk[ _HBMK_aLIBUSER ], PathSepToTarget( hbmk, cItem ) )
|
||||
ENDIF
|
||||
CASE Left( cItem, Len( "-l" ) ) == "-L"
|
||||
AAdd( hbmk[ _HBMK_aLIBPATH ], PathSepToTarget( hbmk, DirDelPathSep( PathSepToSelf( cItem ) ) ) )
|
||||
CASE Left( cItem, Len( "-l" ) ) == "-I"
|
||||
AAdd( hbmk[ _HBMK_aINCPATH ], PathSepToTarget( hbmk, DirDelPathSep( PathSepToSelf( cItem ) ) ) )
|
||||
ENDCASE
|
||||
ENDIF
|
||||
NEXT
|
||||
IF lFound
|
||||
AAdd( hbmk[ _HBMK_aOPTC ], "-DHBMK2_HAS_" + StrToDefine( cName ) )
|
||||
ENDIF
|
||||
ENDIF
|
||||
|
||||
RETURN lFound
|
||||
|
||||
STATIC FUNCTION StrToDefine( cString )
|
||||
LOCAL cDefine := ""
|
||||
LOCAL c
|
||||
|
||||
FOR EACH c IN Upper( cString )
|
||||
IF c $ "- "
|
||||
cDefine += "_"
|
||||
ELSEIF IsDigit( c ) .OR. hb_asciiIsAlpha( c ) .OR. c == "_"
|
||||
cDefine += c
|
||||
ENDIF
|
||||
NEXT
|
||||
|
||||
RETURN cDefine
|
||||
|
||||
STATIC FUNCTION AMerge( aDst, aSrc )
|
||||
LOCAL item
|
||||
|
||||
@@ -7117,6 +7182,11 @@ STATIC FUNCTION HBC_ProcessOne( hbmk, cFileName, nNestingLevel )
|
||||
AAddNewNotEmpty( hbmk[ _HBMK_aPLUGINPars ], PathSepToTarget( hbmk, MacroProc( hbmk, StrStripQuote( cItem ), cFileName ), 2 ) )
|
||||
NEXT
|
||||
|
||||
CASE Lower( Left( cLine, Len( "reqpkgs=" ) ) ) == "reqpkgs=" ; cLine := SubStr( cLine, Len( "reqpkgs=" ) + 1 )
|
||||
FOR EACH cItem IN hb_ATokens( cLine,, .T. )
|
||||
AAddNewNotEmpty( hbmk[ _HBMK_aREQPKG ], MacroProc( hbmk, StrStripQuote( cItem ), cFileName ) )
|
||||
NEXT
|
||||
|
||||
CASE Lower( Left( cLine, Len( "psources=" ) ) ) == "psources=" ; cLine := SubStr( cLine, Len( "psources=" ) + 1 )
|
||||
FOR EACH cItem IN hb_ATokens( cLine,, .T. )
|
||||
cItem := MacroProc( hbmk, StrStripQuote( cItem ), cFileName )
|
||||
|
||||
Reference in New Issue
Block a user