2010-07-27 12:44 UTC+0200 Viktor Szakats (harbour.01 syenar.hu)

* utils/hbmk2/hbmk2.prg
    + Added new plugin APIs:
      - hbmk2_AddInput_OBJ()
      - hbmk2_PathFromWorkdirToCWD()
      - hbmk2_CWD()
    + Changed to not abort processing if there are no input files, but
      there are custom plugin input parameter.

  + bin/hbmk_l2d.hbs
    + Added rough plugin to convert static libs to dynamic libs
      on platforms supporting 'ar' tool (and of course the notion
      of such conversion). This is meant to replace functionality
      provided by bash script hb-mkdyn.sh.
      Pls find cmdline example in the script header.

  * config/postinst.hbs
    + Now installs hbmk_l2d.hbs

  - bin/hb-mkdyn.sh
    - Deleted hb-mkdyn speciality shell tool to convert static
      libs to dynamic ones.

  - bin/postinst.sh
    - Deleted, it only started hb-mkdyn.sh, which was just deleted.

  * Makefile
    - Do not run postinst.sh anymore.
This commit is contained in:
Viktor Szakats
2010-07-27 10:45:27 +00:00
parent 0958384bc0
commit 838ec31a96
7 changed files with 212 additions and 297 deletions

View File

@@ -16,6 +16,35 @@
The license applies to all entries newer than 2009-04-28.
*/
2010-07-27 12:44 UTC+0200 Viktor Szakats (harbour.01 syenar.hu)
* utils/hbmk2/hbmk2.prg
+ Added new plugin APIs:
- hbmk2_AddInput_OBJ()
- hbmk2_PathFromWorkdirToCWD()
- hbmk2_CWD()
+ Changed to not abort processing if there are no input files, but
there are custom plugin input parameter.
+ bin/hbmk_l2d.hbs
+ Added rough plugin to convert static libs to dynamic libs
on platforms supporting 'ar' tool (and of course the notion
of such conversion). This is meant to replace functionality
provided by bash script hb-mkdyn.sh.
Pls find cmdline example in the script header.
* config/postinst.hbs
+ Now installs hbmk_l2d.hbs
- bin/hb-mkdyn.sh
- Deleted hb-mkdyn speciality shell tool to convert static
libs to dynamic ones.
- bin/postinst.sh
- Deleted, it only started hb-mkdyn.sh, which was just deleted.
* Makefile
- Do not run postinst.sh anymore.
2010-07-27 11:26 UTC+0200 Viktor Szakats (harbour.01 syenar.hu)
- debian
+ package/debian

View File

@@ -48,14 +48,7 @@ include $(ROOT)config/dir.mk
ifneq ($(HB_NO_HBSCRIPT),yes)
ifeq ($(HB_SHELL),sh)
HB_POSTINST := $(TOP)$(ROOT)bin/postinst.sh
else
HB_POSTINST :=
endif
install::
$(if $(wildcard $(HB_HOST_BIN_DIR)/hbrun$(HB_HOST_BIN_EXT)),+$(HB_HOST_BIN_DIR)/hbrun$(HB_HOST_BIN_EXT) --hb:gtcgi $(TOP)$(ROOT)config/postinst.hbs,@$(ECHO) $(ECHOQUOTE)! Warning: hbrun not found, config/postinst.hbs skipped.$(ECHOQUOTE))
$(if $(wildcard $(HB_POSTINST)),+$(HB_POSTINST),)
endif

View File

