From b9bf9f2e862f8f079a7228103cfcfa502711ffdc Mon Sep 17 00:00:00 2001 From: Oliver Hamlet Date: Mon, 21 Mar 2016 22:45:29 +0000 Subject: [PATCH] Use CMake to resolve most dependencies The CEF dependency is not resolved using CMake because it's only available behind a CAPTCHA, and the Boost dependency is not resolved using CMake because it is a relatively large dependency that is better shared between LOOT and its dependencies that use it, instead of each having to build a separate copy. This is slower than the existing Travis script, because all targets in the dependencies are now built, but it is more portable. --- .travis.yml | 19 +--- CMakeLists.txt | 195 ++++++++++++++++++++++----------- README.md | 21 +--- docs/BUILD.MSVC.md | 47 +------- scripts/install-step.travis.sh | 37 ------- 5 files changed, 139 insertions(+), 180 deletions(-) delete mode 100644 scripts/install-step.travis.sh diff --git a/.travis.yml b/.travis.yml index 5503a1ca..cbc67911 100644 --- a/.travis.yml +++ b/.travis.yml @@ -25,9 +25,6 @@ addons: install: # Use GCC 5. - if [ "$CXX" = "g++" ]; then export CXX="g++-5" CC="gcc-5"; fi - # Run install step script to download and build dependencies. - - chmod +x scripts/install-step.travis.sh - - ./scripts/install-step.travis.sh # Install the latest stable Node.js. The default Node.js version is too old # for some of the JavaScript syntax used. - npm install -g nvm @@ -40,22 +37,10 @@ install: - bower install before_script: - # Build Google Test - - cd ../.. - - wget https://github.com/google/googletest/archive/release-1.7.0.tar.gz -O - | tar -xz - - cd googletest-release-1.7.0 - - cmake . - - make # Move into the cloned LOOT repo build path. - - mkdir $TRAVIS_BUILD_DIR/build && cd $TRAVIS_BUILD_DIR/build - # Fetch plugins to test with. - - wget https://github.com/WrinklyNinja/testing-plugins/archive/1.0.0.tar.gz -O - | tar -xz - - mv testing-plugins-1.0.0/* ./ - # Fetch metadata to test with. - - wget https://github.com/loot/testing-metadata/archive/1.0.0.tar.gz -O - | tar -xz - - mv testing-metadata-1.0.0 testing-metadata + - mkdir build && cd build # Travis machines are 64 bit, and the dependencies use dynamic linking. - - cmake .. -DPROJECT_ARCH=64 -DPROJECT_STATIC_RUNTIME=OFF -DBUILD_SHARED_LIBS=OFF -DGTEST_ROOT=../../googletest-release-1.7.0 + - cmake .. -DPROJECT_STATIC_RUNTIME=OFF -DBUILD_SHARED_LIBS=OFF script: - '[ "${TRAVIS_PULL_REQUEST}" = "false" ] && npm test || false' diff --git a/CMakeLists.txt b/CMakeLists.txt index c244f330..210e8f90 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,7 +1,14 @@ # Settings passed on the command line: # # PROJECT_ARCH = the build architecture -# LIBESPM_ROOT = the path to the root of the libespm source. + +cmake_minimum_required (VERSION 2.8) +cmake_policy(SET CMP0015 NEW) +project (LOOT) +include(ExternalProject) + +option(BUILD_SHARED_LIBS "Build a shared library" ON) +option(PROJECT_STATIC_RUNTIME "Build with static runtime libs (/MT)" ON) ############################## # Get Build Revision @@ -24,16 +31,9 @@ message(STATUS "Git revision: ${GIT_COMMIT_STRING}") configure_file("${CMAKE_SOURCE_DIR}/src/backend/globals.cpp.in" "${CMAKE_BINARY_DIR}/generated/globals.cpp" @ONLY) ############################## -# General Settings +# External Projects ############################## -cmake_minimum_required (VERSION 2.8) -cmake_policy(SET CMP0015 NEW) -project (LOOT) - -option(BUILD_SHARED_LIBS "Build a shared library" ON) -option(PROJECT_STATIC_RUNTIME "Build with static runtime libs (/MT)" ON) - # With MSVC, the 32/64 bit compilers have separate generators, so PROJECT_ARCH # should always match whichever is being used. IF (MSVC) @@ -42,30 +42,12 @@ IF (MSVC) ELSE () set (PROJECT_ARCH "32") ENDIF () + set(YAML_CPP_LIBRARY_SUFFIX "mt${CMAKE_STATIC_LIBRARY_SUFFIX}") ELSE () IF (NOT DEFINED PROJECT_ARCH) set (PROJECT_ARCH "32") ENDIF () -ENDIF () - -IF (NOT DEFINED LIBESPM_ROOT) - set (LIBESPM_ROOT "../../libespm") -ENDIF () - -IF (NOT DEFINED LIBGIT2_ROOT) - set (LIBGIT2_ROOT "../../libgit2") -ENDIF () - -IF (NOT DEFINED LIBLOADORDER_ROOT) - set (LIBLOADORDER_ROOT "../../libloadorder") -ENDIF () - -IF (NOT DEFINED CEF_ROOT) - set (CEF_ROOT "../../cef") -ENDIF () - -IF (NOT DEFINED PSEUDOSEM_ROOT) - set (PSEUDOSEM_ROOT "../../pseudosem") + set(YAML_CPP_LIBRARY_SUFFIX ${CMAKE_STATIC_LIBRARY_SUFFIX}) ENDIF () set (Boost_USE_STATIC_LIBS ${PROJECT_STATIC_RUNTIME}) @@ -77,8 +59,87 @@ IF (NOT Boost_USE_STATIC_LIBS) ENDIF () find_package(Boost REQUIRED COMPONENTS atomic log log_setup regex locale thread date_time chrono filesystem system iostreams) -find_package(yaml-cpp) -find_package(GTest) + +ExternalProject_Add(GTest + PREFIX "external" + URL "https://github.com/google/googletest/archive/release-1.7.0.tar.gz" + INSTALL_COMMAND "") +ExternalProject_Get_Property(GTest SOURCE_DIR BINARY_DIR) +set (GTEST_INCLUDE_DIRS "${SOURCE_DIR}/include") +set (GTEST_LIBRARIES "${BINARY_DIR}/${CMAKE_CFG_INTDIR}/${CMAKE_STATIC_LIBRARY_PREFIX}gtest${CMAKE_STATIC_LIBRARY_SUFFIX}") + +ExternalProject_Add(libespm + PREFIX "external" + URL "https://github.com/WrinklyNinja/libespm/archive/2.5.2.tar.gz" + CONFIGURE_COMMAND "" + BUILD_COMMAND "" + INSTALL_COMMAND "") +ExternalProject_Get_Property(libespm SOURCE_DIR) +set (LIBESPM_INCLUDE_DIRS "${SOURCE_DIR}/include") + +ExternalProject_Add(libgit2 + PREFIX "external" + URL "https://github.com/libgit2/libgit2/archive/v0.24.0.tar.gz" + CMAKE_ARGS -DBUILD_SHARED_LIBS=OFF -DBUILD_CLAR=OFF + BUILD_COMMAND ${CMAKE_COMMAND} --build . --target git2 --config $(CONFIGURATION) + INSTALL_COMMAND "") +ExternalProject_Get_Property(libgit2 SOURCE_DIR BINARY_DIR) +set(LIBGIT2_INCLUDE_DIRS "${SOURCE_DIR}/include") +set(LIBGIT2_LIBRARIES "${BINARY_DIR}/${CMAKE_CFG_INTDIR}/${CMAKE_STATIC_LIBRARY_PREFIX}git2${CMAKE_STATIC_LIBRARY_SUFFIX}") + +ExternalProject_Add(libloadorder + PREFIX "external" + DEPENDS libespm + URL "https://github.com/WrinklyNinja/libloadorder/archive/8.0.0.tar.gz" + CMAKE_ARGS -DBOOST_INCLUDEDIR=${Boost_INCLUDE_DIR} -DPROJECT_STATIC_RUNTIME=${PROJECT_STATIC_RUNTIME} + # BUILD_COMMAND ${CMAKE_COMMAND} --build . --target loadorder --config $(CONFIGURATION) + INSTALL_COMMAND "") +ExternalProject_Get_Property(libloadorder SOURCE_DIR BINARY_DIR) +set(LIBLOADORDER_INCLUDE_DIRS "${SOURCE_DIR}/include") +set(LIBLOADORDER_LIBRARIES "${BINARY_DIR}/${CMAKE_CFG_INTDIR}/${CMAKE_STATIC_LIBRARY_PREFIX}loadorder${CMAKE_STATIC_LIBRARY_SUFFIX}") + +ExternalProject_Add(pseudosem + PREFIX "external" + URL "https://github.com/WrinklyNinja/pseudosem/archive/1.0.1.tar.gz" + CONFIGURE_COMMAND "" + BUILD_COMMAND "" + INSTALL_COMMAND "") +ExternalProject_Get_Property(pseudosem SOURCE_DIR) +set(PSEUDOSEM_INCLUDE_DIRS "${SOURCE_DIR}/include") + +ExternalProject_Add(testing-metadata + PREFIX "external" + URL "https://github.com/loot/testing-metadata/archive/1.0.0.tar.gz" + CONFIGURE_COMMAND "" + BUILD_COMMAND "" + INSTALL_COMMAND "") + +ExternalProject_Add(testing-plugins + PREFIX "external" + URL "https://github.com/WrinklyNinja/testing-plugins/archive/1.0.0.tar.gz" + CONFIGURE_COMMAND "" + BUILD_COMMAND "" + INSTALL_COMMAND "") + +ExternalProject_Add(yaml-cpp + PREFIX "external" + URL "https://github.com/WrinklyNinja/yaml-cpp/archive/patched-for-loot.tar.gz" + CMAKE_ARGS -DMSVC_SHARED_RT=OFF + BUILD_COMMAND ${CMAKE_COMMAND} --build . --target yaml-cpp --config $(CONFIGURATION) + INSTALL_COMMAND "") +ExternalProject_Get_Property(yaml-cpp SOURCE_DIR BINARY_DIR) +set(YAML_CPP_INCLUDE_DIRS "${SOURCE_DIR}/include") + +set(YAML_CPP_LIBRARIES "${BINARY_DIR}/${CMAKE_CFG_INTDIR}/libyaml-cpp${YAML_CPP_LIBRARY_SUFFIX}") + + +############################## +# General Settings +############################## + +IF (NOT DEFINED CEF_ROOT) + set (CEF_ROOT "../../cef") +ENDIF () set (LOOT_SRC "${CMAKE_SOURCE_DIR}/src/backend/metadata/conditional_metadata.cpp" "${CMAKE_SOURCE_DIR}/src/backend/metadata/file.cpp" @@ -163,10 +224,10 @@ set (LOOT_VALIDATOR_SRC ${LOOT_SRC} set (LOOT_VALIDATOR_HEADERS ${LOOT_HEADERS}) set (LOOT_TESTS_SRC ${LOOT_SRC} - "${CMAKE_SOURCE_DIR}/src/api/loot_db.cpp" - "${CMAKE_SOURCE_DIR}/src/gui/loot_settings.cpp" - "${CMAKE_SOURCE_DIR}/src/gui/loot_state.cpp" - "${CMAKE_SOURCE_DIR}/src/tests/main.cpp") + "${CMAKE_SOURCE_DIR}/src/api/loot_db.cpp" + "${CMAKE_SOURCE_DIR}/src/gui/loot_settings.cpp" + "${CMAKE_SOURCE_DIR}/src/gui/loot_state.cpp" + "${CMAKE_SOURCE_DIR}/src/tests/main.cpp") set (LOOT_TESTS_HEADERS "${CMAKE_SOURCE_DIR}/src/tests/fixtures.h" "${CMAKE_SOURCE_DIR}/src/tests/printers.h" @@ -194,8 +255,8 @@ set (LOOT_TESTS_HEADERS "${CMAKE_SOURCE_DIR}/src/tests/fixtures.h" "${CMAKE_SOURCE_DIR}/src/tests/backend/test_metadata_list.h" "${CMAKE_SOURCE_DIR}/src/tests/backend/test_masterlist.h" "${CMAKE_SOURCE_DIR}/src/tests/backend/test_plugin_sorter.h" - "${CMAKE_SOURCE_DIR}/src/tests/gui/test_loot_settings.h" - "${CMAKE_SOURCE_DIR}/src/tests/gui/test_loot_state.h") + "${CMAKE_SOURCE_DIR}/src/tests/gui/test_loot_settings.h" + "${CMAKE_SOURCE_DIR}/src/tests/gui/test_loot_state.h") source_group("Header Files\\backend" FILES ${LOOT_HEADERS}) source_group("Header Files\\gui" FILES ${LOOT_GUI_HEADERS}) @@ -211,21 +272,17 @@ source_group("Source Files\\validator" FILES ${LOOT_VALIDATOR_SRC}) # Include source and library directories. include_directories ("${CMAKE_SOURCE_DIR}/src" "${CMAKE_SOURCE_DIR}/include" - "${LIBLOADORDER_ROOT}/include" - "${LIBGIT2_ROOT}/include" + ${LIBLOADORDER_INCLUDE_DIRS} + ${LIBGIT2_INCLUDE_DIRS} ${CEF_ROOT} - "${LIBESPM_ROOT}/include" + ${LIBESPM_INCLUDE_DIRS} ${Boost_INCLUDE_DIRS} - ${YAML_CPP_INCLUDE_DIR} + ${YAML_CPP_INCLUDE_DIRS} ${GTEST_INCLUDE_DIRS} - "${PSEUDOSEM_ROOT}/include") + ${PSEUDOSEM_INCLUDE_DIRS}) # Look in build and build/ folders to support single and multiarch builds. -link_directories ("${LIBLOADORDER_ROOT}/build" - "${LIBLOADORDER_ROOT}/build/${PROJECT_ARCH}" - "${LIBGIT2_ROOT}/build" - "${LIBGIT2_ROOT}/build/${PROJECT_ARCH}" - "${CEF_ROOT}" +link_directories ("${CEF_ROOT}" "${CEF_ROOT}/build/libcef_dll") @@ -238,7 +295,7 @@ IF ($ENV{TRAVIS}) add_definitions (-DTRAVIS) ENDIF () -# 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. +# Settings when compiling for Windows. IF (CMAKE_SYSTEM_NAME MATCHES "Windows") add_definitions (-DUNICODE -D_UNICODE -DLIBLO_STATIC) set (LOOT_API_SRC ${LOOT_API_SRC} "${CMAKE_SOURCE_DIR}/src/resource.rc") @@ -254,12 +311,10 @@ IF (CMAKE_COMPILER_IS_GNUCXX) set (CMAKE_MODULE_LINKER_FLAGS "-static-libstdc++ -static-libgcc") ENDIF () - set (LOOT_LIBS git2 - ssl + set (LOOT_LIBS ssl curl z - crypto - loadorder${PROJECT_ARCH}) + crypto) set (LOOT_GUI_LIBS ${LOOT_LIBS} cef cef_dll_wrapper @@ -298,9 +353,7 @@ ELSEIF (MSVC) ENDFOREACH() ENDIF () - set (LOOT_LIBS git2 - version - loadorder${PROJECT_ARCH} + set (LOOT_LIBS version ws2_32 shlwapi winhttp @@ -321,21 +374,23 @@ ENDIF () # Build API. add_library (loot${PROJECT_ARCH} ${LOOT_API_SRC} ${LOOT_API_HEADERS}) -target_link_libraries (loot${PROJECT_ARCH} ${Boost_LIBRARIES} ${YAML_CPP_LIBRARIES} ${LOOT_LIBS}) +add_dependencies (loot${PROJECT_ARCH} libespm libgit2 libloadorder pseudosem yaml-cpp) +target_link_libraries (loot${PROJECT_ARCH} ${Boost_LIBRARIES} ${YAML_CPP_LIBRARIES} ${LIBGIT2_LIBRARIES} ${LOOT_LIBS} ${LIBLOADORDER_LIBRARIES}) -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 tests. +add_executable(tests ${LOOT_TESTS_SRC} ${LOOT_TESTS_HEADERS}) +add_dependencies(tests loot${PROJECT_ARCH} GTest testing-metadata testing-plugins) +target_link_libraries(tests loot${PROJECT_ARCH} ${Boost_LIBRARIES} ${YAML_CPP_LIBRARIES} ${LOOT_LIBS} ${GTEST_LIBRARIES}) # Build application. add_executable (LOOT ${LOOT_GUI_SRC} ${LOOT_GUI_HEADERS}) -target_link_libraries (LOOT ${Boost_LIBRARIES} ${YAML_CPP_LIBRARIES} ${LOOT_GUI_LIBS}) +add_dependencies (LOOT libespm libgit2 libloadorder pseudosem yaml-cpp) +target_link_libraries (LOOT ${Boost_LIBRARIES} ${LOOT_GUI_LIBS} ${LIBGIT2_LIBRARIES} ${LIBLOADORDER_LIBRARIES} ${YAML_CPP_LIBRARIES}) # Build validator. add_executable (metadata-validator ${LOOT_VALIDATOR_SRC} ${LOOT_VALIDATOR_HEADERS}) -target_link_libraries (metadata-validator ${Boost_LIBRARIES} ${YAML_CPP_LIBRARIES} ${LOOT_LIBS}) +add_dependencies (LOOT libespm libgit2 libloadorder yaml-cpp) +target_link_libraries (metadata-validator ${Boost_LIBRARIES} ${LOOT_LIBS} ${LIBGIT2_LIBRARIES} ${LIBLOADORDER_LIBRARIES} ${YAML_CPP_LIBRARIES}) @@ -423,3 +478,17 @@ ENDFOREACH() # Run Vulcanize to build the UI HTML. add_custom_command(TARGET LOOT POST_BUILD COMMAND "node" "${CMAKE_SOURCE_DIR}/scripts/vulcanize.js" ${CMAKE_SOURCE_DIR}) + +# Copy testing metadata +ExternalProject_Get_Property(testing-metadata SOURCE_DIR) +add_custom_command(TARGET tests POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy_directory + ${SOURCE_DIR} + "$/testing-metadata") + +# Copy testing plugins +ExternalProject_Get_Property(testing-plugins SOURCE_DIR) +add_custom_command(TARGET tests POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy_directory + ${SOURCE_DIR} + $) diff --git a/README.md b/README.md index 83566a37..3f15b9ee 100644 --- a/README.md +++ b/README.md @@ -25,23 +25,10 @@ Once Node.js is installed, run `npm install` from the repository root to install ### Dependencies -LOOT requires the following C/C++ libraries (version numbers used in latest development revision given): +LOOT requires a mix of web and C/C++ libraries. The web libraries can be fetched by running `./node_modules/.bin/bower install` from the repository root, and most of the C/C++ dependencies are resolved by CMake, but the following must be obtained separately (version numbers used in latest development revision given): * [Boost](http://www.boost.org) v1.60.0 * [Chromium Embedded Framework](https://bitbucket.org/chromiumembedded/cef) branch 2623: Required to build the GUI, but not the API or tests. -* [Google Test](https://github.com/google/googletest) v1.7: Required to build the tests, but not the API or the GUI. -* [Libespm](http://github.com/WrinklyNinja/libespm) v2.5.0 -* [Libgit2](http://libgit2.github.com/) v0.24.0 -* [Libloadorder](http://github.com/WrinklyNinja/libloadorder) v7.0.0 -* [Pseudosem](http://github.com/WrinklyNinja/pseudosem) v1.0.1 -* [yaml-cpp](http://github.com/WrinklyNinja/yaml-cpp): Use the `patched-for-loot` branch. - -In addition, LOOT's UI relies on the web libraries below, which can be fetched by running `./node_modules/.bin/bower install` from the repository root. - -* [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) ### Building @@ -59,12 +46,8 @@ Parameter | Values | Default |Description `PROJECT_STATIC_RUNTIME` | `ON`, `OFF` | `ON` | Whether to link the C++ runtime statically or not. This also affects the whether static or shared Boost libraries are used. `PROJECT_ARCH` | `32`, `64` | `32` | Whether to build 32 or 64 bit LOOT binaries. `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. -`PSEUDOSEM_ROOT` | Path | `../../pseudosem` | Path to the root of the Pseudosem repository folder. -The default paths given in the table above are relative to LOOT's `CMakeLists.txt`. +The default paths given in the table above are relative to LOOT's `CMakeLists.txt`. You may also need to set `BOOST_ROOT` if CMake cannot find Boost. ## Packaging Releases diff --git a/docs/BUILD.MSVC.md b/docs/BUILD.MSVC.md index 14ac4647..175429f3 100644 --- a/docs/BUILD.MSVC.md +++ b/docs/BUILD.MSVC.md @@ -1,6 +1,6 @@ # Build Instructions using Microsoft Visual C++ -These instructions were used to build LOOT using Microsoft Visual Studio 2013 Community, though they should apply to other versions of MSVC. +These instructions were used to build LOOT using Microsoft Visual Studio 2015 Community, though they should apply to other versions of MSVC. #### Boost @@ -19,55 +19,14 @@ Most of the required binaries are pre-built, but the libcef_dll_wrapper dynamic ``` mkdir build && cd build - cmake.exe .. -G "Visual Studio 12" + cmake.exe .. -G "Visual Studio 14" ``` 2. Open the generated solution file, and build it with `Release` configuration. -#### Google Test - -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. - -#### 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 - ``` - - Adapt the commands as necessary for your particular setup. -2. Open the generated solution file, and build it with `Release` configuration. - -#### Libloadorder - -Follow the instructions in libloadorder's README.md to build it as a static library. - -Example CMake keys: `-DCMAKE_RUNTIME_OUTPUT_DIRECTORY=build -DCMAKE_ARCHIVE_OUTPUT_DIRECTORY=build` - -#### 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. -2. Open the generated solution file, and build it with `Release` configuration. - #### LOOT 1. Set CMake up so that it builds the binaries in the `build` subdirectory of the LOOT folder. 2. Define any necessary parameters. -3. Configure CMake, then generate a build system for Visual Studio 12. +3. Configure CMake, then generate a build system for Visual Studio. 4. Open the generated solution file, and build it. diff --git a/scripts/install-step.travis.sh b/scripts/install-step.travis.sh deleted file mode 100644 index 51e69136..00000000 --- a/scripts/install-step.travis.sh +++ /dev/null @@ -1,37 +0,0 @@ -#!/bin/bash -set -ev - -# Move out of LOOT repo path. -cd ../.. - -# Install libespm. -wget https://github.com/WrinklyNinja/libespm/archive/2.5.0.tar.gz -O - | tar -xz -mv libespm-2.5.0 libespm - -# Build yaml-cpp -wget https://github.com/WrinklyNinja/yaml-cpp/archive/patched-for-loot.tar.gz -O - | tar -xz -mv yaml-cpp-patched-for-loot yaml-cpp -mkdir yaml-cpp/build && cd yaml-cpp/build -cmake .. -make yaml-cpp -cd ../.. - -# Build libgit2 -wget https://github.com/libgit2/libgit2/archive/v0.24.0.tar.gz -O - | tar -xz -mv libgit2-0.24.0 libgit2 -mkdir libgit2/build && cd libgit2/build -cmake .. -DBUILD_SHARED_LIBS=OFF -make git2 -cd ../.. - -# Build libloadorder -wget https://github.com/WrinklyNinja/libloadorder/archive/7.0.0.tar.gz -O - | tar -xz -mv libloadorder-7.0.0 libloadorder -mkdir libloadorder/build && cd libloadorder/build -cmake .. -DPROJECT_ARCH=64 -DPROJECT_STATIC_RUNTIME=OFF -DBUILD_SHARED_LIBS=OFF -DGTEST_ROOT=../gtest-1.7.0 -make loadorder64 -cd ../.. - -# Install pseudosem -wget https://github.com/WrinklyNinja/pseudosem/archive/1.0.1.tar.gz -O - | tar -xz -mv pseudosem-1.0.1 pseudosem