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:
Viktor Szakats
2010-05-28 16:41:43 +00:00
parent 6d74dd1da0
commit bcceab5af4
2 changed files with 135 additions and 43 deletions

View File

@@ -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.

View File

@@ -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 )