@@ -1,158 +0,0 @@
#!/bin/sh
#
# $Id$
#
# ---------------------------------------------------------------
# Copyright 2003 Przemyslaw Czerpak <druzus@polbox.com>
# simple script to build shared libraries from static ones and
# object files
#
# See COPYING for licensing terms.
# ---------------------------------------------------------------
# HB_PLATFORM=""
# HB_CCPREFIX=""
# HB_CCPATH=""
if [ -n "${HB_PLATFORM}" ]
then
hb_plat="${HB_PLATFORM}"
else
hb_plat=`uname -s | tr -d "[-]" | tr '[A-Z]' '[a-z]' 2>/dev/null`
fi
linker_options=""
case "$hb_plat" in
*windows*|*mingw32*|msys*|cygwin*) hb_plat="win" ;;
*os/2*) hb_plat="os2" ;;
*dos) hb_plat="dos" ;;
*bsd) hb_plat="bsd" ;;
esac
case "$hb_plat" in
darwin) SLIB_EXT=".dylib" ;;
win) SLIB_EXT=".dll" ;;
wce) SLIB_EXT=".dll" ;;
os2) SLIB_EXT=".dll" ;;
hpux) SLIB_EXT=".sl" ;;
*) SLIB_EXT=".so" ;;
esac
NAME="${1%${SLIB_EXT}}"
LIB_NAME="${NAME##*/}"
DSTDIR="${NAME%${LIB_NAME}}"
[ -n "${DSTDIR}" ] || DSTDIR="./"
if [ $# -lt 2 ] || [ -z "${LIB_NAME}" ]
then
echo "usage: `basename $0` <target[${SLIB_EXT}]> [link options] src1.a .. srcN.a [obj1.o .. objN.o]"
exit 1
fi
shift
BASE=`echo ${LIB_NAME} | sed "s/\([^.-]*\)[.-][0-9.]*/\1/g"`
VERSION="${LIB_NAME#${BASE}}"
VERSION="${VERSION#[.-]}"
REVIS="${VERSION}"
MAJOR="${REVIS%%.*}"
REVIS="${REVIS#${MAJOR}}"
REVIS="${REVIS#.}"
MINOR="${REVIS%%.*}"
REVIS="${REVIS#${MINOR}}"
REVIS="${REVIS#.}"
REVIS="${REVIS%%.*}"
[ -n "${MAJOR}" ] || MAJOR=2
[ -n "${MINOR}" ] || MINOR=0
[ -n "${REVIS}" ] || REVIS=0
VERSION="${MAJOR}.${MINOR}.${REVIS}"
OTMPDIR=""
dir=`pwd`
cleanup()
{
[ -z "${OTMPDIR}" ] || rm -fR "${OTMPDIR}"
}
trap cleanup EXIT >/dev/null 2>&1
if [ "${SLIB_EXT}" != ".dylib" ]; then
OTMPDIR="/tmp/hb-mkdyn-$$"
rm -fR "${OTMPDIR}"
mkdir -p "${OTMPDIR}"
cd "${OTMPDIR}"
for f in $*
do
case "${f}" in
*.o)
if [ "${f#/}" == "${f}" ]; then
f="${dir}/${f}"
fi
if [ ! -r "${f}" ]; then
echo "cannot read file: ${f}"
exit 1
fi
cp "${f}" "${OTMPDIR}" || exit 1
;;
*.a)
if [ "${f#/}" == "${f}" ]; then
f="${dir}/${f}"
fi
if [ ! -r "${f}" ]; then
echo "cannot read file: ${f}"
exit 1
fi
d="${f%.a}"
d="${f##*/}"
mkdir $d
cd $d
${HB_CCPATH}${HB_CCPREFIX}ar -x "${f}" || exit 1
cd ..
;;
*)
linker_options="${linker_options} ${f}"
;;
esac
done
cd "${OTMPDIR}"
OBJLST=`find . -name \*.o`
fi
if [ "${SLIB_EXT}" = ".dylib" ]; then
FULLNAME="${BASE}.${VERSION}${SLIB_EXT}"
libtool -dynamic -install_name "${BASE}${SLIB_EXT}" \
-compatibility_version ${MAJOR}.${MINOR} -current_version ${VERSION} \
-flat_namespace -undefined warning -multiply_defined suppress -single_module ${HB_USER_DFLAGS} \
-o "${DSTDIR}/${FULLNAME}" "$@" && \
ln -sf "${FULLNAME}" "${DSTDIR}${BASE}.${MAJOR}${SLIB_EXT}" && \
ln -sf "${FULLNAME}" "${DSTDIR}${BASE}${SLIB_EXT}"
elif [ "${SLIB_EXT}" = ".dll" ]; then
FULLNAME="${LIB_NAME}${SLIB_EXT}"
if [ "$HB_COMPILER" = "mingwarm" ]; then
SYSLIBS="-lws2"
else
SYSLIBS="-luser32 -lws2_32 -ladvapi32 -lgdi32"
fi
# -Wl,--output-def,testdll.def,--out-implib,libtestdll.a
${HB_CCPATH}${HB_CCPREFIX}gcc -shared -o "${FULLNAME}" $OBJLST ${linker_options} ${HB_USER_DFLAGS} ${SYSLIBS} ${HB_DLLIBS} && \
cd "${dir}" && \
rm -f "${DSTDIR}${FULLNAME}" && \
mv -f "${OTMPDIR}/${FULLNAME}" "${DSTDIR}${FULLNAME}"
else
#FULLNAME="${BASE}-${VERSION}${SLIB_EXT}"
#FULLNAME="${BASE}{SLIB_EXT}.${VERSION}"
FULLNAME="${LIB_NAME}${SLIB_EXT}"
${HB_CCPATH}${HB_CCPREFIX}gcc -shared -o "${FULLNAME}" $OBJLST ${linker_options} ${HB_USER_DFLAGS} && \
cd "${dir}" && \
mv -f "${OTMPDIR}/${FULLNAME}" "${DSTDIR}${FULLNAME}"
fi
stat="$?"
[ $stat != 0 ] && cd "${dir}" && rm -f "${DSTDIR}${FULLNAME}"
cleanup
exit "${stat}"

