/* $Id: Imakefile,v 1.12.2.4 2004/05/19 15:39:22 aida_s Exp $ */
#include "./Canna.conf"

#define IHaveSubdirs
#define PassCDebugFlags 'CDEBUGFLAGS=$(CDEBUGFLAGS)'
#ifndef ConfigureArgs
# define ConfigureArgs
#endif
#if UseInet6
# define CannaConfInet6 echo "#define INET6"
#else
# define CannaConfInet6 echo "/* #undef INET6 */"
#endif

      CANNAROOT = .
      WORLDOPTS = /* -k */
        SUBDIRS = lib canna server cmd dic misc doc
        INCLUDE = ./include/canna
     RKIINCLUDE = ./include/RKindep
        DEFINES = $(CANNA_DEFINES)
CONFIGURE_CMD = IN_MAKE=yes $(CANNAROOT)/confwrapper run ./configure --prefix=$(cannaPrefix) ConfigureArgs
PURE_CFLAGS = $(CDEBUGFLAGS) $(CCOPTIONS) /* $(THREADS_CFLAGS) $(MODULE_CFLAGS) */
supportOldWchar = SupportOldWchar


AllTarget(cannaconf.h accanna.h pubconf.h)
MakeSubdirs($(SUBDIRS))
DependSubdirs($(SUBDIRS))

clean::
	$(RM) -r include cannaconf.h
distclean::
	$(RM) accanna.h config.log config.cache config.status pubconf.h cwenv.sh

includes:: cannaconf.h accanna.h pubconf.h
	$(RM) -r include
	MakeDir($(INCLUDE))
	MakeDir($(RKIINCLUDE))

/* ʲ cannaconf.h 롼 */
cannaconf.h: Canna.conf
	@echo "creating $@"
#ifdef OS2Architecture
	@echo "#ifndef CANNACONF_H" > junkjunk
	@echo "#define CANNACONF_H" >> junkjunk
	@echo "#include \"accanna.h\"" >> junkjunk
	@echo "#ifdef malloc" >> junkjunk
	@echo "# undef malloc" >> junkjunk
	@echo "#endif" >> junkjunk
	@echo "/* for cannaserver */" >> junkjunk
	@echo "#define DICHOME '$(DicDir)'" >> junkjunk
	@echo "#define ERRDIR '$(ErrDir)'" >> junkjunk
	@echo "#define USE_INET_SOCKET" >> junkjunk
	@echo "#define ACCESS_FILE '$(AccessFile)'" >> junkjunk
	@echo "/* for lib/RKC */" >> junkjunk
	@echo "#define CANNAHOSTFILE '$(cannaLibDir)/cannahost'" >> junkjunk
	@echo "/* for lib/canna */" >> junkjunk
	@echo "#define CANNALIBDIR '$(cannaLibDir)'" >> junkjunk
	@echo "#define SUPPORT_OLD_WCHAR '$(supportOldWchar)'" >> junkjunk
	@echo "/* for scripts */" >> junkjunk
	@echo "#define CANNABINDIR $(cannaBinDir)" >> junkjunk
	@echo "/* others */" >> junkjunk
	@echo "#define CANNA_LIGHT $(cannaLight)" >> junkjunk
	@echo "#ifdef nec" >> junkjunk
	@echo "#undef nec" >> junkjunk
	@echo "#endif" >> junkjunk
	@CannaConfInet6 >> junkjunk
	@echo "#endif /* !CANNACONF_H */" >> junkjunk
	@sed -e "s/'/\\\"/" -e "s/'/\\\"/" < junkjunk > junk
	@$(RM) junkjunk
#else
	@(echo "#ifndef CANNACONF_H";\
	 echo "#define CANNACONF_H";  \
	 echo "#include \"accanna.h\"";  \
	 echo "#ifdef malloc"; \
	 echo "# undef malloc"; \
	 echo "#endif"; \
	 echo "/* for cannaserver */";  \
	 echo "#define DICHOME \"$(DicDir)\"";  \
	 echo "#define ERRDIR \"$(ErrDir)\"";   \
	 echo "#define USE_UNIX_SOCKET"; \
	 echo "#define USE_INET_SOCKET"; \
	 echo "#define IR_UNIX_DIR \"$(UnixSockDir)\""; \
	 echo "#define IR_UNIX_SOCKNAME \"$(UnixSockName)\""; \
	 echo "#define ACCESS_FILE \"$(AccessFile)\""; \
	 echo "/* for lib/RKC */";\
	 echo "#define CANNAHOSTFILE \"$(cannaLibDir)/cannahost\"";\
	 echo "/* for lib/canna */";\
	 echo "#define CANNALIBDIR \"$(cannaLibDir)\""; \
	 echo "#define SUPPORT_OLD_WCHAR $(supportOldWchar)"; \
	 echo "/* for scripts */";\
	 echo "#define CANNABINDIR $(cannaBinDir)"; \
	 echo "/* others */";\
	 echo "#define CANNA_LIGHT $(cannaLight)"; \
	 echo "#ifdef nec"; \
	 echo "#undef nec"; \
	 echo "#endif"; \
	 CannaConfInet6; \
	 echo "#endif /* !CANNACONF_H */") > junk
