###################################################################
#
## Makefile for building javacurl.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.
ifndef NDKBASE
NDKBASE	= c:/novell
endif

# Edit the path below to point to the base of your Zlib sources.
ifndef ZLIB_PATH
#ZLIB_PATH = ../../zlib-1.2.3
ZLIB_PATH = ../../cw/zlib-1.2.3
endif

# Edit the path below to point to the base of your OpenSSL package.
ifndef OPENSSL_PATH
OPENSSL_PATH = ../../sdks/openssl_nw-bsd-0.9.8g
endif

# Edit the path below to point to the base of your cURL source.
LIBCURL_PATH = ../../gccnlm/curl-7.17.1

# Edit the path below to point to the base of your NetWare Java SDK.
JDK	= ../../sdks/java-nw

INSTDIR = testjavacurl

TARGET	= javacurl
VERMAJ	= 0
VERMIN	= 2
VERREV	= 0
DESCR	= $(TARGET) - Java binding to the cURL library
COPYR	= Copyright (c) 1996 - 2008, Daniel Stenberg, <daniel@haxx.se>
#MTSAFE	= NO
MTSAFE	= YES
#SCREEN	= $(TARGET)
MODULES	= libcurl

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

# The following line defines your compiler.
ifdef METROWERKS
	CC = mwccnlm
else
	CC = gcc
endif
PERL	= perl
# RM	= rm -f
CP	= cp -afv
# 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.net/development/prgtools/mkxdc.zip
MPKXDC	= mkxdc

# must be equal to DEBUG or NDEBUG
DB	= NDEBUG
# DB	= DEBUG
# Optimization: -O<n> or debugging: -g
OPT	= -O2

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

ifeq ($(CC),mwccnlm)
LD	= mwldnlm
LDFLAGS	= -nostdlib $(PRELUDE) $(OBJS) -o $(TARGET).nlm -commandfile
CFLAGS	+= -gccinc -inline off -opt nointrinsics -inst mmx -proc 586
CFLAGS	+= -relax_pointers
#CFLAGS	+= -w on -ansi strict
#CFLAGS	+= -w on,nounused,nounusedexpr -ansi strict
ifeq ($(LIBARCH),LIBC)
	CFLAGS += -align 4
	PRELUDE = $(SDK_LIBC)/imports/libcpre.o
else
	CFLAGS += -align 1
	PRELUDE = "$(METROWERKS)/Novell Support/libraries/runtime/prelude.obj"
	CFLAGS += -include "$(METROWERKS)/Novell Support/headers/nlm_prefix.h"
endif
else
LD	= nlmconv
LDFLAGS	= -T
CFLAGS	+= -fno-builtin -fpack-struct -fpcc-struct-return
CFLAGS	+= -Wall # -pedantic
ifeq ($(LIBARCH),LIBC)
	PRELUDE = $(SDK_LIBC)/imports/libcpre.gcc.o
else
	PRELUDE = $(NDK_ROOT)/pre/prelude.o
	CFLAGS += -include $(NDKBASE)/nlmconv/genlm.h
endif
endif

LDLIBS	=

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

ifeq ($(MTSAFE),YES)
	XDCOPT = -n
endif
ifeq ($(MTSAFE),NO)
	XDCOPT = -u
endif
ifdef XDCOPT
	XDCDATA = $(TARGET).xdc
endif
ifndef COPYR
	COPYR = Copyright (c) 2008 GNU & The Open Source Community.
endif
ifndef DESCR
	DESCR = $(TARGET) Command Extension - ($(LIBARCH)) - $(CC) build
endif

NDK_ROOT = $(NDKBASE)/ndk
SDK_CLIB = $(NDK_ROOT)/nwsdk
SDK_LIBC = $(NDK_ROOT)/libc
ifeq ($(LIBARCH),LIBC)
	INCLUDES = -I$(SDK_LIBC)/include
	# INCLUDES += -I$(SDK_LIBC)/include/nks
else
	INCLUDES = -I$(SDK_CLIB)/include/nlm
	# INCLUDES += -I$(SDK_CLIB)/include
endif
INCLUDES += -I$(JDK)/include -I$(JDK)/include/netware 
INCLUDES += -I$(LIBCURL_PATH)/include
CFLAGS += $(INCLUDES)

OBJS	= $(TARGET).o nwlib.o

# vpath %.c . $(LIBCURL_PATH)/lib

#all:		$(TARGET).nlm
all:		test.class

dist:		all
		@-$(RM) -r $(LIBARCH)
		@mkdir $(LIBARCH)
		@mv $(TARGET).nlm $(LIBARCH)/.
		-$(RM) *.o $(TARGET).map $(TARGET).ncv $(TARGET).def $(TARGET).xdc

install:	all
		@[ -d $(INSTDIR) ] || mkdir $(INSTDIR)
		@$(CP) $(TARGET).nlm $(INSTDIR)
		@$(CP) *.class $(INSTDIR)
		@$(CP) *.java $(INSTDIR)
		@$(CP) *.ncf $(INSTDIR)
		@$(CP) README $(INSTDIR)

