diff --git a/.github/workflows/ci-macvim.yaml b/.github/workflows/ci-macvim.yaml index f608e0a75f..e4359edde1 100644 --- a/.github/workflows/ci-macvim.yaml +++ b/.github/workflows/ci-macvim.yaml @@ -7,6 +7,9 @@ on: env: MACOSX_DEPLOYMENT_TARGET: 10.9 + CC: clang + CONFOPT: "--with-features=huge --enable-netbeans --with-tlib=ncurses --enable-cscope --enable-gui=macvim --with-macarchs=x86_64" + VERSIONER_PERL_VERSION: 5.18 VERSIONER_PYTHON_VERSION: 2.7 vi_cv_path_python: /usr/bin/python @@ -17,23 +20,38 @@ env: vi_cv_dll_name_python: /System/Library/Frameworks/Python.framework/Versions/2.7/Python vi_cv_dll_name_python3: /usr/local/Frameworks/Python.framework/Versions/3.9/Python vi_cv_dll_name_ruby: /usr/local/opt/ruby/lib/libruby.dylib + LANGOPT: "--enable-perlinterp=dynamic --enable-pythoninterp=dynamic --enable-python3interp=dynamic --enable-rubyinterp=dynamic --enable-luainterp=dynamic --with-lua-prefix=/usr/local" VIMCMD: src/MacVim/build/Release/MacVim.app/Contents/MacOS/Vim MACVIM_BIN: src/MacVim/build/Release/MacVim.app/Contents/MacOS/MacVim - CONFOPT: "--with-features=huge --enable-netbeans --with-tlib=ncurses --enable-cscope --enable-gui=macvim --with-macarchs=x86_64" - LANGOPT: "--enable-perlinterp=dynamic --enable-pythoninterp=dynamic --enable-python3interp=dynamic --enable-rubyinterp=dynamic --enable-luainterp=dynamic --with-lua-prefix=/usr/local" - HAS_GETTEXT: 1 - BASH_SILENCE_DEPRECATION_WARNING: 1 TERM: xterm + BASH_SILENCE_DEPRECATION_WARNING: 1 jobs: # Builds and test MacVim build: - runs-on: macos-latest + + # Test on macOS 10.15 / 11.0, and also older version of Xcode for compatibility testing. + strategy: + fail-fast: false + matrix: + xcode: [''] + os: [macos-10.15, macos-11.0] + include: + - os: macos-10.15 + xcode: 11.7 + - os: macos-10.15 + xcode: '' + publish: true + + runs-on: ${{ matrix.os }} + + env: + XCODE_VER: ${{ matrix.xcode }} steps: - uses: actions/checkout@v2 @@ -89,6 +107,11 @@ jobs: set -o errexit set -o verbose + if [[ -n "${XCODE_VER}" ]]; then + sudo xcode-select -s /Applications/Xcode_${XCODE_VER}.app/Contents/Developer + fi + xcode-select -p + ./configure ${CONFOPT} ${LANGOPT} --enable-fail-if-missing sed -i.bak -f ci/config.mk.sed -f ci/config.mk.clang.sed src/auto/config.mk # Ruby is keg-only in Homebrew, so need to manually link in the path so Vim will know where to look for the binaries. @@ -155,14 +178,14 @@ jobs: # do it manually, for two reasons: 1) signing / notarization are currently done out of CI, 2) we want to manually # format our release notes and add pictures to make them look nice. - name: Build MacVim dmg image - if: startsWith(github.ref, 'refs/tags/') + if: startsWith(github.ref, 'refs/tags/') && matrix.publish run: | # Use the --skip-jenkins flag to skip the prettify osascript calls which could fail due to permission issues in # CI environment. make -C src macvim-dmg CREATEDMG_FLAGS=--skip-jenkins - name: Upload MacVim image - if: startsWith(github.ref, 'refs/tags/') + if: startsWith(github.ref, 'refs/tags/') && matrix.publish uses: actions/upload-artifact@v2 with: name: MacVim.dmg diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml deleted file mode 100644 index 25ac92f5dc..0000000000 --- a/.github/workflows/ci.yml +++ /dev/null @@ -1,525 +0,0 @@ -name: GitHub CI - -on: - push: - branches: ['**'] - pull_request: - -jobs: - linux: - runs-on: ubuntu-latest - - env: - CC: ${{ matrix.compiler }} - TEST: test - SRCDIR: ./src - LEAK_CFLAGS: -DEXITFREE - LOG_DIR: ${{ github.workspace }}/logs - TERM: xterm - DISPLAY: ':99' - - strategy: - fail-fast: false - matrix: - features: [tiny, small, normal, huge] - compiler: [clang, gcc] - extra: [none] - include: - - features: tiny - compiler: clang - extra: nogui - - features: tiny - compiler: gcc - extra: nogui - - features: normal - shadow: ./src/shadow - - features: huge - coverage: true - - features: huge - compiler: gcc - coverage: true - extra: testgui - - features: huge - compiler: clang - extra: asan - - features: huge - compiler: gcc - coverage: true - extra: unittests - - features: normal - compiler: gcc - extra: vimtags - - steps: - - uses: actions/checkout@v2 - - - name: Install packages - env: - DEBIAN_FRONTEND: noninteractive - run: | - sudo apt-get install -y \ - autoconf \ - lcov \ - gettext \ - libcanberra-dev \ - libperl-dev \ - python-dev \ - python3-dev \ - liblua5.3-dev \ - lua5.3 \ - ruby-dev \ - tcl-dev \ - cscope \ - libgtk2.0-dev \ - desktop-file-utils \ - libtool-bin - if [[ ${CC} = clang ]]; then - wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add - - sudo add-apt-repository -y "deb http://apt.llvm.org/bionic/ llvm-toolchain-bionic-11 main" - sudo apt-get install -y clang-11 - sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-11 100 - sudo update-alternatives --set clang /usr/bin/clang-11 - sudo update-alternatives --install /usr/bin/llvm-cov llvm-cov /usr/bin/llvm-cov-11 100 - fi - - - name: Set up environment - run: | - mkdir -p "${LOG_DIR}" - mkdir -p "${HOME}/bin" - echo "${HOME}/bin" >> $GITHUB_PATH - ( - echo "LINUX_VERSION=$(uname -r)" - echo "NPROC=$(getconf _NPROCESSORS_ONLN)" - echo "SND_DUMMY_DIR=${HOME}/snd-dummy" - echo "TMPDIR=${{ runner.temp }}" - - case "${{ matrix.features }}" in - tiny|small) - echo "TEST=testtiny" - if ${{ contains(matrix.extra, 'nogui') }}; then - echo "CONFOPT=--disable-gui" - fi - ;; - normal) - ;; - huge) - echo "TEST=scripttests test_libvterm" - echo "CONFOPT=--enable-perlinterp --enable-pythoninterp --enable-python3interp --enable-rubyinterp --enable-luainterp --enable-tclinterp" - ;; - esac - - if ${{ matrix.coverage == true }}; then - echo "CFLAGS=--coverage -DUSE_GCOV_FLUSH" - echo "LDFLAGS=--coverage" - fi - if ${{ contains(matrix.extra, 'testgui') }}; then - echo "TEST=-C src testgui" - fi - if ${{ contains(matrix.extra, 'unittests') }}; then - echo "TEST=unittests" - fi - if ${{ contains(matrix.extra, 'asan') }}; then - echo "SANITIZER_CFLAGS=-g -O1 -DABORT_ON_INTERNAL_ERROR -DEXITFREE -fsanitize-recover=all -fsanitize=address -fsanitize=undefined -fno-omit-frame-pointer" - echo "ASAN_OPTIONS=print_stacktrace=1 log_path=${LOG_DIR}/asan" - echo "UBSAN_OPTIONS=print_stacktrace=1 log_path=${LOG_DIR}/ubsan" - echo "LSAN_OPTIONS=suppressions=${GITHUB_WORKSPACE}/src/testdir/lsan-suppress.txt" - fi - if ${{ contains(matrix.extra, 'vimtags') }}; then - echo "TEST=-C runtime/doc vimtags VIMEXE=../../${SRCDIR}/vim" - fi - ) >> $GITHUB_ENV - - - name: Set up system - run: | - if [[ ${CC} = clang ]]; then - # Use llvm-cov instead of gcov when compiler is clang. - ln -fs /usr/bin/llvm-cov ${HOME}/bin/gcov - fi - # Setup lua5.3 manually since its package doesn't provide alternative. - # https://bugs.launchpad.net/ubuntu/+source/lua5.3/+bug/1707212 - if [[ ${CONFOPT} =~ luainterp ]]; then - sudo update-alternatives --install /usr/bin/lua lua /usr/bin/lua5.3 10 - fi - sudo sysctl -w net.ipv6.conf.lo.disable_ipv6=0 - sudo usermod -a -G audio "${USER}" - sudo bash ci/setup-xvfb.sh - - - name: Cache snd-dummy - uses: actions/cache@v2 - with: - path: ${{ env.SND_DUMMY_DIR }} - key: linux-${{ env.LINUX_VERSION }}-snd-dummy - - - name: Set up snd-dummy - run: | - if [[ ! -e ${SND_DUMMY_DIR}/snd-dummy.ko ]]; then - bash ci/build-snd-dummy.sh - fi - cd "${SND_DUMMY_DIR}" - sudo insmod soundcore.ko - sudo insmod snd.ko - sudo insmod snd-pcm.ko - sudo insmod snd-dummy.ko - - - name: Check autoconf - if: contains(matrix.extra, 'unittests') - run: | - make -C src autoconf - - - name: Set up shadow dir - if: matrix.shadow - run: | - make -C src shadow - echo "SRCDIR=${{ matrix.shadow }}" >> $GITHUB_ENV - echo "SHADOWOPT=-C ${{ matrix.shadow }}" >> $GITHUB_ENV - - - name: Configure - run: | - ./configure --with-features=${{ matrix.features }} ${CONFOPT} --enable-fail-if-missing - # Append various warning flags to CFLAGS. - # BSD sed needs backup extension specified. - sed -i.bak -f ci/config.mk.sed ${SRCDIR}/auto/config.mk - sed -i.bak -f ci/config.mk.${CC}.sed ${SRCDIR}/auto/config.mk - - - name: Build - if: (!contains(matrix.extra, 'unittests')) - run: | - make ${SHADOWOPT} -j${NPROC} - - - name: Check version - if: (!contains(matrix.extra, 'unittests')) - run: | - "${SRCDIR}"/vim --version - "${SRCDIR}"/vim -u NONE -i NONE --not-a-term -esNX -V1 -S ci/if_ver-1.vim -c quit - "${SRCDIR}"/vim -u NONE -i NONE --not-a-term -esNX -V1 -S ci/if_ver-2.vim -c quit - - - name: Test - timeout-minutes: 20 - run: | - do_test() { sg audio "sg $(id -gn) '$*'"; } - do_test make ${SHADOWOPT} ${TEST} - - - name: Coveralls - if: matrix.coverage && success() && github.event_name != 'pull_request' - env: - COVERALLS_REPO_TOKEN: ${{ secrets.COVERALLS_REPO_TOKEN }} - COVERALLS_PARALLEL: true - TRAVIS_JOB_ID: ${{ github.run_id }} - run: | - sudo apt-get install -y python3-setuptools python3-wheel - # needed for https support for coveralls building cffi only works with gcc, not with clang - CC=gcc pip3 install --user cpp-coveralls pyopenssl ndg-httpsclient pyasn1 - ~/.local/bin/coveralls -b "${SRCDIR}" -x .xs -e "${SRCDIR}"/if_perl.c -e "${SRCDIR}"/xxd -e "${SRCDIR}"/libvterm --encodings utf-8 - - - name: Codecov - if: matrix.coverage && success() - uses: codecov/codecov-action@v1 - with: - flags: ${{ matrix.features }}-${{ matrix.compiler }}-${{ matrix.extra }} - fail_ci_if_error: true - working-directory: ${{ env.SRCDIR }} - - - name: ASan logs - if: contains(matrix.extra, 'asan') && !cancelled() - run: | - for f in $(grep -lR '#[[:digit:]]* *0x[[:digit:]a-fA-F]*' "${LOG_DIR}"); do - asan_symbolize-11 -l "$f" - false # in order to fail a job - done - - coveralls: - runs-on: ubuntu-latest - - needs: linux - if: always() && github.event_name != 'pull_request' - - steps: - - name: Parallel finished - env: - COVERALLS_REPO_TOKEN: ${{ secrets.COVERALLS_REPO_TOKEN }} - run: | - curl -k "https://coveralls.io/webhook?repo_token=${COVERALLS_REPO_TOKEN}" -d "payload[build_num]=${GITHUB_RUN_ID}&payload[status]=done" - - macos: - runs-on: macos-latest - - env: - CC: ${{ matrix.compiler }} - TEST: test - SRCDIR: ./src - LEAK_CFLAGS: -DEXITFREE - TERM: xterm - - strategy: - fail-fast: false - matrix: - features: [tiny, huge] - compiler: [clang, gcc] - - steps: - - uses: actions/checkout@v2 - - - name: Install packages - env: - HOMEBREW_NO_AUTO_UPDATE: 1 - run: | - brew install lua - echo "LUA_PREFIX=/usr/local" >> $GITHUB_ENV - - - name: Set up environment - run: | - ( - echo "NPROC=$(getconf _NPROCESSORS_ONLN)" - case "${{ matrix.features }}" in - tiny) - echo "TEST=testtiny" - echo "CONFOPT=--disable-gui" - ;; - huge) - echo "CONFOPT=--enable-perlinterp --enable-python3interp --enable-rubyinterp --enable-luainterp --enable-tclinterp" - ;; - esac - ) >> $GITHUB_ENV - - - name: Configure - run: | - ./configure --with-features=${{ matrix.features }} ${CONFOPT} --enable-fail-if-missing - # Append various warning flags to CFLAGS. - # BSD sed needs backup extension specified. - sed -i.bak -f ci/config.mk.sed ${SRCDIR}/auto/config.mk - # On macOS, the entity of gcc is clang. - sed -i.bak -f ci/config.mk.clang.sed ${SRCDIR}/auto/config.mk - - - name: Build - run: | - make -j${NPROC} - - - name: Check version - run: | - "${SRCDIR}"/vim --version - "${SRCDIR}"/vim -u NONE -i NONE --not-a-term -esNX -V1 -S ci/if_ver-1.vim -c quit - "${SRCDIR}"/vim -u NONE -i NONE --not-a-term -esNX -V1 -S ci/if_ver-2.vim -c quit - - - name: Test - timeout-minutes: 20 - run: | - make ${TEST} - - windows: - runs-on: windows-latest - - env: - VCVARSALL: C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvarsall.bat - # Interfaces - # Lua - LUA_VER: 54 - LUA_VER_DOT: '5.4' - LUA_RELEASE: 5.4.0 - LUA32_URL: https://downloads.sourceforge.net/luabinaries/lua-%LUA_RELEASE%_Win32_dllw6_lib.zip - LUA64_URL: https://downloads.sourceforge.net/luabinaries/lua-%LUA_RELEASE%_Win64_dllw6_lib.zip - LUA_DIR: D:\Lua - # Python 2 - PYTHON_VER: 27 - PYTHON_VER_DOT: '2.7' - # Python 3 - PYTHON3_VER: 38 - PYTHON3_VER_DOT: '3.8' - # Other dependencies - # winpty - WINPTY_URL: https://github.com/rprichard/winpty/releases/download/0.4.3/winpty-0.4.3-msvc2015.zip - # Escape sequences - COL_RED: "\x1b[31m" - COL_GREEN: "\x1b[32m" - COL_YELLOW: "\x1b[33m" - COL_RESET: "\x1b[m" - - strategy: - fail-fast: false - matrix: - toolchain: [msvc, mingw] - arch: [x64, x86] - features: [HUGE, NORMAL] - include: - - arch: x64 - vcarch: amd64 - warch: x64 - bits: 64 - msystem: MINGW64 - cygreg: registry - pyreg: "" - - arch: x86 - vcarch: x86 - warch: ia32 - bits: 32 - msystem: MINGW32 - cygreg: registry32 - pyreg: "-32" - exclude: - - toolchain: msvc - arch: x64 - features: NORMAL - - toolchain: mingw - arch: x86 - features: NORMAL - - steps: - - name: Initalize - id: init - shell: bash - run: | - git config --global core.autocrlf input - python_dir=$(cat "/proc/${{ matrix.cygreg }}/HKEY_LOCAL_MACHINE/SOFTWARE/Python/PythonCore/${PYTHON_VER_DOT}/InstallPath/@") - python3_dir=$(cat "/proc/${{ matrix.cygreg }}/HKEY_LOCAL_MACHINE/SOFTWARE/Python/PythonCore/${PYTHON3_VER_DOT}${{ matrix.pyreg }}/InstallPath/@") - echo "PYTHON_DIR=$python_dir" >> $GITHUB_ENV - echo "PYTHON3_DIR=$python3_dir" >> $GITHUB_ENV - - - uses: msys2/setup-msys2@v2 - if: matrix.toolchain == 'mingw' - with: - msystem: ${{ matrix.msystem }} - release: false - - - uses: actions/checkout@v2 - - - name: Create a list of download URLs - shell: cmd - run: | - type NUL > urls.txt - echo %LUA_RELEASE%>> urls.txt - echo %WINPTY_URL%>> urls.txt - - - name: Cache downloaded files - uses: actions/cache@v2 - with: - path: downloads - key: ${{ runner.os }}-${{ matrix.bits }}-${{ hashFiles('urls.txt') }} - - - name: Download dependencies - shell: cmd - run: | - path C:\Program Files\7-Zip;%path% - if not exist downloads mkdir downloads - - echo %COL_GREEN%Download Lua%COL_RESET% - call :downloadfile %LUA${{ matrix.bits }}_URL% downloads\lua.zip - 7z x downloads\lua.zip -o%LUA_DIR% > nul || exit 1 - - echo %COL_GREEN%Download winpty%COL_RESET% - call :downloadfile %WINPTY_URL% downloads\winpty.zip - 7z x -y downloads\winpty.zip -oD:\winpty > nul || exit 1 - copy /Y D:\winpty\${{ matrix.warch }}\bin\winpty.dll src\winpty${{ matrix.bits }}.dll - copy /Y D:\winpty\${{ matrix.warch }}\bin\winpty-agent.exe src\ - - goto :eof - - :downloadfile - :: call :downloadfile - if not exist %2 ( - curl -f -L %1 -o %2 - ) - if ERRORLEVEL 1 ( - rem Retry once. - curl -f -L %1 -o %2 || exit 1 - ) - goto :eof - - - name: Copy src directory to src2 - shell: cmd - run: | - xcopy src src2\ /E > nul - - - name: Build (MSVC) - if: matrix.toolchain == 'msvc' - shell: cmd - run: | - call "%VCVARSALL%" ${{ matrix.vcarch }} - cd src - :: Filter out the progress bar from the build log - sed -e "s/@<<$/@<< | sed -e 's#.*\\\\r.*##'/" Make_mvc.mak > Make_mvc2.mak - if "${{ matrix.features }}"=="HUGE" ( - nmake -nologo -f Make_mvc2.mak ^ - FEATURES=${{ matrix.features }} ^ - GUI=yes IME=yes ICONV=yes VIMDLL=yes ^ - DYNAMIC_LUA=yes LUA=%LUA_DIR% ^ - DYNAMIC_PYTHON=yes PYTHON=%PYTHON_DIR% ^ - DYNAMIC_PYTHON3=yes PYTHON3=%PYTHON3_DIR% - ) else ( - nmake -nologo -f Make_mvc2.mak ^ - FEATURES=${{ matrix.features }} ^ - GUI=yes IME=yes ICONV=yes VIMDLL=yes - ) - if not exist vim${{ matrix.bits }}.dll ( - echo %COL_RED%Build failure.%COL_RESET% - exit 1 - ) - - - name: Build (MinGW) - if: matrix.toolchain == 'mingw' - shell: msys2 {0} - run: | - cd src - if [ "${{ matrix.features }}" = "HUGE" ]; then - mingw32-make -f Make_ming.mak -j2 \ - FEATURES=${{ matrix.features }} \ - GUI=yes IME=yes ICONV=yes VIMDLL=yes \ - DYNAMIC_LUA=yes LUA=${LUA_DIR} \ - DYNAMIC_PYTHON=yes PYTHON=${PYTHON_DIR} \ - DYNAMIC_PYTHON3=yes PYTHON3=${PYTHON3_DIR} \ - STATIC_STDCPLUS=yes - else - mingw32-make -f Make_ming.mak -j2 \ - FEATURES=${{ matrix.features }} \ - GUI=yes IME=yes ICONV=yes VIMDLL=yes \ - STATIC_STDCPLUS=yes - fi - - #- name: Prepare Artifact - # shell: cmd - # run: | - # mkdir artifacts - # copy src\*vim.exe artifacts - # copy src\vim*.dll artifacts - # - #- name: Upload Artifact - # uses: actions/upload-artifact@v1 - # with: - # name: vim${{ matrix.bits }}-${{ matrix.toolchain }} - # path: ./artifacts - - - name: Test - shell: cmd - timeout-minutes: 20 - run: | - PATH %LUA_DIR%;C:\msys64\${{ matrix.msystem }}\bin;%PATH%;%PYTHON3_DIR% - call "%VCVARSALL%" ${{ matrix.vcarch }} - cd src - echo. - echo %COL_GREEN%vim version:%COL_RESET% - .\vim --version || exit 1 - - echo %COL_GREEN%Start testing vim in background.%COL_RESET% - start cmd /c "cd ..\src2\testdir & nmake -nologo -f Make_dos.mak VIMPROG=..\..\src\vim > nul & echo done>done.txt" - - echo %COL_GREEN%Test gvim:%COL_RESET% - cd testdir - nmake -nologo -f Make_dos.mak VIMPROG=..\gvim || exit 1 - cd .. - - echo %COL_GREEN%Wait for vim tests to finish.%COL_RESET% - cd ..\src2\testdir - :: Wait about 10 minutes. - for /L %%i in (1,1,60) do ( - if exist done.txt goto exitloop - timeout 10 > NUL 2>&1 - if ERRORLEVEL 1 ping -n 11 localhost > NUL - ) - set timeout=1 - :exitloop - - echo %COL_GREEN%Test results of vim:%COL_RESET% - if exist messages type messages - nmake -nologo -f Make_dos.mak report VIMPROG=..\..\src\vim || exit 1 - if "%timeout%"=="1" ( - echo %COL_RED%Timed out.%COL_RESET% - exit 1 - ) diff --git a/src/Makefile b/src/Makefile index 658f8b2e96..108474e8ce 100644 --- a/src/Makefile +++ b/src/Makefile @@ -1400,7 +1400,7 @@ MACVIMGUI_OBJ = objects/gui.o objects/gui_beval.o \ MACVIMGUI_DEFS = -DFEAT_GUI_MACVIM -Wall -Wno-unknown-pragmas -pipe MACVIMGUI_IPATH = MACVIMGUI_LIBS_DIR = -MACVIMGUI_LIBS1 = -framework Cocoa -framework Carbon +MACVIMGUI_LIBS1 = MACVIMGUI_LIBS2 = MACVIMGUI_INSTALL = install_normal MACVIMGUI_TARGETS =