INSTALL_VERSION = 7.1

PCMCIA_CS= ../kernel
STRIP =  strip
DEBUG = -g

CFLAGS = -Wall -fshort-double -O -fomit-frame-pointer -pipe -s
CFLAGS +=  -DINSTALL_VERSION=\"$(INSTALL_VERSION)\" -D_GNU_SOURCE=1 -I. -I /usr/include/rpm -DUSE_ALT_DNS=1
LDFLAGS = 
CRYPT=/usr/lib/libcrypt.a

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

ifeq (alpha,$(ARCH))
ARCHOBJS =
ARCHOBJS1 = otherinsmod.o
ARCHOBJS2 = earlymethods.o install.o milo.o otherinsmod.o
OBJS_CARDMGR=
ARCHPROGS = install local-install full-install
else
ifeq (i386,$(ARCH))
ARCHOBJS = pcmcia-probing/probe.o
ARCHOBJS2 = lilo.o otherinsmod.o
ARCHOBJS1 = otherinsmod.o
OBJS_CARDMGR= cardmgr.o yacc_config.o lex_config.o
ARCHPROGS = install local-install full-install
CFLAGS += -DINSTALL_INCLUDE_CARDMGR -malign-jumps=1 -malign-loops=1 -malign-functions=1 -mpreferred-stack-boundary=2 -m386
else
ifeq (ppc,$(ARCH))
CFLAGS += -fsigned-char
ARCHOBJS2 = lilo.o otherinsmod.o
ARCHOBJS1 = otherinsmod.o
ARCHPROGS = install local-install
else
# SPARC
ARCHOBJS =
ARCHOBJS2 = lilo.o earlymethods.o install.o otherinsmod.o
ARCHOBJS1 = otherinsmod.o
OBJS_CARDMGR=
ARCHPROGS = install local-install full-install
endif
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 \
	cpio.o $(ARCHOBJS)
OBJS1 = earlymethods.o install.o ftp.o url.o dns.o urlmethod.o $(ARCHOBJS1)
ALL1 = $(OBJS) $(OBJS_CARDMGR) $(OBJS1) 
NET1 = earlymethods.o ftp.o url.o urlmethod.o net.o install.o devices.o \
       nfsmount.o mount_xdr.o fs.o dns.o
LOCAL1 = $(filter-out $(NET1),$(ALL1)) \
         localearly.o localdevices.o localinstall.o localfs.o cdrom.o hd.o
FULL1 = $(filter-out $(NET1),$(ALL1)) \
	fullearly.o fulldevices.o fullinstall.o fullfs.o ftp.o url.o urlmethod.o \
	net.o nfsmount.o mount_xdr.o dns.o cdrom.o hd.o
OBJS2 = setup.o hd.o latemethods.o ftp.o url.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)

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 modutils2/insmod/libmodutils.a \
           modutils2/obj/libobj.a modutils2/util/libutil.a libfdisk/libfdisk.a
INST2LIBS:=-lpopt /usr/lib/libdb1.a /usr/lib/libz.a \
# GLIBC 2.1: 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 \
               modutils2/insmod/libmodutils.a modutils2/obj/libobj.a \
               modutils2/util/libutil.a
INST2DEPLIBS+=./pci-probing/libpciprobe.a \
               modutils2/insmod/libmodutils.a modutils2/obj/libobj.a \
               modutils2/util/libutil.a
SUBDIRS+=modutils2/obj modutils2/util modutils2/insmod pci-probing pcmcia-probing
else
ifeq (alpha,$(ARCH))
STATIC=-static
INST1DEPLIBS+=/usr/lib/libslang.a /usr/lib/libnewt.a /usr/lib/libresolv.a \
              pci-probing/libpciprobe.a modutils2/insmod/libmodutils.a \
              modutils2/obj/libobj.a modutils2/util/libutil.a