165
harbour/bin/hbmk_l2d.hbs Normal file
View File

@@ -0,0 +1,165 @@
/*
* $Id$
*/
/*
* hbmk2 plugin script, static lib to dynamic lib conversion for
* environments supporting 'ar' tool.
* Usage:
* 'hbmk2 -hbdyn -pi=<libsrc.a> -plugin=hbmk_l2d.hbs -o<dynlibdst> -nohblib-'
*
* Copyright 2010 Viktor Szakats (harbour.01 syenar.hu)
* 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
#define I_( x ) hb_i18n_gettext( x )
#if ! defined( __HBSCRIPT__HBRUN )
FUNCTION hbmk2_plugin_lib2dyn( hbmk2 )
LOCAL cRetVal := ""
LOCAL cSrc
LOCAL cCommand
LOCAL nError
LOCAL cStdOut
LOCAL cLine
LOCAL cOldDir
SWITCH hbmk2[ "cSTATE" ]
CASE "init"
hbmk2[ "vars" ][ "aOBJ_Src" ] := {}
EXIT
CASE "pre_all"
/* Gather input parameters */
hbmk2[ "vars" ][ "aLIB_Src" ] := {}
FOR EACH cSrc IN hbmk2[ "params" ]
SWITCH Lower( hbmk2_FNameExtGet( cSrc ) )
CASE ".a"
AAdd( hbmk2[ "vars" ][ "aLIB_Src" ], cSrc )
EXIT
ENDSWITCH
NEXT
FOR EACH cSrc IN hbmk2[ "vars" ][ "aLIB_Src" ]
cCommand := "ar" +;
" -t" +;
" " + hbmk2_FNameEscape( hbmk2_PathSepToTarget( hbmk2, cSrc ), hbmk2[ "nCmd_Esc" ], hbmk2[ "nCmd_FNF" ] )
IF hbmk2[ "lTRACE" ]
IF ! hbmk2[ "lQUIET" ]
hbmk2_OutStd( hbmk2, I_( "'ar' command:" ) )
ENDIF
hbmk2_OutStdRaw( cCommand )
ENDIF
IF ! hbmk2[ "lDONTEXEC" ]
IF ( nError := hb_processRun( cCommand,, @cStdOut ) ) != 0
hbmk2_OutErr( hbmk2, hb_StrFormat( I_( "Error: Running 'ar' executable. %1$s" ), hb_ntos( nError ) ) )
IF ! hbmk2[ "lQUIET" ]
hbmk2_OutErrRaw( cCommand )
ENDIF
IF ! hbmk2[ "lIGNOREERROR" ]
cRetVal := "error"
EXIT
ENDIF
ELSE
FOR EACH cLine IN hb_ATokens( StrTran( cStdOut, Chr( 13 ) ), Chr( 10 ) )
IF ! Empty( cLine )
cLine := hbmk2_FNameDirExtSet( hbmk2_FNameNameGet( cLine ), hbmk2[ "cWorkDir" ] )
AAdd( hbmk2[ "vars" ][ "aOBJ_Src" ], cLine )
hbmk2_AddInput_OBJ( hbmk2, cLine )
ENDIF
NEXT
ENDIF
ENDIF
NEXT
EXIT
CASE "pre_all"
EXIT
CASE "pre_link"
IF ! hbmk2[ "lCLEAN" ] .AND. ;
! Empty( hbmk2[ "vars" ][ "aLIB_Src" ] )
FOR EACH cSrc IN hbmk2[ "vars" ][ "aLIB_Src" ]
cCommand := "ar" +;
" -x" +;
" " + hbmk2_FNameEscape( hbmk2_PathSepToTarget( hbmk2, hbmk2_PathNormalize( hbmk2_PathMakeAbsolute( cSrc, hbmk2_PathFromWorkdirToCWD( hbmk2 ) ) ) ), hbmk2[ "nCmd_Esc" ], hbmk2[ "nCmd_FNF" ] )
IF hbmk2[ "lTRACE" ]
IF ! hbmk2[ "lQUIET" ]
hbmk2_OutStd( hbmk2, I_( "'ar' command:" ) )
ENDIF
hbmk2_OutStdRaw( cCommand )
ENDIF
IF ! hbmk2[ "lDONTEXEC" ]
cOldDir := hbmk2_CWD()
DirChange( hbmk2[ "cWorkDir" ] )
IF ( nError := hb_processRun( cCommand ) ) != 0
DirChange( cOldDir )
hbmk2_OutErr( hbmk2, hb_StrFormat( I_( "Error: Running 'ar' executable. %1$s" ), hb_ntos( nError ) ) )
IF ! hbmk2[ "lQUIET" ]
hbmk2_OutErrRaw( cCommand )
ENDIF
IF ! hbmk2[ "lIGNOREERROR" ]
cRetVal := "error"
EXIT
ENDIF
ELSE
DirChange( cOldDir )
ENDIF
ENDIF
NEXT
ENDIF
EXIT
CASE "pre_c"
EXIT
CASE "post_all"
IF ! hbmk2[ "lINC" ] .OR. hbmk2[ "lCLEAN" ]
AEval( hbmk2[ "vars" ][ "aOBJ_Src" ], {| tmp | FErase( tmp ) } )
ENDIF
EXIT
ENDSWITCH
RETURN cRetVal

