########################################################################
#                                                                      #
#                                                                      #
#    *****                       *****                                 #
#      *****                   *****                                   #
#        *****               *****                                     #
#          *****           *****                                       #
#  ***************       ***************                               #
#  *****************   *****************                               #
#  ***************       ***************                               #
#          *****           *****           TheNetNode                  #
#        *****               *****         Portable                    #
#      *****                   *****       Network                     #
#    *****                       *****     Software                    #
#                                                                      #
# This file is part of "TheNetNode" - Software Package                 #
#                                                                      #
# Copyright (C) 1998  NORD><LINK e.V. Braunschweig                     #
#                                                                      #
# This program is free software; you can redistribute it and/or modify #
# it under the terms of the NORD><LINK ALAS (Allgemeine Lizenz fuer    #
# Amateurfunk Software) as published by Hans Georg Giese (DF2AU)       #
# on 13/Oct/1992; either version 1, or (at your option) any later      #
# version.                                                             #
#                                                                      #
# This program is distributed WITHOUT ANY WARRANTY only for further    #
# development and learning purposes. See the ALAS (Allgemeine Lizenz   #
# fuer Amateurfunk Software).                                          #
#                                                                      #
# You should have received a copy of the NORD><LINK ALAS (Allgemeine   #
# Lizenz fuer Amateurfunk Software) along with this program; if not,   #
# write to NORD><LINK e.V., Hinter dem Berge 5, D-38108 Braunschweig   #
#                                                                      #
# Dieses Programm ist PUBLIC DOMAIN, mit den Einschraenkungen durch    #
# die ALAS (Allgemeine Lizenz fuer Amateurfunk Software), entweder     #
# Version 1, veroeffentlicht von Hans Georg Giese (DF2AU),             #
# am 13.Oct.1992, oder (wenn gewuenscht) jede spaetere Version.        #
#                                                                      #
# Dieses Programm wird unter Haftungsausschluss vertrieben, aus-       #
# schliesslich fuer Weiterentwicklungs- und Lehrzwecke. Naeheres       #
# koennen Sie der ALAS (Allgemeine Lizenz fuer Amateurfunk Software)   #
# entnehmen.                                                           #
#                                                                      #
# Sollte dieser Software keine ALAS (Allgemeine Lizenz fuer Amateur-   #
# funk Software) beigelegen haben, wenden Sie sich bitte an            #
# NORD><LINK e.V., Hinter dem Berge 5, D-38108 Braunschweig            #
#                                                                      #
#                                                                      #
########################################################################

#
# Makefile fuer TNN 1.76
# Zusaetzlich zur Linux-Version von TNN kann man mit diesem Makefile
# die DJGPP-Version (auch als GNU32-Version bezeichnet) uebersetzen, und
# zwar sowohl unter Linux als auch unter DOS
#

#
# Wo sind wir denn heut zu Hause?
#
SYSTEM	:= $(shell uname -s)
ifeq ($(SYSTEM), Linux)
SYSTEM	:= LINUX
else
SYSTEM	:= DOS
endif

#
# src dir's
#
BIN			:= bin
DOC			:= doc
HDR			:= include
LIN			:= os/linux
GO32			:= os/gnu32
SRC			:= src
INI			:= $(LIN)/ini

ifeq ($(SYSTEM), LINUX)
#
# Bei Linux gibt es auch eine Installation in diese Verzeichnisse:
#
TNNDIR			= /usr/local/tnn
TNNSYSEXE		= $(TNNDIR)/sysexe
TNNTEXTCMD		= $(TNNDIR)/textcmd
TNNUSEREXE		= $(TNNDIR)/userexe
TNNPACSAT		= $(TNNDIR)/pacsat

TNNUSER			= nobody

#
# Ein Verteil-Archiv wird auch nur bei Linux generiert
#
NAME			:= $(shell pwd)
NAME			:= $(shell basename $(NAME))
DISTDIR			:= usr/local/src/tnn/$(NAME)
endif

#
# Compiler
#
# Fuer Linux wird der normale Linux-GCC verwendet. Fuer die DOS/GNU32-Version
# wird unter DOS das DJGPP-GCC-Paket verwendet. Unter Linux kann man die
# DOS/GNU32-Version ebenfalls uebersetzen! Benoetigt wird dafuer der
# Linux -> MS-DOS GCC cross-compiler von J.J. van der Heijden - verfuegbar
# unter sunsite.unc.edu:/pub/Linux/devel/msdos
#
ifeq ($(SYSTEM), LINUX)
CC			= gcc
CC-GO32			= gcc-go32
else
CC-GO32 		= gcc
endif

#
# Compiler-Flags
#
WARNINGS		:= -w
#
CFLAGS			:= -funsigned-char $(WARNINGS)
# Die folgende Zeile wegkommentieren, wenn fuer 386 uebersetzt werden soll
CFLAGS			+= -m486
# Die folgende Zeile wegkommentieren, wenn keine Debug-Info gewuenscht
CFLAGS			+= -g

ifeq ($(SYSTEM), LINUX)
CFLAGS			+= -pipe -Dstricmp=strcasecmp -Dstrnicmp=strncasecmp
endif

CFLAGS			+= -I$(HDR) -I$(SRC)

#
# Nun haben wir die gemeinsamen Compiler-Flags fuer GO32 und fuer Linux.
# 

CFLAGS-GO32		:= $(CFLAGS) -I$(GO32)

CFLAGS-LIN		:= $(CFLAGS) -I$(LIN)

#
# Source-, Header- und Object-Files
#
COMMONSRC		:= buffer.c cvs_cmds.c cvs_cvsd.c cvs_serv.c
COMMONSRC		+= cvs_cvrt.c file.c global.c iproute.c
COMMONSRC		+= l2a.c l2b.c l2c.c l2d.c l2e.c l2s.c l2dama.c
COMMONSRC		+= l3a.c l3b.c l3c.c l4.c l7.c l7ccp.c l7cmds.c
COMMONSRC		+= l7host.c l7hstcmd.c l7ip.c l7moni.c l7time.c
COMMONSRC		+= l7utils.c main.c mh.c pacsat.c pacserv.c
VERSRC			:= $(SRC)/version.c
UPDSRC			:= $(SRC)/upd_pas.c

LINUXSRCS		:= $(patsubst %,$(SRC)/%,$(COMMONSRC))
LINUXSRCS		+= $(LIN)/init.c $(LIN)/linux.c $(LIN)/l1linux.c
LINUXSRCS		+= $(LIN)/axipx.c $(LIN)/ax25ip.c
LINUXOBJS		:= $(LINUXSRCS:.c=.o)
VANSRC			:= $(LIN)/vanlinux.c
VANOBJ			:= $(LIN)/vanlinux.o
VEROBJL			:= $(SRC)/version.o

GO32_SRCS		:= $(GO32)/api.c $(GO32)/gnu32.c $(SRC)/16550.c
GO32_SRCS		+= $(SRC)/l1.c $(patsubst %,$(SRC)/%,$(COMMONSRC))
GO32_OBJS		:= $(GO32_SRCS:.c=.obj)
GO32L1			:= $(SRC)/extdev.c $(SRC)/kiss.c $(SRC)/loop.c
GO32L1			+= $(SRC)/par.c $(SRC)/scc.c $(SRC)/tokenrng.c
GO32L1			+= $(SRC)/vanessa.c $(HDR)/kiss.h $(HDR)/vanessa.h
VEROBJG			:= $(SRC)/version.obj

HDRNAMS			:= all.h conversd.h cvs_cmds.h function.h global.h
HDRNAMS			+= host.h icmp.h ip.h ipv.h l2.h l2dama.h l2s.h l3.h
HDRNAMS			+= l4.h stat.h system.h tnn.h typedef.h

LINUXHDRS		:= $(patsubst %,$(HDR)/%,$(HDRNAMS))
LINUXHDRS		+= $(LIN)/linux.h $(LIN)/vanlinux.h $(LIN)/linclude.h
GO32HDRS		:= $(patsubst %,$(HDR)/%,$(HDRNAMS)) $(HDR)/api.h 
GO32HDRS		+= $(HDR)/api32.h $(HDR)/hardware.h $(HDR)/pc.h

MAKEFILE		:= makefile
OTHER			:= alas.txt $(SRC)/config.c $(INI)/ax25ip.cfg
OTHER			+= $(INI)/tnn.ini $(INI)/tnn176.tnb $(INI)/tnn176.pas
OTHER			+= $(INI)/tnnini.all
OTHER			+= $(DOC)/ipxaxip.doc $(DOC)/tnnlinux.doc
OTHER			+= compiler/bc31/tnn.{dsk,prj}
OTHER			+= compiler/bc45/tnn.{dsw,ide}
OTHER			+= os/dos16/{api.c,mem386.c,pc.c,timer_pc.c}

.SUFFIXES:

.SILENT:

.PHONY:		all tnn upd clean dist install baseinstall go32 tnngo32 updgo32

%.o:			%.c
			echo $@
			$(CC) -c $(CFLAGS-LIN) -o $@ $<

%.obj:			%.c
			echo $@
			$(CC-GO32) -c $(CFLAGS-GO32) -o $@ $<

all:			tnn upd

$(LINUXOBJS):		$(LINUXHDRS) $(MAKEFILE)

$(VEROBJL):		$(VERSRC) $(LINUXOBJS) $(VANOBJ)

$(VEROBJG):		$(VERRC) $(GO32_OBJS)

$(GO32_OBJS):		$(GO32HDRS) $(MAKEFILE)

$(SRC)/global.o:	$(SRC)/config.c
$(SRC)/global.obj:	$(SRC)/config.c

$(SRC)/l1.obj:		$(GO32L1)

go32:			tnngo32 updgo32

tnngo32:		$(BIN)/tnngo32

updgo32:		$(BIN)/updgo32

$(BIN):
			echo bin
			mkdir bin

ifeq ($(SYSTEM), LINUX)
#
# erstmal kommt Linux
#
tnn:			$(BIN)/tnn

upd:			$(BIN)/upd_pas

$(VANOBJ):		$(VANSRC) $(LIN)/vanlinux.h $(HDRS) $(MAKEFILE)
			$(CC) -c -O2 $(CFLAGS-LIN) -o $@ $<

$(BIN)/tnn:		$(BIN) $(LINUXOBJS) $(VANOBJ) $(VEROBJL)
			$(CC) $(LINUXOBJS) $(VANOBJ) $(VEROBJL) -o $(BIN)/tnn
			sync
			echo
			echo $(BIN)/tnn done.
			echo

$(BIN)/upd_pas:		$(BIN) $(UPDSRC) $(MAKEFILE)
			$(CC) $(CFLAGS-LIN) -o $(BIN)/upd_pas $(UPDSRC)
			sync
			echo
			echo $(BIN)/upd_pas done.
			echo

$(BIN)/tnngo32:		$(BIN) $(GO32_OBJS) $(VEROBJG)
			$(CC-GO32) $(GO32_OBJS) $(VEROBJG) -o $(BIN)/tnngo32
			chmod 644 $(BIN)/tnngo32
			sync
			echo
			echo $(BIN)/tnngo32 done.
			echo

$(BIN)/updgo32:		$(BIN) $(UPDSRC) $(MAKEFILE)
			$(CC-GO32) $(CFLAGS-GO32) $(UPDSRC) -o $(BIN)/updgo32
			chmod 644 $(BIN)/updgo32
			sync
			echo
			echo $(BIN)/updgo32 done.
			echo

clean:
			rm -f $(LINUXOBJS) $(VANOBJ) $(BIN)/tnn
			rm -f *~ $(LIN)/*~ $(SRC)/*~ $(HDR)/*~ $(DOC)/*~
			rm -f $(INI)/*~ $(GO32)/*~ $(BIN)/tnngo32
			rm -f $(BIN)/tnngo32.exe $(GO32_OBJS) $(VEROBJL)
			rm -f $(VEROBJG) $(BIN)/{upd_pas,upd_pas.exe,updgo32}
			rm -f $(SRC)/upd_pas.{o,obj} $(BIN)/updgo32.exe
			rm -rf usr $(NAME).tgz

dist:
			mkdir -p $(DISTDIR)
			cp -P $(LINUXSRCS) $(LINUXHDRS) $(VANSRC) $(DISTDIR)
			cp -P $(GO32_SRCS) $(GO32HDRS) $(GO32L1) $(DISTDIR)
			cp -P $(VERSRC) $(UPDSRC) $(MAKEFILE) $(DISTDIR)
			cp -P $(OTHER) $(DISTDIR)
			tar cfz $(NAME).tgz $(DISTDIR)
			rm -rf usr

#
# install nur fuer Linux-Version - GO32-Version muss von Hand kopiert werden
#
install:		$(BIN)/tnn
			install -m 0755 -o $(TNNUSER) -d $(TNNDIR)
			install -m 0755 -o $(TNNUSER) -d $(TNNSYSEXE)
			install -m 0755 -o $(TNNUSER) -d $(TNNTEXTCMD)
			install -m 0755 -o $(TNNUSER) -d $(TNNUSEREXE)
			install -m 0755 -o $(TNNUSER) -d $(TNNPACSAT)
			install -m 0755 -o $(TNNUSER) $(BIN)/tnn $(TNNDIR)/tnn

baseinstall:		install
			install -m 0644 -o $(TNNUSER) $(INI)/* $(TNNDIR)

else
#
# nun kommt Dose
#
tnn:			tnngo32

upd:			updgo32

clean:
			erase bin\*
			erase bin\*.exe
			erase src\*.o*
			erase src\*.bak
			erase os\gnu32\*.o*
			erase os\gnu32\*.bak
			erase doc\*.bak
			erase include\*.bak

$(BIN)/tnngo32:		$(BIN) $(GO32_OBJS) $(VEROBJG)
			$(CC-GO32) $(GO32_OBJS) $(VEROBJG) -o $(BIN)/tnngo32
			echo $(BIN)/tnngo32 done.

$(BIN)/updgo32:		$(BIN) $(UPDSRC) $(MAKEFILE)
			$(CC-GO32) $(CFLAGS-GO32) $(UPDSRC) -o $(BIN)/updgo32
			echo $(BIN)/updgo32 done.
endif
