// Copyright (C) 2009 Apple Inc. All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions
// are met:
// 1. Redistributions of source code must retain the above copyright
//    notice, this list of conditions and the following disclaimer.
// 2. Redistributions in binary form must reproduce the above copyright
//    notice, this list of conditions and the following disclaimer in the
//    documentation and/or other materials provided with the distribution.
//
// THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
// PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 

MAJOR_VERSION = 613;
MINOR_VERSION = 1;
TINY_VERSION = 6;
MICRO_VERSION = 0;
NANO_VERSION = 0;
FULL_VERSION = $(MAJOR_VERSION).$(MINOR_VERSION).$(TINY_VERSION);

// The bundle version and short version string are set based on the current build configuration, see below.
BUNDLE_VERSION = $(BUNDLE_VERSION_$(CONFIGURATION));
SHORT_VERSION_STRING = $(SHORT_VERSION_STRING_$(CONFIGURATION))

// The system version prefix is based on the current system version.
SYSTEM_VERSION_PREFIX = $(SYSTEM_VERSION_PREFIX_$(PLATFORM_NAME)_$(TARGET_MAC_OS_X_VERSION_MAJOR));
SYSTEM_VERSION_PREFIX_macosx_101400 = 14;
SYSTEM_VERSION_PREFIX_macosx_101500 = 15;
SYSTEM_VERSION_PREFIX_macosx_110000 = 16;
SYSTEM_VERSION_PREFIX_macosx_120000 = 17;
SYSTEM_VERSION_PREFIX_macosx_130000 = 18;
SYSTEM_VERSION_PREFIX[sdk=iphone*] = 8;

// The production build always uses the full version with a system version prefix.
BUNDLE_VERSION_Production = $(SYSTEM_VERSION_PREFIX)$(FULL_VERSION);
BUNDLE_VERSION_ = $(BUNDLE_VERSION_Production);

// The production build always uses the major version with a system version prefix
SHORT_VERSION_STRING_Production = $(SYSTEM_VERSION_PREFIX)$(MAJOR_VERSION);
SHORT_VERSION_STRING_ = $(SHORT_VERSION_STRING_Production);

// Local builds are the full version with a plus suffix.
BUNDLE_VERSION_Release = $(FULL_VERSION)+;
BUNDLE_VERSION_Debug = $(BUNDLE_VERSION_Release);

// Local builds use the major version with a plus suffix
SHORT_VERSION_STRING_Release = $(MAJOR_VERSION)+;
SHORT_VERSION_STRING_Debug = $(SHORT_VERSION_STRING_Release);

DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = $(FULL_VERSION);