View File

@@ -1,129 +0,0 @@
#!/bin/sh
#
# $Id$
#
# ---------------------------------------------------------------
# Copyright 2003 Przemyslaw Czerpak <druzus@priv.onet.pl>
# simple script run after Harbour make install to finish install
# process
#
# See COPYING for licensing terms.
# ---------------------------------------------------------------
if [ -z "${__running_in_posix_sh__}" ]
then
__running_in_posix_sh__=1
export __running_in_posix_sh__
[ -x /usr/bin/posix/sh ] && \
exec /usr/bin/posix/sh "$0" ${1+"$@"}
[ -x /usr/xpg4/bin/sh ] && \
exec /usr/xpg4/bin/sh "$0" ${1+"$@"}
exec /bin/sh "$0" ${1+"$@"}
fi
unset __running_in_posix_sh__
__builtin_which()
{
what="$1"
ret=1
oIFS="$IFS"
IFS=:
for pathcomp in $PATH
do
if [ -x "${pathcomp}"/"${what}" ]
then
ret=0
echo "${pathcomp}"/"${what}"
break
fi
done
IFS="$oIFS"
return $ret
}
if [ -z "$HB_PLATFORM" ] || [ -z "$HB_COMPILER" ] || \
[ -z "$HB_BIN_INSTALL" ] || \
[ -z "$HB_INC_INSTALL" ] || \
[ -z "$HB_LIB_INSTALL" ]
then
echo "The following envvars must be set:"
echo " HB_PLATFORM"
echo " HB_COMPILER"
echo " HB_BIN_INSTALL"
echo " HB_INC_INSTALL"
echo " HB_LIB_INSTALL"
exit 1
fi
hb_root=`dirname "$0"`
if [ "${hb_root}" = "." ]
then
hb_root=".."
else
hb_root=`dirname "${hb_root}"`
fi
if [ ! -f ${hb_root}/bin/hb-func.sh ] && [ -f ./bin/hb-func.sh ]
then
hb_root="."
fi
. ${hb_root}/bin/hb-func.sh
__install="` __builtin_which install `"
# chmod 644 ${HB_INC_INSTALL}/*
if [ "$HB_COMPILER" = "gcc" ] || \
[ "$HB_COMPILER" = "mingw" ] || \
[ "$HB_COMPILER" = "mingw64" ] || \
[ "$HB_COMPILER" = "mingwarm" ] || \
[ "$HB_COMPILER" = "cygwin" ] || \
[ "$HB_COMPILER" = "djgpp" ] || \
[ "$HB_COMPILER" = "icc" ] || \
[ "$HB_COMPILER" = "sunpro" ] || \
[ "$HB_COMPILER" = "open64" ] || \
[ "$HB_COMPILER" = "clang" ]
then
if [ -n "${HB_TOOLS_PREF}" ]; then
hb_mkdyn="${HB_BIN_INSTALL}/${HB_TOOLS_PREF}-mkdyn"
rm -f "${hb_mkdyn}"
sed -e "s!^# HB_PLATFORM=\"\"\$!HB_PLATFORM=\"${HB_PLATFORM}\"!g" \
-e "s!^# HB_CCPREFIX=\"\"\$![ -n \"\${HB_CCPREFIX}\" ] || HB_CCPREFIX=\"${HB_CCPREFIX}\"!g" \
-e "s!^# HB_CCPATH=\"\"\$![ -n \"\${HB_CCPATH}\" ] || HB_CCPATH=\"${HB_CCPATH}\"!g" \
"${hb_root}/bin/hb-mkdyn.sh" > "${hb_mkdyn}" && \
chmod 755 "${hb_mkdyn}"
elif [ "$HB_COMPILER" = "icc" ]; then
hb_mkdyn="${HB_BIN_INSTALL}/hb-mkdyn"
rm -f "${hb_mkdyn}"
sed -e "s/gcc/icc/g" "${hb_root}/bin/hb-mkdyn.sh" > "${hb_mkdyn}" && \
chmod 755 "${hb_mkdyn}"
elif [ "$HB_COMPILER" = "sunpro" ]; then
hb_mkdyn="${HB_BIN_INSTALL}/hb-mkdyn"
rm -f "${hb_mkdyn}"
lnopt=""
[ "$HB_BUILD_OPTIM" = "no" ] || lnopt="-fast -xnolibmopt $lnopt"
sed -e "s/gcc -shared/suncc -G ${lnopt} ${HB_ISAOPT}/g" \
"${hb_root}/bin/hb-mkdyn.sh" > "${hb_mkdyn}" && \
chmod 755 "${hb_mkdyn}"
elif [ "$HB_COMPILER" = "open64" ]; then
hb_mkdyn="${HB_BIN_INSTALL}/hb-mkdyn"
rm -f "${hb_mkdyn}"
sed -e "s/gcc/opencc/g" "${hb_root}/bin/hb-mkdyn.sh" > "${hb_mkdyn}" && \
chmod 755 "${hb_mkdyn}"
elif [ "${HB_PLATFORM}" = "sunos" ] || \
[ "${HB_PLATFORM}" = "hpux" ] || \
[ -z "${__install}" ]; then
hb_mkdyn="${HB_BIN_INSTALL}/hb-mkdyn"
rm -f "${hb_mkdyn}"
cp "${hb_root}/bin/hb-mkdyn.sh" "${hb_mkdyn}" && \
chmod 755 "${hb_mkdyn}"
elif [ "${HB_PLATFORM}" != "dos" ]; then
hb_mkdyn="${HB_BIN_INSTALL}/hb-mkdyn"
# Without -c some OSes _move_ the file instead of copying it!
${__install} -c -m 755 "${hb_root}/bin/hb-mkdyn.sh" "${hb_mkdyn}"
fi
fi

