From de982b4d3e9c7e6b6f100e383d647f0edc9321a3 Mon Sep 17 00:00:00 2001 From: Vincent Sanders Date: Sun, 12 Aug 2012 21:50:36 +0100 Subject: fix windows build format specifiers add install target for windows - creates installer rather than actually installing --- .gitignore | 1 + content/fetchers/data.c | 2 +- content/fetchers/file.c | 4 +- image/image_cache.c | 12 ++-- utils/config.h | 10 ++++ windows/Makefile.target | 12 ++++ windows/NetSurfInstaller.nsi | 94 ------------------------------ windows/main.c | 2 +- windows/res/installer.nsi | 133 +++++++++++++++++++++++++++++++++++++++++++ windows/res/internal.css | 1 + windows/res/netsurf.png | 1 + windows/res/welcome.html | 1 + 12 files changed, 169 insertions(+), 104 deletions(-) delete mode 100644 windows/NetSurfInstaller.nsi create mode 100644 windows/res/installer.nsi create mode 120000 windows/res/internal.css create mode 120000 windows/res/netsurf.png create mode 120000 windows/res/welcome.html diff --git a/.gitignore b/.gitignore index 053a22050..20a059f86 100644 --- a/.gitignore +++ b/.gitignore @@ -19,6 +19,7 @@ nsmonkey nsdebug Makefile.config NetSurf.exe +netsurf-installer.exe NetSurf.app NetSurf.dbg NetSurf.dmg diff --git a/content/fetchers/data.c b/content/fetchers/data.c index 383e3c0c5..3f8989e8c 100644 --- a/content/fetchers/data.c +++ b/content/fetchers/data.c @@ -280,7 +280,7 @@ static void fetch_data_poll(lwc_string *scheme) if (c->aborted == false) { snprintf(header, sizeof header, - "Content-Length: %zd", + "Content-Length: %"SSIZET_FMT, c->datalen); msg.type = FETCH_HEADER; msg.data.header_or_data.buf = diff --git a/content/fetchers/file.c b/content/fetchers/file.c index e3bb63ea8..4deb93248 100644 --- a/content/fetchers/file.c +++ b/content/fetchers/file.c @@ -266,7 +266,7 @@ static void fetch_file_process_plain(struct fetch_file_context *ctx, return; } - fd = open(ctx->path, O_RDONLY); + fd = open(ctx->path, O_RDONLY | O_BINARY); if (fd < 0) { /* process errors as appropriate */ fetch_file_process_error(ctx, @@ -304,7 +304,7 @@ static void fetch_file_process_plain(struct fetch_file_context *ctx, goto fetch_file_process_aborted; /* content length */ - if (fetch_file_send_header(ctx, "Content-Length: %zd", fdstat->st_size)) + if (fetch_file_send_header(ctx, "Content-Length: %"SSIZET_FMT, fdstat->st_size)) goto fetch_file_process_aborted; /* create etag */ diff --git a/image/image_cache.c b/image/image_cache.c index 5e62fe0aa..50961b167 100644 --- a/image/image_cache.c +++ b/image/image_cache.c @@ -575,15 +575,15 @@ case chr : \ slen++; break; - FMTCHR('a', "zd", params.limit); - FMTCHR('b', "zd", params.hysteresis); - FMTCHR('c', "zd", total_bitmap_size); + FMTCHR('a', SSIZET_FMT, params.limit); + FMTCHR('b', SSIZET_FMT, params.hysteresis); + FMTCHR('c', SSIZET_FMT, total_bitmap_size); FMTCHR('d', "d", bitmap_count); FMTCHR('e', "d", current_age / 1000); - FMTCHR('f', "zd", max_bitmap_size); + FMTCHR('f', SSIZET_FMT, max_bitmap_size); FMTCHR('g', "d", max_bitmap_size_count); FMTCHR('h', "d", max_bitmap_count); - FMTCHR('i', "zd", max_bitmap_count_size); + FMTCHR('i', SSIZET_FMT, max_bitmap_count_size); case 'j': @@ -710,7 +710,7 @@ int image_cache_snentryf(char *string, size_t size, unsigned int entryn, if (centry->bitmap != NULL) { slen += snprintf(string + slen, size - slen, - "%zd", + "%"SSIZET_FMT, centry->bitmap_size); } else { slen += snprintf(string + slen, diff --git a/utils/config.h b/utils/config.h index cd64683d5..b8c2950dc 100644 --- a/utils/config.h +++ b/utils/config.h @@ -116,13 +116,23 @@ char *realpath(const char *path, char *resolved_path); #define WITH_MMAP #endif +/* gtk */ #if defined(gtk) #define WITH_THEME_INSTALL #endif +/* amiga */ #if defined(__amigaos4__) || defined(__AMIGA__) || \ defined(nsatari) #define NO_IPV6 #endif +/* windows */ +#if (defined(_WIN32)) +#define SSIZET_FMT "Iu" +#else +#define SSIZET_FMT "zd" +#define O_BINARY 0 +#endif + #endif diff --git a/windows/Makefile.target b/windows/Makefile.target index e9922660f..f19d3ac68 100644 --- a/windows/Makefile.target +++ b/windows/Makefile.target @@ -71,3 +71,15 @@ S_WINDOWS := $(addprefix windows/,$(S_WINDOWS)) # are not yet available SOURCES = $(S_COMMON) $(S_IMAGE) $(S_BROWSER) $(S_WINDOWS) $(S_RESOURCES) EXETARGET := NetSurf.exe + +# ---------------------------------------------------------------------------- +# Install target +# ---------------------------------------------------------------------------- + +install-windows: netsurf-installer.exe + +WIN_RES_OBJ := installer.nsi NetSurf.ico netsurf.png welcome.html default.css messages +WIN_RES_INS_OBJ := $(addprefix windows/res/,$(WIN_RES_OBJ)) + +netsurf-installer.exe: $(EXETARGET) $(WIN_RES_INS_OBJ) + makensis -V4 -NOCD windows/res/installer.nsi diff --git a/windows/NetSurfInstaller.nsi b/windows/NetSurfInstaller.nsi deleted file mode 100644 index c52b5c4e9..000000000 --- a/windows/NetSurfInstaller.nsi +++ /dev/null @@ -1,94 +0,0 @@ -; install script for nullsoft msi installer creation -; debian package name nsis -; paths may need adapting according to local settings -; for release, would really need to compile source tree too -Page license -Page directory -Page instfiles -; install directory $INSTDIR = $PROGRAMFILES\NetSurf -; install resources $PROGRAMFILES\NetSurf\res -; install dlls $SYSDIR=%SystemRoot%\System[32] -SetCompressor lzma -InstallDir "$PROGRAMFILES\NetSurf" -LicenseData ../COPYING ; \n -> \r\n -Name NetSurf -OutFile NetSurfInstall.exe -Icon ../windows/res/NetSurf32.ico -XPStyle on -Section - SetShellVarContext all - SetOutPath $SYSDIR - File /usr/local/mingw/bin/libeay32.dll - File /usr/local/mingw/bin/libcurl-4.dll - File /usr/local/mingw/bin/libiconv-2.dll - File /usr/local/mingw/bin/ssleay32.dll - File /usr/local/mingw/bin/libgnurx-0.dll - File /usr/local/mingw/bin/libxml2-2.dll - File /usr/local/mingw/bin/libpng12.dll - File /usr/local/mingw/bin/libjpeg.dll - IfFileExists "$INSTDIR\*.*" +2 - CreateDirectory "$INSTDIR" - SetOutPath $INSTDIR - File ../NetSurf.exe - IfFileExists "$INSTDIR\res\*.*" +2 - CreateDirectory "$INSTDIR\res" - SetOutPath $INSTDIR\res - File ../windows/res/default.css - File ../windows/res/quirks.css - File ../windows/res/messages - File ../windows/res/preferences - File ../windows/res/*.bmp - File ../windows/res/*.ico - File ../windows/res/throbber.avi - IfFileExists $SMPROGRAMS\NetSurf\NetSurf.lnk +2 - CreateDirectory "$SMPROGRAMS\NetSurf" - CreateShortCut "$SMPROGRAMS\NetSurf\NetSurf.lnk" "$INSTDIR\NetSurf.exe" "" "$INSTDIR\res\NetSurf32.ico" - IfFileExists "$INSTDIR\src\*.*" +2 - CreateDirectory "$INSTDIR\src" - SetOutPath "$INSTDIR\src" - File ../Makefile - File ../Makefile.config - File ../Makefile.config.example - File ../Makefile.defaults - File ../Makefile.sources - File ../Makefile.resources - IfFileExists "$INSTDIR\src\content\*.*" +2 - CreateDirectory "$INSTDIR\src\content" - SetOutPath "$INSTDIR\src\content" - File /r /x .svn ../content/*.c - File /r /x .svn ../content/*.h - IfFileExists "$INSTDIR\src\css\*.*" +2 - CreateDirectory "$INSTDIR\src\css" - SetOutPath "$INSTDIR\src\css" - File /r /x .svn ../css/*.c - File /r /x .svn ../css/*.h - IfFileExists "$INSTDIR\src\desktop\*.*" +2 - CreateDirectory "$INSTDIR\src\desktop" - SetOutPath "$INSTDIR\src\desktop" - File /r /x .svn ../desktop/*.c - File /r /x .svn ../desktop/*.h - IfFileExists "$INSTDIR\src\image\*.*" +2 - CreateDirectory "$INSTDIR\src\image" - SetOutPath "$INSTDIR\src\image" - File /r /x .svn ../image/*.c - File /r /x .svn ../image/*.h - IfFileExists "$INSTDIR\src\render\*.*" +2 - CreateDirectory "$INSTDIR\src\render" - SetOutPath "$INSTDIR\src\render" - File /r /x .svn ../render/*.c - File /r /x .svn ../render/*.h - IfFileExists "$INSTDIR\src\utils\*.*" +2 - CreateDirectory "$INSTDIR\src\utils" - SetOutPath "$INSTDIR\src\utils" - File /r /x .svn ../utils/*.c - File /r /x .svn ../utils/*.h - IfFileExists "$INSTDIR\src\windows\*.*" +2 - CreateDirectory "$INSTDIR\src\windows" - SetOutPath "$INSTDIR\src\windows" - File /r /x .svn ../windows/*.c - File /r /x .svn ../windows/*.h - IfFileExists "$INSTDIR\src\Docs\*.*" +2 - CreateDirectory "$INSTDIR\src\Docs" - SetOutPath "$INSTDIR\src\Docs" - File /r /x .svn ../Docs/*.* -SectionEnd diff --git a/windows/main.c b/windows/main.c index 6d2179a9e..6fbf40174 100644 --- a/windows/main.c +++ b/windows/main.c @@ -119,7 +119,7 @@ WinMain(HINSTANCE hInstance, HINSTANCE hLastInstance, LPSTR lpcli, int ncmd) argctemp++; } - respaths = nsws_init_resource("${APPDATA}\\NetSurf:${HOME}\\.netsurf:${NETSURFRES}:${PROGRAMFILES}\\NetSurf\\res:"NETSURF_WINDOWS_RESPATH); + respaths = nsws_init_resource("${APPDATA}\\NetSurf:${HOME}\\.netsurf:${NETSURFRES}:${PROGRAMFILES}\\NetSurf\\NetSurf\\:"NETSURF_WINDOWS_RESPATH); messages = filepath_find(respaths, "messages"); diff --git a/windows/res/installer.nsi b/windows/res/installer.nsi new file mode 100644 index 000000000..9f146873a --- /dev/null +++ b/windows/res/installer.nsi @@ -0,0 +1,133 @@ +# This installs NetSurf execuatables and resources, creates a start menu shortcut, builds an uninstaller, and +# adds uninstall information to the registry for Add/Remove Programs + +# show up in a few places. +# All the other settings can be tweaked by editing the !defines at the top of this script +!define APPNAME "NetSurf" +!define COMPANYNAME "NetSurf" +!define DESCRIPTION "Web Browser" +# These three must be integers +!define VERSIONMAJOR 3 +!define VERSIONMINOR 0 +!define VERSIONBUILD 1 +# These will be displayed by the "Click here for support information" link in "Add/Remove Programs" +# It is possible to use "mailto:" links in here to open the email client +!define HELPURL "http://www.netsurf-browser.org/" # "Support Information" link +!define UPDATEURL "http://www.netsurf-browser.org/" # "Product Updates" link +!define ABOUTURL "http://www.netsurf-browser.org/" # "Publisher" link +# This is the size (in kB) of all the files copied into "Program Files" +!define INSTALLSIZE 9000 + +RequestExecutionLevel admin ;Require admin rights on NT6+ (When UAC is turned on) + +InstallDir "$PROGRAMFILES\${COMPANYNAME}\${APPNAME}" + +# rtf or txt file - remember if it is txt, it must be in the DOS text format (\r\n) +LicenseData "COPYING" +# This will be in the installer/uninstaller's title bar +Name "${COMPANYNAME} - ${APPNAME}" +Icon "windows\res\NetSurf.ico" +outFile "netsurf-installer.exe" +BrandingText "${COMPANYNAME}" + +!include LogicLib.nsh + +# Just three pages - license agreement, install location, and installation +page license +page directory +Page instfiles + +!macro VerifyUserIsAdmin +UserInfo::GetAccountType +pop $0 +${If} $0 != "admin" ;Require admin rights on NT4+ + messageBox mb_iconstop "Administrator rights required!" + setErrorLevel 740 ;ERROR_ELEVATION_REQUIRED + quit +${EndIf} +!macroend + +function .onInit + setShellVarContext all + !insertmacro VerifyUserIsAdmin +functionEnd + +section "install" + # Files for the install directory - to build the installer, these should be in the same directory as the install script (this file) + setOutPath $INSTDIR + # Files added here should be removed by the uninstaller (see section "uninstall") + file "NetSurf.exe" + file /oname=NetSurf.ico "windows\res\NetSurf.ico" + file /oname=libcares-2.dll "/opt/netsurf/i686-w64-mingw32/env/bin/libcares-2.dll" + file /oname=libgnurx-0.dll "/opt/netsurf/i686-w64-mingw32/env/bin/libgnurx-0.dll" + file /oname=default.css "windows\res\default.css" + file /oname=welcome.html "windows\res\welcome.html" + file /oname=netsurf.png "windows\res\netsurf.png" + file /oname=messages "windows\res\messages" + # Add any other files for the install directory (license files, app data, etc) here + + # Uninstaller - See function un.onInit and section "uninstall" for configuration + writeUninstaller "$INSTDIR\uninstall.exe" + + # Start Menu + createDirectory "$SMPROGRAMS\${COMPANYNAME}" + createShortCut "$SMPROGRAMS\${COMPANYNAME}\${APPNAME}.lnk" "$INSTDIR\NetSurf.exe" "" "$INSTDIR\NetSurf.ico" + + # Registry information for add/remove programs + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" "DisplayName" "${COMPANYNAME} - ${APPNAME} - ${DESCRIPTION}" + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" "UninstallString" "$\"$INSTDIR\uninstall.exe$\"" + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" "QuietUninstallString" "$\"$INSTDIR\uninstall.exe$\" /S" + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" "InstallLocation" "$\"$INSTDIR$\"" + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" "DisplayIcon" "$\"$INSTDIR\NetSurf.ico$\"" + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" "Publisher" "$\"${COMPANYNAME}$\"" + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" "HelpLink" "$\"${HELPURL}$\"" + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" "URLUpdateInfo" "$\"${UPDATEURL}$\"" + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" "URLInfoAbout" "$\"${ABOUTURL}$\"" + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" "DisplayVersion" "$\"${VERSIONMAJOR}.${VERSIONMINOR}.${VERSIONBUILD}$\"" + WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" "VersionMajor" ${VERSIONMAJOR} + WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" "VersionMinor" ${VERSIONMINOR} + # There is no option for modifying or repairing the install + WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" "NoModify" 1 + WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" "NoRepair" 1 + # Set the INSTALLSIZE constant (!defined at the top of this script) so Add/Remove Programs can accurately report the size + WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" "EstimatedSize" ${INSTALLSIZE} +sectionEnd + +# Uninstaller + +function un.onInit + SetShellVarContext all + + #Verify the uninstaller - last chance to back out + MessageBox MB_OKCANCEL "Permanantly remove ${APPNAME}?" IDOK next + Abort + next: + !insertmacro VerifyUserIsAdmin +functionEnd + +section "uninstall" + + # Remove Start Menu launcher + delete "$SMPROGRAMS\${COMPANYNAME}\${APPNAME}.lnk" + # Try to remove the Start Menu folder - this will only happen if it is empty + rmDir "$SMPROGRAMS\${COMPANYNAME}" + + # Remove files + delete $INSTDIR\NetSurf.exe + delete $INSTDIR\NetSurf.ico + delete $INSTDIR\libcares-2.dll + delete $INSTDIR\libgnurx-0.dll + delete $INSTDIR\default.css + delete $INSTDIR\welcome.html + delete $INSTDIR\netsurf.png + delete $INSTDIR\messages + + # Always delete uninstaller as the last action + delete $INSTDIR\uninstall.exe + + # Try to remove the install directory - this will only happen if it is empty + rmDir $INSTDIR + + # Remove uninstaller information from the registry + DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" +sectionEnd diff --git a/windows/res/internal.css b/windows/res/internal.css new file mode 120000 index 000000000..e777d8ae1 --- /dev/null +++ b/windows/res/internal.css @@ -0,0 +1 @@ +../../!NetSurf/Resources/internal.css,f79 \ No newline at end of file diff --git a/windows/res/netsurf.png b/windows/res/netsurf.png new file mode 120000 index 000000000..0fbf42709 --- /dev/null +++ b/windows/res/netsurf.png @@ -0,0 +1 @@ +../../!NetSurf/Resources/netsurf.png,b60 \ No newline at end of file diff --git a/windows/res/welcome.html b/windows/res/welcome.html new file mode 120000 index 000000000..5b394445b --- /dev/null +++ b/windows/res/welcome.html @@ -0,0 +1 @@ +../../!NetSurf/Resources/en/welcome.html,faf \ No newline at end of file -- cgit v1.2.3