# Copyright 2014 Google Inc. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# Make a copy of this file and name it 'syzyzy.gyp_env' to automatically set
# some GYP variables locally.

{
  # Here's some examples:

  # Default to ninja-msvs & ninja projects.
  # If you don't use MSVS for editing projects, you can remove the
  # "ninja-msvs" part for a little quicker project generation.
  'GYP_GENERATORS': 'ninja,msvs-ninja',

  # Uncomment this for an official build.
  #'GYP_DEFINES': 'official_build=1',
}
