# [Makefile wk 5.3.91] Library libwk1
#     Copyright (c) 1988-97 by Werner Koch (dd9jn)
# This file is part of WkLib.
#
# WkLib is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# WkLib is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
#--------------------------------------------------
# Generieren der Library WK1xxxx (uses GNU-Make)
# Nameskonvention fr Lib: WK1abcd (see: libdflt.mak)
#
#  targets:
#  world      : build all common libraries (w/o debug)
#  for-wam    : build libraries needed for wam
#
#--------------------------------------------------
# DLL=1 ::= Create DLL
# WK16WRAP=1 ::= Create Wrapper-DLL for OS2-16 Bit Functions
# old:-----------------
# DLLs fuer OS/2 2.0  Immer Flat Model
#  Namenskonventionen
#   - DLLs fuer die Standard-Funktionen inklusive der
#     Standard-Funktionen der C-Runtime-Library des C-Set/2
#	wk2if3.dll  - single threaded Version
#	wk2if3d.dll - single threaded Version with at least MEM_DEBUG used
#	wk2if4.dll  - multiple thread Version
#	wk2if4d.dll - multiple thread Version with at least MEM_DEBUG used
#	wk2if3i.lib  - Import Library for wk2if3.dll
#	wk2if3di.lib - Import Library for wk2if3d.dll
#	wk2if4i.lib  - Import Library for wk2if4.dll
#	wk2if4di.lib - Import Library for wk2if4d.dll
#   (Weitere DLLs werden entsprechend wk3.., wk4... benannt)
#
#--------------------------------------------------
# $Id: Makefile,v 1.52 1997/06/24 10:18:48 wk Exp $

# Try to get some standard macros
-include $(WKLIBS)/wklib/config.mak

ifndef PROD
D=1
endif

include $(WKLIBS)/wklib/common.mak

TARGET_PREFIX := ../obj-wklib
ifeq ($(target),i286-wtc-windoze)
# wtc-16-bit seems to be buggy
DO_NOT_OPTIMIZE = 1
endif
LDSH_FLAGS = -mv

include $(WKLIBS)/wklib/wklib.mak

X = $(exe_dir)/
O = $(obj_dir)/
C = $(target_prefix)/common/


########################################
# default path for target "distribution"
########################################
ifndef host_is_os2
dist_path=/vol1/OS2/D/usr/deliver
else
dist_path=d:/usr/deliver
endif
########################################

ifneq ($(wildcard ../wkcrypt/files.mak),)
have_wkcrypt := 1
endif

#---- list of source files ------
SRCS := Makefile xalloc.c error.c cleanup.c file1.c file7.c file8.c \
	strg1.c strg2.c strg6.c strg6b.c strg7.c strg8.c strg9.c getstr.c \
	time2.c time3.c time4.c time5.c time6.c codepg2.c memdbg.c kbd.c \
	atoxn.c gplcopy.c infostr.c infostr2.c strg10.c strg11.c kbdstr1.c \
	fixes1.c mt-sup1.c oalloc.c argparse.c

SRCS := $(SRCS) time1.c argexpd.c  cmprread.c codepg.c crc32.c \
	cright.c cright2.c cright3.c direc1.c direc2.c direc3.c direc4.c \
	direc5.c byteord.c

SRCS := $(SRCS) databuf.c file2.c file3.c file4.c file5.c file6.c \
	file9.c file10.c file11.c file12.c file13.c file15.c ioerror.c

SRCS := $(SRCS) hw_mem1.c semaphor.c srchcmd.c srchenv.c \
	strg3.c strg4.c strg4b.c strg5.c loadmod.c environ.c	 \
	dskspace.c mouse.c pulldll.c

ifdef have_wkcrypt
include ../wkcrypt/files.mak
endif

ifneq ($(COMPANY),ztc)
# Zortech yields internal errors
SRCS := $(SRCS) regexp.c regsub.c regerror.c regmagic.h md5.c
endif

ifeq ($(SYSTEM),netware)
SRCS := $(SRCS) nwmiss.c
endif

# Screen handlings etc.
ifdef msdos_like_system
ifneq ($(SYSTEM),netware)
ifneq ($(SYSTEM),mingw32) # not yet
SRCS := $(SRCS) bvideo.c console.c wscrdrv.c
endif
endif
endif

# threads, queues etc.
SRCS := $(SRCS) lwpmain.c lwpsema.c lwpproc.c

# Communication support
SRCS := $(SRCS) nmpipe.c


#  Header Files located in ../wk
SRCS := $(SRCS) bios.h cmpr.h cua.h dabf.h direc.h dos.h environ.h \
	errorhd.h file.h hwacc.h io.h keys.h lib.h memdbg.h rcmgr.h \
	regexp.h scr.h sema.h strgbuf.h string.h wscrdrv.h byteord.h \
	lwp.h md5.h console.h crypt.h


