From 8324daaf67a448984cc6ac8d804f8e6715660ecd Mon Sep 17 00:00:00 2001 From: David Capello Date: Mon, 8 Jun 2015 15:57:15 -0300 Subject: [PATCH 01/24] Testing travis-ci --- .travis.yml | 14 ++++++++++++++ README.md | 1 + 2 files changed, 15 insertions(+) create mode 100644 .travis.yml diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 000000000..bb3cda3ee --- /dev/null +++ b/.travis.yml @@ -0,0 +1,14 @@ +language: cpp + +compiler: + - clang + - gcc + +before_script: + - mkdir build + - cd build + - cmake .. + +script: + - "make" + - "make run_all_tests" diff --git a/README.md b/README.md index 915dd61c6..6db6de693 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,7 @@ # Aseprite *Copyright (C) 2001-2015 David Capello* +[![Build Status](https://travis-ci.org/aseprite/aseprite.svg)](https://travis-ci.org/aseprite/aseprite) [![Gitter](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/aseprite/aseprite?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) > THIS PROGRAM IS DISTRIBUTED WITHOUT ANY WARRANTY
From 470e1e93f715821e53bdb8f9e6e4db2792e00851 Mon Sep 17 00:00:00 2001 From: David Capello Date: Mon, 8 Jun 2015 16:33:12 -0300 Subject: [PATCH 02/24] Run only non-UI tests --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index bb3cda3ee..9aace0c12 100644 --- a/.travis.yml +++ b/.travis.yml @@ -11,4 +11,4 @@ before_script: script: - "make" - - "make run_all_tests" + - "make run_non_ui_tests" From ac4328f4cf1d1c9810ce9b4458a3954e05990f73 Mon Sep 17 00:00:00 2001 From: David Capello Date: Mon, 8 Jun 2015 16:33:59 -0300 Subject: [PATCH 03/24] Add matrix to travis.yml to compile with shared libraries --- .travis.yml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 9aace0c12..6703e76b9 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,10 +4,15 @@ compiler: - clang - gcc +env: + matrix: + - SHARED=OFF + - SHARED=ON + before_script: - mkdir build - cd build - - cmake .. + - cmake .. -DUSE_SHARED_CURL=$SHARED -DUSE_SHARED_GIFLIB=$SHARED -DUSE_SHARED_JPEGLIB=$SHARED -DUSE_SHARED_ZLIB=$SHARED -DUSE_SHARED_LIBPNG=$SHARED -DUSE_SHARED_LIBLOADPNG=$SHARED -DUSE_SHARED_TINYXML=$SHARED -DUSE_SHARED_GTEST=$SHARED -DUSE_SHARED_PIXMAN=$SHARED -DUSE_SHARED_ALLEGRO4=$SHARED script: - "make" From 137a75c4512fa5e26781ef052fab2bd5ce887b77 Mon Sep 17 00:00:00 2001 From: David Capello Date: Mon, 8 Jun 2015 16:49:36 -0300 Subject: [PATCH 04/24] Install dependencies in before_install step --- .travis.yml | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 6703e76b9..1e8aa6d4a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -9,10 +9,18 @@ env: - SHARED=OFF - SHARED=ON +before_install: + - sudo apt-get update -qq + - if [ "$SHARED" == "ON" ]; then sudo apt-get install -y libcurl-dev libgif-dev libjpeg-dev libz-dev libpng-dev libtinyxml-dev libgtest-dev libpixman-1-dev liballegro4.2-dev ; fi + - if [ "$CXX" = "g++" ]; then sudo apt-get install -y -qq g++-4.8; fi + - if [ "$CXX" = "g++" ]; then export CXX="g++-4.8"; fi + - if [ "$CXX" == "clang++" ]; then sudo apt-get install -y clang-3.4; fi + - if [ "$CXX" == "clang++" ]; then export CXX="clang++-3.4"; fi + before_script: - mkdir build - cd build - - cmake .. -DUSE_SHARED_CURL=$SHARED -DUSE_SHARED_GIFLIB=$SHARED -DUSE_SHARED_JPEGLIB=$SHARED -DUSE_SHARED_ZLIB=$SHARED -DUSE_SHARED_LIBPNG=$SHARED -DUSE_SHARED_LIBLOADPNG=$SHARED -DUSE_SHARED_TINYXML=$SHARED -DUSE_SHARED_GTEST=$SHARED -DUSE_SHARED_PIXMAN=$SHARED -DUSE_SHARED_ALLEGRO4=$SHARED + - cmake .. -DUSE_SHARED_CURL=$SHARED -DUSE_SHARED_GIFLIB=$SHARED -DUSE_SHARED_JPEGLIB=$SHARED -DUSE_SHARED_ZLIB=$SHARED -DUSE_SHARED_LIBPNG=$SHARED -DUSE_SHARED_TINYXML=$SHARED -DUSE_SHARED_GTEST=$SHARED -DUSE_SHARED_PIXMAN=$SHARED -DUSE_SHARED_ALLEGRO4=$SHARED script: - "make" From 54c1cbfd532841b9dd82655088e6cc55fc0abf4a Mon Sep 17 00:00:00 2001 From: David Capello Date: Mon, 8 Jun 2015 16:53:00 -0300 Subject: [PATCH 05/24] Specify exact libcurl library in apt-get install --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 1e8aa6d4a..ad1e7e153 100644 --- a/.travis.yml +++ b/.travis.yml @@ -11,7 +11,7 @@ env: before_install: - sudo apt-get update -qq - - if [ "$SHARED" == "ON" ]; then sudo apt-get install -y libcurl-dev libgif-dev libjpeg-dev libz-dev libpng-dev libtinyxml-dev libgtest-dev libpixman-1-dev liballegro4.2-dev ; fi + - if [ "$SHARED" == "ON" ]; then sudo apt-get install -y libcurl4-openssl-dev libgif-dev libjpeg-dev libz-dev libpng-dev libtinyxml-dev libgtest-dev libpixman-1-dev liballegro4.2-dev ; fi - if [ "$CXX" = "g++" ]; then sudo apt-get install -y -qq g++-4.8; fi - if [ "$CXX" = "g++" ]; then export CXX="g++-4.8"; fi - if [ "$CXX" == "clang++" ]; then sudo apt-get install -y clang-3.4; fi From 0c09a0d229cbe239ddda83aeb9c27825b074ae2d Mon Sep 17 00:00:00 2001 From: David Capello Date: Mon, 8 Jun 2015 17:20:18 -0300 Subject: [PATCH 06/24] Add special repository for g++-4.8 --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index ad1e7e153..9f02eaf57 100644 --- a/.travis.yml +++ b/.travis.yml @@ -10,6 +10,7 @@ env: - SHARED=ON before_install: + - if [ "$CXX" = "g++" ]; then sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test; fi - sudo apt-get update -qq - if [ "$SHARED" == "ON" ]; then sudo apt-get install -y libcurl4-openssl-dev libgif-dev libjpeg-dev libz-dev libpng-dev libtinyxml-dev libgtest-dev libpixman-1-dev liballegro4.2-dev ; fi - if [ "$CXX" = "g++" ]; then sudo apt-get install -y -qq g++-4.8; fi From 9d3f2b1225840da220870b801dd18e7483db06a7 Mon Sep 17 00:00:00 2001 From: David Capello Date: Mon, 8 Jun 2015 17:26:12 -0300 Subject: [PATCH 07/24] Without special clang version --- .travis.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 9f02eaf57..0074db190 100644 --- a/.travis.yml +++ b/.travis.yml @@ -15,8 +15,6 @@ before_install: - if [ "$SHARED" == "ON" ]; then sudo apt-get install -y libcurl4-openssl-dev libgif-dev libjpeg-dev libz-dev libpng-dev libtinyxml-dev libgtest-dev libpixman-1-dev liballegro4.2-dev ; fi - if [ "$CXX" = "g++" ]; then sudo apt-get install -y -qq g++-4.8; fi - if [ "$CXX" = "g++" ]; then export CXX="g++-4.8"; fi - - if [ "$CXX" == "clang++" ]; then sudo apt-get install -y clang-3.4; fi - - if [ "$CXX" == "clang++" ]; then export CXX="clang++-3.4"; fi before_script: - mkdir build From fdeba03216fd0eca74059a6c6b6f04a1b96bd444 Mon Sep 17 00:00:00 2001 From: David Capello Date: Mon, 8 Jun 2015 17:29:42 -0300 Subject: [PATCH 08/24] Fix find_library() call for gtest library (issue #695) --- third_party/CMakeLists.txt | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/third_party/CMakeLists.txt b/third_party/CMakeLists.txt index a1a6f4ad1..ed9931e0e 100644 --- a/third_party/CMakeLists.txt +++ b/third_party/CMakeLists.txt @@ -36,7 +36,12 @@ if(NOT USE_SHARED_GTEST AND EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/gtest/CMakeLists. include_directories(${CMAKE_CURRENT_SOURCE_DIR}/gtest ${CMAKE_CURRENT_SOURCE_DIR}/gtest/include) add_library(gtest ${CMAKE_CURRENT_SOURCE_DIR}/gtest/src/gtest-all.cc) else() - find_library(gtest) + find_library(LIBGTEST_LIBRARY NAMES gtest) + find_path(LIBGTEST_INCLUDE_DIR NAMES "gtest/gtest.h") + + set(libs3rdparty ${libs3rdparty} ${LIBGTEST_LIBRARY}) + include_directories(${LIBGTEST_INCLUDE_DIR}) + check_cxx_source_compiles(" #include int main() { } From b03f6de00699ebbe57d6d345b4c53d70f898e2da Mon Sep 17 00:00:00 2001 From: David Capello Date: Mon, 8 Jun 2015 17:41:36 -0300 Subject: [PATCH 09/24] Try with an alternative name for pixman shared library --- src/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index abd6131ba..7e8527082 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -132,7 +132,7 @@ if(USE_ALLEG4_BACKEND) endif() if(USE_SHARED_PIXMAN) - find_library(LIBPIXMAN_LIBRARY NAMES pixman) + find_library(LIBPIXMAN_LIBRARY NAMES pixman pixman-1) find_path(LIBPIXMAN_INCLUDE_DIR NAMES pixman.h) set(libs3rdparty ${libs3rdparty} ${LIBPIXMAN_LIBRARY}) From 0c115e556751a26117fa3bab2e82a2b67558866a Mon Sep 17 00:00:00 2001 From: David Capello Date: Mon, 8 Jun 2015 17:42:08 -0300 Subject: [PATCH 10/24] Move code to find gtest shared version into src/CMakeLists.txt --- src/CMakeLists.txt | 16 ++++++++++++++++ third_party/CMakeLists.txt | 14 -------------- 2 files changed, 16 insertions(+), 14 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 7e8527082..c7e631ee2 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -143,6 +143,22 @@ else() include_directories(${CMAKE_BINARY_DIR}) endif() +if(USE_SHARED_GTEST) + find_library(LIBGTEST_LIBRARY NAMES gtest) + find_path(LIBGTEST_INCLUDE_DIR NAMES "gtest/gtest.h") + + set(libs3rdparty ${libs3rdparty} ${LIBGTEST_LIBRARY}) + include_directories(${LIBGTEST_INCLUDE_DIR}) + + check_cxx_source_compiles(" + #include + int main() { } + " HAVE_GTEST_GTEST_H) + if(NOT HAVE_GTEST_GTEST_H) + message(FATAL_ERROR "gtest/gtest.h is missing. Set USE_SHARED_GTEST=OFF and initialize submodules: git submodule update --init --recursive") + endif() +endif() + set(libs3rdparty simpleini ${libs3rdparty}) include_directories(${SIMPLEINI_DIR}) diff --git a/third_party/CMakeLists.txt b/third_party/CMakeLists.txt index ed9931e0e..a51fb5898 100644 --- a/third_party/CMakeLists.txt +++ b/third_party/CMakeLists.txt @@ -35,20 +35,6 @@ if(NOT USE_SHARED_GTEST AND EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/gtest/CMakeLists. # CMakeLists.txt modifies some MSVC flags. include_directories(${CMAKE_CURRENT_SOURCE_DIR}/gtest ${CMAKE_CURRENT_SOURCE_DIR}/gtest/include) add_library(gtest ${CMAKE_CURRENT_SOURCE_DIR}/gtest/src/gtest-all.cc) -else() - find_library(LIBGTEST_LIBRARY NAMES gtest) - find_path(LIBGTEST_INCLUDE_DIR NAMES "gtest/gtest.h") - - set(libs3rdparty ${libs3rdparty} ${LIBGTEST_LIBRARY}) - include_directories(${LIBGTEST_INCLUDE_DIR}) - - check_cxx_source_compiles(" - #include - int main() { } - " HAVE_GTEST_GTEST_H) - if(NOT HAVE_GTEST_GTEST_H) - message(FATAL_ERROR "gtest/gtest.h is missing. Set USE_SHARED_GTEST=OFF and initialize submodules: git submodule update --init --recursive") - endif() endif() if(NOT USE_SHARED_CURL) From b3b6a284270ae60220d15927e5b6527dd92ceeb2 Mon Sep 17 00:00:00 2001 From: David Capello Date: Mon, 8 Jun 2015 17:46:37 -0300 Subject: [PATCH 11/24] Now include(CheckCXXSourceCompiles) is required in src/CMakeLists.txt --- src/CMakeLists.txt | 2 ++ third_party/CMakeLists.txt | 2 -- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index c7e631ee2..51f79b28e 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,6 +1,8 @@ # Aseprite # Copyright (C) 2001-2015 David Capello +include(CheckCXXSourceCompiles) + ###################################################################### # Common definitions for all Aseprite libraries/projects diff --git a/third_party/CMakeLists.txt b/third_party/CMakeLists.txt index a51fb5898..442d3972f 100644 --- a/third_party/CMakeLists.txt +++ b/third_party/CMakeLists.txt @@ -1,8 +1,6 @@ # ASEPRITE # Copyright (C) 2001-2015 David Capello -include(CheckCXXSourceCompiles) - include_directories(.) if(MSVC) From 222562db097db5e282779d41559536916c0c2a89 Mon Sep 17 00:00:00 2001 From: David Capello Date: Mon, 8 Jun 2015 18:20:39 -0300 Subject: [PATCH 12/24] Remove USE_SHARED_GTEST option --- CMakeLists.txt | 1 - src/CMakeLists.txt | 18 ------------------ third_party/CMakeLists.txt | 4 +++- 3 files changed, 3 insertions(+), 20 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 38081fb4e..e0367f2fb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -41,7 +41,6 @@ option(USE_SHARED_ZLIB "Use your installed copy of zlib" off) option(USE_SHARED_LIBPNG "Use your installed copy of libpng" off) option(USE_SHARED_LIBLOADPNG "Use your installed copy of libloadpng" off) option(USE_SHARED_TINYXML "Use your installed copy of tinyxml" off) -option(USE_SHARED_GTEST "Use your installed copy of gtest" off) option(USE_SHARED_PIXMAN "Use your installed copy of pixman" off) option(USE_SHARED_ALLEGRO4 "Use shared Allegro 4 library (without resize support)" off) option(USE_ALLEG4_BACKEND "Use Allegro 4 backend" on) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 51f79b28e..7e8527082 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,8 +1,6 @@ # Aseprite # Copyright (C) 2001-2015 David Capello -include(CheckCXXSourceCompiles) - ###################################################################### # Common definitions for all Aseprite libraries/projects @@ -145,22 +143,6 @@ else() include_directories(${CMAKE_BINARY_DIR}) endif() -if(USE_SHARED_GTEST) - find_library(LIBGTEST_LIBRARY NAMES gtest) - find_path(LIBGTEST_INCLUDE_DIR NAMES "gtest/gtest.h") - - set(libs3rdparty ${libs3rdparty} ${LIBGTEST_LIBRARY}) - include_directories(${LIBGTEST_INCLUDE_DIR}) - - check_cxx_source_compiles(" - #include - int main() { } - " HAVE_GTEST_GTEST_H) - if(NOT HAVE_GTEST_GTEST_H) - message(FATAL_ERROR "gtest/gtest.h is missing. Set USE_SHARED_GTEST=OFF and initialize submodules: git submodule update --init --recursive") - endif() -endif() - set(libs3rdparty simpleini ${libs3rdparty}) include_directories(${SIMPLEINI_DIR}) diff --git a/third_party/CMakeLists.txt b/third_party/CMakeLists.txt index 442d3972f..59cd5aa7a 100644 --- a/third_party/CMakeLists.txt +++ b/third_party/CMakeLists.txt @@ -28,11 +28,13 @@ if(NOT USE_SHARED_TINYXML) add_subdirectory(tinyxml) endif() -if(NOT USE_SHARED_GTEST AND EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/gtest/CMakeLists.txt) +if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/gtest/CMakeLists.txt) # We don't use add_subdirectory(gtest) because the gtest # CMakeLists.txt modifies some MSVC flags. include_directories(${CMAKE_CURRENT_SOURCE_DIR}/gtest ${CMAKE_CURRENT_SOURCE_DIR}/gtest/include) add_library(gtest ${CMAKE_CURRENT_SOURCE_DIR}/gtest/src/gtest-all.cc) +else() + message(FATAL_ERROR "gtest/gtest.h is missing. Initialize submodules: git submodule update --init --recursive") endif() if(NOT USE_SHARED_CURL) From ed4ff82a5e2f2dd6681129cf961e92a21a96b2b4 Mon Sep 17 00:00:00 2001 From: David Capello Date: Mon, 8 Jun 2015 18:21:20 -0300 Subject: [PATCH 13/24] Add extra PATH_SUFFIXES to find pixman library --- src/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 7e8527082..1cbc4e269 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -133,7 +133,7 @@ endif() if(USE_SHARED_PIXMAN) find_library(LIBPIXMAN_LIBRARY NAMES pixman pixman-1) - find_path(LIBPIXMAN_INCLUDE_DIR NAMES pixman.h) + find_path(LIBPIXMAN_INCLUDE_DIR NAMES pixman.h PATH_SUFFIXES pixman-1) set(libs3rdparty ${libs3rdparty} ${LIBPIXMAN_LIBRARY}) include_directories(${LIBPIXMAN_INCLUDE_DIR}) From 8902b3701fb5ae5709051e557b9a2affb386b256 Mon Sep 17 00:00:00 2001 From: David Capello Date: Mon, 8 Jun 2015 19:48:29 -0300 Subject: [PATCH 14/24] Avoid compiling error with Allegro 4.2 --- src/she/alleg4/she.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/she/alleg4/she.cpp b/src/she/alleg4/she.cpp index 04b64e702..bc4c36f76 100644 --- a/src/she/alleg4/she.cpp +++ b/src/she/alleg4/she.cpp @@ -682,7 +682,9 @@ public: throw std::runtime_error("Cannot initialize Allegro library"); set_uformat(U_UTF8); +#if MAKE_VERSION(ALLEGRO_VERSION, ALLEGRO_SUB_VERSION, ALLEGRO_WIP_VERSION) >= MAKE_VERSION(4, 4, 0) _al_detect_filename_encoding(); +#endif install_timer(); // Register PNG as a supported bitmap type From f8dbbba63211b85345d135f9e9d0767f539e3ba2 Mon Sep 17 00:00:00 2001 From: David Capello Date: Mon, 8 Jun 2015 19:51:55 -0300 Subject: [PATCH 15/24] Include allegro_error in exception if allegro_init() fails --- src/she/alleg4/she.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/she/alleg4/she.cpp b/src/she/alleg4/she.cpp index bc4c36f76..606e7b47b 100644 --- a/src/she/alleg4/she.cpp +++ b/src/she/alleg4/she.cpp @@ -11,6 +11,7 @@ #include "she/she.h" #include "base/concurrent_queue.h" +#include "base/exception.h" #include "base/string.h" #include "base/unique_ptr.h" #include "she/alleg4/surface.h" @@ -679,7 +680,7 @@ public: Alleg4System() { if (allegro_init() < 0) - throw std::runtime_error("Cannot initialize Allegro library"); + throw base::Exception("Cannot initialize Allegro library: %s", allegro_error); set_uformat(U_UTF8); #if MAKE_VERSION(ALLEGRO_VERSION, ALLEGRO_SUB_VERSION, ALLEGRO_WIP_VERSION) >= MAKE_VERSION(4, 4, 0) From 65d03c9893db24ffef947cd1edf722641f5a526a Mon Sep 17 00:00:00 2001 From: David Capello Date: Mon, 8 Jun 2015 20:21:50 -0300 Subject: [PATCH 16/24] Add support to compile gif_format.cpp with giflib 4 --- src/app/file/gif_format.cpp | 56 +++++++++++++++++++++++++++++++++---- 1 file changed, 50 insertions(+), 6 deletions(-) diff --git a/src/app/file/gif_format.cpp b/src/app/file/gif_format.cpp index ae9498273..60bf90edc 100644 --- a/src/app/file/gif_format.cpp +++ b/src/app/file/gif_format.cpp @@ -31,6 +31,10 @@ #include +#if GIFLIB_MAJOR < 5 +#define GifMakeMapObject MakeMapObject +#endif + namespace app { using namespace base; @@ -106,15 +110,23 @@ static int interlaced_jumps[] = { 8, 8, 4, 2 }; struct GifFilePtr { public: +#if GIFLIB_MAJOR >= 5 typedef int (*CloseFunc)(GifFileType*, int*); +#else + typedef int (*CloseFunc)(GifFileType*); +#endif GifFilePtr(GifFileType* ptr, CloseFunc closeFunc) : m_ptr(ptr), m_closeFunc(closeFunc) { } ~GifFilePtr() { +#if GIFLIB_MAJOR >= 5 int errCode; m_closeFunc(m_ptr, &errCode); +#else + m_closeFunc(m_ptr); +#endif } operator GifFileType*() { @@ -132,8 +144,12 @@ private: bool GifFormat::onLoad(FileOp* fop) { - int errCode; - GifFilePtr gif_file(DGifOpenFileHandle(open_file_descriptor_with_exception(fop->filename, "rb"), &errCode), &DGifCloseFile); + int errCode = 0; + GifFilePtr gif_file(DGifOpenFileHandle(open_file_descriptor_with_exception(fop->filename, "rb") +#if GIFLIB_MAJOR >= 5 + , &errCode +#endif + ), &DGifCloseFile); if (!gif_file) { fop_error(fop, "Error loading GIF header.\n"); @@ -244,7 +260,13 @@ bool GifFormat::onLoad(FileOp* fop) for (int y = 0; y < frame_h; ++y) { addr = frame_image->getPixelAddress(0, y); if (DGifGetLine(gif_file, addr, frame_w) == GIF_ERROR) - throw Exception("Invalid image data (%d).\n", gif_file->Error); + throw Exception("Invalid image data (%d).\n" +#if GIFLIB_MAJOR >= 5 + , gif_file->Error +#else + , GifLastError() +#endif + ); } } @@ -522,8 +544,12 @@ void GifFormat::onDestroyData(FileOp* fop) #ifdef ENABLE_SAVE bool GifFormat::onSave(FileOp* fop) { - int errCode; - GifFilePtr gif_file(EGifOpenFileHandle(open_file_descriptor_with_exception(fop->filename, "wb"), &errCode), &EGifCloseFile); + int errCode = 0; + GifFilePtr gif_file(EGifOpenFileHandle(open_file_descriptor_with_exception(fop->filename, "wb") +#if GIFLIB_MAJOR >= 5 + , &errCode +#endif + ), &EGifCloseFile); if (!gif_file) throw Exception("Error creating GIF file.\n"); @@ -682,6 +708,7 @@ bool GifFormat::onSave(FileOp* fop) // Specify loop extension. if (frame_num == 0 && loop >= 0) { +#if GIFLIB_MAJOR >= 5 if (EGifPutExtensionLeader(gif_file, APPLICATION_EXT_FUNC_CODE) == GIF_ERROR) throw Exception("Error writing GIF graphics extension record (header section)."); @@ -698,6 +725,23 @@ bool GifFormat::onSave(FileOp* fop) if (EGifPutExtensionTrailer(gif_file) == GIF_ERROR) throw Exception("Error writing GIF graphics extension record (trailer section)."); + +#else + unsigned char extension_bytes[11]; + + memcpy(extension_bytes, "NETSCAPE2.0", 11); + if (EGifPutExtensionFirst(gif_file, APPLICATION_EXT_FUNC_CODE, 11, extension_bytes) == GIF_ERROR) + throw Exception("Error writing GIF graphics extension record for frame %d.\n", (int)frame_num); + + extension_bytes[0] = 1; + extension_bytes[1] = (loop & 0xff); + extension_bytes[2] = (loop >> 8) & 0xff; + if (EGifPutExtensionNext(gif_file, APPLICATION_EXT_FUNC_CODE, 3, extension_bytes) == GIF_ERROR) + throw Exception("Error writing GIF graphics extension record for frame %d.\n", (int)frame_num); + + if (EGifPutExtensionLast(gif_file, APPLICATION_EXT_FUNC_CODE, 0, NULL) == GIF_ERROR) + throw Exception("Error writing GIF graphics extension record for frame %d.\n", (int)frame_num); +#endif } // Write graphics extension record (to save the duration of the @@ -770,8 +814,8 @@ bool GifFormat::onSave(FileOp* fop) } return true; -} #endif +} base::SharedPtr GifFormat::onGetFormatOptions(FileOp* fop) { From b2fb33a415a629a9a624ddcd407c01f87156c10b Mon Sep 17 00:00:00 2001 From: David Capello Date: Tue, 9 Jun 2015 10:20:56 -0300 Subject: [PATCH 17/24] Don't use our copy of libpng header files when USE_SHARED_LIBPNG is ON --- CMakeLists.txt | 32 ++++++++++++++++++++------------ src/CMakeLists.txt | 7 +------ 2 files changed, 21 insertions(+), 18 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index e0367f2fb..aad3c5a63 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -112,14 +112,6 @@ set(SIMPLEINI_DIR ${CMAKE_SOURCE_DIR}/third_party/simpleini) set(TINYXML_DIR ${CMAKE_SOURCE_DIR}/third_party/tinyxml) set(ZLIB_DIR ${CMAKE_SOURCE_DIR}/third_party/zlib) -# Zlib generated zconf.h file -include_directories(${CMAKE_BINARY_DIR}/third_party/zlib) - -# We need private libpng header files so it doesn't matter if we use -# the shared version of libpng or not, we need to find header files in -# "third_party/libpng"" directory. -include_directories(${LIBPNG_DIR}) - # Search in the "cmake" directory for additional CMake modules. list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake) @@ -127,10 +119,7 @@ list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake) set(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/lib) ###################################################################### -# Common definitions to compile all sources - -# Do not use MMX optimizations in PNG code -add_definitions(-DPNG_NO_MMX_CODE) +# Common definitions to compile all sources (app code and third party) # Debug C/C++ flags if(CMAKE_BUILD_TYPE STREQUAL Debug) @@ -150,6 +139,25 @@ if(NOT USE_SHARED_CURL) set(CURL_STATICLIB ON BOOL) endif() +if(NOT USE_SHARED_ZLIB) + # Zlib generated zconf.h file + include_directories(${CMAKE_BINARY_DIR}/third_party/zlib) +endif() + +if(USE_SHARED_LIBPNG) + find_package(PNG) + if(NOT PNG_FOUND) + message(FATAL_ERROR "libpng not found") + endif() + add_definitions(${PNG_DEFINITIONS}) + include_directories(${PNG_INCLUDE_DIR}) +else() + include_directories(${LIBPNG_DIR}) +endif() + +# Do not use MMX optimizations in PNG code +add_definitions(-DPNG_NO_MMX_CODE) + ###################################################################### # Allegro 4 backend diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 1cbc4e269..d44dfc4ca 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -86,12 +86,7 @@ else() endif() if(USE_SHARED_LIBPNG) - find_package(PNG) - if(PNG_FOUND) - set(libs3rdparty ${libs3rdparty} ${PNG_LIBRARIES}) - add_definitions(${PNG_DEFINITIONS}) - include_directories(${PNG_INCLUDE_DIR}) - endif(PNG_FOUND) + set(libs3rdparty ${libs3rdparty} ${PNG_LIBRARIES}) else() set(libs3rdparty ${libs3rdparty} libpng) endif() From 8c8abcdf32be624c96f1dbaddc5626e96158ed0d Mon Sep 17 00:00:00 2001 From: David Capello Date: Tue, 9 Jun 2015 10:25:44 -0300 Subject: [PATCH 18/24] Use sizeof() instead of png_sizeof() to avoid problems with specific libpng versions --- src/app/file/png_format.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/file/png_format.cpp b/src/app/file/png_format.cpp index 5ebf325b6..6abf5e556 100644 --- a/src/app/file/png_format.cpp +++ b/src/app/file/png_format.cpp @@ -404,7 +404,7 @@ bool PngFormat::onSave(FileOp* fop) #endif // Save the color palette. - palette = (png_colorp)png_malloc(png_ptr, PNG_MAX_PALETTE_LENGTH * png_sizeof(png_color)); + palette = (png_colorp)png_malloc(png_ptr, PNG_MAX_PALETTE_LENGTH * sizeof(png_color)); for (c = 0; c < PNG_MAX_PALETTE_LENGTH; c++) { fop_sequence_get_color(fop, c, &r, &g, &b); palette[c].red = r; From 4a6e17135e2399295c41f91f698267af6704acbf Mon Sep 17 00:00:00 2001 From: David Capello Date: Tue, 9 Jun 2015 10:33:52 -0300 Subject: [PATCH 19/24] Keep going if some tests fails --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 0074db190..1961ff9d8 100644 --- a/.travis.yml +++ b/.travis.yml @@ -23,4 +23,4 @@ before_script: script: - "make" - - "make run_non_ui_tests" + - "make -k run_non_ui_tests" From a2b38227300c54c91b600bdcb501a51c8208b4a4 Mon Sep 17 00:00:00 2001 From: David Capello Date: Tue, 9 Jun 2015 10:37:19 -0300 Subject: [PATCH 20/24] Avoid unused variable warning in gif_format.cpp when we compile with giflib4 --- src/app/file/gif_format.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/app/file/gif_format.cpp b/src/app/file/gif_format.cpp index 60bf90edc..b5f1df973 100644 --- a/src/app/file/gif_format.cpp +++ b/src/app/file/gif_format.cpp @@ -144,7 +144,9 @@ private: bool GifFormat::onLoad(FileOp* fop) { +#if GIFLIB_MAJOR >= 5 int errCode = 0; +#endif GifFilePtr gif_file(DGifOpenFileHandle(open_file_descriptor_with_exception(fop->filename, "rb") #if GIFLIB_MAJOR >= 5 , &errCode @@ -544,7 +546,9 @@ void GifFormat::onDestroyData(FileOp* fop) #ifdef ENABLE_SAVE bool GifFormat::onSave(FileOp* fop) { +#if GIFLIB_MAJOR >= 5 int errCode = 0; +#endif GifFilePtr gif_file(EGifOpenFileHandle(open_file_descriptor_with_exception(fop->filename, "wb") #if GIFLIB_MAJOR >= 5 , &errCode From 86fe6a316b567ff9d0b6fee9f706ebc67f7a568e Mon Sep 17 00:00:00 2001 From: David Capello Date: Tue, 9 Jun 2015 10:40:39 -0300 Subject: [PATCH 21/24] Don't create she::System on file_tests and gif_tests --- src/app/file/file_tests.cpp | 2 -- src/app/file/gif_tests.cpp | 5 +---- 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/src/app/file/file_tests.cpp b/src/app/file/file_tests.cpp index c658157b6..a4e8070df 100644 --- a/src/app/file/file_tests.cpp +++ b/src/app/file/file_tests.cpp @@ -13,7 +13,6 @@ #include "app/file/file.h" #include "app/file/file_formats_manager.h" #include "doc/doc.h" -#include "she/she.h" #include #include @@ -23,7 +22,6 @@ using namespace app; TEST(File, SeveralSizes) { - she::ScopedHandle system(she::create_system()); // Register all possible image formats. FileFormatsManager::instance()->registerAllFormats(); std::vector fn(256); diff --git a/src/app/file/gif_tests.cpp b/src/app/file/gif_tests.cpp index 5301c2ca8..ce3909234 100644 --- a/src/app/file/gif_tests.cpp +++ b/src/app/file/gif_tests.cpp @@ -14,20 +14,17 @@ #include "app/file/gif_options.h" #include "doc/doc.h" #include "doc/test_context.h" -#include "she/scoped_handle.h" -#include "she/system.h" using namespace app; class GifFormat : public ::testing::Test { public: - GifFormat() : m_system(she::create_system()) { + GifFormat() { FileFormatsManager::instance()->registerAllFormats(); } protected: doc::TestContextT m_ctx; - she::ScopedHandle m_system; }; TEST_F(GifFormat, Dimensions) From be0f0892e2829fb1275a079a3e0a0b476fb0d9e8 Mon Sep 17 00:00:00 2001 From: David Capello Date: Tue, 9 Jun 2015 10:47:14 -0300 Subject: [PATCH 22/24] Remove special flags to compile loadpng These flags are defined in the main CMakeLists.txt file if they are needed. --- third_party/loadpng/CMakeLists.txt | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/third_party/loadpng/CMakeLists.txt b/third_party/loadpng/CMakeLists.txt index 37605ca3f..fe7e5cd92 100644 --- a/third_party/loadpng/CMakeLists.txt +++ b/third_party/loadpng/CMakeLists.txt @@ -1,10 +1,7 @@ # ASEPRITE -# Copyright (C) 2001-2013 David Capello +# Copyright (C) 2001-2013, 2015 David Capello add_library(loadpng loadpng.c savepng.c regpng.c) - -set_target_properties(loadpng PROPERTIES - COMPILE_FLAGS "-DDEBUGMODE -DALLEGRO_STATICLINK") From 47a05434fe28d4cdcbbbc53896643b968768c42d Mon Sep 17 00:00:00 2001 From: David Capello Date: Tue, 9 Jun 2015 10:54:04 -0300 Subject: [PATCH 23/24] Remove some remaining parts of USE_SHARED_GTEST option --- .travis.yml | 4 ++-- CMakeLists.txt | 6 ++---- src/CMakeLists.txt | 6 ++---- 3 files changed, 6 insertions(+), 10 deletions(-) diff --git a/.travis.yml b/.travis.yml index 1961ff9d8..d6672520b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -12,14 +12,14 @@ env: before_install: - if [ "$CXX" = "g++" ]; then sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test; fi - sudo apt-get update -qq - - if [ "$SHARED" == "ON" ]; then sudo apt-get install -y libcurl4-openssl-dev libgif-dev libjpeg-dev libz-dev libpng-dev libtinyxml-dev libgtest-dev libpixman-1-dev liballegro4.2-dev ; fi + - if [ "$SHARED" == "ON" ]; then sudo apt-get install -y libcurl4-openssl-dev libgif-dev libjpeg-dev libz-dev libpng-dev libtinyxml-dev libpixman-1-dev liballegro4.2-dev ; fi - if [ "$CXX" = "g++" ]; then sudo apt-get install -y -qq g++-4.8; fi - if [ "$CXX" = "g++" ]; then export CXX="g++-4.8"; fi before_script: - mkdir build - cd build - - cmake .. -DUSE_SHARED_CURL=$SHARED -DUSE_SHARED_GIFLIB=$SHARED -DUSE_SHARED_JPEGLIB=$SHARED -DUSE_SHARED_ZLIB=$SHARED -DUSE_SHARED_LIBPNG=$SHARED -DUSE_SHARED_TINYXML=$SHARED -DUSE_SHARED_GTEST=$SHARED -DUSE_SHARED_PIXMAN=$SHARED -DUSE_SHARED_ALLEGRO4=$SHARED + - cmake .. -DUSE_SHARED_CURL=$SHARED -DUSE_SHARED_GIFLIB=$SHARED -DUSE_SHARED_JPEGLIB=$SHARED -DUSE_SHARED_ZLIB=$SHARED -DUSE_SHARED_LIBPNG=$SHARED -DUSE_SHARED_TINYXML=$SHARED -DUSE_SHARED_PIXMAN=$SHARED -DUSE_SHARED_ALLEGRO4=$SHARED script: - "make" diff --git a/CMakeLists.txt b/CMakeLists.txt index aad3c5a63..ca6bbea95 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -129,10 +129,8 @@ else() endif() # Fix to compile gtest with VC11 (2012) -if(NOT USE_SHARED_GTEST) - if (MSVC_VERSION EQUAL 1700) - add_definitions(-D_VARIADIC_MAX=10) - endif() +if (MSVC_VERSION EQUAL 1700) + add_definitions(-D_VARIADIC_MAX=10) endif() if(NOT USE_SHARED_CURL) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index d44dfc4ca..6b0815f11 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -288,10 +288,8 @@ function(find_tests dir dependencies) file(GLOB tests ${CMAKE_CURRENT_SOURCE_DIR}/${dir}/*_tests.cpp) list(REMOVE_AT ARGV 0) - if(NOT USE_SHARED_GTEST) - # Add gtest include directory so we can #include in tests source code - include_directories(${CMAKE_SOURCE_DIR}/third_party/gtest/include) - endif() + # Add gtest include directory so we can #include in tests source code + include_directories(${CMAKE_SOURCE_DIR}/third_party/gtest/include) # See if the test is linked with "she" library. list(FIND dependencies she link_with_she) From a11e6aff76268482e7b403be65220376f560c9ba Mon Sep 17 00:00:00 2001 From: David Capello Date: Tue, 9 Jun 2015 12:47:27 -0300 Subject: [PATCH 24/24] Fix for "multiple definition" link error with clang on Linux and shared Allegro lib --- CMakeLists.txt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index ca6bbea95..ac2194278 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -129,10 +129,14 @@ else() endif() # Fix to compile gtest with VC11 (2012) -if (MSVC_VERSION EQUAL 1700) +if(MSVC_VERSION EQUAL 1700) add_definitions(-D_VARIADIC_MAX=10) endif() +if(NOT WIN32 AND NOT APPLE AND CMAKE_CXX_COMPILER_ID STREQUAL "Clang") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu89") +endif() + if(NOT USE_SHARED_CURL) set(CURL_STATICLIB ON BOOL) endif()