summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CMakeLists.txt174
-rw-r--r--Config.bat4
-rw-r--r--NSIS.template.in825
-rw-r--r--data/CMakeLists.txt2
-rw-r--r--docs/CMakeLists.txt15
-rw-r--r--docs/README750
-rw-r--r--docs/WIN32.txt418
-rw-r--r--include/CMakeLists.txt11
-rw-r--r--install.js24
-rw-r--r--lang/CMakeLists.txt55
-rw-r--r--src/CMakeLists.txt10
-rw-r--r--src/base64.c2
-rw-r--r--src/bin/CMakeLists.txt8
-rw-r--r--src/channels.c6
-rw-r--r--src/core/CMakeLists.txt2
-rw-r--r--src/messages.c2
-rw-r--r--src/modules/CMakeLists.txt2
-rw-r--r--src/process.c12
-rw-r--r--src/protocol/CMakeLists.txt2
-rw-r--r--src/tools/CMakeLists.txt10
-rw-r--r--src/tools/db-convert.c2
-rw-r--r--src/users.c4
22 files changed, 1685 insertions, 655 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index b44cd193c..ff26b5cc9 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,14 +1,20 @@
# This usage of CMake requires at least version 2.4 (checks are made to determine what to use when certain versions lack functions)
cmake_minimum_required(VERSION 2.4 FATAL_ERROR)
+if(COMMAND cmake_policy)
+ cmake_policy(SET CMP0003 NEW)
+endif(COMMAND cmake_policy)
# Detect is we are using CMake 2.6 or better, these versions include functions that require less work than CMake 2.4 does
if(${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} GREATER 2.5)
set(CMAKE26_OR_BETTER TRUE)
+ set(CMAKE244_OR_BETTER TRUE)
+ set(CMAKE242_OR_BETTER TRUE)
else(${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} GREATER 2.5)
set(CMAKE26_OR_BETTER FALSE)
# Also detect if we are using CMake 2.4.4 or better, the CheckCXXCompilerFlag module is non-existant in earlier versions
if(${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}.${CMAKE_PATCH_VERSION} GREATER 2.4.3)
set(CMAKE244_OR_BETTER TRUE)
+ set(CMAKE242_OR_BETTER TRUE)
else(${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}.${CMAKE_PATCH_VERSION} GREATER 2.4.3)
set(CMAKE244_OR_BETTER FALSE)
# ALSO detect if we are using CMake 2.4.2 or better, the APPEND sub-command of list() is non-existant in earlier versions
@@ -62,7 +68,7 @@ if(MSVC)
string(REPLACE "/GX " "" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS})
string(REPLACE "/W3 " "" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS})
# Set the compile flags to have warnings on the max setting (but disable a few annoying ones), exception handling turned on, the proper defines, and the include directories
- set(CXXFLAGS "${CXXFLAGS} /W4 /wd4251 /wd4706 /wd4800 /EHs /D_WIN32 /DMSVCPP /I\"${Anope_SOURCE_DIR}/include\" /I\"${Anope_BINARY_DIR}/include\" /I\"${Anope_BINARY_DIR}/lang\"")
+ set(CXXFLAGS "${CXXFLAGS} /W4 /wd4251 /wd4706 /wd4800 /wd4996 /EHs /D_WIN32 /DMSVCPP /D_CRT_SECURE_NO_WARNINGS /I\"${Anope_SOURCE_DIR}/include\" /I\"${Anope_BINARY_DIR}/include\" /I\"${Anope_BINARY_DIR}/lang\"")
# Set the module-specific compile flags to include a define for module compiling
set(MODULE_CXXFLAGS "${CXXFLAGS} /DMODULE_COMPILE")
# Otherwise, we're not using Visual Studio
@@ -275,37 +281,39 @@ if(PERL AND USE_RUN_CC_PL)
set(CMAKE_CXX_CREATE_SHARED_MODULE "${PERL} ${Anope_SOURCE_DIR}/run-cc.pl ${CMAKE_CXX_CREATE_SHARED_MODULE}")
endif(PERL AND USE_RUN_CC_PL)
-# If a INSTDIR wasn't passed in to CMake, set the default to the services directory under the user's home directory
-if(NOT INSTDIR)
- set(INSTDIR "$ENV{HOME}/services")
-endif(NOT INSTDIR)
-
-# Set Anope's data install location to be the data directory under the install directory
-set(DATADIR "${INSTDIR}/data")
-
-# Only process Anope's version on Windows, it's needed for win32.rc as well as version branding at link time
+# If a INSTDIR was passed in to CMake, use it as the install prefix, otherwise set the default install prefix to the services directory under the user's home directory
+if(INSTDIR)
+ set(CMAKE_INSTALL_PREFIX "${INSTDIR}")
+else(INSTDIR)
+ set(CMAKE_INSTALL_PREFIX "$ENV{HOME}/services")
+endif(INSTDIR)
+
+# Version number processing
+# Find all lines in version.log that start with VERSION_
+read_from_file(${Anope_SOURCE_DIR}/version.log "^VERSION_" VERSIONS)
+# Iterate through the strings found
+foreach(VERSION_STR ${VERSIONS})
+ # Get the length of the string
+ string(LENGTH ${VERSION_STR} VERSION_LEN)
+ # Subtract 16 from the string's length (8 for VERSION_, 5 more for the type, 2 for the space and leading quote, 1 for the trailing quote)
+ math(EXPR VERSION_NUM_LEN "${VERSION_LEN} - 16")
+ # Extract the type from the string
+ string(SUBSTRING ${VERSION_STR} 8 5 VERSION_TYPE)
+ # Extract the actual value from the string
+ string(SUBSTRING ${VERSION_STR} 15 ${VERSION_NUM_LEN} VERSION)
+ # Set the version type to the value extract from above
+ set(VERSION_${VERSION_TYPE} ${VERSION})
+endforeach(VERSION_STR ${VERSIONS})
+
+# Set the version variables based on what was found above
+set(VERSION_COMMA "${VERSION_MAJOR},${VERSION_MINOR},${VERSION_PATCH},${VERSION_BUILD}")
+set(VERSION_DOTTED_NOBUILD "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}")
+set(VERSION_DOTTED "${VERSION_DOTTED_NOBUILD}.${VERSION_BUILD}")
+set(VERSION_FULL "${VERSION_DOTTED}${VERSION_EXTRA}")
+set(VERSION_FULL_NOBUILD "${VERSION_DOTTED_NOBUILD}${VERSION_EXTRA}")
+
+# Only do the following for Windows
if(WIN32)
- # Find all lines in version.log that start with VERSION_
- read_from_file(${Anope_SOURCE_DIR}/version.log "^VERSION_" VERSIONS)
- # Iterate through the strings found
- foreach(VERSION_STR ${VERSIONS})
- # Get the length of the string
- string(LENGTH ${VERSION_STR} VERSION_LEN)
- # Subtract 16 from the string's length (8 for VERSION_, 5 more for the type, 2 for the space and leading quote, 1 for the trailing quote)
- math(EXPR VERSION_NUM_LEN "${VERSION_LEN} - 16")
- # Extract the type from the string
- string(SUBSTRING ${VERSION_STR} 8 5 VERSION_TYPE)
- # Extract the actual value from the string
- string(SUBSTRING ${VERSION_STR} 15 ${VERSION_NUM_LEN} VERSION)
- # Set the version type to the value extract from above
- set(VERSION_${VERSION_TYPE} ${VERSION})
- endforeach(VERSION_STR ${VERSIONS})
-
- # Set the version variables based on what was found above
- set(VERSION_COMMA "${VERSION_MAJOR},${VERSION_MINOR},${VERSION_PATCH},${VERSION_BUILD}")
- set(VERSION_DOTTED "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}.${VERSION_BUILD}")
- set(VERSION_FULL "${VERSION_DOTTED}${VERSION_EXTRA}")
-
# Generate the win32.rc file using the above variables
configure_file(${Anope_SOURCE_DIR}/src/win32.rc.cmake ${Anope_BINARY_DIR}/src/win32.rc)
endif(WIN32)
@@ -463,20 +471,110 @@ macro(calculate_depends SRC)
endif(HEADERS)
endmacro(calculate_depends)
+# A macro to update the environment variable CPACK_IGNORED_FILES which contains a list of files for CPack to ignore
+macro(add_to_cpack_ignored_files ITEM)
+ # Temporary copy of the orignal item
+ set(REAL_ITEM "${ITEM}")
+ # If we have 2+ arguments, assume that the second one was something like TRUE (doesn't matter really) and convert periods so they will be \\. for CPack
+ if(${ARGC} GREATER 1)
+ string(REPLACE "." "\\\\." REAL_ITEM ${REAL_ITEM})
+ endif(${ARGC} GREATER 1)
+ # If the environment variable is already defined, just tack the item to the end
+ if(DEFINED ENV{CPACK_IGNORED_FILES})
+ set(ENV{CPACK_IGNORED_FILES} "$ENV{CPACK_IGNORED_FILES};${REAL_ITEM}")
+ # Otherwise set the environment variable to the item
+ else(DEFINED ENV{CPACK_IGNORED_FILES})
+ set(ENV{CPACK_IGNORED_FILES} "${REAL_ITEM}")
+ endif(DEFINED ENV{CPACK_IGNORED_FILES})
+endmacro(add_to_cpack_ignored_files)
+
+# Add the initial files to ignore which will be ignored regardless of if you are building in-source or out-of-source
+add_to_cpack_ignored_files(".git\;config.cache\;.svn\;CMakeFiles" TRUE)
+# If the two directories are the same, we are building in-source, thus we need to ignore more files from the build
+if(${Anope_SOURCE_DIR} STREQUAL ${Anope_BINARY_DIR})
+ # This variable is used in the sub-directories to determine if we are building in-source
+ set(IN_SOURCE TRUE)
+ # Add the files that need their periods converted
+ add_to_cpack_ignored_files("Makefile\;cmake_install.cmake\;sysconf.h$\;CMakeCache.txt\;install_manifest.txt" TRUE)
+ # Add the files we don't want the periods converted for
+ add_to_cpack_ignored_files(".\\\\\\\\.so$;CPack.;anope-${VERSION_FULL_NOBUILD}-source\\\\\\\\..")
+ # If using Visual Studio, add these files as well
+ if(MSVC)
+ add_to_cpack_ignored_files(".vcproj$\;.sln$\;.ncb$\;.suo$\;.dir$\;.ilk$\;.exp$\;.pdb$\;.lib$\;/debug$;/release$;/relwithdebinfo$;/minsizerel$" TRUE)
+ endif(MSVC)
+# Otherwise, the two directories are different and we are building out-of-source
+else(${Anope_SOURCE_DIR} STREQUAL ${Anope_BINARY_DIR})
+ set(IN_SOURCE FALSE)
+endif(${Anope_SOURCE_DIR} STREQUAL ${Anope_BINARY_DIR})
+
# Go into the following directories and run their CMakeLists.txt as well
add_subdirectory(data)
+add_subdirectory(docs)
add_subdirectory(lang)
add_subdirectory(src)
add_subdirectory(include)
+# Get the filename of the Anope binary, to use later
+get_target_property(SERVICES_BINARY ${PROGRAM_NAME} LOCATION)
+get_filename_component(SERVICES_BINARY ${SERVICES_BINARY} NAME)
+
# At install time, create the following additional directories
-install(CODE "file(MAKE_DIRECTORY \"${DATADIR}/backups\")")
-install(CODE "file(MAKE_DIRECTORY \"${DATADIR}/logs\")")
-install(CODE "file(MAKE_DIRECTORY \"${DATADIR}/modules/runtime\")")
+install(CODE "file(MAKE_DIRECTORY \"\${CMAKE_INSTALL_PREFIX}/data/backups\")")
+install(CODE "file(MAKE_DIRECTORY \"\${CMAKE_INSTALL_PREFIX}/data/logs\")")
+install(CODE "file(MAKE_DIRECTORY \"\${CMAKE_INSTALL_PREFIX}/data/modules/runtime\")")
# On non-Windows platforms, if RUNGROUP is set, change the permissions of the below directories, as well as the group of the data directory
if(NOT WIN32 AND RUNGROUP)
- install(CODE "execute_process(COMMAND ${CHMOD} 2775 \"${DATADIR}/backups\")")
- install(CODE "execute_process(COMMAND ${CHMOD} 2775 \"${DATADIR}/logs\")")
- install(CODE "execute_process(COMMAND ${CHMOD} 2775 \"${DATADIR}/modules/runtime\")")
- install(CODE "execute_process(COMMAND ${CHGRP} -R ${RUNGROUP} \"${DATADIR}\")")
+ install(CODE "execute_process(COMMAND ${CHMOD} 2775 \"\${CMAKE_INSTALL_PREFIX}/data/backups\")")
+ install(CODE "execute_process(COMMAND ${CHMOD} 2775 \"\${CMAKE_INSTALL_PREFIX}/data/logs\")")
+ install(CODE "execute_process(COMMAND ${CHMOD} 2775 \"\${CMAKE_INSTALL_PREFIX}/data/modules/runtime\")")
+ install(CODE "execute_process(COMMAND ${CHGRP} -R ${RUNGROUP} \"\${CMAKE_INSTALL_PREFIX}\")")
endif(NOT WIN32 AND RUNGROUP)
+# On Windows platforms, install extra files
+if(WIN32)
+ install(FILES ${Anope_SOURCE_DIR}/anope.bat
+ ${Anope_SOURCE_DIR}/Changes
+ ${Anope_SOURCE_DIR}/Changes.conf
+ ${Anope_SOURCE_DIR}/Changes.lang
+ DESTINATION .
+ )
+endif(WIN32)
+
+# Only process the CPack section if we have CPack
+if(EXISTS "${CMAKE_ROOT}/Modules/CPack.cmake")
+ # Override the module include path to include our directory, as we are using our own version of the NSIS template
+ set(CMAKE_MODULE_PATH ${Anope_SOURCE_DIR})
+ # Various options for CPack
+ set(CPACK_PACKAGE_NAME "Anope IRC Services")
+ set(CPACK_PACKAGE_VENDOR "Anope Team")
+ set(CPACK_PACKAGE_VERSION_MAJOR ${VERSION_MAJOR})
+ set(CPACK_PACKAGE_VERSION_MINOR ${VERSION_MINOR})
+ set(CPACK_PACKAGE_VERSION_PATCH "${VERSION_PATCH}${VERSION_EXTRA}")
+ set(CPACK_PACKAGE_FILE_NAME "anope-${VERSION_FULL_NOBUILD}")
+ set(CPACK_RESOURCE_FILE_LICENSE "${Anope_SOURCE_DIR}/docs/COPYING")
+ # The following doesn't actually do anything. :(
+ #set(CPACK_RESOURCE_FILE_README "${Anope_SOURCE_DIR}/docs/README")
+ # The following is primarily for NSIS
+ if(WIN32)
+ set(CPACK_GENERATOR "NSIS")
+ set(CPACK_PACKAGE_INSTALL_DIRECTORY "Anope")
+ set(CPACK_PACKAGE_EXECUTABLES "")
+ set(CPACK_NSIS_MENU_LINKS
+ "${SERVICES_BINARY}" "Anope IRC Services"
+ "anope.bat\\\" \\\"-debug -nofork" "Anope IRC Services (Debug and Window Logging)"
+ "anope.bat\\\" \\\"-nofork" "Anope IRC Services (Window Logging)"
+ "anope.bat\\\" \\\"-nothird" "Anope IRC Services (No Third Party Modules)"
+ "http://www.anope.org" "Anope Web Site"
+ )
+ # The following doesn't work, but a bug report has been filed about it
+ #set(CPACK_CREATE_DESKTOP_LINK_${SERVICES_BINARY} TRUE)
+ set(CPACK_NSIS_MUI_ICON "${Anope_SOURCE_DIR}/src\\\\anope-icon.ico")
+ set(CPACK_NSIS_MUI_UNIICON "${Anope_SOURCE_DIR}/src\\\\anope-icon.ico")
+ set(CPACK_NSIS_INSTALLED_ICON_NAME "${SERVICES_BINARY}")
+ set(CPACK_NSIS_URL_INFO_ABOUT "http://www.anope.org")
+ set(CPACK_NSIS_COMPRESSOR "/SOLID lzma")
+ endif(WIN32)
+ set(CPACK_SOURCE_PACKAGE_FILE_NAME "anope-${VERSION_FULL_NOBUILD}-source")
+ set(CPACK_SOURCE_IGNORE_FILES "$ENV{CPACK_IGNORED_FILES}")
+ set(CPACK_MONOLITHIC_INSTALL TRUE)
+ include(CPack)
+endif(EXISTS "${CMAKE_ROOT}/Modules/CPack.cmake")
diff --git a/Config.bat b/Config.bat
index 96501a98c..7205c91ef 100644
--- a/Config.bat
+++ b/Config.bat
@@ -1,3 +1,3 @@
@echo off
-cscript /nologo install.js
-
+cscript /nologo %~dp0\install.js
+pause
diff --git a/NSIS.template.in b/NSIS.template.in
new file mode 100644
index 000000000..a9c91a2b7
--- /dev/null
+++ b/NSIS.template.in
@@ -0,0 +1,825 @@
+; CPack install script designed for a nmake build
+
+;--------------------------------
+; You must define these values
+
+ !define VERSION "@CPACK_PACKAGE_VERSION@"
+ !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
+
+;--------------------------------
+;Include Modern UI
+
+ !include "MUI2.nsh"
+
+ ;Default installation folder
+ InstallDir "$PROGRAMFILES\@CPACK_PACKAGE_INSTALL_DIRECTORY@"
+
+;--------------------------------
+;General
+
+ ;Name and file
+ Name "@CPACK_PACKAGE_NAME@ @CPACK_PACKAGE_VERSION@"
+ OutFile "@CPACK_TOPLEVEL_DIRECTORY@/@CPACK_OUTPUT_FILE_NAME@"
+
+ ;Set compression
+ SetCompressor @CPACK_NSIS_COMPRESSOR@
+
+@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_NAME@\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_NAME@\Components\${SecName}" \
+ "Installed" 0
+ Goto "exit_${SecName}"
+
+ "leave_${SecName}:"
+ ;Section is selected:
+ WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_NAME@\Components\${SecName}" \
+ "Installed" 1
+
+ "exit_${SecName}:"
+!macroend
+
+!macro RemoveSection 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_ABORTWARNING
+
+;----------------------------------------
+; 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
+ 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:
+ ReadRegStr $1 ${WriteEnvStr_RegKey} "PATH"
+ StrCmp $1 "" AddToPath_NTdoIt
+ Push $1
+ Call Trim
+ Pop $1
+ StrCpy $0 "$1;$0"
+ AddToPath_NTdoIt:
+ WriteRegExpandStr ${WriteEnvStr_RegKey} "PATH" $0
+ 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:
+ ReadRegStr $1 ${WriteEnvStr_RegKey} "PATH"
+ 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
+
+ WriteRegExpandStr ${WriteEnvStr_RegKey} "PATH" $3
+ 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_NAME@" \
+ "$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@
+
+;--------------------------------
+;Pages
+ !define MUI_LANGDLL_REGISTRY_ROOT "SHCTX"
+ !define MUI_LANGDLL_REGISTRY_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_NAME@"
+ !define MUI_LANGDLL_REGISTRY_VALUENAME "NSIS:Language"
+
+ !insertmacro MUI_PAGE_WELCOME
+
+ !insertmacro MUI_PAGE_LICENSE "@CPACK_RESOURCE_FILE_LICENSE@"
+ !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"
+ !insertmacro MUI_PAGE_STARTMENU Application $STARTMENU_FOLDER
+
+ @CPACK_NSIS_PAGE_COMPONENTS@
+
+ !insertmacro MUI_PAGE_INSTFILES
+
+ !define MUI_FINISHPAGE_SHOWREADME "$INSTDIR\docs\README.txt"
+ !insertmacro MUI_PAGE_FINISH
+
+ !insertmacro MUI_UNPAGE_CONFIRM
+ !insertmacro MUI_UNPAGE_INSTFILES
+
+;--------------------------------
+;Languages
+
+ !insertmacro MUI_LANGUAGE "Dutch"
+ !insertmacro MUI_LANGUAGE "English"
+ !insertmacro MUI_LANGUAGE "French"
+ !insertmacro MUI_LANGUAGE "German"
+ !insertmacro MUI_LANGUAGE "Italian"
+ !insertmacro MUI_LANGUAGE "Portuguese"
+ !insertmacro MUI_LANGUAGE "Spanish"
+
+;--------------------------------
+;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_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_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"
+
+ ; 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
+
+@CPACK_NSIS_EXTRA_INSTALL_COMMANDS@
+
+ !insertmacro MUI_STARTMENU_WRITE_END
+
+SectionEnd
+
+;--------------------------------
+; 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:
+
+ !insertmacro MUI_UNGETLANGUAGE
+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_NAME@" "StartMenu"
+ ;MessageBox MB_OK "Start menu is in: $START_MENU"
+ ReadRegStr $DO_NOT_ADD_TO_PATH SHCTX \
+ "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_NAME@" "DoNotAddToPath"
+ ReadRegStr $ADD_TO_PATH_ALL_USERS SHCTX \
+ "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_NAME@" "AddToPathAllUsers"
+ ReadRegStr $ADD_TO_PATH_CURRENT_USER SHCTX \
+ "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_NAME@" "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_NAME@" "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_NAME@"
+
+ ;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"
+
+ !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
+ !insertmacro MUI_LANGDLL_DISPLAY
+ ; Reads components status for registry
+ !insertmacro SectionList "InitSection"
+
+ StrCpy $SV_ALLUSERS "JustMe"
+ StrCpy $INSTDIR "$DOCUMENTS\@CPACK_PACKAGE_INSTALL_DIRECTORY@"
+
+ 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'
+ StrCpy $SV_ALLUSERS "AllUsers"
+ Goto done
+ StrCmp $1 "Power" 0 +3
+ 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 +2
+ StrCpy $INSTDIR "$PROGRAMFILES\@CPACK_PACKAGE_INSTALL_DIRECTORY@"
+
+FunctionEnd
diff --git a/data/CMakeLists.txt b/data/CMakeLists.txt
index e7f346a25..6c49d2890 100644
--- a/data/CMakeLists.txt
+++ b/data/CMakeLists.txt
@@ -2,5 +2,5 @@
# NOTE: I would've had this just find all files in the directory, but that would include files not needed (like this file)
set(DATA example.chk example.conf)
install(FILES ${DATA}
- DESTINATION "${DATADIR}"
+ DESTINATION data
)
diff --git a/docs/CMakeLists.txt b/docs/CMakeLists.txt
new file mode 100644
index 000000000..24b4eb85d
--- /dev/null
+++ b/docs/CMakeLists.txt
@@ -0,0 +1,15 @@
+# We only need to install these docs on Windows as most Windows installations will be binary, not source
+if(WIN32)
+ # Only install given files from this directory
+ # NOTE: I would've had this just find all files in the directory, but that would include files not needed (like this file)
+ execute_process(COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/README ${CMAKE_CURRENT_BINARY_DIR}/README.txt)
+ if(IN_SOURCE)
+ # Add README.txt to list of files for CPack to ignore
+ add_to_cpack_ignored_files("README.txt$" TRUE)
+ endif(IN_SOURCE)
+ set(DOCS DEFCON FAQ INSTALL MODULES NEWS OLDCHANGES PROXY ${CMAKE_CURRENT_BINARY_DIR}/README.txt WIN32.txt)
+ install(FILES ${DOCS}
+ DESTINATION docs
+ )
+ set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${CMAKE_CURRENT_BINARY_DIR}/README.txt")
+endif(WIN32)
diff --git a/docs/README b/docs/README
index fb238f450..6371f9231 100644
--- a/docs/README
+++ b/docs/README
@@ -1,375 +1,375 @@
-Anope -- a set of IRC services for IRC networks
------------------------------------------------
-
-Anope is 2003-2008 Anope Team <info@anope.org>.
-Based on Epona 2000-2002 PegSoft <epona@pegsoft.net>.
-Based on Services 1996-1999 Andrew Church <achurch@achurch.org>.
-
-This program is free but copyrighted software; see the file COPYING for
-details.
-
-Information about Anope may be found at http://www.anope.org/
-Information about Epona may be found at http://www.epona.org/
-Information about Services may be found at http://www.ircservices.esper.net/
-
-Table of Contents
------------------
-1) Credits
-2) Presentation
-3) Installation
-4) Command Line Options
-5) Messages Translation
-6) Contact and Mailing List
-
-1) Credits
-
- Anope is based on Lara's Epona version 1.4.14.
- Epona is based on Andy Church's IRC Services version 4.3.3.
-
- The original credits:
-
- * Mauritz Antunes
- Portuguese translation
- * Jose R. Holzmann, Raul S. Villarreal
- Spanish translation
- * Andrew Kempe <theshadow@shadowfire.org>
- News system
- * <d.duca@eurcom.net>
- Italian translation
- * <mikado@holyfire.com>
- Turkish translation
- * Andrew Kempe <theshadow@shadowfire.org>
- Session limiting
-
- Epona credits:
-
- * lara <lara@pegsoft.net>
- Main coding
- * CafeiN <oytuny@yahoo.com>
- Turkish translation
- * Sylvain Cresto aka tost <scresto@netsante.fr>
- FreeBSD 5 patch
- * Marcelo Conde Foscarini aka Bras <ircadmin@brmarket.net>
- Portuguese translation
- * Alvaro Toledo aka POLLITO <atoledo@keldon.org>
- Spanish translation
- * chemical <chemical@musicplay.de>
- German translation
- * shine <dh@shinewelt.de>
- German translation
- * Guven Guzelbey aka MeShGuL <guzelbey@cs.utk.edu>
- Turkish translation
- * Jordi Pujol <jordi.pujol@aujac.org>
- Catalan translation
- * Eva Dachs <evadachs@terra.es>
- Catalan translation
- * Toni Perez <toni.perez@aujac.org>
- Catalan translation
- * Sergios Karalis <sergios_k@hotmail.com>
- Greek translation
- * Thomas J. Stensas aka ShadowMaster <shadowmaster@shadow-realm.org>
- Ultimate 3.x support
-
- Anope credits:
-
- * Adam Kramer <ribosome@anope.org>
- * Alvaro Toledo <atoledo@keldon.org>
- * Amanda Folson <amanda@anope.org>
- * Andrew Berquist <vash@anope.org>
- * Björn Stiddien <keeper@anope.org>
- * Charles Kingsley <chaz@anope.org>
- * Chris Hogben <heinz@anope.org>
- * Daniel Engel <dane@zero.org>
- * David <dv@diboo.net>
- * David Narayan <jester@phrixus.net>
- * David Robson <rob@anope.org>
- * Daniele Nicolucci <jollino@sogno.net>
- * Florian Schulze <certus@anope.org>
- * Gabriel Acevedo H. <drstein@anope.org>
- * Jan Milants <viper@anope.org>
- * JH <jh@irc-chat.net>
- * Joris Vink <joris@anope.org>
- * Lucas Nussbaum <lucas@lucas-nussbaum.net>
- * Mark Summers <mark@goopler.net>
- * Matthew Beeching <jobe@invictachat.net>
- * Pieter Bootsma <geniusdex@anope.org>
- * Thomas Juberg Stensås <ShadowMaster@Shadow-Realm.org>
- * Trystan .S Lee <trystan@nomadirc.net>
- * openglx <openglx@brasnerd.com.br>
-
- Anope Translations:
-
- * GeniusDex <geniusdex@anope.org> (nl.l)
- * Kein <kein-of@yandex.ru> (ru.l)
- * Stuff <the.stuff@gmx.de> (de.l)
- * Gabriel Acevedo H. <drstein@anope.org> (es.l)
- * Janos Kapitany <sarkanyka@cjbchat.hu> (hun.l)
- * Szymon S'wierkosz <szymek@adres.pl> (pl.l)
-
- Anope uses the strlcat() and strlcpy() functions from OpenSSH 2.5.1p2.
- These functions are copyrighted by Todd C. Miller:
-
- Copyright (c) 1998 Todd C. Miller <Todd.Miller@courtesan.com>
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- 1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- 3. The name of the author may not be used to endorse or promote
- products derived from this software without specific prior written
- permission.
-
- THIS SOFTWARE IS PROVIDED `AS IS'' AND ANY EXPRESS OR IMPLIED
- WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
- OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
- TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
- USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- SUCH DAMAGE.
-
-
-2) Presentation
-
- Anope is a set of Services for IRC networks that allows users to manage
- their nicks and channels in a secure and efficient way, and administrators
- to manage their network with powerful tools.
-
- Currently available services are:
-
- * NickServ, a powerful nickname manager that users can use to protect
- themselves against nick stealing. Each user has its own nickname
- group, that allows the user to register as many nicks as needed
- while still being able to take profit of his privileges and to
- modify the nick configuration. NickServ also has an optional
- password retrieval feature.
-
- * ChanServ, a powerful channel manager that helps users to administer
- their channels in a totally customizable way. ChanServ has an
- internal list of privileged users and banned users that controls
- accesses on a per-channel basis. It eliminates all takeover
- problems, because of its powerful op/unban/invite and even mass
- deop and mass kick functions.
-
- * MemoServ, an helpful companion that allows sending short messages
- to offline users, that they can then read when they come online
- later.
-
- * BotServ, an original service that allows users to get a permanent,
- friendly bot on their channels in an easy way. Each bot can be
- configured to monitor the channels against floods, repetitions,
- caps writing, and swearing, and to take appropriate actions. It
- also can handle user-friendly commands (like !op, !deop, !voice,
- !devoice, !kick, and many others), say a short greet message when
- an user joins a channel, and even "take over" ChanServ actions such
- as auto-opping users, saying the entry notice, and so on. This
- service can be disabled if you want to save some bandwidth.
-
- * OperServ, the IRCops' and IRC admins' black box, that allows them
- to manage the list of network bans (also known as AKILL (DALnet) or
- GLINE (Undernet)), to configure messages displayed to users when
- they log on, to set modes and to kick users from any channel, to
- send notices quickly to the entire network, and much more!
-
- * HostServ, a neat service that allows users to show custom vHosts
- (virtual hosts) instead of their real IP address; this only works
- on daemons supporting ip cloaking, such as UnrealIRCd, UltimateIRCd
- and ViagraIRCd.
-
- * HelpServ, a skeleton service used to serve help files.
-
- Anope currently works with:
-
- * Bahamut 1.4.27 or later (including 1.8)
- * Charybdis 1.0 or later
- * DreamForge 4.6.7
- * Hybrid 7 or later
- * InspIRCd 1.0 or later (including 1.1)
- * Plexus 2.0 or later (including 3.0)
- * PTlink 6.15 or later
- * RageIRCd 2.0 beta-6 or later
- * Ratbox 2.0.6 or later
- * ShadowIRCd 4.0 beta 7 or later
- * Solid IRCd 3.4.6 or later
- * UltimateIRCd 2.8.2 or later (including 3.0)
- * UnrealIRCd 3.1.1 or later (including 3.2)
- * ViagraIRCd 1.3 or later
-
- Anope could also work with some of the daemons derived by the ones listed
- above, but there's no support for them if they work or don't work.
-
-
-3) Installation
-
- See the INSTALL file for instruction on installing Anope.
-
-
-4) Command Line Options
-
- Normally, Anope can be run simply by invoking the "services" executable.
- Anope will then use the defaults specified in the services.conf file, and
- connect to the specified uplink server. Alternatively, any of the
- following command-line options can be specified to change the default
- values:
-
- -remote server[:port] Connect to the specified server
- -local host -or- Connect from the specified address (e.g. for
- [host]:[port] multihomed servers)
- -name servername Our server name (e.g. services.some.net)
- -desc string Description of us (e.g. SomeNet Services)
- -user username Username for Services' nicks (e.g. services)
- -host hostname Hostname for Services' nicks (e.g. esper.net)
- -dir directory Directory containing Services' data files
- (e.g. /usr/local/lib/services)
- -log filename Services log filename (e.g. services.log)
- -update secs How often to update databases (in seconds)
- -expire secs How often to check for nick/channel
- expiration (in seconds)
-
- Additionally, the following command-line options can be used to modify
- the behavior of Anope:
-
- -debug Enable debugging mode; more info sent to log (give
- option more times for more info)
- -readonly Enable read-only mode; no changes to databases
- allowed, .db files and log not written
- -skeleton Enable skeleton mode; like read-only mode, but only
- OperServ is available
- -nofork Do not fork after startup; log messages will be
- written to terminal (as well as to the log file
- if not in read-only mode)
- -forceload Try to load as much of the databases as possible,
- even if errors are encountered
- -noexpire Expiration routines won't be run at all
- -logchan Startup with logchan enabled
- -version Display the version of Anope
- -nothird Do not load the modules specified in ModulesAutoload
- or ModulesDelayedAutoload in the config file
- -protocoldebug Debug each incoming message after protocol parsing
- -support Used for support, same as -debug -nofork -nothird
-
- Upon starting, Anope will parse its command-line parameters, open its
- logfile, then (assuming the -nofork option is not given) detach itself
- and run in the background. If Anope encounters a problem reading the
- database files or cannot connect to its uplink server, it will terminate
- immediately; otherwise, it will run until the connection is terminated
- (or a QUIT, SHUTDOWN, or RESTART command is sent; see OperServ's help).
- In the case of an error, an appropriate error message will be written to
- the log file.
-
- If Anope is run with the "-readonly" command-line option, it can serve as
- a "backup" to the full version of services. A "full" version of services
- (run without -readonly) will automatically reintroduce its pseudo-clients
- (NickServ, ChanServ, etc.), while a "backup" services will not, thus
- allowing full services to be brought up at any time without disrupting
- the network (and without having to take backup services down beforehand).
-
- If Anope is run with the "-skeleton" command-line option, it will not try
- to load the nickname or channel databases, and will respond with "service
- is inactive" messages to any commands sent to NickServ, ChanServ,
- MemoServ or BotServ. This can be useful as an emergency stopgap measure
- when the main copy of Anope cannot be started.
-
- The "-debug" option is useful if you find or suspect a problem in Anope.
- Giving it once on the command line will cause all traffic to and from
- services as well as some other debugging information to be recorded in
- the log file; if you send a bug report, PLEASE include an excerpt from
- the log file WITH DEBUGGING ACTIVE; we cannot emphasize enough how
- important this is to tracking down problems. (You can also enable
- debugging while Services is running using OperServ's SET DEBUG command.)
- If you repeat the -debug option more than once, the debugging level will
- be increased, which provides more detailed information but may also slow
- Anope down considerably and make the log file grow dramatically faster
- (in particular, at debug level 4 a message is written to the log for
- every character received from the server). In general, a debug level of 1
- is sufficient for the coding team to be able to trace a problem, because
- all network traffic is included and we can usually reproduce the problem.
-
- The "-forceload" option is provided to attempt recovery of data from
- corrupted or truncated databases. Normally, if Anope encounters an error
- writing to a database file, it will attempt to restore the original
- version of the file and report an error to the logfile and through
- WALLOPS. However, if this should fail (which normally should not happen),
- or if Anope is terminated abruptly e.g. by kill -9 or a power failure,
- then one or more of the databases may be corrupt. Normally, this will
- cause Anope to abort the next time you try to run it; however, if yo
- give the -forceload option to Anope, it will instead read as much as it
- can, then skip to the next database. For obvious reasons, it's highly
- recommended to keep backup copies of your databases in case something
- does happen (since Anope will stop at the first error in a database, even
- with -forceload, meaning you lose any data after that).
-
-5) Messages Translations
-
- Anope has a powerful option in NickServ allowing users to choose what
- language it must use when sending messages to users. Messages are stored
- in language files (located in the lang directory).
-
- Anope is currently provided with thirteen languages: Catalan, Dutch,
- English, French, German, Greek, Hungarian, Italian, Polish, Portuguese,
- Russian, Spanish and Turkish. If you want to translate Anope messages
- into another language, follow this instructions:
-
- * Copy the lang/en_us.l file to a meaningful name (for example, if
- you would like to translate messages in Spanish, you would rename
- it to es.l).
-
- * Edit the file with your favorite text editor. Carefully read the
- instructions given at the top of the file, and start translating
- the whole file. The file is big, so make sure you have some coffee
- available ;) Try to avoid the use of English words as much as
- possible. If the new language contains only a few 'special'
- characters, try and use latin representations of it, if possible.
- Remember that most clients are only capable of handling the
- ISO-8859-1 charset. Of course, if you are translating Anope to a
- language with a totally different charset, such as Russian, feel
- free to use the one that suites it best (and the one that is in use
- by most speakers of that language ;)).
-
- * When this is done, you have two solutions: either patch Services
- source code so they take in account the new language file
- (basically, you'll have to modify lang/Makefile, language.c and
- maybe services.h), or send us the translated file so we can make
- the patch and include your language in the next Anope release.
-
- * Note that there is a language tool on bin/langtool.pl that can aid
- the verification process on newly created language files. Try to
- use it before you submit a language file.
-
- When new major releases come out, you'll not have to retranslate the
- whole file; the Changes.lang file will help you to know which messages
- were added, modified or deleted.
-
- If you did a language file translation, and want to let others use it,
- please send it to dev@anope.org (don't forget to mention clearly your
- (nick)name, your e-mail and the language name). You'll of course get full
- credit for it, and will even get future final major releases before
- anyone else to complete the translation!... ;)
-
-6) Contact
-
- For announcements and discussions about Anope, please visit our
- Portal and Forums at http://www.anope.org/ -- make sure you register
- yourself and your network to get full benefits.
-
- If you read the documentation carefully, and didn't find the answer to
- your question, feel free to post on the website forums or join our irc
- channel (irc.anope.org #anope). Once you join our Support channel, just
- type "? report" for instructions on how to report a Bug. Be as precise as
- possible when asking a question, because we have no extraordinary powers
- and can't guess things if they aren't provided. The more precise you are,
- the sooner you'll be likely to get an answer.
-
- If you think you found a bug, add it to the bug tracking system
- (http://bugs.anope.org) and - again - be as precise as possible. Also say
- whether the bug happens always or under what circumstances, and anything
- that could be useful to track your bug down. If you wrote a patch, send
- it over. :)
+Anope -- a set of IRC services for IRC networks
+-----------------------------------------------
+
+Anope is 2003-2008 Anope Team <info@anope.org>.
+Based on Epona 2000-2002 PegSoft <epona@pegsoft.net>.
+Based on Services 1996-1999 Andrew Church <achurch@achurch.org>.
+
+This program is free but copyrighted software; see the file COPYING for
+details.
+
+Information about Anope may be found at http://www.anope.org/
+Information about Epona may be found at http://www.epona.org/
+Information about Services may be found at http://www.ircservices.esper.net/
+
+Table of Contents
+-----------------
+1) Credits
+2) Presentation
+3) Installation
+4) Command Line Options
+5) Messages Translation
+6) Contact and Mailing List
+
+1) Credits
+
+ Anope is based on Lara's Epona version 1.4.14.
+ Epona is based on Andy Church's IRC Services version 4.3.3.
+
+ The original credits:
+
+ * Mauritz Antunes
+ Portuguese translation
+ * Jose R. Holzmann, Raul S. Villarreal
+ Spanish translation
+ * Andrew Kempe <theshadow@shadowfire.org>
+ News system
+ * <d.duca@eurcom.net>
+ Italian translation
+ * <mikado@holyfire.com>
+ Turkish translation
+ * Andrew Kempe <theshadow@shadowfire.org>
+ Session limiting
+
+ Epona credits:
+
+ * lara <lara@pegsoft.net>
+ Main coding
+ * CafeiN <oytuny@yahoo.com>
+ Turkish translation
+ * Sylvain Cresto aka tost <scresto@netsante.fr>
+ FreeBSD 5 patch
+ * Marcelo Conde Foscarini aka Bras <ircadmin@brmarket.net>
+ Portuguese translation
+ * Alvaro Toledo aka POLLITO <atoledo@keldon.org>
+ Spanish translation
+ * chemical <chemical@musicplay.de>
+ German translation
+ * shine <dh@shinewelt.de>
+ German translation
+ * Guven Guzelbey aka MeShGuL <guzelbey@cs.utk.edu>
+ Turkish translation
+ * Jordi Pujol <jordi.pujol@aujac.org>
+ Catalan translation
+ * Eva Dachs <evadachs@terra.es>
+ Catalan translation
+ * Toni Perez <toni.perez@aujac.org>
+ Catalan translation
+ * Sergios Karalis <sergios_k@hotmail.com>
+ Greek translation
+ * Thomas J. Stensas aka ShadowMaster <shadowmaster@shadow-realm.org>
+ Ultimate 3.x support
+
+ Anope credits:
+
+ * Adam Kramer <ribosome@anope.org>
+ * Alvaro Toledo <atoledo@keldon.org>
+ * Amanda Folson <amanda@anope.org>
+ * Andrew Berquist <vash@anope.org>
+ * Björn Stiddien <keeper@anope.org>
+ * Charles Kingsley <chaz@anope.org>
+ * Chris Hogben <heinz@anope.org>
+ * Daniel Engel <dane@zero.org>
+ * David <dv@diboo.net>
+ * David Narayan <jester@phrixus.net>
+ * David Robson <rob@anope.org>
+ * Daniele Nicolucci <jollino@sogno.net>
+ * Florian Schulze <certus@anope.org>
+ * Gabriel Acevedo H. <drstein@anope.org>
+ * Jan Milants <viper@anope.org>
+ * JH <jh@irc-chat.net>
+ * Joris Vink <joris@anope.org>
+ * Lucas Nussbaum <lucas@lucas-nussbaum.net>
+ * Mark Summers <mark@goopler.net>
+ * Matthew Beeching <jobe@invictachat.net>
+ * Pieter Bootsma <geniusdex@anope.org>
+ * Thomas Juberg Stensås <ShadowMaster@Shadow-Realm.org>
+ * Trystan .S Lee <trystan@nomadirc.net>
+ * openglx <openglx@brasnerd.com.br>
+
+ Anope Translations:
+
+ * GeniusDex <geniusdex@anope.org> (nl.l)
+ * Kein <kein-of@yandex.ru> (ru.l)
+ * Stuff <the.stuff@gmx.de> (de.l)
+ * Gabriel Acevedo H. <drstein@anope.org> (es.l)
+ * Janos Kapitany <sarkanyka@cjbchat.hu> (hun.l)
+ * Szymon S'wierkosz <szymek@adres.pl> (pl.l)
+
+ Anope uses the strlcat() and strlcpy() functions from OpenSSH 2.5.1p2.
+ These functions are copyrighted by Todd C. Miller:
+
+ Copyright (c) 1998 Todd C. Miller <Todd.Miller@courtesan.com>
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. The name of the author may not be used to endorse or promote
+ products derived from this software without specific prior written
+ permission.
+
+ THIS SOFTWARE IS PROVIDED `AS IS'' AND ANY EXPRESS OR IMPLIED
+ WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
+ TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+
+
+2) Presentation
+
+ Anope is a set of Services for IRC networks that allows users to manage
+ their nicks and channels in a secure and efficient way, and administrators
+ to manage their network with powerful tools.
+
+ Currently available services are:
+
+ * NickServ, a powerful nickname manager that users can use to protect
+ themselves against nick stealing. Each user has its own nickname
+ group, that allows the user to register as many nicks as needed
+ while still being able to take profit of his privileges and to
+ modify the nick configuration. NickServ also has an optional
+ password retrieval feature.
+
+ * ChanServ, a powerful channel manager that helps users to administer
+ their channels in a totally customizable way. ChanServ has an
+ internal list of privileged users and banned users that controls
+ accesses on a per-channel basis. It eliminates all takeover
+ problems, because of its powerful op/unban/invite and even mass
+ deop and mass kick functions.
+
+ * MemoServ, an helpful companion that allows sending short messages
+ to offline users, that they can then read when they come online
+ later.
+
+ * BotServ, an original service that allows users to get a permanent,
+ friendly bot on their channels in an easy way. Each bot can be
+ configured to monitor the channels against floods, repetitions,
+ caps writing, and swearing, and to take appropriate actions. It
+ also can handle user-friendly commands (like !op, !deop, !voice,
+ !devoice, !kick, and many others), say a short greet message when
+ an user joins a channel, and even "take over" ChanServ actions such
+ as auto-opping users, saying the entry notice, and so on. This
+ service can be disabled if you want to save some bandwidth.
+
+ * OperServ, the IRCops' and IRC admins' black box, that allows them
+ to manage the list of network bans (also known as AKILL (DALnet) or
+ GLINE (Undernet)), to configure messages displayed to users when
+ they log on, to set modes and to kick users from any channel, to
+ send notices quickly to the entire network, and much more!
+
+ * HostServ, a neat service that allows users to show custom vHosts
+ (virtual hosts) instead of their real IP address; this only works
+ on daemons supporting ip cloaking, such as UnrealIRCd, UltimateIRCd
+ and ViagraIRCd.
+
+ * HelpServ, a skeleton service used to serve help files.
+
+ Anope currently works with:
+
+ * Bahamut 1.4.27 or later (including 1.8)
+ * Charybdis 1.0 or later
+ * DreamForge 4.6.7
+ * Hybrid 7 or later
+ * InspIRCd 1.0 or later (including 1.1)
+ * Plexus 2.0 or later (including 3.0)
+ * PTlink 6.15 or later
+ * RageIRCd 2.0 beta-6 or later
+ * Ratbox 2.0.6 or later
+ * ShadowIRCd 4.0 beta 7 or later
+ * Solid IRCd 3.4.6 or later
+ * UltimateIRCd 2.8.2 or later (including 3.0)
+ * UnrealIRCd 3.1.1 or later (including 3.2)
+ * ViagraIRCd 1.3 or later
+
+ Anope could also work with some of the daemons derived by the ones listed
+ above, but there's no support for them if they work or don't work.
+
+
+3) Installation
+
+ See the INSTALL file for instruction on installing Anope.
+
+
+4) Command Line Options
+
+ Normally, Anope can be run simply by invoking the "services" executable.
+ Anope will then use the defaults specified in the services.conf file, and
+ connect to the specified uplink server. Alternatively, any of the
+ following command-line options can be specified to change the default
+ values:
+
+ -remote server[:port] Connect to the specified server
+ -local host -or- Connect from the specified address (e.g. for
+ [host]:[port] multihomed servers)
+ -name servername Our server name (e.g. services.some.net)
+ -desc string Description of us (e.g. SomeNet Services)
+ -user username Username for Services' nicks (e.g. services)
+ -host hostname Hostname for Services' nicks (e.g. esper.net)
+ -dir directory Directory containing Services' data files
+ (e.g. /usr/local/lib/services)
+ -log filename Services log filename (e.g. services.log)
+ -update secs How often to update databases (in seconds)
+ -expire secs How often to check for nick/channel
+ expiration (in seconds)
+
+ Additionally, the following command-line options can be used to modify
+ the behavior of Anope:
+
+ -debug Enable debugging mode; more info sent to log (give
+ option more times for more info)
+ -readonly Enable read-only mode; no changes to databases
+ allowed, .db files and log not written
+ -skeleton Enable skeleton mode; like read-only mode, but only
+ OperServ is available
+ -nofork Do not fork after startup; log messages will be
+ written to terminal (as well as to the log file
+ if not in read-only mode)
+ -forceload Try to load as much of the databases as possible,
+ even if errors are encountered
+ -noexpire Expiration routines won't be run at all
+ -logchan Startup with logchan enabled
+ -version Display the version of Anope
+ -nothird Do not load the modules specified in ModulesAutoload
+ or ModulesDelayedAutoload in the config file
+ -protocoldebug Debug each incoming message after protocol parsing
+ -support Used for support, same as -debug -nofork -nothird
+
+ Upon starting, Anope will parse its command-line parameters, open its
+ logfile, then (assuming the -nofork option is not given) detach itself
+ and run in the background. If Anope encounters a problem reading the
+ database files or cannot connect to its uplink server, it will terminate
+ immediately; otherwise, it will run until the connection is terminated
+ (or a QUIT, SHUTDOWN, or RESTART command is sent; see OperServ's help).
+ In the case of an error, an appropriate error message will be written to
+ the log file.
+
+ If Anope is run with the "-readonly" command-line option, it can serve as
+ a "backup" to the full version of services. A "full" version of services
+ (run without -readonly) will automatically reintroduce its pseudo-clients
+ (NickServ, ChanServ, etc.), while a "backup" services will not, thus
+ allowing full services to be brought up at any time without disrupting
+ the network (and without having to take backup services down beforehand).
+
+ If Anope is run with the "-skeleton" command-line option, it will not try
+ to load the nickname or channel databases, and will respond with "service
+ is inactive" messages to any commands sent to NickServ, ChanServ,
+ MemoServ or BotServ. This can be useful as an emergency stopgap measure
+ when the main copy of Anope cannot be started.
+
+ The "-debug" option is useful if you find or suspect a problem in Anope.
+ Giving it once on the command line will cause all traffic to and from
+ services as well as some other debugging information to be recorded in
+ the log file; if you send a bug report, PLEASE include an excerpt from
+ the log file WITH DEBUGGING ACTIVE; we cannot emphasize enough how
+ important this is to tracking down problems. (You can also enable
+ debugging while Services is running using OperServ's SET DEBUG command.)
+ If you repeat the -debug option more than once, the debugging level will
+ be increased, which provides more detailed information but may also slow
+ Anope down considerably and make the log file grow dramatically faster
+ (in particular, at debug level 4 a message is written to the log for
+ every character received from the server). In general, a debug level of 1
+ is sufficient for the coding team to be able to trace a problem, because
+ all network traffic is included and we can usually reproduce the problem.
+
+ The "-forceload" option is provided to attempt recovery of data from
+ corrupted or truncated databases. Normally, if Anope encounters an error
+ writing to a database file, it will attempt to restore the original
+ version of the file and report an error to the logfile and through
+ WALLOPS. However, if this should fail (which normally should not happen),
+ or if Anope is terminated abruptly e.g. by kill -9 or a power failure,
+ then one or more of the databases may be corrupt. Normally, this will
+ cause Anope to abort the next time you try to run it; however, if yo
+ give the -forceload option to Anope, it will instead read as much as it
+ can, then skip to the next database. For obvious reasons, it's highly
+ recommended to keep backup copies of your databases in case something
+ does happen (since Anope will stop at the first error in a database, even
+ with -forceload, meaning you lose any data after that).
+
+5) Messages Translations
+
+ Anope has a powerful option in NickServ allowing users to choose what
+ language it must use when sending messages to users. Messages are stored
+ in language files (located in the lang directory).
+
+ Anope is currently provided with thirteen languages: Catalan, Dutch,
+ English, French, German, Greek, Hungarian, Italian, Polish, Portuguese,
+ Russian, Spanish and Turkish. If you want to translate Anope messages
+ into another language, follow this instructions:
+
+ * Copy the lang/en_us.l file to a meaningful name (for example, if
+ you would like to translate messages in Spanish, you would rename
+ it to es.l).
+
+ * Edit the file with your favorite text editor. Carefully read the
+ instructions given at the top of the file, and start translating
+ the whole file. The file is big, so make sure you have some coffee
+ available ;) Try to avoid the use of English words as much as
+ possible. If the new language contains only a few 'special'
+ characters, try and use latin representations of it, if possible.
+ Remember that most clients are only capable of handling the
+ ISO-8859-1 charset. Of course, if you are translating Anope to a
+ language with a totally different charset, such as Russian, feel
+ free to use the one that suites it best (and the one that is in use
+ by most speakers of that language ;)).
+
+ * When this is done, you have two solutions: either patch Services
+ source code so they take in account the new language file
+ (basically, you'll have to modify lang/Makefile, language.c and
+ maybe services.h), or send us the translated file so we can make
+ the patch and include your language in the next Anope release.
+
+ * Note that there is a language tool on bin/langtool.pl that can aid
+ the verification process on newly created language files. Try to
+ use it before you submit a language file.
+
+ When new major releases come out, you'll not have to retranslate the
+ whole file; the Changes.lang file will help you to know which messages
+ were added, modified or deleted.
+
+ If you did a language file translation, and want to let others use it,
+ please send it to dev@anope.org (don't forget to mention clearly your
+ (nick)name, your e-mail and the language name). You'll of course get full
+ credit for it, and will even get future final major releases before
+ anyone else to complete the translation!... ;)
+
+6) Contact
+
+ For announcements and discussions about Anope, please visit our
+ Portal and Forums at http://www.anope.org/ -- make sure you register
+ yourself and your network to get full benefits.
+
+ If you read the documentation carefully, and didn't find the answer to
+ your question, feel free to post on the website forums or join our irc
+ channel (irc.anope.org #anope). Once you join our Support channel, just
+ type "? report" for instructions on how to report a Bug. Be as precise as
+ possible when asking a question, because we have no extraordinary powers
+ and can't guess things if they aren't provided. The more precise you are,
+ the sooner you'll be likely to get an answer.
+
+ If you think you found a bug, add it to the bug tracking system
+ (http://bugs.anope.org) and - again - be as precise as possible. Also say
+ whether the bug happens always or under what circumstances, and anything
+ that could be useful to track your bug down. If you wrote a patch, send
+ it over. :)
diff --git a/docs/WIN32.txt b/docs/WIN32.txt
index 241390271..30e2bf7f6 100644
--- a/docs/WIN32.txt
+++ b/docs/WIN32.txt
@@ -1,209 +1,209 @@
-Anope for Windows
------------------
-
-1) Building the Source
-2) Installation
-3) Compiling Modules
-4) Other compile options
-5) Credits
-
-1) Building the Source
-
- NOTE: If you have downloaded one of the pre-compiled installers, you do
- NOT need to complete this step, and you can proceed to step 2.
-
- If you want to build Anope from source on a Win32 system, you will need
- to follow this instructions:
-
- 1) Download the required files:
-
- * Current Anope source:
- http://sourceforge.net/project/showfiles.php?group_id=94081
-
- If you have Visual C++ 6, 7 (.NET 2002/2003) or 8 (2005) skip ahead to step 2, else you
- need to download the following free components from Microsoft. Once
- downloaded, install these packages.
-
- * Microsoft Visual C++ 2008 Express Edition:
- http://www.microsoft.com/express/vc/
-
- or
-
- * Microsoft Visual C++ 2005 Express Edition:
- http://msdn.microsoft.com/vstudio/express/visualc/download/
-
- then download and install:
-
- * Microsoft Windows PlatformSDK: (Requires WGA validation)
- http://www.microsoft.com/downloads/details.aspx?FamilyId=0BAF2B35-C656-4969-ACE8-E4C0C0716ADB&displaylang=en
-
- (NOTE: Although this says for Windows Server 2003, it does infact work on all supported
- versions of Windows. When installing, you should select the Custom option, and ensure
- that only the top selection, and the bottom selection are checked. This will cut down
- install time dramatically)
-
- * MySQL for Windows (only needed if building with MySQL enabled):
- http://dev.mysql.com/
-
- (NOTE: Anope can be compiled against MySQL Version 3.23 and above)
-
-
- 2) Unpack the Anope tarball with your favorite uncompression program
- (WinZip or WinRAR, etc).
-
- 3) Bring up the Visual C++ Command Prompt; This will launch a
- DOS Command Prompt like window, which will set the environment
- properties needed to make Anope.
-
- Change directories to where you unpacked the source code in step 2, by typing:
-
- cd <path to extracted source>
-
- e.g.
-
- cd c:\anope-trunk
-
- 4) You now need to configure Anope to your requirements. At the prompt type:
-
- Config.bat
-
- NOTE: If you run an Anti-Virus program such as McAfee or Norton, you may
- be unable to run this command due to the protection in place. Some Anti-
- Virus programs may detect the Anope Configuration Tool as a worm, however
- this is not the case. If you are prompted to allow or deny execution of
- the script, you should choose allow. If the script fails to run, and no
- notice is displayed, please check your Anti-Virus settings before seeking
- assistance.
-
- An interactive configuration program should guide you through the install
- options, and then detect your Microsoft Visual C++ Library files. If it
- fails to detect them, you should check you have everything installed.
-
- If you cannot find whats causing the error, please visit our forums or
- our IRC Support channel for assistance.
-
- 5) You are now ready to compile. At the prompt type:
-
- nmake -f Makefile.win32
-
- Once you are back at the command prompt again, if there have been no
- errors, you are ready to go.
-
- Should you encounter errors with the installation process, check the
- messages displayed for advice on resolving them. If you are unable to
- resolve the issues yourself, seek assistance on our forums or in our
- IRC Support channel.
-
- 6) Anope will install the files where they belong. The only thing you need
- to do is rename "data/example.conf" to be "data/services.conf".
-
- You have now completed the building phase of Anope for Windows. You can
- now move on to the next section, which is related to setting up Anope.
-
-2) Installation
-
- Since Anope for Windows does not use a visual interface, you must do the
- configuration with a text editor before proceeding with running Anope
- itself.
-
- NOTE: You may need to open the configuration file with Wordpad, or a text
- editor which supports UNIX line endings. Opening the configuration file in
- Notepad will cause strange characters to appear, and you may not be able to
- edit the file correctly.
-
- Open services.conf, and read through it carefully and adjust the settings
- you think you need to adjust. Pay special attention to these settings:
-
- A) IRCDModule: This is the name of an IRCd Module that Anope will use
- to communicate with your server. Anope supports 15 IRCds,
- so ensure you set the right value here.
- B) RemoteServer: This is the address to your ircd, along with the port
- and password. You should consult your ircd
- documentation on how to link ircds.
- C) ServicesRoot: Remove the # and change the names to your nick so you
- can take control of services once they are online.
- D) UserKey1/2/3: Remove the # infront of the three UserKey settings, and
- change the parameters to numbers; around 6-7 digits will
- do.
-
- If you are unsure of the settings, you can go to the dos command prompt
- and run "anope.exe -nofork -debug" and watch the information as it
- attempts to connect.
-
- You can launch services in two ways. If you are sure that the entered
- configuration information is correct, simply double clicking the Anope
- executable will cause it to start; no window will pop up. If you'd rather
- have a more textual output, you can start at the dos prompt and type in
- "anope.exe". If services are successfully started up the dos prompt will
- seem to hang; at this point you can safely close the dos window.
-
-3) Compiling Modules
-
- If you want to build other modules than the ones shipped by default, you
- will need to modify the Makefile.inc.win32 file, in the src\modules folder.
-
- A) Add modules; find the line stating "SRCS=" and add the name of the
- file to the end of the line. So if you have two files:
-
- SRCS=file.c file2.c
-
- If you are compiling a folder of module components, such as the example
- "catserv", you will need to add/change the "SUBS=" line. If you were
- compiling the "catserv" example, the line would look like this:
-
- SUBS=catserv
-
- B) When you've done this, use the same command prompt you set up in part
- 1, change directories to the src\modules folder, and type:
-
- nmake -f Makefile.win32
-
- followed afterwards, by:
-
- nmake -f Makefile.win32 install
-
- C) You should now be able to load your modules on IRC via OperServ, or via
- the services.conf file.
-
-
-4) Other compile options
-
- A) If you have trouble recompiling Anope, you should try:
-
- nmake -f Makefile.win32 distclean
-
- This will clean up the source directory and allow for chages to be applied
- to previously compiled files.
-
- B) A list of valid options are:
-
- install
- distclean
- clean
- spotless
- all
- core
- protocols
- mypasql
- languages
- modules
-
- The syntax for these options is:
-
- nmake -f Makefile.win32 [option]
-
-5) Credits
-
- Anope is based on Epona and IRCServices. See CREDITS for more credits and
- a complete list of all developers.
-
- Anope's Windows-specific code is provided by:
-
- * Dominick Meglio <codemastr@unrealircd.com>
- * Trystan Scott Lee <trystan@nomadirc.net>
- * Chris Hogben <heinz@anope.org>
-
- Anope's Windows Installer was made using:
-
- * NSIS 2.20 <http://nsis.sourceforge.net>
-
+Anope for Windows
+-----------------
+
+1) Building the Source
+2) Installation
+3) Compiling Modules
+4) Other compile options
+5) Credits
+
+1) Building the Source
+
+ NOTE: If you have downloaded one of the pre-compiled installers, you do
+ NOT need to complete this step, and you can proceed to step 2.
+
+ If you want to build Anope from source on a Win32 system, you will need
+ to follow this instructions:
+
+ 1) Download the required files:
+
+ * Current Anope source:
+ http://sourceforge.net/project/showfiles.php?group_id=94081
+
+ If you have Visual C++ 6, 7 (.NET 2002/2003) or 8 (2005) skip ahead to step 2, else you
+ need to download the following free components from Microsoft. Once
+ downloaded, install these packages.
+
+ * Microsoft Visual C++ 2008 Express Edition:
+ http://www.microsoft.com/express/vc/
+
+ or
+
+ * Microsoft Visual C++ 2005 Express Edition:
+ http://msdn.microsoft.com/vstudio/express/visualc/download/
+
+ then download and install:
+
+ * Microsoft Windows PlatformSDK: (Requires WGA validation)
+ http://www.microsoft.com/downloads/details.aspx?FamilyId=0BAF2B35-C656-4969-ACE8-E4C0C0716ADB&displaylang=en
+
+ (NOTE: Although this says for Windows Server 2003, it does infact work on all supported
+ versions of Windows. When installing, you should select the Custom option, and ensure
+ that only the top selection, and the bottom selection are checked. This will cut down
+ install time dramatically)
+
+ * MySQL for Windows (only needed if building with MySQL enabled):
+ http://dev.mysql.com/
+
+ (NOTE: Anope can be compiled against MySQL Version 3.23 and above)
+
+
+ 2) Unpack the Anope tarball with your favorite uncompression program
+ (WinZip or WinRAR, etc).
+
+ 3) Bring up the Visual C++ Command Prompt; This will launch a
+ DOS Command Prompt like window, which will set the environment
+ properties needed to make Anope.
+
+ Change directories to where you unpacked the source code in step 2, by typing:
+
+ cd <path to extracted source>
+
+ e.g.
+
+ cd c:\anope-trunk
+
+ 4) You now need to configure Anope to your requirements. At the prompt type:
+
+ Config.bat
+
+ NOTE: If you run an Anti-Virus program such as McAfee or Norton, you may
+ be unable to run this command due to the protection in place. Some Anti-
+ Virus programs may detect the Anope Configuration Tool as a worm, however
+ this is not the case. If you are prompted to allow or deny execution of
+ the script, you should choose allow. If the script fails to run, and no
+ notice is displayed, please check your Anti-Virus settings before seeking
+ assistance.
+
+ An interactive configuration program should guide you through the install
+ options, and then detect your Microsoft Visual C++ Library files. If it
+ fails to detect them, you should check you have everything installed.
+
+ If you cannot find whats causing the error, please visit our forums or
+ our IRC Support channel for assistance.
+
+ 5) You are now ready to compile. At the prompt type:
+
+ nmake -f Makefile.win32
+
+ Once you are back at the command prompt again, if there have been no
+ errors, you are ready to go.
+
+ Should you encounter errors with the installation process, check the
+ messages displayed for advice on resolving them. If you are unable to
+ resolve the issues yourself, seek assistance on our forums or in our
+ IRC Support channel.
+
+ 6) Anope will install the files where they belong. The only thing you need
+ to do is rename "data/example.conf" to be "data/services.conf".
+
+ You have now completed the building phase of Anope for Windows. You can
+ now move on to the next section, which is related to setting up Anope.
+
+2) Installation
+
+ Since Anope for Windows does not use a visual interface, you must do the
+ configuration with a text editor before proceeding with running Anope
+ itself.
+
+ NOTE: You may need to open the configuration file with Wordpad, or a text
+ editor which supports UNIX line endings. Opening the configuration file in
+ Notepad will cause strange characters to appear, and you may not be able to
+ edit the file correctly.
+
+ Open services.conf, and read through it carefully and adjust the settings
+ you think you need to adjust. Pay special attention to these settings:
+
+ A) IRCDModule: This is the name of an IRCd Module that Anope will use
+ to communicate with your server. Anope supports 15 IRCds,
+ so ensure you set the right value here.
+ B) RemoteServer: This is the address to your ircd, along with the port
+ and password. You should consult your ircd
+ documentation on how to link ircds.
+ C) ServicesRoot: Remove the # and change the names to your nick so you
+ can take control of services once they are online.
+ D) UserKey1/2/3: Remove the # infront of the three UserKey settings, and
+ change the parameters to numbers; around 6-7 digits will
+ do.
+
+ If you are unsure of the settings, you can go to the dos command prompt
+ and run "anope.exe -nofork -debug" and watch the information as it
+ attempts to connect.
+
+ You can launch services in two ways. If you are sure that the entered
+ configuration information is correct, simply double clicking the Anope
+ executable will cause it to start; no window will pop up. If you'd rather
+ have a more textual output, you can start at the dos prompt and type in
+ "anope.exe". If services are successfully started up the dos prompt will
+ seem to hang; at this point you can safely close the dos window.
+
+3) Compiling Modules
+
+ If you want to build other modules than the ones shipped by default, you
+ will need to modify the Makefile.inc.win32 file, in the src\modules folder.
+
+ A) Add modules; find the line stating "SRCS=" and add the name of the
+ file to the end of the line. So if you have two files:
+
+ SRCS=file.c file2.c
+
+ If you are compiling a folder of module components, such as the example
+ "catserv", you will need to add/change the "SUBS=" line. If you were
+ compiling the "catserv" example, the line would look like this:
+
+ SUBS=catserv
+
+ B) When you've done this, use the same command prompt you set up in part
+ 1, change directories to the src\modules folder, and type:
+
+ nmake -f Makefile.win32
+
+ followed afterwards, by:
+
+ nmake -f Makefile.win32 install
+
+ C) You should now be able to load your modules on IRC via OperServ, or via
+ the services.conf file.
+
+
+4) Other compile options
+
+ A) If you have trouble recompiling Anope, you should try:
+
+ nmake -f Makefile.win32 distclean
+
+ This will clean up the source directory and allow for chages to be applied
+ to previously compiled files.
+
+ B) A list of valid options are:
+
+ install
+ distclean
+ clean
+ spotless
+ all
+ core
+ protocols
+ mypasql
+ languages
+ modules
+
+ The syntax for these options is:
+
+ nmake -f Makefile.win32 [option]
+
+5) Credits
+
+ Anope is based on Epona and IRCServices. See CREDITS for more credits and
+ a complete list of all developers.
+
+ Anope's Windows-specific code is provided by:
+
+ * Dominick Meglio <codemastr@unrealircd.com>
+ * Trystan Scott Lee <trystan@nomadirc.net>
+ * Chris Hogben <heinz@anope.org>
+
+ Anope's Windows Installer was made using:
+
+ * NSIS 2.20 <http://nsis.sourceforge.net>
+
diff --git a/include/CMakeLists.txt b/include/CMakeLists.txt
index 121bc852a..6401d2fdc 100644
--- a/include/CMakeLists.txt
+++ b/include/CMakeLists.txt
@@ -10,6 +10,12 @@ if(MSVC OR NOT SH)
COMMAND version_sh ${Anope_SOURCE_DIR}/version.log ${CMAKE_CURRENT_SOURCE_DIR}/version.sh ${CMAKE_CURRENT_BINARY_DIR}/version.h
MAIN_DEPENDENCY ${CMAKE_CURRENT_SOURCE_DIR}/version.sh DEPENDS version_sh ${CMAKE_CURRENT_SOURCE_DIR}/services.h ${CMAKE_CURRENT_SOURCE_DIR}/pseudo.h ${CMAKE_CURRENT_SOURCE_DIR}/messages.h ${SRC_SRCS}
)
+ if(IN_SOURCE)
+ # Add version_sh to list of files for CPack to ignore
+ get_target_property(version_sh_BINARY version_sh LOCATION)
+ get_filename_component(version_sh_BINARY ${version_sh_BINARY} NAME)
+ add_to_cpack_ignored_files("${version_sh_BINARY}$" TRUE)
+ endif(IN_SOURCE)
# For any non-Visual Studio platforms that do have sh, we will run version.h through the version.h shell script
else(MSVC OR NOT SH)
# Generate version.h from version.sh and the version.log file from the main source directory, with dependencies to the given headers and all source files in the main Anope build
@@ -19,5 +25,10 @@ else(MSVC OR NOT SH)
)
endif(MSVC OR NOT SH)
+if(IN_SOURCE)
+ # Add version.h to the list of files for CPack to ignore
+ add_to_cpack_ignored_files("version.h$" TRUE)
+endif(IN_SOURCE)
+
# Add a custom target to the above file
add_custom_target(headers DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/version.h)
diff --git a/install.js b/install.js
index 7b112edd5..26cc0023c 100644
--- a/install.js
+++ b/install.js
@@ -99,6 +99,26 @@ var installerQuestions = [
else return '-DCMAKE_BUILD_TYPE:STRING=RELEASE';
}
},
+ {
+ 'question' : [
+ 'Are you using Visual Studio 2008? If you are, you need to answer yes',
+ 'to this question, otherwise CMake will not function properly.'
+ ],
+ 'short' : 'Using Visual Studio 2008?',
+ 'options' : [
+ 'yes',
+ 'no'
+ ],
+ 'default_answer' : 'no',
+ 'store_answer' : function(answer) {
+ installerResponses['Visual Studio 2008'] = answer;
+ return true;
+ },
+ 'cmake_argument' : function() {
+ if (installerResponses['Visual Studio 2008'] == 'yes') return '-G"Visual Studio 9 2008"';
+ else return '';
+ }
+ },
];
var bannerReplacements = [
@@ -145,6 +165,10 @@ for (x in installerQuestions) {
installerResponses['Debug'] = 'msvc';
continue;
}
+ if (thisQuestion.short == 'Using Visual Studio 2008?' && installerResponses['Debug'] != 'msvc') {
+ installerResponses['Visual Studio 2008'] = 'no';
+ continue;
+ }
while (!validResponse) {
for (y in thisQuestion.question) {
var qLine = thisQuestion.question[y];
diff --git a/lang/CMakeLists.txt b/lang/CMakeLists.txt
index c2933ddac..7d19d9bdf 100644
--- a/lang/CMakeLists.txt
+++ b/lang/CMakeLists.txt
@@ -3,15 +3,40 @@ set_source_files_properties(langcomp.c PROPERTIES LANGUAGE CXX COMPILE_FLAGS "${
# Generate langcomp and set it's linker flags
add_executable(langcomp langcomp.c)
set_target_properties(langcomp PROPERTIES LINKER_LANGUAGE CXX LINK_FLAGS "${LDFLAGS}")
+# Get the location of the binary to use later
+get_target_property(langcomp_BINARY langcomp LOCATION)
+if(IN_SOURCE)
+ # Add the executable to the list of files for CPack to ignore
+ file(RELATIVE_PATH langcomp_BINARY_RELATIVE ${Anope_BINARY_DIR} ${langcomp_BINARY})
+ add_to_cpack_ignored_files("${langcomp_BINARY_RELATIVE}$" TRUE)
+endif(IN_SOURCE)
+
+# Determine if langtool should be built
+if(MSVC)
+ set(BUILD_LANGTOOL TRUE)
+else(MSVC)
+ if(NOT GREP OR NOT PERL)
+ set(BUILD_LANGTOOL TRUE)
+ else(NOT GREP OR NOT PERL)
+ set(BUILD_LANGTOOL FALSE)
+ endif(NOT GREP OR NOT PERL)
+endif(MSVC)
# If grep or perl don't exist on the system, build langtool to generate index and language.h
-if(NOT GREP OR NOT PERL)
+if(BUILD_LANGTOOL)
# Set the source file for langtool to use C++ as well as set it's compile flags
set_source_files_properties(langtool.c PROPERTIES LANGUAGE CXX COMPILE_FLAGS "${CXXFLAGS}")
# Generate langtool and set it's linker flags
add_executable(langtool langtool.c)
set_target_properties(langtool PROPERTIES LINKER_LANGUAGE CXX LINK_FLAGS "${LDFLAGS}")
-endif(NOT GREP OR NOT PERL)
+ # Get the location of the binary to use later)
+ get_target_property(langtool_BINARY langtool LOCATION)
+ if(IN_SOURCE)
+ # Add the executable to the list of files for CPack to ignore
+ file(RELATIVE_PATH langtool_BINARY_RELATIVE ${Anope_BINARY_DIR} ${langtool_BINARY})
+ add_to_cpack_ignored_files("${langtool_BINARY_RELATIVE}$" TRUE)
+ endif(IN_SOURCE)
+endif(BUILD_LANGTOOL)
# If grep exists (and we aren't using Visual Studio, it hates this), use it to generate the index file
if(NOT MSVC AND GREP)
@@ -22,10 +47,15 @@ if(NOT MSVC AND GREP)
# Otherwise, use langtool to generate the index file
else(NOT MSVC AND GREP)
add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/index
- COMMAND ${CMAKE_CURRENT_BINARY_DIR}/langtool index ${CMAKE_CURRENT_SOURCE_DIR}/en_us.l ${CMAKE_CURRENT_BINARY_DIR}/index
+ COMMAND ${langtool_BINARY} index ${CMAKE_CURRENT_SOURCE_DIR}/en_us.l ${CMAKE_CURRENT_BINARY_DIR}/index
MAIN_DEPENDENCY ${CMAKE_CURRENT_SOURCE_DIR}/en_us.l DEPENDS langtool
)
endif(NOT MSVC AND GREP)
+if(IN_SOURCE)
+ # Add the index file to the list of files for CPack to ignore
+ file(RELATIVE_PATH index_RELATIVE ${Anope_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR}/index)
+ add_to_cpack_ignored_files("${index_RELATIVE}$")
+endif(IN_SOURCE)
# Find all the *.l files within the current source directory, and sort the list
file(GLOB LANG_SRCS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "*.l")
@@ -41,9 +71,14 @@ foreach(LANG_L ${LANG_SRCS})
append_to_list(LANGS ${CMAKE_CURRENT_BINARY_DIR}/${LANG})
# Generate a compiled language file using langcomp, as well as having a dependency on the index file being generated
add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${LANG}
- COMMAND ${CMAKE_CURRENT_BINARY_DIR}/langcomp ${CMAKE_CURRENT_SOURCE_DIR}/${LANG_L} ${CMAKE_CURRENT_BINARY_DIR}/${LANG}
+ COMMAND ${langcomp_BINARY} ${CMAKE_CURRENT_SOURCE_DIR}/${LANG_L} ${CMAKE_CURRENT_BINARY_DIR}/${LANG}
MAIN_DEPENDENCY ${CMAKE_CURRENT_SOURCE_DIR}/${LANG_L} DEPENDS langcomp ${CMAKE_CURRENT_BINARY_DIR}/index
)
+ if(IN_SOURCE)
+ # Add the language file to the list of files for CPack to ignore
+ file(RELATIVE_PATH LANG_RELATIVE ${Anope_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR}/${LANG})
+ add_to_cpack_ignored_files("${LANG_RELATIVE}$")
+ endif(IN_SOURCE)
endforeach(LANG_L)
# If perl exists (and we aren't using Visual Studio, it hates this), use it to generate language.h
@@ -55,10 +90,14 @@ if(NOT MSVC AND PERL)
# Otherwise, use langtool to generate language.h
else(NOT MSVC AND PERL)
add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/language.h
- COMMAND ${CMAKE_CURRENT_BINARY_DIR}/langtool language.h ${CMAKE_CURRENT_BINARY_DIR}/index ${CMAKE_CURRENT_BINARY_DIR}/language.h
+ COMMAND ${langtool_BINARY} language.h ${CMAKE_CURRENT_BINARY_DIR}/index ${CMAKE_CURRENT_BINARY_DIR}/language.h
MAIN_DEPENDENCY ${CMAKE_CURRENT_BINARY_DIR}/index DEPENDS langtool
)
endif(NOT MSVC AND PERL)
+if(IN_SOURCE)
+ # Add language.h to the list of files for CPack to ignore
+ add_to_cpack_ignored_files("language.h$" TRUE)
+endif(IN_SOURCE)
# Add a custom target to depend on the language files and language.h
add_custom_target(language DEPENDS ${LANGS} ${CMAKE_CURRENT_BINARY_DIR}/language.h)
@@ -72,15 +111,15 @@ else(RUNGROUP)
endif(RUNGROUP)
# Set the language files to be installed to the languages directory under the data directory
install(FILES ${LANGS}
- DESTINATION "${DATADIR}/languages"
+ DESTINATION data/languages
PERMISSIONS ${PERMS}
)
# On non-Windows platforms, if RUNGROUP is set, change the permissions of the languages directory
if(NOT WIN32)
if(RUNGROUP)
- install(CODE "execute_process(COMMAND ${CHMOD} 2770 \"${DATADIR}/languages\")")
+ install(CODE "execute_process(COMMAND ${CHMOD} 2770 \"\${CMAKE_INSTALL_PREFIX}/data/languages\")")
else(RUNGROUP)
- install(CODE "execute_process(COMMAND ${CHMOD} 0700 \"${DATADIR}/languages\")")
+ install(CODE "execute_process(COMMAND ${CHMOD} 0700 \"\${CMAKE_INSTALL_PREFIX}/data/languages\")")
endif(RUNGROUP)
endif(NOT WIN32)
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index eca0c782b..2a8c01d0e 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -37,6 +37,10 @@ if(WIN32)
else(MINGW)
set_source_files_properties(${CMAKE_CURRENT_BINARY_DIR}/win32.rc COMPILE_FLAGS "/i\"${Anope_SOURCE_DIR}/include\"")
endif(MINGW)
+ if(IN_SOURCE)
+ # Add the resource file to the list of files for CPack to ignore
+ add_to_cpack_ignored_files("win32.rc$" TRUE)
+ endif(IN_SOURCE)
endif(WIN32)
# Generate the Anope executable and set it's linker flags, also set it to export it's symbols even though it's not a module
@@ -54,6 +58,10 @@ add_dependencies(${PROGRAM_NAME} language headers)
get_target_property(SERVICES_BINARY ${PROGRAM_NAME} LOCATION)
get_filename_component(SERVICES_BINARY ${SERVICES_BINARY} NAME)
set(SERVICES_BIN "${SERVICES_BINARY}")
+if(IN_SOURCE)
+ # Add the Anope executable to the list of files for CPack to ignore
+ add_to_cpack_ignored_files("${SERVICES_BINARY}$" TRUE)
+endif(IN_SOURCE)
# Generate sysconf.h from the earlier configuration
configure_file(${Anope_SOURCE_DIR}/include/sysconf.h.cmake ${Anope_BINARY_DIR}/include/sysconf.h)
@@ -67,5 +75,5 @@ add_subdirectory(tools)
# Set Anope to be installed to the bin directory
install(TARGETS ${PROGRAM_NAME}
- DESTINATION "${INSTDIR}"
+ DESTINATION .
)
diff --git a/src/base64.c b/src/base64.c
index 144c51bec..d32f6ccda 100644
--- a/src/base64.c
+++ b/src/base64.c
@@ -177,7 +177,7 @@ int b64_decode(const char *src, char *target, size_t targsize)
if (ch == Pad64)
break;
- pos = strchr(Base64, ch);
+ pos = const_cast<char *>(strchr(Base64, ch));
if (pos == 0) /* A non-base64 character. */
return (-1);
diff --git a/src/bin/CMakeLists.txt b/src/bin/CMakeLists.txt
index 99a7e5136..34044ddf9 100644
--- a/src/bin/CMakeLists.txt
+++ b/src/bin/CMakeLists.txt
@@ -2,9 +2,13 @@
if(NOT WIN32)
configure_file(${Anope_SOURCE_DIR}/src/bin/anoperc.cmake ${Anope_BINARY_DIR}/src/bin/anoperc)
install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/anoperc
- DESTINATION "${INSTDIR}"
+ DESTINATION .
)
+ if(IN_SOURCE)
+ # Add anoperc to list of files for CPack to ignore
+ add_to_cpack_ignored_files("anoperc$")
+ endif(IN_SOURCE)
install(PROGRAMS ${CMAKE_CURRENT_SOURCE_DIR}/mydbgen
- DESTINATION "${DATADIR}"
+ DESTINATION data
)
endif(NOT WIN32)
diff --git a/src/channels.c b/src/channels.c
index f901967b2..05891674c 100644
--- a/src/channels.c
+++ b/src/channels.c
@@ -813,7 +813,7 @@ void do_sjoin(const char *source, int ac, const char **av)
s = av[ac - 1]; /* Users are always the last element */
while (*s) {
- end = strchr(s, ' ');
+ end = const_cast<char *>(strchr(s, ' '));
if (end)
*end = 0;
@@ -930,7 +930,7 @@ void do_sjoin(const char *source, int ac, const char **av)
s = av[2]; /* Users are always the last element */
while (*s) {
- end = strchr(s, ' ');
+ end = const_cast<char *>(strchr(s, ' '));
if (end)
*end = 0;
@@ -1005,7 +1005,7 @@ void do_sjoin(const char *source, int ac, const char **av)
s = sstrdup(source); /* Users are always the last element */
while (*s) {
- end = strchr(s, ' ');
+ end = const_cast<char *>(strchr(s, ' '));
if (end)
*end = 0;
diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt
index 904220c06..7b02ac340 100644
--- a/src/core/CMakeLists.txt
+++ b/src/core/CMakeLists.txt
@@ -31,6 +31,6 @@ foreach(SRC ${CORE_SRCS})
endif(WIN32)
# Set the module to be installed to the module directory under the data directory
install(TARGETS ${SO}
- DESTINATION "${DATADIR}/modules"
+ DESTINATION data/modules
)
endforeach(SRC)
diff --git a/src/messages.c b/src/messages.c
index 1a2445a66..b0e5fe710 100644
--- a/src/messages.c
+++ b/src/messages.c
@@ -148,7 +148,7 @@ int m_privmsg(const char *source, const char *receiver, const char *msg)
/* If a server is specified (nick@server format), make sure it matches
* us, and strip it off. */
- s = strchr(receiver, '@');
+ s = const_cast<char *>(strchr(receiver, '@'));
if (s) {
*s++ = 0;
if (stricmp(s, ServerName) != 0)
diff --git a/src/modules/CMakeLists.txt b/src/modules/CMakeLists.txt
index 5d9c37cae..aa04edaa6 100644
--- a/src/modules/CMakeLists.txt
+++ b/src/modules/CMakeLists.txt
@@ -31,6 +31,6 @@ foreach(SRC ${MODULES_SRCS})
endif(WIN32)
# Set the module to be installed to the module directory under the data directory
install(TARGETS ${SO}
- DESTINATION "${DATADIR}/modules"
+ DESTINATION data/modules
)
endforeach(SRC)
diff --git a/src/process.c b/src/process.c
index cb5bf7bd0..4c61ed192 100644
--- a/src/process.c
+++ b/src/process.c
@@ -46,9 +46,9 @@ void add_ignore(const char *nick, time_t delta)
snprintf(tmp, sizeof(tmp), "*!*@%s", u->host);
mask = sstrdup(tmp);
/* Determine whether we get a nick or a mask. */
- } else if ((host = strchr(nick, '@'))) {
+ } else if ((host = const_cast<char *>(strchr(nick, '@')))) {
/* Check whether we have a nick too.. */
- if ((user = strchr(nick, '!'))) {
+ if ((user = const_cast<char *>(strchr(nick, '!')))) {
/* this should never happen */
if (user > host)
return;
@@ -121,8 +121,8 @@ IgnoreData *get_ignore(const char *nick)
break;
} else {
/* We didn't get a user.. generate a valid mask. */
- if ((host = strchr(nick, '@'))) {
- if ((user = strchr(nick, '!'))) {
+ if ((host = const_cast<char *>(strchr(nick, '@')))) {
+ if ((user = const_cast<char *>(strchr(nick, '!')))) {
/* this should never happen */
if (user > host)
return NULL;
@@ -177,9 +177,9 @@ int delete_ignore(const char *nick)
if ((u = finduser(nick))) {
snprintf(tmp, sizeof(tmp), "*!*@%s", u->host);
/* Determine whether we get a nick or a mask. */
- } else if ((host = strchr(nick, '@'))) {
+ } else if ((host = const_cast<char *>(strchr(nick, '@')))) {
/* Check whether we have a nick too.. */
- if ((user = strchr(nick, '!'))) {
+ if ((user = const_cast<char *>(strchr(nick, '!')))) {
/* this should never happen */
if (user > host)
return 0;
diff --git a/src/protocol/CMakeLists.txt b/src/protocol/CMakeLists.txt
index 50f83409c..6fd48290e 100644
--- a/src/protocol/CMakeLists.txt
+++ b/src/protocol/CMakeLists.txt
@@ -31,6 +31,6 @@ foreach(SRC ${PROTOCOL_SRCS})
endif(WIN32)
# Set the module to be installed to the module directory under the data directory
install(TARGETS ${SO}
- DESTINATION "${DATADIR}/modules"
+ DESTINATION data/modules
)
endforeach(SRC)
diff --git a/src/tools/CMakeLists.txt b/src/tools/CMakeLists.txt
index f995de04f..05c535863 100644
--- a/src/tools/CMakeLists.txt
+++ b/src/tools/CMakeLists.txt
@@ -21,8 +21,14 @@ foreach(SRC ${TOOLS_SRCS})
add_dependencies(${EXE} ${PROGRAM_NAME})
# Set the executable to be installed to the tools directory under the bin directory
install(TARGETS ${EXE}
- DESTINATION "${INSTDIR}/tools"
+ DESTINATION tools
)
+ if(IN_SOURCE)
+ # Add the executable to the list of files for CPack to ignore
+ get_target_property(EXE_BINARY ${EXE} LOCATION)
+ get_filename_component(EXE_BINARY ${EXE_BINARY} NAME)
+ add_to_cpack_ignored_files("${EXE_BINARY}$" TRUE)
+ endif(IN_SOURCE)
endforeach(SRC)
# Only for Windows, set anopesmtp to require the wsock32 library
@@ -32,5 +38,5 @@ endif(WIN32)
# On non-Windows platforms, if RUNGROUP is set, change the permissions of the tools directory
if(NOT WIN32 AND RUNGROUP)
- install(CODE "execute_process(COMMAND ${CHMOD} 2770 \"${INSTDIR}/tools\")")
+ install(CODE "execute_process(COMMAND ${CHMOD} 2770 \"\${CMAKE_INSTALL_PREFIX}/tools\")")
endif(NOT WIN32 AND RUNGROUP)
diff --git a/src/tools/db-convert.c b/src/tools/db-convert.c
index d561c5333..084091142 100644
--- a/src/tools/db-convert.c
+++ b/src/tools/db-convert.c
@@ -1582,7 +1582,7 @@ int b64_decode(const char *src, char *target, size_t targsize)
if (ch == Pad64)
break;
- pos = strchr(Base64, ch);
+ pos = const_cast<char *>(strchr(Base64, ch));
if (pos == 0) /* A non-base64 character. */
return (-1);
diff --git a/src/users.c b/src/users.c
index 3c9dc069e..abe8211ba 100644
--- a/src/users.c
+++ b/src/users.c
@@ -521,10 +521,10 @@ User *do_nick(const char *source, const char *nick, const char *username, const
* Ugly swap routine for Flop's bug :)
**/
if (realname) {
- tmp = strchr(realname, '%');
+ tmp = const_cast<char *>(strchr(realname, '%'));
while (tmp) {
*tmp = '-';
- tmp = strchr(realname, '%');
+ tmp = const_cast<char *>(strchr(realname, '%'));
}
}
logrealname = normalizeBuffer(realname);