#endif /* OS2Architecture */
	@if test -r $@ && cmp -s junk $@; then \
	   echo "$@ unchanged"; \
	   rm junk; \
	 else \
	   mv junk $@; \
	 fi

XCOMM Invoke configure only when accanna.h does not exist for faster build
accanna.h pubconf.h:
	$(CONFIGURE_CMD)
XCOMM If you want to invoke configure explicitly, do "make config"
config::
	$(CONFIGURE_CMD)
reconfig::
	$(RM) config.cache cwenv.sh
	$(CONFIGURE_CMD)
XCOMM Invoked from confwrapper
cwenv.sh:
	$(CANNAROOT)/confwrapper mkenv CPPFLAGS $(ALLDEFINES) > $@
	$(CANNAROOT)/confwrapper mkenv CC env $(CC) >> $@
	$(CANNAROOT)/confwrapper mkenv CFLAGS $(PURE_CFLAGS) >> $@

CANNAROOT = .
SERVERDIR = server dic/phono dic/ideo
CLIENTDIR = cmd dic/phono misc
SGSDIR = canna lib
MOSTDIR = lib canna server cmd dic/phono misc doc

install:: mkbindir mklibdir mkdicdir mkerrdir
instserver:: mkdicdir mkerrdir
instclient:: mkbindir mkdicdir
instsgs:: mklibdir
instmost:: mkbindir mklibdir mkdicdir mkerrdir

MakeDirectories(mkbindir, $(cannaBinDir))
MakeDirectories(mklibdir, $(cannaLibDir))
#ifdef InstallAsUser
MakeDirectories(mkdicdir, $(DicDir))
MakeDirectories(mkerrdir, $(ErrDir))
#else
MakeDirectoriesLong(mkdicdir, $(DicDir), $(cannaOwner), $(cannaGroup))
MakeDirectoriesLong(mkerrdir, $(ErrDir), $(cannaOwner), $(cannaGroup))
#endif

LinkFileList(includes,cannaconf.h,$(CANNAROOT)/include,..)
LinkFileList(includes,accanna.h,$(CANNAROOT)/include,..)
LinkFileList(includes,pubconf.h,$(CANNAROOT)/include/canna,../..)
InstallMultiple(pubconf.h,$(cannaIncDir))

canna:: 
	@echo ""
	@echo "Building canna"
	@echo ""
	@echo ""
	$(MAKE) Makefiles
	$(MAKE) clean
	$(MAKE) includes
	$(MAKE) -k depend
	$(MAKE) $(WORLDOPTS)
	@echo ""
	@date
	@echo ""

instserver::
	@case '${MFLAGS}' in *[ik]*) set +e;; esac; \
	for i in $(SERVERDIR) ;\
	do \
		(cd $$i ; echo "installing" "in $(CURRENT_DIR)/$$i..."; \
		$(MAKE) $(MFLAGS) DESTDIR='$(DESTDIR)' install); \
	done

instclient::
	@case '${MFLAGS}' in *[ik]*) set +e;; esac; \
	for i in $(CLIENTDIR) ;\
	do \
		(cd $$i ; echo "installing" "in $(CURRENT_DIR)/$$i..."; \
		$(MAKE) $(MFLAGS) DESTDIR='$(DESTDIR)' install); \
	done

instsgs::
	@case '${MFLAGS}' in *[ik]*) set +e;; esac; \
	for i in $(SGSDIR) ;\
	do \
		(cd $$i ; echo "installing" "in $(CURRENT_DIR)/$$i..."; \
		$(MAKE) $(MFLAGS) DESTDIR='$(DESTDIR)' install); \
	done

instmost::
	@case '${MFLAGS}' in *[ik]*) set +e;; esac; \
	for i in $(MOSTDIR) ;\
	do \
		(cd $$i ; echo "installing" "in $(CURRENT_DIR)/$$i..."; \
		$(MAKE) $(MFLAGS) DESTDIR='$(DESTDIR)' install); \
	done
