diff --git a/.travis.yml b/.travis.yml index c687031cc6..50e8e80fcd 100644 --- a/.travis.yml +++ b/.travis.yml @@ -49,6 +49,10 @@ matrix: osx_image: xcode11.4 env: wxCONFIGURE_FLAGS="--enable-monolithic --with-cxx=17 --host=i686-apple-darwin_sim --build=x86_64-apple-darwin17.7.0 --with-osx_iphone --with-macosx-version-min=10.0 --with-macosx-sdk=$(xcrun --sdk iphonesimulator --show-sdk-path) --enable-stl --disable-sys-libs" wxSKIP_GUI=1 wxSKIP_TESTING=1 wxSKIP_SAMPLES=1 name: wxOSX iOS Xcode 11.4 + - os: osx + osx_image: xcode11.4 + env: wxTOOLSET=cmake wxCMAKE_GENERATOR=Xcode wxCMAKE_DEFINES="-DCMAKE_SYSTEM_NAME=iOS -DCMAKE_FIND_ROOT_PATH=/usr/local -DCMAKE_XCODE_ATTRIBUTE_CODE_SIGNING_ALLOWED=NO -DCMAKE_OSX_DEPLOYMENT_TARGET=10.12" wxCMAKE_SAMPLES=OFF wxCMAKE_TESTS=OFF + name: wxOSX iOS CMake Xcode 11.4 - dist: bionic compiler: gcc env: wxCONFIGURE_FLAGS="--with-x11 --enable-pch --disable-stc" wxSKIP_SAMPLES=1 diff --git a/build/bakefiles/files.bkl b/build/bakefiles/files.bkl index 3dc842b2cd..b0633e6049 100644 --- a/build/bakefiles/files.bkl +++ b/build/bakefiles/files.bkl @@ -226,10 +226,6 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file! src/osx/cocoa/utils.mm - - src/osx/iphone/utils.mm - - $(BASE_UNIX_AND_DARWIN_NOTWXMAC_SRC) @@ -2703,7 +2699,6 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file! wx/osx/iphone/chkconf.h - wx/osx/iphone/evtloop.h wx/osx/iphone/private.h wx/generic/region.h wx/osx/sound.h diff --git a/build/cmake/config.cmake b/build/cmake/config.cmake index eb0f42167a..6978cc2725 100644 --- a/build/cmake/config.cmake +++ b/build/cmake/config.cmake @@ -85,7 +85,7 @@ function(wx_write_config) set(WX_CHARTYPE ansi) set(lib_unicode_suffix) endif() - if(CMAKE_CROSSCOMPILING) + if(CMAKE_CROSSCOMPILING AND NOT IPHONE) set(cross_compiling yes) set(host_alias ${CMAKE_SYSTEM_NAME}) else() diff --git a/build/cmake/files.cmake b/build/cmake/files.cmake index 34d7a1bbc3..7dfedeebcf 100644 --- a/build/cmake/files.cmake +++ b/build/cmake/files.cmake @@ -153,10 +153,6 @@ set(BASE_AND_GUI_OSX_COCOA_SRC src/osx/cocoa/power.mm ) -set(BASE_AND_GUI_OSX_IPHONE_SRC - src/osx/iphone/utils.mm -) - set(BASE_OSX_NOTWXMAC_SRC ${BASE_UNIX_AND_DARWIN_NOTWXMAC_SRC} ${BASE_COREFOUNDATION_SRC} @@ -2573,7 +2569,6 @@ set(OSX_IPHONE_SRC set(OSX_IPHONE_HDR wx/osx/iphone/chkconf.h - wx/osx/iphone/evtloop.h wx/osx/iphone/private.h wx/generic/region.h wx/osx/sound.h @@ -3046,11 +3041,16 @@ set(OPENGL_GTK_HDR wx/unix/glx11.h ) -set(OPENGL_OSX_SHARED_SRC +set(OPENGL_OSX_COCOA_SRC src/osx/cocoa/glcanvas.mm src/osx/glcanvas_osx.cpp ) +set(OPENGL_OSX_IPHONE_SRC + src/osx/iphone/glcanvas.mm + src/osx/glcanvas_osx.cpp +) + set(UNIX_SOUND_SDL_SRC src/unix/sound_sdl.cpp ) diff --git a/build/cmake/init.cmake b/build/cmake/init.cmake index 75bd8f815b..4524bc70e6 100644 --- a/build/cmake/init.cmake +++ b/build/cmake/init.cmake @@ -385,7 +385,12 @@ if(wxUSE_GUI) # extra dependencies if(wxUSE_OPENGL) - find_package(OpenGL) + if(WXOSX_IPHONE) + set(OPENGL_FOUND TRUE) + set(OPENGL_LIBRARIES "-framework OpenGLES" "-framework QuartzCore") + else() + find_package(OpenGL) + endif() if(NOT OPENGL_FOUND) message(WARNING "opengl not found, wxGLCanvas won't be available") wx_option_force_value(wxUSE_OPENGL OFF) @@ -538,17 +543,23 @@ endif() set(wxBUILD_PRECOMP_PREV ${wxBUILD_PRECOMP} CACHE INTERNAL "") if(wxBUILD_PRECOMP) + if(DEFINED CMAKE_XCODE_ATTRIBUTE_CODE_SIGNING_ALLOWED) + set(try_flags "-DCMAKE_XCODE_ATTRIBUTE_CODE_SIGNING_ALLOWED=${CMAKE_XCODE_ATTRIBUTE_CODE_SIGNING_ALLOWED}") + endif() if (CLEAN_PRECOMP_TEST) try_compile(RESULT_VAR_CLEAN "${wxBINARY_DIR}/CMakeFiles/cotire_test" "${wxSOURCE_DIR}/build/cmake/modules/cotire_test" CotireExample clean_cotire + CMAKE_FLAGS ${try_flags} ) endif() try_compile(RESULT_VAR "${wxBINARY_DIR}/CMakeFiles/cotire_test" "${wxSOURCE_DIR}/build/cmake/modules/cotire_test" - CotireExample OUTPUT_VARIABLE OUTPUT_VAR + CotireExample + CMAKE_FLAGS ${try_flags} + OUTPUT_VARIABLE OUTPUT_VAR ) # check if output has precompiled header warnings. The build can still succeed, so check the output diff --git a/build/cmake/lib/base/CMakeLists.txt b/build/cmake/lib/base/CMakeLists.txt index cd897c3154..4da98e6f48 100644 --- a/build/cmake/lib/base/CMakeLists.txt +++ b/build/cmake/lib/base/CMakeLists.txt @@ -17,9 +17,7 @@ if(WIN32) wx_append_sources(BASE_FILES BASE_AND_GUI_WIN32) elseif(APPLE) wx_append_sources(BASE_FILES BASE_OSX_SHARED) - if(wxBUILD_TOOLKIT MATCHES "osx_iphone") - wx_append_sources(BASE_FILES BASE_AND_GUI_OSX_IPHONE) - else() + if(WXOSX_COCOA) wx_append_sources(BASE_FILES BASE_AND_GUI_OSX_COCOA) endif() elseif(UNIX) @@ -58,14 +56,19 @@ endif() if(APPLE) wx_lib_link_libraries(wxbase - PRIVATE - "-framework Security" PUBLIC - "-framework Carbon" - "-framework Cocoa" "-framework CoreFoundation" - "-framework IOKit" ) + if(WXOSX_COCOA) + wx_lib_link_libraries(wxbase + PRIVATE + "-framework Security" + PUBLIC + "-framework Carbon" + "-framework Cocoa" + "-framework IOKit" + ) + endif() elseif(UNIX) wx_lib_link_libraries(wxbase PRIVATE dl) endif() diff --git a/build/cmake/lib/core/CMakeLists.txt b/build/cmake/lib/core/CMakeLists.txt index d9f423c8f8..95be60c49a 100644 --- a/build/cmake/lib/core/CMakeLists.txt +++ b/build/cmake/lib/core/CMakeLists.txt @@ -47,6 +47,9 @@ elseif(WXOSX_COCOA) wx_append_sources(CORE_SRC OSX_LOWLEVEL) wx_append_sources(CORE_SRC OSX_SHARED) wx_append_sources(CORE_SRC OSX_COCOA) +elseif(WXOSX_IPHONE) + wx_append_sources(CORE_SRC OSX_LOWLEVEL) + wx_append_sources(CORE_SRC OSX_IPHONE) elseif(WXQT) wx_append_sources(CORE_SRC QT) if(WIN32) @@ -76,6 +79,15 @@ if(WXOSX_COCOA) wx_lib_link_libraries(wxcore PUBLIC "-framework WebKit") endif() endif() +if(WXOSX_IPHONE) + wx_lib_link_libraries(wxcore + PUBLIC + "-framework AudioToolbox" + "-framework CoreGraphics" + "-framework CoreText" + "-framework UIKit" + ) +endif() if(WXGTK AND wxUSE_PRIVATE_FONTS) wx_lib_include_directories(wxcore PUBLIC ${FONTCONFIG_INCLUDE_DIRS} ${PANGOFT2_INCLUDE_DIRS}) wx_lib_link_libraries(wxcore PUBLIC ${FONTCONFIG_LIBRARIES} ${PANGOFT2_LIBRARIES}) diff --git a/build/cmake/lib/gl/CMakeLists.txt b/build/cmake/lib/gl/CMakeLists.txt index 62ce6ef769..2b927cbe27 100644 --- a/build/cmake/lib/gl/CMakeLists.txt +++ b/build/cmake/lib/gl/CMakeLists.txt @@ -15,8 +15,10 @@ if(WXMSW) wx_append_sources(GL_FILES OPENGL_MSW) elseif(WXGTK) wx_append_sources(GL_FILES OPENGL_GTK) -elseif(APPLE) - wx_append_sources(GL_FILES OPENGL_OSX_SHARED) +elseif(WXOSX_COCOA) + wx_append_sources(GL_FILES OPENGL_OSX_COCOA) +elseif(WXOSX_IPHONE) + wx_append_sources(GL_FILES OPENGL_OSX_IPHONE) elseif(WXQT) wx_append_sources(GL_FILES OPENGL_QT) endif() diff --git a/build/cmake/lib/media/CMakeLists.txt b/build/cmake/lib/media/CMakeLists.txt index 2458896d35..4a0aa959c8 100644 --- a/build/cmake/lib/media/CMakeLists.txt +++ b/build/cmake/lib/media/CMakeLists.txt @@ -15,6 +15,8 @@ if(WXMSW) wx_append_sources(MEDIA_FILES MEDIA_MSW) elseif(WXOSX_COCOA) wx_append_sources(MEDIA_FILES MEDIA_OSX_COCOA) +elseif(WXOSX_IPHONE) + wx_append_sources(MEDIA_FILES MEDIA_OSX_IPHONE) elseif(UNIX) wx_append_sources(MEDIA_FILES MEDIA_UNIX) elseif(WXQT) @@ -22,13 +24,11 @@ elseif(WXQT) endif() wx_add_library(wxmedia ${MEDIA_FILES}) -if(WXOSX_COCOA) - # TODO: add version detection of some kind and/or wx_option - wx_lib_compile_definitions(wxmedia PRIVATE -DwxOSX_USE_QTKIT=0) +if(WXOSX) wx_lib_link_libraries(wxmedia PUBLIC "-framework AVFoundation" - "-framework AVKit" "-framework CoreMedia" + "-weak_framework AVKit" ) elseif(UNIX) wx_lib_include_directories(wxmedia PUBLIC ${GSTREAMER_INCLUDE_DIRS}) diff --git a/build/cmake/toolkit.cmake b/build/cmake/toolkit.cmake index 2b8dbbe5db..577d3c8661 100644 --- a/build/cmake/toolkit.cmake +++ b/build/cmake/toolkit.cmake @@ -12,6 +12,10 @@ wx_option(wxUSE_GUI "Use GUI" ON) if(CMAKE_OSX_SYSROOT MATCHES iphoneos) set(IPHONE ON) + + # workaround a bug where try_compile (and functions using it, + # like find_package, check_c_source_compiles) fails + set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY) endif() if(WIN32) diff --git a/build/cmake/utils/CMakeLists.txt b/build/cmake/utils/CMakeLists.txt index 0fd4761719..4108d6a723 100644 --- a/build/cmake/utils/CMakeLists.txt +++ b/build/cmake/utils/CMakeLists.txt @@ -20,18 +20,28 @@ if(wxUSE_XRC) set_target_properties(wxrc PROPERTIES FOLDER "Utilities") - wx_install(TARGETS wxrc RUNTIME DESTINATION "bin") + wx_install(TARGETS wxrc + RUNTIME DESTINATION "bin" + BUNDLE DESTINATION "bin" + ) + + if(IPHONE) + set(EXE_SUFFIX ".app") + else() + set(EXE_SUFFIX ${CMAKE_EXECUTABLE_SUFFIX}) + endif() + if(NOT MSVC) install(CODE "execute_process( \ COMMAND ${CMAKE_COMMAND} -E rename \ - ${CMAKE_INSTALL_PREFIX}/bin/wxrc${CMAKE_EXECUTABLE_SUFFIX} \ - ${CMAKE_INSTALL_PREFIX}/bin/wxrc-${wxMAJOR_VERSION}.${wxMINOR_VERSION}${CMAKE_EXECUTABLE_SUFFIX} \ + ${CMAKE_INSTALL_PREFIX}/bin/wxrc${EXE_SUFFIX} \ + ${CMAKE_INSTALL_PREFIX}/bin/wxrc-${wxMAJOR_VERSION}.${wxMINOR_VERSION}${EXE_SUFFIX} \ )" ) install(CODE "execute_process( \ COMMAND ${CMAKE_COMMAND} -E create_symlink \ - ${CMAKE_INSTALL_PREFIX}/bin/wxrc-${wxMAJOR_VERSION}.${wxMINOR_VERSION}${CMAKE_EXECUTABLE_SUFFIX} \ - ${CMAKE_INSTALL_PREFIX}/bin/wxrc${CMAKE_EXECUTABLE_SUFFIX} \ + ${CMAKE_INSTALL_PREFIX}/bin/wxrc-${wxMAJOR_VERSION}.${wxMINOR_VERSION}${EXE_SUFFIX} \ + ${CMAKE_INSTALL_PREFIX}/bin/wxrc${EXE_SUFFIX} \ )" ) endif() diff --git a/build/files b/build/files index 52ec58ef54..469036da6d 100644 --- a/build/files +++ b/build/files @@ -176,9 +176,6 @@ BASE_AND_GUI_OSX_COCOA_SRC = src/osx/cocoa/utils.mm src/osx/cocoa/power.mm -BASE_AND_GUI_OSX_IPHONE_SRC = - src/osx/iphone/utils.mm - # files used by non-wxMac OS X builds BASE_OSX_NOTWXMAC_SRC = $(BASE_UNIX_AND_DARWIN_NOTWXMAC_SRC) @@ -2552,7 +2549,6 @@ OSX_IPHONE_SRC = OSX_IPHONE_HDR = wx/generic/region.h wx/osx/iphone/chkconf.h - wx/osx/iphone/evtloop.h wx/osx/iphone/private.h wx/osx/sound.h @@ -2984,10 +2980,14 @@ OPENGL_GTK_SRC = OPENGL_MSW_HDR = wx/msw/glcanvas.h -OPENGL_OSX_SHARED_SRC = +OPENGL_OSX_COCOA_SRC = src/osx/cocoa/glcanvas.mm src/osx/glcanvas_osx.cpp +OPENGL_OSX_IPHONE_SRC = + src/osx/iphone/glcanvas.mm + src/osx/glcanvas_osx.cpp + # Misc plugin sources: UNIX_SOUND_SDL_SRC = diff --git a/build/tools/travis-ci.sh b/build/tools/travis-ci.sh index 5b00dca6cc..c618b08bbb 100755 --- a/build/tools/travis-ci.sh +++ b/build/tools/travis-ci.sh @@ -6,31 +6,37 @@ set -e wxPROC_COUNT=`getconf _NPROCESSORS_ONLN` ((wxPROC_COUNT++)) -if [ "$wxTOOLSET" == "cmake" ] && [ "$wxCMAKE_GENERATOR" == "Xcode" ]; then - wxJOBS="-jobs $wxPROC_COUNT" -else - wxJOBS="-j$wxPROC_COUNT" -fi +wxBUILD_ARGS="-j$wxPROC_COUNT" case $wxTOOLSET in cmake) if [ -z $wxCMAKE_TESTS ]; then wxCMAKE_TESTS=CONSOLE_ONLY; fi + if [ -z $wxCMAKE_SAMPLES ]; then wxCMAKE_SAMPLES=SOME; fi + if [ "$wxCMAKE_GENERATOR" == "Xcode" ]; then + wxBUILD_ARGS="-jobs $wxPROC_COUNT -quiet" + fi cmake --version echo 'travis_fold:start:configure' echo 'Configuring...' mkdir build_cmake pushd build_cmake - cmake -G "$wxCMAKE_GENERATOR" $wxCMAKE_DEFINES -D wxBUILD_SAMPLES=SOME -D wxBUILD_TESTS=$wxCMAKE_TESTS .. + cmake -G "$wxCMAKE_GENERATOR" $wxCMAKE_DEFINES -D wxBUILD_SAMPLES=$wxCMAKE_SAMPLES -D wxBUILD_TESTS=$wxCMAKE_TESTS .. echo 'travis_fold:end:configure' - echo 'travis_fold:start:building' - echo 'Building...' - if [ "$wxCMAKE_GENERATOR" == "Xcode" ]; then - wxTOOL_ARG="-quiet" + if [ "$wxCMAKE_GENERATOR" != "Xcode" ]; then + echo 'travis_fold:start:building' + echo 'Building...' + cmake --build . -- $wxBUILD_ARGS + echo 'travis_fold:end:building' fi - cmake --build . -- $wxJOBS $wxTOOL_ARG - echo 'travis_fold:end:building' + + echo 'travis_fold:start:install' + if [ "$wxCMAKE_GENERATOR" == "Xcode" ]; then echo -n 'Building and '; fi + echo 'Installing...' + sudo env "PATH=$PATH" cmake --build . --target install -- $wxBUILD_ARGS + popd + echo 'travis_fold:end:install' if [ "$wxCMAKE_TESTS" != "OFF" ]; then echo 'travis_fold:start:testing' @@ -39,21 +45,18 @@ case $wxTOOLSET in echo 'travis_fold:end:testing' fi - echo 'Installing...' && echo -en 'travis_fold:start:script.install\\r' - sudo env "PATH=$PATH" cmake --build . --target install - popd - echo -en 'travis_fold:end:script.install\\r' - - echo 'Testing installation...' && echo -en 'travis_fold:start:script.testinstall\\r' + echo 'travis_fold:start:testinstall' + echo 'Testing installation...' mkdir build_cmake_install_test pushd build_cmake_install_test - cmake "$wxCMAKE_GENERATOR" $wxCMAKE_DEFINES ../samples/minimal - cmake --build . + cmake -G "$wxCMAKE_GENERATOR" $wxCMAKE_DEFINES ../samples/minimal + cmake --build . -- $wxBUILD_ARGS popd - echo -en 'travis_fold:end:script.testinstall\\r' + echo 'travis_fold:end:testinstall' ;; *) - echo 'Configuring...' && echo -en 'travis_fold:start:script.configure\\r' + echo 'travis_fold:start:configure' + echo 'Configuring...' ./configure --disable-optimise --disable-debug_info $wxCONFIGURE_FLAGS || rc=$? if [ -n "$rc" ]; then echo '*** Configuring failed, contents of config.log follows: ***' @@ -62,25 +65,28 @@ case $wxTOOLSET in echo '-----------------------------------------------------------' exit $rc fi - echo -en 'travis_fold:end:script.configure\\r' + echo 'travis_fold:end:configure' - echo 'Building...' && echo -en 'travis_fold:start:script.build\\r' - make $wxJOBS - echo -en 'travis_fold:end:script.build\\r' + echo 'travis_fold:start:building' + echo 'Building...' + make $wxBUILD_ARGS + echo 'travis_fold:end:building' - echo 'Building tests...' && echo -en 'travis_fold:start:script.tests\\r' - [ "$wxSKIP_GUI" = 1 ] || make -C tests $wxJOBS failtest - make -C tests $wxJOBS $wxMAKEFILE_FLAGS - echo -en 'travis_fold:end:script.tests\\r' + echo 'travis_fold:start:tests' + echo 'Building tests...' + [ "$wxSKIP_GUI" = 1 ] || make -C tests $wxBUILD_ARGS failtest + make -C tests $wxBUILD_ARGS $wxMAKEFILE_FLAGS + echo 'travis_fold:end:tests' if [ "$wxSKIP_TESTING" = 1 ]; then echo 'Skipping running tests' exit 0 fi - echo 'Testing...' && echo -en 'travis_fold:start:script.testing\\r' + echo 'travis_fold:start:testing' + echo 'Testing...' pushd tests && ./test && popd - echo -en 'travis_fold:end:script.testing\\r' + echo 'travis_fold:end:testing' if [ "$wxSKIP_GUI" = 1 ]; then echo 'Skipping the rest of tests for non-GUI build.' @@ -88,22 +94,26 @@ case $wxTOOLSET in fi if [ "$wxUSE_XVFB" = 1 ]; then - echo 'Testing GUI using Xvfb...' && echo -en 'travis_fold:start:script.testing_gui\\r' + echo 'travis_fold:start:testing_gui' + echo 'Testing GUI using Xvfb...' pushd tests && xvfb-run -a -s '-screen 0 1600x1200x24' ./test_gui && popd - echo -en 'travis_fold:end:script.testing_gui\\r' + echo 'travis_fold:end:testing_gui' fi - echo 'Building samples...' && echo -en 'travis_fold:start:script.samples\\r' + echo 'travis_fold:start:samples' + echo 'Building samples...' (test "$wxSKIP_SAMPLES" && echo 'SKIPPED') || make samples - echo -en 'travis_fold:end:script.samples\\r' + echo 'travis_fold:end:samples' - echo 'Installing...' && echo -en 'travis_fold:start:script.install\\r' + echo 'travis_fold:start:install' + echo 'Installing...' sudo make install - echo -en 'travis_fold:end:script.install\\r' + echo 'travis_fold:end:install' - echo 'Testing installation...' && echo -en 'travis_fold:start:script.testinstall\\r' + echo 'travis_fold:start:testinstall' + echo 'Testing installation...' make -C samples/minimal -f makefile.unx clean make -C samples/minimal -f makefile.unx $wxMAKEFILE_FLAGS - echo -en 'travis_fold:end:script.testinstall\\r' + echo 'travis_fold:end:testinstall' ;; esac