diff --git a/configure.ac b/configure.ac index 4cafdf3..a52e768 100644 --- a/configure.ac +++ b/configure.ac @@ -31,7 +31,7 @@ AC_PREREQ(2.61) dnl Initialise automake with the package name, version and dnl bug-reporting address. -AC_INIT([libhllapi], [5.2], [perry.werneck@gmail.com]) +AC_INIT([libhllapi], [5.3], [perry.werneck@gmail.com]) dnl Place auxilliary scripts here. AC_CONFIG_AUX_DIR([scripts]) @@ -99,7 +99,7 @@ case "$host" in app_cv_osname="windows" CFLAGS="$CFLAGS -D_WIN32_WINNT=0x0600" - LDFLAGS="$LDFLAGS -shared -Wl,--output-def,\$(@D)/\$(LIBNAME).def,--out-implib,\$(@D)/\$(LIBNAME).dll.a" + LDFLAGS="$LDFLAGS -shared -static-libgcc -static-libstdc++ -Wl,-Bstatic,--whole-archive -lwinpthread -Wl,--no-whole-archive,-Bdynamic,--output-def,\$(@D)/\$(LIBNAME).def,--out-implib,\$(@D)/\$(LIBNAME).dll.a" INSTALL_PACKAGES="windows-lib $INSTALL_PACKAGES" LIBS="$LIBS -lws2_32 -lwtsapi32 -lcomdlg32" @@ -219,19 +219,15 @@ AS_VAR_POPDEF([CACHEVAR])dnl AX_CHECK_COMPILE_FLAG([-std=gnu++11], [CFLAGS="$CFLAGS -std=gnu++11"]) dnl --------------------------------------------------------------------------- -dnl Check for libintl +dnl Check for tools dnl --------------------------------------------------------------------------- -INTL_LIBS="" - AC_PATH_TOOL([XGETTEXT], [xgettext], [no]) AC_PATH_TOOL([MSGCAT], [msgcat], [no]) AC_PATH_TOOL([MSGINIT], [msginit], [no]) AC_PATH_TOOL([MSGMERGE], [msgmerge], [no]) AC_PATH_TOOL([MSGFMT], [msgfmt], [no]) -AC_SUBST(INTL_LIBS) - dnl --------------------------------------------------------------------------- dnl Check for IPC3270 dnl --------------------------------------------------------------------------- @@ -258,7 +254,7 @@ if test "$app_cv_static_ipc3270" == "auto"; then fi if test "$app_cv_static_ipc3270" == "yes"; then - PKG_CHECK_MODULES( [IPC3270], [ipc3270-static], AC_DEFINE(USING_STATIC_IPC3270), AC_MSG_ERROR([IPC3270 not present.])) + PKG_CHECK_MODULES( [IPC3270], [ipc3270-static], AC_DEFINE(USING_STATIC_IPC3270), AC_MSG_ERROR([IPC3270 static not present.])) else PKG_CHECK_MODULES( [IPC3270], [ipc3270], AC_DEFINE(USING_DYNAMIC_IPC3270), AC_MSG_ERROR([IPC3270 not present.])) fi @@ -270,6 +266,23 @@ AC_ARG_WITH([product-name], [AS_HELP_STRING([--with-product-name], [Set product AC_DEFINE_UNQUOTED(PRODUCT_NAME, $app_cv_product) AC_SUBST(PRODUCT_NAME,$app_cv_product) +dnl --------------------------------------------------------------------------- +dnl Check for LIBINTL +dnl --------------------------------------------------------------------------- + +dnl AC_CHECK_HEADER(libintl.h, [ +dnl +dnl AC_DEFINE(HAVE_LIBINTL, 1) +dnl +dnl case "$host" in +dnl *-mingw32|*-pc-msys) +dnl LIBS="$LIBS -lintl" +dnl ;; +dnl +dnl *) +dnl esac +dnl +dnl ]) dnl --------------------------------------------------------------------------- dnl Check for pic @@ -283,7 +296,7 @@ AC_ARG_ENABLE([pic], case "$host_cpu" in x86_64) - app_cv_pic="yes" + app_cv_pic="yes"mingw32-libipc3270-5_2 ;; aarch64) @@ -306,6 +319,7 @@ dnl Configure which files to generate. dnl --------------------------------------------------------------------------- AC_CONFIG_FILES(Makefile) +AC_CONFIG_FILES(locale/Makefile) dnl --------------------------------------------------------------------------- dnl Output the generated config.status script. diff --git a/locale/Makefile.in b/locale/Makefile.in new file mode 100644 index 0000000..6cf1c0c --- /dev/null +++ b/locale/Makefile.in @@ -0,0 +1,84 @@ +# +# Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270 +# (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a +# aplicativos mainframe. Registro no INPI sob o nome G3270. +# +# Copyright (C) <2008> +# +# Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob +# os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela +# Free Software Foundation. +# +# Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER +# GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO +# A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para +# obter mais detalhes. +# +# Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este +# programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin +# St, Fifth Floor, Boston, MA 02110-1301 USA +# +# Contatos: +# +# perry.werneck@gmail.com (Alexandre Perry de Souza Werneck) +# erico.mendonca@gmail.com (Erico Mascarenhas de Mendonça) +# + + +#---[ Configuration values ]------------------------------------------------------------- + +prefix=@prefix@ +exec_prefix=@exec_prefix@ +datarootdir=@datarootdir@ +localedir=${datarootdir}/locale + +PACKAGE_NAME=@PACKAGE_NAME@ +GETTEXT_PACKAGE=@GETTEXT_PACKAGE@ + +PACKAGE_VERSION=@PACKAGE_VERSION@ +PACKAGE_TARNAME=@PACKAGE_TARNAME@ +PRODUCT_NAME=@PRODUCT_NAME@ + +BASEDIR=@BASEDIR@ +BINDIR=$(BASEDIR)/.bin/locale + +MKDIR=@MKDIR_P@ +MSGCAT=@MSGCAT@ +MSGFMT=@MSGFMT@ +MSGMERGE=@MSGMERGE@ +INSTALL=@INSTALL@ +INSTALL_DATA=@INSTALL_DATA@ + +#---[ Rules ]---------------------------------------------------------------------------- + +%.po: \ + $(GETTEXT_PACKAGE).pot + + @echo $(basename $@) ... + @$(MSGMERGE) --update --sort-output $@ $(GETTEXT_PACKAGE).pot + @touch $@ + +$(BINDIR)/%/LC_MESSAGES/$(GETTEXT_PACKAGE).mo: \ + %.po + + @echo $< ... + @$(MKDIR) `dirname $@` + @$(MSGFMT) -c -v -o $@ $^ + +$(DESTDIR)/$(localedir)/%/LC_MESSAGES/$(GETTEXT_PACKAGE).mo: \ + $(BINDIR)/%/LC_MESSAGES/$(GETTEXT_PACKAGE).mo + + @echo $< ... + @$(MKDIR) `dirname $@` + @$(INSTALL_DATA) $^ $@ + +#---[ Targets ]-------------------------------------------------------------------------- + +all: \ + $(foreach SRC, $(basename $(wildcard *.po)), $(BINDIR)/$(SRC)/LC_MESSAGES/$(GETTEXT_PACKAGE).mo) + +install: \ + $(foreach SRC, $(basename $(wildcard *.po)), $(DESTDIR)/$(localedir)/$(SRC)/LC_MESSAGES/$(GETTEXT_PACKAGE).mo) + + + diff --git a/src/core/controller.cc b/src/core/controller.cc index ea81a58..73ec4b0 100644 --- a/src/core/controller.cc +++ b/src/core/controller.cc @@ -41,6 +41,22 @@ { trace("%s(%s)",__FUNCTION__,id); +#ifdef HAVE_LIBINTL + { + static bool initialized = false; + + if(!initialized) { + initialized = true; + + std::string localedir = TN3270::getInstallLocation(); + localedir += "\\locale"; + + bindtextdomain(PACKAGE_NAME, localedir.c_str()); + } + + } +#endif // HAVE_LIBINTL + try { if(hllapi_host) diff --git a/src/core/windows/init.cc b/src/core/windows/init.cc index ac5df88..ef04b10 100644 --- a/src/core/windows/init.cc +++ b/src/core/windows/init.cc @@ -47,6 +47,10 @@ #include #include +#ifdef HAVE_LIBINTL + #include +#endif // HAVE_LIBINTL + #ifdef USING_STATIC_IPC3270 extern "C" { @@ -54,6 +58,9 @@ extern __declspec (dllexport) PfnDliHook __pfnDliNotifyHook2; extern __declspec (dllexport) PfnDliHook __pfnDliFailureHook2; + extern __declspec (dllexport) HRESULT DllRegisterServer(); + extern __declspec (dllexport) HRESULT DllInstall(BOOL, PCWSTR); + FARPROC WINAPI hllapi_delay_load_hook(unsigned reason, DelayLoadInfo * info); } @@ -70,7 +77,16 @@ static HANDLE hModule = 0; static HANDLE hEventLog = 0; + HRESULT DllRegisterServer() { + return S_OK; + } + + HRESULT DllInstall(BOOL bInstall, PCWSTR pszCmdLine) { + return S_OK; + } + BOOL WINAPI DllMain(HANDLE hInstance, DWORD dwcallpurpose, LPVOID GNUC_UNUSED(lpvResvd)) { + switch(dwcallpurpose) { case DLL_PROCESS_ATTACH: hModule = hInstance; diff --git a/src/include/config.h.in b/src/include/config.h.in index e152a32..cb0ac12 100644 --- a/src/include/config.h.in +++ b/src/include/config.h.in @@ -48,6 +48,8 @@ #undef PACKAGE_RELEASE #undef PRODUCT_NAME + #undef HAVE_LIBINTL + #undef USING_STATIC_IPC3270 #undef USING_DYNAMIC_IPC3270 diff --git a/win/dump.sh b/win/dump.sh new file mode 100755 index 0000000..29e8a14 --- /dev/null +++ b/win/dump.sh @@ -0,0 +1,2 @@ +#!/bin/bash +LANG=C objdump -p .bin/Debug/hllapi.dll | grep "DLL Name:" diff --git a/win/pack.sh b/win/pack.sh index 9927427..d26567a 100755 --- a/win/pack.sh +++ b/win/pack.sh @@ -1,6 +1,7 @@ #!/bin/bash PROJECT_DIR=$(readlink -f $(dirname $(dirname $(readlink -f $0)))) +TARGET_ARCHS="x86_64 x86_32" PUBLISH=0 CLEAR_OLD=0 @@ -12,10 +13,16 @@ pack() { BUILDDIR=$(mktemp -d) + if [ "${1}" == "x86_32" ]; then + ARCH="i686" + else + ARCH=${1} + fi + ./configure \ --cache=.${1}.cache \ - --host=${1}-w64-mingw32 \ - --prefix=/usr/${1}-w64-mingw32/sys-root/mingw \ + --host=${ARCH}-w64-mingw32 \ + --prefix=/usr/${ARCH}-w64-mingw32/sys-root/mingw \ --bindir=${BUILDDIR} \ --libdir=${BUILDDIR} \ --localedir=${BUILDDIR} \ @@ -23,8 +30,8 @@ pack() { --sysconfdir=${BUILDDIR} \ --datadir=${BUILDDIR} \ --datarootdir=${BUILDDIR} \ - --with-application-datadir=${BUILDDIR} - + --with-application-datadir=${BUILDDIR} \ + --with-static-ipc3270 if [ "$?" != "0" ]; then exit -1 @@ -56,22 +63,22 @@ pack() { exit -1 fi - PRODUCT_NAME=$(${1}-w64-mingw32-pkg-config --variable=product_name lib3270) + PRODUCT_NAME=$(${ARCH}-w64-mingw32-pkg-config --variable=product_name lib3270) if [ ! -z ${PRODUCT_NAME} ]; then - if [ -d ~/public_html/win/${PRODUCT_NAME}/${2} ]; then + if [ -d ~/public_html/win/${PRODUCT_NAME}/${1} ]; then if [ "${CLEAR_OLD}" == "1" ]; then - rm -fr ~/public_html/win/${PRODUCT_NAME}/${2}/hllapi-*.exe + rm -fr ~/public_html/win/${PRODUCT_NAME}/${1}/hllapi-*.exe fi - cp -v *.exe ~/public_html/win/${PRODUCT_NAME}/${2} + cp -v *.exe ~/public_html/win/${PRODUCT_NAME}/${1} fi if [ "${PUBLISH}" == "1" ] && [ ! -z ${WIN_PACKAGE_SERVER} ]; then - echo scp *.exe ${WIN_PACKAGE_SERVER}/${PRODUCT_NAME}/${2} + echo scp *.exe ${WIN_PACKAGE_SERVER}/${PRODUCT_NAME}/${1} if [ "$?" != "0" ]; then exit -1 fi @@ -115,6 +122,19 @@ do CLEAR) CLEAR_OLD=1 ;; + + TARGET-ARCHS) + TARGET_ARCHS=${value} + ;; + + 32) + TARGET_ARCHS="x86_32" + ;; + + 64) + TARGET_ARCHS="x86_64" + ;; + HELP) echo "${0} nome_da_matriz" echo "" @@ -148,7 +168,10 @@ if [ "$?" != "0" ]; then exit -1 fi -pack i686 x86_32 -pack x86_64 x86_64 +for ARCH in ${TARGET_ARCHS} +do + pack ${ARCH} + +done -- libgit2 0.21.2