diff options
-rw-r--r-- | CMakeLists.txt | 174 | ||||
-rw-r--r-- | Config.bat | 4 | ||||
-rw-r--r-- | NSIS.template.in | 825 | ||||
-rw-r--r-- | data/CMakeLists.txt | 2 | ||||
-rw-r--r-- | docs/CMakeLists.txt | 15 | ||||
-rw-r--r-- | docs/README | 750 | ||||
-rw-r--r-- | docs/WIN32.txt | 418 | ||||
-rw-r--r-- | include/CMakeLists.txt | 11 | ||||
-rw-r--r-- | install.js | 24 | ||||
-rw-r--r-- | lang/CMakeLists.txt | 55 | ||||
-rw-r--r-- | src/CMakeLists.txt | 10 | ||||
-rw-r--r-- | src/base64.c | 2 | ||||
-rw-r--r-- | src/bin/CMakeLists.txt | 8 | ||||
-rw-r--r-- | src/channels.c | 6 | ||||
-rw-r--r-- | src/core/CMakeLists.txt | 2 | ||||
-rw-r--r-- | src/messages.c | 2 | ||||
-rw-r--r-- | src/modules/CMakeLists.txt | 2 | ||||
-rw-r--r-- | src/process.c | 12 | ||||
-rw-r--r-- | src/protocol/CMakeLists.txt | 2 | ||||
-rw-r--r-- | src/tools/CMakeLists.txt | 10 | ||||
-rw-r--r-- | src/tools/db-convert.c | 2 | ||||
-rw-r--r-- | src/users.c | 4 |
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); |