INSTALL_VERSION = 6.0

STRIP =  strip
DEBUG = -g
CC = egcs

OPTS = -O

CFLAGS = $(DEBUG) $(OPTS) -Wall -DINSTALL_VERSION=\"$(INSTALL_VERSION)\" -D_GNU_SOURCE=1 -I /usr/include/rpm -DUSE_ALT_DNS=1
LDFLAGS = $(DEBUG)
CRYPT=/usr/lib/libcrypt.a

ARCH := $(patsubst i%86,i386,$(shell uname -m))
ARCH := $(patsubst sparc%,sparc,$(ARCH))

ifeq (alpha,$(ARCH))
ARCHOBJS2 = kbd.o earlymethods.o install.o milo.o otherinsmod.o
CFLAGS += -DSINGLE_INSTALL
else
ifeq (i386,$(ARCH))
ARCHOBJS2 = lilo.o kbd.o otherinsmod.o
ARCHOBJS1 = kbd.o otherinsmod.o
ARCHPROGS = install local-install
else
# SPARC
ARCHOBJS2 = lilo.o kbd.o earlymethods.o install.o otherinsmod.o
CFLAGS += -DSINGLE_INSTALL
endif
endif

OBJS = net.o log.o nfsmount.o mount_xdr.o windows.o devices.o \
	scsi.o fs.o run.o bootpc.o dns.o kickstart.o lang.o cdrom.o \
	cpio.o
OBJS1 = earlymethods.o install.o ftp.o url.o urlmethod.o hd.o $(ARCHOBJS1)
ALL1 = $(OBJS) $(OBJS1)
NET1 = earlymethods.o ftp.o url.o urlmethod.o net.o install.o devices.o \
       nfsmount.o mount_xdr.o fs.o
LOCAL1 = $(filter-out $(NET1),$(ALL1)) \
         localearly.o localdevices.o localinstall.o localfs.o
OBJS2 = doit.o pkgs.o setup.o hd.o latemethods.o install2.o ftp.o url.o \
	upgrade.o hash.o commands.o printercfg.o gettext.o hints.o \
	mkswap.o mtab.o syslog.o ls.o idmap.o fsedit.o urlmethod.o smp.o \
        $(ARCHOBJS2) 
ALLOBJS = $(OBJS) $(OBJS1) $(OBJS2)
PROGS = $(ARCHPROGS) install2 genhdlist dmphdlist readmap mapshdr snarffont

SOURCES = $(subst .o,.c,$(OBJS))
SOURCES1 = $(subst .o,.c,$(OBJS1))
SOURCES2 = $(subst .o,.c,$(OBJS2))
EARLYSECOND = fsedit.c latemethods.c mtab.c mkswap.c install2.c mkswap.c
LATESECOND = $(filter-out $(EARLYSECOND),$(SOURCES2))
ALLSOURCES = $(SOURCES) $(SOURCES1) $(SOURCES2)

#---------------

INST1LIBS:=-lpopt /usr/lib/libnewt.a /usr/lib/libslang.a \
           /usr/lib/libm.a /usr/lib/libresolv.a modutils/insmod/libmodutils.a \
           modutils/obj/libobj.a modutils/util/libutil.a libfdisk/libfdisk.a
INST2LIBS:=-lpopt /usr/lib/libdb1.a /usr/lib/libz.a \

INST1DEPLIBS=
INST2DEPLIBS=./libfdisk/libfdisk.a

SUBDIRS=libfdisk

ifeq (i386,$(ARCH))
STATIC=-static
INST1LIBS+=/usr/lib/libm.a /usr/lib/libresolv.a /usr/lib/libnewt.a \
           /usr/lib/libslang.a
INST2LIBS+=/usr/lib/libm.a /usr/lib/libresolv.a /usr/lib/libnewt.a \
           /usr/lib/libslang.a
INST1DEPLIBS+=./pci-probing/libpciprobe.a ./pcmcia-probing/libpcmciaprobe.a \
               modutils/insmod/libmodutils.a modutils/obj/libobj.a \
               modutils/util/libutil.a
INST2DEPLIBS+=./pci-probing/libpciprobe.a \
               modutils/insmod/libmodutils.a modutils/obj/libobj.a \
               modutils/util/libutil.a
SUBDIRS+=modutils pci-probing pcmcia-probing
else
ifeq (alpha,$(ARCH))
STATIC=
INST1DEPLIBS+=
INST2DEPLIBS+=/usr/lib/libslang.a /usr/lib/libnewt.a /usr/lib/libresolv.a \
              pci-probing/libpciprobe.a modutils/insmod/libmodutils.a \
              modutils/obj/libobj.a modutils/util/libutil.a
