#################################################################
#
## Makefile for building curl.nlm (NetWare version - gnu make)
## Use: make -f Makefile.netware
##
## Comments to: Guenter Knauf <eflash@gmx.net>
#
#################################################################

# Edit the path below to point to the base of your Novell NDK.
BASE	= c:/novell
INSTDIR	= s:/libcurl

# Edit the path below to point to the base of your Zlib sources.
ZLIB_PATH = ../../../cw/zlib-src-1.1.4

# Edit the vars below to change NLM target settings.
TARGET  = curl
VERSION	= $(LIBCURL_VERSION)
COPYR	= Copyright (c) 1996 - 2004, Daniel Stenberg, <daniel@haxx.se>
DESCR	= cURL $(LIBCURL_VERSION_STR) - http://curl.haxx.se
MTSAFE	= YES
STACK	= 64000
SCREEN	= $(TARGET) commandline utility
MODULES	= libcurl.nlm
IMPORTS	= @../lib/libcurl.imp

# Edit the var below to point to your lib architecture.
ifndef LIBARCH
LIBARCH = LIBC
endif

# must be equal to DEBUG or NDEBUG
DB	= NDEBUG
# DB	= DEBUG
# Optimization: -O<n> or debugging: -g
ifeq ($(DB),NDEBUG)
	OPT	= -O2
	OBJDIR	= release
else
	OPT	= -g
	OBJDIR	= debug
endif

# Include the version info retrieved from jk_version.h
-include $(OBJDIR)/version.inc

# The following line defines your compiler.
ifdef METROWERKS
	CC = mwccnlm
else
	CC = gcc
endif
# RM	= rm -f
# CP	= cp -fv
# if you want to mark the target as MTSAFE you will need a tool for
# generating the xdc data for the linker; here's a minimal tool:
# http://www.gknw.de/development/prgtools/mkxdc.zip
MPKXDC	= mkxdc

# Global flags for all compilers
CFLAGS	= $(OPT) -D$(DB) -DNETWARE -nostdinc
CFLAGS	+= -DUSE_MANUAL
#CFLAGS	+= -DHAVE_LIBZ

