# $Id: modules,v 1.3 2010/06/26 23:33:14 tom Exp $
##############################################################################
# Copyright (c) 2010 Free Software Foundation, Inc.                          #
#                                                                            #
# Permission is hereby granted, free of charge, to any person obtaining a    #
# copy of this software and associated documentation files (the "Software"), #
# to deal in the Software without restriction, including without limitation  #
# the rights to use, copy, modify, merge, publish, distribute, distribute    #
# with modifications, sublicense, and/or sell copies of the Software, and to #
# permit persons to whom the Software is furnished to do so, subject to the  #
# following conditions:                                                      #
#                                                                            #
# The above copyright notice and this permission notice shall be included in #
# all copies or substantial portions of the Software.                        #
#                                                                            #
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR #
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,   #
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL    #
# THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER      #
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING    #
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER        #
# DEALINGS IN THE SOFTWARE.                                                  #
#                                                                            #
# Except as contained in this notice, the name(s) of the above copyright     #
# holders shall not be used in advertising or otherwise to promote the sale, #
# use or other dealings in this Software without prior written               #
# authorization.                                                             #
##############################################################################
#
# Author: Thomas E. Dickey	2010
#

# Library objects
# rootname				depend-spec	depend-body	unit
$(ALIB)					$(srcdir)	none		spec
$(ABASE)-aux				none		$(srcdir)	body
$(ABASE)				none		.		body
$(ABASE)-terminfo			$(srcdir)	$(srcdir)	body
$(ABASE)-termcap			$(srcdir)	$(srcdir)	body
$(ABASE)-putwin				$(srcdir)	$(srcdir)	body
$(ABASE)-trace				.		.		body
$(ABASE)-mouse				.		$(srcdir)	body
$(ABASE)-panels				.		$(srcdir)	body
$(ABASE)-menus				.		$(srcdir)	body
$(ABASE)-forms				.		$(srcdir)	body
$(ABASE)-forms-field_types		.		$(srcdir)	body
$(ABASE)-forms-field_types-alpha	$(srcdir)	$(srcdir)	body
$(ABASE)-forms-field_types-alphanumeric	$(srcdir)	$(srcdir)	body
$(ABASE)-forms-field_types-intfield	$(srcdir)	$(srcdir)	body
$(ABASE)-forms-field_types-numeric	$(srcdir)	$(srcdir)	body
$(ABASE)-forms-field_types-regexp	$(srcdir)	$(srcdir)	body
$(ABASE)-forms-field_types-enumeration	$(srcdir)	$(srcdir)	body
$(ABASE)-forms-field_types-ipv4_address	$(srcdir)	$(srcdir)	body
$(ABASE)-forms-field_types-user		$(srcdir)	$(srcdir)	body
$(ABASE)-forms-field_types-user-choice	$(srcdir)	$(srcdir)	body
$(ABASE)-text_io			$(srcdir)	$(srcdir)	body
$(ABASE)-text_io-aux			$(srcdir)	$(srcdir)	body
$(ABASE)-menus-menu_user_data		.		$(srcdir)	body
$(ABASE)-menus-item_user_data		.		$(srcdir)	body
$(ABASE)-forms-form_user_data		.		$(srcdir)	body
$(ABASE)-forms-field_user_data		.		$(srcdir)	body
$(ABASE)-forms-field_types-enumeration-ada $(srcdir)	$(srcdir)	body
$(ABASE)-panels-user_data		.		$(srcdir)	body
$(ABASE)-text_io-integer_io		$(srcdir)	$(srcdir)	body
$(ABASE)-text_io-float_io		$(srcdir)	$(srcdir)	body
$(ABASE)-text_io-fixed_io		$(srcdir)	$(srcdir)	body
$(ABASE)-text_io-decimal_io		$(srcdir)	$(srcdir)	body
$(ABASE)-text_io-enumeration_io		$(srcdir)	$(srcdir)	body
$(ABASE)-text_io-modular_io		$(srcdir)	$(srcdir)	body
$(ABASE)-text_io-complex_io		$(srcdir)	$(srcdir)	body