SUBDIRS+=modutils pci-probing
#LDFLAGS+=-lnewt -lslang -lm -lresolv
else
ifeq (sparc,$(ARCH))
STATIC=
INST2LIBS+=/usr/lib/libm.a /usr/lib/libresolv.a /usr/lib/libnewt.a \
           /usr/lib/libslang.a
INST2DEPLIBS+=./pci-probing/libpciprobe.a ./sbus-probing/libsbusprobe.a \
               modutils/insmod/libmodutils.a modutils/obj/libobj.a \
               modutils/util/libutil.a
SUBDIRS+=modutils pci-probing sbus-probing
endif
endif
STATIC=
endif

INST1LIBS+=/usr/lib/libz.a -lrpm

ifeq (.depend,$(wildcard .depend))
TARGET=subdirs $(PROGS)
else
TARGET=depend subdirs $(PROGS)
endif


#LANGS = cs fi no tr ro sr sk de da se it pl in fr hu
LANGS = no ro sk de it in hu ru uk_UA fr is

TR1 = $(patsubst %,tr/%1.tr,$(LANGS))
TR2 = $(patsubst %,tr/%2.tr,$(LANGS))
TR3 = $(patsubst %,tr/%3.tr,$(LANGS))

all: $(TARGET) 

translations: install1.tr install2.tr install3.tr

localdevices.o: devices.c
	$(CC) $(CFLAGS) -DDISABLE_NETWORK=1 -c -o localdevices.o devices.c

localearly.o: earlymethods.c
	$(CC) $(CFLAGS) -DDISABLE_NETWORK=1 -c -o localearly.o earlymethods.c

localinstall.o: install.c
	$(CC) $(CFLAGS) -DDISABLE_NETWORK=1 -c -o localinstall.o install.c

localfs.o: fs.c
	$(CC) $(CFLAGS) -DDISABLE_NETWORK=1 -c -o localfs.o fs.c

local-install: $(LOCAL1) $(INST1DEPLIBS)
	$(CC) $(STATIC) $(LDFLAGS) -o local-install $^ $(INST1LIBS) $(INST1DEPLIBS)

install: $(OBJS) $(OBJS1) $(INST1DEPLIBS)
	$(CC) $(STATIC) $(LDFLAGS) -o install $^ $(INST1LIBS) $(INST1DEPLIBS)

install2: $(OBJS) $(OBJS2) /usr/lib/librpm.a $(INST2DEPLIBS)
	$(CC) $(LDFLAGS) -o install2 $^ $(INST2LIBS) $(CRYPT) $(INST2DEPLIBS)

subdirs:
	for d in $(SUBDIRS); do \
	(cd $$d; $(MAKE)) \
	  || case "$(MFLAGS)" in *k*) fail=yes;; *) exit 1;; esac;\
        done && test -z "$$fail"

tr/%3.tr: po/%.po install3.po
	msgmerge $< install3.po | ./simplemot > $@

tr/%2.tr: po/%.po install2.po
	msgmerge $< install2.po | ./simplemot > $@

tr/%1.tr: po/%.po install1.po 
	msgmerge $< install1.po | ./simplemot > $@

install1.tr: $(TR1) 
	(cd tr; ls *1.tr | cpio --quiet -Hcrc -o | gzip -9) > $@

install2.tr: $(TR2) 
	(cd tr; ls *2.tr | cpio --quiet -Hcrc -o | gzip -9) > $@

install3.tr: $(TR3) 
	(cd tr; ls *3.tr | cpio --quiet -Hcrc -o | gzip -9) > $@

.PHONY: update-po
update-po:
	$(MAKE) $@ -C po

# install1.po and install2.po aren't strictally necessary, but they let
# us move the install2 specific translations off the first disk. 
#
# We split into an install3 as well for now. It makes install2.tr smaller,
# which lets it fit onto the supp disk easier <sigh>, and install3.tr is
# brought over frm the installation media. We should get rid of the install3
# tr hack altogether, and completely setup the installation media in the
# first stage. 
install1.po: $(SOURCES) $(SOURCES1)
	xgettext --default-domain=install1 --add-comments \
		--keyword=_ --keyword=N_ $(SOURCES) $(SOURCES1)

install2.po: $(EARLYSECOND)
	xgettext --default-domain=install2 --add-comments \
		--keyword=_ --keyword=N_ $(EARLYSECOND)

install3.po: $(LATESECOND)
	xgettext --default-domain=install3 --add-comments \
		--keyword=_ --keyword=N_ $(LATESECOND)

ftp.o: ftp.c
	$(CC) $(CFLAGS) -DHAVE_CONFIG_H=1 -DHAVE_ALLOCA_H=1 -DHAVE_NETINET_IN_SYSTM_H=1 -c $<

