diff --git a/AthenaNSIS.bmp b/AthenaNSIS.bmp new file mode 100644 index 0000000..dd8a73a Binary files /dev/null and b/AthenaNSIS.bmp differ diff --git a/CMakeLists.txt b/CMakeLists.txt index 3f1075e..c6e139b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -152,11 +152,10 @@ add_library(AthenaZelda set(INSTALL_LIB_DIR lib CACHE PATH "Installation directory for libraries") set(INSTALL_INCLUDE_DIR include CACHE PATH "Installation directory for header files") if(WIN32 AND NOT CYGWIN) - set(DEF_INSTALL_CMAKE_DIR cmake) + set(INSTALL_CMAKE_DIR cmake) else() - set(DEF_INSTALL_CMAKE_DIR lib/cmake/Athena) + set(INSTALL_CMAKE_DIR lib/cmake/Athena) endif() -set(INSTALL_CMAKE_DIR ${DEF_INSTALL_CMAKE_DIR} CACHE PATH "Installation directory for CMake files") # Make relative paths absolute (needed later on) foreach(p LIB INCLUDE CMAKE) @@ -169,14 +168,15 @@ foreach(p LIB INCLUDE CMAKE) endforeach() # Define installs -install(DIRECTORY include/ DESTINATION ${INSTALL_INCLUDE_DIR}/Athena) +install(DIRECTORY include/ DESTINATION ${INSTALL_INCLUDE_DIR}/Athena COMPONENT Athena) install(TARGETS AthenaCore AthenaSakura AthenaWiiSave AthenaZelda - DESTINATION ${INSTALL_LIB_DIR} EXPORT AthenaTargets) + DESTINATION ${INSTALL_LIB_DIR} EXPORT AthenaTargets COMPONENT Athena) if(WIN32 AND NOT CYGWIN) -install(FILES Athena.ico DESTINATION ${INSTALL_LIB_DIR}) +install(FILES Athena.ico DESTINATION ${INSTALL_LIB_DIR} COMPONENT Athena) elseif(UNIX) -install(FILES lib/pkgconfig/libAthena.pc - DESTINATION ${INSTALL_LIB_DIR}/pkgconfig) +configure_file(libAthena.pc.in libAthena.pc @ONLY) +install(FILES ${PROJECT_BINARY_DIR}/libAthena.pc + DESTINATION ${INSTALL_LIB_DIR}/pkgconfig COMPONENT Athena) endif() ################## @@ -209,10 +209,18 @@ configure_file(AthenaConfigVersion.cmake.in "${PROJECT_BINARY_DIR}/AthenaConfigV install(FILES "${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/AthenaConfig.cmake" "${PROJECT_BINARY_DIR}/AthenaConfigVersion.cmake" - DESTINATION ${INSTALL_CMAKE_DIR} COMPONENT dev) + DESTINATION ${INSTALL_CMAKE_DIR} COMPONENT Athena) # Install the export set for use with the install-tree -install(EXPORT AthenaTargets DESTINATION ${INSTALL_CMAKE_DIR} COMPONENT dev) +install(EXPORT AthenaTargets DESTINATION ${INSTALL_CMAKE_DIR} COMPONENT Athena) + +################ +# atdna import # +################ + +if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/atdna/") + add_subdirectory(atdna) +endif() ######### # CPack # @@ -220,7 +228,7 @@ install(EXPORT AthenaTargets DESTINATION ${INSTALL_CMAKE_DIR} COMPONENT dev) include(InstallRequiredSystemLibraries) set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Athena") -set(CPACK_PACKAGE_VENDOR "2015 Antidote / Jackoalan") +set(CPACK_PACKAGE_VENDOR "Antidote / Jackoalan") set(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/README.md") set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE") set(CPACK_PACKAGE_VERSION_MAJOR ${ATHENA_MAJOR_VERSION}) @@ -230,12 +238,15 @@ set(CPACK_PACKAGE_INSTALL_DIRECTORY "Athena") if(WIN32 AND NOT UNIX) # There is a bug in NSI that does not handle full unix paths properly. Make # sure there is at least one set of four (4) backlasshes. - set(CPACK_PACKAGE_ICON "${CMAKE_CURRENT_SOURCE_DIR}/Athena.ico") - set(CPACK_NSIS_INSTALLED_ICON_NAME "Athena.ico") + set(CPACK_PACKAGE_INSTALL_REGISTRY_KEY "Athena") + set(CPACK_PACKAGE_ICON "${CMAKE_CURRENT_SOURCE_DIR}\\\\AthenaNSIS.bmp") + set(CPACK_NSIS_MODIFY_PATH ON) + set(CPACK_NSIS_MUI_ICON "${CMAKE_CURRENT_SOURCE_DIR}\\\\Athena.ico") + set(CPACK_NSIS_MUI_UNIICON "${CMAKE_CURRENT_SOURCE_DIR}\\\\Athena.ico") + set(CPACK_NSIS_INSTALLED_ICON_NAME "Uninstall.exe") set(CPACK_NSIS_DISPLAY_NAME "Athena") set(CPACK_NSIS_URL_INFO_ABOUT "http://libathena.github.io") set(CPACK_NSIS_CONTACT "antidote.crk@gmail.com") - set(CPACK_NSIS_MODIFY_PATH ON) endif() include(CPack) diff --git a/extern/lzo/CMakeLists.txt b/extern/lzo/CMakeLists.txt index e37fa85..4772cc1 100644 --- a/extern/lzo/CMakeLists.txt +++ b/extern/lzo/CMakeLists.txt @@ -1,5 +1,9 @@ +if(NOT WIN32) find_library(LZO_LIB lzo2) -if(LZO_LIB STREQUAL LZO_LIB-NOTFOUND) +endif() +if(WIN32 OR LZO_LIB STREQUAL LZO_LIB-NOTFOUND) +include_directories(include) +message("-- Using Athena's built-in lzo") add_library(lzo2 src/lzo1.c src/lzo1_99.c @@ -73,7 +77,9 @@ add_library(lzo2 include/lzo/lzoconf.h include/lzo/lzodefs.h include/lzo/lzoutil.h) -install(DIRECTORY include/lzo DESTINATION include/lzo) -install(TARGETS lzo2 DESTINATION lib) +if(WIN32 AND NOT UNIX) +install(DIRECTORY include/lzo DESTINATION include COMPONENT lzo2) +install(TARGETS lzo2 DESTINATION lib COMPONENT lzo2) +endif() set(LZO_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/include CACHE PATH "LZO include path" FORCE) endif() diff --git a/extern/zlib/CMakeLists.txt b/extern/zlib/CMakeLists.txt index 8859108..7183588 100644 --- a/extern/zlib/CMakeLists.txt +++ b/extern/zlib/CMakeLists.txt @@ -1,5 +1,8 @@ +if(NOT WIN32) find_package(ZLIB) -if(NOT ZLIB_FOUND) +endif() +if(WIN32 OR NOT ZLIB_FOUND) +message("-- Using Athena's built-in zlib") add_library(z adler32.c compress.c @@ -23,7 +26,9 @@ add_library(z zconf.h zlib.h zutil.h) -install(FILES zconf.h zlib.h DESTINATION include) -install(TARGETS z DESTINATION lib) +if(WIN32 AND NOT UNIX) +install(FILES zconf.h zlib.h DESTINATION include COMPONENT zlib) +install(TARGETS z DESTINATION lib COMPONENT zlib) +endif() set(ZLIB_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR} CACHE PATH "Zlib include path" FORCE) endif() diff --git a/include/Athena/FileReader.hpp b/include/Athena/FileReader.hpp index cb291b0..e3acec0 100644 --- a/include/Athena/FileReader.hpp +++ b/include/Athena/FileReader.hpp @@ -1,9 +1,10 @@ #ifndef FILESTREAM_HPP #define FILESTREAM_HPP -#include "Athena/IStreamReader.hpp" #include +#include #include +#include "Athena/IStreamReader.hpp" namespace Athena { diff --git a/include/Athena/IStreamReader.hpp b/include/Athena/IStreamReader.hpp index a6b27d8..a896d49 100644 --- a/include/Athena/IStreamReader.hpp +++ b/include/Athena/IStreamReader.hpp @@ -226,7 +226,7 @@ public: * \return atVec2f The value at the current address * \throw IOException when address is out of range */ - inline atVec2f readVec3f() + inline atVec2f readVec2f() { atVec2f val; readUBytesToBuf(&val, 8); diff --git a/include/Athena/MemoryReader.hpp b/include/Athena/MemoryReader.hpp index 3089d74..1fdf46e 100644 --- a/include/Athena/MemoryReader.hpp +++ b/include/Athena/MemoryReader.hpp @@ -1,9 +1,10 @@ #ifndef MEMORYREADER_HPP #define MEMORYREADER_HPP -#include "Athena/IStreamReader.hpp" #include +#include #include +#include "Athena/IStreamReader.hpp" namespace Athena { diff --git a/include/Athena/MemoryWriter.hpp b/include/Athena/MemoryWriter.hpp index 62d6f96..836341c 100644 --- a/include/Athena/MemoryWriter.hpp +++ b/include/Athena/MemoryWriter.hpp @@ -1,9 +1,10 @@ #ifndef MEMORYWRITER_HPP #define MEMORYWRITER_HPP -#include "Athena/IStreamWriter.hpp" #include +#include #include +#include "Athena/IStreamWriter.hpp" namespace Athena { diff --git a/lib/pkgconfig/libAthena.pc b/libAthena.pc.in similarity index 81% rename from lib/pkgconfig/libAthena.pc rename to libAthena.pc.in index b9d8ea2..ec5d727 100644 --- a/lib/pkgconfig/libAthena.pc +++ b/libAthena.pc.in @@ -1,10 +1,10 @@ -prefix=/usr +prefix=@CMAKE_INSTALL_PREFIX@ includedir=${prefix}/include libdir=${prefix}/lib Name: libAthena Description: Basic cross platform IO library -Version: 2.0.0 +Version: @ATHENA_VERSION@ Cflags: -I${includedir}/Athena -std=c++11 Libs: -L${libdir} -lAthenaCore -lAthenaSakura -lAthenaZelda -lAthenaWiiSave Requires: zlib diff --git a/src/aes.cpp b/src/aes.cpp index 8942be5..e7426ed 100644 --- a/src/aes.cpp +++ b/src/aes.cpp @@ -1,7 +1,11 @@ #include "aes.hpp" #include #include +#if _WIN32 +#include +#else #include +#endif namespace Athena { @@ -478,7 +482,7 @@ void SoftwareAES::encrypt(const uint8_t* iv, const uint8_t* inbuf, uint8_t* outb } } -#if __AES__ +#if __AES__ || _MSC_VER >= 1800 #include @@ -598,12 +602,18 @@ public: static int HAS_AES_NI = -1; std::unique_ptr NewAES() { -#if __AES__ +#if __AES__ || _MSC_VER >= 1800 if (HAS_AES_NI == -1) { +#if _MSC_VER + int info[4]; + __cpuid(info, 1); + HAS_AES_NI = ((info[2] & 0x2000000) != 0); +#else unsigned int a,b,c,d; __cpuid(1, a,b,c,d); HAS_AES_NI = ((c & 0x2000000) != 0); +#endif } if (HAS_AES_NI) return std::unique_ptr(new NiAES);