From 3d47dc98f8a97634e9fad1d374a5ac0b0b5152a8 Mon Sep 17 00:00:00 2001 From: Viktor Szakats Date: Fri, 27 Jul 2012 18:11:33 +0000 Subject: [PATCH] 2012-07-27 20:09 UTC+0200 Viktor Szakats (harbour syenar.net) + utils/hbmk2/examples/plug_bis.hb + hbmk2 plugin for bison support. Syntax checked but not tested. * utils/hbmk2/examples/plug_tpl.hb + made it display an error message when run in standalone mode * contrib/hbqt/hbmk2_qt.hb * formatting --- harbour/ChangeLog | 10 ++ harbour/contrib/hbqt/hbmk2_qt.hb | 2 +- harbour/utils/hbmk2/examples/plug_bis.hb | 187 +++++++++++++++++++++++ harbour/utils/hbmk2/examples/plug_tpl.hb | 9 ++ 4 files changed, 207 insertions(+), 1 deletion(-) create mode 100644 harbour/utils/hbmk2/examples/plug_bis.hb diff --git a/harbour/ChangeLog b/harbour/ChangeLog index 2d8ed780f5..0bb0731ce3 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -16,6 +16,16 @@ The license applies to all entries newer than 2009-04-28. */ +2012-07-27 20:09 UTC+0200 Viktor Szakats (harbour syenar.net) + + utils/hbmk2/examples/plug_bis.hb + + hbmk2 plugin for bison support. Syntax checked but not tested. + + * utils/hbmk2/examples/plug_tpl.hb + + made it display an error message when run in standalone mode + + * contrib/hbqt/hbmk2_qt.hb + * formatting + 2012-07-27 19:59 UTC+0200 Viktor Szakats (harbour syenar.net) * contrib/hbtinymt/tests/test32.prg * contrib/hbtinymt/tests/test64.prg diff --git a/harbour/contrib/hbqt/hbmk2_qt.hb b/harbour/contrib/hbqt/hbmk2_qt.hb index 2df4019cf8..225606f2f3 100644 --- a/harbour/contrib/hbqt/hbmk2_qt.hb +++ b/harbour/contrib/hbqt/hbmk2_qt.hb @@ -408,7 +408,7 @@ STATIC FUNCTION qt_tool_detect( hbmk, cName, cEnvQT, lPostfix ) LOCAL aEnvList LOCAL cStdErr - IF ! hb_isLogical( lPostfix ) + IF ! HB_ISLOGICAL( lPostfix ) lPostfix := .T. ENDIF diff --git a/harbour/utils/hbmk2/examples/plug_bis.hb b/harbour/utils/hbmk2/examples/plug_bis.hb new file mode 100644 index 0000000000..82abc442f4 --- /dev/null +++ b/harbour/utils/hbmk2/examples/plug_bis.hb @@ -0,0 +1,187 @@ +/* + * $Id$ + */ + +/* + * hbmk2 plugin script, implementing support for bison + * + * Copyright 2011 Viktor Szakats (harbour syenar.net) + * www - http://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. + * + * 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/). + * + */ + +#pragma warninglevel=3 +#pragma -km+ +#pragma -ko+ + +#define I_( x ) hb_i18n_gettext( x ) + +#if defined( __HBSCRIPT__HBMK_PLUGIN ) + +FUNCTION hbmk_plugin_bison( hbmk ) + LOCAL cRetVal := "" + + LOCAL cSrc + LOCAL cDst + LOCAL tSrc + LOCAL tDst + + LOCAL cCommand + LOCAL nError + LOCAL lBuildIt + + SWITCH hbmk[ "cSTATE" ] + CASE "init" + + hbmk_Register_Input_File_Extension( hbmk, ".y" ) + + EXIT + + CASE "pre_all" + + /* Gather input parameters */ + + hbmk[ "vars" ][ "aBIS_Src" ] := {} + FOR EACH cSrc IN hbmk[ "params" ] + IF Left( cSrc, Len( "-bisonflag=" ) ) == "-bisonflag=" + /* TODO: process bison flags */ + ELSE + SWITCH Lower( hb_FNameExt( cSrc ) ) + CASE ".y" + AAdd( hbmk[ "vars" ][ "aBIS_Src" ], cSrc ) + EXIT + ENDSWITCH + ENDIF + NEXT + + /* Create output file lists */ + + hbmk[ "vars" ][ "aBIS_Dst" ] := {} + FOR EACH cSrc IN hbmk[ "vars" ][ "aBIS_Src" ] + cDst := hbmk_FNameDirExtSet( hb_FNameName( cSrc ) + "y", hbmk[ "cWorkDir" ], ".c" ) + AAdd( hbmk[ "vars" ][ "aBIS_Dst" ], cDst ) + hbmk_AddInput_C( hbmk, cDst ) + NEXT + + /* Detect tool locations */ + + IF ! hbmk[ "lCLEAN" ] + IF ! Empty( hbmk[ "vars" ][ "aBIS_Src" ] ) + hbmk[ "vars" ][ "cBIS_BIN" ] := tool_detect( hbmk, "bison", "BISON_BIN" ) + IF Empty( hbmk[ "vars" ][ "cBIS_BIN" ] ) + cRetVal := I_( "Required 'bison' tool not found" ) + ENDIF + ENDIF + ENDIF + + EXIT + + CASE "pre_prg" + + EXIT + + CASE "pre_c" + + IF ! hbmk[ "lCLEAN" ] .AND. ; + ! Empty( hbmk[ "vars" ][ "aBIS_Src" ] ) + + IF ! Empty( hbmk[ "vars" ][ "cBIS_BIN" ] ) + + /* Execute 'bison' commands on input files */ + + FOR EACH cSrc, cDst IN hbmk[ "vars" ][ "aBIS_Src" ], hbmk[ "vars" ][ "aBIS_Dst" ] + + IF hbmk[ "lINC" ] .AND. ! hbmk[ "lREBUILD" ] + lBuildIt := ! hb_FGetDateTime( cDst, @tDst ) .OR. ; + ! hb_FGetDateTime( cSrc, @tSrc ) .OR. ; + tSrc > tDst + ELSE + lBuildIt := .T. + ENDIF + + IF lBuildIt + + cCommand := hbmk[ "vars" ][ "cBIS_BIN" ] +; + " -d -p hb_comp" +; + " -o " + hbmk_FNameEscape( hbmk_PathSepToTarget( hbmk, cDst ), hbmk[ "nCmd_Esc" ], hbmk[ "nCmd_FNF" ] ) +; + " " + hbmk_FNameEscape( hbmk_PathSepToTarget( hbmk, cSrc ), hbmk[ "nCmd_Esc" ], hbmk[ "nCmd_FNF" ] ) + + IF hbmk[ "lTRACE" ] + IF ! hbmk[ "lQUIET" ] + hbmk_OutStd( hbmk, I_( "'bison' command:" ) ) + ENDIF + hbmk_OutStdRaw( cCommand ) + ENDIF + + IF ! hbmk[ "lDONTEXEC" ] .AND. ( nError := hb_processRun( cCommand ) ) != 0 + hbmk_OutErr( hbmk, hb_StrFormat( I_( "Error: Running 'bison' executable. %1$s" ), hb_ntos( nError ) ) ) + IF ! hbmk[ "lQUIET" ] + hbmk_OutErrRaw( cCommand ) + ENDIF + IF ! hbmk[ "lIGNOREERROR" ] + cRetVal := "error" + EXIT + ENDIF + ENDIF + ENDIF + NEXT + ENDIF + ENDIF + + EXIT + + CASE "post_all" + + IF ! hbmk[ "lINC" ] .OR. hbmk[ "lCLEAN" ] + AEval( hbmk[ "vars" ][ "aBIS_Dst" ], {| tmp | FErase( tmp ),; + FErase( HB_FNameExtSet( tmp, ".h" ) ) } ) + ENDIF + + EXIT + + ENDSWITCH + + RETURN cRetVal + +STATIC FUNCTION tool_detect( hbmk, cName, cEnvQT ) + LOCAL cBIN + LOCAL aEnvList := { "HB_BISONPATH" } + + IF Empty( cBIN := GetEnv( cEnvQT ) ) + + cName += hbmk[ "cCCEXT" ] + + IF Empty( GetEnv( "HB_BISONPATH" ) ) .OR. ; + ! hb_FileExists( cBIN := hb_DirSepAdd( GetEnv( "HB_BISONPATH" ) ) + cName ) + + cBIN := hbmk_FindInPath( cName, GetEnv( "PATH" ) ) + IF Empty( cBIN ) + hbmk_OutErr( hbmk, hb_StrFormat( "%1$s not set, could not autodetect '%2$s' executable", hbmk_ArrayToList( aEnvList, ", " ), cName ) ) + RETURN NIL + ENDIF + ENDIF + ENDIF + + RETURN cBIN + +#else + +PROCEDURE Main() + OutStd( "Cannot be run in standalone mode. Use it with -plugin= option of hbmk2." + hb_eol() ) + +#endif diff --git a/harbour/utils/hbmk2/examples/plug_tpl.hb b/harbour/utils/hbmk2/examples/plug_tpl.hb index 14899642a3..9d1c46dcc9 100644 --- a/harbour/utils/hbmk2/examples/plug_tpl.hb +++ b/harbour/utils/hbmk2/examples/plug_tpl.hb @@ -31,6 +31,8 @@ #pragma warninglevel=3 +#if defined( __HBSCRIPT__HBMK_PLUGIN ) + FUNCTION hbmk_plugin_tpl( hbmk ) LOCAL tmp @@ -57,3 +59,10 @@ FUNCTION hbmk_plugin_tpl( hbmk ) ENDSWITCH RETURN NIL + +#else + +PROCEDURE Main() + OutStd( "Cannot be run in standalone mode. Use it with -plugin= option of hbmk2." + hb_eol() ) + +#endif