Building on MinGW-64 and Cygwin/64

Robin Mills's Avatar

Robin Mills

12 Dec, 2020 01:30 PM

Folks

I am the maintainer of Exiv2 and we perform our Visual Studio builds on Appveyor. This was configured by a team member who is currently not available. I'd like to build on MinGW and Cygwin and can't get past the most basic step: what is the name of the image?

Any help will be greatly appreciated.

init:
  - echo %PYTHON%

environment:
  PYTHON: "C:/Python37-x64"

  matrix:
    - APPVEYOR_BUILD_WORKER_IMAGE: MinGW-w64
      INTEGRATION_TESTS: 1
      ARCHITECTURE: x86_64
      UNIT_TESTS: 1
      WEBREADY: False
      WARNINGS_AS_ERRORS: ON

shallow_clone: true

install:
    - echo %APPVEYOR_BUILD_FOLDER%
    - python3 -m pip install --upgrade pip
    - pip3.exe install lxml
    - for i in base-devel git coreutils dos2unix tar diffutils make                    \
         mingw-w64-x86_64-toolchain mingw-w64-x86_64-gcc      mingw-w64-x86_64-gdb     \
         mingw-w64-x86_64-cmake     mingw-w64-x86_64-gettext  mingw-w64-x86_64-python3 \
         mingw-w64-x86_64-libexpat  mingw-w64-x86_64-libiconv mingw-w64-x86_64-zlib    \
         mingw-w64-x86_64-gtest ; do (echo y | pacman -S $i) ; done
    - cd %APPVEYOR_BUILD_FOLDER%