clean:
		-$(RM) *.o $(TARGET).map $(TARGET).ncv $(TARGET).def $(TARGET).xdc
		-$(RM) $(TARGET).imp $(TARGET).nlm 
		-$(RM) *.class CurlGlue.h
		-$(RM) -r $(LIBARCH)

CurlGlue.h:	CurlGlue.class CurlGlue.java
		javah CurlGlue
		touch CurlGlue.h

test.class:	$(TARGET).nlm
		javac test.java

CurlGlue.class:	CurlGlue.java
		javac $<

CurlGlue.java:	$(LIBCURL_PATH)/include/curl/curl.h $(LIBCURL_PATH)/include/curl/curlver.h
		$(PERL) define2java.pl $^ > $@

$(TARGET).nlm:	CurlGlue.h $(OBJS) $(TARGET).def $(TARGET).imp $(XDCDATA)
		@-$(RM) $@
		$(LD) $(LDFLAGS) $(TARGET).def

%.xdc:		Makefile.netware
		$(MPKXDC) $(XDCOPT) $@

%.def:		Makefile.netware
	@echo $(DL)# DEF Linker File for use with gcc and nlmconv$(DL) > $@
	@echo $(DL)# or with Codewarrior command line compiler.$(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 $(VERMAJ),$(VERMIN),$(VERREV)$(DL) >> $@
ifdef NLMTYPE
	@echo $(DL)type $(NLMTYPE)$(DL) >> $@
else
	@echo $(DL)type 0$(DL) >> $@
endif
ifdef STACK
	@echo $(DL)stack $(STACK)$(DL) >> $@
endif
	@echo $(DL)threadname "$(TARGET)"$(DL) >> $@
ifdef SCREEN
	@echo $(DL)screenname "$(SCREEN)"$(DL) >> $@
else
	@echo $(DL)screenname "DEFAULT"$(DL) >> $@
endif
ifeq ($(DB),DEBUG)
	@echo $(DL)debug$(DL) >> $@
endif
ifdef XDCOPT
	@echo $(DL)xdcdata $(TARGET).xdc$(DL) >> $@
endif
ifeq ($(LIBARCH),CLIB)
	@echo $(DL)start _Prelude$(DL) >> $@
	@echo $(DL)exit _Stop$(DL) >> $@
	@echo $(DL)import @$(NDK_ROOT)/nwsdk/imports/clib.imp$(DL) >> $@
	@echo $(DL)import @$(NDK_ROOT)/nwsdk/imports/threads.imp$(DL) >> $@
	@echo $(DL)import @$(NDK_ROOT)/nwsdk/imports/nlmlib.imp$(DL) >> $@
	@echo $(DL)module clib$(DL) >> $@
else
	@echo $(DL)flag_on 64$(DL) >> $@
	@echo $(DL)pseudopreemption$(DL) >> $@
	@echo $(DL)start _LibCPrelude$(DL) >> $@
	@echo $(DL)exit _LibCPostlude$(DL) >> $@
	@echo $(DL)check _LibCCheckUnload$(DL) >> $@
	@echo $(DL)import @$(NDK_ROOT)/libc/imports/libc.imp$(DL) >> $@
	@echo $(DL)import @$(NDK_ROOT)/libc/imports/netware.imp$(DL) >> $@
	@echo $(DL)module libc$(DL) >> $@
endif
ifdef MODULES
	@echo $(DL)module $(MODULES)$(DL) >> $@
endif
	@echo $(DL)import @$(LIBCURL_PATH)/lib/libcurl.imp$(DL) >> $@
	@echo $(DL)export @$(TARGET).imp$(DL) >> $@
ifeq ($(LD),nlmconv)
	@echo $(DL)input $(OBJS)$(DL) >> $@
	@echo $(DL)input $(PRELUDE)$(DL) >> $@
	@echo $(DL)output $(TARGET).nlm$(DL) >> $@
endif

%.imp:		Makefile.netware
	@echo $(DL)# $@ - Exports from $(TARGET)$(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) Java_CurlGlue_getinfo,$(DL) >> $@
	@echo $(DL) Java_CurlGlue_jni_1cleanup,$(DL) >> $@
	@echo $(DL) Java_CurlGlue_jni_1init,$(DL) >> $@
	@echo $(DL) Java_CurlGlue_jni_1perform,$(DL) >> $@
	@echo $(DL) Java_CurlGlue_jni_1setopt__III,$(DL) >> $@
	@echo $(DL) Java_CurlGlue_jni_1setopt__IILCurlWrite_2,$(DL) >> $@
	@echo $(DL) Java_CurlGlue_jni_1setopt__IILjava_lang_String_2$(DL) >> $@

%.ncf:		Makefile.netware
	@echo $(DL)# $@ - startfile for $(TARGET)$(DL) > $@
	@echo $(DL)#$(DL) >> $@
	@echo $(DL)java -autounload -ns -envCWD=sys:/$(INSTDIR) test$(DL) >> $@
	@echo $(DL)#$(DL) >> $@


