mirror of https://github.com/PurpleI2P/i2pd.git
Mikhail Titov
9 years ago
13 changed files with 1630 additions and 112 deletions
@ -0,0 +1,14 @@ |
|||||||
|
@echo off |
||||||
|
convert Itoopie.svg ^ |
||||||
|
-fuzz 90%% -fill transparent -floodfill 2x2 white -fuzz 20%% -fill #AE0E99 -opaque red ^ |
||||||
|
-fill #FBBC11 -opaque yellow ^ |
||||||
|
( -clone 0 -resize 256x256 ) ^ |
||||||
|
( -clone 0 -resize 128x128 ) ^ |
||||||
|
( -clone 0 -resize 64x64 ) ^ |
||||||
|
( -clone 0 -resize 48x48 ) ^ |
||||||
|
( -clone 0 -resize 32x32 ) ^ |
||||||
|
( -clone 0 -resize 24x24 ) ^ |
||||||
|
( -clone 0 -resize 16x16 ) ^ |
||||||
|
( -size 150x57 xc:white -clone 0 -geometry 57x57+46+0 -composite -gravity center -write BMP3:ictoopie.bmp +delete ) ^ |
||||||
|
( -clone 0 -write Itoopie_purple.png +delete ) ^ |
||||||
|
-delete 0 ictoopie.ico |
@ -0,0 +1,47 @@ |
|||||||
|
// |
||||||
|
// Resource.RC2 - resources Microsoft Visual C++ does not edit directly |
||||||
|
// |
||||||
|
|
||||||
|
#ifdef APSTUDIO_INVOKED |
||||||
|
#error this file is not editable by Microsoft Visual C++ |
||||||
|
#endif //APSTUDIO_INVOKED |
||||||
|
|
||||||
|
#include "../version.h" |
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////// |
||||||
|
// |
||||||
|
// Version |
||||||
|
// |
||||||
|
|
||||||
|
VS_VERSION_INFO VERSIONINFO |
||||||
|
FILEVERSION I2PD_VERSION_MAJOR,I2PD_VERSION_MINOR,I2PD_VERSION_MICRO,I2PD_VERSION_PATCH |
||||||
|
PRODUCTVERSION I2P_VERSION_MAJOR,I2P_VERSION_MINOR,I2P_VERSION_MICRO,I2P_VERSION_PATCH |
||||||
|
FILEFLAGSMASK 0x3fL |
||||||
|
#ifdef _DEBUG |
||||||
|
FILEFLAGS 0x1L |
||||||
|
#else |
||||||
|
FILEFLAGS 0x0L |
||||||
|
#endif |
||||||
|
FILEOS 0x40004L |
||||||
|
FILETYPE 0x1L |
||||||
|
FILESUBTYPE 0x0L |
||||||
|
BEGIN |
||||||
|
BLOCK "StringFileInfo" |
||||||
|
BEGIN |
||||||
|
BLOCK "040904b0" |
||||||
|
BEGIN |
||||||
|
VALUE "CompanyName", "Purple I2P" |
||||||
|
VALUE "FileDescription", "C++ I2P daemon" |
||||||
|
VALUE "FileVersion", I2PD_VERSION |
||||||
|
VALUE "InternalName", CODENAME |
||||||
|
VALUE "LegalCopyright", "Copyright (C) 2013-2015, The PurpleI2P Project" |
||||||
|
VALUE "OriginalFilename", "i2pd" |
||||||
|
VALUE "ProductName", "Purple I2P" |
||||||
|
VALUE "ProductVersion", I2P_VERSION |
||||||
|
END |
||||||
|
END |
||||||
|
BLOCK "VarFileInfo" |
||||||
|
BEGIN |
||||||
|
VALUE "Translation", 0x409, 1200 |
||||||
|
END |
||||||
|
END |
After Width: | Height: | Size: 25 KiB |
Before Width: | Height: | Size: 97 KiB After Width: | Height: | Size: 176 KiB |
@ -0,0 +1,197 @@ |
|||||||
|
version: 1.0.{build} |
||||||
|
pull_requests: |
||||||
|
do_not_increment_build_number: true |
||||||
|
branches: |
||||||
|
only: |
||||||
|
- openssl |
||||||
|
skip_tags: true |
||||||
|
os: Visual Studio 2015 |
||||||
|
shallow_clone: true |
||||||
|
clone_depth: 1 |
||||||
|
init: |
||||||
|
- cmd: >- |
||||||
|
mkdir \projects\instdir |
||||||
|
|
||||||
|
rem Appveyor has win32 openssl pre-installed that is picked up erroneously even for 64-bit. Cleaning the mess... Should happen before restoring cache. |
||||||
|
|
||||||
|
rem Might consider passing OPENSSL_ROOT_DIR |
||||||
|
|
||||||
|
if exist \OpenSSL-Win32 rmdir /S /Q \OpenSSL-Win32 |
||||||
|
|
||||||
|
if exist \OpenSSL-Win64 rmdir /S /Q \OpenSSL-Win64 |
||||||
|
|
||||||
|
if exist \OpenSSL rmdir /S /Q \OpenSSL |
||||||
|
environment: |
||||||
|
BOOST_ROOT: C:\Libraries\boost_1_59_0 |
||||||
|
MINIUPNPC: miniupnpc-1.9.20151026 |
||||||
|
OPENSSL: OpenSSL_1_0_2e |
||||||
|
ZLIB: zlib-1.2.8 |
||||||
|
matrix: |
||||||
|
# - type: static |
||||||
|
# msvc: 14 |
||||||
|
# x64: 0 |
||||||
|
# - type: static |
||||||
|
# variant: Release |
||||||
|
# # FIXME why is this necessary with Appveyor??? |
||||||
|
# cmake: -DSSL_EAY=/mingw32/lib/libssl.a -DLIB_EAY=/mingw32/lib/libcrypto.a |
||||||
|
- type: shared |
||||||
|
variant: Release |
||||||
|
- type: static |
||||||
|
msvc: 12 |
||||||
|
x64: 1 |
||||||
|
variant: RelWithDebInfo |
||||||
|
- type: static |
||||||
|
msvc: 14 |
||||||
|
variant: RelWithDebInfo |
||||||
|
cmake: -DWITH_PCH=ON |
||||||
|
# - type: static |
||||||
|
# msvc: 12 |
||||||
|
# - type: shared |
||||||
|
# msvc: 14 |
||||||
|
# variant: Debug |
||||||
|
# - type: shared |
||||||
|
# variant: Release |
||||||
|
# cmake: -DWITH_PCH=ON |
||||||
|
# x64: 1 |
||||||
|
install: |
||||||
|
- if not exist \projects\miniupnpc\ ( |
||||||
|
mkdir \projects\miniupnpc |
||||||
|
&& curl -sL http://miniupnp.free.fr/files/download.php?file=%MINIUPNPC%.tar.gz -o \projects\miniupnpc\%MINIUPNPC%.tar.gz |
||||||
|
) |
||||||
|
- tar --strip-components=1 --directory=\projects\miniupnpc -xzf \projects\miniupnpc\%MINIUPNPC%.tar.gz |
||||||
|
- if not exist \projects\zlib\ ( |
||||||
|
mkdir \projects\zlib |
||||||
|
&& cd \projects\zlib |
||||||
|
&& curl -sLO http://zlib.net/%ZLIB%.tar.gz |
||||||
|
) |
||||||
|
- tar --strip-components=1 --directory=\projects\zlib -xzf \projects\zlib\%ZLIB%.tar.gz |
||||||
|
- patch -p0 C:/projects/zlib/CMakeLists.txt %APPVEYOR_BUILD_FOLDER%/build/cmake-zlib-static.patch |
||||||
|
- patch -p0 C:/projects/zlib/CMakeLists.txt %APPVEYOR_BUILD_FOLDER%/build/cmake-zlib-amd64.patch |
||||||
|
- if "%type%" == "static" ( |
||||||
|
set "static=ON" |
||||||
|
&& set "boostlib=lib" |
||||||
|
) else ( |
||||||
|
set "static=OFF" |
||||||
|
&& set "dll=dll" |
||||||
|
) |
||||||
|
- if "%x64%"=="1" ( |
||||||
|
set "bitness=64" |
||||||
|
&& set "openssl_target=VC-WIN64A" |
||||||
|
&& set "zlib_asm=-DAMD64=ON" |
||||||
|
) else ( |
||||||
|
set "bitness=32" |
||||||
|
&& set "openssl_target=VC-WIN32" |
||||||
|
&& set "zlib_asm=-DASM686=ON "-DCMAKE_ASM_MASM_FLAGS=/W0 /safeseh"" |
||||||
|
) |
||||||
|
- C:\msys64\usr\bin\bash -lc "export PATH=/mingw%bitness%/bin:/usr/bin:. && cd /c/projects/miniupnpc && CC=gcc make -f Makefile.mingw init miniupnpc.dll > c:\projects\instdir\build_miniupnpc.log 2>&1 || cat c:\projects\instdir\build_miniupnpc.log" |
||||||
|
- set /a generator=%msvc%+2001 |
||||||
|
- if defined msvc ( |
||||||
|
( |
||||||
|
if "%x64%" == "1" ( |
||||||
|
call "C:\Program Files (x86)\Microsoft Visual Studio %msvc%.0\VC\vcvarsall.bat" amd64 |
||||||
|
&& set "generator=Visual Studio %msvc% %generator% Win64" |
||||||
|
) else ( |
||||||
|
call "C:\Program Files (x86)\Microsoft Visual Studio %msvc%.0\VC\vcvarsall.bat" x86 |
||||||
|
&& set "generator=Visual Studio %msvc% %generator%" |
||||||
|
) |
||||||
|
) |
||||||
|
&& set "zlib_root=C:/stage/zlib-Win%bitness%-vc%msvc%-%type%" |
||||||
|
&& if "%variant%" neq "Debug" ( |
||||||
|
set "boost_variant=variant=release" |
||||||
|
&& set "boostdbg=-gd" |
||||||
|
) |
||||||
|
) else ( |
||||||
|
set "generator=Unix Makefiles" |
||||||
|
) |
||||||
|
- if defined msvc if not exist %zlib_root% ( |
||||||
|
mkdir \projects\zlib-build |
||||||
|
&& cd \projects\zlib-build |
||||||
|
&& cmake ../zlib -G "%generator%" %zlib_asm% -DWITH_STATIC=%static% -DCMAKE_INSTALL_PREFIX=%zlib_root% > c:\projects\instdir\build_zlib.log |
||||||
|
&& cmake --build . --config Release --target INSTALL >> c:\projects\instdir\build_zlib.log |
||||||
|
|| type c:\projects\instdir\build_zlib.log |
||||||
|
) |
||||||
|
- cmd: >- |
||||||
|
rem cinst nasm |
||||||
|
|
||||||
|
cd \projects |
||||||
|
|
||||||
|
if not exist nasm-2.11.08-installer.exe curl --silent --location --remote-name http://www.nasm.us/pub/nasm/releasebuilds/2.11.08/win32/nasm-2.11.08-installer.exe |
||||||
|
|
||||||
|
nasm-2.11.08-installer.exe /S |
||||||
|
|
||||||
|
set "PATH=%PATH%;C:\Program Files (x86)\nasm" |
||||||
|
|
||||||
|
if not exist %OPENSSL%.zip curl --silent --location --remote-name https://github.com/openssl/openssl/archive/%OPENSSL%.zip |
||||||
|
- cd %BOOST_ROOT% |
||||||
|
- if defined msvc if not exist "stage%bitness%\lib\%boostlib%boost_system-vc%msvc%0-mt%boostdbg%*" ( |
||||||
|
bootstrap > c:\projects\instdir\build_boost.log |
||||||
|
&& b2 toolset=msvc-%msvc%.0 %boost_variant% link=%type% runtime-link=%type% address-model=%bitness% --build-type=minimal --with-filesystem --with-program_options --with-regex --with-date_time --stagedir=stage%bitness% >> c:\projects\instdir\build_boost.log |
||||||
|
|| type c:\projects\instdir\build_boost.log |
||||||
|
) |
||||||
|
- if defined msvc if not exist C:\stage\OpenSSL-Win%bitness%-vc%msvc%-%type%\ ( |
||||||
|
cd \projects |
||||||
|
&& 7z x %OPENSSL%.zip > NUL |
||||||
|
&& cd openssl-%OPENSSL% |
||||||
|
&& perl Configure %openssl_target% no-rc2 no-rc4 no-rc5 no-idea no-bf no-cast no-whirlpool no-md2 no-md4 no-ripemd no-mdc2 no-camellia no-seed no-comp no-krb5 no-gmp no-rfc3779 no-ec2m no-ssl2 no-jpake no-srp no-sctp no-srtp --prefix=c:\stage\OpenSSL-Win%bitness%-vc%msvc%-%type% > c:\projects\instdir\build_openssl.log |
||||||
|
&& ( if "%x64%" == "1" ( ms\do_win64a >> c:\projects\instdir\build_openssl.log ) else ( ms\do_nasm >> c:\projects\instdir\build_openssl.log ) ) |
||||||
|
&& nmake -f ms\nt%dll%.mak install >> c:\projects\instdir\build_openssl.log 2>&1 |
||||||
|
&& mklink /J \OpenSSL \stage\OpenSSL-Win%bitness%-vc%msvc%-%type% |
||||||
|
|| type c:\projects\instdir\build_openssl.log |
||||||
|
) |
||||||
|
- rem already there: mingw-w64-i686-openssl mingw-w64-i686-gcc cmake |
||||||
|
- if not defined msvc ( |
||||||
|
C:\msys64\usr\bin\bash -lc "pacman --needed --noconfirm -Sy bash pacman pacman-mirrors msys2-runtime msys2-runtime-devel" |
||||||
|
&& if "%x64%" == "1" ( |
||||||
|
C:\msys64\usr\bin\bash -lc "pacman --noconfirm -S mingw-w64-x86_64-boost mingw-w64-x86_64-miniupnpc" |
||||||
|
) else ( |
||||||
|
C:\msys64\usr\bin\bash -lc "pacman --noconfirm -S mingw-w64-i686-boost mingw-w64-i686-miniupnpc" |
||||||
|
) |
||||||
|
) |
||||||
|
cache: |
||||||
|
- C:\projects\%OPENSSL%.zip |
||||||
|
- C:\projects\nasm-2.11.08-installer.exe |
||||||
|
- C:\projects\miniupnpc\%MINIUPNPC%.tar.gz |
||||||
|
- C:\stage |
||||||
|
- '%BOOST_ROOT%\stage32' |
||||||
|
- '%BOOST_ROOT%\stage64' |
||||||
|
- C:\projects\zlib\%ZLIB%.tar.gz |
||||||
|
build_script: |
||||||
|
- cmd: >- |
||||||
|
mkdir \projects\build |
||||||
|
|
||||||
|
rem FIXME use fixup_bundle in cmake |
||||||
|
|
||||||
|
rem msbuild i2pd.sln /p:Configuration=Release |
||||||
|
|
||||||
|
if defined variant ( set cmake_extra=-DCMAKE_BUILD_TYPE=%variant% && set "cmake_build=--config %variant%" ) |
||||||
|
|
||||||
|
echo "bitness=%bitness%; static=%static%; dll=%dll%; type=%type%; generator=%generator%; variant=%variant%; cmake=%cmake%; cmake_extra=%cmake_extra%" |
||||||
|
- if not defined msvc ( |
||||||
|
C:\msys64\usr\bin\bash -lc "export PATH=/mingw%bitness%/bin:/usr/bin && cd /c/projects/build && cmake /c/projects/i2pd/build -G 'Unix Makefiles' -DWITH_AESNI=ON -DWITH_UPNP=ON %cmake% %cmake_extra% -DWITH_STATIC=%static% -DWITH_HARDENING=ON -DCMAKE_INSTALL_PREFIX:PATH=/c/projects/instdir -DCMAKE_FIND_ROOT_PATH=/mingw%bitness% && make install" |
||||||
|
&& 7z a -tzip -mx9 -mmt C:\projects\i2pd\i2pd-mingw-win%bitness%-%type%.zip C:\projects\instdir\* C:\msys64\mingw%bitness%\bin\zlib1.dll C:\msys64\mingw%bitness%\bin\*eay32.dll |
||||||
|
) |
||||||
|
- rem We are fine with multiple generated configurations in MS solution. Will use later |
||||||
|
- if defined msvc ( |
||||||
|
cd \projects\build |
||||||
|
&& cmake ..\i2pd\build -G "%generator%" -DWITH_UPNP=ON %cmake% -DWITH_STATIC=%static% -DZLIB_ROOT=%zlib_root% -DBoost_LIBRARY_DIR:PATH=%BOOST_ROOT%/stage%bitness%/lib -DCMAKE_INSTALL_PREFIX:PATH=c:/projects/instdir |
||||||
|
&& cmake --build . %cmake_build% --target install |
||||||
|
&& 7z a -tzip -mx9 -mmt C:\projects\i2pd\i2pd-vc%msvc%-win%bitness%-%type%.zip C:\projects\instdir\* |
||||||
|
&& cmake --build . %cmake_build% --target package |
||||||
|
&& xcopy i2pd*win*.exe ..\i2pd\ |
||||||
|
) |
||||||
|
test: off |
||||||
|
artifacts: |
||||||
|
- path: i2pd-vc12-win64-static.zip |
||||||
|
- path: i2pd-vc12-win32-static.zip |
||||||
|
- path: i2pd-vc12-win64-shared.zip |
||||||
|
- path: i2pd-vc12-win32-shared.zip |
||||||
|
- path: i2pd-vc14-win64-static.zip |
||||||
|
- path: i2pd-vc14-win32-static.zip |
||||||
|
- path: i2pd-vc14-win64-shared.zip |
||||||
|
- path: i2pd-vc14-win32-shared.zip |
||||||
|
- path: i2pd-mingw-win64-static.zip |
||||||
|
- path: i2pd-mingw-win32-static.zip |
||||||
|
- path: i2pd-mingw-win64-shared.zip |
||||||
|
- path: i2pd-mingw-win32-shared.zip |
||||||
|
- path: i2pd-2.1.0-win64.exe |
||||||
|
- path: i2pd-2.1.0-win32.exe |
@ -0,0 +1,10 @@ |
|||||||
|
--- CMakeLists.txt.orig 2015-12-07 14:19:36.447689600 -0600
|
||||||
|
+++ CMakeLists.txt 2015-12-07 14:18:23.004419900 -0600
|
||||||
|
@@ -165,6 +165,7 @@
|
||||||
|
ENABLE_LANGUAGE(ASM_MASM) |
||||||
|
set(ZLIB_ASMS |
||||||
|
contrib/masmx64/gvmat64.asm |
||||||
|
+ contrib/masmx64/inffas8664.c
|
||||||
|
contrib/masmx64/inffasx64.asm |
||||||
|
) |
||||||
|
endif() |
@ -0,0 +1,978 @@ |
|||||||
|
; CPack install script designed for a nmake build |
||||||
|
|
||||||
|
;-------------------------------- |
||||||
|
; You must define these values |
||||||
|
|
||||||
|
!define VERSION "@CPACK_PACKAGE_VERSION@" |
||||||
|
!define PATCH "@CPACK_PACKAGE_VERSION_PATCH@" |
||||||
|
!define INST_DIR "@CPACK_TEMPORARY_DIRECTORY@" |
||||||
|
|
||||||
|
;-------------------------------- |
||||||
|
;Variables |
||||||
|
|
||||||
|
Var MUI_TEMP |
||||||
|
Var STARTMENU_FOLDER |
||||||
|
Var SV_ALLUSERS |
||||||
|
Var START_MENU |
||||||
|
Var DO_NOT_ADD_TO_PATH |
||||||
|
Var ADD_TO_PATH_ALL_USERS |
||||||
|
Var ADD_TO_PATH_CURRENT_USER |
||||||
|
Var INSTALL_DESKTOP |
||||||
|
Var IS_DEFAULT_INSTALLDIR |
||||||
|
;-------------------------------- |
||||||
|
;Include Modern UI |
||||||
|
|
||||||
|
!include "MUI.nsh" |
||||||
|
|
||||||
|
;Default installation folder |
||||||
|
InstallDir "@CPACK_NSIS_INSTALL_ROOT@\@CPACK_PACKAGE_INSTALL_DIRECTORY@" |
||||||
|
|
||||||
|
;-------------------------------- |
||||||
|
;General |
||||||
|
|
||||||
|
;Name and file |
||||||
|
Name "@CPACK_NSIS_PACKAGE_NAME@" |
||||||
|
OutFile "@CPACK_TOPLEVEL_DIRECTORY@/@CPACK_OUTPUT_FILE_NAME@" |
||||||
|
|
||||||
|
;Set compression |
||||||
|
SetCompressor @CPACK_NSIS_COMPRESSOR@ |
||||||
|
|
||||||
|
;Require administrator access |
||||||
|
RequestExecutionLevel admin |
||||||
|
|
||||||
|
@CPACK_NSIS_DEFINES@ |
||||||
|
|
||||||
|
!include Sections.nsh |
||||||
|
|
||||||
|
;--- Component support macros: --- |
||||||
|
; The code for the add/remove functionality is from: |
||||||
|
; http://nsis.sourceforge.net/Add/Remove_Functionality |
||||||
|
; It has been modified slightly and extended to provide |
||||||
|
; inter-component dependencies. |
||||||
|
Var AR_SecFlags |
||||||
|
Var AR_RegFlags |
||||||
|
@CPACK_NSIS_SECTION_SELECTED_VARS@ |
||||||
|
|
||||||
|
; Loads the "selected" flag for the section named SecName into the |
||||||
|
; variable VarName. |
||||||
|
!macro LoadSectionSelectedIntoVar SecName VarName |
||||||
|
SectionGetFlags ${${SecName}} $${VarName} |
||||||
|
IntOp $${VarName} $${VarName} & ${SF_SELECTED} ;Turn off all other bits |
||||||
|
!macroend |
||||||
|
|
||||||
|
; Loads the value of a variable... can we get around this? |
||||||
|
!macro LoadVar VarName |
||||||
|
IntOp $R0 0 + $${VarName} |
||||||
|
!macroend |
||||||
|
|
||||||
|
; Sets the value of a variable |
||||||
|
!macro StoreVar VarName IntValue |
||||||
|
IntOp $${VarName} 0 + ${IntValue} |
||||||
|
!macroend |
||||||
|
|
||||||
|
!macro InitSection SecName |
||||||
|
; This macro reads component installed flag from the registry and |
||||||
|
;changes checked state of the section on the components page. |
||||||
|
;Input: section index constant name specified in Section command. |
||||||
|
|
||||||
|
ClearErrors |
||||||
|
;Reading component status from registry |
||||||
|
ReadRegDWORD $AR_RegFlags HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@\Components\${SecName}" "Installed" |
||||||
|
IfErrors "default_${SecName}" |
||||||
|
;Status will stay default if registry value not found |
||||||
|
;(component was never installed) |
||||||
|
IntOp $AR_RegFlags $AR_RegFlags & ${SF_SELECTED} ;Turn off all other bits |
||||||
|
SectionGetFlags ${${SecName}} $AR_SecFlags ;Reading default section flags |
||||||
|
IntOp $AR_SecFlags $AR_SecFlags & 0xFFFE ;Turn lowest (enabled) bit off |
||||||
|
IntOp $AR_SecFlags $AR_RegFlags | $AR_SecFlags ;Change lowest bit |
||||||
|
|
||||||
|
; Note whether this component was installed before |
||||||
|
!insertmacro StoreVar ${SecName}_was_installed $AR_RegFlags |
||||||
|
IntOp $R0 $AR_RegFlags & $AR_RegFlags |
||||||
|
|
||||||
|
;Writing modified flags |
||||||
|
SectionSetFlags ${${SecName}} $AR_SecFlags |
||||||
|
|
||||||
|
"default_${SecName}:" |
||||||
|
!insertmacro LoadSectionSelectedIntoVar ${SecName} ${SecName}_selected |
||||||
|
!macroend |
||||||
|
|
||||||
|
!macro FinishSection SecName |
||||||
|
; This macro reads section flag set by user and removes the section |
||||||
|
;if it is not selected. |
||||||
|
;Then it writes component installed flag to registry |
||||||
|
;Input: section index constant name specified in Section command. |
||||||
|
|
||||||
|
SectionGetFlags ${${SecName}} $AR_SecFlags ;Reading section flags |
||||||
|
;Checking lowest bit: |
||||||
|
IntOp $AR_SecFlags $AR_SecFlags & ${SF_SELECTED} |
||||||
|
IntCmp $AR_SecFlags 1 "leave_${SecName}" |
||||||
|
;Section is not selected: |
||||||
|
;Calling Section uninstall macro and writing zero installed flag |
||||||
|
!insertmacro "Remove_${${SecName}}" |
||||||
|
WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@\Components\${SecName}" \ |
||||||
|
"Installed" 0 |
||||||
|
Goto "exit_${SecName}" |
||||||
|
|
||||||
|
"leave_${SecName}:" |
||||||
|
;Section is selected: |
||||||
|
WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@\Components\${SecName}" \ |
||||||
|
"Installed" 1 |
||||||
|
|
||||||
|
"exit_${SecName}:" |
||||||
|
!macroend |
||||||
|
|
||||||
|
!macro RemoveSection_CPack SecName |
||||||
|
; This macro is used to call section's Remove_... macro |
||||||
|
;from the uninstaller. |
||||||
|
;Input: section index constant name specified in Section command. |
||||||
|
|
||||||
|
!insertmacro "Remove_${${SecName}}" |
||||||
|
!macroend |
||||||
|
|
||||||
|
; Determine whether the selection of SecName changed |
||||||
|
!macro MaybeSelectionChanged SecName |
||||||
|
!insertmacro LoadVar ${SecName}_selected |
||||||
|
SectionGetFlags ${${SecName}} $R1 |
||||||
|
IntOp $R1 $R1 & ${SF_SELECTED} ;Turn off all other bits |
||||||
|
|
||||||
|
; See if the status has changed: |
||||||
|
IntCmp $R0 $R1 "${SecName}_unchanged" |
||||||
|
!insertmacro LoadSectionSelectedIntoVar ${SecName} ${SecName}_selected |
||||||
|
|
||||||
|
IntCmp $R1 ${SF_SELECTED} "${SecName}_was_selected" |
||||||
|
!insertmacro "Deselect_required_by_${SecName}" |
||||||
|
goto "${SecName}_unchanged" |
||||||
|
|
||||||
|
"${SecName}_was_selected:" |
||||||
|
!insertmacro "Select_${SecName}_depends" |
||||||
|
|
||||||
|
"${SecName}_unchanged:" |
||||||
|
!macroend |
||||||
|
;--- End of Add/Remove macros --- |
||||||
|
|
||||||
|
;-------------------------------- |
||||||
|
;Interface Settings |
||||||
|
|
||||||
|
!define MUI_HEADERIMAGE |
||||||
|
!define MUI_ABORTWARNING |
||||||
|
|
||||||
|
;-------------------------------- |
||||||
|
; path functions |
||||||
|
|
||||||
|
!verbose 3 |
||||||
|
!include "WinMessages.NSH" |
||||||
|
!verbose 4 |
||||||
|
|
||||||
|
;---------------------------------------- |
||||||
|
; based upon a script of "Written by KiCHiK 2003-01-18 05:57:02" |
||||||
|
;---------------------------------------- |
||||||
|
!verbose 3 |
||||||
|
!include "WinMessages.NSH" |
||||||
|
!verbose 4 |
||||||
|
;==================================================== |
||||||
|
; get_NT_environment |
||||||
|
; Returns: the selected environment |
||||||
|
; Output : head of the stack |
||||||
|
;==================================================== |
||||||
|
!macro select_NT_profile UN |
||||||
|
Function ${UN}select_NT_profile |
||||||
|
StrCmp $ADD_TO_PATH_ALL_USERS "1" 0 environment_single |
||||||
|
DetailPrint "Selected environment for all users" |
||||||
|
Push "all" |
||||||
|
Return |
||||||
|
environment_single: |
||||||
|
DetailPrint "Selected environment for current user only." |
||||||
|
Push "current" |
||||||
|
Return |
||||||
|
FunctionEnd |
||||||
|
!macroend |
||||||
|
!insertmacro select_NT_profile "" |
||||||
|
!insertmacro select_NT_profile "un." |
||||||
|
;---------------------------------------------------- |
||||||
|
!define NT_current_env 'HKCU "Environment"' |
||||||
|
!define NT_all_env 'HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"' |
||||||
|
|
||||||
|
!ifndef WriteEnvStr_RegKey |
||||||
|
!ifdef ALL_USERS |
||||||
|
!define WriteEnvStr_RegKey \ |
||||||
|
'HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"' |
||||||
|
!else |
||||||
|
!define WriteEnvStr_RegKey 'HKCU "Environment"' |
||||||
|
!endif |
||||||
|
!endif |
||||||
|
|
||||||
|
; AddToPath - Adds the given dir to the search path. |
||||||
|
; Input - head of the stack |
||||||
|
; Note - Win9x systems requires reboot |
||||||
|
|
||||||
|
Function AddToPath |
||||||
|
Exch $0 |
||||||
|
Push $1 |
||||||
|
Push $2 |
||||||
|
Push $3 |
||||||
|
|
||||||
|
# don't add if the path doesn't exist |
||||||
|
IfFileExists "$0\*.*" "" AddToPath_done |
||||||
|
|
||||||
|
ReadEnvStr $1 PATH |
||||||
|
; if the path is too long for a NSIS variable NSIS will return a 0 |
||||||
|
; length string. If we find that, then warn and skip any path |
||||||
|
; modification as it will trash the existing path. |
||||||
|
StrLen $2 $1 |
||||||
|
IntCmp $2 0 CheckPathLength_ShowPathWarning CheckPathLength_Done CheckPathLength_Done |
||||||
|
CheckPathLength_ShowPathWarning: |
||||||
|
Messagebox MB_OK|MB_ICONEXCLAMATION "Warning! PATH too long installer unable to modify PATH!" |
||||||
|
Goto AddToPath_done |
||||||
|
CheckPathLength_Done: |
||||||
|
Push "$1;" |
||||||
|
Push "$0;" |
||||||
|
Call StrStr |
||||||
|
Pop $2 |
||||||
|
StrCmp $2 "" "" AddToPath_done |
||||||
|
Push "$1;" |
||||||
|
Push "$0\;" |
||||||
|
Call StrStr |
||||||
|
Pop $2 |
||||||
|
StrCmp $2 "" "" AddToPath_done |
||||||
|
GetFullPathName /SHORT $3 $0 |
||||||
|
Push "$1;" |
||||||
|
Push "$3;" |
||||||
|
Call StrStr |
||||||
|
Pop $2 |
||||||
|
StrCmp $2 "" "" AddToPath_done |
||||||
|
Push "$1;" |
||||||
|
Push "$3\;" |
||||||
|
Call StrStr |
||||||
|
Pop $2 |
||||||
|
StrCmp $2 "" "" AddToPath_done |
||||||
|
|
||||||
|
Call IsNT |
||||||
|
Pop $1 |
||||||
|
StrCmp $1 1 AddToPath_NT |
||||||
|
; Not on NT |
||||||
|
StrCpy $1 $WINDIR 2 |
||||||
|
FileOpen $1 "$1\autoexec.bat" a |
||||||
|
FileSeek $1 -1 END |
||||||
|
FileReadByte $1 $2 |
||||||
|
IntCmp $2 26 0 +2 +2 # DOS EOF |
||||||
|
FileSeek $1 -1 END # write over EOF |
||||||
|
FileWrite $1 "$\r$\nSET PATH=%PATH%;$3$\r$\n" |
||||||
|
FileClose $1 |
||||||
|
SetRebootFlag true |
||||||
|
Goto AddToPath_done |
||||||
|
|
||||||
|
AddToPath_NT: |
||||||
|
StrCmp $ADD_TO_PATH_ALL_USERS "1" ReadAllKey |
||||||
|
ReadRegStr $1 ${NT_current_env} "PATH" |
||||||
|
Goto DoTrim |
||||||
|
ReadAllKey: |
||||||
|
ReadRegStr $1 ${NT_all_env} "PATH" |
||||||
|
DoTrim: |
||||||
|
StrCmp $1 "" AddToPath_NTdoIt |
||||||
|
Push $1 |
||||||
|
Call Trim |
||||||
|
Pop $1 |
||||||
|
StrCpy $0 "$1;$0" |
||||||
|
AddToPath_NTdoIt: |
||||||
|
StrCmp $ADD_TO_PATH_ALL_USERS "1" WriteAllKey |
||||||
|
WriteRegExpandStr ${NT_current_env} "PATH" $0 |
||||||
|
Goto DoSend |
||||||
|
WriteAllKey: |
||||||
|
WriteRegExpandStr ${NT_all_env} "PATH" $0 |
||||||
|
DoSend: |
||||||
|
SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment" /TIMEOUT=5000 |
||||||
|
|
||||||
|
AddToPath_done: |
||||||
|
Pop $3 |
||||||
|
Pop $2 |
||||||
|
Pop $1 |
||||||
|
Pop $0 |
||||||
|
FunctionEnd |
||||||
|
|
||||||
|
|
||||||
|
; RemoveFromPath - Remove a given dir from the path |
||||||
|
; Input: head of the stack |
||||||
|
|
||||||
|
Function un.RemoveFromPath |
||||||
|
Exch $0 |
||||||
|
Push $1 |
||||||
|
Push $2 |
||||||
|
Push $3 |
||||||
|
Push $4 |
||||||
|
Push $5 |
||||||
|
Push $6 |
||||||
|
|
||||||
|
IntFmt $6 "%c" 26 # DOS EOF |
||||||
|
|
||||||
|
Call un.IsNT |
||||||
|
Pop $1 |
||||||
|
StrCmp $1 1 unRemoveFromPath_NT |
||||||
|
; Not on NT |
||||||
|
StrCpy $1 $WINDIR 2 |
||||||
|
FileOpen $1 "$1\autoexec.bat" r |
||||||
|
GetTempFileName $4 |
||||||
|
FileOpen $2 $4 w |
||||||
|
GetFullPathName /SHORT $0 $0 |
||||||
|
StrCpy $0 "SET PATH=%PATH%;$0" |
||||||
|
Goto unRemoveFromPath_dosLoop |
||||||
|
|
||||||
|
unRemoveFromPath_dosLoop: |
||||||
|
FileRead $1 $3 |
||||||
|
StrCpy $5 $3 1 -1 # read last char |
||||||
|
StrCmp $5 $6 0 +2 # if DOS EOF |
||||||
|
StrCpy $3 $3 -1 # remove DOS EOF so we can compare |
||||||
|
StrCmp $3 "$0$\r$\n" unRemoveFromPath_dosLoopRemoveLine |
||||||
|
StrCmp $3 "$0$\n" unRemoveFromPath_dosLoopRemoveLine |
||||||
|
StrCmp $3 "$0" unRemoveFromPath_dosLoopRemoveLine |
||||||
|
StrCmp $3 "" unRemoveFromPath_dosLoopEnd |
||||||
|
FileWrite $2 $3 |
||||||
|
Goto unRemoveFromPath_dosLoop |
||||||
|
unRemoveFromPath_dosLoopRemoveLine: |
||||||
|
SetRebootFlag true |
||||||
|
Goto unRemoveFromPath_dosLoop |
||||||
|
|
||||||
|
unRemoveFromPath_dosLoopEnd: |
||||||
|
FileClose $2 |
||||||
|
FileClose $1 |
||||||
|
StrCpy $1 $WINDIR 2 |
||||||
|
Delete "$1\autoexec.bat" |
||||||
|
CopyFiles /SILENT $4 "$1\autoexec.bat" |
||||||
|
Delete $4 |
||||||
|
Goto unRemoveFromPath_done |
||||||
|
|
||||||
|
unRemoveFromPath_NT: |
||||||
|
StrCmp $ADD_TO_PATH_ALL_USERS "1" unReadAllKey |
||||||
|
ReadRegStr $1 ${NT_current_env} "PATH" |
||||||
|
Goto unDoTrim |
||||||
|
unReadAllKey: |
||||||
|
ReadRegStr $1 ${NT_all_env} "PATH" |
||||||
|
unDoTrim: |
||||||
|
StrCpy $5 $1 1 -1 # copy last char |
||||||
|
StrCmp $5 ";" +2 # if last char != ; |
||||||
|
StrCpy $1 "$1;" # append ; |
||||||
|
Push $1 |
||||||
|
Push "$0;" |
||||||
|
Call un.StrStr ; Find `$0;` in $1 |
||||||
|
Pop $2 ; pos of our dir |
||||||
|
StrCmp $2 "" unRemoveFromPath_done |
||||||
|
; else, it is in path |
||||||
|
# $0 - path to add |
||||||
|
# $1 - path var |
||||||
|
StrLen $3 "$0;" |
||||||
|
StrLen $4 $2 |
||||||
|
StrCpy $5 $1 -$4 # $5 is now the part before the path to remove |
||||||
|
StrCpy $6 $2 "" $3 # $6 is now the part after the path to remove |
||||||
|
StrCpy $3 $5$6 |
||||||
|
|
||||||
|
StrCpy $5 $3 1 -1 # copy last char |
||||||
|
StrCmp $5 ";" 0 +2 # if last char == ; |
||||||
|
StrCpy $3 $3 -1 # remove last char |
||||||
|
|
||||||
|
StrCmp $ADD_TO_PATH_ALL_USERS "1" unWriteAllKey |
||||||
|
WriteRegExpandStr ${NT_current_env} "PATH" $3 |
||||||
|
Goto unDoSend |
||||||
|
unWriteAllKey: |
||||||
|
WriteRegExpandStr ${NT_all_env} "PATH" $3 |
||||||
|
unDoSend: |
||||||
|
SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment" /TIMEOUT=5000 |
||||||
|
|
||||||
|
unRemoveFromPath_done: |
||||||
|
Pop $6 |
||||||
|
Pop $5 |
||||||
|
Pop $4 |
||||||
|
Pop $3 |
||||||
|
Pop $2 |
||||||
|
Pop $1 |
||||||
|
Pop $0 |
||||||
|
FunctionEnd |
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
||||||
|
; Uninstall sutff |
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
||||||
|
|
||||||
|
########################################### |
||||||
|
# Utility Functions # |
||||||
|
########################################### |
||||||
|
|
||||||
|
;==================================================== |
||||||
|
; IsNT - Returns 1 if the current system is NT, 0 |
||||||
|
; otherwise. |
||||||
|
; Output: head of the stack |
||||||
|
;==================================================== |
||||||
|
; IsNT |
||||||
|
; no input |
||||||
|
; output, top of the stack = 1 if NT or 0 if not |
||||||
|
; |
||||||
|
; Usage: |
||||||
|
; Call IsNT |
||||||
|
; Pop $R0 |
||||||
|
; ($R0 at this point is 1 or 0) |
||||||
|
|
||||||
|
!macro IsNT un |
||||||
|
Function ${un}IsNT |
||||||
|
Push $0 |
||||||
|
ReadRegStr $0 HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion" CurrentVersion |
||||||
|
StrCmp $0 "" 0 IsNT_yes |
||||||
|
; we are not NT. |
||||||
|
Pop $0 |
||||||
|
Push 0 |
||||||
|
Return |
||||||
|
|
||||||
|
IsNT_yes: |
||||||
|
; NT!!! |
||||||
|
Pop $0 |
||||||
|
Push 1 |
||||||
|
FunctionEnd |
||||||
|
!macroend |
||||||
|
!insertmacro IsNT "" |
||||||
|
!insertmacro IsNT "un." |
||||||
|
|
||||||
|
; StrStr |
||||||
|
; input, top of stack = string to search for |
||||||
|
; top of stack-1 = string to search in |
||||||
|
; output, top of stack (replaces with the portion of the string remaining) |
||||||
|
; modifies no other variables. |
||||||
|
; |
||||||
|
; Usage: |
||||||
|
; Push "this is a long ass string" |
||||||
|
; Push "ass" |
||||||
|
; Call StrStr |
||||||
|
; Pop $R0 |
||||||
|
; ($R0 at this point is "ass string") |
||||||
|
|
||||||
|
!macro StrStr un |
||||||
|
Function ${un}StrStr |
||||||
|
Exch $R1 ; st=haystack,old$R1, $R1=needle |
||||||
|
Exch ; st=old$R1,haystack |
||||||
|
Exch $R2 ; st=old$R1,old$R2, $R2=haystack |
||||||
|
Push $R3 |
||||||
|
Push $R4 |
||||||
|
Push $R5 |
||||||
|
StrLen $R3 $R1 |
||||||
|
StrCpy $R4 0 |
||||||
|
; $R1=needle |
||||||
|
; $R2=haystack |
||||||
|
; $R3=len(needle) |
||||||
|
; $R4=cnt |
||||||
|
; $R5=tmp |
||||||
|
loop: |
||||||
|
StrCpy $R5 $R2 $R3 $R4 |
||||||
|
StrCmp $R5 $R1 done |
||||||
|
StrCmp $R5 "" done |
||||||
|
IntOp $R4 $R4 + 1 |
||||||
|
Goto loop |
||||||
|
done: |
||||||
|
StrCpy $R1 $R2 "" $R4 |
||||||
|
Pop $R5 |
||||||
|
Pop $R4 |
||||||
|
Pop $R3 |
||||||
|
Pop $R2 |
||||||
|
Exch $R1 |
||||||
|
FunctionEnd |
||||||
|
!macroend |
||||||
|
!insertmacro StrStr "" |
||||||
|
!insertmacro StrStr "un." |
||||||
|
|
||||||
|
Function Trim ; Added by Pelaca |
||||||
|
Exch $R1 |
||||||
|
Push $R2 |
||||||
|
Loop: |
||||||
|
StrCpy $R2 "$R1" 1 -1 |
||||||
|
StrCmp "$R2" " " RTrim |
||||||
|
StrCmp "$R2" "$\n" RTrim |
||||||
|
StrCmp "$R2" "$\r" RTrim |
||||||
|
StrCmp "$R2" ";" RTrim |
||||||
|
GoTo Done |
||||||
|
RTrim: |
||||||
|
StrCpy $R1 "$R1" -1 |
||||||
|
Goto Loop |
||||||
|
Done: |
||||||
|
Pop $R2 |
||||||
|
Exch $R1 |
||||||
|
FunctionEnd |
||||||
|
|
||||||
|
Function ConditionalAddToRegisty |
||||||
|
Pop $0 |
||||||
|
Pop $1 |
||||||
|
StrCmp "$0" "" ConditionalAddToRegisty_EmptyString |
||||||
|
WriteRegStr SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" \ |
||||||
|
"$1" "$0" |
||||||
|
;MessageBox MB_OK "Set Registry: '$1' to '$0'" |
||||||
|
DetailPrint "Set install registry entry: '$1' to '$0'" |
||||||
|
ConditionalAddToRegisty_EmptyString: |
||||||
|
FunctionEnd |
||||||
|
|
||||||
|
;-------------------------------- |
||||||
|
|
||||||
|
!ifdef CPACK_USES_DOWNLOAD |
||||||
|
Function DownloadFile |
||||||
|
IfFileExists $INSTDIR\* +2 |
||||||
|
CreateDirectory $INSTDIR |
||||||
|
Pop $0 |
||||||
|
|
||||||
|
; Skip if already downloaded |
||||||
|
IfFileExists $INSTDIR\$0 0 +2 |
||||||
|
Return |
||||||
|
|
||||||
|
StrCpy $1 "@CPACK_DOWNLOAD_SITE@" |
||||||
|
|
||||||
|
try_again: |
||||||
|
NSISdl::download "$1/$0" "$INSTDIR\$0" |
||||||
|
|
||||||
|
Pop $1 |
||||||
|
StrCmp $1 "success" success |
||||||
|
StrCmp $1 "Cancelled" cancel |
||||||
|
MessageBox MB_OK "Download failed: $1" |
||||||
|
cancel: |
||||||
|
Return |
||||||
|
success: |
||||||
|
FunctionEnd |
||||||
|
!endif |
||||||
|
|
||||||
|
;-------------------------------- |
||||||
|
; Installation types |
||||||
|
@CPACK_NSIS_INSTALLATION_TYPES@ |
||||||
|
|
||||||
|
;-------------------------------- |
||||||
|
; Component sections |
||||||
|
@CPACK_NSIS_COMPONENT_SECTIONS@ |
||||||
|
|
||||||
|
;-------------------------------- |
||||||
|
; Define some macro setting for the gui |
||||||
|
@CPACK_NSIS_INSTALLER_MUI_ICON_CODE@ |
||||||
|
@CPACK_NSIS_INSTALLER_ICON_CODE@ |
||||||
|
@CPACK_NSIS_INSTALLER_MUI_COMPONENTS_DESC@ |
||||||
|
@CPACK_NSIS_INSTALLER_MUI_FINISHPAGE_RUN_CODE@ |
||||||
|
|
||||||
|
;-------------------------------- |
||||||
|
;Pages |
||||||
|
!insertmacro MUI_PAGE_WELCOME |
||||||
|
|
||||||
|
!insertmacro MUI_PAGE_LICENSE "@CPACK_RESOURCE_FILE_LICENSE@" |
||||||
|
Page custom InstallOptionsPage |
||||||
|
!insertmacro MUI_PAGE_DIRECTORY |
||||||
|
|
||||||
|
;Start Menu Folder Page Configuration |
||||||
|
!define MUI_STARTMENUPAGE_REGISTRY_ROOT "SHCTX" |
||||||
|
!define MUI_STARTMENUPAGE_REGISTRY_KEY "Software\@CPACK_PACKAGE_VENDOR@\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" |
||||||
|
!define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "Start Menu Folder" |
||||||
|
!define MUI_STARTMENUPAGE_DEFAULTFOLDER "Purple I2P" |
||||||
|
!insertmacro MUI_PAGE_STARTMENU Application $STARTMENU_FOLDER |
||||||
|
|
||||||
|
@CPACK_NSIS_PAGE_COMPONENTS@ |
||||||
|
|
||||||
|
!insertmacro MUI_PAGE_INSTFILES |
||||||
|
!insertmacro MUI_PAGE_FINISH |
||||||
|
|
||||||
|
!insertmacro MUI_UNPAGE_CONFIRM |
||||||
|
!insertmacro MUI_UNPAGE_INSTFILES |
||||||
|
|
||||||
|
;-------------------------------- |
||||||
|
;Languages |
||||||
|
|
||||||
|
!insertmacro MUI_LANGUAGE "English" ;first language is the default language |
||||||
|
!insertmacro MUI_LANGUAGE "Albanian" |
||||||
|
!insertmacro MUI_LANGUAGE "Arabic" |
||||||
|
!insertmacro MUI_LANGUAGE "Basque" |
||||||
|
!insertmacro MUI_LANGUAGE "Belarusian" |
||||||
|
!insertmacro MUI_LANGUAGE "Bosnian" |
||||||
|
!insertmacro MUI_LANGUAGE "Breton" |
||||||
|
!insertmacro MUI_LANGUAGE "Bulgarian" |
||||||
|
!insertmacro MUI_LANGUAGE "Croatian" |
||||||
|
!insertmacro MUI_LANGUAGE "Czech" |
||||||
|
!insertmacro MUI_LANGUAGE "Danish" |
||||||
|
!insertmacro MUI_LANGUAGE "Dutch" |
||||||
|
!insertmacro MUI_LANGUAGE "Estonian" |
||||||
|
!insertmacro MUI_LANGUAGE "Farsi" |
||||||
|
!insertmacro MUI_LANGUAGE "Finnish" |
||||||
|
!insertmacro MUI_LANGUAGE "French" |
||||||
|
!insertmacro MUI_LANGUAGE "German" |
||||||
|
!insertmacro MUI_LANGUAGE "Greek" |
||||||
|
!insertmacro MUI_LANGUAGE "Hebrew" |
||||||
|
!insertmacro MUI_LANGUAGE "Hungarian" |
||||||
|
!insertmacro MUI_LANGUAGE "Icelandic" |
||||||
|
!insertmacro MUI_LANGUAGE "Indonesian" |
||||||
|
!insertmacro MUI_LANGUAGE "Irish" |
||||||
|
!insertmacro MUI_LANGUAGE "Italian" |
||||||
|
!insertmacro MUI_LANGUAGE "Japanese" |
||||||
|
!insertmacro MUI_LANGUAGE "Korean" |
||||||
|
!insertmacro MUI_LANGUAGE "Kurdish" |
||||||
|
!insertmacro MUI_LANGUAGE "Latvian" |
||||||
|
!insertmacro MUI_LANGUAGE "Lithuanian" |
||||||
|
!insertmacro MUI_LANGUAGE "Luxembourgish" |
||||||
|
!insertmacro MUI_LANGUAGE "Macedonian" |
||||||
|
!insertmacro MUI_LANGUAGE "Malay" |
||||||
|
!insertmacro MUI_LANGUAGE "Mongolian" |
||||||
|
!insertmacro MUI_LANGUAGE "Norwegian" |
||||||
|
!insertmacro MUI_LANGUAGE "Polish" |
||||||
|
!insertmacro MUI_LANGUAGE "Portuguese" |
||||||
|
!insertmacro MUI_LANGUAGE "PortugueseBR" |
||||||
|
!insertmacro MUI_LANGUAGE "Romanian" |
||||||
|
!insertmacro MUI_LANGUAGE "Russian" |
||||||
|
!insertmacro MUI_LANGUAGE "Serbian" |
||||||
|
!insertmacro MUI_LANGUAGE "SerbianLatin" |
||||||
|
!insertmacro MUI_LANGUAGE "SimpChinese" |
||||||
|
!insertmacro MUI_LANGUAGE "Slovak" |
||||||
|
!insertmacro MUI_LANGUAGE "Slovenian" |
||||||
|
!insertmacro MUI_LANGUAGE "Spanish" |
||||||
|
!insertmacro MUI_LANGUAGE "Swedish" |
||||||
|
!insertmacro MUI_LANGUAGE "Thai" |
||||||
|
!insertmacro MUI_LANGUAGE "TradChinese" |
||||||
|
!insertmacro MUI_LANGUAGE "Turkish" |
||||||
|
!insertmacro MUI_LANGUAGE "Ukrainian" |
||||||
|
!insertmacro MUI_LANGUAGE "Welsh" |
||||||
|
|
||||||
|
|
||||||
|
;-------------------------------- |
||||||
|
;Reserve Files |
||||||
|
|
||||||
|
;These files should be inserted before other files in the data block |
||||||
|
;Keep these lines before any File command |
||||||
|
;Only for solid compression (by default, solid compression is enabled for BZIP2 and LZMA) |
||||||
|
|
||||||
|
ReserveFile "NSIS.InstallOptions.ini" |
||||||
|
!insertmacro MUI_RESERVEFILE_INSTALLOPTIONS |
||||||
|
|
||||||
|
;-------------------------------- |
||||||
|
;Installer Sections |
||||||
|
|
||||||
|
Section "-Core installation" |
||||||
|
;Use the entire tree produced by the INSTALL target. Keep the |
||||||
|
;list of directories here in sync with the RMDir commands below. |
||||||
|
SetOutPath "$INSTDIR" |
||||||
|
@CPACK_NSIS_EXTRA_PREINSTALL_COMMANDS@ |
||||||
|
@CPACK_NSIS_FULL_INSTALL@ |
||||||
|
|
||||||
|
;Store installation folder |
||||||
|
WriteRegStr SHCTX "Software\@CPACK_PACKAGE_VENDOR@\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "" $INSTDIR |
||||||
|
|
||||||
|
;Create uninstaller |
||||||
|
WriteUninstaller "$INSTDIR\Uninstall.exe" |
||||||
|
Push "DisplayName" |
||||||
|
Push "@CPACK_NSIS_DISPLAY_NAME@" |
||||||
|
Call ConditionalAddToRegisty |
||||||
|
Push "DisplayVersion" |
||||||
|
Push "@CPACK_PACKAGE_VERSION@" |
||||||
|
Call ConditionalAddToRegisty |
||||||
|
Push "Publisher" |
||||||
|
Push "@CPACK_PACKAGE_VENDOR@" |
||||||
|
Call ConditionalAddToRegisty |
||||||
|
Push "UninstallString" |
||||||
|
Push "$INSTDIR\Uninstall.exe" |
||||||
|
Call ConditionalAddToRegisty |
||||||
|
Push "NoRepair" |
||||||
|
Push "1" |
||||||
|
Call ConditionalAddToRegisty |
||||||
|
|
||||||
|
!ifdef CPACK_NSIS_ADD_REMOVE |
||||||
|
;Create add/remove functionality |
||||||
|
Push "ModifyPath" |
||||||
|
Push "$INSTDIR\AddRemove.exe" |
||||||
|
Call ConditionalAddToRegisty |
||||||
|
!else |
||||||
|
Push "NoModify" |
||||||
|
Push "1" |
||||||
|
Call ConditionalAddToRegisty |
||||||
|
!endif |
||||||
|
|
||||||
|
; Optional registration |
||||||
|
Push "DisplayIcon" |
||||||
|
Push "$INSTDIR\@CPACK_NSIS_INSTALLED_ICON_NAME@" |
||||||
|
Call ConditionalAddToRegisty |
||||||
|
Push "HelpLink" |
||||||
|
Push "@CPACK_NSIS_HELP_LINK@" |
||||||
|
Call ConditionalAddToRegisty |
||||||
|
Push "URLInfoAbout" |
||||||
|
Push "@CPACK_NSIS_URL_INFO_ABOUT@" |
||||||
|
Call ConditionalAddToRegisty |
||||||
|
Push "Contact" |
||||||
|
Push "@CPACK_NSIS_CONTACT@" |
||||||
|
Call ConditionalAddToRegisty |
||||||
|
!insertmacro MUI_INSTALLOPTIONS_READ $INSTALL_DESKTOP "NSIS.InstallOptions.ini" "Field 5" "State" |
||||||
|
!insertmacro MUI_STARTMENU_WRITE_BEGIN Application |
||||||
|
|
||||||
|
;Create shortcuts |
||||||
|
CreateDirectory "$SMPROGRAMS\$STARTMENU_FOLDER" |
||||||
|
@CPACK_NSIS_CREATE_ICONS@ |
||||||
|
@CPACK_NSIS_CREATE_ICONS_EXTRA@ |
||||||
|
CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\Uninstall.lnk" "$INSTDIR\Uninstall.exe" |
||||||
|
|
||||||
|
;Read a value from an InstallOptions INI file |
||||||
|
!insertmacro MUI_INSTALLOPTIONS_READ $DO_NOT_ADD_TO_PATH "NSIS.InstallOptions.ini" "Field 2" "State" |
||||||
|
!insertmacro MUI_INSTALLOPTIONS_READ $ADD_TO_PATH_ALL_USERS "NSIS.InstallOptions.ini" "Field 3" "State" |
||||||
|
!insertmacro MUI_INSTALLOPTIONS_READ $ADD_TO_PATH_CURRENT_USER "NSIS.InstallOptions.ini" "Field 4" "State" |
||||||
|
|
||||||
|
; Write special uninstall registry entries |
||||||
|
Push "StartMenu" |
||||||
|
Push "$STARTMENU_FOLDER" |
||||||
|
Call ConditionalAddToRegisty |
||||||
|
Push "DoNotAddToPath" |
||||||
|
Push "$DO_NOT_ADD_TO_PATH" |
||||||
|
Call ConditionalAddToRegisty |
||||||
|
Push "AddToPathAllUsers" |
||||||
|
Push "$ADD_TO_PATH_ALL_USERS" |
||||||
|
Call ConditionalAddToRegisty |
||||||
|
Push "AddToPathCurrentUser" |
||||||
|
Push "$ADD_TO_PATH_CURRENT_USER" |
||||||
|
Call ConditionalAddToRegisty |
||||||
|
Push "InstallToDesktop" |
||||||
|
Push "$INSTALL_DESKTOP" |
||||||
|
Call ConditionalAddToRegisty |
||||||
|
|
||||||
|
!insertmacro MUI_STARTMENU_WRITE_END |
||||||
|
|
||||||
|
@CPACK_NSIS_EXTRA_INSTALL_COMMANDS@ |
||||||
|
|
||||||
|
SectionEnd |
||||||
|
|
||||||
|
Section "-Add to path" |
||||||
|
Push $INSTDIR\bin |
||||||
|
StrCmp "@CPACK_NSIS_MODIFY_PATH@" "ON" 0 doNotAddToPath |
||||||
|
StrCmp $DO_NOT_ADD_TO_PATH "1" doNotAddToPath 0 |
||||||
|
Call AddToPath |
||||||
|
doNotAddToPath: |
||||||
|
SectionEnd |
||||||
|
|
||||||
|
;-------------------------------- |
||||||
|
; Create custom pages |
||||||
|
Function InstallOptionsPage |
||||||
|
!insertmacro MUI_HEADER_TEXT "Install Options" "Choose options for installing @CPACK_NSIS_PACKAGE_NAME@" |
||||||
|
!insertmacro MUI_INSTALLOPTIONS_DISPLAY "NSIS.InstallOptions.ini" |
||||||
|
|
||||||
|
FunctionEnd |
||||||
|
|
||||||
|
;-------------------------------- |
||||||
|
; determine admin versus local install |
||||||
|
Function un.onInit |
||||||
|
|
||||||
|
ClearErrors |
||||||
|
UserInfo::GetName |
||||||
|
IfErrors noLM |
||||||
|
Pop $0 |
||||||
|
UserInfo::GetAccountType |
||||||
|
Pop $1 |
||||||
|
StrCmp $1 "Admin" 0 +3 |
||||||
|
SetShellVarContext all |
||||||
|
;MessageBox MB_OK 'User "$0" is in the Admin group' |
||||||
|
Goto done |
||||||
|
StrCmp $1 "Power" 0 +3 |
||||||
|
SetShellVarContext all |
||||||
|
;MessageBox MB_OK 'User "$0" is in the Power Users group' |
||||||
|
Goto done |
||||||
|
|
||||||
|
noLM: |
||||||
|
;Get installation folder from registry if available |
||||||
|
|
||||||
|
done: |
||||||
|
|
||||||
|
FunctionEnd |
||||||
|
|
||||||
|
;--- Add/Remove callback functions: --- |
||||||
|
!macro SectionList MacroName |
||||||
|
;This macro used to perform operation on multiple sections. |
||||||
|
;List all of your components in following manner here. |
||||||
|
@CPACK_NSIS_COMPONENT_SECTION_LIST@ |
||||||
|
!macroend |
||||||
|
|
||||||
|
Section -FinishComponents |
||||||
|
;Removes unselected components and writes component status to registry |
||||||
|
!insertmacro SectionList "FinishSection" |
||||||
|
|
||||||
|
!ifdef CPACK_NSIS_ADD_REMOVE |
||||||
|
; Get the name of the installer executable |
||||||
|
System::Call 'kernel32::GetModuleFileNameA(i 0, t .R0, i 1024) i r1' |
||||||
|
StrCpy $R3 $R0 |
||||||
|
|
||||||
|
; Strip off the last 13 characters, to see if we have AddRemove.exe |
||||||
|
StrLen $R1 $R0 |
||||||
|
IntOp $R1 $R0 - 13 |
||||||
|
StrCpy $R2 $R0 13 $R1 |
||||||
|
StrCmp $R2 "AddRemove.exe" addremove_installed |
||||||
|
|
||||||
|
; We're not running AddRemove.exe, so install it |
||||||
|
CopyFiles $R3 $INSTDIR\AddRemove.exe |
||||||
|
|
||||||
|
addremove_installed: |
||||||
|
!endif |
||||||
|
SectionEnd |
||||||
|
;--- End of Add/Remove callback functions --- |
||||||
|
|
||||||
|
;-------------------------------- |
||||||
|
; Component dependencies |
||||||
|
Function .onSelChange |
||||||
|
!insertmacro SectionList MaybeSelectionChanged |
||||||
|
FunctionEnd |
||||||
|
|
||||||
|
;-------------------------------- |
||||||
|
;Uninstaller Section |
||||||
|
|
||||||
|
Section "Uninstall" |
||||||
|
ReadRegStr $START_MENU SHCTX \ |
||||||
|
"Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "StartMenu" |
||||||
|
;MessageBox MB_OK "Start menu is in: $START_MENU" |
||||||
|
ReadRegStr $DO_NOT_ADD_TO_PATH SHCTX \ |
||||||
|
"Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "DoNotAddToPath" |
||||||
|
ReadRegStr $ADD_TO_PATH_ALL_USERS SHCTX \ |
||||||
|
"Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "AddToPathAllUsers" |
||||||
|
ReadRegStr $ADD_TO_PATH_CURRENT_USER SHCTX \ |
||||||
|
"Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "AddToPathCurrentUser" |
||||||
|
;MessageBox MB_OK "Add to path: $DO_NOT_ADD_TO_PATH all users: $ADD_TO_PATH_ALL_USERS" |
||||||
|
ReadRegStr $INSTALL_DESKTOP SHCTX \ |
||||||
|
"Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "InstallToDesktop" |
||||||
|
;MessageBox MB_OK "Install to desktop: $INSTALL_DESKTOP " |
||||||
|
|
||||||
|
@CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS@ |
||||||
|
|
||||||
|
;Remove files we installed. |
||||||
|
;Keep the list of directories here in sync with the File commands above. |
||||||
|
@CPACK_NSIS_DELETE_FILES@ |
||||||
|
@CPACK_NSIS_DELETE_DIRECTORIES@ |
||||||
|
|
||||||
|
!ifdef CPACK_NSIS_ADD_REMOVE |
||||||
|
;Remove the add/remove program |
||||||
|
Delete "$INSTDIR\AddRemove.exe" |
||||||
|
!endif |
||||||
|
|
||||||
|
;Remove the uninstaller itself. |
||||||
|
Delete "$INSTDIR\Uninstall.exe" |
||||||
|
DeleteRegKey SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" |
||||||
|
|
||||||
|
;Remove the installation directory if it is empty. |
||||||
|
RMDir "$INSTDIR" |
||||||
|
|
||||||
|
; Remove the registry entries. |
||||||
|
DeleteRegKey SHCTX "Software\@CPACK_PACKAGE_VENDOR@\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" |
||||||
|
|
||||||
|
; Removes all optional components |
||||||
|
!insertmacro SectionList "RemoveSection_CPack" |
||||||
|
|
||||||
|
!insertmacro MUI_STARTMENU_GETFOLDER Application $MUI_TEMP |
||||||
|
|
||||||
|
Delete "$SMPROGRAMS\$MUI_TEMP\Uninstall.lnk" |
||||||
|
@CPACK_NSIS_DELETE_ICONS@ |
||||||
|
@CPACK_NSIS_DELETE_ICONS_EXTRA@ |
||||||
|
|
||||||
|
;Delete empty start menu parent diretories |
||||||
|
StrCpy $MUI_TEMP "$SMPROGRAMS\$MUI_TEMP" |
||||||
|
|
||||||
|
startMenuDeleteLoop: |
||||||
|
ClearErrors |
||||||
|
RMDir $MUI_TEMP |
||||||
|
GetFullPathName $MUI_TEMP "$MUI_TEMP\.." |
||||||
|
|
||||||
|
IfErrors startMenuDeleteLoopDone |
||||||
|
|
||||||
|
StrCmp "$MUI_TEMP" "$SMPROGRAMS" startMenuDeleteLoopDone startMenuDeleteLoop |
||||||
|
startMenuDeleteLoopDone: |
||||||
|
|
||||||
|
; If the user changed the shortcut, then untinstall may not work. This should |
||||||
|
; try to fix it. |
||||||
|
StrCpy $MUI_TEMP "$START_MENU" |
||||||
|
Delete "$SMPROGRAMS\$MUI_TEMP\Uninstall.lnk" |
||||||
|
@CPACK_NSIS_DELETE_ICONS_EXTRA@ |
||||||
|
|
||||||
|
;Delete empty start menu parent diretories |
||||||
|
StrCpy $MUI_TEMP "$SMPROGRAMS\$MUI_TEMP" |
||||||
|
|
||||||
|
secondStartMenuDeleteLoop: |
||||||
|
ClearErrors |
||||||
|
RMDir $MUI_TEMP |
||||||
|
GetFullPathName $MUI_TEMP "$MUI_TEMP\.." |
||||||
|
|
||||||
|
IfErrors secondStartMenuDeleteLoopDone |
||||||
|
|
||||||
|
StrCmp "$MUI_TEMP" "$SMPROGRAMS" secondStartMenuDeleteLoopDone secondStartMenuDeleteLoop |
||||||
|
secondStartMenuDeleteLoopDone: |
||||||
|
|
||||||
|
DeleteRegKey /ifempty SHCTX "Software\@CPACK_PACKAGE_VENDOR@\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" |
||||||
|
|
||||||
|
Push $INSTDIR\bin |
||||||
|
StrCmp $DO_NOT_ADD_TO_PATH_ "1" doNotRemoveFromPath 0 |
||||||
|
Call un.RemoveFromPath |
||||||
|
doNotRemoveFromPath: |
||||||
|
SectionEnd |
||||||
|
|
||||||
|
;-------------------------------- |
||||||
|
; determine admin versus local install |
||||||
|
; Is install for "AllUsers" or "JustMe"? |
||||||
|
; Default to "JustMe" - set to "AllUsers" if admin or on Win9x |
||||||
|
; This function is used for the very first "custom page" of the installer. |
||||||
|
; This custom page does not show up visibly, but it executes prior to the |
||||||
|
; first visible page and sets up $INSTDIR properly... |
||||||
|
; Choose different default installation folder based on SV_ALLUSERS... |
||||||
|
; "Program Files" for AllUsers, "My Documents" for JustMe... |
||||||
|
|
||||||
|
Function .onInit |
||||||
|
StrCmp "@CPACK_NSIS_ENABLE_UNINSTALL_BEFORE_INSTALL@" "ON" 0 inst |
||||||
|
|
||||||
|
ReadRegStr $0 HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "UninstallString" |
||||||
|
StrCmp $0 "" inst |
||||||
|
|
||||||
|
MessageBox MB_YESNOCANCEL|MB_ICONEXCLAMATION \ |
||||||
|
"@CPACK_NSIS_PACKAGE_NAME@ is already installed. $\n$\nDo you want to uninstall the old version before installing the new one?" \ |
||||||
|
IDYES uninst IDNO inst |
||||||
|
Abort |
||||||
|
|
||||||
|
;Run the uninstaller |
||||||
|
uninst: |
||||||
|
ClearErrors |
||||||
|
StrLen $2 "\Uninstall.exe" |
||||||
|
StrCpy $3 $0 -$2 # remove "\Uninstall.exe" from UninstallString to get path |
||||||
|
ExecWait '$0 _?=$3' ;Do not copy the uninstaller to a temp file |
||||||
|
|
||||||
|
IfErrors uninst_failed inst |
||||||
|
uninst_failed: |
||||||
|
MessageBox MB_OK|MB_ICONSTOP "Uninstall failed." |
||||||
|
Abort |
||||||
|
|
||||||
|
|
||||||
|
inst: |
||||||
|
; Reads components status for registry |
||||||
|
!insertmacro SectionList "InitSection" |
||||||
|
|
||||||
|
; check to see if /D has been used to change |
||||||
|
; the install directory by comparing it to the |
||||||
|
; install directory that is expected to be the |
||||||
|
; default |
||||||
|
StrCpy $IS_DEFAULT_INSTALLDIR 0 |
||||||
|
StrCmp "$INSTDIR" "@CPACK_NSIS_INSTALL_ROOT@\@CPACK_PACKAGE_INSTALL_DIRECTORY@" 0 +2 |
||||||
|
StrCpy $IS_DEFAULT_INSTALLDIR 1 |
||||||
|
|
||||||
|
StrCpy $SV_ALLUSERS "JustMe" |
||||||
|
; if default install dir then change the default |
||||||
|
; if it is installed for JustMe |
||||||
|
StrCmp "$IS_DEFAULT_INSTALLDIR" "1" 0 +2 |
||||||
|
StrCpy $INSTDIR "$DOCUMENTS\@CPACK_PACKAGE_INSTALL_DIRECTORY@" |
||||||
|
|
||||||
|
ClearErrors |
||||||
|
UserInfo::GetName |
||||||
|
IfErrors noLM |
||||||
|
Pop $0 |
||||||
|
UserInfo::GetAccountType |
||||||
|
Pop $1 |
||||||
|
StrCmp $1 "Admin" 0 +4 |
||||||
|
SetShellVarContext all |
||||||
|
;MessageBox MB_OK 'User "$0" is in the Admin group' |
||||||
|
StrCpy $SV_ALLUSERS "AllUsers" |
||||||
|
Goto done |
||||||
|
StrCmp $1 "Power" 0 +4 |
||||||
|
SetShellVarContext all |
||||||
|
;MessageBox MB_OK 'User "$0" is in the Power Users group' |
||||||
|
StrCpy $SV_ALLUSERS "AllUsers" |
||||||
|
Goto done |
||||||
|
|
||||||
|
noLM: |
||||||
|
StrCpy $SV_ALLUSERS "AllUsers" |
||||||
|
;Get installation folder from registry if available |
||||||
|
|
||||||
|
done: |
||||||
|
StrCmp $SV_ALLUSERS "AllUsers" 0 +3 |
||||||
|
StrCmp "$IS_DEFAULT_INSTALLDIR" "1" 0 +2 |
||||||
|
StrCpy $INSTDIR "@CPACK_NSIS_INSTALL_ROOT@\@CPACK_PACKAGE_INSTALL_DIRECTORY@" |
||||||
|
|
||||||
|
StrCmp "@CPACK_NSIS_MODIFY_PATH@" "ON" 0 noOptionsPage |
||||||
|
!insertmacro MUI_INSTALLOPTIONS_EXTRACT "NSIS.InstallOptions.ini" |
||||||
|
|
||||||
|
noOptionsPage: |
||||||
|
FunctionEnd |
@ -1,86 +1,245 @@ |
|||||||
Building i2pd for Windows |
Building i2pd on Windows |
||||||
========================= |
========================= |
||||||
|
|
||||||
!!! WARNING This file may be outdated. |
There are two approaches available to build i2pd on Windows. The best |
||||||
|
one depends on your needs and personal preferences. One is to use |
||||||
|
msys2 and [unix alike infrastructure](build_notes_unix.md). Another |
||||||
|
one is to use Visual Studio. While there might be no difference for |
||||||
|
end users of i2pd daemon, developers, however, shall be wary of |
||||||
|
differences in C++ name mangling between the two compilers when making |
||||||
|
a choice to be able to link their software against libi2pd. |
||||||
|
|
||||||
|
If you are a stranger to C++ with no development tools installed on |
||||||
|
your system and your only goal is to have i2pd up and running from the |
||||||
|
most recent source, consider using msys2. Although it relies on |
||||||
|
command line operations, it should be straight forward. |
||||||
|
|
||||||
|
In this guide, we will use CMake for both approaches and we will |
||||||
|
assume that you typically have your projects in C:\dev\ as your |
||||||
|
development location for the sake of convenience. Adjust paths |
||||||
|
accordingly if it is not the case. Note that msys uses unix-alike |
||||||
|
paths like /c/dev/ for C:\dev\. |
||||||
|
|
||||||
|
msys2 |
||||||
|
----- |
||||||
|
|
||||||
|
Get it from https://msys2.github.io and update it as described |
||||||
|
there. Use the installer appropriate for the bitness of your Windows |
||||||
|
OS. You will be able to build 32-bit applications if you install |
||||||
|
64-bit version of msys2. For 64-bit, use *mingw-w64-x86_64* prefix |
||||||
|
instead of *mingw-w64-i686* for the packages mentioned below, and use |
||||||
|
*/mingw64* as CMake find root. |
||||||
|
|
||||||
|
Install all prerequisites and download i2pd source: |
||||||
|
|
||||||
|
```bash |
||||||
|
pacman -S mingw-w64-i686-boost mingw-w64-i686-openssl mingw-w64-i686-gcc mingw-w64-i686-miniupnpc cmake git |
||||||
|
mkdir -p /c/dev/i2pd |
||||||
|
cd /c/dev/i2pd |
||||||
|
git clone https://github.com/PurpleI2P/i2pd.git |
||||||
|
cd i2pd |
||||||
|
``` |
||||||
|
|
||||||
|
Check with `git status` that you are on *openssl* branch. If it is not |
||||||
|
the case, do `git checkout openssl`. |
||||||
|
|
||||||
|
```sh |
||||||
|
git pull origin openssl --ff-only # to update sources if you are rebuilding after a while |
||||||
|
mkdir -p mingw32.build # CMake build folder |
||||||
|
cd mingw32.build |
||||||
|
export PATH=/mingw32/bin:/usr/bin # we need compiler on PATH which is usually heavily cluttered on Windows |
||||||
|
cmake ../build -G "Unix Makefiles" -DWITH_UPNP=ON -DWITH_PCH=ON \ |
||||||
|
-DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_INSTALL_PREFIX:PATH=../mingw32.stage -DCMAKE_FIND_ROOT_PATH=/mingw32 |
||||||
|
``` |
||||||
|
|
||||||
|
If your processor has |
||||||
|
[AES instruction set](https://en.wikipedia.org/wiki/AES_instruction_set), |
||||||
|
you may try adding `-DWITH_AESNI=ON`. No check is done however, it |
||||||
|
will compile but will crash with `Illegal instruction` if not supported. |
||||||
|
|
||||||
|
Make sure CMake found proper libraries and compiler. This might be the |
||||||
|
case if you have Strawberry Perl installed as it alters PATH and you |
||||||
|
failed to override it like mentioned above. You should see something |
||||||
|
like |
||||||
|
|
||||||
|
``` |
||||||
|
-- The C compiler identification is GNU 5.2.0 |
||||||
|
-- The CXX compiler identification is GNU 5.2.0 |
||||||
|
-- Check for working C compiler: /mingw32/bin/gcc.exe |
||||||
|
-- Check for working C compiler: /mingw32/bin/gcc.exe -- works |
||||||
|
-- Detecting C compiler ABI info |
||||||
|
-- Detecting C compiler ABI info - done |
||||||
|
-- Detecting C compile features |
||||||
|
-- Detecting C compile features - done |
||||||
|
-- Check for working CXX compiler: /mingw32/bin/c++.exe |
||||||
|
-- Check for working CXX compiler: /mingw32/bin/c++.exe -- works |
||||||
|
-- Detecting CXX compiler ABI info |
||||||
|
-- Detecting CXX compiler ABI info - done |
||||||
|
-- Detecting CXX compile features |
||||||
|
-- Detecting CXX compile features - done |
||||||
|
-- Performing Test CXX11_SUPPORTED |
||||||
|
-- Performing Test CXX11_SUPPORTED - Success |
||||||
|
-- Performing Test CXX0X_SUPPORTED |
||||||
|
-- Performing Test CXX0X_SUPPORTED - Success |
||||||
|
-- Looking for include file pthread.h |
||||||
|
-- Looking for include file pthread.h - found |
||||||
|
-- Looking for pthread_create |
||||||
|
-- Looking for pthread_create - found |
||||||
|
-- Found Threads: TRUE |
||||||
|
-- Boost version: 1.59.0 |
||||||
|
-- Found the following Boost libraries: |
||||||
|
-- system |
||||||
|
-- filesystem |
||||||
|
-- regex |
||||||
|
-- program_options |
||||||
|
-- date_time |
||||||
|
-- thread |
||||||
|
-- chrono |
||||||
|
-- Found OpenSSL: /mingw32/lib/libssl.dll.a;/mingw32/lib/libcrypto.dll.a (found version "1.0.2d") |
||||||
|
-- Found MiniUPnP headers: /mingw32/include |
||||||
|
-- Found ZLIB: /mingw32/lib/libz.dll.a (found version "1.2.8") |
||||||
|
-- --------------------------------------- |
||||||
|
-- Build type : RelWithDebInfo |
||||||
|
-- Compiler vendor : GNU |
||||||
|
-- Compiler version : 5.2.0 |
||||||
|
-- Compiler path : /mingw32/bin/c++.exe |
||||||
|
-- Install prefix: : ../mingw32.stage |
||||||
|
-- Options: |
||||||
|
-- AESNI : OFF |
||||||
|
-- HARDENING : OFF |
||||||
|
-- LIBRARY : ON |
||||||
|
-- BINARY : ON |
||||||
|
-- STATIC BUILD : OFF |
||||||
|
-- UPnP : ON |
||||||
|
-- PCH : ON |
||||||
|
-- --------------------------------------- |
||||||
|
-- Configuring done |
||||||
|
-- Generating done |
||||||
|
-- Build files have been written to: /c/dev/i2pd/i2pd/mingw32.build |
||||||
|
``` |
||||||
|
|
||||||
|
Now it is time to compile everything. If you have a multicore processor |
||||||
|
you can add `-j` flag. |
||||||
|
|
||||||
|
make -j4 install |
||||||
|
|
||||||
|
You should be able to run ./i2pd . If you need to start from the new |
||||||
|
shell, consider starting *MinGW-w64 Win32 Shell* instead of *MSYS2 Shell* as |
||||||
|
it adds`/minw32/bin` to the PATH. |
||||||
|
|
||||||
|
### Caveats |
||||||
|
|
||||||
|
It is important to restrict PATH as described above. If you have |
||||||
|
Strawberry Perl and/or Mercurial installed, it will pick up gcc & |
||||||
|
openssl from the wrong places. |
||||||
|
|
||||||
|
If you do use precompiled headers to speed up compilation |
||||||
|
(recommended), things can go wrong if compiler options have changed |
||||||
|
for whatever reason. Just delete `stdafx.h.gch` found in your build |
||||||
|
folder, note the file extension. |
||||||
|
|
||||||
|
If you are an Arch Linux user, refrain from updating system with |
||||||
|
`pacman -Syu`. Always update runtime separately as described on the |
||||||
|
home page, otherwise you might end up with DLLs incompatibility |
||||||
|
problems. |
||||||
|
|
||||||
|
|
||||||
|
Using Visual Studio |
||||||
|
------------------- |
||||||
|
|
||||||
Requirements for building: |
Requirements for building: |
||||||
|
|
||||||
* Visual Studio 2013 (tested with VS2013 Update 1, Update 3, and Update 4) |
* [CMake](https://cmake.org/) (tested with 3.1.3) |
||||||
* Boost (tested with 1.56, 1.57, and 1.58) |
* [Visual Studio Community Edition](https://www.visualstudio.com/en-us/products/visual-studio-community-vs.aspx) (tested with VS2013 Update 4) |
||||||
* Crypto++ (tested with 5.6.2) |
* [Boost](http://www.boost.org/) (tested with 1.59) |
||||||
|
* Optionally [MiniUPnP](http://miniupnp.free.f) (tested with 1.9), we need only few client headers |
||||||
|
* OpenSSL (tested with 1.0.1p and 1.0.2e), if building from sources (recommended), you'll need as well |
||||||
|
* [Netwide assembler](www.nasm.us) |
||||||
|
* Strawberry Perl or ActiveState Perl, do NOT try msys2 perl, it won't work |
||||||
|
|
||||||
|
|
||||||
Building Boost (32-bit) |
## Building Boost |
||||||
----------------------- |
|
||||||
|
|
||||||
Open a Visual Studio x86 command prompt and run the following: |
Open a Command Prompt (there is no need to start Visual Studio command |
||||||
|
prompt to build Boost) and run the following: |
||||||
|
|
||||||
cd C:\path\to\boost\sources |
cd C:\dev\boost |
||||||
bootstrap |
bootstrap |
||||||
b2 toolset=msvc-12.0 --build-type=complete --libdir=C:\Boost\lib\Win32 install --with-filesystem --with-program_options --with-regex --with-date_time |
b2 toolset=msvc-12.0 --build-type=complete --with-filesystem --with-program_options --with-regex --with-date_time |
||||||
|
|
||||||
|
If you are on 64-bit Windows and you want to build 64-bit version as well |
||||||
|
|
||||||
Building Boost (64-bit) |
b2 toolset=msvc-12.0 --build-type=complete --stagedir=stage64 address-model=64 --with-filesystem --with-program_options --with-regex --with-date_time |
||||||
----------------------- |
|
||||||
|
|
||||||
Open a Visual Studio x64 command prompt and run the following: |
After Boost is compiled, set the environment variable `BOOST_ROOT` to |
||||||
|
the directory Boost was unpacked to, e.g., C:\dev\boost. |
||||||
|
|
||||||
cd C:\path\to\boost\sources |
If you are planning on building only particular variant, e.g. Debug |
||||||
bootstrap |
only and static linking, and/or you are out of space/time, you might |
||||||
b2 toolset=msvc-12.0 --build-type=complete --libdir=C:\Boost\lib\x64 architecture=x86 address-model=64 install --with-filesystem --with-program_options --with-regex --with-date_time |
consider `--build-type=minimal`. Take a look at |
||||||
|
[appveyor.yml](../appveyor.yml) for details on how test builds are done. |
||||||
After Boost is compiled, set the environment variable `BOOST` to the directory |
|
||||||
Boost was installed to. If you followed the instructions outlined here, you |
|
||||||
should set it to `C:\Boost`. Additionally, set the BOOSTVER variable to the |
|
||||||
version of Boost that you're using, but instead of a '.' use a '_'. For |
|
||||||
example, I have `BOOSTVER` set to `1_58`. |
|
||||||
|
|
||||||
Building Crypto++ |
Building OpenSSL |
||||||
----------------- |
----------------- |
||||||
|
|
||||||
* Open the crypttest Solution in VS2013 |
Download OpenSSL, e.g. with git |
||||||
* Visual Studio will ask to update the Solution/Project. Allow it. |
|
||||||
* Build the `cryptopp` project, both the Debug and Release targets and for both |
|
||||||
Win32 and x64. |
|
||||||
* Create a folder called `cryptopp` in the crypto++ source directory, then copy |
|
||||||
the header files to this new directory. |
|
||||||
* Set the `CRYPTOPP` environment variable pointing to the Crypto++ source directory. |
|
||||||
|
|
||||||
|
git clone https://github.com/openssl/openssl.git |
||||||
|
cd openssl |
||||||
|
git checkout OpenSSL_1_0_1p |
||||||
|
|
||||||
Building i2pd |
Now open Visual Studio command prompt and change directory to that with OpenSSL |
||||||
|
|
||||||
|
set "PATH=%PATH%;C:\Program Files (x86)\nasm" |
||||||
|
perl Configure VC-WIN32 --prefix=c:\OpenSSL-Win32 |
||||||
|
ms\do_nasm |
||||||
|
nmake -f ms\ntdll.mak |
||||||
|
nmake -f ms\ntdll.mak install |
||||||
|
|
||||||
|
You should have it installed into C:\OpenSSL-Win32 by now. |
||||||
|
|
||||||
|
Note that you might consider providing `-DOPENSSL_ROOT_DIR` to CMake |
||||||
|
and/or create a symlink (with mklink /J) to C:\OpenSSL if you plan on |
||||||
|
maintaining multiple versions, e.g. 64 bit and/or |
||||||
|
static/shared. Consult `C:\Program Files |
||||||
|
(x86)\CMake\share\cmake-3.3\Modules\FindOpenSSL.cmake` for details. |
||||||
|
|
||||||
|
Get miniupnpc |
||||||
------------- |
------------- |
||||||
|
|
||||||
## Prep work ## |
If you are behind a UPnP enabled router and don't feel like manually |
||||||
|
configuring port forwarding, you should consider using |
||||||
|
[MiniUPnP](http://miniupnp.free.fr) client. I2pd can be built capable |
||||||
|
of using miniupnpc shared library (DLL) to open up necessary |
||||||
|
port. You'd want to have include headers around to build i2pd with |
||||||
|
support for this. Unpack client source code in a sibling folder, |
||||||
|
e.g. C:\dev\miniupnpc . You may want to remove version number from |
||||||
|
folder name included in downloaded archive. |
||||||
|
|
||||||
|
Note that you might need to build DLL yourself for 64-bit systems |
||||||
|
using msys2 as 64-bit DLLs are not provided by the project. |
||||||
|
|
||||||
I strongly advise setting up your own `INCLUDES` and `LIBS` instead of relying |
|
||||||
on the settings in the i2pd project file. By using your own settings, if the |
|
||||||
i2pd devs change the paths in the project file, your builds will still work. |
|
||||||
|
|
||||||
To do this, create or edit the file |
Creating Visual Studio project |
||||||
`%localappdata%\Microsoft\MSBuild\v4.0\Microsoft.Cpp.Win32.user`. |
------------------------------ |
||||||
|
|
||||||
For comparison, my file is reproduced below: |
Start CMake GUI, navigate to i2pd directory, choose building directory, e.g. ./out, and configure options. |
||||||
|
|
||||||
<?xml version="1.0" encoding="utf-8"?> |
Alternatively, if you feel adventurous, try that from the command line |
||||||
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> |
|
||||||
<ImportGroup Label="PropertySheets"> |
|
||||||
</ImportGroup> |
|
||||||
<PropertyGroup Label="UserMacros" /> |
|
||||||
<PropertyGroup> |
|
||||||
<LibraryPath>$(CRYPTOPP)\$(Platform)\Output\$(Configuration);$(BOOST)\lib\$(Platform);$(LibraryPath)</LibraryPath> |
|
||||||
<IncludePath>$(CRYPTOPP);$(BOOST)\include\boost-$(BOOSTVER);$(IncludePath)</IncludePath> |
|
||||||
</PropertyGroup> |
|
||||||
<ItemDefinitionGroup /> |
|
||||||
<ItemGroup /> |
|
||||||
</Project> |
|
||||||
|
|
||||||
|
``` |
||||||
|
cd <i2pd_dir> |
||||||
|
mkdir out |
||||||
|
cd out |
||||||
|
cmake ..\build -G "Visual Studio 12 2013" -DWITH_UPNP=ON -DWITH_PCH=ON -DCMAKE_INSTALL_PREFIX:PATH=C:\dev\Debug_Win32_stage |
||||||
|
``` |
||||||
|
|
||||||
If you want to build x64 binaries as well, you'll want to edit or create the |
WITH_UPNP will stay off, if necessary files are not found. |
||||||
file `%localappdata%\Microsoft\MSBuild\v4.0\Microsoft.Cpp.x64.user`. If you |
|
||||||
followed the steps outlined earlier you can copy (or link) the win32 file to |
|
||||||
the x64 one. |
|
||||||
|
|
||||||
## Anti-Climatic End ## |
Building i2pd |
||||||
|
------------- |
||||||
|
|
||||||
After following the above instructions, you'll be able to build Debug Win32, |
You can open generated solution/project with Visual Studio and build |
||||||
Debug x64, Release Win32, and Release x64 i2pd binaries. |
from there, alternatively you can use `cmake --build . --config Release --target install` or |
||||||
|
[MSBuild tool](https://msdn.microsoft.com/en-us/library/dd293626.aspx) |
||||||
|
`msbuild i2pd.sln /p:Configuration=Release`. |
||||||
|
Loading…
Reference in new issue