ifeq ($(CC),mwccnlm)
LD	= mwldnlm
LDFLAGS	= -nostdlib $(PRELUDE) $(OBJDIR)/*.o -o $(OBJDIR)/$(TARGET).nlm -commandfile
CFLAGS	+= -gccinc -inline off -opt nointrinsics
CFLAGS	+= -relax_pointers
#CFLAGS	+= -w on
ifeq ($(LIBARCH),LIBC)
	PRELUDE = $(SDK_LIBC)/imports/libcpre.o
	CFLAGS += -align 4 -inst mmx -proc 686
	CFLAGS += -D_POSIX_SOURCE
#	CFLAGS += -D__ANSIC__
else
	PRELUDE = "$(METROWERKS)/Novell Support/libraries/runtime/prelude.obj"
#	CFLAGS += -include "$(METROWERKS)/Novell Support/headers/nlm_prefix.h"
	CFLAGS += -align 1 -proc 586
endif
else
LD	= nlmconv
LDFLAGS	= -T
CFLAGS	+= -fno-builtin -fpack-struct -fpcc-struct-return
CFLAGS	+= -Wall #-Wno-main # -pedantic
ifeq ($(LIBARCH),LIBC)
	PRELUDE = $(SDK_LIBC)/imports/libcpre.gcc.o
	CFLAGS += -D_POSIX_SOURCE
#	CFLAGS += -D__ANSIC__
else
	PRELUDE = $(SDK_CLIB)/imports/clibpre.gcc.o
	CFLAGS += -include $(BASE)/nlmconv/genlm.h
endif
endif

LDLIBS	=

NDK_ROOT = $(BASE)/ndk
SDK_CLIB = $(NDK_ROOT)/nwsdk
SDK_LIBC = $(NDK_ROOT)/libc
SDK_LDAP = $(NDK_ROOT)/cldapsdk/netware
CURL_INC = ../include
CURL_LIB = ../lib

INCLUDES = -I$(CURL_INC) -I$(CURL_LIB)
INCLUDES += -I$(ZLIB_PATH)

ifeq ($(LIBARCH),LIBC)
	INCLUDES += -I$(SDK_LIBC)/include -I$(SDK_LIBC)/include/nks
	INCLUDES += -I$(SDK_LIBC)/include/winsock
	INCLUDES += -I$(SDK_LDAP)/libc/inc
else
	INCLUDES += -I$(SDK_CLIB)/include/nlm -I$(SDK_CLIB)/include
	INCLUDES += -I$(SDK_LDAP)/clib/inc
	CFLAGS += -DNETDB_USE_INTERNET
endif
CFLAGS	+= $(INCLUDES)

ifeq ($(MTSAFE),YES)
	XDCDATA = $(OBJDIR)/$(TARGET).xdc
endif

ifeq ($(OSTYPE),linux)
DL	= '
-include $(BASE)/nlmconv/ncpfs.inc
endif

OBJS	= \
	$(OBJDIR)/main.o \
	$(OBJDIR)/hugehelp.o \
	$(OBJDIR)/urlglob.o \
	$(OBJDIR)/writeout.o \
	$(OBJDIR)/getpass.o \
	$(OBJDIR)/homedir.o


all: $(OBJDIR) $(OBJDIR)/version.inc $(OBJDIR)/$(TARGET).nlm 

$(OBJDIR)/%.o: %.c
	@echo Compiling $<
	@$(CC) $(CFLAGS) -c $< -o $@

$(OBJDIR)/version.inc: $(CURL_INC)/curl/curl.h $(OBJDIR)
	@echo Creating $@
	@awk -f ../packages/netware/get_ver.awk $< > $@

dist: all
	-$(RM) $(OBJDIR)/*.o $(OBJDIR)/$(TARGET).map $(OBJDIR)/$(TARGET).ncv
	-$(RM) $(OBJDIR)/$(TARGET).def $(OBJDIR)/version.inc $(XDCDATA)
#	-$(CP) ../changes.txt $(OBJDIR)/

install: all
	@[ -d $(INSTDIR) ] || mkdir $(INSTDIR)
	@$(CP) $(TARGET).nlm $(INSTDIR)

clean:
	-$(RM) -r $(OBJDIR)

$(OBJDIR):
	@mkdir $(OBJDIR)

$(OBJDIR)/$(TARGET).nlm: $(OBJS) $(OBJDIR)/$(TARGET).def $(XDCDATA)
	@echo Linking $@
	@-$(RM) $@
	@$(LD) $(LDFLAGS) $(OBJDIR)/$(TARGET).def

$(OBJDIR)/%.xdc: Makefile.netware
	@echo Creating $@
	@$(MPKXDC) $(XDCOPT) $@

$(OBJDIR)/%.def: Makefile.netware
	@echo $(DL)# DEF file for linking with $(LD)$(DL) > $@
	@echo $(DL)# Do not edit this file - it is created by make!$(DL) >> $@
	@echo $(DL)# All your changes will be lost!!$(DL) >> $@
	@echo $(DL)#$(DL) >> $@
	@echo $(DL)copyright "$(COPYR)"$(DL) >> $@
	@echo $(DL)description "$(DESCR)"$(DL) >> $@
	@echo $(DL)version $(VERSION)$(DL) >> $@
ifdef NLMTYPE
	@echo $(DL)type $(NLMTYPE)$(DL) >> $@
endif
ifdef STACK
	@echo $(DL)stack $(STACK)$(DL) >> $@
endif
ifdef SCREEN
	@echo $(DL)screenname "$(SCREEN)"$(DL) >> $@
else
	@echo $(DL)screenname "DEFAULT"$(DL) >> $@
endif
ifeq ($(DB),DEBUG)
	@echo $(DL)debug$(DL) >> $@
endif
	@echo $(DL)threadname "$(TARGET)"$(DL) >> $@
ifdef XDCDATA
	@echo $(DL)xdcdata $(XDCDATA)$(DL) >> $@
endif
ifeq ($(LIBARCH),CLIB)
	@echo $(DL)start _Prelude$(DL) >> $@
	@echo $(DL)exit _Stop$(DL) >> $@
	@echo $(DL)import @$(SDK_CLIB)/imports/clib.imp$(DL) >> $@
	@echo $(DL)import @$(SDK_CLIB)/imports/threads.imp$(DL) >> $@
	@echo $(DL)import @$(SDK_CLIB)/imports/nlmlib.imp$(DL) >> $@
	@echo $(DL)import @$(SDK_CLIB)/imports/socklib.imp$(DL) >> $@
	@echo $(DL)import @$(SDK_LDAP)/clib/imports/ldapsdk.imp$(DL) >> $@
	@echo $(DL)import @$(SDK_LDAP)/clib/imports/ldapssl.imp$(DL) >> $@
	@echo $(DL)import @$(SDK_LDAP)/clib/imports/ldapx.imp$(DL) >> $@
	@echo $(DL)module clib$(DL) >> $@
else
ifeq ($(LD),nlmconv)
	@echo $(DL)flag_on 64$(DL) >> $@
else
	@echo $(DL)autounload$(DL) >> $@
endif
	@echo $(DL)pseudopreemption$(DL) >> $@
	@echo $(DL)start _LibCPrelude$(DL) >> $@
	@echo $(DL)exit _LibCPostlude$(DL) >> $@
	@echo $(DL)check _LibCCheckUnload$(DL) >> $@
	@echo $(DL)import @$(SDK_LIBC)/imports/libc.imp$(DL) >> $@
	@echo $(DL)import @$(SDK_LIBC)/imports/netware.imp$(DL) >> $@
	@echo $(DL)import @$(SDK_LDAP)/libc/imports/lldapsdk.imp$(DL) >> $@
	@echo $(DL)import @$(SDK_LDAP)/libc/imports/lldapssl.imp$(DL) >> $@
	@echo $(DL)import @$(SDK_LDAP)/libc/imports/lldapx.imp$(DL) >> $@
	@echo $(DL)module libc$(DL) >> $@
endif
ifdef MODULES
	@echo $(DL)module $(MODULES)$(DL) >> $@
endif
ifdef EXPORTS
	@echo $(DL)export $(EXPORTS)$(DL) >> $@
endif
ifdef IMPORTS
	@echo $(DL)import $(IMPORTS)$(DL) >> $@
endif
ifeq ($(LD),nlmconv)
	@echo $(DL)input $(OBJS)$(DL) >> $@
	@echo $(DL)input $(PRELUDE)$(DL) >> $@
	@echo $(DL)output $(TARGET).nlm$(DL) >> $@
endif

