diff --git a/harbour/ChangeLog b/harbour/ChangeLog index 8663be7e39..979e7fd77b 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -16,6 +16,16 @@ The license applies to all entries newer than 2009-04-28. */ +2010-07-18 14:57 UTC+0200 Viktor Szakats (harbour.01 syenar.hu) + * contrib/make.hbs + * contrib/hbpost.hbm + % Internal simplifications, merged list of contribs into one. + % Moved HB_BUILD_PARTS logic to .hbmk file. + + * contrib/sddodbc/sddodbc.c + ! Applied previous patch for hbodbc to sddodbc. + Thanks for Tamas Tevesz to supply the .dif. + 2010-07-18 12:38 UTC+0200 Viktor Szakats (harbour.01 syenar.hu) * contrib/make.hbs + Instead of having to list .hbi files explicitly, diff --git a/harbour/contrib/hbpost.hbm b/harbour/contrib/hbpost.hbm index ee300eea93..2ab44095ce 100644 --- a/harbour/contrib/hbpost.hbm +++ b/harbour/contrib/hbpost.hbm @@ -5,6 +5,8 @@ # These are mandatory in Harbour SVN, they will always # override project options. +"{HB_BUILD_PARTS='lib'&!(hbimplib|hblib)}-stop=! Skipped because HB_BUILD_PARTS=lib" + -prgflag=-w3 -prgflag=-es2 -prgflag=-kmo diff --git a/harbour/contrib/make.hbs b/harbour/contrib/make.hbs index 0206401df7..a623fb7e64 100755 --- a/harbour/contrib/make.hbs +++ b/harbour/contrib/make.hbs @@ -33,76 +33,67 @@ /* ----------------------------------------------------------------------- */ - /* external libs hosted locally */ -STATIC s_aLibsPass0 := {} - -STATIC s_aLibsPass1 := {; - "hbblink/hbblink.hbp" ,; - "hbbz2/hbbz2.hbp" ,; /* uses: bz2 (external) */ - "hbclipsm/hbclipsm.hbp" ,; - "hbcomm/hbcomm.hbp" ,; - "hbct/hbct.hbp" ,; - "hbfoxpro/hbfoxpro.hbp" ,; - "hbfship/hbfship.hbp" ,; - "hbgt/hbgt.hbp" ,; - "hbmemio/hbmemio.hbp" ,; - "hbmisc/hbmisc.hbp" ,; - "hbmzip/hbmzip.hbp" ,; /* uses: minizip (external) */ - "hbnetio/hbnetio.hbp" ,; - "hbnf/hbnf.hbp" ,; - "hbodbc/hbodbc.hbp" ,; - "hbsms/hbsms.hbp" ,; - "hbsqlit3/hbsqlit3.hbp" ,; /* uses: sqlite3 (external) */ - "hbtpathy/hbtpathy.hbp" ,; - "hbwin/hbwin.hbp" ,; - "hbxpp/hbxpp.hbp" ,; - "rddbmcdx/hbbmcdx.hbp" } - -STATIC s_aLibsPass2 := {; - "gtalleg/gtalleg.hbp" ,; - "gtalleg/gtallegs.hbp" ,; - "hbblat/hbblat.hbp" ,; - "hbcairo/hbcairo.hbp" ,; - "hbcups/hbcups.hbp" ,; - "hbcurl/hbcurl.hbp" ,; - "hbcurl/hbcurls.hbp" ,; - "hbfbird/hbfbird.hbp" ,; - "hbfimage/hbfimage.hbp" ,; - "hbgd/hbgd.hbp" ,; /* uses: hbct */ - "hbhpdf/hbhpdf.hbp" ,; - "hbmysql/hbmysql.hbp" ,; - "hbpgsql/hbpgsql.hbp" ,; - "hbqt/hbqt.hbp" ,; - "hbqt/hbqtcore.hbp" ,; - "hbqt/hbqtcores.hbp" ,; - "hbqt/hbqtgui.hbp" ,; - "hbqt/hbqtguis.hbp" ,; - "hbqt/hbqtnetwork.hbp" ,; - "hbqt/hbqtnetworks.hbp" ,; - "hbqt/hbqts.hbp" ,; - "hbssl/hbssl.hbp" ,; - "hbssl/hbssls.hbp" ,; - "hbxbp/hbxbp.hbp" ,; /* uses: hbqt */ - "rddads/rddads.hbp" ,; - "rddsql/rddsql.hbp" ,; - "sddfb/sddfb.hbp" ,; /* uses: rddsql */ - "sddmy/sddmy.hbp" ,; /* uses: rddsql */ - "sddoci/sddoci.hbp" ,; /* uses: rddsql */ - "sddodbc/sddodbc.hbp" ,; /* uses: rddsql */ - "sddpg/sddpg.hbp" ,; /* uses: rddsql */ - "sddsqlt3/sddsqlt3.hbp" } /* uses: rddsql, sqlite3 (external) */ - -STATIC s_aLibsPass3 := {; - "gtwvg/gtwvg.hbp" ,; /* uses: hbwin */ - "hbtip/hbtip.hbp" ,; - "hbtip/hbtipssl.hbp" ,; /* uses: hbssl */ - "hbziparc/hbziparc.hbp" ,; /* uses: hbmzip */ - "xhb/xhb.hbp" } /* uses: hbct, hbtip, hbwin */ - -STATIC s_aBins := {; - "hbdoc2/hbdoc2.hbp" ,; - "hbnetio/utils/hbnetio.hbp" ,; /* uses: hbnetio */ - "hbide/hbide.hbp" } /* uses: hbxbp, hbqt */ +STATIC s_aList := {; + { 1, "hbblink/hbblink.hbp" },; + { 1, "hbbz2/hbbz2.hbp" },; /* uses: bz2 (external) */ + { 1, "hbclipsm/hbclipsm.hbp" },; + { 1, "hbcomm/hbcomm.hbp" },; + { 1, "hbct/hbct.hbp" },; + { 1, "hbfoxpro/hbfoxpro.hbp" },; + { 1, "hbfship/hbfship.hbp" },; + { 1, "hbgt/hbgt.hbp" },; + { 1, "hbmemio/hbmemio.hbp" },; + { 1, "hbmisc/hbmisc.hbp" },; + { 1, "hbmzip/hbmzip.hbp" },; /* uses: minizip (external) */ + { 1, "hbnetio/hbnetio.hbp" },; + { 1, "hbnf/hbnf.hbp" },; + { 1, "hbodbc/hbodbc.hbp" },; + { 1, "hbsms/hbsms.hbp" },; + { 1, "hbsqlit3/hbsqlit3.hbp" },; /* uses: sqlite3 (external) */ + { 1, "hbtpathy/hbtpathy.hbp" },; + { 1, "hbwin/hbwin.hbp" },; + { 1, "hbxpp/hbxpp.hbp" },; + { 1, "rddbmcdx/hbbmcdx.hbp" },; + { 2, "gtalleg/gtalleg.hbp" },; + { 2, "gtalleg/gtallegs.hbp" },; + { 2, "hbblat/hbblat.hbp" },; + { 2, "hbcairo/hbcairo.hbp" },; + { 2, "hbcups/hbcups.hbp" },; + { 2, "hbcurl/hbcurl.hbp" },; + { 2, "hbcurl/hbcurls.hbp" },; + { 2, "hbfbird/hbfbird.hbp" },; + { 2, "hbfimage/hbfimage.hbp" },; + { 2, "hbgd/hbgd.hbp" },; /* uses: hbct */ + { 2, "hbhpdf/hbhpdf.hbp" },; + { 2, "hbmysql/hbmysql.hbp" },; + { 2, "hbpgsql/hbpgsql.hbp" },; + { 2, "hbqt/hbqt.hbp" },; + { 2, "hbqt/hbqtcore.hbp" },; + { 2, "hbqt/hbqtcores.hbp" },; + { 2, "hbqt/hbqtgui.hbp" },; + { 2, "hbqt/hbqtguis.hbp" },; + { 2, "hbqt/hbqtnetwork.hbp" },; + { 2, "hbqt/hbqtnetworks.hbp" },; + { 2, "hbqt/hbqts.hbp" },; + { 2, "hbssl/hbssl.hbp" },; + { 2, "hbssl/hbssls.hbp" },; + { 2, "hbxbp/hbxbp.hbp" },; /* uses: hbqt */ + { 2, "rddads/rddads.hbp" },; + { 2, "rddsql/rddsql.hbp" },; + { 2, "sddfb/sddfb.hbp" },; /* uses: rddsql */ + { 2, "sddmy/sddmy.hbp" },; /* uses: rddsql */ + { 2, "sddoci/sddoci.hbp" },; /* uses: rddsql */ + { 2, "sddodbc/sddodbc.hbp" },; /* uses: rddsql */ + { 2, "sddpg/sddpg.hbp" },; /* uses: rddsql */ + { 2, "sddsqlt3/sddsqlt3.hbp" },; /* uses: rddsql, sqlite3 (external) */ + { 3, "gtwvg/gtwvg.hbp" },; /* uses: hbwin */ + { 3, "hbtip/hbtip.hbp" },; + { 3, "hbtip/hbtipssl.hbp" },; /* uses: hbssl */ + { 3, "hbziparc/hbziparc.hbp" },; /* uses: hbmzip */ + { 3, "xhb/xhb.hbp" },; /* uses: hbct, hbtip, hbwin */ + { 4, "hbdoc2/hbdoc2.hbp" },; + { 4, "hbnetio/utils/hbnetio.hbp" },; /* uses: hbnetio */ + { 4, "hbide/hbide.hbp" }} /* uses: hbxbp, hbqt */ STATIC s_aAddons := {} @@ -127,10 +118,10 @@ STATIC hActions := {; STATIC s_cBase STATIC s_cHome STATIC s_cRoot - STATIC s_lTest PROCEDURE Main( ... ) + LOCAL tmp s_cBase := "" s_cHome := StrTran( hb_DirBase(), hb_ps(), "/" ) @@ -145,7 +136,11 @@ PROCEDURE Main( ... ) /* Making sure that user settings do not interfere with the std build process. */ hb_setenv( "HBMK_OPTIONS" ) - s_aAddons := hb_ATokens( GetEnv( "HB_BUILD_ADDONS" ),, .T. ) + FOR EACH tmp IN hb_ATokens( GetEnv( "HB_BUILD_ADDONS" ),, .T. ) + IF ! Empty( tmp ) + AAdd( s_aAddons, { 9, StrTran( tmp, "\", "/" ) } ) + ENDIF + NEXT IF Empty( GetEnv( "HB_HOST_BIN_DIR" ) ) StandAlone( ... ) @@ -171,9 +166,11 @@ PROCEDURE StandAlone( ... ) LOCAL aFile LOCAL cType - LOCAL cProject + LOCAL aDept LOCAL cBinDir + LOCAL cProject + LOCAL cBaseOptions LOCAL nAction @@ -231,10 +228,14 @@ PROCEDURE StandAlone( ... ) cProject := s_cBase + StrTran( aFile[ F_NAME ], "\", "/" ) - FOR EACH tmp IN call_hbmk2_dept( s_cRoot + "bin" + hb_ps(), cProject, @cType ) - OutStd( cProject + " depends on: " + tmp + hb_eol() ) - NEXT - OutStd( cProject + " type: " + cType + hb_eol() ) + call_hbmk2_dept( s_cRoot + "bin" + hb_ps(), cProject, @cType, @aDept ) + + OutStd( cProject + " type: " + cType ) + IF ! Empty( aDept ) + OutStd( " depends on: " ) + AEval( aDept, {| tmp | OutStd( tmp ) } ) + ENDIF + OutStd( hb_eol() ) IF cType $ "hbhrb|hbppo" LOOP @@ -267,11 +268,10 @@ PROCEDURE StandAlone( ... ) */ PROCEDURE GNUMake( ... ) - LOCAL aAll - LOCAL aList LOCAL cType LOCAL cBinDir + LOCAL aProject LOCAL cProject LOCAL cProjectDir @@ -284,7 +284,6 @@ PROCEDURE GNUMake( ... ) LOCAL aParams LOCAL aGNUMakeParams LOCAL nAction - LOCAL tmp /* Check if the requirements are met and if we have anything to do */ @@ -373,29 +372,25 @@ PROCEDURE GNUMake( ... ) cBinDir := GetEnv( "HB_HOST_BIN_DIR" ) + hb_ps() - aAll := {; - s_aLibsPass0,; - s_aLibsPass1,; - s_aLibsPass2,; - s_aLibsPass3,; - s_aBins,; - s_aAddons } - -// OutStd( Len( aAll ) ) ; aAll := { { "rddads/rddads.hbp" } } +// OutStd( Len( s_aList ) ) ; s_aList := { { 1, "rddads/rddads.hbp" } } OutStd( "! Calculating sorting order for contribs..." + hb_eol() ) - FOR EACH aList IN aAll - FOR EACH cProject IN aList - IF ! Empty( cProject ) - FOR EACH tmp IN call_hbmk2_dept( cBinDir, s_cBase + cProject, @cType ) - OutStd( cProject + " depends on: " + tmp + hb_eol() ) - NEXT - OutStd( cProject + " type: " + cType + hb_eol() ) - ENDIF - NEXT + FOR EACH aProject IN s_aList + cProject := aProject[ 2 ] + ASize( aProject, 4 ) + call_hbmk2_dept( cBinDir, s_cBase + cProject, @aProject[ 3 ], @aProject[ 4 ] ) + +// OutStd( cProject + " type: " + aProject[ 3 ] ) +// IF ! Empty( aProject[ 4 ] ) +// OutStd( " depends on: " ) +// AEval( aProject[ 4 ], {| tmp | OutStd( tmp ) } ) +// ENDIF +// OutStd( hb_eol() ) NEXT + ASort( s_aList, {| tmp, tmp1 | tmp[ 1 ] > tmp1[ 1 ] } ) + /* Converting build options to hbmk2 options */ hb_setenv( "_HB_BUILD_INSTALL" ) @@ -419,88 +414,83 @@ PROCEDURE GNUMake( ... ) OutStd( hb_StrFormat( "! Contribs %1$s...", hActions[ nAction ] ) + hb_eol() ) - FOR EACH aList IN aAll - FOR EACH cProject IN aList + FOR EACH aProject IN s_aList - IF ! Empty( cProject ) + cProject := aProject[ 2 ] - cProjectDir := StrTran( FNameDirGet( PathSepToSelf( cProject ) ), "\", "/" ) - cProject := s_cBase + StrTran( cProject, "\", "/" ) + cProjectDir := StrTran( FNameDirGet( PathSepToSelf( cProject ) ), "\", "/" ) + cProject := s_cBase + cProject - IF Empty( aFilter ) .OR. ; - iif( lFilterNegative,; - AScan( aFilter, {| tmp | tmp == cProjectDir } ) == 0,; - AScan( aFilter, {| tmp | tmp == cProjectDir } ) > 0 ) + IF Empty( aFilter ) .OR. ; + iif( lFilterNegative,; + AScan( aFilter, {| tmp | tmp == cProjectDir } ) == 0,; + AScan( aFilter, {| tmp | tmp == cProjectDir } ) > 0 ) - cType := get_hbmk2_project_type( cProject ) + cType := get_hbmk2_project_type( cProject ) - IF cType $ "hbhrb|hbppo" - LOOP - ENDIF - - IF GetEnv( "HB_BUILD_PARTS" ) == "lib" .AND. ; - !( cType $ "hbimplib|hblib" ) - LOOP - ENDIF - - call_hbmk2( cBinDir, cProject, cBaseOptions, "" ) - - IF hb_FileExists( PathSepToSelf( FNameExtSet( cProject, ".hbi" ) ) ) - call_hbmk2( cBinDir, FNameExtSet( cProject, ".hbi" ), cBaseOptions, "" ) - ENDIF - - /* Highly experimental */ - IF cType == "hblib" .AND. GetEnv( "HB_BUILD_CONTRIB_DLL" ) == "yes" .AND. ; - !( GetEnv( "HB_BUILD_PARTS" ) == "lib" ) .AND. ; - hb_FileExists( PathSepToSelf( FNameExtSet( cProject, ".hbc" ) ) ) - - call_hbmk2( cBinDir, cProject, cBaseOptions, " -hbdyn -nohblib- -implib " + FNameExtSet( cProject, ".hbc" ) ) - ENDIF - - IF nAction == _ACT_INC_INST .OR. ; - nAction == _ACT_INC_REBUILD_INST - mk_hbd( PathSepToSelf( cProjectDir ) ) - ENDIF - ELSE - /* OutStd( hb_StrFormat( "! project '%1$s' skipped", cProject ) + hb_eol() ) */ - ENDIF + IF cType $ "hbhrb|hbppo" + LOOP ENDIF - NEXT + + call_hbmk2( cBinDir, cProject, cBaseOptions, "" ) + + IF hb_FileExists( PathSepToSelf( FNameExtSet( cProject, ".hbi" ) ) ) + call_hbmk2( cBinDir, FNameExtSet( cProject, ".hbi" ), cBaseOptions, "" ) + ENDIF + + /* Highly experimental */ + IF cType == "hblib" .AND. ; + GetEnv( "HB_BUILD_CONTRIB_DLL" ) == "yes" .AND. ; + hb_FileExists( PathSepToSelf( FNameExtSet( cProject, ".hbc" ) ) ) + + call_hbmk2( cBinDir, cProject, cBaseOptions, " -hbdyn -nohblib- -implib " + FNameExtSet( cProject, ".hbc" ) ) + ENDIF + + IF nAction == _ACT_INC_INST .OR. ; + nAction == _ACT_INC_REBUILD_INST + mk_hbd( PathSepToSelf( cProjectDir ) ) + ENDIF + ELSE + /* OutStd( hb_StrFormat( "! project '%1$s' skipped", cProject ) + hb_eol() ) */ + ENDIF NEXT ErrorLevel( 0 ) RETURN -STATIC FUNCTION call_hbmk2_dept( cBinDir, cProject, /* @ */ cType ) +STATIC FUNCTION call_hbmk2_dept( cBinDir, cProject, /* @ */ cType, /* @ */ aDept ) LOCAL tmp, tmp1 - LOCAL aList := {} cType := "" + aDept := {} - hb_processRun( PathSepToSelf( cBinDir ) + "hbmk2 --hbinfo " + StrTran( cProject, "\", "/" ),, @tmp ) + IF hb_processRun( PathSepToSelf( cBinDir ) + "hbmk2 --hbinfo " + StrTran( cProject, "\", "/" ),, @tmp ) == 0 - IF ( tmp1 := At( "targettype{{", tmp ) ) > 0 - tmp := SubStr( tmp, tmp1 + Len( "targettype{{" ) ) - IF ( tmp1 := At( "}}", tmp ) ) > 0 - cType := Left( tmp, tmp1 - 1 ) + IF ( tmp1 := At( "targettype{{", tmp ) ) > 0 + tmp := SubStr( tmp, tmp1 + Len( "targettype{{" ) ) + IF ( tmp1 := At( "}}", tmp ) ) > 0 + cType := Left( tmp, tmp1 - 1 ) + ENDIF ENDIF + + IF ( tmp1 := At( "hbctree{{", tmp ) ) > 0 + tmp := SubStr( tmp, tmp1 + Len( "hbctree{{" ) ) + IF ( tmp1 := At( "}}", tmp ) ) > 0 + tmp := StrTran( Left( tmp, tmp1 - 1 ), Chr( 13 ) ) + FOR EACH tmp IN hb_ATokens( tmp, Chr( 10 ) ) + IF ! Empty( tmp ) + hb_FNameSplit( tmp,, @tmp1 ) + AAdd( aDept, tmp1 ) + ENDIF + NEXT + ENDIF + ENDIF + + RETURN .T. ENDIF - IF ( tmp1 := At( "hbctree{{", tmp ) ) > 0 - tmp := SubStr( tmp, tmp1 + Len( "hbctree{{" ) ) - IF ( tmp1 := At( "}}", tmp ) ) > 0 - tmp := StrTran( Left( tmp, tmp1 - 1 ), Chr( 13 ) ) - FOR EACH tmp IN hb_ATokens( tmp, Chr( 10 ) ) - IF ! Empty( tmp ) - hb_FNameSplit( tmp,, @tmp1 ) - AAdd( aList, tmp1 ) - ENDIF - NEXT - ENDIF - ENDIF - - RETURN aList + RETURN .F. STATIC FUNCTION call_hbmk2( cBinDir, cProject, cOptionsPre, cOptionsPost ) LOCAL nErrorLevel diff --git a/harbour/contrib/sddodbc/sddodbc.c b/harbour/contrib/sddodbc/sddodbc.c index fb212d7deb..e23819b575 100644 --- a/harbour/contrib/sddodbc/sddodbc.c +++ b/harbour/contrib/sddodbc/sddodbc.c @@ -74,12 +74,6 @@ # if !defined( SQLLEN ) && !defined( SQLTCHAR ) typedef unsigned char SQLTCHAR; # endif -# if !defined( SQLLEN ) -# define SQLLEN SQLINTEGER -# endif -# if !defined( SQLULEN ) -# define SQLULEN SQLUINTEGER -# endif #endif #if defined( UNICODE )