diff --git a/harbour/ChangeLog b/harbour/ChangeLog index 428209e988..b5e59853d2 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -17,6 +17,20 @@ past entries belonging to these authors: Viktor Szakats. */ +2009-05-14 14:17 UTC+0200 Viktor Szakats (harbour.01 syenar hu) + * utils/hbmk2/hbmk2.prg + + Added -shareable/-shareable- option to control the aspect + of harbour.so absolute dir reference. It can override + previous rule controlled by system location detection. See + more in help. + * Minor internal change to one of the functions. + + + source/rtl/hbzlibgz.c + * source/rtl/hbzlib.c + * source/rtl/Makefile + % Split source into two, so unnecessary code parts won't be + included in final binaries. + 2009-05-14 12:18 UTC+0200 Viktor Szakats (harbour.01 syenar hu) * contrib/hbwin/tests/testdll.prg * contrib/hbwin/win_dll.c diff --git a/harbour/source/rtl/Makefile b/harbour/source/rtl/Makefile index d4c3f394a9..a234af6bf5 100644 --- a/harbour/source/rtl/Makefile +++ b/harbour/source/rtl/Makefile @@ -78,6 +78,7 @@ C_SOURCES=\ hbstrsh.c \ hbtoken.c \ hbzlib.c \ + hbzlibgz.c \ idle.c \ inkey.c \ inkeyapi.c \ diff --git a/harbour/source/rtl/hbzlib.c b/harbour/source/rtl/hbzlib.c index 1cc2b8542d..93a8c61aff 100644 --- a/harbour/source/rtl/hbzlib.c +++ b/harbour/source/rtl/hbzlib.c @@ -245,313 +245,3 @@ HB_FUNC( HB_ZUNCOMPRESS ) else hb_errRT_BASE_SubstR( EG_ARG, 3012, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS ); } - - -/* GZIP stream destructor */ -static HB_GARBAGE_FUNC( hb_gz_Destructor ) -{ - gzFile * gz = ( gzFile * ) Cargo; - if( * gz ) - { - gzclose( * gz ); - * gz = NULL; - } -} - -static gzFile hb_gzParam( int iParam ) -{ - gzFile * gzHolder = ( gzFile * ) hb_parptrGC( hb_gz_Destructor, iParam ); - - if( gzHolder && * gzHolder ) - return * gzHolder; - - hb_errRT_BASE_SubstR( EG_ARG, 3012, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS ); - return NULL; -} - -/* - * HB_GZOPEN( , ) => or NIL on Error - */ -HB_FUNC( HB_GZOPEN ) -{ - char * cFile = hb_parc( 1 ), * cMode = hb_parc( 2 ); - if( cFile && cMode ) - { - gzFile gz = gzopen( cFile, cMode ); - if( gz ) - { - gzFile * gzHolder = ( gzFile * ) hb_gcAlloc( sizeof( gzFile ), - hb_gz_Destructor ); - * gzHolder = gz; - hb_retptrGC( gzHolder ); - } - } - else - hb_errRT_BASE_SubstR( EG_ARG, 3012, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS ); -} - -/* - * HB_GZDOPEN( , ) => or NIL on Error - */ -HB_FUNC( HB_GZDOPEN ) -{ - char * cMode = hb_parc( 2 ); - if( ISNUM( 1 ) && cMode ) - { - gzFile gz = gzdopen( hb_parni( 1 ), cMode ); - if( gz ) - { - gzFile * gzHolder = ( gzFile * ) hb_gcAlloc( sizeof( gzFile ), - hb_gz_Destructor ); - * gzHolder = gz; - hb_retptrGC( gzHolder ); - } - } - else - hb_errRT_BASE_SubstR( EG_ARG, 3012, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS ); -} - -/* - * HB_GZCLOSE( ) => - */ -HB_FUNC( HB_GZCLOSE ) -{ - gzFile * gzHolder = ( gzFile * ) hb_parptrGC( hb_gz_Destructor, 1 ); - - if( gzHolder ) - { - gzFile gz = * gzHolder; - * gzHolder = NULL; - hb_retni( gzclose( gz ) ); - } - else - hb_errRT_BASE_SubstR( EG_ARG, 3012, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS ); -} - -/* - * HB_GZSETPARAMS( , , ) => - */ -HB_FUNC( HB_GZSETPARAMS ) -{ - if( ISNUM( 2 ) && ISNUM( 3 ) ) - { - gzFile gz = hb_gzParam( 1 ); - if( gz ) - hb_retni( gzsetparams( gz, hb_parni( 2 ), hb_parni( 3 ) ) ); - } - else - hb_errRT_BASE_SubstR( EG_ARG, 3012, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS ); -} - -/* - * HB_GZREAD( , <@cData>, [ ] ) => - */ -HB_FUNC( HB_GZREAD ) -{ - PHB_ITEM pBuffer = ISBYREF( 2 ) ? hb_param( 2, HB_IT_STRING ) : NULL; - - if( pBuffer ) - { - gzFile gz = hb_gzParam( 1 ); - if( gz ) - { - pBuffer = hb_itemUnShareString( pBuffer ); - hb_retni( gzread( gz, hb_itemGetCPtr( pBuffer ), ISNUM( 3 ) ? - ( ULONG ) hb_parnl( 3 ) : hb_itemGetCLen( pBuffer ) ) ); - } - } - else - hb_errRT_BASE_SubstR( EG_ARG, 3012, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS ); -} - -/* - * HB_GZWRITE( , , [ ] ) => - */ -HB_FUNC( HB_GZWRITE ) -{ - char * szData = hb_parc( 2 ); - if( szData ) - { - gzFile gz = hb_gzParam( 1 ); - if( gz ) - hb_retni( gzwrite( gz, szData, ISNUM( 3 ) ? - ( ULONG ) hb_parnl( 3 ) : hb_parclen( 2 ) ) ); - } - else - hb_errRT_BASE_SubstR( EG_ARG, 3012, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS ); -} - -/* - * HB_GZGETS( , ) => or NIL on error - */ -HB_FUNC( HB_GZGETS ) -{ - int iLen = hb_parni( 2 ); - if( iLen > 0 ) - { - gzFile gz = hb_gzParam( 1 ); - if( gz ) - { - char * szBuffer = ( char * ) hb_xalloc( iLen + 1 ); - - if( szBuffer ) - { - if( gzgets( gz, szBuffer, iLen ) != Z_NULL ) - hb_retc_buffer( szBuffer ); - else - hb_xfree( szBuffer ); - } - } - } - else - hb_errRT_BASE_SubstR( EG_ARG, 3012, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS ); -} - -/* - * HB_GZPUTS( , ) => - */ -HB_FUNC( HB_GZPUTS ) -{ - char * szData = hb_parc( 2 ); - if( szData ) - { - gzFile gz = hb_gzParam( 1 ); - if( gz ) - hb_retni( gzputs( gz, szData ) ); - } - else - hb_errRT_BASE_SubstR( EG_ARG, 3012, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS ); -} - -/* - * HB_GZPUTC( , ) => - */ -HB_FUNC( HB_GZPUTC ) -{ - if( ISNUM( 2 ) ) - { - gzFile gz = hb_gzParam( 1 ); - if( gz ) - hb_retni( gzputc( gz, hb_parni( 2 ) ) ); - } - else - hb_errRT_BASE_SubstR( EG_ARG, 3012, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS ); -} - -/* - * HB_GZGETC( ) => - */ -HB_FUNC( HB_GZGETC ) -{ - gzFile gz = hb_gzParam( 1 ); - if( gz ) - hb_retni( gzgetc( gz ) ); -} - -/* - * HB_GZUNGETC( , ) => - */ -HB_FUNC( HB_GZUNGETC ) -{ - if( ISNUM( 1 ) ) - { - gzFile gz = hb_gzParam( 2 ); - if( gz ) - hb_retni( gzungetc( hb_parni( 1 ), gz ) ); - } - else - hb_errRT_BASE_SubstR( EG_ARG, 3012, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS ); -} - -/* - * HB_GZFLUSH( , [ ] ) => - */ -HB_FUNC( HB_GZFLUSH ) -{ - gzFile gz = hb_gzParam( 1 ); - if( gz ) - hb_retni( gzflush( gz, ISNUM( 2 ) ? hb_parni( 2 ) : Z_SYNC_FLUSH ) ); -} - -/* - * HB_GZSEEK( , , [ ] ) => - */ -HB_FUNC( HB_GZSEEK ) -{ - if( ISNUM( 2 ) ) - { - gzFile gz = hb_gzParam( 1 ); - if( gz ) - hb_retnint( gzseek( gz, ( z_off_t ) hb_parnint( 2 ), ISNUM( 3 ) ? - hb_parni( 3 ) : SEEK_SET ) ); - } - else - hb_errRT_BASE_SubstR( EG_ARG, 3012, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS ); -} - -/* - * HB_GZREWIND( ) => - */ -HB_FUNC( HB_GZREWIND ) -{ - gzFile gz = hb_gzParam( 1 ); - if( gz ) - hb_retni( gzrewind( gz ) ); -} - -/* - * HB_GZTELL( ) => - */ -HB_FUNC( HB_GZTELL ) -{ - gzFile gz = hb_gzParam( 1 ); - if( gz ) - hb_retnint( gztell( gz ) ); -} - -/* - * HB_GZEOF( ) => - */ -HB_FUNC( HB_GZEOF ) -{ - gzFile gz = hb_gzParam( 1 ); - if( gz ) - hb_retl( gzeof( gz ) != 0 ); -} - -#if ZLIB_VERNUM >= 0x1230 -/* - * HB_GZDIRECT( ) => - */ -HB_FUNC( HB_GZDIRECT ) -{ - gzFile gz = hb_gzParam( 1 ); - if( gz ) - hb_retl( gzdirect( gz ) != 0 ); -} -#endif - -/* - * HB_GZERROR( , [ <@nError> ] ) => - */ -HB_FUNC( HB_GZERROR ) -{ - gzFile gz = hb_gzParam( 1 ); - if( gz ) - { - int iErrNum = 0; - - hb_retc( gzerror( gz, &iErrNum ) ); - hb_storni( iErrNum, 2 ); - } -} - -/* - * HB_GZCLEARERR( ) => NIL - */ -HB_FUNC( HB_GZCLEARERR ) -{ - gzFile gz = hb_gzParam( 1 ); - if( gz ) - gzclearerr( gz ); -} diff --git a/harbour/source/rtl/hbzlibgz.c b/harbour/source/rtl/hbzlibgz.c new file mode 100644 index 0000000000..c08b8f0d23 --- /dev/null +++ b/harbour/source/rtl/hbzlibgz.c @@ -0,0 +1,365 @@ +/* + * $Id$ + */ + +/* + * Harbour Project source code: + * GZIP functions wrapper + * + * Copyright 2007 Przemyslaw Czerpak + * www - http://www.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, 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 software; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307 USA (or visit the web site http://www.gnu.org/). + * + * As a special exception, the Harbour Project gives permission for + * additional uses of the text contained in its release of Harbour. + * + * The exception is that, if you link the Harbour libraries with other + * files to produce an executable, this does not by itself cause the + * resulting executable to be covered by the GNU General Public License. + * Your use of that executable is in no way restricted on account of + * linking the Harbour library code into it. + * + * This exception does not however invalidate any other reasons why + * the executable file might be covered by the GNU General Public License. + * + * This exception applies only to the code released by the Harbour + * Project under the name Harbour. If you copy code from other + * Harbour Project or Free Software Foundation releases into a copy of + * Harbour, as the General Public License permits, the exception does + * not apply to the code that you add in this way. To avoid misleading + * anyone as to the status of such modified files, you must delete + * this exception notice from them. + * + * If you write modifications of your own for Harbour, it is your choice + * whether to permit this exception to apply to your modifications. + * If you do not wish that, delete this exception notice. + * + */ + +#include "hbapi.h" +#include "hbapiitm.h" +#include "hbapierr.h" +#include "hbzlib.h" + +/* GZIP stream destructor */ +static HB_GARBAGE_FUNC( hb_gz_Destructor ) +{ + gzFile * gz = ( gzFile * ) Cargo; + if( * gz ) + { + gzclose( * gz ); + * gz = NULL; + } +} + +static gzFile hb_gzParam( int iParam ) +{ + gzFile * gzHolder = ( gzFile * ) hb_parptrGC( hb_gz_Destructor, iParam ); + + if( gzHolder && * gzHolder ) + return * gzHolder; + + hb_errRT_BASE_SubstR( EG_ARG, 3012, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS ); + return NULL; +} + +/* + * HB_GZOPEN( , ) => or NIL on Error + */ +HB_FUNC( HB_GZOPEN ) +{ + char * cFile = hb_parc( 1 ), * cMode = hb_parc( 2 ); + if( cFile && cMode ) + { + gzFile gz = gzopen( cFile, cMode ); + if( gz ) + { + gzFile * gzHolder = ( gzFile * ) hb_gcAlloc( sizeof( gzFile ), + hb_gz_Destructor ); + * gzHolder = gz; + hb_retptrGC( gzHolder ); + } + } + else + hb_errRT_BASE_SubstR( EG_ARG, 3012, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS ); +} + +/* + * HB_GZDOPEN( , ) => or NIL on Error + */ +HB_FUNC( HB_GZDOPEN ) +{ + char * cMode = hb_parc( 2 ); + if( ISNUM( 1 ) && cMode ) + { + gzFile gz = gzdopen( hb_parni( 1 ), cMode ); + if( gz ) + { + gzFile * gzHolder = ( gzFile * ) hb_gcAlloc( sizeof( gzFile ), + hb_gz_Destructor ); + * gzHolder = gz; + hb_retptrGC( gzHolder ); + } + } + else + hb_errRT_BASE_SubstR( EG_ARG, 3012, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS ); +} + +/* + * HB_GZCLOSE( ) => + */ +HB_FUNC( HB_GZCLOSE ) +{ + gzFile * gzHolder = ( gzFile * ) hb_parptrGC( hb_gz_Destructor, 1 ); + + if( gzHolder ) + { + gzFile gz = * gzHolder; + * gzHolder = NULL; + hb_retni( gzclose( gz ) ); + } + else + hb_errRT_BASE_SubstR( EG_ARG, 3012, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS ); +} + +/* + * HB_GZSETPARAMS( , , ) => + */ +HB_FUNC( HB_GZSETPARAMS ) +{ + if( ISNUM( 2 ) && ISNUM( 3 ) ) + { + gzFile gz = hb_gzParam( 1 ); + if( gz ) + hb_retni( gzsetparams( gz, hb_parni( 2 ), hb_parni( 3 ) ) ); + } + else + hb_errRT_BASE_SubstR( EG_ARG, 3012, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS ); +} + +/* + * HB_GZREAD( , <@cData>, [ ] ) => + */ +HB_FUNC( HB_GZREAD ) +{ + PHB_ITEM pBuffer = ISBYREF( 2 ) ? hb_param( 2, HB_IT_STRING ) : NULL; + + if( pBuffer ) + { + gzFile gz = hb_gzParam( 1 ); + if( gz ) + { + pBuffer = hb_itemUnShareString( pBuffer ); + hb_retni( gzread( gz, hb_itemGetCPtr( pBuffer ), ISNUM( 3 ) ? + ( ULONG ) hb_parnl( 3 ) : hb_itemGetCLen( pBuffer ) ) ); + } + } + else + hb_errRT_BASE_SubstR( EG_ARG, 3012, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS ); +} + +/* + * HB_GZWRITE( , , [ ] ) => + */ +HB_FUNC( HB_GZWRITE ) +{ + char * szData = hb_parc( 2 ); + if( szData ) + { + gzFile gz = hb_gzParam( 1 ); + if( gz ) + hb_retni( gzwrite( gz, szData, ISNUM( 3 ) ? + ( ULONG ) hb_parnl( 3 ) : hb_parclen( 2 ) ) ); + } + else + hb_errRT_BASE_SubstR( EG_ARG, 3012, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS ); +} + +/* + * HB_GZGETS( , ) => or NIL on error + */ +HB_FUNC( HB_GZGETS ) +{ + int iLen = hb_parni( 2 ); + if( iLen > 0 ) + { + gzFile gz = hb_gzParam( 1 ); + if( gz ) + { + char * szBuffer = ( char * ) hb_xalloc( iLen + 1 ); + + if( szBuffer ) + { + if( gzgets( gz, szBuffer, iLen ) != Z_NULL ) + hb_retc_buffer( szBuffer ); + else + hb_xfree( szBuffer ); + } + } + } + else + hb_errRT_BASE_SubstR( EG_ARG, 3012, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS ); +} + +/* + * HB_GZPUTS( , ) => + */ +HB_FUNC( HB_GZPUTS ) +{ + char * szData = hb_parc( 2 ); + if( szData ) + { + gzFile gz = hb_gzParam( 1 ); + if( gz ) + hb_retni( gzputs( gz, szData ) ); + } + else + hb_errRT_BASE_SubstR( EG_ARG, 3012, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS ); +} + +/* + * HB_GZPUTC( , ) => + */ +HB_FUNC( HB_GZPUTC ) +{ + if( ISNUM( 2 ) ) + { + gzFile gz = hb_gzParam( 1 ); + if( gz ) + hb_retni( gzputc( gz, hb_parni( 2 ) ) ); + } + else + hb_errRT_BASE_SubstR( EG_ARG, 3012, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS ); +} + +/* + * HB_GZGETC( ) => + */ +HB_FUNC( HB_GZGETC ) +{ + gzFile gz = hb_gzParam( 1 ); + if( gz ) + hb_retni( gzgetc( gz ) ); +} + +/* + * HB_GZUNGETC( , ) => + */ +HB_FUNC( HB_GZUNGETC ) +{ + if( ISNUM( 1 ) ) + { + gzFile gz = hb_gzParam( 2 ); + if( gz ) + hb_retni( gzungetc( hb_parni( 1 ), gz ) ); + } + else + hb_errRT_BASE_SubstR( EG_ARG, 3012, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS ); +} + +/* + * HB_GZFLUSH( , [ ] ) => + */ +HB_FUNC( HB_GZFLUSH ) +{ + gzFile gz = hb_gzParam( 1 ); + if( gz ) + hb_retni( gzflush( gz, ISNUM( 2 ) ? hb_parni( 2 ) : Z_SYNC_FLUSH ) ); +} + +/* + * HB_GZSEEK( , , [ ] ) => + */ +HB_FUNC( HB_GZSEEK ) +{ + if( ISNUM( 2 ) ) + { + gzFile gz = hb_gzParam( 1 ); + if( gz ) + hb_retnint( gzseek( gz, ( z_off_t ) hb_parnint( 2 ), ISNUM( 3 ) ? + hb_parni( 3 ) : SEEK_SET ) ); + } + else + hb_errRT_BASE_SubstR( EG_ARG, 3012, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS ); +} + +/* + * HB_GZREWIND( ) => + */ +HB_FUNC( HB_GZREWIND ) +{ + gzFile gz = hb_gzParam( 1 ); + if( gz ) + hb_retni( gzrewind( gz ) ); +} + +/* + * HB_GZTELL( ) => + */ +HB_FUNC( HB_GZTELL ) +{ + gzFile gz = hb_gzParam( 1 ); + if( gz ) + hb_retnint( gztell( gz ) ); +} + +/* + * HB_GZEOF( ) => + */ +HB_FUNC( HB_GZEOF ) +{ + gzFile gz = hb_gzParam( 1 ); + if( gz ) + hb_retl( gzeof( gz ) != 0 ); +} + +#if ZLIB_VERNUM >= 0x1230 +/* + * HB_GZDIRECT( ) => + */ +HB_FUNC( HB_GZDIRECT ) +{ + gzFile gz = hb_gzParam( 1 ); + if( gz ) + hb_retl( gzdirect( gz ) != 0 ); +} +#endif + +/* + * HB_GZERROR( , [ <@nError> ] ) => + */ +HB_FUNC( HB_GZERROR ) +{ + gzFile gz = hb_gzParam( 1 ); + if( gz ) + { + int iErrNum = 0; + + hb_retc( gzerror( gz, &iErrNum ) ); + hb_storni( iErrNum, 2 ); + } +} + +/* + * HB_GZCLEARERR( ) => NIL + */ +HB_FUNC( HB_GZCLEARERR ) +{ + gzFile gz = hb_gzParam( 1 ); + if( gz ) + gzclearerr( gz ); +} diff --git a/harbour/utils/hbmk2/hbmk2.prg b/harbour/utils/hbmk2/hbmk2.prg index a6cfc80ce9..3bffeec8cc 100644 --- a/harbour/utils/hbmk2/hbmk2.prg +++ b/harbour/utils/hbmk2/hbmk2.prg @@ -175,28 +175,29 @@ REQUEST hbmk_KEYW #define _HBMK_aOPTD 29 #define _HBMK_lSHARED 30 #define _HBMK_lSTATICFULL 31 -#define _HBMK_lNULRDD 32 -#define _HBMK_lMAP 33 -#define _HBMK_lSTRIP 34 -#define _HBMK_lOPTIM 35 -#define _HBMK_nCOMPR 36 -#define _HBMK_lRUN 37 -#define _HBMK_lINC 38 +#define _HBMK_lSHAREABLE 32 +#define _HBMK_lNULRDD 33 +#define _HBMK_lMAP 34 +#define _HBMK_lSTRIP 35 +#define _HBMK_lOPTIM 36 +#define _HBMK_nCOMPR 37 +#define _HBMK_lRUN 38 +#define _HBMK_lINC 39 -#define _HBMK_aPO 39 -#define _HBMK_cHBL 40 -#define _HBMK_aLNG 41 -#define _HBMK_cPO 42 +#define _HBMK_aPO 40 +#define _HBMK_cHBL 41 +#define _HBMK_aLNG 42 +#define _HBMK_cPO 43 -#define _HBMK_lDEBUGTIME 43 -#define _HBMK_lDEBUGINC 44 -#define _HBMK_lDEBUGSTUB 45 -#define _HBMK_lDEBUGI18N 46 +#define _HBMK_lDEBUGTIME 44 +#define _HBMK_lDEBUGINC 45 +#define _HBMK_lDEBUGSTUB 46 +#define _HBMK_lDEBUGI18N 47 -#define _HBMK_cCCPATH 47 -#define _HBMK_cCCPREFIX 48 +#define _HBMK_cCCPATH 48 +#define _HBMK_cCCPREFIX 49 -#define _HBMK_MAX_ 48 +#define _HBMK_MAX_ 49 PROCEDURE Main( ... ) LOCAL aArgs := hb_AParams() @@ -436,6 +437,7 @@ FUNCTION hbmk( aArgs ) hbmk[ _HBMK_lXHB ] := .F. hbmk[ _HBMK_lSHARED ] := NIL hbmk[ _HBMK_lSTATICFULL ] := NIL + hbmk[ _HBMK_lSHAREABLE ] := NIL hbmk[ _HBMK_lNULRDD ] := .F. hbmk[ _HBMK_lMAP ] := .F. hbmk[ _HBMK_lSTRIP ] := .F. @@ -1077,6 +1079,8 @@ FUNCTION hbmk( aArgs ) CASE cParamL == "-shared" ; hbmk[ _HBMK_lSHARED ] := .T. ; hbmk[ _HBMK_lSTATICFULL ] := .F. CASE cParamL == "-static" ; hbmk[ _HBMK_lSHARED ] := .F. ; hbmk[ _HBMK_lSTATICFULL ] := .F. CASE cParamL == "-fullstatic" ; hbmk[ _HBMK_lSHARED ] := .F. ; hbmk[ _HBMK_lSTATICFULL ] := .T. + CASE cParamL == "-shareable" ; hbmk[ _HBMK_lSHAREABLE ] := .T. + CASE cParamL == "-shareable-" ; hbmk[ _HBMK_lSHAREABLE ] := .F. CASE cParamL == "-bldf" ; s_lBLDFLGP := s_lBLDFLGC := s_lBLDFLGL := .T. CASE cParamL == "-bldf-" ; s_lBLDFLGP := s_lBLDFLGC := s_lBLDFLGL := .F. CASE Left( cParamL, 6 ) == "-bldf=" @@ -1539,7 +1543,9 @@ FUNCTION hbmk( aArgs ) /* Merge user libs from command line and envvar. Command line has priority. */ hbmk[ _HBMK_aLIBUSER ] := ArrayAJoin( { hbmk[ _HBMK_aLIBUSER ], hbmk[ _HBMK_aLIBUSERGT ], ListToArray( PathSepToTarget( hbmk, GetEnv( "HB_USER_LIBS" ) ) ) } ) - IF lSysLoc + DEFAULT hbmk[ _HBMK_lSHAREABLE ] TO lSysLoc + + IF hbmk[ _HBMK_lSHAREABLE ] cPrefix := "" ELSE cPrefix := PathNormalize( s_cHB_DYN_INSTALL ) @@ -1748,11 +1754,11 @@ FUNCTION hbmk( aArgs ) ENDCASE ENDIF - IF IsGTRequested( hbmk[ _HBMK_aLIBCOREGT ], hbmk[ _HBMK_lSHARED ], "gtcrs" ) + IF IsGTRequested( hbmk, "gtcrs" ) /* TOFIX: Sometimes 'ncur194' is needed. */ AAdd( s_aLIBSYS, IIF( hbmk[ _HBMK_cARCH ] == "sunos", "curses", "ncurses" ) ) ENDIF - IF IsGTRequested( hbmk[ _HBMK_aLIBCOREGT ], hbmk[ _HBMK_lSHARED ], "gtsln" ) + IF IsGTRequested( hbmk, "gtsln" ) AAdd( s_aLIBSYS, "slang" ) /* Add paths, where this isn't a system component */ DO CASE @@ -1763,7 +1769,7 @@ FUNCTION hbmk( aArgs ) AAdd( hbmk[ _HBMK_aLIBPATH ], "/usr/local/lib" ) ENDCASE ENDIF - IF IsGTRequested( hbmk[ _HBMK_aLIBCOREGT ], hbmk[ _HBMK_lSHARED ], "gtxwc" ) + IF IsGTRequested( hbmk, "gtxwc" ) IF hb_DirExists( "/usr/X11R6/lib64" ) AAdd( hbmk[ _HBMK_aLIBPATH ], "/usr/X11R6/lib64" ) ENDIF @@ -4532,11 +4538,11 @@ STATIC PROCEDURE HBP_ProcessOne( hbmk, cFileName ) RETURN -STATIC FUNCTION IsGTRequested( aLIBCOREGT, lSHARED, cWhichGT ) +STATIC FUNCTION IsGTRequested( hbmk, cWhichGT ) - IF ! lSHARED + IF ! hbmk[ _HBMK_lSHARED ] /* Check if it's a core GT. */ - RETURN AScan( aLIBCOREGT, {|tmp| Lower( tmp ) == cWhichGT } ) > 0 + RETURN AScan( hbmk[ _HBMK_aLIBCOREGT ], {|tmp| Lower( tmp ) == cWhichGT } ) > 0 ENDIF RETURN .F. @@ -5519,6 +5525,7 @@ STATIC PROCEDURE ShowHelp( lLong ) { "-gui|-std" , I_( "create GUI/console executable" ) },; { "-main=" , I_( "override the name of starting function/procedure" ) },; { "-fullstatic" , I_( "link with all static libs" ) },; + { "-shareable" , I_( "create shareable (without absolute dir reference to shared library) binaries in shared mode (default: on when Harbour is installed on system location, off otherwise) (*nix only)" ) },; { "-nulrdd[-]" , I_( "link with nulrdd" ) },; { "-[no]debug" , I_( "add/exclude C compiler debug info" ) },; { "-[no]optim" , I_( "toggle C compiler optimizations (default: on)" ) },;