# Customize Makefile.maint for Bison.            -*- makefile -*-
# Copyright (C) 2003, 2005, 2006 Free Software Foundation, Inc.

# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.

# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.

# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
# 02110-1301, USA.

build_aux_dir = $(srcdir)/build-aux
prev_version_file = $(build_aux_dir)/prev-version.txt
announce_gen   = $(build_aux_dir)/announce-gen
release_archive_dir = releases

# Use alpha.gnu.org for alpha and beta releases.
# Use ftp.gnu.org for major releases.
gnu_ftp_host-alpha = alpha
gnu_ftp_host-beta = alpha
gnu_ftp_host-major = ftp
gnu_rel_host = $(gnu_ftp_host-$(RELEASE_TYPE))

url_dir_list = \
  ftp://$(gnu_rel_host).gnu.org/gnu/bison

# Files to update automatically.
wget_files = \
  $(build_aux_dir)/config.guess \
  $(build_aux_dir)/config.sub \
  $(build_aux_dir)/texinfo.tex \

cvs_files = \
  $(build_aux_dir)/install-sh \
  $(build_aux_dir)/mdate-sh \
  $(build_aux_dir)/missing \
  $(build_aux_dir)/mkinstalldirs

# Tests not to run.
local-checks-to-skip = \
  changelog-check
