###############################################################################
#                                                                             #
# IPFire.org - A linux based firewall                                         #
# Copyright (C) 2007  Michael Tremer & Christian Schmidt                      #
#                                                                             #
# This program 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 3 of the License, or           #
# (at your option) any later version.                                         #
#                                                                             #
# This program 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, see <http://www.gnu.org/licenses/>.       #
#                                                                             #
###############################################################################

###############################################################################
# Definitions
###############################################################################

include Config

VER = ipfire

THISAPP    = usb-stick
TARGET     = $(DIR_INFO)/$(THISAPP)

###############################################################################
# Top-level Rules
###############################################################################

install : $(TARGET)

check :

download :

md5 :

###############################################################################
# Installation Details
###############################################################################
IMGfdd := /install/images/$(SNAME)-$(VERSION)-install-usb-fdd.$(MACHINE).img
IMGhdd := /install/images/$(SNAME)-$(VERSION)-install-usb-hdd.$(MACHINE).img
IMGfs  := /install/images/fs

define COPY_TO_IMG
	mkdosfs -n IPFIRE -F 16 -I $$IMAGE && \
	for i in /0 `seq 0 7`; do \
		[ -e /dev/loop$${i} ] || continue; \
		if (! losetup /dev/loop$${i} >/dev/null 2>&1 ); then \
			LOOPDEV="/dev/loop$${i}"; \
			break; \
		fi; \
	done; \
	losetup $$LOOPDEV $$IMAGE && \
	mount -t vfat $$LOOPDEV /install/mnt && \
	cp -fR /install/cdrom/* /install/mnt && \
	mv /install/mnt/boot/isolinux/{instroot,vmlinuz,*\.msg,memtest} /install/mnt && \
	rm -rf /install/mnt/boot && \
	cp $(DIR_SRC)/config/syslinux/syslinux.cfg /install/mnt/syslinux.cfg && \
	umount /install/mnt && \
	losetup -d $$LOOPDEV && \
	syslinux $$IMAGE
endef

$(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))

	# usb-fdd superfloppy (partitionless)
	# compute size +32 blocks for bootsector/fat/etc...
	dd bs=1024 count=$$((`du -k -s /install/cdrom | awk '{print $$1}'` + 2048 )) \
		if=/dev/zero \
		of=$(IMGfdd)
	IMAGE=$(IMGfdd); $(COPY_TO_IMG)

	# Partitionned images : make a file system bigger than iso size
	# that fit on 128MB key to let free space available
	# on the unique partition. Image will be compressed later
	dd bs=1k if=/dev/zero of=$(IMGfs) count=120000
	IMAGE=$(IMGfs); $(COPY_TO_IMG)
	
	# usb-hdd (64 heads, 32 sectors geometry, on a partition 1)
	# use 64 heads as 256 does not work on Award bios (Asus A7V8X-X Gilles)
	# use 32 sectors a minima or device is not recognised as hard disk (Frank)
	# add 32 to IMGfs as first partition start at 32
	COUNT=$$((`du -k -s $(IMGfs) | awk '{print $$1}'` + 32 )); \
	dd bs=1k if=/dev/zero of=$(IMGhdd) count=$$COUNT
	# write mbr before partitioning save a 'not msdos fs' warning from sfdisk
	/usr/local/sbin/install-mbr -f $(IMGhdd)
	echo -e "0,,6,*\n;\n;\n;" | sfdisk -qLD -H 64 -S 32 $(IMGhdd)
	# copy the entire partition, make the fs and dd back
	dd if=$(IMGfs) of=$(IMGhdd) bs=512 seek=32

	gzip -f9 $(IMGfdd) $(IMGhdd)
	rm -rf $$LFS/tmp/* $(IMGfs)
