#
# Makefile - Makefile of fped, the footprint editor
#
# Written 2009 by Werner Almesberger
# Copyright 2009 by Werner Almesberger
#
# 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 2 of the License, or
# (at your option) any later version.
#

PREFIX = /usr/local

OBJS = fped.o expr.o coord.o obj.o delete.o inst.o util.o error.o \
       unparse.o file.o dump.o kicad.o postscript.o meas.o \
       cpp.o lex.yy.o y.tab.o \
       gui.o gui_util.o gui_style.o gui_inst.o gui_status.o gui_canvas.o \
       gui_tool.o gui_over.o gui_meas.o gui_frame.o

XPMS = point.xpm delete.xpm delete_off.xpm \
       vec.xpm frame.xpm frame_locked.xpm frame_ready.xpm \
       line.xpm rect.xpm pad.xpm rpad.xpm circ.xpm \
       meas.xpm meas_x.xpm meas_y.xpm \
       stuff.xpm stuff_off.xpm meas_off.xpm

CFLAGS_GTK = `pkg-config --cflags gtk+-2.0`
LIBS_GTK = `pkg-config --libs gtk+-2.0`

CFLAGS_WARN=-Wall -Wshadow -Wmissing-prototypes \
            -Wmissing-declarations
CFLAGS=-g -std=gnu99 $(CFLAGS_GTK) -DCPP='"cpp"' $(CFLAGS_WARN)
SLOPPY=-Wno-unused -Wno-implicit-function-declaration -Wno-missing-prototypes \
       -Wno-missing-declarations
LDLIBS = -lm -lfl $(LIBS_GTK)
YACC=bison -y
YYFLAGS=-v

# ----- Verbosity control -----------------------------------------------------

CPP := $(CPP)   # make sure changing CC won't affect CPP

CC_normal	:= $(CC)
YACC_normal	:= $(YACC)
LEX_normal	:= $(LEX)
DEPEND_normal = \
  $(CPP) $(CFLAGS) -MM -MG *.c >.depend || \
  { rm -f .depend; exit 1; }

CC_quiet	= @echo "  CC       " $@ && $(CC_normal)
YACC_quiet	= @echo "  YACC     " $@ && $(YACC_normal)
LEX_quiet	= @echo "  LEX      " $@ && $(LEX_normal)
GEN_quiet	= @echo "  GENERATE " $@ &&
DEPEND_quiet	= @echo "  DEPENDENCIES" && $(DEPEND_normal)

ifeq ($(V),1)
    CC		= $(CC_normal)
    LEX		= $(LEX_normal)
    YACC	= $(YACC_normal)
    GEN		=
    DEPEND	= $(DEPEND_normal)
else
    CC		= $(CC_quiet)
    LEX		= $(LEX_quiet)
    YACC	= $(YACC_quiet)
    GEN		= $(GEN_quiet)
    DEPEND	= $(DEPEND_quiet)
endif

# ----- Rules -----------------------------------------------------------------

.PHONY:		all dep depend clean install uninstall

.SUFFIXES:	.fig .xpm

# generate 26x26 pixels icons, then drop the 1-pixel frame

# this adds a magenta border
# sed '/2 2 0 1 /{s//2 2 0 15 /;s/ 0 7 / 22 7 /;}' $< | \

.fig.xpm:
		$(GEN) fig2dev -L xpm -Z 0.32 -S 4 $< | \
		  convert -crop 24x24+1+1 - - | \
		  sed "s/*.*\[]/*xpm_`basename $@ .xpm`[]/" >$@

all:		fped

fped:		$(OBJS)
		$(CC) -o $@ $(OBJS) $(LDLIBS)

lex.yy.c:	fpd.l y.tab.h
		$(LEX) fpd.l

lex.yy.o:	lex.yy.c y.tab.h
		$(CC) -c $(CFLAGS) $(SLOPPY) lex.yy.c

y.tab.c y.tab.h: fpd.y
		$(YACC) $(YYFLAGS) -d fpd.y

y.tab.o:	y.tab.c
		$(CC) -c $(CFLAGS) $(SLOPPY) y.tab.c

gui_tool.o gui.o: $(XPMS:%=icons/%)

# ----- Dependencies ----------------------------------------------------------

dep depend .depend: lex.yy.c y.tab.h y.tab.c
		$(DEPEND)

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

# ----- Cleanup ---------------------------------------------------------------

clean:
		rm -f $(OBJS) $(XPMS:%=icons/%)
		rm -f lex.yy.c y.tab.c y.tab.h y.output .depend

# ----- Install / uninstall ---------------------------------------------------

install:
		install -m 755 fped $(PREFIX)/bin/

uninstall:
		rm -f $(PREFIX)/bin/fped