Commits

pajoye  committed 48a22e9

- MFB: #95, add NetWare makefiles to main source tree

  • Participants
  • Parent commits e23964b
  • Branches GD-2.0

Comments (0)

Files changed (6)

File src/netware/Makefile

+#################################################################
+#
+## Makefile for building libgd.nlm (NetWare version - gnu make)
+## Use: make -f Makefile
+##
+## 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
+
+# Base for the lib sources
+ifndef LIBBASE
+LIBBASE	= ../..
+endif
+# All library code is statically linked to avoid problems with other lib NLMs. 
+
+# Edit the path below to point to your libpng sources or set environment var.
+ifndef LIBPNG
+LIBPNG	= $(LIBBASE)/libpng-1.2.16
+endif
+# Edit the path below to point to your libpng sources or set environment var.
+ifndef LIBJPEG
+LIBJPEG	= $(LIBBASE)/jpeg-6b
+endif
+# Edit the path below to point to your freetype sources or set environment var.
+ifndef LIBFT2
+LIBFT2	= $(LIBBASE)/freetype-2.3.4
+endif
+# Edit the path below to point to your zlib sources or set environment var.
+ifndef ZLIBSDK
+ZLIBSDK	= $(LIBBASE)/zlib-1.2.3
+endif
+
+LIBGD = ..
+
+ifndef INSTDIR
+INSTDIR	= libgd-$(LIBGD_VERSION_STR)-bin-nw
+endif
+
+# Edit the vars below to change NLM target settings.
+TARGET  = libgd
+COPYR	= Copyright (C) 1996-2007 Boutell.Com, Inc.
+WWW	= http://www.libgd.org/
+DESCR	= libgd $(LIBGD_VERSION_STR) - $(WWW)
+MTSAFE	= YES
+STACK	= 64000
+SCREEN	= none
+EXPORTS	= @$(TARGET).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 xml2ver.h
+-include $(OBJDIR)/version.inc
+
+# The following line defines your compiler.
+ifdef METROWERKS
+	CC = mwccnlm
+else
+	CC = gcc
+endif
+YACC	= bison -y
+CP	= cp -afv
+# RM	= rm -f
+# 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
+PATCH	= patch
+
+# Global flags for all compilers
+CFLAGS	= $(OPT) -D$(DB) -DNETWARE -DHAVE_CONFIG_H -nostdinc
+#CFLAGS	+= -DHAVE_LIBPNG=1 -DHAVE_LIBJPEG=1
+#CFLAGS	+= -DHAVE_LIBFREETYPE=1 -DHAVE_FT2BUILD_H=1
+#CFLAGS	+= -DHAVE_LIBZ=1
+
+ifeq ($(CC),mwccnlm)
+LD	= mwldnlm
+LDFLAGS	= -nostdlib $(PRELUDE) $(OBJL) $(LDLIBS) -o $@ -commandfile
+AR	= mwldnlm
+ARFLAGS	= -type library -w nocmdline $(OBJS) -o
+LIBEXT	= lib
+CFLAGS	+= -msgstyle gcc -gccinc -inline off -opt nointrinsics -proc 586
+CFLAGS	+= -relax_pointers
+#CFLAGS	+= -w on
+ifeq ($(LIBARCH),LIBC)
+	PRELUDE = $(SDK_LIBC)/imports/libcpre.o
+	CFLAGS += -align 4
+else
+	PRELUDE = "$(METROWERKS)/Novell Support/libraries/runtime/prelude.obj"
+#	CFLAGS += -include "$(METROWERKS)/Novell Support/headers/nlm_prefix.h"
+	CFLAGS += -align 1
+endif
+else
+LD	= nlmconv
+LDFLAGS	= -T
+AR	= ar
+ARFLAGS	= -cq
+LIBEXT	= a
+CFLAGS	+= -fno-builtin -fpcc-struct-return -fno-strict-aliasing
+CFLAGS	+= -Wall -Wno-unused -Wno-main # -pedantic
+ifeq ($(LIBARCH),LIBC)
+	PRELUDE = $(SDK_LIBC)/imports/libcpre.gcc.o
+else
+	PRELUDE = $(SDK_CLIB)/imports/clibpre.gcc.o
+	CFLAGS += -include $(NDKBASE)/nlmconv/genlm.h
+endif
+endif
+
+NDK_ROOT = $(NDKBASE)/ndk
+SDK_CLIB = $(NDK_ROOT)/nwsdk
+SDK_LIBC = $(NDK_ROOT)/libc
+
+INCLUDES = -I. -I$(LIBGD) -I$(LIBPNG) -I$(LIBJPEG) -I$(LIBFT2)/include -I$(ZLIBSDK) 
+
+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
+	CFLAGS += -D_POSIX_SOURCE
+	# CFLAGS += -D__ANSIC__
+else
+	INCLUDES += -I$(SDK_CLIB)/include/nlm -I$(SDK_CLIB)/include
+	# INCLUDES += -I$(SDK_CLIB)/include/nlm/obsolete
+	# INCLUDES += -I$(SDK_LDAP)/clib/inc
+	CFLAGS += -DNETDB_USE_INTERNET
+endif
+CFLAGS	+= $(INCLUDES)
+
+ifeq ($(MTSAFE),YES)
+	XDCOPT = -n
+endif
+ifeq ($(MTSAFE),NO)
+	XDCOPT = -u
+endif
+ifdef XDCOPT
+	XDCDATA = $(OBJDIR)/$(TARGET).xdc
+endif
+
+ifeq ($(findstring linux,$(OSTYPE)),linux)
+DL	= '
+#-include $(NDKBASE)/nlmconv/ncpfs.inc
+endif
+
+GDLIBOBJS	= \
+	$(OBJDIR)/gd.o \
+	$(OBJDIR)/gd_gd.o \
+	$(OBJDIR)/gd_gd2.o \
+	$(OBJDIR)/gd_gif_in.o \
+	$(OBJDIR)/gd_gif_out.o \
+	$(OBJDIR)/gd_io.o \
+	$(OBJDIR)/gd_io_dp.o \
+	$(OBJDIR)/gd_io_file.o \
+	$(OBJDIR)/gd_io_ss.o \
+	$(OBJDIR)/gd_jpeg.o \
+	$(OBJDIR)/gd_png.o \
+	$(OBJDIR)/gd_ss.o \
+	$(OBJDIR)/gd_topal.o \
+	$(OBJDIR)/gd_wbmp.o \
+	$(OBJDIR)/gdcache.o \
+	$(OBJDIR)/gdfontg.o \
+	$(OBJDIR)/gdfontl.o \
+	$(OBJDIR)/gdfontmb.o \
+	$(OBJDIR)/gdfonts.o \
+	$(OBJDIR)/gdfontt.o \
+	$(OBJDIR)/gdft.o \
+	$(OBJDIR)/gdfx.o \
+	$(OBJDIR)/gdhelpers.o \
+	$(OBJDIR)/gdkanji.o \
+	$(OBJDIR)/gdtables.o \
+	$(OBJDIR)/gdxpm.o \
+	$(OBJDIR)/wbmp.o \
+	$(EOLIST)
+ifeq "$(wildcard $(LIBGD)/gd_security.c)" "$(LIBGD)/gd_security.c"
+GDLIBOBJS	+= \
+	$(OBJDIR)/gd_security.o \
+	$(EOLIST)
+endif
+
+PNGLIBOBJS	= \
+	$(OBJDIR)/png.o \
+	$(OBJDIR)/pngerror.o \
+	$(OBJDIR)/pngget.o \
+	$(OBJDIR)/pngmem.o \
+	$(OBJDIR)/pngpread.o \
+	$(OBJDIR)/pngread.o \
+	$(OBJDIR)/pngrio.o \
+	$(OBJDIR)/pngrtran.o \
+	$(OBJDIR)/pngrutil.o \
+	$(OBJDIR)/pngset.o \
+	$(OBJDIR)/pngtrans.o \
+	$(OBJDIR)/pngwio.o \
+	$(OBJDIR)/pngwrite.o \
+	$(OBJDIR)/pngwtran.o \
+	$(OBJDIR)/pngwutil.o \
+	$(EOLIST)
+ifeq "$(wildcard $(LIBPNG)/pnggccrd.c)" "$(LIBPNG)/pnggccrd.c"
+PNGLIBOBJS	+= \
+	$(OBJDIR)/pnggccrd.o \
+	$(OBJDIR)/pngvcrd.o \
+	$(EOLIST)
+endif
+
+OBJ_JPG	= $(OBJDIR)
+JPGLIBOBJS = \
+	$(OBJ_JPG)/jcapimin.o \
+	$(OBJ_JPG)/jcapistd.o \
+	$(OBJ_JPG)/jccoefct.o \
+	$(OBJ_JPG)/jccolor.o \
+	$(OBJ_JPG)/jcdctmgr.o \
+	$(OBJ_JPG)/jchuff.o \
+	$(OBJ_JPG)/jcinit.o \
+	$(OBJ_JPG)/jcmainct.o \
+	$(OBJ_JPG)/jcmarker.o \
+	$(OBJ_JPG)/jcmaster.o \
+	$(OBJ_JPG)/jcomapi.o \
+	$(OBJ_JPG)/jcparam.o \
+	$(OBJ_JPG)/jcphuff.o \
+	$(OBJ_JPG)/jcprepct.o \
+	$(OBJ_JPG)/jcsample.o \
+	$(OBJ_JPG)/jctrans.o \
+	$(OBJ_JPG)/jdapimin.o \
+	$(OBJ_JPG)/jdapistd.o \
+	$(OBJ_JPG)/jdatadst.o \
+	$(OBJ_JPG)/jdatasrc.o \
+	$(OBJ_JPG)/jdcoefct.o \
+	$(OBJ_JPG)/jdcolor.o \
+	$(OBJ_JPG)/jddctmgr.o \
+	$(OBJ_JPG)/jdhuff.o \
+	$(OBJ_JPG)/jdinput.o \
+	$(OBJ_JPG)/jdmainct.o \
+	$(OBJ_JPG)/jdmarker.o \
+	$(OBJ_JPG)/jdmaster.o \
+	$(OBJ_JPG)/jdmerge.o \
+	$(OBJ_JPG)/jdphuff.o \
+	$(OBJ_JPG)/jdpostct.o \
+	$(OBJ_JPG)/jdsample.o \
+	$(OBJ_JPG)/jdtrans.o \
+	$(OBJ_JPG)/jerror.o \
+	$(OBJ_JPG)/jfdctflt.o \
+	$(OBJ_JPG)/jfdctfst.o \
+	$(OBJ_JPG)/jfdctint.o \
+	$(OBJ_JPG)/jidctflt.o \
+	$(OBJ_JPG)/jidctfst.o \
+	$(OBJ_JPG)/jidctint.o \
+	$(OBJ_JPG)/jidctred.o \
+	$(OBJ_JPG)/jquant1.o \
+	$(OBJ_JPG)/jquant2.o \
+	$(OBJ_JPG)/jutils.o \
+	$(OBJ_JPG)/jmemmgr.o \
+	$(OBJ_JPG)/jmemansi.o \
+	$(EOLIST)
+
+LIBFT2OBJS = \
+	$(OBJ_FT2)/autohint.o \
+	$(OBJ_FT2)/bdf.o \
+	$(OBJ_FT2)/cff.o \
+	$(OBJ_FT2)/ftbase.o \
+	$(OBJ_FT2)/ftcache.o \
+	$(OBJ_FT2)/ftglyph.o \
+	$(OBJ_FT2)/ftinit.o \
+	$(OBJ_FT2)/ftmm.o \
+	$(OBJ_FT2)/ftsystem.o \
+	$(OBJ_FT2)/pcf.o \
+	$(OBJ_FT2)/pfr.o \
+	$(OBJ_FT2)/psaux.o \
+	$(OBJ_FT2)/pshinter.o \
+	$(OBJ_FT2)/psmodule.o \
+	$(OBJ_FT2)/raster.o \
+	$(OBJ_FT2)/sfnt.o \
+	$(OBJ_FT2)/smooth.o \
+	$(OBJ_FT2)/truetype.o \
+	$(OBJ_FT2)/type1.o \
+	$(OBJ_FT2)/type1cid.o \
+	$(OBJ_FT2)/type42.o \
+	$(OBJ_FT2)/winfnt.o \
+	$(OBJ_FT2)/infutil.o \
+	$(OBJ_FT2)/ftgzip.o \
+	$(OBJ_FT2)/ftlzw.o \
+	$(OBJ_FT2)/ftpfr.o \
+	$(OBJ_FT2)/ftstroke.o \
+	$(OBJ_FT2)/ftsynth.o \
+	$(OBJ_FT2)/fttype1.o \
+	$(OBJ_FT2)/ftwinfnt.o \
+	$(OBJ_FT2)/ftxf86.o \
+	$(OBJ_FT2)/ftbbox.o \
+	$(EOLIST)
+
+ZLIBOBJS	= \
+	$(OBJDIR)/adler32.o \
+	$(OBJDIR)/compress.o \
+	$(OBJDIR)/crc32.o \
+	$(OBJDIR)/deflate.o \
+	$(OBJDIR)/inflate.o \
+	$(OBJDIR)/inffast.o \
+	$(OBJDIR)/inftrees.o \
+	$(OBJDIR)/trees.o \
+	$(OBJDIR)/uncompr.o \
+	$(OBJDIR)/zutil.o \
+	$(EOLIST)
+ifeq "$(wildcard $(ZLIBSDK)/infblock.c)" "$(ZLIBSDK)/infblock.c"
+ZLIBOBJS	+= \
+	$(OBJDIR)/infblock.o \
+	$(OBJDIR)/infcodes.o \
+	$(OBJDIR)/infutil.o \
+	$(EOLIST)
+endif
+
+LDLIBS	+= $(LIBFT2)/builds/netware/LIBC/libft2.$(LIBEXT)
+
+OBJS	:= $(GDLIBOBJS) $(PNGLIBOBJS) $(JPGLIBOBJS) $(ZLIBOBJS)
+
+OBJL = $(OBJS) $(OBJDIR)/nwlibc.o
+
+vpath %.c . $(LIBGD) $(LIBPNG) $(LIBJPEG) $(ZLIBSDK)
+
+.PHONY: all prebuild dist install clean clean-all test-cmds help
+
+all: lib nlm
+
+nlm: prebuild $(TARGET).nlm
+
+lib: prebuild $(TARGET).$(LIBEXT)
+
+prebuild: $(OBJDIR) $(OBJDIR)/version.inc config.h
+
+$(OBJDIR)/%.o: %.c
+#	@echo Compiling $<
+	$(CC) $(CFLAGS) -c $< -o $@
+
+$(OBJDIR)/version.inc: ../configure.ac $(OBJDIR)
+	@echo Creating $@
+	@awk -f get_ver.awk $< > $@
+
+dist: all
+	-$(RM) -r $(OBJDIR)*
+
+install: $(INSTDIR) all
+	@$(CP) $(TARGET).nlm $(INSTDIR)
+	@$(CP) $(TARGET).$(LIBEXT) $(INSTDIR)
+	@$(CP) ../CHANGES $(INSTDIR)
+	@$(CP) ../COPYING $(INSTDIR)
+	@$(CP) ../README $(INSTDIR)
+	@$(CP) ../RELEASE-NOTES $(INSTDIR)
+
+clean:
+	-$(RM) config.h
+	-$(RM) -r $(OBJDIR)*
+	-$(RM) $(TARGET).nlm $(TARGET).$(LIBEXT) $(TARGET).imp
+
+dist-clean:
+	-$(RM) config.h
+	-$(RM) -r $(OBJDIR)*
+
+clean-all: clean
+	-$(MAKE) -C tests -f Makefile clean
+
+test-cmds:
+	-$(MAKE) -C tests -f Makefile
+
+$(INSTDIR):
+	@mkdir $(INSTDIR)
+
+$(OBJDIR):
+	@mkdir $(OBJDIR)
+
+$(TARGET).$(LIBEXT): $(OBJS)
+	@echo Creating $@
+	@-$(RM) $@
+	@$(AR) $(ARFLAGS) $@ $^
+
+$(TARGET).nlm: $(OBJDIR)/$(TARGET).def $(TARGET).imp $(OBJL) $(XDCDATA)
+	@echo Linking $@
+	@-$(RM) $@
+	@$(LD) $(LDFLAGS) $<
+
+$(OBJDIR)/%.xdc: Makefile
+	@echo Creating $@
+	@$(MPKXDC) $(XDCOPT) $@
+
+$(OBJDIR)/%.def: Makefile
+	@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 $(LIBGD_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)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 @$(SDK_LIBC)/imports/libc.imp$(DL) >> $@
+	@echo $(DL)import @$(SDK_LIBC)/imports/netware.imp$(DL) >> $@
+	@echo $(DL)module libc$(DL) >> $@
+endif
+ifdef MODULES
+	@echo $(DL)module $(MODULES)$(DL) >> $@
+endif
+ifdef IMPORTS
+	@echo $(DL)import $(IMPORTS)$(DL) >> $@
+endif
+ifdef EXPORTS
+	@echo $(DL)export $(EXPORTS)$(DL) >> $@
+endif
+ifeq ($(LD),nlmconv)
+	@echo $(DL)input $(OBJL)$(DL) >> $@
+	@echo $(DL)input $(PRELUDE)$(DL) >> $@
+ifdef LDLIBS
+	@echo $(DL)input $(LDLIBS)$(DL) >> $@
+endif
+	@echo $(DL)output $(TARGET).nlm$(DL) >> $@
+endif
+
+config.h: Makefile
+	@echo Creating $@
+	@echo $(DL)/* $@ for NetWare 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)#define OS "i586-pc-NetWare"$(DL) >> $@
+	@echo $(DL)#define VERSION "$(LIBGD_VERSION_STR)"$(DL) >> $@
+	@echo $(DL)#define PACKAGE_BUGREPORT "http://bugs.libgd.org/"$(DL) >> $@
+	@echo $(DL)#define HAVE_ARPA_INET_H 1$(DL) >> $@
+	@echo $(DL)#define HAVE_ASSERT_H 1$(DL) >> $@
+	@echo $(DL)#define HAVE_DLFCN_H 1$(DL) >> $@
+	@echo $(DL)#define HAVE_DLOPEN 1$(DL) >> $@
+	@echo $(DL)#define HAVE_ERR_H 1$(DL) >> $@
+	@echo $(DL)#define HAVE_ERRNO_H 1$(DL) >> $@
+	@echo $(DL)#define HAVE_FCNTL_H 1$(DL) >> $@
+	@echo $(DL)#define HAVE_FIONBIO 1$(DL) >> $@
+	@echo $(DL)#define HAVE_GETHOSTBYADDR 1$(DL) >> $@
+	@echo $(DL)#define HAVE_GETTIMEOFDAY 1$(DL) >> $@
+	@echo $(DL)#define HAVE_INET_ADDR 1$(DL) >> $@
+	@echo $(DL)#define HAVE_INET_NTOA 1$(DL) >> $@
+	@echo $(DL)#define HAVE_INET_PTON 1$(DL) >> $@
+	@echo $(DL)#define HAVE_INTTYPES_H 1$(DL) >> $@
+	@echo $(DL)#define HAVE_LIMITS_H 1$(DL) >> $@
+	@echo $(DL)#define HAVE_LONGLONG 1$(DL) >> $@
+	@echo $(DL)#define HAVE_MALLOC_H 1$(DL) >> $@
+	@echo $(DL)#define HAVE_NETINET_IN_H 1$(DL) >> $@
+	@echo $(DL)#define HAVE_SELECT 1$(DL) >> $@
+	@echo $(DL)#define HAVE_SETJMP_H 1$(DL) >> $@
+	@echo $(DL)#define HAVE_SIGNAL 1$(DL) >> $@
+	@echo $(DL)#define HAVE_SOCKET 1$(DL) >> $@
+	@echo $(DL)#define HAVE_STDARG_H 1$(DL) >> $@
+	@echo $(DL)#define HAVE_STDDEF_H 1$(DL) >> $@
+	@echo $(DL)#define HAVE_STDINT_H 1$(DL) >> $@
+	@echo $(DL)#define HAVE_STDLIB_H 1$(DL) >> $@
+	@echo $(DL)#define HAVE_STRCASECMP 1$(DL) >> $@
+	@echo $(DL)#define HAVE_STRDUP 1$(DL) >> $@
+	@echo $(DL)#define HAVE_STRFTIME 1$(DL) >> $@
+	@echo $(DL)#define HAVE_STRING_H 1$(DL) >> $@
+	@echo $(DL)#define HAVE_STRLCAT 1$(DL) >> $@
+	@echo $(DL)#define HAVE_STRLCPY 1$(DL) >> $@
+	@echo $(DL)#define HAVE_STRSTR 1$(DL) >> $@
+	@echo $(DL)#define HAVE_SYS_PARAM_H 1$(DL) >> $@
+	@echo $(DL)#define HAVE_SYS_SELECT_H 1$(DL) >> $@
+	@echo $(DL)#define HAVE_SYS_STAT_H 1$(DL) >> $@
+	@echo $(DL)#define HAVE_SYS_TIME_H 1$(DL) >> $@
+	@echo $(DL)#define HAVE_TERMIOS_H 1$(DL) >> $@
+	@echo $(DL)#define HAVE_TIME_H 1$(DL) >> $@
+	@echo $(DL)#define HAVE_UNAME 1$(DL) >> $@
+	@echo $(DL)#define HAVE_UNISTD_H 1$(DL) >> $@
+	@echo $(DL)#define STDC_HEADERS 1$(DL) >> $@
+	@echo $(DL)#define TIME_WITH_SYS_TIME 1$(DL) >> $@
+	@echo $(DL)#define HAVE_SYS_TYPES_H 1$(DL) >> $@
+	@echo $(DL)#define HAVE_ZLIB_H 1$(DL) >> $@
+	@echo $(DL)#define HAVE_LIBZ 1$(DL) >> $@
+	@echo $(DL)#define HAVE_LIBPNG 1$(DL) >> $@
+	@echo $(DL)#define HAVE_LIBJPEG 1$(DL) >> $@
+	@echo $(DL)#define HAVE_LIBFREETYPE 1$(DL) >> $@
+	@echo $(DL)#define HAVE_FT2BUILD_H 1$(DL) >> $@
+#	@echo $(DL)#define DEFAULT_FONTPATH "sys:/java/nwgfx/lib/x11/fonts/ttf"$(DL) >> $@
+#	@echo $(DL)#define PATHSEPARATOR ";"$(DL) >> $@
+
+$(TARGET).imp: $(LIBGD)/gd.h
+	@echo Creating $@
+	@perl mkgdimp.pl $< $@
+
+patch: Makefile
+	@echo Patching sources...
+	$(PATCH) -d $(LIBGD) -b -p 0 -i $(LIBGD)/netware/$(notdir $(wildcard $(LIBGD)/netware/*.diff))
+
+help:
+	@echo $(DL)===========================================================$(DL)
+	@echo Novell NDK Base = $(NDKBASE)
+	@echo libpng Source   = $(LIBPNG)
+	@echo libjpeg Source  = $(LIBJPEG)
+	@echo Freetype 2 SDK  = $(LIBFT2)
+	@echo Zlib SDK        = $(ZLIBSDK)
+	@echo $(DL)===========================================================$(DL)
+	@echo $(DL)libgd $(LIBGD_VERSION_STR) - available targets are:$(DL)
+	@echo $(DL)$(MAKE) all$(DL)
+	@echo $(DL)$(MAKE) nlm$(DL)
+	@echo $(DL)$(MAKE) lib$(DL)
+	@echo $(DL)$(MAKE) clean$(DL)
+	@echo $(DL)$(MAKE) clean-all$(DL)
+	@echo $(DL)$(MAKE) test-cmds$(DL)
+	@echo $(DL)$(MAKE) patch$(DL)
+	@echo $(DL)===========================================================$(DL)
+
+

File src/netware/get_ver.awk

+#
+# awk script which fetches libgd version number and string from input file
+# and writes them to STDOUT. Here you can get an awk version for Win32:
+# http://www.gknw.net/development/prgtools/awk.zip
+#
+BEGIN {
+    while ((getline < ARGV[1]) > 0) {
+      if (match ($0, /^GDLIB_MAJOR=([0-9]*)$/)) {
+        split($1, t, "=");
+        v_maj = t[2];
+      }
+      if (match ($0, /^GDLIB_MINOR=([0-9]*)$/)) {
+        split($1, t, "=");
+        v_min = t[2];
+      }
+      if (match ($0, /^GDLIB_REVISION=([0-9]*)$/)) {
+        split($1, t, "=");
+        v_rev = t[2];
+      }
+    }
+    libgd_ver = v_maj "," v_min "," v_rev;
+    libgd_ver_str = v_maj "." v_min "." v_rev;
+    print "LIBGD_VERSION = " libgd_ver "";
+    print "LIBGD_VERSION_STR = " libgd_ver_str "";
+}
+
+

File src/netware/keepscreen.c

+/* Simple _NonAppStop() implementation which can be linked to your 
+ * NLM in order to keep the screen open when the NLM terminates
+ * (the good old clib behaviour).
+ * You dont have to call it, its done automatically from LibC.
+ *
+ * 2004-Aug-11  by Guenter Knauf 
+ *
+ * URL: http://www.gknw.com/development/mk_nlm/
+ */
+ 
+#include <stdio.h>
+#include <screen.h>
+
+void _NonAppStop()
+{
+    uint16_t row, col;
+    
+    GetScreenSize(&row, &col);
+    gotorowcol(row-1, 0);
+    /* pressanykey(); */
+    printf("<Press any key to close screen> ");
+    getcharacter();
+}
+
+