View File

@@ -73,7 +73,8 @@ PROCEDURE Main()
hb_FCopy( "TODO" , GetEnv( "HB_INSTALL_PREFIX" ) + hb_ps() + "TODO" )
/* public Harbour scripts */
FOR EACH tmp IN { "hbxpatch.hbs" }
FOR EACH tmp IN { "hbmk_l2d.hbs" ,;
"hbxpatch.hbs" }
hb_FCopy( "bin" + hb_ps() + tmp, GetEnv( "HB_BIN_INSTALL" ) + hb_ps() + tmp )
NEXT
ENDIF
@@ -174,7 +175,6 @@ PROCEDURE Main()
IF ! Empty( cBin_Tar )
cTar_Name := GetEnv( "HB_PKGNAME" )
IF ! Empty( tmp := unix_name() )
cTar_Name += tmp

View File

@@ -2641,7 +2641,7 @@ FUNCTION hbmk2( aArgs, nArgTarget, /* @ */ lPause, nLevel )
ENDIF
/* Start doing the make process. */
IF ! hbmk[ _HBMK_lStopAfterInit ] .AND. ! hbmk[ _HBMK_lCreateImpLib ] .AND. ( Len( hbmk[ _HBMK_aPRG ] ) + Len( hbmk[ _HBMK_aC ] ) + Len( hbmk[ _HBMK_aCPP ] ) + Len( hbmk[ _HBMK_aOBJUSER ] ) + Len( l_aOBJA ) ) == 0
IF ! hbmk[ _HBMK_lStopAfterInit ] .AND. ! hbmk[ _HBMK_lCreateImpLib ] .AND. ( Len( hbmk[ _HBMK_aPLUGINPars ] ) + Len( hbmk[ _HBMK_aPRG ] ) + Len( hbmk[ _HBMK_aC ] ) + Len( hbmk[ _HBMK_aCPP ] ) + Len( hbmk[ _HBMK_aOBJUSER ] ) + Len( l_aOBJA ) ) == 0
hbmk_OutErr( hbmk, I_( "Error: No source files were specified." ) )
IF hbmk[ _HBMK_lBEEP ]
DoBeep( .F. )
@@ -7180,6 +7180,7 @@ STATIC PROCEDURE PlugIn_Load( hbmk, cFileName )
/* Public functions accessible for plugins */
FUNCTION hbmk2_CWD() ; RETURN hb_pwd()
FUNCTION hbmk2_FindInPath( ... ) ; RETURN FindInPath( ... )
FUNCTION hbmk2_PathNormalize( ... ) ; RETURN PathNormalize( ... )
FUNCTION hbmk2_PathMakeAbsolute( ... ) ; RETURN PathMakeAbsolute( ... )
@@ -7230,6 +7231,13 @@ STATIC FUNCTION ctx_to_hbmk( ctx )
ENDIF
RETURN NIL
FUNCTION hbmk2_PathFromWorkdirToCWD( ctx )
LOCAL hbmk := ctx_to_hbmk( ctx )
IF hbmk != NIL
RETURN DirAddPathSep( PathMakeRelative( PathNormalize( PathMakeAbsolute( hbmk[ _HBMK_cWorkDir ], hb_pwd() ) ), hb_pwd(), .T. ) )
ENDIF
RETURN ""
FUNCTION hbmk2_Macro( ctx, cString )
LOCAL hbmk := ctx_to_hbmk( ctx )
IF hbmk != NIL
@@ -7289,6 +7297,13 @@ FUNCTION hbmk2_AddInput_RC( ctx, cFileName )
ENDIF
RETURN NIL
FUNCTION hbmk2_AddInput_OBJ( ctx, cFileName )
LOCAL hbmk := ctx_to_hbmk( ctx )
IF hbmk != NIL .AND. ISCHARACTER( cFileName )
AAdd( hbmk[ _HBMK_aOBJUSER ], PathSepToSelf( cFileName ) )
ENDIF
RETURN NIL
FUNCTION hbmk2_AddInput_INSTFILE( ctx, cFileName, cGroup )
LOCAL hbmk := ctx_to_hbmk( ctx )
IF hbmk != NIL .AND. ISCHARACTER( cFileName )