#***************************************************************************
#                                  _   _ ____  _
#  Project                     ___| | | |  _ \| |
#                             / __| | | | |_) | |
#                            | (__| |_| |  _ <| |___
#                             \___|\___/|_| \_\_____|
#
# Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
# are also available at https://curl.haxx.se/docs/copyright.html.
#
# You may opt to use, copy, modify, merge, publish, distribute and/or sell
# copies of the Software, and permit persons to whom the Software is
# furnished to do so, under the terms of the COPYING file.
#
# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
# KIND, either express or implied.
#
###########################################################################
#
# curl Makefile for AmigaOS ...
#

# change the follow to where you have the AmiTCP SDK v4.3 includes:

ATCPSDKI= /GG/netinclude


CC = m68k-amigaos-gcc
CFLAGS  = -I$(ATCPSDKI) -m68020-60 -O2 -msoft-float -noixemul -g -I. -I../include -W -Wall
LIBS    = ../lib/libcurl.a -lssl -lcrypto -lz
MANPAGE = ../docs/curl.1
README  = ../docs/MANUAL
MKHELP  = ../src/mkhelp.pl

include Makefile.inc

OBJS = $(CURL_CFILES:.c=.o) $(CURLX_CFILES:.c=.o)

all: tool_hugehelp.c $(OBJS)
	$(CC) $(CFLAGS) -o curl $(OBJS) $(LIBS) -Wl,-Map,curl.map,--cref

tool_hugehelp.c: $(README) $(MANPAGE)  mkhelp.pl
	rm -f tool_hugehelp.c
	/bin/nroff -man $(MANPAGE) | /bin/perl $(MKHELP) -c $(README) > tool_hugehelp.c

install:
	$(INSTALL) -c curl /c/curl
