# Makefile for OS/2.  Generated from Makefile.in when CVS is
# configured for a dist-build.  Configure never gets run on OS/2, so
# we must include the generated Makefile in the distribution.  See the
# `dist-dir' rule.

project: cvs.exe
# .SUFFIXES .c .o .exe

# Directory in which to install executables.
install_dir = s:/gnu/util

# srcdir is usually "."
srcdir     = @srcdir@

# top_srcdir is usually ".."
top_srcdir = @top_srcdir@

lib_dir     = ${top_srcdir}/lib
cvs_srcdir = ${top_srcdir}/src
diff_srcdir = ${top_srcdir}/diff
zlib_dir = ${top_srcdir}/zlib

# Do we need these?
# prefix = /usr/local
# exec_prefix = ${prefix}

# Used to say -lufc, but that would only be needed for crypt().
LIB = -lsocket

CINC =
# This says we are building an object file, not a full executable.
OBJ_CFLAGS = -c
CFLAGS = -pedantic -Wall -fno-builtin ${CINC} \
  -I${srcdir} -I${lib_dir} -I${cvs_srcdir} -I${zlib_dir} \
  -DUNIX -DHAVE_CONFIG_H


# headers specific to OS/2

# We list OS2_HEADERS so we know what to include when we make dist-dir
# here.
OS2_HEADERS = \
       ${srcdir}/config.h \
       ${srcdir}/options.h \
       ${srcdir}/rcmd.h

# headers we use from the common src dir, ../src
COMMON_HEADERS = \
       ${cvs_srcdir}/client.h \
       ${cvs_srcdir}/cvs.h \
       ${cvs_srcdir}/rcs.h \
       ${cvs_srcdir}/hash.h \
       ${cvs_srcdir}/myndbm.h \
       ${cvs_srcdir}/patchlevel.h \
       ${cvs_srcdir}/update.h \
       ${cvs_srcdir}/server.h \
       ${cvs_srcdir}/error.h

# headers in ../diff
DIFF_HEADERS = \
       ${diff_srcdir}/cmpbuf.h \
	   ${diff_srcdir}/diff.h \
	   ${diff_srcdir}/system.h 

# sources specific to OS/2
OS2_SOURCES = \
       ${srcdir}/filesubr.c \
       ${srcdir}/startserver.c \
       ${srcdir}/stripslash.c \
       ${srcdir}/savecwd.c \
       ${srcdir}/system.c

# sources we use from the common src dir, ../src
# FIXME: Is this used anywhere?  I don't think it is.
COMMON_SOURCES = \
       ${cvs_srcdir}/add.c \
       ${cvs_srcdir}/admin.c \
       ${cvs_srcdir}/buffer.c \
       ${cvs_srcdir}/checkin.c \
       ${cvs_srcdir}/checkout.c \
       ${cvs_srcdir}/classify.c \
       ${cvs_srcdir}/client.c \
       ${cvs_srcdir}/commit.c \
       ${cvs_srcdir}/create_adm.c \
       ${cvs_srcdir}/cvsrc.c \
       ${cvs_srcdir}/diff.c \
       ${cvs_srcdir}/edit.c \
       ${cvs_srcdir}/entries.c \
       ${cvs_srcdir}/error.c \
       ${cvs_srcdir}/expand_path.c \
       ${cvs_srcdir}/fileattr.c \
       ${cvs_srcdir}/find_names.c \
       ${cvs_srcdir}/hash.c \
       ${cvs_srcdir}/history.c \
       ${cvs_srcdir}/ignore.c \
       ${cvs_srcdir}/import.c \
       ${cvs_srcdir}/lock.c \
       ${cvs_srcdir}/log.c \
       ${cvs_srcdir}/login.c \
       ${cvs_srcdir}/logmsg.c \
       ${cvs_srcdir}/main.c \
       ${cvs_srcdir}/mkmodules.c \
       ${cvs_srcdir}/modules.c \
       ${cvs_srcdir}/myndbm.c \
       ${cvs_srcdir}/no_diff.c \
       ${cvs_srcdir}/parseinfo.c \
       ${cvs_srcdir}/patch.c \
       ${cvs_srcdir}/rcs.c \
       ${cvs_srcdir}/rcscmds.c \
       ${cvs_srcdir}/recurse.c \
       ${cvs_srcdir}/release.c \
       ${cvs_srcdir}/remove.c \
       ${cvs_srcdir}/repos.c \
       ${cvs_srcdir}/root.c \
       ${cvs_srcdir}/rtag.c \
       ${cvs_srcdir}/scramble.c \
       ${cvs_srcdir}/server.c \
       ${cvs_srcdir}/status.c \
       ${cvs_srcdir}/subr.c \
       ${cvs_srcdir}/run.c \
       ${cvs_srcdir}/tag.c \
       ${cvs_srcdir}/update.c \
       ${cvs_srcdir}/watch.c \
       ${cvs_srcdir}/wrapper.c \
       ${cvs_srcdir}/vers_ts.c \
       ${cvs_srcdir}/version.c \
       ${cvs_srcdir}/zlib.c