ifeq ($(SYSTEM),msdos)
SRCS := $(SRCS) timer.c
endif

ifeq ($(SYSTEM),os2)
ifeq ($(CPU),i386)
SRCS := $(SRCS) video16.c kbd16.c
endif
endif

ifeq ($(COMPANY),emx)
SRCS := $(SRCS) emxsup1.c
endif


#  logerror.c  #-- unused at the moment
#  sema.c      #-- unused at the moment
#  wscrdrv.c   #-- Simple Full Screen Manager
#  dllmain.c	  besondere behandlung


#----- end of source list -----

DYNAMIC_MODULES1S := argexpd.c atoxn.c cleanup.c cmprread.c codepg.c codepg2.c\
    crc32.c cright.c direc1.c direc2.c direc3.c direc4.c direc5.c environ.c \
    error.c \
    file1.c file2.c file3.c file4.c file5.c file6.c file7.c file8.c \
    file9.c file10.c file11.c file12.c databuf.c semaphor.c \
    getstr.c hw_mem1.c kbd.c srchcmd.c srchenv.c nmpipe.c\
    strg1.c strg2.c strg3.c strg4.c strg4b.c strg5.c strg6.c strg6b.c strg7.c \
    strg8.c time1.c time2.c time3.c time4.c time5.c time6.c \
    dllmain.c gplcopy.c loadmod.c video16.c kbd16.c \
    byteord.c nmpipe.c lwpmain.c lwpsema.c lwpproc.c dskspace.c ioerror.c \
    cright.c cright2.c cright3.c infostr.c fixes1.c mt-sup1.c

# cright2.c sollte eigentlich nicht in die dll
# Wir sollten eine neue Funktion: wklib_init_library machen
# die dann alle mglichen Pointer aufsetzt (infostr etc.)
# Falls dieser Pointer nicht gesetzt ist, wird halt
# das interne Copyright benutzt ...

ifdef DEBUG
DYNAMIC_MODULES1S += memdbg.c
else
DYNAMIC_MODULES1S += xalloc.c
endif
ifeq ($(COMPANY),wtc)
DYNAMIC_MODULES1S += pulldll.c
endif

DYNAMIC_MODULES1 := $(strip $(addprefix $(obj_dir)/, \
	      $(patsubst %.c,%$o  ,$(filter %.c,$(DYNAMIC_MODULES1S)))))

# DYNAMIC_MODULES2 = bvideo.c wscrdrv.c

ifdef WK16WRAP
WK16WRAP_MODULES1S := bvideo.c video16.c kbd16.c

WK16WRAP_MODULES1 := $(strip $(addprefix $(obj_dir)/, \
	      $(patsubst %.c,%$o  ,$(filter %.c,$(WK16WRAP_MODULES1S)))))
endif

#----- end of dll List -----

OBJS := $(strip $(addprefix $(obj_dir)/, \
		  $(patsubst %.c,%$o  ,$(notdir $(filter %.c,$(SRCS))))))



ifdef host_is_os2

ifeq ($(COMPANY),ibm)

ifdef WK16WRAP
ifdef DEBUG
args_error += echo DO not use DEBUG for WK16WRAP (use PROD=1)
endif
cflags_1 := $(CFLAGS) -DMAKE_WK16WRAP
cflags_1 := $(subst -Fo,,$(cflags_1))
CFLAGS = $(CFLAGS_1) -Fo$@
endif
ifdef MULTI_THREADED
# No symbolic infos for multithreaded libs (disk space issue)
cflags_1 := $(CFLAGS)
cflags_1 := $(subst -DDEBUG,,$(cflags_1))
cflags_1 := $(subst -Ti,,$(cflags_1))
cflags_1 := $(subst -Fo,,$(cflags_1))
CFLAGS = $(cflags_1) -Fo$@
endif


endif #-- IBM --
endif # host_is_os2


#######  dependencies  ##########

ifdef WK16WRAP
wk16wrap.dll : $(WK16WRAP_MODULES1) wk16wrap.def
	$(LDSH) -jn $(LDSH_FLAGS) os2386.lib dde4nbs.lib \
		$(WKLIBPATH)/wk16wrap.dll $^
	$(RM) $(WK16WRAP_MODULES1)
endif

default :   check-args $(wklib)

for-wam : check-args
	$(MAKE) MULTI_THREADED=1
	$(MAKE) MULTI_THREADED=1 DLL=1


ifdef DLL

default :   check-args $Xlibwk1$i

