# Copyright (c) 2009 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

{
  'variables': {
    'conditions': [
      [ 'OS=="linux" or OS=="freebsd" or OS=="openbsd"', {
        # Link to system .so since we already use it due to GTK.
        'use_system_libpng%': 1,
      }, {  # OS!="linux" and OS!="freebsd" and OS!="openbsd"
        'use_system_libpng%': 0,
      }],
    ],
  },
  'conditions': [
    ['use_system_libpng==0', {
      'targets': [
        {
          'target_name': 'libpng',
          'type': '<(component)',
          'dependencies': [
            '../zlib/zlib.gyp:zlib',
          ],
          'msvs_guid': 'C564F145-9172-42C3-BFCB-6014CA97DBCD',
          'sources': [
            'src/png.c',
            'src/png.h',
            'src/pngconf.h',
            'src/pngerror.c',
            'src/pnggccrd.c',
            'src/pngget.c',
            'src/pngmem.c',
            'src/pngpread.c',
            'src/pngread.c',
            'src/pngrio.c',
            'src/pngrtran.c',
            'src/pngrutil.c',
            'src/pngset.c',
            'src/pngtrans.c',
            'src/pngusr.h',
            'src/pngvcrd.c',
            'src/pngwio.c',
            'src/pngwrite.c',
            'src/pngwtran.c',
            'src/pngwutil.c',
          ],
          'direct_dependent_settings': {
            'include_dirs': [
              'src/',
            ],
            'defines': [
              # We end up including setjmp.h directly, but libpng
              # doesn't like that. This define tells libpng to not
              # complain about our inclusion of setjmp.h.
              'PNG_SKIP_SETJMP_CHECK',
            ],
          },
          'export_dependent_settings': [
            '../zlib/zlib.gyp:zlib',
          ],
          'conditions': [
            ['OS!="win"', {'product_name': 'png'}],
            ['OS=="win" and component=="shared_library"', {
              'defines': [
                'PNG_BUILD_DLL',
                'PNG_NO_MODULEDEF',
              ],
              'direct_dependent_settings': {
                'defines': [
                  'PNG_USE_DLL',
                ],
              },
            }],
          ],
        },
      ]
    }, {
      'conditions': [
        ['sysroot!=""', {
          'variables': {
            'pkg-config': '../../build/linux/pkg-config-wrapper "<(sysroot)"',
          },
        }, {
          'variables': {
            'pkg-config': 'pkg-config'
          },
        }],
      ],
      'targets': [
        {
          'target_name': 'libpng',
          'type': 'none',
          'dependencies': [
            '../zlib/zlib.gyp:zlib',
          ],
          'variables': {
            # Quoth libpagespeed's libpng.gyp:
            # "The PNG_FREE_ME_SUPPORTED define was dropped in libpng
            #  1.4.0beta78, with its behavior becoming the default
            #  behavior."
            #
            # Hence, we define it ourselves for version >= 1.4.0 so that
            # libpagespeed's code (which checks PNG_FREE_ME_SUPPORTED for
            # compatibility with earlier versions) will run with both earlier
            # and later versions of libpng.
            #
            # This detects the version and sets the variable to non-zero for
            # pre-1.4 versions.
            'png_free_me_suported_define_in_libpng' :
              '<!(<(pkg-config) --atleast-version=1.4.0 libpng; echo $?)'
          },
          'direct_dependent_settings': {
            'cflags': [
              '<!@(<(pkg-config) --cflags libpng)',
            ],
            'defines+': [
              'USE_SYSTEM_LIBPNG',
              'DBG=<(png_free_me_suported_define_in_libpng)',

              # We end up including setjmp.h directly, but libpng
              # doesn't like that. This define tells libpng to not
              # complain about our inclusion of setjmp.h.
              'PNG_SKIP_SETJMP_CHECK',
            ],
          },
          'conditions': [
            ['<(png_free_me_suported_define_in_libpng)==0', {
              'direct_dependent_settings': {
                'defines+': [
                  'PNG_FREE_ME_SUPPORTED',
                ],
              }
            }],
          ],
          'link_settings': {
            'ldflags': [
              '<!@(<(pkg-config) --libs-only-L --libs-only-other libpng)',
            ],
            'libraries': [
              '<!@(<(pkg-config) --libs-only-l libpng)',
            ],
          },
        },
      ],
    }],
  ],
}

# Local Variables:
# tab-width:2
# indent-tabs-mode:nil
# End:
# vim: set expandtab tabstop=2 shiftwidth=2:
