Skip to content
Snippets Groups Projects
GNUmakefile 3.36 KiB
# GNUmakefile

#########################################################################
# Makefile for Synchronet monitor for Unix								#
# For use with GNU make and GNU C Compiler or Borland Kylix C++			#
# @format.tab-size 4, @format.use-tabs true								#
#																		#
# gcc: gmake															#
# Borland (still in testing/debuging stage): gmake bcc=1				#
#																		#
# Optional build targets: dlls, utils, mono, all (default)				#
#########################################################################

# $Id$

#USE_CURSES	:=	1	#Use old curses UIFC implementation
USE_UIFC32	:=	1	# Use new uifc32 implementation

# Macros
ifndef RELEASE
 ifndef DEBUG
  RELEASE	:=	1
 endif
endif

ifdef DEBUG
 BUILD	=	debug
 CFLAGS	+=	-g
else
 BUILD	=	release
endif

ifdef bcc
 CC		=	bc++ -q
 CCPRE	:=	bcc
 CXX	=	bc++ -q
 LD		=	ilink -q
 CFLAGS +=	-mm -md -D__unix__ -w-csu -w-pch -w-ccc -w-rch -w-par -w-aus
else
 CFLAGS	+=	-MMD -Wall
 CCPRE	?=	gcc
 ifdef BUILD_DEPENDS
  CC	=	../../build/mkdep -a
  CXX	=	../../build/mkdep -a
  LD	=	echo
  COMPILE_MSG	:= Depending
 else
  CC	?=	gcc
  CXX	?=	g++
  LD	?=	ld
  COMPILE_MSG	:= Compiling
 endif
endif
OFILE	=	o

LIBFILE	=	.a
UIFC	=	../../uifc/
XPDEV	=	../../xpdev/
SBBS3	=   ../

ifndef os
 os		:=	$(shell uname)
endif
# this line wont work with solaris unless awk in path is actually gawk 
os      :=	$(shell echo $(os) | tr "[A-Z]" "[a-z]")
#os      :=	$(shell echo $(os) | awk '/.*/ { print tolower($$1)}')
# remove '/' from "os/2"
os      :=  $(shell echo $(os) | tr -d "/")

LIBODIR :=	$(CCPRE).$(os).lib.$(BUILD)
EXEODIR :=	$(CCPRE).$(os).exe.$(BUILD)

DELETE	=	rm -f

CFLAGS	+=	-I../../include/mozilla/js -I$(XPDEV) -I$(UIFC) -I$(SBBS3)
LFLAGS	+=	-lcurses

ifeq ($(os),netbsd)
 CFLAGS	+=	-D__unix__ -I/usr/pkg/include
endif

# So far, only QNX has sem_timedwait() 
ifeq ($(os),qnx)
 LFLAGS := -lm -lsocket
else
 CFLAGS +=      -DUSE_XP_SEMAPHORES
 USE_XP_SEMAPHORES      :=      1
endif

vpath %.c $(UIFC) $(XPDEV) $(SBBS3)
vpath %.cpp $(SBBS3)

OBJS	:=	$(LIBODIR)/filewrap.o \
			$(LIBODIR)/chat.o \
			$(LIBODIR)/sockwrap.o \
			$(LIBODIR)/dirwrap.o \
			$(LIBODIR)/genwrap.o \
			$(LIBODIR)/sbbs_ini.o \
			$(LIBODIR)/ini_file.o \
			$(LIBODIR)/scfglib1.o \
			$(LIBODIR)/scfglib2.o \
			$(LIBODIR)/nopen.o \
			$(LIBODIR)/userdat.o \
			$(LIBODIR)/ars.o \
			$(LIBODIR)/dat_rec.o \
			$(LIBODIR)/str_util.o \
			$(LIBODIR)/crc16.o \
			$(LIBODIR)/load_cfg.o \
			$(LIBODIR)/date_str.o \
			$(LIBODIR)/spyon.o \
			$(LIBODIR)/smblib.o \
			$(LIBODIR)/getstats.o \
			$(LIBODIR)/getmail.o \
			$(LIBODIR)/umonitor.o

ifdef USE_CURSES
 OBJS	+=	$(LIBODIR)/uifcc.o
endif

ifdef USE_UIFC32
 OBJS	+=	$(LIBODIR)/uifc32.o \
		$(LIBODIR)/ciowrap.o
endif

all: $(LIBODIR) $(BUILD_DEPENDS)$(EXEODIR)/umonitor

FORCE$(EXEODIR)/umonitor: $(EXEODIR) $(OBJS) $(BUILD_DEPENDS)

$(EXEODIR)/umonitor: $(EXEODIR) $(OBJS) $(BUILD_DEPENDS)
	@echo Linking $@
	@$(CC) $(LFLAGS) $(OBJS) -o $@

# Implicit C Compile Rule for utils
$(LIBODIR)/%.o : %.c $(LIBODIR) $(BUILD_DEPENDS)
   ifndef bcc
	@echo $(COMPILE_MSG) $<
   endif
	@$(CC) $(CFLAGS) -o $@ -c $<

$(LIBODIR):
	mkdir $(LIBODIR)

$(EXEODIR):
	mkdir $(EXEODIR)

clean:
	@$(DELETE) $(LIBODIR)/*
	@$(DELETE) $(EXEODIR)/*

depend:
	@$(DELETE) $(LIBODIR)/.depend
	@$(DELETE) $(EXEODIR)/.depend
	$(MAKE) BUILD_DEPENDS=FORCE

FORCE:

-include $(LIBODIR)/.depend
-include $(EXEODIR)/.depend
-include $(LIBODIR)/*.d
-include $(EXEODIR)/*.d