Bug #618646 - Should be able to run gnucash-bin.exe directly, rather than gnucash.cmd

Patch by Tao Wang.

git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@19204 57a11ea4-9604-0410-9ed3-97b8803252fd
This commit is contained in:
Geert Janssens
2010-05-25 20:20:52 +00:00
parent dd94faba61
commit 0f2d3ed572
8 changed files with 105 additions and 32 deletions

View File

@@ -223,8 +223,6 @@ function dist_gnucash() {
cp -a $_INSTALL_UDIR/etc/gconf/schemas/* $DIST_UDIR/etc/gconf/schemas
mkdir -p $DIST_UDIR/lib
cp -a $_INSTALL_UDIR/lib/lib*.la $DIST_UDIR/lib
mkdir -p $DIST_UDIR/lib/gnucash
cp -a $_INSTALL_UDIR/lib/gnucash/lib*.dll $DIST_UDIR/lib/gnucash
cp -a $_INSTALL_UDIR/libexec $DIST_UDIR
mkdir -p $DIST_UDIR/share
cp -a $_INSTALL_UDIR/share/{gnucash,locale} $DIST_UDIR/share

View File

@@ -41,17 +41,17 @@ Name: desktopicon; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm
Name: menuicon; Description: "{cm:CreateMenuLink}"; GroupDescription: "{cm:AdditionalIcons}"
[Icons]
Name: "{group}\GnuCash"; Filename: "{app}\bin\gnucash.cmd"; WorkingDir: "{app}\bin"; Comment: "{cm:IconComment_GnuCash}"; IconFilename: "{app}\share\gnucash\pixmaps\gnucash-icon.ico"; Tasks: menuicon; Flags: runminimized
Name: "{group}\GnuCash"; Filename: "{app}\bin\gnucash-bin.exe"; WorkingDir: "{app}\bin"; Comment: "{cm:IconComment_GnuCash}"; IconFilename: "{app}\share\gnucash\pixmaps\gnucash-icon.ico"; Tasks: menuicon; Flags: runminimized
Name: "{group}\{cm:IconName_README}"; Filename: "{app}\doc\gnucash\{cm:IconFilename_README}"; Comment: "{cm:IconComment_README}"; Tasks: menuicon
Name: "{group}\{cm:IconName_FAQ}"; Filename: "http://wiki.gnucash.org/wiki/FAQ"; Tasks: menuicon
Name: "{group}\{cm:IconName_Bugzilla}"; Filename: "http://bugzilla.gnome.org/enter_bug.cgi?product=GnuCash"; Tasks: menuicon
Name: "{group}\{cm:IconName_InstallFQ}"; Filename: "{app}\bin\install-fq-mods.cmd"; WorkingDir: "{app}\bin"; Comment: "{cm:IconComment_InstallFQ}"; Tasks: menuicon
Name: "{group}\{cm:IconName_Uninstall}"; Filename: "{uninstallexe}"; Comment: "{cm:IconComment_Uninstall}"; Tasks: menuicon
Name: "{commondesktop}\GnuCash"; Filename: "{app}\bin\gnucash.cmd"; WorkingDir: "{app}\bin"; Comment: "{cm:IconComment_GnuCash}"; IconFilename: "{app}\share\gnucash\pixmaps\gnucash-icon.ico"; Tasks: desktopicon; Flags: runminimized
Name: "{commondesktop}\GnuCash"; Filename: "{app}\bin\gnucash-bin.exe"; WorkingDir: "{app}\bin"; Comment: "{cm:IconComment_GnuCash}"; IconFilename: "{app}\share\gnucash\pixmaps\gnucash-icon.ico"; Tasks: desktopicon; Flags: runminimized
[Run]
Filename: "{app}\bin\gnucash.cmd"; Description: "{cm:RunPrg}"; WorkingDir: "{app}\bin"; OnlyBelowVersion: 0,6; Flags: postinstall skipifsilent runhidden
Filename: "{app}\bin\gnucash-bin.exe"; Description: "{cm:RunPrg}"; WorkingDir: "{app}\bin"; OnlyBelowVersion: 0,6; Flags: postinstall skipifsilent runhidden
Filename: "{app}\bin\guile.cmd"; Parameters: "-c ""(use-modules (ice-9 slib)) (require 'printf)"""; Flags: runhidden
;; The Windows firewall exceptions, see http://www.vincenzo.net/isxkb/index.php?title=Adding_a_rule_to_the_Windows_firewall
Filename: "{sys}\netsh.exe"; Parameters: "firewall add allowedprogram ""{app}\bin\gnucash-bin.exe"" ""GnuCash Free Finance Manager"" ENABLE ALL"; StatusMsg: "{cm:StatusMsgFirewall}"; Flags: runhidden; MinVersion: 0,5.01.2600sp2;
@@ -72,7 +72,7 @@ Source: "@prefix@\..\dist\bin\*"; DestDir: "{app}\bin"; Flags: recursesubdirs ig
; Note: The above AfterInstall function will create the
; gnucash.cmd file on-the-fly by the Pascal script below.
Source: "@prefix@\..\dist\etc\*"; DestDir: "{app}\etc"; Flags: recursesubdirs; Components: main
Source: "@prefix@\..\dist\etc\*"; DestDir: "{app}\etc"; Flags: recursesubdirs; Components: main; AfterInstall: MyAfterInstallEtc()
Source: "@prefix@\..\dist\lib\*"; DestDir: "{app}\lib"; Flags: recursesubdirs; Components: main
Source: "@prefix@\..\dist\libexec\*"; DestDir: "{app}\libexec"; Flags: recursesubdirs; Components: main
Source: "@prefix@\..\dist\share\*"; DestDir: "{app}\share"; Flags: recursesubdirs; Components: main
@@ -114,7 +114,7 @@ Root: HKCR; Subkey: ".gnucash"; ValueType: string; ValueName: ""; ValueData: "Gn
Root: HKCR; Subkey: ".gnucash"; ValueType: string; ValueName: "Content Type"; ValueData: "application/x-gnucash"; Flags: uninsdeletevalue
Root: HKCR; Subkey: "GnuCash.Financial.Data"; ValueType: string; ValueName: ""; ValueData: "GnuCash Financial Data"; Flags: uninsdeletevalue
Root: HKCR; Subkey: "GnuCash.Financial.Data\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\share\gnucash\pixmaps\gnucash-icon.ico,0"
Root: HKCR; Subkey: "GnuCash.Financial.Data\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\bin\gnucash.cmd"" ""%1"""
Root: HKCR; Subkey: "GnuCash.Financial.Data\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\bin\gnucash-bin.exe"" ""%1"""
Root: HKLM; Subkey: "Software\GnuCash"; ValueType: none; Flags: uninsdeletekeyifempty
Root: HKLM; Subkey: "Software\GnuCash\Paths"; ValueType: none; Flags: uninsdeletekeyifempty
@@ -154,9 +154,11 @@ Root: HKLM; Subkey: "Software\AqBanking\Paths"; ValueType: string; ValueName: "c
[UninstallDelete]
Type: files; Name: "{app}\bin\gnucash.cmd"
Type: files; Name: "{app}\bin\guile.cmd"
Type: files; Name: "{app}\etc\gnucash\environment"
Type: files; Name: "{app}\share\guile\1.6\slibcat"
Type: filesandordirs; Name: "{app}\share\guile"
Type: filesandordirs; Name: "{app}\etc\gconf"
Type: dirifempty; Name: "{app}\etc\gnucash"
Type: dirifempty; Name: "{app}\etc"
; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -224,6 +226,62 @@ begin
end;
function BackslashPath(const S: String): String;
begin
{ Convert c:\soft to c:/soft }
Result := S;
StringChange(Result, '\', '/');
end;
procedure MyAfterInstallEtc();
var
FileName, FileString, appdir, libdir, pkglibdir, pkgdatadir: String;
Res: Boolean;
begin
{ Get the installation-specific paths }
appdir := BackslashPath( ExpandConstant('{app}') );
libdir := BackslashPath( appdir + '/lib' );
pkglibdir := BackslashPath( appdir + '/bin' );
pkgdatadir := BackslashPath( appdir + '/share/gnucash' );
{ Create the etc/gnucash/environment file; #10 is the linefeed character and #13 CR }
{ If you make any changes here, you should probably also change the equivalent sections }
{ in packaging/win32/install.sh, src/bin/environment*.in and src/bin/gnucash-setup-env-osx.in }
FileName := appdir + '\etc\gnucash\environment' ;
FileString := '# environment'#13#10 ;
FileString := FileString + '#'#13#10 ;
FileString := FileString + '# This configuration file can be used to change/add'#13#10 ;
FileString := FileString + '# environment variables during GnuCash startup.'#13#10 ;
FileString := FileString + '#'#13#10 ;
FileString := FileString + '[Variables]'#13#10 ;
FileString := FileString + 'PATH=' + appdir + '/bin;' + libdir + ';' + pkglibdir + ';{PATH}'#13#10 ;
FileString := FileString + 'SCHEME_LIBRARY_PATH='#13#10 ;
FileString := FileString + 'GNC_MODULE_PATH=' + pkglibdir + ''#13#10 ;
FileString := FileString + 'GUILE_LOAD_PATH=' + pkgdatadir + '/guile-modules;' + pkgdatadir + '/scm;' + appdir + '/share/guile/1.6;{GUILE_LOAD_PATH}'#13#10 ;
FileString := FileString + 'EXTRA_LIBS={GNC_MODULE_PATH}'#13#10 ;
FileString := FileString + 'LD_LIBRARY_PATH={EXTRA_LIBS};{LD_LIBRARY_PATH}'#13#10 ;
FileString := FileString + 'DYLD_LIBRARY_PATH={EXTRA_LIBS};{DYLD_LIBRARY_PATH}'#13#10 ;
FileString := FileString + 'LTDL_LIBRARY_PATH=' + libdir + ''#13#10 ;
FileString := FileString + 'QOF_LIB_DIR=' + pkglibdir + ''#13#10 ;
FileString := FileString + 'GNC_DBD_DIR=' + libdir + '/dbd'#13#10 ;
FileString := FileString + 'GNC_STANDARD_REPORTS_DIR=' + pkgdatadir + '/guile-modules/gnucash/report/standard-reports'#13#10 ;
FileString := FileString + 'GUILE_WARN_DEPRECATED=no'#13#10 ;
{ Save the final file }
Res := ForceDirectories(appdir + '\etc\gnucash');
if Res = False then
MsgBox('Error on creating '+appdir+'\etc\gnucash for completing the installation', mbInformation, MB_OK);
Res := SaveStringToFile(FileName, FileString, False);
if Res = False then
MsgBox('Error on saving '+FileName+' for completing the installation', mbInformation, MB_OK);
end;
[Languages]
Name: "en"; MessagesFile: "compiler:Default.isl"
Name: "de"; MessagesFile: "compiler:Languages\German.isl"; InfoAfterFile: "@prefix@\share\@PACKAGE@\doc\README-de.win32-bin.txt"
@@ -445,27 +503,27 @@ pt_BR.IconComment_Uninstall=Desinstala o Gerenciador Financeiro GnuCash
;; ;;;;;;;;;;;;;;;;;
;; Simplified Chinese translation
zh_CN.FullInstall=<3D><>ȫ<EFBFBD><C8AB>װ
zh_CN.CustomInstall=<3D>Զ<EFBFBD><D4B6>尲װ
zh_CN.CreateDesktopIcon=<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC>
zh_CN.CreateMenuLink=<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD>˵<EFBFBD><CBB5><EFBFBD><EFBFBD><EFBFBD>
zh_CN.RunPrg=<3D><><EFBFBD>ڿ<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD> GnuCash
zh_CN.AdditionalIcons=<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Щͼ<D0A9><CDBC>
zh_CN.StatusMsgFirewall=<3D><><EFBFBD>ڰ<EFBFBD>װ Windows <20><><EFBFBD><EFBFBD>ǽ<EFBFBD><C7BD><EFBFBD><EFBFBD>...
zh_CN.FullInstall=<3D><>ȫ<EFBFBD><C8AB>װ
zh_CN.CustomInstall=<3D>Զ<EFBFBD><D4B6>尲װ
zh_CN.CreateDesktopIcon=<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC>
zh_CN.CreateMenuLink=<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD>˵<EFBFBD><CBB5><EFBFBD><EFBFBD><EFBFBD>
zh_CN.RunPrg=<3D><><EFBFBD>ڿ<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD> GnuCash
zh_CN.AdditionalIcons=<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Щͼ<D0A9><CDBC>
zh_CN.StatusMsgFirewall=<3D><><EFBFBD>ڰ<EFBFBD>װ Windows <20><><EFBFBD><EFBFBD>ǽ<EFBFBD><C7BD><EFBFBD><EFBFBD>...
zh_CN.MainFiles=GnuCash <20><><EFBFBD><EFBFBD>
zh_CN.TranslFiles=<3D><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
zh_CN.TemplFiles=<3D><><EFBFBD>ƿ<EFBFBD>Ŀģ<EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
zh_CN.MainFiles=GnuCash <20><><EFBFBD><EFBFBD>
zh_CN.TranslFiles=<3D><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
zh_CN.TemplFiles=<3D><>ƿ<EFBFBD>Ŀģ<C4BF><C4A3><EFBFBD>ļ<EFBFBD>
zh_CN.IconComment_GnuCash=GnuCash <20><><EFBFBD>Ѳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
zh_CN.IconName_README=<3D><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
zh_CN.IconComment_README=<3D><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
zh_CN.IconComment_GnuCash=GnuCash <20><>Ѳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
zh_CN.IconName_README=<3D><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
zh_CN.IconComment_README=<3D><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
zh_CN.IconFilename_README=README-zh_CN.win32-bin.txt
zh_CN.IconName_FAQ=<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD>)
zh_CN.IconName_Bugzilla=<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Bug (<28><><EFBFBD><EFBFBD>)
zh_CN.IconName_InstallFQ=<3D><>װ<EFBFBD><D7B0><EFBFBD>߼۸<DFBC><DBB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
zh_CN.IconComment_InstallFQ=<3D><>װ<EFBFBD><D7B0><EFBFBD>߼۸<DFBC><DBB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Perl Finance-Quoteģ<65><EFBFBD><E9A1A3>Ҫ ActivePerl 5.8 <20><> 5.10
zh_CN.IconName_Uninstall=ж<><D0B6> GnuCash
zh_CN.IconComment_Uninstall=ж<>ز<EFBFBD><D8B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> GnuCash
zh_CN.IconName_FAQ=<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD>)
zh_CN.IconName_Bugzilla=<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Bug (<28><><EFBFBD><EFBFBD>)
zh_CN.IconName_InstallFQ=<3D><>װ<EFBFBD><D7B0><EFBFBD>߼۸<DFBC><DBB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
zh_CN.IconComment_InstallFQ=<3D><>װ<EFBFBD><D7B0><EFBFBD>߼۸<DFBC><DBB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Perl Finance-Quoteģ<65><EFBFBD><E9A1A3>Ҫ ActivePerl 5.8 <20><> 5.10
zh_CN.IconName_Uninstall=ж<><D0B6> GnuCash
zh_CN.IconComment_Uninstall=ж<>ز<EFBFBD><D8B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> GnuCash
;; ;;;;;;;;;;;;;;;;;;;;

View File

@@ -1377,7 +1377,7 @@ function make_install() {
# correct the 'dlname' in the libtool archives. We do not use these
# files to dlopen the modules, so actually this is unneeded.
# Also, in all installed .la files, remove the dependency_libs line
mv bin/*.dll gnucash 2>/dev/null || true
mv bin/*.dll gnucash/*.dll $_INSTALL_UDIR/bin 2>/dev/null || true
for A in gnucash/*.la; do
sed '/dependency_libs/d;s#../bin/##' $A > tmp ; mv tmp $A
done

View File

@@ -16,7 +16,7 @@ GUILE_WARN_DEPRECATED=no
PATH=@-BIN_DIR-@;{PATH}
SCHEME_LIBRARY_PATH=
GNC_MODULE_PATH=@-GNC_PKGLIB_INSTALLDIR-@;{GNC_MODULE_PATH}
GNC_MODULE_PATH=@-BIN_DIR-@;{GNC_MODULE_PATH}
EXTRA_PATH={EXTRA_PATH};@-GNC_GUILE_MODULE_DIR-@;@-GNC_SCM_INSTALL_DIR-@
GUILE_LOAD_PATH={EXTRA_PATH};{GUILE_LOAD_PATH}

View File

@@ -177,6 +177,12 @@ environment_override()
gint i;
gboolean got_keyfile;
#ifdef G_OS_WIN32
config_path = gnc_path_get_pkgsysconfdir();
share_path = gnc_path_get_pkgdatadir();
help_path = g_path_get_dirname(share_path);
#endif /* G_OS_WIN32 */
if ((path = g_getenv("GNC_CONFIG_PATH")))
config_path = g_strdup(path);
if ((path = g_getenv("GNC_SHARE_PATH")))
@@ -726,7 +732,7 @@ main(int argc, char ** argv)
*/
environment_override();
#ifdef HAVE_GETTEXT
#ifdef HAVE_GETTEXT
{
gchar *localedir = gnc_path_get_localedir();
/* setlocale(LC_ALL, ""); is already called by gtk_set_locale()

View File

@@ -75,7 +75,12 @@ gchar *gnc_path_get_pkgsysconfdir()
gchar *gnc_path_get_pkglibdir()
{
gchar *libdir = gnc_path_get_libdir ();
#ifdef G_OS_WIN32
/* Workaround for Bug 618646, {pkglibdir} will be bin/ on Windows */
gchar *result = gnc_gbr_find_bin_dir(libdir);
#else
gchar *result = g_build_filename (libdir, "gnucash", (char*)NULL);
#endif
g_free (libdir);
//printf("Returning pkglibdir %s\n", result);
return result;

View File

@@ -209,9 +209,14 @@ gnc_module_system_refresh(void)
/* Gotcha: On MacOS, G_MODULE_SUFFIX is defined as "so", but if we do
* not build clean libtool modules with "-module", we get dynamic
* libraries ending on .dylib */
if (g_str_has_suffix(dent, "." G_MODULE_SUFFIX) ||
g_str_has_suffix(dent, ".dylib"))
* libraries ending on .dylib
* On Windows, all modules will move to bin/, so they will be mixed with
* other libraries, such as gtk+. Adding a prefix "libgncmod" filter will prevent
* module loader load other libraries. And the filter should works on other platform.
*/
if ((g_str_has_suffix(dent, "." G_MODULE_SUFFIX)
|| g_str_has_suffix(dent, ".dylib"))
&& g_str_has_prefix(dent, GNC_MODULE_PREFIX))
{
/* get the full path name, then dlopen the library and see
* if it has the appropriate symbols to be a gnc_module */

View File

@@ -11,6 +11,7 @@
typedef void * GNCModule;
#define DEFAULT_MODULE_PATH "/usr/local/gnucash/lib/modules"
#define GNC_MODULE_PREFIX "libgncmod"
/* the basics: initialize the module system, refresh its module
* database, and get a list of all known modules */