url.o: url.c
	$(CC) $(CFLAGS) -DHAVE_CONFIG_H=1 -DHAVE_ALLOCA_H=1 -DHAVE_NETINET_IN_SYSTM_H=1 -c $<

genhdlist: /usr/lib/librpm.a gettext.o genhdlist.o
	$(CC) -o genhdlist genhdlist.o -lrpm -lz -static

readmap: readmap.o
	$(CC) -o readmap readmap.o

mapshdr: mapshdr.o
	$(CC) -o mapshdr mapshdr.o

snarffont: snarffont.o
	$(CC) -o snarffont snarffont.o

dmphdlist: /usr/lib/librpm.a gettext.o dmphdlist.o
	$(CC) -o dmphdlist dmphdlist.o -lrpm -lz

ugtest: ugtest.o pkgs.o upgrade.o log.o windows.o hash.o kickstart.o
	$(CC) $(LDFLAGS) -o ugtest $^ $(INST2LIBS) -lrpm -ldb -lz

clean: 
	rm -f *.o .depend

# get subdirectories as well
	for d in $(SUBDIRS); do \
	(cd $$d; $(MAKE) clean) \
	  || case "$(MFLAGS)" in *k*) fail=yes;; *) exit 1;; esac;\
        done && test -z "$$fail"

realclean: clean
	rm -f $(PROGS) *~

ifeq (i386,$(ARCH))
installit: translations
	mkdir -p ../trees/local/sbin
	mkdir -p ../trees/network/sbin
	mkdir -p ../trees/initrd/bin
	mkdir -p ../trees/initrd/etc
	mkdir -p ../trees/supp/usr/bin
	mkdir -p ../trees/supp/usr/etc
	mkdir -p ../../../RedHat/base
	mkdir -p ../../../RedHat/instimage/usr/bin
	mkdir -p ../../../RedHat/instimage/usr/etc
	rm -f ../../../RedHat/instimage/usr/bin/install2
	cp install2 ../../../RedHat/instimage/usr/bin
	cp install2 install2.foo
	strip install2.foo
	bzip2 -9 < install2.foo > ../trees/supp/usr/bin/install2.bz2
	rm -f ../../../RedHat/instimage/usr/etc/install2.tr
	cp install2.tr ../../../RedHat/instimage/usr/etc
	cp install2.tr ../trees/supp/usr/etc/install2.tr
	rm -f ../../../RedHat/base/install3.tr
	cp install3.tr ../../../RedHat/base/install3.tr
	install -s install ../trees/network/sbin/install
	install -s local-install ../trees/local/sbin/install
	cp -f install1.tr ../trees/initrd/etc/install1.tr
else
ifeq (alpha,$(ARCH))
installit: translations
	mkdir -p ../trees/ramdisk/bin
	mkdir -p ../trees/ramdisk/etc
	mkdir -p ../../../RedHat/base
	rm -f ../trees/ramdisk/bin/install
	rm -f ../trees/ramdisk/bin/install2
	rm -f ../trees/ramdisk/etc/install1.tr
	rm -f ../trees/ramdisk/etc/install2.tr
	ln -s install2 ../trees/ramdisk/bin/install
	install -s install2 ../trees/ramdisk/bin/install2
	install install1.tr ../trees/ramdisk/etc/install1.tr
	install install2.tr ../trees/ramdisk/etc/install2.tr
	rm -f ../../../RedHat/base/install3.tr
	install install3.tr ../../../RedHat/base/install3.tr
else
ifeq (sparc,$(ARCH))
installit: translations
	mkdir -p ../trees/ramdisk/bin
	mkdir -p ../trees/ramdisk/etc
	mkdir -p ../../../RedHat/base
	mkdir -p ../../../sbin
	rm -f ../trees/ramdisk/bin/install
	rm -f ../trees/ramdisk/bin/install2
	rm -f ../trees/ramdisk/etc/install1.tr
	rm -f ../trees/ramdisk/etc/install2.tr
	install -s install2 ../trees/ramdisk/bin/install2
	ln -s install2 ../trees/ramdisk/bin/install
	install install1.tr ../trees/ramdisk/etc/install1.tr
	install install2.tr ../trees/ramdisk/etc/install2.tr
	rm -f ../../../RedHat/base/install3.tr
	install install3.tr ../../../RedHat/base/install3.tr
endif
endif
endif

depend:
	$(CPP) $(CFLAGS) -DHAVE_CONFIG_H -M $(ALLSOURCES) > .depend

co:
	co RCS/*,v

ifeq (.depend,$(wildcard .depend))
include .depend
endif                                           

