diff --git a/.travis.yml b/.travis.yml index 5fcbca06..43746c9d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,5 +1,8 @@ language: cpp -os: osx +os: + - linux + - osx +dist: bionic osx_image: xcode7.3 env: @@ -9,6 +12,10 @@ env: - CONFIGURATION="Debug" - CONFIGURATION="Release" +# Install dependencies for Linux builds. libc6-i386 is needed to run the 32-bit premake4 binary. +before_install: + - if [ "$TRAVIS_OS_NAME" = "linux" ]; then sudo apt-get -qq update && sudo apt-get install libc6-i386 libgtk-3-dev; fi + # Build and install wxWidgets, with our custom tweaks patch install: - ./build-wxwidgets.sh $WX_VERSION $CONFIGURATION @@ -20,19 +27,20 @@ cache: # Run premake4 to create the Xcode project before_script: - - ./premake4 --platform=x64 --wx-config-debug=$HOME/wxWidgets-$WX_VERSION/bin/wx-config --wx-config-release=$HOME/wxWidgets-$WX_VERSION/bin/wx-config xcode4 + - if [ "$TRAVIS_OS_NAME" = "osx" ]; then ./premake4 --platform=x64 --wx-config-debug=$HOME/wxWidgets-$WX_VERSION/bin/wx-config --wx-config-release=$HOME/wxWidgets-$WX_VERSION/bin/wx-config xcode4; fi + - if [ "$TRAVIS_OS_NAME" = "linux" ]; then ./premake4-linux --platform=x64 --wx-config-debug=$HOME/wxWidgets-$WX_VERSION/bin/wx-config --wx-config-release=$HOME/wxWidgets-$WX_VERSION/bin/wx-config gmake; fi # Build XWord script: - - xcodebuild -project build/xcode4/XWord.xcodeproj -configuration "$CONFIGURATION Native" build + - if [ "$TRAVIS_OS_NAME" = "osx" ]; then xcodebuild -project build/xcode4/XWord.xcodeproj -configuration "$CONFIGURATION Native" build; fi + - if [ "$TRAVIS_OS_NAME" = "linux" ]; then make -C build/gmake config=${CONFIGURATION,,}; fi -# For deployed builds, zip the .app folder +# For deployed Mac builds, zip the .app folder before_deploy: - - pushd bin/$CONFIGURATION - - zip -r XWord-macOS.zip XWord.app/ -x *.fbp - - popd + - if [ "$TRAVIS_OS_NAME" = "osx" ]; then pushd bin/$CONFIGURATION && zip -r XWord-macOS.zip XWord.app/ -x *.fbp && popd; fi # Deploy tagged release builds to GitHub Releases +# TODO(#40): Deployment for Linux. deploy: provider: releases api_key: @@ -41,4 +49,4 @@ deploy: skip_cleanup: true on: tags: true - condition: $CONFIGURATION = "Release" + condition: $TRAVIS_OS_NAME = "osx" && $CONFIGURATION = "Release" diff --git a/build-wxwidgets.sh b/build-wxwidgets.sh index ceb261d9..b52126ca 100755 --- a/build-wxwidgets.sh +++ b/build-wxwidgets.sh @@ -16,14 +16,17 @@ mkdir -p $INSTALL_PATH WX_CONFIGURE_FLAGS="\ --disable-shared \ - --enable-compat28 \ - --with-macosx-version-min=10.7 \ - CFLAGS=-fvisibility-inlines-hidden \ - CXXFLAGS='-fvisibility-inlines-hidden -stdlib=libc++' \ - CPPFLAGS='-fvisibility-inlines-hidden -stdlib=libc++' \ - OBJCFLAGS=-fvisibility-inlines-hidden \ - OBJCXXFLAGS='-fvisibility-inlines-hidden -stdlib=libc++' \ - LDFLAGS=-stdlib=libc++" + --enable-compat28" +if [[ "$OSTYPE" == "darwin"* ]]; then + WX_CONFIGURE_FLAGS="$WX_CONFIGURE_FLAGS \ + --with-macosx-version-min=10.7 \ + CFLAGS=-fvisibility-inlines-hidden \ + CXXFLAGS='-fvisibility-inlines-hidden -stdlib=libc++' \ + CPPFLAGS='-fvisibility-inlines-hidden -stdlib=libc++' \ + OBJCFLAGS=-fvisibility-inlines-hidden \ + OBJCXXFLAGS='-fvisibility-inlines-hidden -stdlib=libc++' \ + LDFLAGS=-stdlib=libc++" +fi WX_MAKE_FLAGS="SHARED=0" if [[ "$CONFIGURATION" == "Debug" ]]; then @@ -39,8 +42,8 @@ fi echo "Building wxWidgets version $WX_VERSION for configuration: $CONFIGURATION" mkdir -p $INSTALL_PATH -if [[ "$OSTYPE" == "darwin"* ]]; then - # Mac OS X +if [[ "$OSTYPE" == "darwin"* ]] || [[ "$OSTYPE" == "linux"* ]]; then + # Mac OS X / Linux BUILD_COMMAND="./configure --prefix=$INSTALL_PATH $WX_CONFIGURE_FLAGS && make && make install" else # Windows diff --git a/deps/luajit/lib/linux/liblua51.a b/deps/luajit/lib/linux/liblua51.a new file mode 100644 index 00000000..ce98cd7c Binary files /dev/null and b/deps/luajit/lib/linux/liblua51.a differ diff --git a/deps/luajit/lib/liblua51.a b/deps/luajit/lib/macosx/liblua51.a similarity index 100% rename from deps/luajit/lib/liblua51.a rename to deps/luajit/lib/macosx/liblua51.a diff --git a/deps/luajit/lib/lua51.dll b/deps/luajit/lib/windows/lua51.dll similarity index 100% rename from deps/luajit/lib/lua51.dll rename to deps/luajit/lib/windows/lua51.dll diff --git a/deps/luajit/lib/lua51.exp b/deps/luajit/lib/windows/lua51.exp similarity index 100% rename from deps/luajit/lib/lua51.exp rename to deps/luajit/lib/windows/lua51.exp diff --git a/deps/luajit/lib/lua51.lib b/deps/luajit/lib/windows/lua51.lib similarity index 100% rename from deps/luajit/lib/lua51.lib rename to deps/luajit/lib/windows/lua51.lib diff --git a/lua/luapuz/luapuz_functions.hpp b/lua/luapuz/luapuz_functions.hpp index 197758ba..a7243c1f 100644 --- a/lua/luapuz/luapuz_functions.hpp +++ b/lua/luapuz/luapuz_functions.hpp @@ -7,6 +7,8 @@ extern "C" { #include } +#include +#include #include #include #include "puz/exceptions.hpp" diff --git a/lua/luapuz/premake4.lua b/lua/luapuz/premake4.lua index 0c9a35a2..bdaeb875 100644 --- a/lua/luapuz/premake4.lua +++ b/lua/luapuz/premake4.lua @@ -34,7 +34,10 @@ project "luapuz" configuration "linux" - defines { [[PUZ_API=""]] } + defines { + [[PUZ_API=""]], + [[LUAPUZ_API=""]] + } links { "dl" } configuration "macosx" diff --git a/premake4-linux b/premake4-linux new file mode 100755 index 00000000..0749ff55 Binary files /dev/null and b/premake4-linux differ diff --git a/premake4_wxdefs.lua b/premake4_wxdefs.lua index 5fc9d875..24a54116 100644 --- a/premake4_wxdefs.lua +++ b/premake4_wxdefs.lua @@ -24,7 +24,7 @@ configuration { "linux", "Debug" } _OPTIONS["wx-config-debug"])) configuration { "linux", "Release" } - buildoptions(string.format("`%s --release --unicode --static --cxxflags`", + buildoptions(string.format("`%s --unicode --static --cxxflags`", _OPTIONS["wx-config-release"])) elseif os.is("macosx") then diff --git a/premake4_wxlibs.lua b/premake4_wxlibs.lua index 0507a4df..8856fd09 100644 --- a/premake4_wxlibs.lua +++ b/premake4_wxlibs.lua @@ -75,11 +75,11 @@ configuration "windows" elseif os.is("linux") then configuration { "linux", "Debug" } - linkoptions(string.format("`%s --debug --unicode --static --libs`", + linkoptions(string.format("`%s --debug --unicode --static --libs std aui`", _OPTIONS["wx-config-debug"])) configuration { "linux", "Release" } - linkoptions(string.format("`%s --release --unicode --static --libs`", + linkoptions(string.format("`%s --unicode --static --libs std aui`", _OPTIONS["wx-config-release"])) elseif os.is("macosx") then diff --git a/premake_config.lua b/premake_config.lua index 3eaae998..92c23dfe 100644 --- a/premake_config.lua +++ b/premake_config.lua @@ -263,7 +263,7 @@ local function paths(paths) return paths end DEPS = { - lua = paths{include="deps/luajit/include", lib="deps/luajit/lib", dll="lua51.dll"}, + lua = paths{include="deps/luajit/include", lib="deps/luajit/lib/" .. os.get(), dll="lua51.dll"}, zlib = paths{include="deps/zlib/include", lib="deps/zlib/lib", dll="zlib1.dll"}, expat = paths{include="deps/expat/include", lib="deps/expat/lib", dll="libexpat.dll"}, curl = paths{include="deps/curl/include", lib="deps/curl/lib", dll="*.dll"}, diff --git a/puz/Scrambler.cpp b/puz/Scrambler.cpp index 70a8f749..3bdd1cd9 100644 --- a/puz/Scrambler.cpp +++ b/puz/Scrambler.cpp @@ -22,6 +22,7 @@ #include #include #include +#include namespace puz { diff --git a/puz/Square.cpp b/puz/Square.cpp index 0ffae232..77766531 100644 --- a/puz/Square.cpp +++ b/puz/Square.cpp @@ -16,6 +16,7 @@ // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +#include #include "Square.hpp" #include "Grid.hpp" diff --git a/puz/Word.cpp b/puz/Word.cpp index f9a63d9f..39b7c913 100644 --- a/puz/Word.cpp +++ b/puz/Word.cpp @@ -16,6 +16,7 @@ // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. #include +#include #include "Word.hpp" #include "Square.hpp" diff --git a/puz/formats/jpz/load_jpz.cpp b/puz/formats/jpz/load_jpz.cpp index 2a80f8d2..9b41d431 100644 --- a/puz/formats/jpz/load_jpz.cpp +++ b/puz/formats/jpz/load_jpz.cpp @@ -23,6 +23,7 @@ #include "utils/minizip.hpp" #include #include "parse/base64.hpp" +#include namespace puz { diff --git a/puz/formats/puz/load_puz.cpp b/puz/formats/puz/load_puz.cpp index fe34d2cf..bb9b254e 100644 --- a/puz/formats/puz/load_puz.cpp +++ b/puz/formats/puz/load_puz.cpp @@ -26,6 +26,8 @@ #include #include #include +#include +#include namespace puz { diff --git a/puz/premake4.lua b/puz/premake4.lua index f7605aea..cfa63a20 100644 --- a/puz/premake4.lua +++ b/puz/premake4.lua @@ -37,7 +37,7 @@ project "puz" configuration "linux" defines { [[PUZ_API=""]] } - links { "dl", "zlib" } + links { "dl", "z" } configuration "macosx" defines { diff --git a/src/dialogs/TreePanels.hpp b/src/dialogs/TreePanels.hpp index 9cd67548..ef0b06fb 100644 --- a/src/dialogs/TreePanels.hpp +++ b/src/dialogs/TreePanels.hpp @@ -30,7 +30,7 @@ #include "TreeCtrls.hpp" #include "PreferencesPanel.hpp" -#include "MetadataFormat.hpp" +#include "metadataformat.hpp" // The base class for all Appearance tree panels class AppearanceBase diff --git a/src/dialogs/fontface.cpp b/src/dialogs/fontface.cpp index c7946f66..ec9ddeac 100644 --- a/src/dialogs/fontface.cpp +++ b/src/dialogs/fontface.cpp @@ -99,7 +99,7 @@ void FontFaceCtrl::SetValue(const wxString & value) evt.SetEventObject(this); evt.SetId(selection); evt.SetString(m_lastFaceName); - ProcessCommand(evt); + HandleWindowEvent(evt); } diff --git a/src/premake4.lua b/src/premake4.lua index 5d6d7706..13908146 100644 --- a/src/premake4.lua +++ b/src/premake4.lua @@ -18,12 +18,7 @@ project "XWord" configuration "not macosx" excludes { "dialogs/wxFB_PreferencesPanelsOSX.*" } - -- -------------------------------------------------------------------- - -- wxWidgets - -- -------------------------------------------------------------------- - - dofile "../premake4_wxdefs.lua" - dofile "../premake4_wxlibs.lua" + configuration { } -- -------------------------------------------------------------------- -- puz @@ -37,8 +32,13 @@ project "XWord" } configuration "linux" - defines { [[PUZ_API=""]] } - links { "dl" } + defines { + [[PUZ_API=""]], + [[LUAPUZ_API=""]] + } + -- TODO: Why is yajl necessary, when it's only needed by puz? + -- libpuz.so seems to link to libyajl.so via a bad relative path + links { "dl", "yajl" } configuration "macosx" defines { @@ -96,7 +96,7 @@ project "XWord" "-lwxbindcore", "-lwxbindbase", "-lwxlua", - "-llua5.1", + "-llua51", } -- Postbuild: copy lua51.dll to XWord directory @@ -115,6 +115,15 @@ project "XWord" } end + -- -------------------------------------------------------------------- + -- wxWidgets + -- -------------------------------------------------------------------- + + -- Note: This must come after the link options above to ensure correct + -- link order on Linux. + dofile "../premake4_wxdefs.lua" + dofile "../premake4_wxlibs.lua" + -- -------------------------------------------------------------------- -- Resources -- -------------------------------------------------------------------- diff --git a/src/utils/clipboard.hpp b/src/utils/clipboard.hpp index fefa360a..6cb25b21 100644 --- a/src/utils/clipboard.hpp +++ b/src/utils/clipboard.hpp @@ -22,7 +22,7 @@ #include #include #include -#include "puz/word.hpp" +#include "puz/Word.hpp" #include "string.hpp" // A class for copying the text from a word of squares. @@ -81,4 +81,4 @@ class XWordTextDataObject : public wxDataObjectComposite } }; -#endif // MY_CLIPBOARD_H \ No newline at end of file +#endif // MY_CLIPBOARD_H diff --git a/src/widgets/BitmapRadio.cpp b/src/widgets/BitmapRadio.cpp index 09424c64..2a5051a3 100644 --- a/src/widgets/BitmapRadio.cpp +++ b/src/widgets/BitmapRadio.cpp @@ -15,7 +15,7 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -#include "bitmapradio.hpp" +#include "BitmapRadio.hpp" #include #include #include diff --git a/src/widgets/alignctrl.hpp b/src/widgets/alignctrl.hpp index 40297da8..7a79e4d2 100644 --- a/src/widgets/alignctrl.hpp +++ b/src/widgets/alignctrl.hpp @@ -18,7 +18,7 @@ #ifndef ALIGN_CTRL_H #define ALIGN_CTRL_H -#include "bitmapradio.hpp" +#include "BitmapRadio.hpp" class AlignmentControl : public BitmapRadioBox