build_script:
    - cmd: mkdir -p build
    - cmd: cd       build
    - cmd: cmake .. -G "Unix Makefiles" -DEXIV2_TEAM_WARNINGS_AS_ERRORS=%WARNINGS_AS_ERRORS% -DCMAKE_BUILD_TYPE=Release -DEXIV2_ENABLE_NLS=OFF -DEXIV2_ENABLE_PNG=ON -DEXIV2_ENABLE_WEBREADY=%WEBREADY% -DEXIV2_BUILD_UNIT_TESTS=%UNIT_TESTS%
    - cmd: cmake --build . --config Release
    - cmd: cmake --build . --config Release --target tests
  1. 1 Posted by Robin Mills on 12 Dec, 2020 05:06 PM

    Robin Mills's Avatar

    Solved.

    init:
      - echo %PYTHON%
    
    environment:
      PYTHON: "C:/Python37-x64"
    
      matrix:
        - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
          INTEGRATION_TESTS: 1
          ARCHITECTURE: x86_64
          UNIT_TESTS: 1
          WEBREADY: False
          WARNINGS_AS_ERRORS: ON
    
    shallow_clone: true
    
    install:
        - echo %APPVEYOR_BUILD_FOLDER%
        - set "PATH=c:\msys64\mingw64\bin;c:\msys64\usr\bin;c:\msys64\usr\local\bin;"
        - C:\msys64\usr\bin\bash -c "python -m pip install --upgrade pip;pip3.exe install lxml ; for i in base-devel git coreutils dos2unix tar diffutils make  \
             mingw-w64-x86_64-toolchain mingw-w64-x86_64-gcc      mingw-w64-x86_64-gdb     \
             mingw-w64-x86_64-cmake     mingw-w64-x86_64-gettext  mingw-w64-x86_64-python3 \
             mingw-w64-x86_64-libexpat  mingw-w64-x86_64-libiconv mingw-w64-x86_64-zlib    \
             mingw-w64-x86_64-gtest ; do (echo y | pacman -S $i) ; done
        - cd %APPVEYOR_BUILD_FOLDER%
    
    
    build_script:
        - cmd: C:\msys64\usr\bin\bash -c "pwd; mkdir -p build; cd build ; cmake .. -G 'Unix Makefiles' -DCMAKE_CXX_STANDARD=11 -DCMAKE_CXX_FLAGS=-Wno-deprecated ; make ; make python_tests;"
    
  2. 2 Posted by Robin Mills on 12 Dec, 2020 06:15 PM

    Robin Mills's Avatar

    And now, I'll solve this puzzle in a similar way on Cygwin/64. There's no pacman on Cygwin/64 so will investigate this: https://stackoverflow.com/questions/9260014/how-do-i-install-cygwin....

  3. 3 Posted by Robin Mills on 13 Dec, 2020 01:24 AM

    Robin Mills's Avatar

    I have this "sort of" working. It's running the build on MinGW/msys2 and then on build on Cygwin64.

    I really want it to perform two different builds. How can I specify two build_script: objects?

    init:
      - echo %PYTHON%
    
    environment:
      PYTHON: "C:/Python37-x64"
    
      matrix:
        - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
          INTEGRATION_TESTS: 1
          ARCHITECTURE: x86_64
          UNIT_TESTS: 1
          WEBREADY: False
          WARNINGS_AS_ERRORS: ON
    
    shallow_clone: true
    
    install:
        - echo %APPVEYOR_BUILD_FOLDER%
        - set "PATH=c:\msys64\mingw64\bin;c:\msys64\usr\bin;c:\msys64\usr\local\bin;"
        - C:\msys64\usr\bin\bash -c "python -m pip install --upgrade pip;pip3.exe install lxml ; for i in base-devel git coreutils dos2unix tar diffutils make  \
             mingw-w64-x86_64-toolchain mingw-w64-x86_64-gcc      mingw-w64-x86_64-gdb     \
             mingw-w64-x86_64-cmake     mingw-w64-x86_64-gettext  mingw-w64-x86_64-python3 \
             mingw-w64-x86_64-libexpat  mingw-w64-x86_64-libiconv mingw-w64-x86_64-zlib    \
             mingw-w64-x86_64-gtest ; do (echo y | pacman -S $i) ; done
        - cd %APPVEYOR_BUILD_FOLDER%
        - set "PATH=c:\cygwin64\usr\local\bin;c:\cygwin64\bin;c:\cygwin64\usr\bin;c:\cygwin64\usr\sbin;"
        - C:\cygwin64\bin\bash -c "wget https://raw.githubusercontent.com/transcode-open/apt-cyg/master/apt-cyg ; chmod +x apt-cyg; mv apt-cyg /usr/local/bin"
        - C:\cygwin64\bin\bash -c "apt-cyg install cmake zlib-devel libexpat-devel libxml2-devel libxslt-devel python38 python38-pip python38-libxml2"
        - C:\cygwin64\bin\bash -c "/usr/bin/python3.8.exe -m pip install --upgrade pip"
    
    build_script:
        - cmd: set   CMD=mkdir -p build
        - cmd: set   CMD=%CMD%; cd build    
        - cmd: set   CMD=%CMD%; cmake .. -G 'Unix Makefiles' -DCMAKE_CXX_STANDARD=98 -DCMAKE_CXX_FLAGS=-Wno-deprecated
        - cmd: set   CMD=%CMD%; cmake --build . --config Release
        - cmd: rem echo %CMD%
        - cd %APPVEYOR_BUILD_FOLDER%
        - cmd: C:\msys64\usr\bin\bash -c "%CMD%"
        - cmd: set   CMD=which python3 python
        - cmd: set   CMD=%CMD%; python --version
        - cmd: set   CMD=%CMD%; build/bin/exiv2 --verbose --version; pwd ; ls -l
        - cmd: set   CMD=%CMD%; cd build ; cmake --build . --config Release --target python_tests
        - cmd: echo %CMD%
        - cd %APPVEYOR_BUILD_FOLDER%
        - cmd: C:\msys64\usr\bin\bash -c "%CMD%"
        - cmd: set "PATH=c:\cygwin64\usr\local\bin;c:\cygwin64\bin;c:\cygwin64\usr\bin;c:\cygwin64\usr\sbin;"
        - cmd: set  CMD=rm -rf build
        - cmd: set  CMD=%CMD%; mkdir -p build
        - cmd: set  CMD=%CMD%; cd build
        - cmd: set  CMD=%CMD%;cmake .. -DCMAKE_CXX_STANDARD=98 -DCMAKE_CXX_FLAGS=-Wno-deprecated
        - cmd: set  CMD=%CMD%; make
        - cmd: set  CMD=%CMD%; make python_tests
        - cmd: echo %CMD%
        - cd %APPVEYOR_BUILD_FOLDER%
        - cmd: C:\cygwin64\bin\bash -c "%CMD%"
    
  4. 4 Posted by Robin Mills on 13 Dec, 2020 02:42 AM

    Robin Mills's Avatar

    I've solved that. It's rather ugly. It works.

    init:
      - echo %PYTHON%
    
    environment:
      PYTHON: "C:/Python37-x64"
    
      matrix:
        - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
          BUILD: MINGW64
          INTEGRATION_TESTS: 1
          ARCHITECTURE: x86_64
          UNIT_TESTS: 1
          WEBREADY: False
          WARNINGS_AS_ERRORS: ON
        - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
          BUILD: CYGWIN64
          INTEGRATION_TESTS: 1
          ARCHITECTURE: x86_64
          UNIT_TESTS: 1
          WEBREADY: False
          WARNINGS_AS_ERRORS: ON
    
    shallow_clone: true
    
    install:
        - echo %APPVEYOR_BUILD_FOLDER%
        - if "%BUILD%"=="MINGW64" set "PATH=c:\msys64\mingw64\bin;c:\msys64\usr\bin;c:\msys64\usr\local\bin;"
        - if "%BUILD%"=="MINGW64" C:\msys64\usr\bin\bash -c "python -m pip install --upgrade pip;pip3.exe install lxml ; for i in base-devel git coreutils dos2unix tar diffutils make  \
             mingw-w64-x86_64-toolchain mingw-w64-x86_64-gcc      mingw-w64-x86_64-gdb     \
             mingw-w64-x86_64-cmake     mingw-w64-x86_64-gettext  mingw-w64-x86_64-python3 \
             mingw-w64-x86_64-libexpat  mingw-w64-x86_64-libiconv mingw-w64-x86_64-zlib    \
             mingw-w64-x86_64-gtest ; do (echo y | pacman -S $i) ; done
        - cd %APPVEYOR_BUILD_FOLDER%
        - if "%BUILD%"=="CYGWIN64" set "PATH=c:\cygwin64\usr\local\bin;c:\cygwin64\bin;c:\cygwin64\usr\bin;c:\cygwin64\usr\sbin;"
        - if "%BUILD%"=="CYGWIN64" C:\cygwin64\bin\bash -c "wget https://raw.githubusercontent.com/transcode-open/apt-cyg/master/apt-cyg ; chmod +x apt-cyg; mv apt-cyg /usr/local/bin"
        - if "%BUILD%"=="CYGWIN64" C:\cygwin64\bin\bash -c "apt-cyg install cmake zlib-devel libexpat-devel libxml2-devel libxslt-devel python38 python38-pip python38-libxml2"
        - if "%BUILD%"=="CYGWIN64" C:\cygwin64\bin\bash -c "/usr/bin/python3.8.exe -m pip install --upgrade pip"
    
    build_script:
        - cmd: set   CMD=mkdir -p build
        - cmd: set   CMD=%CMD%; cd build    
        - cmd: set   CMD=%CMD%; cmake .. -G 'Unix Makefiles' -DCMAKE_CXX_STANDARD=98 -DCMAKE_CXX_FLAGS=-Wno-deprecated
        - cmd: set   CMD=%CMD%; cmake --build . --config Release
        - cmd: rem echo %CMD%
        - cd %APPVEYOR_BUILD_FOLDER%
        - cmd: if "%BUILD%"=="MINGW64" C:\msys64\usr\bin\bash -c "%CMD%"
        - cmd: set   CMD=which python3 python
        - cmd: set   CMD=%CMD%; python --version
        - cmd: set   CMD=%CMD%; build/bin/exiv2 --verbose --version; pwd ; ls -l
        - cmd: set   CMD=%CMD%; cd build ; cmake --build . --config Release --target python_tests
        - cmd: echo %CMD%
        - cd %APPVEYOR_BUILD_FOLDER%
        - cmd: if "%BUILD%"=="MINGW64" C:\msys64\usr\bin\bash -c "%CMD%"
        - cmd: set "PATH=c:\cygwin64\usr\local\bin;c:\cygwin64\bin;c:\cygwin64\usr\bin;c:\cygwin64\usr\sbin;"
        - cmd: set  CMD=rm -rf build
        - cmd: set  CMD=%CMD%; mkdir -p build
        - cmd: set  CMD=%CMD%; cd build
        - cmd: set  CMD=%CMD%;cmake .. -DCMAKE_CXX_STANDARD=98 -DCMAKE_CXX_FLAGS=-Wno-deprecated
        - cmd: set  CMD=%CMD%; make
        - cmd: set  CMD=%CMD%; make python_tests
        - cmd: echo %CMD%
        - cd %APPVEYOR_BUILD_FOLDER%
        - cmd: if "%BUILD%"=="CYGWIN64" C:\cygwin64\bin\bash -c "%CMD%"
    

    Case closed. If anybody would like to suggest a better approach, I'll be very happy to hear your suggestions.

Reply to this discussion

Internal reply

Formatting help / Preview (switch to plain text) No formatting (switch to Markdown)

Attaching KB article:

»

Attached Files

You can attach files up to 10MB

If you don't have an account yet, we need to confirm you're human and not a machine trying to post spam.

Keyboard shortcuts

Generic

? Show this help
ESC Blurs the current field

Comment Form

r Focus the comment reply box
^ + ↩ Submit the comment

You can use Command ⌘ instead of Control ^ on Mac