# end of $COMMON_SOURCES

# sources in ../diff
DIFF_SOURCES = \
	   ${diff_srcdir}/analyze.c \
	   ${diff_srcdir}/cmpbuf.c \
	   ${diff_srcdir}/context.c \
	   ${diff_srcdir}/diff.c \
	   ${diff_srcdir}/diff3.c \
	   ${diff_srcdir}/dir.c \
	   ${diff_srcdir}/ed.c \
	   ${diff_srcdir}/ifdef.c \
	   ${diff_srcdir}/io.c \
	   ${diff_srcdir}/normal.c \
	   ${diff_srcdir}/side.c \
	   ${diff_srcdir}/util.c \
	   ${diff_srcdir}/version.c 

# sources from ../lib
# FIXME: Is this used anywhere?  I don't think it is.
LIB_SOURCES = \
       ${lib_dir}/argmatch.c \
       ${lib_dir}/getline.c \
       ${lib_dir}/getopt.c \
       ${lib_dir}/getopt1.c \
       ${lib_dir}/md5.c \
       ${lib_dir}/regex.c \
       ${lib_dir}/sighandle.c \
       ${lib_dir}/valloc.c \
       ${lib_dir}/yesno.c \
       ${lib_dir}/getdate.c

# object files from OS/2 sources
# was       ${srcdir}/rcmd.o
OS2_OBJECTS = \
       ${srcdir}/filesubr.o \
       ${srcdir}/startserver.o \
       ${srcdir}/stripslash.o \
       ${top_srcdir}/windows-NT/rcmd.o \
       ${srcdir}/savecwd.o \
       ${srcdir}/system.o

# object files from ../src
COMMON_OBJECTS = \
       ${cvs_srcdir}/add.o \
       ${cvs_srcdir}/admin.o \
       ${cvs_srcdir}/buffer.o \
       ${cvs_srcdir}/checkin.o \
       ${cvs_srcdir}/checkout.o \
       ${cvs_srcdir}/classify.o \
       ${cvs_srcdir}/client.o \
       ${cvs_srcdir}/commit.o \
       ${cvs_srcdir}/create_adm.o \
       ${cvs_srcdir}/cvsrc.o \
       ${cvs_srcdir}/diff.o \
       ${cvs_srcdir}/edit.o \
       ${cvs_srcdir}/entries.o \
       ${cvs_srcdir}/expand_path.o \
       ${cvs_srcdir}/fileattr.o \
       ${cvs_srcdir}/find_names.o \
       ${cvs_srcdir}/hash.o \
       ${cvs_srcdir}/history.o \
       ${cvs_srcdir}/ignore.o \
       ${cvs_srcdir}/import.o \
       ${cvs_srcdir}/lock.o \
       ${cvs_srcdir}/log.o \
       ${cvs_srcdir}/login.o \
       ${cvs_srcdir}/logmsg.o \
       ${cvs_srcdir}/main.o \
       ${cvs_srcdir}/mkmodules.o \
       ${cvs_srcdir}/modules.o \
       ${cvs_srcdir}/myndbm.o \
       ${cvs_srcdir}/no_diff.o \
       ${cvs_srcdir}/parseinfo.o \
       ${cvs_srcdir}/patch.o \
       ${cvs_srcdir}/rcs.o \
       ${cvs_srcdir}/rcscmds.o \
       ${cvs_srcdir}/recurse.o \
       ${cvs_srcdir}/release.o \
       ${cvs_srcdir}/remove.o \
       ${cvs_srcdir}/repos.o \
       ${cvs_srcdir}/root.o \
       ${cvs_srcdir}/rtag.o \
       ${cvs_srcdir}/scramble.o \
       ${cvs_srcdir}/server.o \
       ${cvs_srcdir}/status.o \
       ${cvs_srcdir}/tag.o \
       ${cvs_srcdir}/update.o \
       ${cvs_srcdir}/watch.o \
       ${cvs_srcdir}/wrapper.o \
       ${cvs_srcdir}/vers_ts.o \
       ${cvs_srcdir}/subr.o \
       ${cvs_srcdir}/run.o \
       ${cvs_srcdir}/version.o \
       ${cvs_srcdir}/error.o \
       ${cvs_srcdir}/zlib.o
