From a435f32b18eb0eb6e6564f6a2c9214edbf3c10ef Mon Sep 17 00:00:00 2001 From: Viktor Szakats Date: Sat, 29 May 2010 16:00:44 +0000 Subject: [PATCH] 2010-05-29 18:00 UTC+0200 Viktor Szakats (harbour.01 syenar.hu) * utils/hbmk2/hbmk2.prg + Beefed up and fixed -reqpkg feature: + Possible to pass multiple alternate pkg names: -reqpkg=cairo|cairo2|cairo.h + Possible to attach header name, in which case it will automatically satify the -reqheader= parameter with same header name, if it exists. Headers without extension can be specified as 'header.' ! Fixed to use case-insensitive lookup in header list on non-*nix systems. + Added -info messages regarding pkg detection. ! Fixed parsing of -l/-L/-I parameters in pkg detection code. --- harbour/ChangeLog | 15 +++++ harbour/utils/hbmk2/hbmk2.prg | 101 ++++++++++++++++++++++++++-------- 2 files changed, 93 insertions(+), 23 deletions(-) diff --git a/harbour/ChangeLog b/harbour/ChangeLog index 31ab7ddb82..98045bab7e 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -17,6 +17,21 @@ past entries belonging to author(s): Viktor Szakats. */ +2010-05-29 18:00 UTC+0200 Viktor Szakats (harbour.01 syenar.hu) + * utils/hbmk2/hbmk2.prg + + Beefed up and fixed -reqpkg feature: + + Possible to pass multiple alternate pkg names: + -reqpkg=cairo|cairo2|cairo.h + + Possible to attach header name, in which case it + will automatically satify the -reqheader= parameter + with same header name, if it exists. Headers without + extension can be specified as 'header.' + ! Fixed to use case-insensitive lookup in header list + on non-*nix systems. + + Added -info messages regarding pkg detection. + ! Fixed parsing of -l/-L/-I parameters in pkg detection + code. + 2010-05-29 15:30 UTC+0200 Viktor Szakats (harbour.01 syenar.hu) * INSTALL * config/global.mk diff --git a/harbour/utils/hbmk2/hbmk2.prg b/harbour/utils/hbmk2/hbmk2.prg index 65221ad0cc..0eedbf7904 100644 --- a/harbour/utils/hbmk2/hbmk2.prg +++ b/harbour/utils/hbmk2/hbmk2.prg @@ -804,6 +804,12 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause ) hbmk[ _HBMK_hKEYHEADER ] := { => } hbmk[ _HBMK_aREQPKG ] := {} + #if defined( __PLATFORM__UNIX ) + hb_HSetCaseMatch( hbmk[ _HBMK_hKEYHEADER ], .T. ) + #else + hb_HSetCaseMatch( hbmk[ _HBMK_hKEYHEADER ], .F. ) + #endif + hbmk[ _HBMK_lBLDFLGP ] := .F. hbmk[ _HBMK_lBLDFLGC ] := .F. hbmk[ _HBMK_lBLDFLGL ] := .F. @@ -5765,36 +5771,85 @@ STATIC FUNCTION deplst_add( hDeps, cList ) /* Try '*-config' and 'pkg-config *' detection */ STATIC FUNCTION pkg_try_detection( hbmk, cName ) LOCAL cStdOut + LOCAL cErrOut LOCAL cItem LOCAL lFound := .F. + LOCAL cDefine - cStdOut := "" - hb_processRun( "pkg-config --libs --cflags " + cName,, @cStdOut ) - IF Empty( cStdOut ) - hb_processRun( cName + "-config --libs --cflags",, @cStdOut ) - ENDIF + LOCAL cNameFlavour + LOCAL cIncludeDir - 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 ) ) + FOR EACH cNameFlavour IN hb_ATokens( cName, "|" ) + + IF ! Empty( cNameFlavour ) + IF ! lFound + cNameFlavour := AllTrim( cNameFlavour ) + + cStdOut := "" + hb_processRun( "pkg-config --libs --cflags " + cNameFlavour,, @cStdOut, @cErrOut ) + IF Empty( cStdOut ) + hb_processRun( cNameFlavour + "-config --libs --cflags",, @cStdOut, @cErrOut ) + 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" + cItem := SubStr( cItem, Len( "-l" ) + 1 ) + 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" + cItem := SubStr( cItem, Len( "-L" ) + 1 ) + AAdd( hbmk[ _HBMK_aLIBPATH ], PathSepToTarget( hbmk, DirDelPathSep( PathSepToSelf( cItem ) ) ) ) + CASE Left( cItem, Len( "-I" ) ) == "-I" + cItem := SubStr( cItem, Len( "-I" ) + 1 ) + IF Empty( cIncludeDir ) + cIncludeDir := cItem + ENDIF + AAdd( hbmk[ _HBMK_aINCPATH ], PathSepToTarget( hbmk, DirDelPathSep( PathSepToSelf( cItem ) ) ) ) + ENDCASE + ENDIF + NEXT + IF lFound + IF Empty( cIncludeDir ) + cIncludeDir := "(system)" + ENDIF + cDefine := "HBMK2_HAS_" + StrToDefine( cNameFlavour ) + IF hbmk[ _HBMK_lInfo ] + hbmk_OutStd( hbmk, hb_StrFormat( I_( "Autodetected package '%1$s' at '%2$s', defining '%3$s'." ), cNameFlavour, cIncludeDir, cDefine ) ) + ENDIF + AAdd( hbmk[ _HBMK_aOPTC ], "-D" + cDefine ) + EXIT 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 + ELSE + IF FN_ExtGet( cNameFlavour ) $ ".h" .OR. ; + FN_ExtGet( cNameFlavour ) $ ".hpp" .OR. ; + Right( cNameFlavour, 1 ) == "." + + IF Right( cNameFlavour, 1 ) == "." + cNameFlavour := hb_StrShrink( cNameFlavour, 1 ) + ENDIF + + IF cNameFlavour $ hbmk[ _HBMK_hKEYHEADER ] + hbmk[ _HBMK_hKEYHEADER ][ cNameFlavour ] := cIncludeDir + ENDIF + + EXIT + ENDIF ENDIF - NEXT - IF lFound - AAdd( hbmk[ _HBMK_aOPTC ], "-DHBMK2_HAS_" + StrToDefine( cName ) ) + ENDIF + NEXT + + IF ! lFound + IF hbmk[ _HBMK_lInfo ] + hbmk_OutStd( hbmk, hb_StrFormat( I_( "Package not found: '%1$s'" ), cName ) ) ENDIF ENDIF