Merge branch 'dev'

Conflicts:
	.gitignore
	CMakeLists.txt
	README.md
	docs/LOOT Readme.html
	resources/report/script.js
	src/api/api.cpp
	src/backend/game.cpp
	src/backend/game.h
	src/backend/globals.cpp.in
	src/backend/graph.cpp
	src/backend/graph.h
	src/backend/metadata.cpp
	src/backend/metadata.h
	src/backend/network.cpp
	src/gui/editor.cpp
	src/gui/editor.h
	src/gui/main.cpp
	src/gui/main.h
	src/gui/settings.cpp
	src/gui/settings.h
	src/installer.nsi
	src/resource.rc
This commit is contained in:
Oliver Hamlet
2015-05-20 21:05:41 +01:00
125 changed files with 19108 additions and 87423 deletions
+5 -5
View File
@@ -10,13 +10,13 @@
*.dbproj merge=union
# Standard to msysgit
*.doc diff=astextplain
*.DOC diff=astextplain
*.doc diff=astextplain
*.DOC diff=astextplain
*.docx diff=astextplain
*.DOCX diff=astextplain
*.dot diff=astextplain
*.DOT diff=astextplain
*.pdf diff=astextplain
*.PDF diff=astextplain
*.rtf diff=astextplain
*.RTF diff=astextplain
*.PDF diff=astextplain
*.rtf diff=astextplain
*.RTF diff=astextplain
+5
View File
@@ -26,6 +26,10 @@
*.sql
*.sqlite
# Temporary files #
##################3
*~
# OS generated files #
######################
.DS_Store
@@ -49,3 +53,4 @@ docs/html
docs/latex
*.mo
resources/report/bower_components
resources/report/index.html
+72
View File
@@ -0,0 +1,72 @@
language: cpp
compiler:
- gcc
cache: apt
before_install:
# Need Boost 1.54+, which isn't in the 12.04 repositories - install from a PPA.
# Also need the OpenSSL dev package, for git clone from HTTPS URLs support.
- sudo add-apt-repository ppa:boost-latest/ppa -y
- sudo apt-get update -qq
- sudo apt-get install libboost-log1.55-dev libboost-date-time1.55-dev libboost-thread1.55-dev libboost-filesystem1.55-dev libboost-locale1.55-dev libboost-iostreams1.55-dev libssl-dev
install:
# Currently inside the cloned repo path.
# Install Alphanum
- cd ../..
- mkdir alphanum && cd alphanum
- wget http://www.davekoelle.com/files/alphanum.hpp
- cd ..
# Install libespm.
- git clone https://github.com/WrinklyNinja/libespm.git libespm
# Build yaml-cpp
- git clone https://github.com/WrinklyNinja/yaml-cpp yaml-cpp
- mkdir yaml-cpp/build && cd yaml-cpp/build
- git checkout patched-for-loot
- cmake ..
- make yaml-cpp
- cd ../../
# Build libgit2
- wget https://github.com/libgit2/libgit2/archive/v0.22.2.tar.gz
- tar -xf v0.22.2.tar.gz
- mv libgit2-0.22.2 libgit2
- mkdir libgit2/build && cd libgit2/build
- cmake ..
- make git2
- cd ../../
# Install Google Test
- wget https://googletest.googlecode.com/files/gtest-1.7.0.zip
- unzip gtest-1.7.0.zip
- cd gtest-1.7.0
- cmake .
- make
- cd ..
# Build libloadorder
- git clone https://github.com/WrinklyNinja/libloadorder.git libloadorder
- mkdir libloadorder/build && cd libloadorder/build
- cmake .. -DPROJECT_ARCH=64 -DPROJECT_STATIC_RUNTIME=OFF -DGTEST_ROOT=../gtest-1.7.0
- make loadorder64
# Move back into the cloned LOOT repo path.
- cd $TRAVIS_BUILD_DIR
before_script:
- mkdir build && cd build
# Fetch plugins to test with.
- wget https://github.com/WrinklyNinja/testing-plugins/archive/master.zip
- unzip master.zip
- mv testing-plugins-master/* ./
# Get the 3rd-party CMake modules.
- wget https://raw.githubusercontent.com/rpavlik/cmake-modules/master/GetGitRevisionDescription.cmake
- wget https://raw.githubusercontent.com/rpavlik/cmake-modules/master/GetGitRevisionDescription.cmake.in
# Travis machines are 64 bit, and the deps use dynamic linking.
- cmake .. -DPROJECT_ARCH=64 -DPROJECT_STATIC_RUNTIME=OFF -DBUILD_SHARED_LIBS=OFF -DGTEST_ROOT=../../gtest-1.7.0
script: make tests && ./tests
notifications:
irc:
channels:
- "chat.freenode.net#loot"
use_notice: true
skip_join: true
+187 -80
View File
@@ -3,14 +3,42 @@
# PROJECT_ARCH = the build architecture
# LIBESPM_ROOT = the path to the root of the libespm source.
##############################
# Get Build Revision
##############################
# Uses the CMake module in this repo: https://github.com/rpavlik/cmake-modules
# On Windows, this requires the msysgit install of Git, as the script won't find
# the one bundled with GitHub for Windows.
list(APPEND CMAKE_MODULE_PATH ${CMAKE_BINARY_DIR})
include(GetGitRevisionDescription)
get_git_head_revision(GIT_REFSPEC GIT_COMMIT_STRING --tags --long)
IF (GIT_COMMIT_STRING MATCHES "GITDIR-NOTFOUND")
set(GIT_COMMIT_STRING "unknown")
ELSE ()
# Get a shortened ID. Although knowing the shortest unique string requires Git,
# 8 characters should be a good compromise between chance of ambiguity and length,
# especially since the version numbers would narrow down the range of possibly
# ambiguous commits.
string(SUBSTRING ${GIT_COMMIT_STRING} 0 8 GIT_COMMIT_STRING)
ENDIF ()
message(STATUS "Git revision: ${GIT_COMMIT_STRING}")
# Write to file.
configure_file("${CMAKE_SOURCE_DIR}/src/backend/globals.cpp.in" "${CMAKE_BINARY_DIR}/generated/globals.cpp" @ONLY)
##############################
# General Settings
##############################
cmake_minimum_required (VERSION 2.8.9)
cmake_minimum_required (VERSION 2.8)
cmake_policy(SET CMP0015 NEW)
project (LOOT)
option(BUILD_SHARED_LIBS "Build a shared library" OFF)
option(BUILD_SHARED_LIBS "Build a shared library" ON)
option(PROJECT_STATIC_RUNTIME "Build with static runtime libs (/MT)" ON)
IF (NOT DEFINED PROJECT_ARCH)
@@ -33,55 +61,84 @@ IF (NOT DEFINED LIBLOADORDER_ROOT)
set (LIBLOADORDER_ROOT "../../libloadorder")
ENDIF ()
IF (NOT DEFINED YAMLCPP_ROOT)
set (YAMLCPP_ROOT "../../yaml-cpp")
IF (NOT DEFINED CEF_ROOT)
set (CEF_ROOT "../../cef")
ENDIF ()
IF (NOT DEFINED WXWIDGETS_ROOT)
set (WXWIDGETS_ROOT "../../wxWidgets")
ENDIF ()
set (Boost_USE_STATIC_LIBS ON)
set (Boost_USE_STATIC_LIBS ${PROJECT_STATIC_RUNTIME})
set (Boost_USE_MULTITHREADED ON)
set (Boost_USE_STATIC_RUNTIME PROJECT_STATIC_RUNTIME)
set (Boost_USE_STATIC_RUNTIME ${PROJECT_STATIC_RUNTIME})
IF (NOT Boost_USE_STATIC_LIBS)
add_definitions(-DBOOST_LOG_DYN_LINK)
ENDIF ()
find_package(Boost REQUIRED COMPONENTS log log_setup regex locale thread date_time chrono filesystem system iostreams)
find_package(yaml-cpp)
find_package(GTest)
set (LOOT_SRC "${CMAKE_SOURCE_DIR}/src/backend/metadata.cpp"
"${CMAKE_SOURCE_DIR}/src/backend/game.cpp"
"${CMAKE_SOURCE_DIR}/src/backend/helpers.cpp"
"${CMAKE_SOURCE_DIR}/src/backend/globals.cpp"
"${CMAKE_SOURCE_DIR}/src/backend/generators.cpp")
"${CMAKE_SOURCE_DIR}/src/backend/generators.cpp"
"${CMAKE_SOURCE_DIR}/src/backend/graph.cpp"
"${CMAKE_SOURCE_DIR}/src/backend/git.cpp"
"${CMAKE_BINARY_DIR}/generated/globals.cpp")
set (LOOT_HEADERS "${CMAKE_SOURCE_DIR}/src/backend/metadata.h"
"${CMAKE_SOURCE_DIR}/src/backend/game.h"
"${CMAKE_SOURCE_DIR}/src/backend/helpers.h"
"${CMAKE_SOURCE_DIR}/src/backend/globals.h"
"${CMAKE_SOURCE_DIR}/src/backend/generators.h"
"${CMAKE_SOURCE_DIR}/src/backend/graph.h"
"${CMAKE_SOURCE_DIR}/src/backend/error.h"
"${CMAKE_SOURCE_DIR}/src/backend/parsers.h"
"${CMAKE_SOURCE_DIR}/src/backend/streams.h")
set (LOOT_GUI_SRC ${LOOT_SRC}
# Code the API doesn't need.
"${CMAKE_SOURCE_DIR}/src/backend/graph.cpp"
"${CMAKE_SOURCE_DIR}/src/backend/network.cpp"
# Actual GUI code.
"${CMAKE_SOURCE_DIR}/src/gui/ids.cpp"
"${CMAKE_SOURCE_DIR}/src/gui/main.cpp"
"${CMAKE_SOURCE_DIR}/src/gui/settings.cpp"
"${CMAKE_SOURCE_DIR}/src/gui/editor.cpp"
"${CMAKE_SOURCE_DIR}/src/gui/viewer.cpp"
"${CMAKE_SOURCE_DIR}/src/gui/misc.cpp"
"${CMAKE_SOURCE_DIR}/src/gui/main_win.cpp"
"${CMAKE_SOURCE_DIR}/src/gui/handler.cpp"
"${CMAKE_SOURCE_DIR}/src/gui/app.cpp"
"${CMAKE_SOURCE_DIR}/src/gui/scheme.cpp"
"${CMAKE_SOURCE_DIR}/src/resource.rc")
set (LOOT_GUI_HEADERS ${LOOT_HEADERS}
# Code the API doesn't need.
"${CMAKE_SOURCE_DIR}/src/backend/json.h"
# Actual GUI code.
"${CMAKE_SOURCE_DIR}/src/gui/handler.h"
"${CMAKE_SOURCE_DIR}/src/gui/app.h"
"${CMAKE_SOURCE_DIR}/src/gui/scheme.h"
"${CMAKE_SOURCE_DIR}/src/gui/resource.h")
set (LOOT_API_SRC ${LOOT_SRC}
"${CMAKE_SOURCE_DIR}/src/api/api.cpp")
find_package(Boost REQUIRED COMPONENTS log log_setup locale thread chrono date_time filesystem system regex iostreams)
set (LOOT_API_HEADERS ${LOOT_HEADERS}
"${CMAKE_SOURCE_DIR}/src/api/api.h")
set (LOOT_TESTS_SRC "${CMAKE_SOURCE_DIR}/src/tests/main.cpp")
set (LOOT_TESTS_HEADERS "${CMAKE_SOURCE_DIR}/src/tests/fixtures.h"
"${CMAKE_SOURCE_DIR}/src/tests/api/api.h")
source_group("Header Files" FILES ${LOOT_HEADERS} ${LOOT_GUI_HEADERS} ${LOOT_API_HEADERS} ${LOOT_TESTS_HEADERS})
# Include source and library directories.
include_directories ("${CMAKE_SOURCE_DIR}/src"
${ALPHANUM_ROOT}
"${YAMLCPP_ROOT}/include"
"${LIBLOADORDER_ROOT}/src"
"${LIBGIT2_ROOT}/include"
"${WXWIDGETS_ROOT}/include"
${CEF_ROOT}
${LIBESPM_ROOT}
${Boost_INCLUDE_DIRS})
${Boost_INCLUDE_DIRS}
${YAML_CPP_INCLUDE_DIR}
${GTEST_INCLUDE_DIRS})
link_directories ("${LIBLOADORDER_ROOT}/build"
"${LIBGIT2_ROOT}/build"
"${YAMLCPP_ROOT}/build")
"${CEF_ROOT}/Release"
"${CEF_ROOT}/build/libcef_dll/Release")
##############################
@@ -90,52 +147,40 @@ link_directories ("${LIBLOADORDER_ROOT}/build"
# Settings when compiling for Windows. Since it's a Windows-only app this is always true, but useful to check for copy/paste into other projects.
IF (CMAKE_SYSTEM_NAME MATCHES "Windows")
add_definitions (-DUNICODE -D_UNICODE -D__WXMSW__ -DNDEBUG -DLIBLO_STATIC -DWIN32 -D_WINDOWS)
IF (BUILD_SHARED_LIBS)
add_definitions (-DLOOT_EXPORT)
ELSE ()
add_definitions (-DLOOT_STATIC)
add_definitions (-DUNICODE -D_UNICODE -DLIBLO_STATIC)
ENDIF ()
# GCC and MinGW settings.
IF (CMAKE_COMPILER_IS_GNUCXX)
set (CMAKE_C_FLAGS "-m${PROJECT_ARCH} -O3 -std=c++0x")
set (CMAKE_CXX_FLAGS "-m${PROJECT_ARCH} -O3 -std=c++0x")
IF (PROJECT_STATIC_RUNTIME)
set (CMAKE_EXE_LINKER_FLAGS "-static-libstdc++ -static-libgcc")
set (CMAKE_SHARED_LINKER_FLAGS "-static-libstdc++ -static-libgcc")
set (CMAKE_MODULE_LINKER_FLAGS "-static-libstdc++ -static-libgcc")
ENDIF ()
set (LOOT_LIBS git2
loadorder${PROJECT_ARCH})
ENDIF ()
# MinGW settings.
IF (MINGW)
include_directories("${WXWIDGETS_ROOT}/lib/wx/include/${COMPILER_PREFIX}-msw-unicode-static-3.0")
link_directories("${WXWIDGETS_ROOT}/lib")
set (CMAKE_C_FLAGS "-m${PROJECT_ARCH} -O3")
set (CMAKE_CXX_FLAGS "-m${PROJECT_ARCH} -O3")
set (CMAKE_EXE_LINKER_FLAGS "-static-libstdc++ -static-libgcc -Wl,--subsystem,windows")
set (CMAKE_SHARED_LINKER_FLAGS "-static-libstdc++ -static-libgcc -Wl,--subsystem,windows")
set (CMAKE_MODULE_LINKER_FLAGS "-static-libstdc++ -static-libgcc -Wl,--subsystem,windows")
set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--subsystem,windows")
set (CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--subsystem,windows")
set (CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -Wl,--subsystem,windows")
set (LOOT_LIBS ${LOOT_LIBS}
yaml-cpp
boost_log_setup
boost_log
boost_locale
boost_thread_win32
boost_chrono
boost_date_time
boost_filesystem
boost_system
boost_regex
version
loadorder${PROJECT_ARCH}
ssl
crypto
ws2_32)
ws2_32
shlwapi)
set (LOOT_GUI_LIBS ${LOOT_LIBS}
git2
wx_mswu_webview-3.0-${COMPILER_PREFIX}
wx_mswu_core-3.0-${COMPILER_PREFIX}
wx_baseu-3.0-${COMPILER_PREFIX}
wx_mswu_adv-3.0-${COMPILER_PREFIX}
wxpng-3.0-${COMPILER_PREFIX}
wxzlib-3.0-${COMPILER_PREFIX}
cef_sandbox
libcef
libcef_dll_wrapper
rpcrt4
comctl32)
ELSEIF (MSVC)
include_directories("${WXWIDGETS_ROOT}/lib/vc_lib/mswu")
link_directories("${WXWIDGETS_ROOT}/lib/vc_lib")
# Force static C++ runtime linkage.
IF (PROJECT_STATIC_RUNTIME)
FOREACH(flag
@@ -148,31 +193,93 @@ ELSEIF (MSVC)
ENDFOREACH()
ENDIF ()
set (CMAKE_EXE_LINKER_FLAGS "/SUBSYSTEM:WINDOWS /LARGEADDRESSAWARE")
set (LOOT_LIBS libyaml-cppmt
version
loadorder${PROJECT_ARCH}
ws2_32)
set (LOOT_LIBS git2
version
loadorder${PROJECT_ARCH}
ws2_32
shlwapi)
set (LOOT_GUI_LIBS ${LOOT_LIBS}
git2
wxmsw30u_webview
wxmsw30u_adv
wxmsw30u_core
wxbase30u
wxpng
wxzlib
cef_sandbox
libcef
libcef_dll_wrapper
rpcrt4
comctl32)
ENDIF ()
##############################
# Actual Building
# Define Targets
##############################
# Build API.
add_library (loot${PROJECT_ARCH} ${LOOT_API_SRC})
target_link_libraries (loot${PROJECT_ARCH} ${Boost_LIBRARIES} ${LOOT_LIBS})
add_library (loot${PROJECT_ARCH} ${LOOT_API_SRC} ${LOOT_API_HEADERS})
target_link_libraries (loot${PROJECT_ARCH} ${Boost_LIBRARIES} ${YAML_CPP_LIBRARIES} ${LOOT_LIBS})
IF (${GTEST_FOUND})
# Build tests.
add_executable(tests ${LOOT_TESTS_SRC} ${LOOT_TESTS_HEADERS})
target_link_libraries(tests loot${PROJECT_ARCH} ${Boost_LIBRARIES} ${YAML_CPP_LIBRARIES} ${LOOT_LIBS} ${GTEST_BOTH_LIBRARIES})
ENDIF ()
# Build application.
add_executable (LOOT ${LOOT_GUI_SRC})
target_link_libraries (LOOT ${Boost_LIBRARIES} ${LOOT_GUI_LIBS})
add_executable (LOOT ${LOOT_GUI_SRC} ${LOOT_GUI_HEADERS})
target_link_libraries (LOOT ${Boost_LIBRARIES} ${YAML_CPP_LIBRARIES} ${LOOT_GUI_LIBS})
##############################
# Set Target-Specific Flags
##############################
IF (MSVC)
set (LOOT_LINK_FLAGS "/SUBSYSTEM:WINDOWS /LARGEADDRESSAWARE")
get_target_property (EXISTING_LINK_FLAGS LOOT LINK_FLAGS)
IF (EXISTING_LINK_FLAGS)
set (LOOT_LINK_FLAGS "${EXISTING_LINK_FLAGS} ${LOOT_LINK_FLAGS}")
ENDIF ()
set_target_properties (LOOT PROPERTIES LINK_FLAGS ${LOOT_LINK_FLAGS})
ENDIF ()
IF (CMAKE_SYSTEM_NAME MATCHES "Windows")
IF (BUILD_SHARED_LIBS)
set_target_properties (loot${PROJECT_ARCH} PROPERTIES COMPILE_DEFINITIONS "${COMPILE_DEFINITIONS} LOOT_EXPORT")
ELSE ()
set_target_properties (loot${PROJECT_ARCH} PROPERTIES COMPILE_DEFINITIONS "${COMPILE_DEFINITIONS} LOOT_STATIC")
ENDIF ()
ENDIF ()
##############################
# Post-Build Steps
##############################
add_custom_command(
TARGET LOOT
POST_BUILD
COMMAND "mt.exe" -manifest \"${CMAKE_SOURCE_DIR}/src/gui/LOOT.exe.manifest\" -inputresource:"$(TargetDir)$(TargetFileName)"\;\#1 -outputresource:"$(TargetDir)$(TargetFileName)"\;\#1
COMMENT "Adding manifest..."
)
# Copy CEF DLLs.
FOREACH(cef_dll d3dcompiler_47.dll libEGL.dll libGLESv2.dll libcef.dll wow_helper.exe)
add_custom_command(TARGET LOOT POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different
"${CMAKE_SOURCE_DIR}/${CEF_ROOT}/$<CONFIGURATION>/${cef_dll}"
$<TARGET_FILE_DIR:LOOT>)
ENDFOREACH()
# Copy CEF resources.
FOREACH(cef_resource cef.pak cef_100_percent.pak cef_200_percent.pak devtools_resources.pak icudtl.dat)
add_custom_command(TARGET LOOT POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different
"${CMAKE_SOURCE_DIR}/${CEF_ROOT}/Resources/${cef_resource}"
$<TARGET_FILE_DIR:LOOT>)
ENDFOREACH()
# Copy CEF locale resources. This is just to reduce error messages while debugging.
FOREACH(cef_resource en-US.pak)
add_custom_command(TARGET LOOT POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different
"${CMAKE_SOURCE_DIR}/${CEF_ROOT}/Resources/locales/${cef_resource}"
$<TARGET_FILE_DIR:LOOT>/resources/l10n)
ENDFOREACH()
+66
View File
@@ -0,0 +1,66 @@
Contributing To LOOT
====================
A general guide to contributing to LOOT, may be found on [LOOT's wiki](https://github.com/loot/loot.github.io/wiki/How-To-Contribute). Information more specific to this repository is found here.
## Repository Branching Structure
The repository branching structure is pretty simple:
* The `master` branch is a ready-to-release branch. It will generally hold code newer than the latest release, but which could be prepared (ie. update version number, changelog) and packaged for release fairly quickly and easily. Code on this branch *should* be reasonably bug free and features will be complete.
* The `dev` branch is a next-release branch. It holds code that's working towards the next big release but which isn't there yet. Code is generally buggy and features incomplete (though this will vary considerably through the development cycle.
* Other branches are generally themed on specific features or groups of changes, and come and go as they are merged into one of the two above, or discarded.
## Getting Involved
The best way to get started is to comment on something in GitHub's commit log or on the [issue tracker](https://github.com/loot/loot/issues) (new tracker entries are always welcome).
Surprise pull requests aren't recommended because everything you touched may have been rewritten, making your changes a pain to integrate, or obsolete. There are only generally a few contributors at any one time though, so there's not much chance of painful conflicts requiring resolution, provided you're working off the correct branch.
When you do make a pull request, please do so from a branch which doesn't have the same name as they branch you're requesting your changes to be merged into. It's a lot easier to keep track of what pull request branches do when they're named something like `you:specific-cool-feature` rather than `you:master`.
## Translating LOOT
### General Information
LOOT supports translation into other languages, with the following limitations:
* Debug log messages and error messages generated by the libraries LOOT uses cannot be translated.
* Masterlist messages can be translated, but translations must be submitted to the masterlist maintainers for addition. Translating masterlist messages won't be covered here.
* The languages LOOT supports is hardcoded, so LOOT must be updated to include new translations.
To translate everything but masterlist messages, first fork this repository. All file paths given below are relative to its base folder.
### Translating the Installer
1. Open the installer script at `src/installer.nsi` in a text editor of your choice.
2. The English strings are located in the section with the heading `English Strings`. Create a copy of this section below the original.
3. Translate the quoted strings in the copied section, replacing the English text. For the lines beginning `VIAddVersionKey`, only translate the second quoted string.
4. Add an `!insertmacro MUI_LANGUAGE "<name>"` line to the section with the headering `Languages`. `<name>` is the NSIS name for your language: a perhaps incomplete example of accepted values can be found in [this script](http://nsis.sourceforge.net/Examples/Modern%20UI/MultiLanguage.nsi).
3. Save your changes.
### Translating the LOOT application
1. Download and install the latest version of [Poedit](http://www.poedit.net/).
2. If you are starting a new translation, select `File->New catalogue from POT file...` and choose the template file at `resources/l10n/template.pot`. In the `Catalog properties` dialog, just click `OK` without changing anything.
3. If you are updating a previous translation, open in Poedit the `loot.po` translation file in the relevant subdirectory of `resources/l10n`, then select `Catalogue->Update from POT file...` and choose the template file you downloaded. Click `OK` in the `Update summary` dialog.
4. Edit the translation file to add or update translations of the programs' text. Strings that were added since the last translation are displayed in bold and dark blue, and strings you have edited the translations of are marked with a star to the left of their source text in the main list.
5. Save the translation file with the filename `loot.po` in `resources/l10n/<locale>/LC_MESSAGES/`, where `<locale>` is your language's locale code.
Some languages may use different words or phrases for different contexts where only one word or phrase may be used for all contexts in English. While no contextual information is supplied to translators by default, it can be added on request. To request the addition of contextual information to a text string, create an issue for your request in LOOT's [source code issue tracker](https://github.com/loot/loot/issues), quoting the string for which you are requesting contextual information.
Some strings to be translated may contain special characters. Different types of special character that may be encountered are:
* Backslashes (`\`). These are used to escape backslashes and double-quotation marks (`"`) in the C++ translation strings. Don't add new backslashes into translations, and make sure all backslashes in the original string are retained in the translation.
* Formatting placeholders are used so that LOOT can substitute text or numbers that are generated at runtime into pre-made strings. They appear as a number surrounded by percentage signs, eg. `%1%`, or as `%s`. If formatting placeholders are used in the untranslated string, they **must all** be present in the translated string, or LOOT will crash when it tries to display the translated string. Placeholders can be moved around so that the sentence makes grammatical sense in the target language.
### Adding A New Translation
If you're adding a new translation, LOOT's source code must be updated to recognise it. You can do this yourself and include the changes in your translation's pull request if you wish. The files and functions which must be updated are given below.
* In [helpers.h](src/backend/helpers.h), add a constant for the language to the `Language` class, and update `Language::Names()`.
* In [helpers.cpp](src/backend/helpers.cpp), update `Language::Language(const std::string& nameOrCode)` and `Language::Construct(const unsigned int code)`.
* Add constants for the language in [api.h](src/api/api.h) and [api.cpp](src/api/api.cpp).
* In [archive.py](src/archive.py), add the language folder to the inline list on line 68.
* In [installer.nsi](src/installer.nsi), add entries for the language folder to the install and uninstall sections.
* In [LOOT Metadata Syntax.html](docs/LOOT%20Metadata%20Syntax.html), add a row for your language to the Language Codes table.
+39 -21
View File
@@ -1,46 +1,64 @@
# LOOT
[![Build Status](https://travis-ci.org/loot/loot.svg?branch=dev)](https://travis-ci.org/loot/loot)
## Introduction
LOOT is a plugin load order optimiser for TES IV: Oblivion, TES V: Skyrim, Fallout 3 and Fallout: New Vegas. It is designed to assist mod users in avoiding detrimental conflicts, by automatically calculating a load order that satisfies all plugin dependencies and maximises each plugin's impact on the user's game.
LOOT is a plugin load order optimisation tool for TES IV: Oblivion, TES V: Skyrim, Fallout 3 and Fallout: New Vegas. It is designed to assist mod users in avoiding detrimental conflicts, by automatically calculating a load order that satisfies all plugin dependencies and maximises each plugin's impact on the user's game.
LOOT also provides some load order error checking, including checks for requirements, incompatibilities and cyclic dependencies. In addition, it provides a large number of plugin-specific usage notes, bug warnings and Bash Tag suggestions.
Although LOOT is able to calculate the correct load order positions for the vast majority of mods without any user input, some plugins are designed to load at certain positions in a load order, and LOOT may be unable to determine this from the plugins themselves. As such, LOOT provides a mechanism for supplying additional plugin metadata so that it may sort them correctly.
LOOT is intended to make using mods easier, and mod users should still possess a working knowledge of mod load ordering. See the "Introduction To Load Orders" section of the LOOT readme for an overview.
LOOT is intended to make using mods easier, and mod users should still possess a working knowledge of mod load ordering. See [Introduction To Load Orders](https://github.com/loot/loot.github.io/wiki/Introduction-To-Load-Orders) for an overview.
## Building LOOT
LOOT uses [CMake](http://cmake.org) for cross-platform building support, as though it is a Windows application, development has taken place on Windows and Linux.
### C++ Backend
LOOT requires the following libraries (version numbers used in latest development revision given):
LOOT uses [CMake](http://cmake.org) to generate build files, and requires the following libraries (version numbers used in latest development revision given):
* [Alphanum](http://www.davekoelle.com/files/alphanum.hpp)
* [Boost](http://www.boost.org) v1.57.0
* [Boost](http://www.boost.org) v1.58.0
* [Chromium Embedded Framework](https://bitbucket.org/chromiumembedded/cef) branch 2272
* [Google Test](https://code.google.com/p/googletest/) v1.7: Required to build the LOOT API's tests, but not the API itself or the LOOT application.
* [Libespm](http://github.com/WrinklyNinja/libespm)
* [Libgit2](http://libgit2.github.com/) v0.21.3
* [Libgit2](http://libgit2.github.com/) v0.22.2
* [Libloadorder](http://github.com/WrinklyNinja/libloadorder)
* [wxWidgets](http://www.wxwidgets.org) v3.0.2
* [yaml-cpp](http://github.com/WrinklyNinja/yaml-cpp)
* [yaml-cpp](http://github.com/WrinklyNinja/yaml-cpp): Use the `patched-for-loot` branch.
Alphanum and Libespm do not require any additional setup. The rest of the libraries must be built separately. Instructions for building them and LOOT itself using MSVC or MinGW are given in [docs/BUILD.MSVC.md](docs/BUILD.MSVC.md) and [docs/BUILD.MinGW.md](docs/BUILD.MinGW.md) respectively.
Alphanum and Libespm do not require any additional setup. The rest of the libraries must be built separately. Instructions for building them and LOOT itself using Microsoft Visual Studio are given in [docs/BUILD.MSVC.md](docs/BUILD.MSVC.md).
Although LOOT uses a cross-platform build system and cross-platform libraries, it does rely on some Windows API functionality. Anyone wishing to port LOOT to other platforms will need to ensure equivalent functionality is implemented for their target platform. The Windows API code is wrapped in `#ifdef _WIN32` blocks so that it can be easily identified.
### User Interface
LOOT's UI relies on a few web libraries:
* [Polymer](https://www.polymer-project.org)
* [Jed](https://github.com/SlexAxton/Jed)
* [Jed Gettext Parser](https://github.com/WrinklyNinja/jed-gettext-parser)
* [Marked](https://github.com/chjj/marked)
* [RequireJS](http://requirejs.org/)
These dependencies are most easily managed using [Bower](http://bower.io/), and are built for distribution using [Vulcanize](https://github.com/Polymer/vulcanize).
To install Bower and Vulcanize, first install [Node](http://nodejs.org/), and run `npm install -g bower vulcanize` from the command line (on Windows, it needs to be the Node command prompt). Once they are installed, fetch and build the dependencies by running `bower install ./ && vulcanize --inline --strip -o index.html report.html` from inside this repository's `resources/report` folder (this command doesn't need to be run through Node).
## Packaging Releases
Installer and zip archive releases for the main LOOT application can be handled by running the scripts `installer.nsi` and `archive.py` in the `src` folder respectively. The installer script requires [Unicode NSIS](http://www.scratchpaper.com/), while the archive script requires [Python](http://www.python.org/).
Installer and zip archive releases for the main LOOT application can be handled by running the scripts `installer.nsi` and `archive.py` in the `src` folder respectively. The installer script requires [NSIS 3](http://nsis.sourceforge.net/), while the archive script requires [Python](http://www.python.org/) (2 or 3). The installer and archive files are created in the `build/` folder, relative to the repository root.
The installer and Python script both require the built LOOT.exe to be at `build\LOOT.exe`.
If you have [Git for Windows (msysGit)](https://msysgit.github.io/) or [GitHub for Windows](https://windows.github.com/) installed and you're building from a clone of this repository, the archive script will give archives descriptive names using the output of `git describe --tags --long`. If you have [7-Zip](http://7-zip.org) installed, `.7z` archives will be created. Otherwise, archives will be named `LOOT Archive` and created as deflate-compressed zip files.
## Adding Translations
## Snapshot Builds
If a translation for a new language is provided, here's what needs changing to make LOOT use that translation.
Snapshot build archives are made available on [Dropbox](https://www.dropbox.com/sh/scuvwwc6ovzagmd/AAD1TodBAwGQTuV1-4Z2d0sCa?dl=0) fairly regularly. If you can't or don't want to build LOOT yourself, but still want to test a more recent build than the latest release or pre-release, you can check to see if there is such a build available.
* In [helpers.h](src/backend/helpers.h), add a constant for the language to the `Language` class, and update `Language::Names()`.
* In [helpers.cpp](src/backend/helpers.cpp), update `Language::Language(const std::string& nameOrCode)` and `Language::Construct(const unsigned int code)`.
* Add constants for the language in [api.h](src/api/api.h) and [api.cpp](src/api/api.cpp).
* In [main.cpp](src/gui/main.cpp), update `LOOT::OnInit` to set the correct `wxLANGUAGE_`.
* In [archive.py](src/archive.py), add the language folder to the inline list on line 68.
* In [installer.nsi](src/installer.nsi), add entries for the language folder to the install and uninstall sections. If there's an installer translation, also add its string definitions beside all the other language string definitions, and insert its macro beside all the other language macros.
* The readmes should be updated with a link to the translation in the repository in the main readme, and the language's code in the metadata syntax readme.
The archives are named in the following manner:
```
LOOT <last tag>-<revisions since tag>-g<short revision ID>.7z
```
For example `LOOT v0.7.0-alpha-2-10-gf6d7e80.7z` was built using the revision with shortened commit ID `f6d7e80`, which is `10` revisions after the revision tagged `v0.7.0-alpha-2`.
+27 -15
View File
@@ -11,19 +11,29 @@ b2 toolset=msvc threadapi=win32 link=static runtime-link=static variant=release
`link`, `runtime-link` and `address-model` can all be modified if shared linking or 64 bit builds are desired. LOOT uses statically-linked Boost libraries by default: to change this, edit [CMakeLists.txt](../CMakeLists.txt).
#### wxWidgets
#### Chromium Embedded Framework
Just build the solution provided by wxWidgets. You may need to change the C/C++ Runtime Library setting in each project to `Multi-threaded (/MT)`.
Most of the required binaries are pre-built, but the libcef_dll_wrapper dynamic library must be built.
1. Configure CMake and generate a build system for Visual Studio by running:
```
mkdir build && cd build
cmake.exe .. -G "Visual Studio 12"
```
2. Open the generated solution file, and build it with `Release` configuration.
#### yaml-cpp
1. Configure CMake and generate a build system for Visual Studio by running:
```
mkdir build
cd build
cmake.exe .. -G "Visual Studio 12" -DBOOST_ROOT={BOOST_ROOT} -DMSVC_SHARED_RT=OFF
```
Adapt the commands as necessary for your particular setup.
```
mkdir build && cd build
cmake.exe .. -G "Visual Studio 12" -DBOOST_ROOT={BOOST_ROOT} -DMSVC_SHARED_RT=OFF
```
Adapt the commands as necessary for your particular setup.
2. Open the generated solution file, and build it with `Release` configuration.
#### Libloadorder
@@ -35,16 +45,19 @@ Example CMake keys: `-DCMAKE_RUNTIME_OUTPUT_DIRECTORY=build -DCMAKE_ARCHIVE_OUTP
#### Libgit2
1. Configure CMake and generate a build system for Visual Studio by running:
```
mkdir build
cd build
cmake.exe .. -G "Visual Studio 12" -DBUILD_SHARED_LIBS=OFF -DSTATIC_CRT=ON
```
```
mkdir build && cd build
cmake.exe .. -G "Visual Studio 12" -DBUILD_SHARED_LIBS=OFF -DSTATIC_CRT=ON -DTHREADSAFE=ON
```
Adapt the commands as necessary for your particular setup.
2. Open the generated solution file, and build it with `Release` configuration.
#### LOOT
LOOT uses a third-party CMake module to generate its build revision data, so first download the `GetGitRevisionDescription.cmake` and `GetGitRevisionDescription.cmake.in` files found in [this repository](https://github.com/rpavlik/cmake-modules) to the `build` subdirectory of the LOOT folder.
LOOT uses the following CMake variables to set build parameters:
Parameter | Values | Default |Description
@@ -53,11 +66,10 @@ Parameter | Values | Default |Description
`PROJECT_STATIC_RUNTIME` | `ON`, `OFF` | `ON` | Whether to link the C++ runtime statically or not. This also affects the Boost libraries used.
`PROJECT_ARCH` | `32`, `64` | `32` | Whether to build 32 or 64 bit LOOT binaries.
`ALPHANUM_ROOT` | path | `../../alphanum` | Path to the folder containing `alphanum.hpp`.
`CEF_ROOT` | path | `../../cef` | Path to the root of the Chromium Embedded Framework folder.
`LIBESPM_ROOT` | path | `../../libespm` | Path to the root of the libespm repository folder.
`LIBGIT2_ROOT` | path | `../../libgit2` | Path to the root of the libgit2 repository folder.
`LIBLOADORDER_ROOT` | path | `../../libloadorder` | Path to the root of the libloadorder repository folder.
`YAMLCPP_ROOT` | path | `../../yaml-cpp` | Path to the root of the yaml-cpp folder.
`WXWIDGETS_ROOT` | path | `../../wxWidgets` | Path to the root of the wxWidgets folder.
The default paths given in the table above are relative to LOOT's `CMakeLists.txt`.
-45
View File
@@ -1,45 +0,0 @@
# Build Instructions using MinGW
These instructions were used to build LOOT using mingw-w64 on Ubuntu and Debian linux, though they should also apply to other similar environments.
#### Boost
```
./bootstrap.sh
echo "using gcc : 4.6.3 : i686-w64-mingw32-g++ : <rc>i686-w64-mingw32-windres <archiver>i686-w64-mingw32-ar <ranlib>i686-w64-mingw32-ranlib ;" > tools/build/v2/user-config.jam
./b2 toolset=gcc-4.6.3 target-os=windows threadapi=win32 link=static runtime-link=static variant=release address-model=32 cxxflags=-fPIC --with-log --with-date_time --with-thread --with-filesystem --with-locale --with-regex --with-system --with-iostreams --stagedir=stage-32
```
#### wxWidgets
```
./configure --host=i686-w64-mingw32 --disable-shared --enable-stl
make
```
#### yaml-cpp
```
cmake . -DCMAKE_C_FLAGS=-m32 -DPROJECT_ARCH=32 -DCMAKE_TOOLCHAIN_FILE=../LOOT/mingw-toolchain.cmake -DBOOST_ROOT=../boost
make
```
#### Libloadorder
Follow the instructions in libloadorder's README.md to build it as a static library.
#### Libgit2
```
mkdir build && cd build
cmake .. -DBUILD_SHARED_LIBS=OFF -DOPENSSL_ROOT_DIR=../openssl -DCMAKE_C_FLAGS=-m32 -DPROJECT_ARCH=32 -DCMAKE_TOOLCHAIN_FILE=../LOOT/mingw-toolchain.cmake
make
```
#### LOOT
```
mkdir build && cd build
cmake .. -DPROJECT_LIBS_DIR=".." -DPROJECT_ARCH=32 -DPROJECT_LINK=STATIC -DCMAKE_TOOLCHAIN_FILE="mingw-toolchain.cmake"
make
```
+3 -4
View File
@@ -119,7 +119,7 @@ INLINE_INHERITED_MEMB = NO
# path before files name in the file list and in the header files. If set
# to NO the shortest path that makes the file name unique will be used.
FULL_PATH_NAMES = YES
FULL_PATH_NAMES = NO
# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
# can be used to strip a user-defined part of the path. Stripping is
@@ -655,8 +655,7 @@ WARN_LOGFILE =
# directories like "/usr/src/myproject". Separate the files or directories
# with spaces.
INPUT = ../src/api/api.h \
api_index.dox
INPUT = ../src/api/api.h
# This tag can be used to specify the character encoding of the source files
# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
@@ -1238,7 +1237,7 @@ MAKEINDEX_CMD_NAME = makeindex
# LaTeX documents. This may be useful for small projects and may help to
# save some trees in general.
COMPACT_LATEX = NO
COMPACT_LATEX = YES
# The PAPER_TYPE tag can be used to set the paper type that is used
# by the printer. Possible values are: a4, letter, legal and
File diff suppressed because it is too large Load Diff
+470 -334
View File
File diff suppressed because it is too large Load Diff
-18
View File
@@ -1,18 +0,0 @@
/**
@mainpage
@author WrinklyNinja
@version 0..0
@copyright The LOOT API is distributed under the GNU General Public License v3.0. For the full text of the license, see the "GNU GPL v3.txt" file included in the source archive.
@section intro_sec Introduction
LOOT is a utility that helps users avoid serious conflicts between their mods by setting their plugins in an optimal load order. It also provides tens of thousands of plugin-specific messages, including usage notes, requirements, incompatibilities, bug warnings and installation mistake notifications, and thousands of Bash Tag suggestions.
This metadata that LOOT supplies is stored in its masterlist, which is maintained by the LOOT team using information provided by mod authors and users. Users can also add to and modify the metadata used by LOOT through the use of userlist files. The LOOT API provides a way for third-party developers to access this metadata for use in their own programs.
All further API documentation is contained within the documentation for api.h.
@section credit_sec Credits
The LOOT API is written by WrinklyNinja in C/C++ and makes use of the <a href="http://code.google.com/p/yaml-cpp/">yaml-cpp</a> and <a href="http://github.com/WrinklyNinja/libloadorder/">libloadorder</a> libraries and some of the <a href="http://www.boost.org/">Boost</a> libraries. Copyright license information for all these may be found in the "licenses/Licenses.txt" file.
*/
Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.6 KiB

After

Width:  |  Height:  |  Size: 111 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 38 KiB

-178
View File
@@ -1,178 +0,0 @@
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
@@ -0,0 +1,29 @@
// Copyright (c) 2008-2013 Marshall A. Greenblatt. Portions Copyright (c)
// 2006-2009 Google Inc. All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
// * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
// * 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.
// * Neither the name of Google Inc. nor the name Chromium Embedded
// Framework nor the names of its contributors may be used to endorse
// or promote products derived from this software without specific prior
// written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "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 COPYRIGHT
// OWNER OR CONTRIBUTORS 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.

Some files were not shown because too many files have changed in this diff Show More