SUBDIRS+=modutils2 pci-probing
else
ifeq (sparc,$(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 ./sbus-probing/libsbusprobe.a \
               modutils2/insmod/libmodutils.a modutils2/obj/libobj.a \
               modutils2/util/libutil.a
INST2DEPLIBS+=./pci-probing/libpciprobe.a ./sbus-probing/libsbusprobe.a \
               modutils2/insmod/libmodutils.a modutils2/obj/libobj.a \
               modutils2/util/libutil.a
SUBDIRS+=modutils2 pci-probing sbus-probing
else
ifeq (ppc,$(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+=modutils2/insmod/libmodutils.a modutils2/obj/libobj.a \
               modutils2/util/libutil.a
INST2DEPLIBS+=modutils2/insmod/libmodutils.a modutils2/obj/libobj.a \
               modutils2/util/libutil.a
SUBDIRS+=modutils2
endif
endif
endif
#STATIC=
endif

INST1LIBS+=/usr/lib/libz.a old-rpmlib/librpm.a

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

# Someone can explain me why there is pt and pt_BR ? (it's the same files)
#FOR BOOT DISK 1: LANGS = de fr it pt_BR es
#FOR BOOT DISK 2: LANGS = da es fi no is sv
#FOR BOOT DISK 3: LANGS = de cs hu pl ro sk tr
#FOR BOOT DISK 4: LANGS = de et in uk ru es tr 
#FOR NON-DISKS: 
LANGS = de no pt_BR it es sv tr fr da et fi is cs hu pl ro ru sk uk

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

cardmgr.o:
	ln -sf $(PCMCIA_CS)/cardmgr/cardmgr.o .

yacc_config.o:
	ln -sf $(PCMCIA_CS)/cardmgr/yacc_config.o .

lex_config.o:
	ln -sf $(PCMCIA_CS)/cardmgr/lex_config.o .

fulldevices.o: devices.c
	$(CC) $(CFLAGS) -DENABLE_LOCAL=1 -c -o fulldevices.o devices.c

fullearly.o: earlymethods.c
	$(CC) $(CFLAGS) -DENABLE_LOCAL=1 -c -o fullearly.o earlymethods.c

fullinstall.o: install.c
	$(CC) $(CFLAGS) -DENABLE_LOCAL=1 -c -o fullinstall.o install.c

fullfs.o: fs.c
	$(CC) $(CFLAGS) -DENABLE_LOCAL=1 -c -o fullfs.o fs.c

full-install: $(FULL1) $(INST1DEPLIBS)
	$(CC) $(STATIC) $(LDFLAGS) -o full-install $^ $(INST1LIBS) $(INST1DEPLIBS)

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) $(OBJS_CARDMGR) $(OBJS1) $(INST1DEPLIBS)
	$(CC) $(STATIC) $(LDFLAGS) -o $@ $^ $(INST1LIBS) $(INST1DEPLIBS)

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

subdirs:
	for d in $(SUBDIRS); do \
	(cd $$d; $(MAKE) CFLAGS="$(CFLAGS)") \
	  || 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 
	mkdir -p tr
	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

clean: 
	rm -rf tr/
	rm -f *.o .depend $(PROGS) *~ install2.foo *.tr

# 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"

chmou: translations
	mkdir -p /mnt/distrib/install/trees/local/sbin
	mkdir -p /mnt/distrib/install/trees/network/sbin
	mkdir -p /mnt/distrib/install/trees/initrd/bin
	mkdir -p /mnt/distrib/install/trees/initrd/etc
	mkdir -p /mnt/distrib/install/trees/supp/usr/bin
	mkdir -p /mnt/distrib/install/trees/supp/usr/etc
	mkdir -p /mnt/distrib/install/RedHat/base
	mkdir -p /mnt/distrib/install/RedHat/instimage/usr/bin
	mkdir -p /mnt/distrib/install/RedHat/instimage/usr/etc
	rm -f /mnt/distrib/install/RedHat/instimage/usr/bin/install2
	cp install2 /mnt/distrib/install/RedHat/instimage/usr/bin
	cp install2 install2.foo
	strip install2.foo
	bzip2 -9 < install2.foo > /mnt/distrib/install/trees/supp/usr/bin/install2.bz2
	rm -f /mnt/distrib/install/RedHat/instimage/usr/etc/install2.tr
	cp install2.tr /mnt/distrib/install/RedHat/instimage/usr/etc
	cp install2.tr /mnt/distrib/install/trees/supp/usr/etc/install2.tr
	rm -f /mnt/distrib/install/RedHat/base/install3.tr
	cp install3.tr /mnt/distrib/install/RedHat/base/install3.tr
	install -s install /mnt/distrib/install/trees/network/sbin/install
	install -s local-install /mnt/distrib/install/trees/local/sbin/install
	cp -f install1.tr /mnt/distrib/install/trees/initrd/etc/install1.tr
ifeq (i386,$(ARCH))
installit: translations
	-strip dmphdlist genhdlist install install2 install2.foo local-install mapshdr readmap snarffont &>/dev/null
	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 (ppc,$(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
endif

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

co:
	co RCS/*,v

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

