āĻā§āĻ°ā§āĻ¯āĻžāĻāĻŋāĻ¸ āĻ¸āĻŋāĻāĻ āĻšāĻ˛ āĻ¸āĻĢā§āĻāĻāĻ¯āĻŧā§āĻ¯āĻžāĻ° āĻ¤ā§āĻ°āĻŋ āĻāĻŦāĻ āĻĒāĻ°ā§āĻā§āĻˇāĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻŦāĻŋāĻ¤āĻ°āĻŖ āĻāĻ°āĻž āĻāĻ¯āĻŧā§āĻŦ āĻĒāĻ°āĻŋāĻˇā§āĻŦāĻž āĻ¯āĻž āĻāĻŋāĻāĻšāĻžāĻŦāĻā§ āĻ¸ā§āĻ°ā§āĻ¸ āĻā§āĻĄ āĻšā§āĻ¸ā§āĻāĻŋāĻ āĻšāĻŋāĻ¸āĻžāĻŦā§ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§āĨ¤ āĻāĻĒāĻ°ā§āĻ° āĻ
āĻĒāĻžāĻ°ā§āĻāĻŋāĻ āĻĒāĻ°āĻŋāĻ¸ā§āĻĨāĻŋāĻ¤āĻŋāĻā§āĻ˛āĻŋ āĻāĻžāĻĄāĻŧāĻžāĻ, āĻāĻĒāĻ¨āĻŋ āĻŦāĻŋāĻ¸ā§āĻ¤ā§āĻ¤ āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ°ā§āĻļāĻ¨ āĻŦāĻŋāĻāĻ˛ā§āĻĒāĻā§āĻ˛āĻŋāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻĒāĻ¨āĻžāĻ° āĻ¨āĻŋāĻāĻ¸ā§āĻŦ āĻ§āĻ¨ā§āĻ¯āĻŦāĻžāĻĻ āĻ¯ā§āĻ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨āĨ¤ āĻāĻ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ā§ āĻāĻŽāĻ°āĻž PPSSPP āĻā§āĻĄ āĻāĻĻāĻžāĻšāĻ°āĻŖ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ PVS-Studio āĻāĻ° āĻ¸āĻžāĻĨā§ āĻāĻžāĻ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ Travis CI āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ° āĻāĻ°āĻŦāĨ¤
āĻā§āĻŽāĻŋāĻāĻž
āĻā§āĻ°ā§āĻ¯āĻžāĻāĻŋāĻ¸ āĻ¸āĻŋāĻāĻ āĻ¸ā§āĻ āĻāĻĒ āĻāĻ°āĻž āĻšāĻā§āĻā§
āĻāĻŽāĻžāĻĻā§āĻ° GitHub-āĻ āĻāĻāĻāĻŋ āĻ¸āĻāĻā§āĻ°āĻšāĻ¸ā§āĻĨāĻ˛ā§āĻ° āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ āĻšāĻŦā§, āĻ¯ā§āĻāĻžāĻ¨ā§ āĻāĻŽāĻžāĻĻā§āĻ° āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ā§āĻ¯āĻŧ āĻĒā§āĻ°āĻāĻ˛ā§āĻĒāĻāĻŋ āĻ
āĻŦāĻ¸ā§āĻĨāĻŋāĻ¤, āĻ¸ā§āĻāĻ¸āĻžāĻĨā§ āĻĒāĻŋāĻāĻŋāĻāĻ¸-āĻ¸ā§āĻā§āĻĄāĻŋāĻāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻā§ (āĻāĻĒāĻ¨āĻŋ āĻĒā§āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨)
āĻāĻ° āĻ¸āĻžāĻāĻā§ āĻ¯āĻžāĻ¨
āĻĒāĻ°ā§āĻā§āĻˇāĻžāĻ° āĻāĻ¨ā§āĻ¯, āĻāĻŽāĻŋ PPSSPP āĻāĻžāĻāĻāĻž āĻĻāĻŋāĻ¯āĻŧā§āĻāĻŋāĨ¤
āĻāĻŽāĻ°āĻž āĻ¯ā§ āĻ¸āĻāĻā§āĻ°āĻšāĻ¸ā§āĻĨāĻ˛āĻāĻŋ āĻ¸āĻāĻā§āĻ°āĻš āĻāĻ°āĻ¤ā§ āĻāĻžāĻ āĻ¤āĻž āĻ¸āĻā§āĻ°āĻŋāĻ¯āĻŧ āĻāĻ°āĻŋ:
āĻāĻ āĻŽā§āĻšā§āĻ°ā§āĻ¤ā§, āĻā§āĻ°āĻžāĻāĻŋāĻ¸ āĻ¸āĻŋāĻāĻ āĻāĻŽāĻžāĻĻā§āĻ° āĻĒā§āĻ°āĻāĻ˛ā§āĻĒ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§ āĻ¨āĻž āĻāĻžāĻ°āĻŖ āĻŦāĻŋāĻ˛ā§āĻĄāĻŋāĻāĻ¯āĻŧā§āĻ° āĻāĻ¨ā§āĻ¯ āĻā§āĻ¨āĻ āĻ¨āĻŋāĻ°ā§āĻĻā§āĻļ āĻ¨ā§āĻāĨ¤ āĻ¤āĻžāĻ āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ°ā§āĻļāĻ¨ā§āĻ° āĻ¸āĻŽāĻ¯āĻŧāĨ¤
āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻŖā§āĻ° āĻ¸āĻŽāĻ¯āĻŧ, āĻāĻŋāĻā§ āĻā§āĻ°āĻŋāĻ¯āĻŧā§āĻŦāĻ˛ āĻāĻŽāĻžāĻĻā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻĒāĻ¯ā§āĻā§ āĻšāĻŦā§, āĻāĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§āĻĒ, āĻĒāĻŋāĻāĻŋāĻāĻ¸-āĻ¸ā§āĻā§āĻĄāĻŋāĻāĻ° āĻā§, āĻ¯āĻž āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ°ā§āĻļāĻ¨ āĻĢāĻžāĻāĻ˛ā§ āĻāĻ˛ā§āĻ˛ā§āĻ āĻāĻ°āĻž āĻ āĻŦāĻžāĻā§āĻāĻŋāĻ¤ āĻšāĻŦā§āĨ¤ āĻ¤āĻžāĻ āĻāĻ¸ā§āĻ¨ āĻā§āĻ°ā§āĻ¯āĻžāĻāĻŋāĻ¸ āĻ¸āĻŋāĻāĻ-āĻ¤ā§ āĻŦāĻŋāĻ˛ā§āĻĄ āĻ¸ā§āĻāĻŋāĻāĻ¸ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻĒāĻ°āĻŋāĻŦā§āĻļā§āĻ° āĻā§āĻ°āĻŋāĻ¯āĻŧā§āĻŦāĻ˛ āĻ¯ā§āĻ āĻāĻ°āĻŋ:
āĻāĻŽāĻ°āĻž āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ āĻšāĻŦā§:
- PVS_USERNAME - āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§āĻ° āĻ¨āĻžāĻŽ
- PVS_KEY - āĻā§
- MAIL_USER - āĻāĻŽā§āĻ˛ āĻ¯āĻž āĻ°āĻŋāĻĒā§āĻ°ā§āĻ āĻĒāĻžāĻ āĻžāĻ¤ā§ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻž āĻšāĻŦā§
- MAIL_PASSWORD - āĻāĻŽā§āĻ˛ āĻĒāĻžāĻ¸āĻāĻ¯āĻŧāĻžāĻ°ā§āĻĄ
āĻļā§āĻˇ āĻĻā§āĻāĻŋ āĻāĻā§āĻāĻŋāĻāĨ¤ āĻāĻā§āĻ˛ā§ āĻŽā§āĻāĻ˛ā§ āĻĢāĻ˛āĻžāĻĢāĻ˛ āĻĒāĻžāĻ āĻžāĻ¤ā§ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻž āĻšāĻŦā§āĨ¤ āĻāĻĒāĻ¨āĻŋ āĻ¯āĻĻāĻŋ āĻ āĻ¨ā§āĻ¯āĻāĻžāĻŦā§ āĻĒā§āĻ°āĻ¤āĻŋāĻŦā§āĻĻāĻ¨āĻāĻŋ āĻŦāĻŋāĻ¤āĻ°āĻŖ āĻāĻ°āĻ¤ā§ āĻāĻžāĻ¨ āĻ¤āĻŦā§ āĻāĻĒāĻ¨āĻžāĻā§ āĻ¸ā§āĻā§āĻ˛āĻŋ āĻ¨āĻŋāĻ°ā§āĻĻā§āĻļ āĻāĻ°āĻžāĻ° āĻĻāĻ°āĻāĻžāĻ° āĻ¨ā§āĻāĨ¤
āĻ¸ā§āĻ¤āĻ°āĻžāĻ, āĻāĻŽāĻ°āĻž āĻāĻŽāĻžāĻĻā§āĻ° āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ā§āĻ¯āĻŧ āĻĒāĻ°āĻŋāĻŦā§āĻļ āĻā§āĻ°āĻŋāĻ¯āĻŧā§āĻŦāĻ˛ āĻ¯ā§āĻ āĻāĻ°ā§āĻāĻŋ:
āĻāĻāĻ¨ āĻāĻāĻāĻŋ āĻĢāĻžāĻāĻ˛ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻž āĻ¯āĻžāĻ .travis.yml āĻāĻŦāĻ āĻĒā§āĻ°āĻāĻ˛ā§āĻĒā§āĻ° āĻŽā§āĻ˛ā§ āĻāĻāĻŋ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻāĻ°ā§āĻ¨āĨ¤ PPSSPP āĻāĻ° āĻāĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§āĻ Travis CI-āĻāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ°ā§āĻļāĻ¨ āĻĢāĻžāĻāĻ˛ āĻāĻŋāĻ˛, āĻ¤āĻŦā§, āĻāĻāĻŋ āĻā§āĻŦ āĻŦāĻĄāĻŧ āĻāĻŦāĻ āĻāĻĻāĻžāĻšāĻ°āĻŖā§āĻ° āĻāĻ¨ā§āĻ¯ āĻ¸āĻŽā§āĻĒā§āĻ°ā§āĻŖ āĻ
āĻ¨ā§āĻĒāĻ¯ā§āĻā§āĻ¤ āĻāĻŋāĻ˛, āĻ¤āĻžāĻ āĻāĻŽāĻžāĻĻā§āĻ° āĻāĻāĻŋāĻā§ āĻŦā§āĻ¯āĻžāĻĒāĻāĻāĻžāĻŦā§ āĻ¸āĻ°āĻ˛ āĻāĻ°āĻ¤ā§ āĻšāĻ¯āĻŧā§āĻāĻŋāĻ˛ āĻāĻŦāĻ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻŽā§āĻ˛āĻŋāĻ āĻāĻĒāĻžāĻĻāĻžāĻ¨āĻā§āĻ˛āĻŋ āĻā§āĻĄāĻŧā§ āĻĻāĻŋāĻ¤ā§ āĻšāĻ¯āĻŧā§āĻāĻŋāĻ˛āĨ¤
āĻĒā§āĻ°āĻĨāĻŽā§, āĻāĻ¸ā§āĻ¨ āĻāĻžāĻˇāĻž āĻ¨āĻŋāĻ°ā§āĻĻā§āĻļ āĻāĻ°āĻŋ, āĻāĻŦā§āĻ¨ā§āĻā§ āĻ˛āĻŋāĻ¨āĻžāĻā§āĻ¸ā§āĻ° āĻ¸āĻāĻ¸ā§āĻāĻ°āĻŖ āĻ¯āĻž āĻāĻŽāĻ°āĻž āĻāĻžāĻ°ā§āĻā§āĻ¯āĻŧāĻžāĻ˛ āĻŽā§āĻļāĻŋāĻ¨ā§ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻ¤ā§ āĻāĻžāĻ āĻāĻŦāĻ āĻŦāĻŋāĻ˛ā§āĻĄā§āĻ° āĻāĻ¨ā§āĻ¯ āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ā§āĻ¯āĻŧ āĻĒā§āĻ¯āĻžāĻā§āĻāĻā§āĻ˛āĻŋ:
language: cpp
dist: xenial
addons:
apt:
update: true
packages:
- ant
- aria2
- build-essential
- cmake
- libgl1-mesa-dev
- libglu1-mesa-dev
- libsdl2-dev
- pv
- sendemail
- software-properties-common
sources:
- sourceline: 'ppa:ubuntu-toolchain-r/test'
- sourceline: 'ppa:ubuntu-sdk-team/ppa'
āĻ¤āĻžāĻ˛āĻŋāĻāĻžāĻā§āĻā§āĻ¤ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻĒā§āĻ¯āĻžāĻā§āĻ PPSSPP-āĻāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻā§āĻāĻŋāĻ¯āĻŧāĻžāĻāĻžāĻŦā§ āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ā§ˇ
āĻāĻāĻ¨ āĻāĻŽāĻ°āĻž āĻ¸āĻŽāĻžāĻŦā§āĻļ āĻŽā§āĻ¯āĻžāĻā§āĻ°āĻŋāĻā§āĻ¸ āĻ¨āĻŋāĻ°ā§āĻĻā§āĻļ āĻāĻ°āĻŋ:
matrix:
include:
- os: linux
compiler: "gcc"
env: PPSSPP_BUILD_TYPE=Linux PVS_ANALYZE=Yes
- os: linux
compiler: "clang"
env: PPSSPP_BUILD_TYPE=Linux
āĻŦāĻŋāĻāĻžāĻ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§ āĻāĻāĻā§ āĻŦā§āĻļāĻŋ āĻāĻ°āĻžāĻ¯āĻŧā§. āĻā§āĻ°ā§āĻ¯āĻžāĻāĻŋāĻ¸ āĻ¸āĻŋāĻāĻ-āĻ¤ā§, āĻŦāĻŋāĻ˛ā§āĻĄ āĻŦāĻŋāĻāĻ˛ā§āĻĒāĻā§āĻ˛āĻŋ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻžāĻ° āĻĻā§āĻāĻŋ āĻāĻĒāĻžāĻ¯āĻŧ āĻ°āĻ¯āĻŧā§āĻā§: āĻĒā§āĻ°āĻĨāĻŽāĻāĻŋ āĻšāĻ˛ āĻāĻŽā§āĻĒāĻžāĻāĻ˛āĻžāĻ°, āĻ
āĻĒāĻžāĻ°ā§āĻāĻŋāĻ āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽā§āĻ° āĻ§āĻ°āĻ¨, āĻĒāĻ°āĻŋāĻŦā§āĻļā§āĻ° āĻā§āĻ°āĻŋāĻ¯āĻŧā§āĻŦāĻ˛ āĻāĻ¤ā§āĻ¯āĻžāĻĻāĻŋāĻ° āĻāĻāĻāĻŋ āĻ¤āĻžāĻ˛āĻŋāĻāĻž āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻāĻ°āĻž, āĻ¤āĻžāĻ°āĻĒāĻ°ā§ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻ¸āĻŽā§āĻāĻžāĻŦā§āĻ¯ āĻ¸āĻāĻŽāĻŋāĻļā§āĻ°āĻŖā§āĻ° āĻāĻāĻāĻŋ āĻŽā§āĻ¯āĻžāĻā§āĻ°āĻŋāĻā§āĻ¸ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻž āĻšāĻ¯āĻŧ; āĻĻā§āĻŦāĻŋāĻ¤ā§āĻ¯āĻŧāĻāĻŋ āĻŽā§āĻ¯āĻžāĻā§āĻ°āĻŋāĻā§āĻ¸ā§āĻ° āĻāĻāĻāĻŋ āĻ¸ā§āĻ¸ā§āĻĒāĻˇā§āĻ āĻāĻā§āĻāĻŋāĻ¤āĨ¤ āĻ
āĻŦāĻļā§āĻ¯āĻ, āĻāĻĒāĻ¨āĻŋ āĻāĻ āĻĻā§āĻāĻŋ āĻĒāĻ¨ā§āĻĨāĻž āĻāĻāĻ¤ā§āĻ°āĻŋāĻ¤ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨ āĻāĻŦāĻ āĻāĻāĻāĻŋ āĻ
āĻ¨āĻ¨ā§āĻ¯ āĻā§āĻ¸ āĻ¯ā§āĻā§āĻ¤ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨, āĻŦāĻž āĻŦāĻŋāĻĒāĻ°ā§āĻ¤āĻāĻžāĻŦā§, āĻŦāĻŋāĻāĻžāĻāĻāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻāĻāĻŋ āĻŦāĻžāĻĻ āĻĻāĻŋāĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨ āĻŦāĻ°ā§āĻāĻ¨ āĻāĻ°āĻž. āĻāĻĒāĻ¨āĻŋ āĻāĻ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§ āĻāĻ°āĻ āĻĒāĻĄāĻŧāĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨
āĻ¯āĻž āĻ āĻŦāĻļāĻŋāĻˇā§āĻ āĻĨāĻžāĻā§ āĻ¤āĻž āĻšāĻ˛ āĻĒā§āĻ°āĻāĻ˛ā§āĻĒ-āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻ¸āĻŽāĻžāĻŦā§āĻļ āĻ¨āĻŋāĻ°ā§āĻĻā§āĻļāĻžāĻŦāĻ˛ā§ āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻāĻ°āĻž:
before_install:
- travis_retry bash .travis.sh travis_before_install
install:
- travis_retry bash .travis.sh travis_install
script:
- bash .travis.sh travis_script
after_success:
- bash .travis.sh travis_after_success
āĻā§āĻ°ā§āĻ¯āĻžāĻāĻŋāĻ¸ āĻ¸āĻŋāĻāĻ āĻāĻĒāĻ¨āĻžāĻā§ āĻāĻžāĻ°ā§āĻā§āĻ¯āĻŧāĻžāĻ˛ āĻŽā§āĻļāĻŋāĻ¨ā§āĻ° āĻā§āĻŦāĻ¨ā§āĻ° āĻŦāĻŋāĻāĻŋāĻ¨ā§āĻ¨ āĻĒāĻ°ā§āĻ¯āĻžāĻ¯āĻŧā§ āĻāĻĒāĻ¨āĻžāĻ° āĻ¨āĻŋāĻāĻ¸ā§āĻŦ āĻāĻŽāĻžāĻ¨ā§āĻĄ āĻ¯ā§āĻā§āĻ¤ āĻāĻ°āĻ¤ā§ āĻĻā§āĻ¯āĻŧāĨ¤ āĻ
āĻ§ā§āĻ¯āĻžāĻ¯āĻŧ āĻāĻā§_āĻāĻ¨āĻ¸ā§āĻāĻ˛ āĻāĻ°ā§āĻ¨ āĻĒā§āĻ¯āĻžāĻā§āĻ āĻāĻ¨āĻ¸ā§āĻāĻ˛ āĻāĻ°āĻžāĻ° āĻāĻā§ āĻāĻžāĻ°ā§āĻ¯āĻāĻ° āĻāĻ°āĻž āĻšāĻ¯āĻŧāĨ¤ āĻ¤āĻžāĻ°āĻĒāĻ° āĻāĻ¨āĻ¸ā§āĻāĻ˛, āĻ¯āĻž āĻ¤āĻžāĻ˛āĻŋāĻāĻž āĻĨā§āĻā§ āĻĒā§āĻ¯āĻžāĻā§āĻ āĻāĻ¨āĻ¸ā§āĻāĻ˛ā§āĻļāĻ¨ āĻ
āĻ¨ā§āĻ¸āĻ°āĻŖ āĻāĻ°ā§ addons.aptāĻ¯āĻž āĻāĻŽāĻ°āĻž āĻāĻĒāĻ°ā§ āĻāĻ˛ā§āĻ˛ā§āĻ āĻāĻ°ā§āĻāĻŋāĨ¤ āĻ¸āĻŽāĻžāĻŦā§āĻļ āĻ¨āĻŋāĻā§āĻ āĻ¸āĻā§āĻāĻžāĻ˛āĻŋāĻ¤ āĻšāĻ¯āĻŧ āĻ˛āĻŋāĻĒāĻŋ. āĻ¯āĻĻāĻŋ āĻ¸āĻŦāĻāĻŋāĻā§ āĻ āĻŋāĻāĻ āĻžāĻ āĻšāĻ¯āĻŧ, āĻ¤āĻžāĻšāĻ˛ā§ āĻāĻŽāĻ°āĻž āĻ¨āĻŋāĻā§āĻĻā§āĻ° āĻŽāĻ§ā§āĻ¯ā§ āĻā§āĻāĻā§ āĻĒāĻžāĻ āĻ¸āĻĢāĻ˛āĻ¤āĻžāĻ° āĻĒāĻ°ā§ (āĻāĻ āĻŦāĻŋāĻāĻžāĻā§ āĻāĻŽāĻ°āĻž āĻ¸ā§āĻā§āĻ¯āĻžāĻāĻŋāĻ āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻŖ āĻāĻžāĻ˛āĻžāĻŦ)āĨ¤ āĻāĻā§āĻ˛āĻŋ āĻāĻŽāĻ¨ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻĒāĻĻāĻā§āĻˇā§āĻĒ āĻ¨āĻ¯āĻŧ āĻ¯āĻž āĻ¸āĻāĻļā§āĻ§āĻ¨ āĻāĻ°āĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§, āĻ¯āĻĻāĻŋ āĻāĻĒāĻ¨āĻžāĻ° āĻāĻ°āĻ āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ āĻšāĻ¯āĻŧ āĻ¤āĻŦā§ āĻāĻĒāĻ¨āĻžāĻā§ āĻĻā§āĻāĻ¤ā§ āĻšāĻŦā§
āĻĒāĻĄāĻŧāĻžāĻ° āĻ¸ā§āĻŦāĻŋāĻ§āĻžāĻ° āĻāĻ¨ā§āĻ¯, āĻāĻŽāĻžāĻ¨ā§āĻĄāĻā§āĻ˛āĻŋ āĻāĻāĻāĻŋ āĻĒā§āĻĨāĻ āĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻā§ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻāĻŋāĻ˛ .travis.sh, āĻ¯āĻž āĻĒā§āĻ°āĻāĻ˛ā§āĻĒā§āĻ° āĻŽā§āĻ˛ā§ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻāĻ°āĻž āĻšāĻ¯āĻŧāĨ¤
āĻ¤āĻžāĻ āĻāĻŽāĻ°āĻž āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻāĻŋāĻ¤ āĻĢāĻžāĻāĻ˛ āĻāĻā§ .travis.yml:
language: cpp
dist: xenial
addons:
apt:
update: true
packages:
- ant
- aria2
- build-essential
- cmake
- libgl1-mesa-dev
- libglu1-mesa-dev
- libsdl2-dev
- pv
- sendemail
- software-properties-common
sources:
- sourceline: 'ppa:ubuntu-toolchain-r/test'
- sourceline: 'ppa:ubuntu-sdk-team/ppa'
matrix:
include:
- os: linux
compiler: "gcc"
env: PVS_ANALYZE=Yes
- os: linux
compiler: "clang"
before_install:
- travis_retry bash .travis.sh travis_before_install
install:
- travis_retry bash .travis.sh travis_install
script:
- bash .travis.sh travis_script
after_success:
- bash .travis.sh travis_after_success
āĻĒā§āĻ¯āĻžāĻā§āĻāĻā§āĻ˛āĻŋ āĻāĻ¨āĻ¸ā§āĻāĻ˛ āĻāĻ°āĻžāĻ° āĻāĻā§, āĻāĻŽāĻ°āĻž āĻ¸āĻžāĻŦāĻŽāĻĄāĻŋāĻāĻ˛āĻā§āĻ˛āĻŋ āĻāĻĒāĻĄā§āĻ āĻāĻ°āĻŦāĨ¤ āĻāĻāĻŋ PPSSPP āĻ¨āĻŋāĻ°ā§āĻŽāĻžāĻŖā§āĻ° āĻāĻ¨ā§āĻ¯ āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨āĨ¤ āĻĒā§āĻ°āĻĨāĻŽ āĻĢāĻžāĻāĻļāĻ¨ āĻ¯ā§āĻ āĻāĻ°āĻž āĻ¯āĻžāĻ .travis.sh (āĻāĻā§āĻ¸āĻā§āĻ¨āĻļāĻ¨ āĻ¨ā§āĻ āĻāĻ°ā§āĻ¨):
travis_before_install() {
git submodule update --init --recursive
}
āĻāĻāĻ¨ āĻāĻŽāĻ°āĻž āĻ¸āĻ°āĻžāĻ¸āĻ°āĻŋ āĻāĻ¸āĻŋ Travis CI-āĻ¤ā§ PVS-Studio-āĻāĻ° āĻ¸ā§āĻŦāĻ¯āĻŧāĻāĻā§āĻ°āĻŋāĻ¯āĻŧ āĻ˛āĻā§āĻ āĻ¸ā§āĻ āĻāĻĒ āĻāĻ°āĻ¤ā§āĨ¤ āĻĒā§āĻ°āĻĨāĻŽā§ āĻāĻŽāĻžāĻĻā§āĻ° āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽā§ āĻĒāĻŋāĻāĻŋāĻāĻ¸-āĻ¸ā§āĻā§āĻĄāĻŋāĻ āĻĒā§āĻ¯āĻžāĻā§āĻ āĻāĻ¨āĻ¸ā§āĻāĻ˛ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§:
travis_install() {
if [ "$CXX" = "g++" ]; then
sudo apt-get install -qq g++-4.8
fi
if [ "$PVS_ANALYZE" = "Yes" ]; then
wget -q -O - https://files.viva64.com/etc/pubkey.txt
| sudo apt-key add -
sudo wget -O /etc/apt/sources.list.d/viva64.list
https://files.viva64.com/etc/viva64.list
sudo apt-get update -qq
sudo apt-get install -qq pvs-studio
libio-socket-ssl-perl
libnet-ssleay-perl
fi
download_extract
"https://cmake.org/files/v3.6/cmake-3.6.2-Linux-x86_64.tar.gz"
cmake-3.6.2-Linux-x86_64.tar.gz
}
āĻĢāĻžāĻāĻļāĻ¨ā§āĻ° āĻļā§āĻ°ā§āĻ¤ā§ travis_install āĻāĻŽāĻ°āĻž āĻāĻ¨āĻāĻžāĻ¯āĻŧāĻ°āĻ¨āĻŽā§āĻ¨ā§āĻ āĻā§āĻ°āĻŋāĻ¯āĻŧā§āĻŦāĻ˛ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻāĻŽāĻžāĻĻā§āĻ° āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ā§āĻ¯āĻŧ āĻāĻŽā§āĻĒāĻžāĻāĻ˛āĻžāĻ° āĻāĻ¨āĻ¸ā§āĻāĻ˛ āĻāĻ°āĻŋāĨ¤ āĻ¤āĻžāĻ°āĻĒāĻ° āĻ¯āĻĻāĻŋ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨āĻļā§āĻ˛ $PVS_ANALYZE āĻ¸āĻā§āĻāĻ¯āĻŧ āĻŽāĻžāĻ¨ āĻšāĻžāĻ (āĻāĻŽāĻ°āĻž āĻŦāĻŋāĻāĻžāĻā§ āĻāĻāĻŋ āĻ¨āĻŋāĻ°ā§āĻĻā§āĻļāĻŋāĻ¤ āĻĒā§āĻ°āĻžāĻ¯āĻŧ āĻŦāĻŋāĻ˛ā§āĻĄ āĻŽā§āĻ¯āĻžāĻā§āĻ°āĻŋāĻā§āĻ¸ āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ°ā§āĻļāĻ¨ā§āĻ° āĻ¸āĻŽāĻ¯āĻŧ), āĻāĻŽāĻ°āĻž āĻĒā§āĻ¯āĻžāĻā§āĻāĻāĻŋ āĻāĻ¨āĻ¸ā§āĻāĻ˛ āĻāĻ°āĻŋ pvs-studio. āĻāĻāĻŋ āĻāĻžāĻĄāĻŧāĻžāĻ, āĻĒā§āĻ¯āĻžāĻā§āĻāĻā§āĻ˛āĻŋāĻ āĻ¨āĻŋāĻ°ā§āĻĻā§āĻļāĻŋāĻ¤ āĻšāĻ¯āĻŧ libio-āĻ¸āĻā§āĻ-ssl-perl и libnet-ssleay-perl, āĻ¯āĻžāĻāĻšā§āĻ, āĻĢāĻ˛āĻžāĻĢāĻ˛ āĻŽā§āĻāĻ˛ ââāĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻā§āĻ˛āĻŋ āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨, āĻ¤āĻžāĻ āĻāĻĒāĻ¨āĻŋ āĻ¯āĻĻāĻŋ āĻāĻĒāĻ¨āĻžāĻ° āĻ°āĻŋāĻĒā§āĻ°ā§āĻ āĻĒā§āĻ°āĻĻāĻžāĻ¨ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻ āĻ¨ā§āĻ¯ āĻĒāĻĻā§āĻ§āĻ¤āĻŋ āĻŦā§āĻā§ āĻ¨ā§āĻ¨ āĻ¤āĻžāĻšāĻ˛ā§ āĻ¸ā§āĻā§āĻ˛āĻŋ āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ā§āĻ¯āĻŧ āĻ¨āĻ¯āĻŧā§ˇ
āĻā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻĄāĻžāĻāĻ¨āĻ˛ā§āĻĄ_āĻāĻā§āĻ¸āĻā§āĻ°āĻžāĻā§āĻ āĻĄāĻžāĻāĻ¨āĻ˛ā§āĻĄ āĻāĻ°ā§ āĻāĻŦāĻ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻāĻ°ā§āĻāĻžāĻāĻ āĻāĻ¨āĻĒā§āĻ¯āĻžāĻ āĻāĻ°ā§:
download_extract() {
aria2c -x 16 $1 -o $2
tar -xf $2
}
āĻāĻāĻž āĻāĻāĻ¸āĻā§āĻā§ āĻĒā§āĻ°āĻāĻ˛ā§āĻĒ āĻāĻ°āĻž āĻ¸āĻŽāĻ¯āĻŧ. āĻāĻ āĻŦāĻŋāĻāĻžāĻā§ āĻāĻā§ āĻ˛āĻŋāĻĒāĻŋ:
travis_script() {
if [ -d cmake-3.6.2-Linux-x86_64 ]; then
export PATH=$(pwd)/cmake-3.6.2-Linux-x86_64/bin:$PATH
fi
CMAKE_ARGS="-DHEADLESS=ON ${CMAKE_ARGS}"
if [ "$PVS_ANALYZE" = "Yes" ]; then
CMAKE_ARGS="-DCMAKE_EXPORT_COMPILE_COMMANDS=On ${CMAKE_ARGS}"
fi
cmake $CMAKE_ARGS CMakeLists.txt
make
}
āĻĒā§āĻ°āĻā§āĻ¤āĻĒāĻā§āĻˇā§, āĻāĻ āĻ˛āĻžāĻāĻ¨āĻā§āĻ˛āĻŋ āĻāĻžāĻĄāĻŧāĻž āĻāĻāĻŋ āĻāĻāĻāĻŋ āĻ¸āĻ°āĻ˛ā§āĻā§āĻ¤ āĻŽā§āĻ˛ āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ°ā§āĻļāĻ¨:
if [ "$PVS_ANALYZE" = "Yes" ]; then
CMAKE_ARGS="-DCMAKE_EXPORT_COMPILE_COMMANDS=On ${CMAKE_ARGS}"
fi
āĻā§āĻĄ āĻāĻ āĻŦāĻŋāĻāĻžāĻā§ āĻāĻŽāĻ°āĻž āĻāĻ¨ā§āĻ¯ āĻ¸ā§āĻ cmake āĻāĻŽā§āĻĒāĻžāĻāĻ˛ā§āĻļāĻ¨ āĻāĻŽāĻžāĻ¨ā§āĻĄ āĻ°āĻĒā§āĻ¤āĻžāĻ¨āĻŋāĻ° āĻāĻ¨ā§āĻ¯ āĻĒāĻ¤āĻžāĻāĻžāĨ¤ āĻāĻāĻŋ āĻāĻāĻāĻŋ āĻ¸ā§āĻā§āĻ¯āĻžāĻāĻŋāĻ āĻā§āĻĄ āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻā§āĻ° āĻāĻ¨ā§āĻ¯ āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ā§āĻ¯āĻŧāĨ¤ āĻāĻĒāĻ¨āĻŋ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ā§ āĻāĻ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§ āĻāĻ°āĻ āĻĒāĻĄāĻŧāĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨ "
āĻ¸āĻŽāĻžāĻŦā§āĻļ āĻ¸āĻĢāĻ˛ āĻšāĻ˛ā§, āĻ¤āĻžāĻ°āĻĒāĻ° āĻāĻŽāĻ°āĻž āĻĒā§āĻ¤ā§ āĻ¸āĻĢāĻ˛āĻ¤āĻžāĻ° āĻĒāĻ°ā§, āĻ¯ā§āĻāĻžāĻ¨ā§ āĻāĻŽāĻ°āĻž āĻ¸ā§āĻā§āĻ¯āĻžāĻāĻŋāĻ āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻŖ āĻāĻ°āĻŋ:
travis_after_success() {
if [ "$PVS_ANALYZE" = "Yes" ]; then
pvs-studio-analyzer credentials $PVS_USERNAME $PVS_KEY -o PVS-Studio.lic
pvs-studio-analyzer analyze -j2 -l PVS-Studio.lic
-o PVS-Studio-${CC}.log
--disableLicenseExpirationCheck
plog-converter -t html PVS-Studio-${CC}.log -o PVS-Studio-${CC}.html
sendemail -t [email protected]
-u "PVS-Studio $CC report, commit:$TRAVIS_COMMIT"
-m "PVS-Studio $CC report, commit:$TRAVIS_COMMIT"
-s smtp.gmail.com:587
-xu $MAIL_USER
-xp $MAIL_PASSWORD
-o tls=yes
-f $MAIL_USER
-a PVS-Studio-${CC}.log PVS-Studio-${CC}.html
fi
}
āĻāĻ¸ā§āĻ¨ āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻāĻŋāĻ¤ āĻ˛āĻžāĻāĻ¨āĻā§āĻ˛āĻŋ āĻāĻ¨āĻŋāĻˇā§āĻ āĻāĻžāĻŦā§ āĻĻā§āĻā§ āĻ¨ā§āĻāĻ¯āĻŧāĻž āĻ¯āĻžāĻ:
pvs-studio-analyzer credentials $PVS_USERNAME $PVS_KEY -o PVS-Studio.lic
pvs-studio-analyzer analyze -j2 -l PVS-Studio.lic
-o PVS-Studio-${CC}.log
--disableLicenseExpirationCheck
plog-converter -t html PVS-Studio-${CC}.log -o PVS-Studio-${CC}.html
āĻĒā§āĻ°āĻĨāĻŽ āĻ˛āĻžāĻāĻ¨āĻāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§āĻ° āĻ¨āĻžāĻŽ āĻāĻŦāĻ āĻā§ āĻĨā§āĻā§ āĻāĻāĻāĻŋ āĻ˛āĻžāĻāĻ¸ā§āĻ¨ā§āĻ¸ āĻĢāĻžāĻāĻ˛ āĻ¤ā§āĻ°āĻŋ āĻāĻ°ā§ āĻ¯āĻž āĻāĻŽāĻ°āĻž āĻā§āĻ°ā§āĻ¯āĻžāĻāĻŋāĻ¸ āĻ¸āĻŋāĻāĻ āĻāĻ¨āĻāĻžāĻ¯āĻŧāĻ°āĻ¨āĻŽā§āĻ¨ā§āĻ āĻā§āĻ°āĻŋāĻ¯āĻŧā§āĻŦāĻ˛ āĻ¸ā§āĻ āĻāĻĒ āĻāĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻāĻā§āĻŦāĻžāĻ°ā§ āĻļā§āĻ°ā§āĻ¤ā§ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻāĻ°ā§āĻāĻŋāĨ¤
āĻĻā§āĻŦāĻŋāĻ¤ā§āĻ¯āĻŧ āĻ˛āĻžāĻāĻ¨āĻāĻŋ āĻ¸āĻ°āĻžāĻ¸āĻ°āĻŋ āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻŖ āĻļā§āĻ°ā§ āĻāĻ°ā§āĨ¤ āĻĒāĻ¤āĻžāĻāĻž -āĻā§ āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻŖā§āĻ° āĻāĻ¨ā§āĻ¯ āĻĨā§āĻ°ā§āĻĄā§āĻ° āĻ¸āĻāĻā§āĻ¯āĻž āĻ¨āĻŋāĻ°ā§āĻ§āĻžāĻ°āĻŖ āĻāĻ°ā§, āĻĒāĻ¤āĻžāĻāĻž -l āĻ˛āĻžāĻāĻ¸ā§āĻ¨ā§āĻ¸, āĻĒāĻ¤āĻžāĻāĻž āĻ¨āĻŋāĻ°ā§āĻĻā§āĻļ āĻāĻ°ā§ -o āĻāĻāĻāĻĒā§āĻ āĻ˛āĻ āĻāĻŦāĻ āĻĒāĻ¤āĻžāĻāĻž āĻāĻ¨ā§āĻ¯ āĻĢāĻžāĻāĻ˛ āĻ¸āĻāĻā§āĻāĻžāĻ¯āĻŧāĻŋāĻ¤ āĻāĻ°ā§ -āĻ˛āĻžāĻāĻ¸ā§āĻ¨ā§āĻ¸ā§āĻ° āĻŽā§āĻ¯āĻŧāĻžāĻĻ āĻļā§āĻˇ āĻšāĻāĻ¯āĻŧāĻžāĻ° āĻā§āĻ āĻ āĻā§āĻˇāĻŽ āĻāĻ°ā§āĻ¨ āĻā§āĻ°āĻžāĻ¯āĻŧāĻžāĻ˛ āĻ¸āĻāĻ¸ā§āĻāĻ°āĻŖā§āĻ° āĻāĻ¨ā§āĻ¯ āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ā§āĻ¯āĻŧ, āĻ¯ā§āĻšā§āĻ¤ā§ āĻĄāĻŋāĻĢāĻ˛ā§āĻāĻ°ā§āĻĒā§ āĻĒāĻŋāĻāĻŋāĻāĻ¸-āĻ¸ā§āĻā§āĻĄāĻŋāĻ-āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§āĻā§ āĻ¸āĻ¤āĻ°ā§āĻ āĻāĻ°āĻŦā§ āĻ¯ā§ āĻ˛āĻžāĻāĻ¸ā§āĻ¨ā§āĻ¸ā§āĻ° āĻŽā§āĻ¯āĻŧāĻžāĻĻ āĻļā§āĻˇ āĻšāĻ¤ā§ āĻāĻ˛ā§āĻā§āĨ¤ āĻāĻāĻŋ āĻ¯āĻžāĻ¤ā§ āĻ¨āĻž āĻāĻā§ āĻ¤āĻžāĻ° āĻāĻ¨ā§āĻ¯, āĻāĻĒāĻ¨āĻŋ āĻāĻ āĻĒāĻ¤āĻžāĻāĻž āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨āĨ¤
āĻ˛āĻ āĻĢāĻžāĻāĻ˛ā§ āĻāĻžāĻāĻāĻž āĻāĻāĻāĻĒā§āĻ āĻ°āĻ¯āĻŧā§āĻā§ āĻ¯āĻž āĻ°ā§āĻĒāĻžāĻ¨ā§āĻ¤āĻ° āĻāĻžāĻĄāĻŧāĻž āĻĒāĻĄāĻŧāĻž āĻ¯āĻžāĻ¯āĻŧ āĻ¨āĻž, āĻ¤āĻžāĻ āĻāĻĒāĻ¨āĻžāĻā§ āĻĒā§āĻ°āĻĨāĻŽā§ āĻĢāĻžāĻāĻ˛āĻāĻŋ āĻĒāĻžāĻ āĻ¯ā§āĻā§āĻ¯ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§āĨ¤ āĻāĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§ āĻ˛āĻ āĻĒāĻžāĻ¸ āĻāĻ°āĻž āĻ¯āĻžāĻ āĻĒā§āĻ˛āĻžāĻ-āĻāĻ¨āĻāĻžāĻ°ā§āĻāĻžāĻ°, āĻāĻŦāĻ āĻāĻāĻāĻĒā§āĻ āĻāĻāĻāĻŋ html āĻĢāĻžāĻāĻ˛āĨ¤
āĻāĻ āĻāĻĻāĻžāĻšāĻ°āĻŖā§, āĻāĻŽāĻŋ āĻāĻŽāĻžāĻ¨ā§āĻĄ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻŽā§āĻ˛ āĻĻā§āĻŦāĻžāĻ°āĻž āĻ°āĻŋāĻĒā§āĻ°ā§āĻ āĻĒāĻžāĻ āĻžāĻ¨ā§āĻ° āĻ¸āĻŋāĻĻā§āĻ§āĻžāĻ¨ā§āĻ¤ āĻ¨āĻŋāĻ¯āĻŧā§āĻāĻŋ āĻāĻŽā§āĻāĻ˛ āĻĒāĻžāĻ āĻžāĻ¨.
āĻĢāĻ˛āĻ¸ā§āĻŦāĻ°ā§āĻĒ, āĻāĻŽāĻ°āĻž āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻāĻŋāĻ¤ āĻĢāĻžāĻāĻ˛ āĻĒā§āĻ¯āĻŧā§āĻāĻŋ .travis.sh:
#/bin/bash
travis_before_install() {
git submodule update --init --recursive
}
download_extract() {
aria2c -x 16 $1 -o $2
tar -xf $2
}
travis_install() {
if [ "$CXX" = "g++" ]; then
sudo apt-get install -qq g++-4.8
fi
if [ "$PVS_ANALYZE" = "Yes" ]; then
wget -q -O - https://files.viva64.com/etc/pubkey.txt
| sudo apt-key add -
sudo wget -O /etc/apt/sources.list.d/viva64.list
https://files.viva64.com/etc/viva64.list
sudo apt-get update -qq
sudo apt-get install -qq pvs-studio
libio-socket-ssl-perl
libnet-ssleay-perl
fi
download_extract
"https://cmake.org/files/v3.6/cmake-3.6.2-Linux-x86_64.tar.gz"
cmake-3.6.2-Linux-x86_64.tar.gz
}
travis_script() {
if [ -d cmake-3.6.2-Linux-x86_64 ]; then
export PATH=$(pwd)/cmake-3.6.2-Linux-x86_64/bin:$PATH
fi
CMAKE_ARGS="-DHEADLESS=ON ${CMAKE_ARGS}"
if [ "$PVS_ANALYZE" = "Yes" ]; then
CMAKE_ARGS="-DCMAKE_EXPORT_COMPILE_COMMANDS=On ${CMAKE_ARGS}"
fi
cmake $CMAKE_ARGS CMakeLists.txt
make
}
travis_after_success() {
if [ "$PVS_ANALYZE" = "Yes" ]; then
pvs-studio-analyzer credentials $PVS_USERNAME $PVS_KEY -o PVS-Studio.lic
pvs-studio-analyzer analyze -j2 -l PVS-Studio.lic
-o PVS-Studio-${CC}.log
--disableLicenseExpirationCheck
plog-converter -t html PVS-Studio-${CC}.log -o PVS-Studio-${CC}.html
sendemail -t [email protected]
-u "PVS-Studio $CC report, commit:$TRAVIS_COMMIT"
-m "PVS-Studio $CC report, commit:$TRAVIS_COMMIT"
-s smtp.gmail.com:587
-xu $MAIL_USER
-xp $MAIL_PASSWORD
-o tls=yes
-f $MAIL_USER
-a PVS-Studio-${CC}.log PVS-Studio-${CC}.html
fi
}
set -e
set -x
$1;
āĻāĻāĻ¨ āĻāĻŋāĻ āĻ°āĻŋāĻĒā§āĻāĻŋāĻāĻ°āĻŋāĻ¤ā§ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨āĻā§āĻ˛āĻŋ āĻĒā§āĻļ āĻāĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ, āĻ¯āĻžāĻ° āĻĒāĻ°ā§ āĻā§āĻ°ā§āĻ¯āĻžāĻāĻŋāĻ¸ āĻ¸āĻŋāĻāĻ āĻ¸ā§āĻŦāĻ¯āĻŧāĻāĻā§āĻ°āĻŋāĻ¯āĻŧāĻāĻžāĻŦā§ āĻŦāĻŋāĻ˛ā§āĻĄāĻāĻŋ āĻāĻžāĻ˛āĻžāĻŦā§āĨ¤ āĻŦāĻŋāĻ˛ā§āĻĄ āĻ°āĻŋāĻĒā§āĻ°ā§āĻā§ āĻ¯ā§āĻ¤ā§ "ppsspp" āĻ āĻā§āĻ˛āĻŋāĻ āĻāĻ°ā§āĻ¨:
āĻāĻŽāĻ°āĻž āĻŦāĻ°ā§āĻ¤āĻŽāĻžāĻ¨ āĻŦāĻŋāĻ˛ā§āĻĄā§āĻ° āĻāĻāĻāĻŋ āĻāĻāĻžāĻ°āĻāĻŋāĻ āĻĻā§āĻāĻ¤ā§ āĻĒāĻžāĻŦ:
āĻŦāĻŋāĻ˛ā§āĻĄāĻāĻŋ āĻ¸āĻĢāĻ˛āĻāĻžāĻŦā§ āĻ¸āĻŽā§āĻĒāĻ¨ā§āĻ¨ āĻšāĻ˛ā§, āĻāĻŽāĻ°āĻž āĻ¸ā§āĻā§āĻ¯āĻžāĻāĻŋāĻ āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻŖā§āĻ° āĻĢāĻ˛āĻžāĻĢāĻ˛ āĻ¸āĻš āĻāĻāĻāĻŋ āĻāĻŽā§āĻ˛ āĻĒāĻžāĻŦāĨ¤ āĻ
āĻŦāĻļā§āĻ¯āĻ, āĻŽā§āĻāĻ˛āĻŋāĻ āĻ°āĻŋāĻĒā§āĻ°ā§āĻ āĻĒāĻžāĻāĻ¯āĻŧāĻžāĻ° āĻāĻāĻŽāĻžāĻ¤ā§āĻ° āĻāĻĒāĻžāĻ¯āĻŧ āĻ¨āĻ¯āĻŧāĨ¤ āĻāĻĒāĻ¨āĻŋ āĻ¯ā§āĻā§āĻ¨ā§ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ āĻĒāĻĻā§āĻ§āĻ¤āĻŋ āĻŦā§āĻā§ āĻ¨āĻŋāĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨āĨ¤ āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻāĻāĻŋ āĻŽāĻ¨ā§ āĻ°āĻžāĻāĻž āĻā§āĻ°ā§āĻ¤ā§āĻŦāĻĒā§āĻ°ā§āĻŖ āĻ¯ā§ āĻŦāĻŋāĻ˛ā§āĻĄāĻāĻŋ āĻ¸āĻŽā§āĻĒāĻ¨ā§āĻ¨ āĻšāĻāĻ¯āĻŧāĻžāĻ° āĻĒāĻ°ā§, āĻāĻžāĻ°ā§āĻā§āĻ¯āĻŧāĻžāĻ˛ āĻŽā§āĻļāĻŋāĻ¨ āĻĢāĻžāĻāĻ˛āĻā§āĻ˛āĻŋ āĻ
ā§āĻ¯āĻžāĻā§āĻ¸ā§āĻ¸ āĻāĻ°āĻž āĻ¸āĻŽā§āĻāĻŦ āĻšāĻŦā§ āĻ¨āĻžāĨ¤
āĻ¤ā§āĻ°ā§āĻāĻŋ āĻ¸āĻžāĻ°āĻžāĻāĻļ
āĻāĻŽāĻ°āĻž āĻ¸āĻŦāĻā§āĻ¯āĻŧā§ āĻāĻ āĻŋāĻ¨ āĻ āĻāĻļāĻāĻŋ āĻ¸āĻĢāĻ˛āĻāĻžāĻŦā§ āĻ¸āĻŽā§āĻĒāĻ¨ā§āĻ¨ āĻāĻ°ā§āĻāĻŋāĨ¤ āĻāĻāĻ¨ āĻ¨āĻŋāĻļā§āĻāĻŋāĻ¤ āĻāĻ°āĻž āĻ¯āĻžāĻ āĻ¯ā§ āĻāĻŽāĻžāĻĻā§āĻ° āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻĒā§āĻ°āĻā§āĻˇā§āĻāĻž āĻŽā§āĻ˛ā§āĻ¯āĻŦāĻžāĻ¨āĨ¤ āĻ¸ā§āĻā§āĻ¯āĻžāĻāĻŋāĻ āĻ ā§āĻ¯āĻžāĻ¨āĻžāĻ˛āĻžāĻāĻ¸āĻŋāĻ¸ āĻ°āĻŋāĻĒā§āĻ°ā§āĻ āĻĨā§āĻā§ āĻāĻŋāĻā§ āĻāĻāĻ°ā§āĻˇāĻŖā§āĻ¯āĻŧ āĻĒāĻ¯āĻŧā§āĻ¨ā§āĻ āĻĻā§āĻāĻž āĻ¯āĻžāĻ āĻ¯āĻž āĻāĻŽāĻžāĻ° āĻāĻžāĻā§ āĻŽā§āĻāĻ˛ā§ āĻāĻ¸ā§āĻāĻŋāĻ˛ (āĻāĻāĻŋ āĻā§āĻ¨āĻ āĻāĻŋāĻā§āĻ° āĻāĻ¨ā§āĻ¯ āĻ¨āĻ¯āĻŧ āĻ¯ā§ āĻāĻŽāĻŋ āĻāĻāĻŋ āĻ¨āĻŋāĻ°ā§āĻĻā§āĻļ āĻāĻ°ā§āĻāĻŋāĻ˛āĻžāĻŽ)āĨ¤
āĻŦāĻŋāĻĒāĻā§āĻāĻ¨āĻ āĻ āĻĒā§āĻāĻŋāĻŽāĻžāĻāĻā§āĻļāĻžāĻ¨
void sha1( unsigned char *input, int ilen, unsigned char output[20] )
{
sha1_context ctx;
sha1_starts( &ctx );
sha1_update( &ctx, input, ilen );
sha1_finish( &ctx, output );
memset( &ctx, 0, sizeof( sha1_context ) );
}
PVS-āĻ¸ā§āĻā§āĻĄāĻŋāĻ āĻ¸āĻ¤āĻ°ā§āĻāĻ¤āĻž:
āĻā§āĻĄā§āĻ° āĻāĻ āĻ
āĻāĻļāĻāĻŋ āĻ¸ā§āĻ°āĻā§āĻˇāĻŋāĻ¤ āĻšā§āĻ¯āĻžāĻļāĻŋāĻ āĻŽāĻĄāĻŋāĻāĻ˛ā§ āĻ
āĻŦāĻ¸ā§āĻĨāĻŋāĻ¤, āĻ¤āĻŦā§ āĻāĻ¤ā§ āĻāĻāĻāĻŋ āĻā§āĻ°ā§āĻ¤āĻ° āĻ¨āĻŋāĻ°āĻžāĻĒāĻ¤ā§āĻ¤āĻž āĻ¤ā§āĻ°ā§āĻāĻŋ āĻ°āĻ¯āĻŧā§āĻā§ (
; Line 355
mov r8d, 20
xor edx, edx
lea rcx, QWORD PTR sum$[rsp]
call memset
; Line 356
āĻ¸āĻŦāĻāĻŋāĻā§ āĻā§āĻ°āĻŽ āĻāĻŦāĻ āĻĢāĻžāĻāĻļāĻ¨ āĻšāĻ¯āĻŧ āĻŽā§āĻŽāĻ¸ā§āĻ āĻāĻžāĻ°ā§āĻ¯āĻāĻ° āĻāĻ°āĻž āĻšāĻ¯āĻŧ, āĻ¯āĻžāĻ° āĻĢāĻ˛ā§ RAM-āĻ¤ā§ āĻā§āĻ°ā§āĻ¤ā§āĻŦāĻĒā§āĻ°ā§āĻŖ āĻĄā§āĻāĻž āĻāĻāĻžāĻ°āĻ°āĻžāĻāĻ āĻāĻ°āĻž āĻšāĻ¯āĻŧ, āĻ¤āĻŦā§, āĻāĻāĻ¨āĻ āĻāĻ¨āĻ¨ā§āĻĻ āĻāĻ°āĻŦā§āĻ¨ āĻ¨āĻžāĨ¤ āĻāĻ¸ā§āĻ¨ āĻ āĻĒā§āĻāĻŋāĻŽāĻžāĻāĻā§āĻļāĻžāĻ¨ āĻ¸āĻš āĻ°āĻŋāĻ˛āĻŋāĻ āĻ¸āĻāĻ¸ā§āĻāĻ°āĻŖā§āĻ° āĻ¸āĻŽāĻžāĻŦā§āĻļ āĻ¤āĻžāĻ˛āĻŋāĻāĻžāĻāĻŋ āĻĻā§āĻāĻŋ:
; 354 :
; 355 : memset( sum, 0, sizeof( sum ) );
; 356 :}
āĻ¤āĻžāĻ˛āĻŋāĻāĻž āĻĨā§āĻā§ āĻĻā§āĻāĻž āĻ¯āĻžāĻ¯āĻŧ, āĻāĻŽā§āĻĒāĻžāĻāĻ˛āĻžāĻ° āĻāĻ˛āĻāĻŋ āĻāĻĒā§āĻā§āĻˇāĻž āĻāĻ°ā§āĻā§ āĻŽā§āĻŽāĻ¸ā§āĻ. āĻāĻ āĻ¯ā§ āĻāĻžāĻ°āĻŖā§ āĻĢāĻžāĻāĻļāĻ¨ sha1 āĻāĻ˛ā§āĻ° āĻĒāĻ° āĻŽā§āĻŽāĻ¸ā§āĻ āĻāĻžāĻ āĻžāĻŽā§āĻ° āĻāĻ° āĻā§āĻ¨ āĻ°ā§āĻĢāĻžāĻ°ā§āĻ¨ā§āĻ¸ āĻ¨ā§āĻ āĻ¸āĻŋāĻāĻŋāĻāĻā§āĻ¸. āĻ
āĻ¤āĻāĻŦ, āĻāĻŽā§āĻĒāĻžāĻāĻ˛āĻžāĻ° āĻāĻŦāĻŋāĻˇā§āĻ¯āĻ¤ā§ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ¨āĻž āĻāĻ°āĻž āĻŽā§āĻŽāĻ°āĻŋ āĻāĻāĻžāĻ°āĻ°āĻžāĻāĻ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻĒā§āĻ°āĻ¸ā§āĻ¸āĻ°ā§āĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻ¨āĻˇā§āĻ āĻāĻ°āĻžāĻ° āĻā§āĻ¨ āĻ
āĻ°ā§āĻĨ āĻĻā§āĻā§ āĻ¨āĻžāĨ¤ āĻāĻĒāĻ¨āĻŋ āĻĢāĻžāĻāĻļāĻ¨ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻāĻāĻŋ āĻ āĻŋāĻ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨ RtlSecureZeroMemory āĻŦāĻž
āĻ¸āĻāĻļā§āĻ§āĻ¨:
void sha1( unsigned char *input, int ilen, unsigned char output[20] )
{
sha1_context ctx;
sha1_starts( &ctx );
sha1_update( &ctx, input, ilen );
sha1_finish( &ctx, output );
RtlSecureZeroMemory(&ctx, sizeof( sha1_context ) );
}
āĻ āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ā§āĻ¯āĻŧ āĻ¤ā§āĻ˛āĻ¨āĻž
static u32 sceAudioOutputPannedBlocking
(u32 chan, int leftvol, int rightvol, u32 samplePtr) {
int result = 0;
// For some reason, this is the only one that checks for negative.
if (leftvol > 0xFFFF || rightvol > 0xFFFF || leftvol < 0 || rightvol < 0) {
....
} else {
if (leftvol >= 0) {
chans[chan].leftVolume = leftvol;
}
if (rightvol >= 0) {
chans[chan].rightVolume = rightvol;
}
chans[chan].sampleAddress = samplePtr;
result = __AudioEnqueue(chans[chan], chan, true);
}
}
PVS-āĻ¸ā§āĻā§āĻĄāĻŋāĻ āĻ¸āĻ¤āĻ°ā§āĻāĻ¤āĻž:
āĻĒā§āĻ°āĻĨāĻŽāĻāĻŋāĻ° āĻāĻ¨ā§āĻ¯ āĻ āĻ¨ā§āĻ¯ āĻļāĻžāĻāĻžāĻ¯āĻŧ āĻŽāĻ¨ā§āĻ¯ā§āĻ āĻĻāĻŋāĻ¨ if. āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻļāĻ°ā§āĻ¤ āĻĨāĻžāĻāĻ˛ā§āĻ āĻā§āĻĄāĻāĻŋ āĻāĻžāĻ°ā§āĻ¯āĻāĻ° āĻāĻ°āĻž āĻšāĻŦā§ leftvol > 0xFFFF || rightvol > 0xFFFF || āĻ˛ā§āĻĢāĻāĻā§āĻ˛ < 0 || āĻĄāĻžāĻ¨āĻā§āĻ˛ < 0 āĻŽāĻŋāĻĨā§āĻ¯āĻž āĻšāĻ¤ā§ āĻāĻžāĻ˛ā§ āĻšāĻŦā§. āĻ āĻ¤āĻāĻŦ, āĻāĻŽāĻ°āĻž āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻāĻŋāĻ¤ āĻŦāĻŋāĻŦā§āĻ¤āĻŋ āĻĒāĻžāĻ, āĻ¯āĻž āĻ āĻ¨ā§āĻ¯ āĻļāĻžāĻāĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻ¸āĻ¤ā§āĻ¯ āĻšāĻŦā§: leftvol <= 0xFFFF, rightvol <= 0xFFFF, āĻ˛ā§āĻĢāĻāĻā§āĻ˛ >= 0 и rightvol >= 0. āĻļā§āĻˇ āĻĻā§āĻāĻŋ āĻŦāĻŋāĻŦā§āĻ¤āĻŋ āĻ˛āĻā§āĻˇā§āĻ¯ āĻāĻ°ā§āĻ¨. āĻā§āĻĄā§āĻ° āĻāĻ āĻ āĻāĻļāĻāĻŋ āĻāĻžāĻ°ā§āĻ¯āĻāĻ° āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ā§āĻ¯āĻŧ āĻļāĻ°ā§āĻ¤ āĻā§ āĻ¤āĻž āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°āĻžāĻ° āĻ āĻ°ā§āĻĨ āĻāĻŋ?
āĻ¸ā§āĻ¤āĻ°āĻžāĻ āĻāĻŽāĻ°āĻž āĻ¨āĻŋāĻ°āĻžāĻĒāĻĻā§ āĻāĻ āĻļāĻ°ā§āĻ¤āĻ¯ā§āĻā§āĻ¤ āĻŦāĻŋāĻŦā§āĻ¤āĻŋāĻā§āĻ˛āĻŋ āĻ¸āĻ°āĻžāĻ¤ā§ āĻĒāĻžāĻ°āĻŋ:
static u32 sceAudioOutputPannedBlocking
(u32 chan, int leftvol, int rightvol, u32 samplePtr) {
int result = 0;
// For some reason, this is the only one that checks for negative.
if (leftvol > 0xFFFF || rightvol > 0xFFFF || leftvol < 0 || rightvol < 0) {
....
} else {
chans[chan].leftVolume = leftvol;
chans[chan].rightVolume = rightvol;
chans[chan].sampleAddress = samplePtr;
result = __AudioEnqueue(chans[chan], chan, true);
}
}
āĻāĻ°ā§āĻāĻāĻŋ āĻĻā§āĻļā§āĻ¯āĻāĻ˛ā§āĻĒāĨ¤ āĻāĻ āĻ āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ā§āĻ¯āĻŧ āĻ āĻŦāĻ¸ā§āĻĨāĻžāĻ° āĻĒāĻŋāĻāĻ¨ā§ āĻ˛ā§āĻāĻŋāĻ¯āĻŧā§ āĻāĻā§ āĻāĻāĻ§āĻ°āĻ¨ā§āĻ° āĻ¤ā§āĻ°ā§āĻāĻŋāĨ¤ āĻ¸āĻŽā§āĻāĻŦāĻ¤ āĻ¤āĻžāĻ°āĻž āĻāĻŋ āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ āĻāĻŋāĻ˛ āĻ¤āĻž āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°ā§āĻ¨āĻŋāĨ¤
Ctrl+C Ctrl+V āĻ¸ā§āĻā§āĻ°āĻžāĻāĻ āĻŦā§āĻ¯āĻžāĻ
static u32 scePsmfSetPsmf(u32 psmfStruct, u32 psmfData) {
if (!Memory::IsValidAddress(psmfData) ||
!Memory::IsValidAddress(psmfData)) {
return hleReportError(ME, SCE_KERNEL_ERROR_ILLEGAL_ADDRESS, "bad address");
}
....
}
āĻāĻŋāĻ¤āĻ°ā§ āĻā§āĻ āĻŽāĻ¨ā§āĻ¯ā§āĻ āĻĻāĻŋāĻ¨ if. āĻāĻĒāĻ¨āĻŋ āĻāĻŋ āĻāĻāĻž āĻ āĻĻā§āĻā§āĻ¤ āĻŽāĻ¨ā§ āĻāĻ°ā§āĻ¨ āĻ¨āĻž āĻ¯ā§ āĻāĻŽāĻ°āĻž āĻ āĻŋāĻāĻžāĻ¨āĻžāĻāĻŋ āĻŦā§āĻ§ āĻāĻŋāĻ¨āĻž āĻ¤āĻž āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°āĻŋ? psmfāĻĄā§āĻāĻž, āĻĻā§āĻāĻŦāĻžāĻ° āĻšāĻŋāĻ¸āĻžāĻŦā§ āĻ āĻ¨ā§āĻ? āĻ¤āĻžāĻ āĻāĻāĻŋ āĻāĻŽāĻžāĻ° āĻāĻžāĻā§ āĻ āĻĻā§āĻā§āĻ¤ āĻŦāĻ˛ā§ āĻŽāĻ¨ā§ āĻšāĻā§āĻā§... āĻāĻ¸āĻ˛ā§, āĻāĻāĻŋ āĻ āĻŦāĻļā§āĻ¯āĻ āĻāĻāĻāĻŋ āĻāĻžāĻāĻĒā§, āĻāĻŦāĻ āĻ§āĻžāĻ°āĻŖāĻžāĻāĻŋ āĻāĻŋāĻ˛ āĻāĻāĻ¯āĻŧ āĻāĻ¨āĻĒā§āĻ āĻĒāĻ°āĻžāĻŽāĻŋāĻ¤āĻŋ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°āĻžāĨ¤
āĻ¸āĻ āĻŋāĻ āĻŦāĻŋāĻāĻ˛ā§āĻĒ:
static u32 scePsmfSetPsmf(u32 psmfStruct, u32 psmfData) {
if (!Memory::IsValidAddress(psmfStruct) ||
!Memory::IsValidAddress(psmfData)) {
return hleReportError(ME, SCE_KERNEL_ERROR_ILLEGAL_ADDRESS, "bad address");
}
....
}
āĻā§āĻ˛ā§ āĻ¯āĻžāĻāĻ¯āĻŧāĻž āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨āĻļā§āĻ˛
extern void ud_translate_att(
int size = 0;
....
if (size == 8) {
ud_asmprintf(u, "b");
} else if (size == 16) {
ud_asmprintf(u, "w");
} else if (size == 64) {
ud_asmprintf(u, "q");
}
....
}
PVS-āĻ¸ā§āĻā§āĻĄāĻŋāĻ āĻ¸āĻ¤āĻ°ā§āĻāĻ¤āĻž:
āĻāĻ āĻ¤ā§āĻ°ā§āĻāĻŋ āĻĢā§āĻ˛ā§āĻĄāĻžāĻ°ā§ āĻ āĻŦāĻ¸ā§āĻĨāĻŋāĻ¤ EXT, āĻ¤āĻžāĻ āĻĒā§āĻ°āĻā§āĻā§āĻā§āĻ° āĻ¸āĻžāĻĨā§ āĻ āĻŋāĻ āĻĒā§āĻ°āĻžāĻ¸āĻā§āĻāĻŋāĻ āĻ¨āĻ¯āĻŧ, āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻāĻŽāĻŋ āĻāĻāĻŋ āĻ˛āĻā§āĻˇā§āĻ¯ āĻāĻ°āĻžāĻ° āĻāĻā§āĻ āĻŦāĻžāĻāĻāĻŋ āĻĒāĻžāĻāĻ¯āĻŧāĻž āĻā§āĻā§, āĻ¤āĻžāĻ āĻāĻŽāĻŋ āĻāĻāĻŋ āĻā§āĻĄāĻŧā§ āĻĻā§āĻāĻ¯āĻŧāĻžāĻ° āĻ¸āĻŋāĻĻā§āĻ§āĻžāĻ¨ā§āĻ¤ āĻ¨āĻŋāĻ¯āĻŧā§āĻāĻŋāĨ¤ āĻ¸āĻ°ā§āĻŦā§āĻĒāĻ°āĻŋ, āĻāĻ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻāĻŋ āĻ¤ā§āĻ°ā§āĻāĻŋāĻā§āĻ˛āĻŋ āĻĒāĻ°ā§āĻ¯āĻžāĻ˛ā§āĻāĻ¨āĻž āĻāĻ°āĻžāĻ° āĻŦāĻŋāĻˇāĻ¯āĻŧā§ āĻ¨āĻ¯āĻŧ, āĻ¤āĻŦā§ āĻā§āĻ°ā§āĻ¯āĻžāĻāĻŋāĻ¸ āĻ¸āĻŋāĻāĻāĻ¯āĻŧā§āĻ° āĻ¸āĻžāĻĨā§ āĻāĻā§āĻāĻ°āĻŖ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§ āĻāĻŦāĻ āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻā§āĻ° āĻā§āĻ¨āĻ āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ°ā§āĻļāĻ¨ āĻāĻ°āĻž āĻšāĻ¯āĻŧāĻ¨āĻŋāĨ¤
āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨āĻļā§āĻ˛ āĻāĻ¯āĻŧāĻ¤āĻ¨ āĻāĻāĻāĻŋ āĻ§ā§āĻ°ā§āĻŦāĻ āĻĻā§āĻŦāĻžāĻ°āĻž āĻāĻ°āĻŽā§āĻ āĻāĻ°āĻž āĻšāĻ¯āĻŧ, āĻ¤āĻŦā§, āĻāĻāĻŋ āĻ āĻĒāĻžāĻ°ā§āĻāĻ° āĻĨā§āĻā§, āĻā§āĻĄā§ āĻŽā§āĻā§āĻ āĻŦā§āĻ¯āĻŦāĻšā§āĻ¤ āĻšāĻ¯āĻŧ āĻ¨āĻž if, āĻ¯āĻž, āĻ āĻŦāĻļā§āĻ¯āĻ, āĻĻā§āĻ¯āĻŧ āĻŽāĻŋāĻĨā§āĻ¯āĻž āĻļāĻ°ā§āĻ¤āĻā§āĻ˛āĻŋ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ, āĻāĻžāĻ°āĻŖ, āĻāĻŽāĻžāĻĻā§āĻ° āĻŽāĻ¨ā§ āĻāĻā§, āĻāĻ¯āĻŧāĻ¤āĻ¨ āĻļā§āĻ¨ā§āĻ¯ā§āĻ° āĻ¸āĻŽāĻžāĻ¨āĨ¤ āĻĒāĻ°āĻŦāĻ°ā§āĻ¤ā§ āĻā§āĻ āĻāĻāĻžāĻĄāĻŧāĻžāĻ āĻā§āĻ¨ āĻŽāĻžāĻ¨ā§ āĻšāĻ¯āĻŧ.
āĻĻā§āĻļā§āĻ¯āĻ¤, āĻā§āĻĄ āĻāĻŖā§āĻĄā§āĻ° āĻ˛ā§āĻāĻ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨āĻļā§āĻ˛ āĻāĻāĻžāĻ°āĻ°āĻžāĻāĻ āĻāĻ°āĻ¤ā§ āĻā§āĻ˛ā§ āĻā§āĻā§āĻ¨ āĻāĻ¯āĻŧāĻ¤āĻ¨ āĻāĻ° āĻāĻā§.
āĻĨāĻžāĻŽā§āĻ¨
āĻāĻāĻžāĻ¨ā§ āĻāĻŽāĻ°āĻž āĻ¸āĻŽā§āĻāĻŦāĻ¤ āĻā§āĻ˛ āĻĻāĻŋāĻ¯āĻŧā§ āĻļā§āĻˇ āĻāĻ°āĻŦāĨ¤ āĻāĻ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻāĻŋāĻ° āĻāĻĻā§āĻĻā§āĻļā§āĻ¯ āĻšāĻ˛ PVS-Studio-āĻāĻ° āĻāĻžāĻ Travis CI-āĻāĻ° āĻ¸āĻžāĻĨā§ āĻāĻāĻ¤ā§āĻ°ā§ āĻĒā§āĻ°āĻĻāĻ°ā§āĻļāĻ¨ āĻāĻ°āĻž, āĻāĻŦāĻ āĻ¯āĻ¤āĻāĻž āĻ¸āĻŽā§āĻāĻŦ āĻĒā§āĻā§āĻāĻžāĻ¨ā§āĻĒā§āĻā§āĻāĻāĻžāĻŦā§ āĻĒā§āĻ°āĻāĻ˛ā§āĻĒā§āĻ° āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻŖ āĻ¨āĻž āĻāĻ°āĻžāĨ¤ āĻāĻĒāĻ¨āĻŋ āĻ¯āĻĻāĻŋ āĻŦāĻĄāĻŧ āĻāĻŦāĻ āĻāĻ°āĻ āĻ¸ā§āĻ¨ā§āĻĻāĻ° āĻā§āĻ˛ āĻāĻžāĻ¨ āĻ¤āĻŦā§ āĻāĻĒāĻ¨āĻŋ āĻ¸āĻ°ā§āĻŦāĻĻāĻž āĻ¤āĻžāĻĻā§āĻ° āĻĒā§āĻ°āĻļāĻāĻ¸āĻž āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨
āĻāĻĒāĻ¸āĻāĻšāĻžāĻ°
āĻā§āĻ°āĻŽāĻŦāĻ°ā§āĻ§āĻŽāĻžāĻ¨ āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻŖā§āĻ° āĻ āĻ¨ā§āĻļā§āĻ˛āĻ¨ā§āĻ° āĻ¸āĻžāĻĨā§ āĻāĻāĻ¸āĻžāĻĨā§ āĻĒā§āĻ°āĻāĻ˛ā§āĻĒāĻā§āĻ˛āĻŋ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻ¤ā§ āĻāĻ¯āĻŧā§āĻŦ āĻĒāĻ°āĻŋāĻˇā§āĻŦāĻžāĻā§āĻ˛āĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻā§āĻĄ āĻŽāĻžāĻ°ā§āĻ āĻāĻ°āĻžāĻ° āĻ¸āĻžāĻĨā§ āĻ¸āĻžāĻĨā§āĻ āĻāĻĒāĻ¨āĻŋ āĻ āĻ¨ā§āĻ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻž āĻā§āĻāĻā§ āĻĒā§āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨āĨ¤ āĻ¯āĻžāĻāĻšā§āĻ, āĻāĻāĻāĻŋ āĻŦāĻŋāĻ˛ā§āĻĄ āĻ¯āĻĨā§āĻˇā§āĻ āĻ¨āĻžāĻ āĻšāĻ¤ā§ āĻĒāĻžāĻ°ā§, āĻ¤āĻžāĻ āĻ¸ā§āĻā§āĻ¯āĻžāĻāĻŋāĻ āĻ ā§āĻ¯āĻžāĻ¨āĻžāĻ˛āĻžāĻāĻ¸āĻŋāĻ¸ āĻ¸āĻš āĻā§āĻ¸ā§āĻāĻŋāĻ āĻ¸ā§āĻ āĻāĻĒ āĻāĻ°āĻž āĻā§āĻĄā§āĻ° āĻā§āĻŖāĻŽāĻžāĻ¨āĻā§ āĻāĻ˛ā§āĻ˛ā§āĻāĻ¯ā§āĻā§āĻ¯āĻāĻžāĻŦā§ āĻāĻ¨ā§āĻ¨āĻ¤ āĻāĻ°āĻŦā§āĨ¤
āĻĻāĻ°āĻāĻžāĻ°ā§ āĻ˛āĻŋāĻā§āĻ
Linux āĻāĻŦāĻ macOS-āĻ PVS-Studio āĻāĻžāĻ˛ā§ āĻāĻ°āĻž āĻšāĻā§āĻā§ āĻĄāĻāĻžāĻ°ā§ āĻĒāĻŋāĻāĻŋāĻāĻ¸-āĻ¸ā§āĻā§āĻĄāĻŋāĻ āĻāĻžāĻ˛ā§ āĻāĻ°āĻž āĻšāĻā§āĻā§ āĻā§āĻ°ā§āĻ¯āĻžāĻāĻŋāĻ¸ āĻ¸āĻŋāĻāĻ āĻĄāĻā§āĻŽā§āĻ¨ā§āĻā§āĻļāĻ¨
āĻāĻĒāĻ¨āĻŋ āĻ¯āĻĻāĻŋ āĻāĻ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻāĻŋ āĻāĻāĻ°ā§āĻā§-āĻāĻžāĻˇā§ āĻļā§āĻ°ā§āĻ¤āĻžāĻĻā§āĻ° āĻ¸āĻžāĻĨā§ āĻāĻžāĻ āĻāĻ°āĻ¤ā§ āĻāĻžāĻ¨ āĻ¤āĻŦā§ āĻ
āĻ¨ā§āĻā§āĻ°āĻš āĻāĻ°ā§ āĻ
āĻ¨ā§āĻŦāĻžāĻĻ āĻ˛āĻŋāĻā§āĻāĻāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§āĻ¨: āĻŽā§āĻ¯āĻžāĻā§āĻ¸āĻŋāĻŽ āĻāĻžāĻā§āĻ¯āĻžāĻāĻŋāĻ¨ā§āĻāĻ¸ā§āĻāĨ¤
āĻāĻ¤ā§āĻ¸: www.habr.com