File src/netware/mkgdimp.pl

+#!perl
+# quick hack to fix wrong formatted import files
+die "usage: $0 infile outfile\n" if ($#ARGV != 1); 
+open (I,$ARGV[0]) or die "file $ARGV[0] not found!\n";
+open (O,">$ARGV[1]") or die "file $ARGV[1] not found!\n";
+my @s,@t;
+while (<I>) {
+  chomp;
+  if (/^BGD_DECLARE/) {
+    @x = split();
+    if ($x[1] eq '*)') {
+      $t = $x[2];
+    } else {
+      $t = $x[1];
+    }
+    $t = (split(/\(/,$t))[0];
+    next if ($t eq ')');
+    # hack to filter gdImageEllipse() since we have no c implementation.
+    next if ($t eq 'gdImageEllipse');
+    print "found: $t\n" if ($debug);
+    if ($t ne '') {
+      push(@t, $t);
+    }
+  }
+}
+push(@t, 
+  'gdFontGetGiant',
+  'gdFontGetLarge',
+  'gdFontGetMediumBold',
+  'gdFontGetSmall',
+  'gdFontGetTiny',
+  'gdImageSquareToCircle',
+  'gdImageStringFTCircle',
+  'gdImageSharpen'
+);
+@s = sort(@t);
+my $i,$l;
+print "array contains ".($#s+1)." elements.\n" if ($debug);
+print O "# exports extracted from $ARGV[0]\n#\n";
+print O "  (LIBGD)\n";
+for (@s) {
+#    print O ",\$(DL) >> \$\@\n" if (($l ne '') && ($l ne $_));
+#    print O "\t\@echo \$(DL)  $_" if ($l ne $_);
+    if ($l ne $_) {
+        print O ",\n" if ($l ne '');
+        print O "  $_";
+        $l = $_;
+        $i++;
+    } else {
+        print "double: last '$l' now '$_'\n";
+    }
+}
+print O "\n\n";
+close O;
+close I;
+
+print "symbols written: $i\n" if ($i);
+
+
+

File src/netware/nwlibc.c

+/*********************************************************************
+ * Universal NetWare library stub.                                   *
+ * written by Ulrich Neuman and given to OpenSource copyright-free.  *
+ * version: 1.0                                                      *
+ *********************************************************************/
+
+#include <errno.h>
+#include <string.h>
+#include <stdlib.h>
+#include <library.h>
+#include <netware.h>
+#include <screen.h>
+#include <nks/thread.h>
+#include <nks/synch.h>
+
+
+typedef struct
+{
+    int     _errno;
+    void    *twentybytes;
+} libthreaddata_t;
+
+typedef struct
+{
+    int         x;
+    int         y;
+    int         z;
+    void        *tenbytes;
+    NXKey_t     perthreadkey;   /* if -1, no key obtained... */
+    NXMutex_t   *lock;
+} libdata_t;
+
+int         gLibId      = -1;
+void        *gLibHandle = (void *) NULL;
+rtag_t      gAllocTag   = (rtag_t) NULL;
+NXMutex_t   *gLibLock   = (NXMutex_t *) NULL;
+
+/* internal library function prototypes... */
+int     DisposeLibraryData ( void * );
+void    DisposeThreadData ( void * );
+int     GetOrSetUpData ( int id, libdata_t **data, libthreaddata_t **threaddata );
+
+
+int _NonAppStart
+(
+    void        *NLMHandle,
+    void        *errorScreen,
+    const char  *cmdLine,
+    const char  *loadDirPath,
+    size_t      uninitializedDataLength,
+    void        *NLMFileHandle,
+    int         (*readRoutineP)( int conn, void *fileHandle, size_t offset,
+                                size_t nbytes, size_t *bytesRead, void *buffer ),
+    size_t      customDataOffset,
+    size_t      customDataSize,
+    int         messageCount,
+    const char  **messages
+)
+{
+    NX_LOCK_INFO_ALLOC(liblock, "Per-Application Data Lock", 0);
+
+#ifndef __GNUC__
+#pragma unused(cmdLine)
+#pragma unused(loadDirPath)
+#pragma unused(uninitializedDataLength)
+#pragma unused(NLMFileHandle)
+#pragma unused(readRoutineP)
+#pragma unused(customDataOffset)
+#pragma unused(customDataSize)
+#pragma unused(messageCount)
+#pragma unused(messages)
+#endif
+
+/*
+** Here we process our command line, post errors (to the error screen),
+** perform initializations and anything else we need to do before being able
+** to accept calls into us. If we succeed, we return non-zero and the NetWare
+** Loader will leave us up, otherwise we fail to load and get dumped.
+*/
+    gAllocTag = AllocateResourceTag(NLMHandle,
+                                "<library-name> memory allocations", AllocSignature);
+
+    if (!gAllocTag)
+    {
+        OutputToScreen(errorScreen, "Unable to allocate resource tag for "
+                                            "library memory allocations.\n");
+        return -1;
+    }
+
+    gLibId = register_library(DisposeLibraryData);
+
+    if (gLibId < -1)
+    {
+        OutputToScreen(errorScreen, "Unable to register library with kernel.\n");
+        return -1;
+    }
+
+    gLibHandle = NLMHandle;
+
+    gLibLock = NXMutexAlloc(0, 0, &liblock);
+
+    if (!gLibLock)
+    {
+        OutputToScreen(errorScreen, "Unable to allocate library data lock.\n");
+        return -1;
+    }
+
+    return 0;
+}
+
+/*
+** Here we clean up any resources we allocated. Resource tags is a big part
+** of what we created, but NetWare doesn't ask us to free those.
+*/
+void _NonAppStop( void )
+{
+    (void) unregister_library(gLibId);
+    NXMutexFree(gLibLock);
+}
+
+/*
+** This function cannot be the first in the file for if the file is linked
+** first, then the check-unload function's offset will be nlmname.nlm+0
+** which is how to tell that there isn't one. When the check function is
+** first in the linked objects, it is ambiguous. For this reason, we will
+** put it inside this file after the stop function.
+**
+** Here we check to see if it's alright to ourselves to be unloaded. If not,
+** we return a non-zero value. Right now, there isn't any reason not to allow
+** it.
+*/
+int  _NonAppCheckUnload( void )
+{
+    return 0;
+}
+
+int GetOrSetUpData
+(
+    int                 id,
+    libdata_t           **appData,
+    libthreaddata_t **threadData
+)
+{
+    int                 err;
+    libdata_t           *app_data;
+    libthreaddata_t *thread_data;
+    NXKey_t             key;
+    NX_LOCK_INFO_ALLOC(liblock, "Application Data Lock", 0);
+
+    err         = 0;
+    thread_data = (libthreaddata_t *) NULL;
+
+/*
+** Attempt to get our data for the application calling us. This is where we
+** store whatever application-specific information we need to carry in support
+** of calling applications.
+*/
+    app_data = (libdata_t *) get_app_data(id);
+
+    if (!app_data)
+    {
+/*
+** This application hasn't called us before; set up application AND per-thread
+** data. Of course, just in case a thread from this same application is calling
+** us simultaneously, we better lock our application data-creation mutex. We
+** also need to recheck for data after we acquire the lock because WE might be
+** that other thread that was too late to create the data and the first thread
+** in will have created it.
+*/
+        NXLock(gLibLock);
+
+        if (!(app_data = (libdata_t *) get_app_data(id)))
+        {
+            app_data = (libdata_t *) malloc(sizeof(libdata_t));
+
+            if (app_data)
+            {
+                memset(app_data, 0, sizeof(libdata_t));
+
+                app_data->tenbytes = malloc(10);
+                app_data->lock     = NXMutexAlloc(0, 0, &liblock);
+
+                if (!app_data->tenbytes || !app_data->lock)
+                {
+                    if (app_data->lock)
+                        NXMutexFree(app_data->lock);
+
+                    free(app_data);
+                    app_data = (libdata_t *) NULL;
+                    err      = ENOMEM;
+                }
+
+                if (app_data)
+                {
+/*
+** Here we burn in the application data that we were trying to get by calling
+** get_app_data(). Next time we call the first function, we'll get this data
+** we're just now setting. We also go on here to establish the per-thread data
+** for the calling thread, something we'll have to do on each application
+** thread the first time it calls us.
+*/
+                    err = set_app_data(gLibId, app_data);
+
+                    if (err)
+                    {
+                        free(app_data);
+                        app_data = (libdata_t *) NULL;
+                        err      = ENOMEM;
+                    }
+                    else
+                    {
+                        /* create key for thread-specific data... */
+                        err = NXKeyCreate(DisposeThreadData, (void *) NULL, &key);
+
+                        if (err)                /* (no more keys left?) */
+                            key = -1;
+
+                        app_data->perthreadkey = key;
+                    }
+                }
+            }
+        }
+
+        NXUnlock(gLibLock);
+    }
+
+    if (app_data)
+    {
+        key = app_data->perthreadkey;
+
+        if (     key != -1                  /* couldn't create a key? no thread data */
+            && !(err = NXKeyGetValue(key, (void **) &thread_data))
+            && !thread_data)
+        {
+/*
+** Allocate the per-thread data for the calling thread. Regardless of whether
+** there was already application data or not, this may be the first call by a
+** a new thread. The fact that we allocation 20 bytes on a pointer is not very
+** important, this just helps to demonstrate that we can have arbitrarily
+** complex per-thread data.
+*/
+            thread_data = (libthreaddata_t *) malloc(sizeof(libthreaddata_t));
+
+            if (thread_data)
+            {
+                thread_data->_errno      = 0;
+                thread_data->twentybytes = malloc(20);
+
+                if (!thread_data->twentybytes)
+                {
+                    free(thread_data);
+                    thread_data = (libthreaddata_t *) NULL;
+                    err         = ENOMEM;
+                }
+
+                if ((err = NXKeySetValue(key, thread_data)))
+                {
+                    free(thread_data->twentybytes);
+                    free(thread_data);
+                    thread_data = (libthreaddata_t *) NULL;
+                }
+            }
+        }
+    }
+
+    if (appData)
+        *appData = app_data;
+
+    if (threadData)
+        *threadData = thread_data;
+
+    return err;
+}
+
+int DisposeLibraryData
+(
+    void    *data
+)
+{
+    if (data)
+    {
+        void    *tenbytes = ((libdata_t *) data)->tenbytes;
+
+        if (tenbytes)
+            free(tenbytes);
+
+        free(data);
+    }
+
+    return 0;
+}
+
+void DisposeThreadData
+(
+    void    *data
+)
+{
+    if (data)
+    {
+        void    *twentybytes = ((libthreaddata_t *) data)->twentybytes;
+
+        if (twentybytes)
+            free(twentybytes);
+
+        free(data);
+    }
+}
+
+

File src/netware/tests/Makefile

+###################################################################
+#
+## Makefile for building libgd tests (NetWare version - gnu make)
+## Use: make -f Makefile
+##
+## 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
+
+LIBGD = ../..
+
+ifndef INSTDIR
+INSTDIR	= ../libgd-$(LIBGD_VERSION_STR)-bin-nw
+endif
+
+# Edit the vars below to change NLM target settings.
+TARGETS = gddemo.nlm gdtest.nlm gdtestft.nlm gdtopng.nlm gdcmpgif.nlm 
+TARGETS += gd2time.nlm gd2togif.nlm gd2topng.nlm gd2copypal.nlm
+TARGETS += gifanimtest.nlm giftogd2.nlm pngtogd2.nlm pngtogd.nlm webpng.nlm
+TARGETS += annotate.nlm circletexttest.nlm fontsizetest.nlm fontwheeltest.nlm
+TARGETS += testac.nlm testtr.nlm
+
+DTARGET = ../libgd.nlm
+LTARGET = ../libgd.lib
+COPYR	= Copyright (C) 1996-2007 Boutell.Com, Inc.
+WWW	= http://www.libgd.org/
+DESCR	= libgd $(LIBGD_VERSION_STR) $(subst .def,,$(notdir $@)) - $(WWW)
+MTSAFE	= YES
+STACK	= 64000
+#SCREEN	= NONE
+#SCREEN	= $(DESCR)
+# Comment the line below if you dont want to load protected automatically.
+#LDRING	= 3
+
+# Comment the line below if you dont want to link the static libgd.lib.
+#LSTATIC = 1
+
+ifdef LSTATIC
+LDLIBS  = $(LTARGET)
+else
+IMPORTS = @../libgd.imp
+MODULES = $(notdir $(DTARGET))
+endif
+
+# 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
+# DB	= CURLDEBUG
+# 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 header.
+-include $(OBJDIR)/version.inc
+
+# The following line defines your compiler.
+ifdef METROWERKS
+	CC = mwccnlm
+else
+	CC = gcc
+endif
+YACC	= bison -y
+CP	= cp -afv
+# RM	= rm -f
+# 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
+
+# Global flags for all compilers
+CFLAGS	= $(OPT) -D$(DB) -DNETWARE -DHAVE_CONFIG_H -nostdinc
+
+ifeq ($(CC),mwccnlm)
+LD	= mwldnlm
+#LDFLAGS	= -nostdlib $(PRELUDE) $(LDLIBS) $(<:.def=.o) -o $@ -commandfile
+LDFLAGS	= -nostdlib $(PRELUDE) $(OBJSCR) $(LDLIBS) $(OBJDIR)/$(basename $@).o -o $@ -commandfile
+AR	= mwldnlm
+ARFLAGS	= -type library -w nocmdline $(OBJS) -o
+CFLAGS	+= -msgstyle gcc -gccinc -inline off -opt nointrinsics -proc 586
+CFLAGS	+= -relax_pointers
+#CFLAGS	+= -w on
+ifeq ($(LIBARCH),LIBC)
+	PRELUDE = $(SDK_LIBC)/imports/libcpre.o
+	CFLAGS += -align 4
+else
+	PRELUDE = "$(METROWERKS)/Novell Support/libraries/runtime/prelude.obj"
+#	CFLAGS += -include "$(METROWERKS)/Novell Support/headers/nlm_prefix.h"
+	CFLAGS += -align 1
+endif
+else
+LD	= nlmconv
+LDFLAGS	= -T
+AR	= ar
+ARFLAGS	= -cq
+CFLAGS	+= -fno-builtin -fpcc-struct-return -fno-strict-aliasing
+CFLAGS	+= -Wall -Wno-unused #-Wno-format # -pedantic
+ifeq ($(LIBARCH),LIBC)
+	PRELUDE = $(SDK_LIBC)/imports/libcpre.gcc.o
+else
+	PRELUDE = $(SDK_CLIB)/imports/clibpre.gcc.o
+	CFLAGS += -include $(NDKBASE)/nlmconv/genlm.h
+endif
+endif
+
+NDK_ROOT = $(NDKBASE)/ndk
+SDK_CLIB = $(NDK_ROOT)/nwsdk
+SDK_LIBC = $(NDK_ROOT)/libc
+
+ifeq ($(LIBARCH),LIBC)
+	INCLUDES += -I$(SDK_LIBC)/include -I$(SDK_LIBC)/include/nks
+	# INCLUDES += -I$(SDK_LIBC)/include/winsock
+	CFLAGS += -D_POSIX_SOURCE
+	# CFLAGS += -D__ANSIC__
+else
+	INCLUDES += -I$(SDK_CLIB)/include/nlm -I$(SDK_CLIB)/include
+	# INCLUDES += -I$(SDK_CLIB)/include/nlm/obsolete
+	CFLAGS += -DNETDB_USE_INTERNET
+endif
+CFLAGS	+= -I. -I.. -I$(LIBGD)
+CFLAGS	+= $(INCLUDES)
+
+ifeq ($(MTSAFE),YES)
+	XDCOPT = -n
+endif
+ifeq ($(MTSAFE),NO)
+	XDCOPT = -u
+endif
+
+ifeq ($(findstring linux,$(OSTYPE)),linux)
+DL	= '
+#-include $(NDKBASE)/nlmconv/ncpfs.inc
+endif
+
+vpath %.c . .. $(LIBGD)
+
+ifdef SCREEN
+ifneq ($(SCREEN),NONE)
+OBJSCR	= $(OBJDIR)/keepscreen.o
+endif
+endif
+
+.PHONY: all prebuild dist install clean
+.PRECIOUS: $(OBJDIR)/%.o $(OBJDIR)/%.def $(OBJDIR)/%.xdc $(LTARGET) $(DTARGET)
+
+all: prebuild $(TARGETS) 
+
+prebuild: $(OBJDIR) $(OBJDIR)/version.inc
+ifdef LSTATIC
+	$(MAKE) -C ../ -f Makefile lib
+else
+	$(MAKE) -C ../ -f Makefile nlm
+endif
+
+dist: all
+	-$(RM) -r $(OBJDIR)
+
+install: $(INSTDIR) all
+	@$(CP) *.nlm $(INSTDIR)
+	@$(CP) ../CHANGES $(INSTDIR)
+	@$(CP) ../COPYING $(INSTDIR)
+	@$(CP) ../README $(INSTDIR)
+	@$(CP) ../RELEASE-NOTES $(INSTDIR)
+
+clean:
+	-$(RM) -r $(OBJDIR)
+	-$(RM) $(TARGETS)
+
+clean-all: clean
+	-$(MAKE) -C ../ -f Makefile clean
+
+%.lib: $(OBJS)
+	@echo Creating $@
+	@-$(RM) $@
+	@$(AR) $(ARFLAGS) $@ $^
+
+%.nlm: $(OBJDIR)/%.def $(OBJDIR)/%.o $(OBJDIR)/%.xdc $(OBJSCR) $(LDLIBS)
+	@echo Linking $@
+	@-$(RM) $@
+	@$(LD) $(LDFLAGS) $<
+
+$(INSTDIR):
+	@mkdir $(INSTDIR)
+
+$(OBJDIR):
+	@mkdir $(OBJDIR)
+
+$(OBJDIR)/%.o: %.c
+#	@echo Compiling $<
+	$(CC) $(CFLAGS) -c $< -o $@
+
+$(OBJDIR)/version.inc: ../../configure.ac $(OBJDIR)
+	@echo Creating $@
+	@awk -f ../get_ver.awk $< > $@
+
+$(OBJDIR)/%.xdc: Makefile
+	@echo Creating $@
+	@$(MPKXDC) $(XDCOPT) $@
+
+$(OBJDIR)/%.def: Makefile
+	@echo Creating $@
+	@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 $(LIBGD_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 "$(subst .def,,$(notdir $@))"$(DL) >> $@
+ifdef XDCOPT
+	@echo $(DL)xdcdata $(@:.def=.xdc)$(DL) >> $@
+endif
+ifeq ($(LDRING),0)
+	@echo $(DL)flag_on 16$(DL) >> $@
+endif
+ifeq ($(LDRING),3)
+	@echo $(DL)flag_on 512$(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)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 @$(SDK_LIBC)/imports/libc.imp$(DL) >> $@
+	@echo $(DL)import @$(SDK_LIBC)/imports/netware.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 $(PRELUDE)$(DL) >> $@
+	@echo $(DL)input $(OBJSCR)$(DL) >> $@
+	@echo $(DL)input $(@:.def=.o)$(DL) >> $@
+ifdef LSTATIC
+	@echo $(DL)input $(LTARGET)$(DL) >> $@
+endif
+	@echo $(DL)output $(notdir $(@:.def=.nlm))$(DL) >> $@
+endif
+
+