# Prerequisites
*.d

# Precompiled headers
*.gch
*.pch

# Object files
*.slo
*.lo
*.o
*.obj

# Linker output files
*.exp
*.ilk
*.map

# Compiled dynamic libraries
*.dll
*.dylib
*.so
*.so.*

# Compiled static libraries
*.a
*.la
*.lai
*.lib

# Compiled executables
*.app/
*.exe
a.out

# Debug files
*.dSYM/
*.dmp
*.idb
*.pdb
*.su
*.sym
*.tds
core
core.[0-9]*
!core/

# Tag files
TAGS
.TAGS
!TAGS/
tags
.tags
!tags/
gtags.files
GTAGS
GRTAGS
GPATH
GSYMS
cscope.files
cscope.out
cscope.*.out

# Text editing and text processing artifacts
\#*\#
.\#*
[._]*.sw[a-p]
[._]sw[a-p]
*.bak
*.orig
*.rej
*.tmp
*~

# IDE files and directories
## Eclipse
.cproject/
.project/
.settings/
## Embarcadero RAD Studio
*.cbproj.*
__recovery/
## JetBrains
.idea/
## NetBeans
nbbuild/
nbdist/
nbproject/
## Visual Studio 2015 and newer
.vs/
## Visual Studio Code
.vscode/*
!.vscode/extensions.json
!.vscode/launch.json
!.vscode/settings.json
!.vscode/tasks.json
## Xcode 9 and newer
xcuserdata/
## (Various)
*.*cache
*.cache*
[._]*_history
.history/
[Bb]ackup*/
CMakeLists.txt.user*
CMakeUserPresets.json

# Build, test and CI output directories
[._]build*/
/[Bb]uild/
/[Oo]ut/
*[Dd]ebug/
[Dd]ebug*/
*[Rr]elease/
[Rr]elease*/

# Libpng configuration and auxiliary build artifacts
*.out
*out.png
[._]deps/
[._]libs/
.dirstamp
/Makefile
/autom4te.cache/
/config*~
/config.h
/config.log
/config.status
/install*~
/libpng*-config
/libpng*.pc
/libpng.vers
/libtool
/stamp-h1
pnglibconf.[ch]
pnglibconf.dfn
pnglibconf.pre
pngprefix.h

# Libpng test programs, scripts and artifacts
/test-suite.log
/tests/*.log
/tests/*.trs
/png-fix-itxt
/pngcp
/pngfix
/pngimage
/pngstest
/pngtest
/pngunknown
/pngvalid
/timepng