$Xlibwk1$s $Xlibwk1$i: $(DYNAMIC_MODULES1) libwk1d.def
	$(LDSH) $(LDSH_FLAGS) $(LDSH_FLAGS_4DLL) -L$(basename $@)$i \
	    $(LDSH_OBJS_4DLL) $(ADD_LDSH_MACROS) TARGET=$(target) \
	    $(basename $@)$s $^ $(LDSH_LIBS_4DLL)

else  # not DLL

default :   check-args $(wklib)

$(wklib) : $(OBJS)
ifndef host_is_os2
	$(AR) r $(lib_dir)/$(wklib)   $?
	$(RANLIB) $(lib_dir)/$(wklib)
else
ifdef have_emx_tools
	emxomfar rc $(lib_dir)/$(wklib)   $?
else
	timecmp -v \"-f-+ '%s'\\n\" -o$(lib_dir)/lbc.tmp \
		  $(obj_dir)/*$o  $(lib_dir)/$(wklib)
	wlib '$(subst /,\\,$(lib_dir)/$(wklib))' \
	     @'$(subst /,\\,$(obj_dir)/lbc.tmp)'
endif
endif
endif


ifdef host_is_os2
world:
	$(MAKE) PROD=1 CPU=i386  SYSTEM=os2
	$(MAKE) PROD=1 CPU=i86	 SYSTEM=msdos  MODEL=L
	$(MAKE) PROD=1 CPU=i286  SYSTEM=windoze  MODEL=L
	$(MAKE) PROD=1 CPU=i386  SYSTEM=netware
	$(MAKE) PROD=1 DO_NOT_OPTIMIZE=1 CPU=i386  SYSTEM=msdos

else # host is not OS2
world:
	$(MAKE) PROD=1

endif # host is not OS2

mingw32:
	$(MAKE) TARGET=i386--mingw32

make-dirs:
ifdef host_is_os2
	echo Directories sollten bereits angelegt sein
else
	for f in $(target_prefix) $(target_prefix)/common \
		 $(target_prefix)/$(target) $(obj_dir); do \
	   test -d $$f || mkdir $$f; \
	done
endif

clean:
	-$(RM) out out2 *$o


distribution: copy_source
	wkdutil -s $(dist_path)/  zip -u -r wklib.zip wklib wk adds

copy_source:
	update README Makefile *.mak *.c *.h *.def *.asm ../wk/*.h \
	       ../adds/*  $(dist_path)/wklib/



.PHONY:  clean world  dist distribution copy_source for-wam make-dirs mingw32

ifeq ($(COMPANY),wtc)
$(obj_dir)/pulldll$o : pulldll.c
	$(CC) -bd $(ADD_CFLAGS) $(CFLAGS) $<
ifneq ($(CPU),i386)
$(obj_dir)/md5$o : md5.c
	$(CC) $(ADD_CFLAGS) $(CFLAGS) -od $<
endif
endif

$(OBJS) : ../wk/tailor.h

$Oargparse$o : ../wk/lib.h

ifdef have_wkcrypt
include ../wkcrypt/depend.mak
endif


# Make a source distribution
ifdef host_is_os2
dist:
	@echo Cannot make a source distribution on an OS/2 host.
else
dist:
	@set -e ; homedir=$$(pwd); mods='wklib wk wam wkswn'; \
	version=$$(sed -ne '/^#define WKLIB_VERSION.*"/s/.*"\(.*\)".*/\1/p' ../wk/tailor.h); \
	tagver=WKLIB-$$(echo $$version| sed -e 's/\./-/g'); \
	echo "Making wklib-$$version.tar.gz"; \
	cvs -Q diff . ../wk ../wam ../wkswn ; \
	test -d ../temp || mkdir ../temp; \
	cd ../temp ; \
	rm -rf wklib-$$version ; \
	mkdir wklib-$$version ; \
	cd    wklib-$$version ; \
	for i in $$mods; do \
	    cvs -Q checkout -d $$i libs/$$i ; \
	done ; \
	mkdir tools; \
	cvs -Q checkout -d tools/src apps/tools/src/wklib-files;\
	for i in $$(cat tools/src/wklib-files); do \
	    cvs -Q checkout -d tools/src apps/tools/src/$$i ; \
	done; \
	echo Tagging the CVS archives with $$tagver; \
	for i in $$mods; do \
	   cd $$i ; cvs -Q tag $$tagver ; cd .. ; \
	done; \
	rm -r $$(find . -name CVS -type d); \
	cat wklib/Makefile.dist > Makefile; \
	ln -s wklib/README README; \
	echo "Creating tar file"; \
	cd ..; \
	tar czf wklib-$$version.tar.gz wklib-$$version

endif

#---- end of makefile ----#