# end of $COMMON_OBJECTS

# object files in ../diff
DIFF_OBJECTS = \
       ${diff_srcdir}/analyze.o \
	   ${diff_srcdir}/cmpbuf.o \
	   ${diff_srcdir}/context.o \
	   ${diff_srcdir}/diff.o \
	   ${diff_srcdir}/diff3.o \
	   ${diff_srcdir}/dir.o \
	   ${diff_srcdir}/ed.o \
	   ${diff_srcdir}/ifdef.o \
	   ${diff_srcdir}/io.o \
	   ${diff_srcdir}/normal.o \
	   ${diff_srcdir}/side.o \
	   ${diff_srcdir}/util.o \
	   ${diff_srcdir}/version.o 

# objects from ../lib
LIB_OBJECTS = \
       ${lib_dir}/argmatch.o \
       ${lib_dir}/getline.o \
       ${lib_dir}/getopt.o \
       ${lib_dir}/getopt1.o \
       ${lib_dir}/md5.o \
       ${lib_dir}/regex.o \
       ${lib_dir}/sighandle.o \
       ${lib_dir}/valloc.o \
       ${lib_dir}/yesno.o \
       ${lib_dir}/getdate.o

ZLIB_OBJECTS = ${zlib_dir}/adler32.o \
       ${zlib_dir}/compress.o \
       ${zlib_dir}/crc32.o \
       ${zlib_dir}/gzio.o \
       ${zlib_dir}/uncompr.o \
       ${zlib_dir}/deflate.o \
       ${zlib_dir}/trees.o \
       ${zlib_dir}/zutil.o \
       ${zlib_dir}/inflate.o \
       ${zlib_dir}/infblock.o \
       ${zlib_dir}/inftrees.o \
       ${zlib_dir}/infcodes.o \
       ${zlib_dir}/infutil.o \
       ${zlib_dir}/inffast.o

SOURCES = ${COMMON_SOURCES} ${LIB_SOURCES} ${OS2_SOURCES} ${DIFF_SOURCES}
HEADERS = ${COMMON_HEADERS} ${OS2_HEADERS} ${DIFF_HEADERS}
OBJECTS = ${COMMON_OBJECTS} ${LIB_OBJECTS} ${OS2_OBJECTS} ${DIFF_OBJECTS} \
  ${ZLIB_OBJECTS}

DISTFILES = ${OS2_HEADERS} ${OS2_SOURCES} \
  ${srcdir}/README ${srcdir}/ChangeLog \
  ${srcdir}/Makefile.in ${srcdir}/.cvsignore \
  Makefile

all:

.PHONY: all install uninstall
all install uninstall:

installdirs:
.PHONY: installdirs

.PHONY: tags TAGS
tags TAGS:

.PHONY: ls
ls:
	@echo ${DISTFILES}

.PHONY: clean distclean realclean mostlyclean
clean distclean realclean mostlyclean:

.PHONY: lint
lint:

.PHONY: dist-dir
dist-dir:
	mkdir ${DISTDIR}
	for i in ${DISTFILES}; do \
	  ln $${i} ${DISTDIR}; \
	done

# We don't have a real distclean or anything like that, but at least
# we can get rid of the obj files and cvs.exe.
clean:
	rm -f cvs.exe cvs.out
	rm -f ${srcdir}/*.o
	rm -f ${diff_srcdir}/*.o
	rm -f ${lib_dir}/*.o ${lib_dir}/*.a
	rm -f ${zlib_dir}/*.o ${zlib_dir}/*.a
	rm -f ${cvs_srcdir}/*.o

clean-cvs:
	del cvs.exe cvs.out
	del $(subst /,\,${srcdir}/*.o)
	del $(subst /,\,${diff_srcdir}/*.o)
	del $(subst /,\,${lib_dir}/*.o ${lib_dir}/*.a)
	del $(subst /,\,${zlib_dir}/*.o ${zlib_dir}/*.a)
	del $(subst /,\,${cvs_srcdir}/*.o)

install-cvs: cvs.exe
	copy $(subst /,\,${srcdir}/cvs.exe ${install_dir}/cvs.exe)

%.o: %.c
	gcc ${OBJ_CFLAGS} ${CFLAGS} -o $@ -c $*.c

${cvs_srcdir}/rcscmds.o: ${cvs_srcdir}/rcscmds.c ${top_srcdir}/diff/diffrun.h
	gcc ${OBJ_CFLAGS} ${CFLAGS} -I${top_srcdir}/diff -o $@ -c $*.c

${lib_dir}/libcvs.a: $(LIB_OBJECTS)
	$(AR) cr $@ $(LIB_OBJECTS)

${zlib_dir}/libz.a: $(ZLIB_OBJECTS)
	$(AR) cr $@ $(ZLIB_OBJECTS)

# Eventually probably static linking (cvs-static.exe) will be the
# default, but even so we'll want to preserve this rule so we can
# create a dynamically linked executable when we want coredumps.
cvs.exe: ${OBJECTS} ${lib_dir}/libcvs.a ${zlib_dir}/libz.a
	gcc $(COMMON_OBJECTS) $(OS2_OBJECTS) ${DIFF_OBJECTS} ${lib_dir}/libcvs.a ${zlib_dir}/libz.a $(LIB) -o cvs.out
	emxbind -w -o $@.exe cvs.out

${lib_dir}/libcvs.lib: ${lib_dir}/libcvs.a
	emxomf ${lib_dir}/libcvs.a

${zlib_dir}/libz.lib: ${zlib_dir}/libz.a
	emxomf ${zlib_dir}/libz.a

# Where do -Zomf -Zsys go?  When we compile the .o's?
# When I tried this rule, I had problems with (1) could not find
# socket.lib.  Hmm.  I thought I converted it from socket.a
# in the EMX distribution.  Probably my EMX installation at fault.
# (2) could not find miscellaneous system routines like strerror.
# This might be a matter of learning to live without them (EMX
# doc is supposed to describe which are present and which are not).
# (3) some linker errors like no stack and the like.  Maybe I am
# missing some options?
cvs-static.exe: ${OBJECTS} ${lib_dir}/libcvs.lib ${zlib_dir}/libz.lib
	emxomf ${OBJECTS}
	emxomfld -o $@ $(subst .o,.obj,${OBJECTS}) \
	  ${lib_dir}/libcvs.lib ${zlib_dir}/libz.lib ${LIB}

# cvs.o: ${OBJECTS} ${SOURCES} ${HEADERS}

subdir = emx
# Hmm.  This rule wants to exist on unix, so that "make dist" works.
# And it doesn't want to exist on OS/2, because configure doesn't
# run on OS/2 and so ../config.status won't exist.  For now we just
# say, in emx/README, that people will need to comment it out.
Makefile: ../config.status $(srcdir)/Makefile.in
	cd .. && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= ./config.status

