#######################################
# RCSId: $Id: makefile,v 1.3 2000/08/01 20:54:47 ralblas Exp $
#
# Makefile to compile and generate wsat
# Project: WSAT
# Version: T1.0
# Author: R. Alblas
#
# History: 
# $Log: makefile,v $
# Revision 1.3  2000/08/01 20:54:47  ralblas
# Added hri_functions file
#
# Revision 1.2  2000/05/16 21:38:05  ralblas
#
# Added GPL
#
# Revision 1.1.1.1  2000/04/12 21:36:59  kmelero
# Initial import.
#
#######################################
####################################################################
# Copyright (C) 2000 WSAT. 
#
# This 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.
# 
# This software 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 software. If not, write to the Free Software 
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 
# 02111-1307, USA.
####################################################################
#
#
#
RELEASE_=\"2017.5\"

#Choose linux or windows
OS="linux"
#OS="windows"

#Choose gtk version: 2.0, debug
ifeq ($(OS),"linux")
  GTK_REL="2.0"
#  DBGFLAG=-g
else
  GTK_REL="2.0"
endif

#ifeq ($(OS),"windows")
#all:
#	echo "export TEMP=/tmp"
#	echo "doe 'make wsat.exe"
#endif

DBGFLAG=-DDEBUG_KLAD=1

#Choose decoder interface (par. port always present)
USE_PAR="TRUEn"
USE_USB="TRUE"
USE_ETH="TRUEn"

#Choose formats
USE_HRPT="TRUE"
USE_HRI="TRUEn"
USE_HPT="TRUE"
USE_METOP="TRUE"
USE_FY3="TRUE"
USE_LRIT="FALSE"
# USE_RAWD and USE_RAWQPSK not at same time!
USE_RAWD="TRUEn"
USE_RAWQPSK="TRUE"
USE_JPEG="TRUE"
USE_RS="TRUE"

USE_TRACKER="TRUE"

##########################################################
ifneq ($(OS),"linux")
  ifneq ($(OS),"windows")
all:
	echo "Wrong choice $(OS)."

  endif
endif

PARFLAG=
USBFLAG=
ETHFLAG=
ifeq ($(USE_PAR),"TRUE")
  PARFLAG=-D__ADD_PAR__
endif
ifeq ($(USE_USB),"TRUE")
  USBFLAG=-D__ADD_USB__
endif
ifeq ($(USE_ETH),"TRUE")
  ETHFLAG=-D__ADD_ETH__
endif
IFLAG=$(PARFLAG) $(USBFLAG) $(ETHFLAG)

HRPTFLAG=
HRIFLAG=
LRITFLAG=
JPEGFLAG=
RAWDFLAG=
RAWQPSKFLAG=
RAWT=
IQTEST=
ifeq ($(USE_HRPT),"TRUE")
  HRPTFLAG=-D_HRPT1_=1
endif
ifeq ($(USE_HPT),"TRUE")
  HPTFLAG=-D_HPT1_=1
endif
ifeq ($(USE_HRI),"TRUE")
  HRIFLAG=-D_HRI1_=1
endif
ifeq ($(USE_LRIT),"TRUE")
  LRITFLAG=-D_LRIT1_=1
endif
ifeq ($(USE_METOP),"TRUE")
  METOPFLAG=-D_METOP1_=1
endif
ifeq ($(USE_FY3),"TRUE")
  FY3FLAG=-D_FY31_=1
endif
ifeq ($(USE_RAWD),"TRUE")
  RAWDFLAG=-D_RAWD_=1
  RAWT=-D_RAWT_=1
else
  ifeq ($(USE_RAWQPSK),"TRUE")
    RAWQPSKFLAG=-D_RAWQPSK_=1
    RAWT=-D_RAWDT_=1
    IQTEST=-D_IQTEST1_=1
  endif
endif
ifeq ($(USE_JPEG),"TRUE")
  JPEGFLAG=-D_JPEG_=1
endif

ifeq ($(USE_TRACKER),"TRUE")
  TRACKFLAG=-D_TRACKER_=1
endif

SFLAG=$(HRPTFLAG) $(HPTFLAG) $(HRIFLAG) $(METOPFLAG) $(FY3FLAG) $(RAWDFLAG) $(RAWQPSKFLAG) $(RAWT) $(IQTEST) $(JPEGFLAG) $(TRACKFLAG)


#Compile commands
CC=gcc -Wall -Wno-format-y2k $(INCL_OPT) $(CCFLAGS) $(DBGFLAG) $(IFLAG) $(SFLAG)

####$(INCL_OPT) $(GTKCONFIG_CFLAG)
LN=gcc 

#windows: ftd2xx.lib in ../libs -> -L option only needed for windows
ifeq ($(USE_USB),"TRUE")
  USBLIBS=-Llibs -lftd2xx 
else
  USBLIBS=
endif

ifeq ($(USE_JPEG),"TRUE")
  LOC_JPEGSRC=jpeg812
  JPGLIBS=-L$(LOC_JPEGSRC) -ljpeg812
else
  JPGLIBS=
endif

ifeq ($(OS),"linux")
#######################PLATFORM DEPENDENT SETTINGS###################
#------------------------- Defs for Linux ---------------------------
  PROGRAM=wsat
  ifeq ($(GTK_REL),"2.0")
    GTKCONFIG_CFLAG=`pkg-config --cflags gtk+-2.0` -D__GTK_20__ 
    GTKCONFIG_LLIBS=`pkg-config --libs gtk+-2.0` -lgthread-2.0
  else
    GTKCONFIG_CFLAG=`gtk-config --cflags`
    GTKCONFIG_LLIBS=`gtk-config --libs`
  endif
  STATIC_LINK_OPTIONS=-Wl,-Bstatic -L/usr/local/lib -L/usr/X11R6/lib -lgtk -lgdk -rdynamic -lgmodule -lglib  -lintl  -lm  -Wl,-Bdynamic -ldl -lXext -lX11
  CFLAGS_EXTRA=
#--------------------------------------------------------------------
else
  #------------------------- Defs for Windows -------------------------
  PROGRAM=wsat.exe

  ifeq ($(GTK_REL),"2.0")
#      GTKCONFIG_CFLAG=`pkg-config --cflags gtk+-2.0` -D__GTK_20__ 
#      GTKCONFIG_LLIBS=`pkg-config --libs gtk+-2.0`
    GTKCONFIG_CFLAG=-mms-bitfields -Ic:/tools/wingtk20/include/gtk-2.0 -Ic:/tools/wingtk20/lib/gtk-2.0/include -Ic:/tools/wingtk20/include/atk-1.0 -Ic:/tools/wingtk20/include/cairo -Ic:/tools/wingtk20/include/pango-1.0 -Ic:/tools/wingtk20/include/glib-2.0 -Ic:/tools/wingtk20/lib/glib-2.0/include -Ic:/tools/wingtk20/include/libpng12
    GTKCONFIG_LLIBS= -Lc:/tools/wingtk20/lib -lgtk-win32-2.0 -lgdk-win32-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lpangowin32-1.0 -lgdi32 -lpangocairo-1.0 -lpango-1.0 -lcairo -lgobject-2.0 -lgmodule-2.0 -lglib-2.0 -lintl -mwindows
    CFLAGS_EXTRA=-D__GTK_WIN32__=1 -D__GTK_20__
  else

    GTKCONFIG_CFLAG=-Ic:/bin/wingnu/gtk/include/gppm3 -Ic:/bin/wingnu/gtk/include/gtkp -Ic:/bin/wingnu/gtk/include/gtkp/gdk
    GTKCONFIG_LLIBS=-Lc:/bin/wingnu/gtk/lib -lgtk-1.3 -lgdk-1.3 -lglib-1.3 -mwindows
    CFLAGS_EXTRA=-D__GTK_WIN32__=1
   endif
######################################################################
endif

CCFLAGS=$(LOC_INCS) $(GTKCONFIG_CFLAG) $(CFLAGS_EXTRA) -DFOR_WSAT

#Source locations
LOC_INCLUDE=include
LOC_SGTK=sgtk
LOC_STDFRMT=std_frmts
LOC_HRPT1=hrpt
LOC_HRPT=hrpt
LOC_LRIT=lrit
LOC_HRI1=hri
LOC_HRI=hri
LOC_METOP=metop
LOC_RAWD=rawd
LOC_TRACK=track

#Include option
INCL_OPT=-I$(LOC_INCLUDE)/ -I$(LOC_SGTK)/ -I$(LOC_STDFRMT)/ -Itrack/

#Sources modules
#SUN raster files
SRC_SUN = $(LOC_STDFRMT)/sun.c 
INC_SUN = $(LOC_STDFRMT)/sun.h

#PPM files
SRC_PPM = $(LOC_STDFRMT)/ppm.c 
INC_PPM = $(LOC_STDFRMT)/ppm.h

ifeq ($(USE_JPEG),"TRUE")
SRC_JPEG = $(LOC_STDFRMT)/jpeg_write.c $(LOC_STDFRMT)/jpeg_funcs.c
INC_JPEG = $(LOC_STDFRMT)/jinclude.h $(LOC_STDFRMT)/cderror.h $(LOC_STDFRMT)/jconfig.h \
           $(LOC_STDFRMT)/cdjpeg.h $(LOC_STDFRMT)/jerror.h $(LOC_STDFRMT)/jmorecfg.h \
           $(LOC_STDFRMT)/jinclude.h  $(LOC_STDFRMT)/jpeglib.h $(LOC_STDFRMT)/jpeg_funcs.h
else
SRC_JPEG = 
INC_JPEG = 
endif
         
ifeq ($(USE_RS),"TRUE")
SRC_RS=$(LOC_METOP)/rs_tables.c $(LOC_METOP)/reedsol.c $(LOC_METOP)/rs_decode_frm.c
INC_RS=$(LOC_METOP)/reedsol.h
else
SRC_RS = 
INC_RS = 
endif

#GIF raster files
SRC_GIF=$(LOC_STDFRMT)/gif_read.c $(LOC_STDFRMT)/gif_write.c
INC_GIF  = $(LOC_STDFRMT)/gif.h

#HRPT files
SRC_HRPT=$(LOC_HRPT)/hrpt_rec.c $(LOC_HRPT)/hrpt_rec_pp.c \
         $(LOC_HRPT)/hrpt_rec_eth.c $(LOC_HRPT)/hrpt_rec_usb.c \
         $(LOC_HRPT1)/hrpt1_read.c $(LOC_HRPT1)/hrpt1_write.c \
         $(LOC_HRPT1)/hrpt_framehdr.c $(LOC_HRPT1)/hrpt_calcs.c \
         $(LOC_HRPT1)/hrpt_guictrl.c $(LOC_HRPT1)/hpt_write.c \
         $(LOC_HRPT1)/hpt_read.c


INC_HRPT=$(LOC_INCLUDE)/hrpt.h $(LOC_INCLUDE)/pp_dec_interf.h  \
         $(LOC_INCLUDE)/hrpt1.h $(LOC_INCLUDE)/hrpt_funcs.h \
         $(LOC_INCLUDE)/xtrack_basefunc.h \
         $(LOC_INCLUDE)/ftd2xx.h $(LOC_INCLUDE)/WinTypes.h \
         $(LOC_INCLUDE)/godil_regmap.h $(LOC_INCLUDE)/hrpt_gui.h

#MHRPT files
SRC_MHRPT=$(LOC_HRPT)/mhrpt2_read.c $(LOC_HRPT)/mhrpt1_write.c
INC_MHRPT=$(LOC_INCLUDE)/mhrpt.h

#HRI files
SRC_HRI=$(LOC_HRI)/hri_rec_pp.c $(LOC_HRI)/hri_functions.c \
        $(LOC_HRI1)/hri1_read.c $(LOC_HRI1)/hri1_write.c
INC_HRI=$(LOC_INCLUDE)/hri.h $(LOC_INCLUDE)/pp_dec_interf.h  \
        $(LOC_INCLUDE)/hri1.h 

ifeq ($(USE_LRIT),"TRUE")
SRC_LRIT=$(LOC_LRIT)/lrit_rec.c
endif

ifeq ($(USE_METOP),"TRUE")
SRC_METOP=$(LOC_METOP)/metop_write.c $(LOC_METOP)/metop_read.c $(LOC_METOP)/metop_test.c
INC_METOP=$(LOC_INCLUDE)/metop.h
endif

ifeq ($(USE_FY3),"TRUE")
SRC_FY3= $(LOC_METOP)/fy3_read.c 
#INC_FY3=$(LOC_INCLUDE)/metop.h
endif

#RAWD files
SRC_RAWD=$(LOC_RAWD)/rawd_rec_pp.c
SRC_RAWQPSK=$(LOC_RAWD)/rawd_qpsk.c

#GTK sgtk files
SRC_SGTK=$(LOC_SGTK)/sgtk_misc.c $(LOC_SGTK)/windows.c $(LOC_SGTK)/filemngr.c \
        $(LOC_SGTK)/canvas.c $(LOC_SGTK)/buttons.c $(LOC_SGTK)/listtree.c \
        $(LOC_SGTK)/adjust.c $(LOC_SGTK)/menus.c $(LOC_SGTK)/packing.c \
        $(LOC_SGTK)/rgbdraw.c $(LOC_SGTK)/gtk_led.c
INC_SGTK=$(LOC_SGTK)/sgtk.h $(LOC_SGTK)/gtk_led.h
INC_SGTKALL=$(INC_SGTK) $(LOC_SGTK)/sgtk_functions.h

#Parallel port 
ifeq ($(USE_PAR),"TRUE")
  SRC_PPORT=pp_dec_interf.c test_parport.c
  INC_PPORT=$(LOC_INCLUDE)/pp_dec_interf.h
else
  SRC_PPORT=
  INC_PPORT=
endif

ifeq ($(USE_USB),"TRUE")
  SRC_USBPORT=test_usb.c
else
  SRC_USBPORT=
endif

#Orbit
SRC_ORBIT=$(LOC_TRACK)/calc_satpos.c \
          $(LOC_TRACK)/select_kepler.c \
          $(LOC_TRACK)/parse_norad.c \
          $(LOC_TRACK)/read_norad.c \
          $(LOC_TRACK)/dbase_prims.c \
          $(LOC_TRACK)/predict.c \
          $(LOC_TRACK)/pos2godil.c \
          $(LOC_TRACK)/godil_regmap.c


INC_ORBIT= $(LOC_INCLUDE)/orbit.h

#Main files
SRC_MAIN=wsat.c gtk_inter.c prefer.c zoom.c lumi.c draw.c mapping.c \
         draw_satpos.c edit_orbit.c \
         key_actions.c mouse_actions.c file.c file_save.c channels.c \
         map_chan.c data_proc.c misc.c slide.c nb_debug.c \
         wsat_track.c draw_track.c

INC_MAIN=$(LOC_INCLUDE)/wsat.h $(LOC_INCLUDE)/menu_wsat.h 


#####################################################
#Collection of all sources/includes/objects
SRC_WSAT1=$(SRC_MAIN) $(SRC_HRPT) $(SRC_METOP) $(SRC_FY3) $(SRC_RS) $(SRC_LRIT) $(SRC_RAWD) $(SRC_MHRPT) \
          $(SRC_ORBIT) \
          $(SRC_SUN) $(SRC_PPM) $(SRC_GIF) $(SRC_JPEG) \
          $(SRC_PPORT) $(SRC_USBPORT)

SRC_WSAT=
SRC_WSATA=
SRC_WSATB=


ifeq ($(USE_HRI),"TRUE")
  SRC_WSATA=$(SRC_HRI)
endif
ifeq ($(USE_RAWQPSK),"TRUE")
  SRC_WSATB=$(SRC_RAWQPSK)
endif
SRC_WSAT=$(SRC_WSAT1) $(SRC_WSATA) $(SRC_WSATB)

INC_WSAT=$(INC_SUN) $(INC_PPM) $(INC_GIF) $(INC_HRPT) $(INC_HRI) $(INC_MHRPT) $(INC_METOP) $(INC_RS) \
         $(INC_ORBIT) $(INC_PPORT) $(INC_MAIN)
INC_WSATALL=$(INC_WSAT) $(LOC_INCLUDE)/wsat_functions.h \
                track/sattrack.h track/sattrack_funcs.h
INC_ALL=$(INC_WSATALL) $(INC_SGTKALL)

SRC_ALL=$(SRC_WSAT) $(SRC_SGTK) 
OBJ_ALL= $(SRC_ALL:.c=.o)

OBJ_PPORT= $(SRC_PPORT:.c=.o)

#####################################################
#Link all objects into wsat.
#If gtk-libs should be static then do: make wsat_s
#Dynamic libs:
$(PROGRAM): $(OBJ_ALL) 
	$(LN) -o $@ $(OBJ_ALL) $(GTKCONFIG_LLIBS) $(USBLIBS) $(JPGLIBS) -lm

#Static libs (except X-libs) (not used a long time, probably doesn't work):
wsat_s: $(OBJ_ALL) 
	$(LNS) -o $@ $(OBJ_ALL) $(STATIC_LINK_OPTIONS)


#####################################################
#Special compiles

#Make OBJ_PPORT

pp_dec_interf.o: pp_dec_interf.c $(INC_PPORT)
	$(CC) -c $(CFLAGS_EXTRA) -O -o $@ $<

test_parport.o: test_parport.c $(INC_PPORT)
	$(CC) -c $(CFLAGS_EXTRA) -O -o $@ $<

#Recompile HW-interfaces if makefile changes
$(LOC_HRPT)/hrpt_rec.o: $(LOC_HRPT)/hrpt_rec.c makefile $(INC_MAIN)
	$(CC) -c -o $@ $<
$(LOC_HRPT)/hrpt_rec_usb.o: $(LOC_HRPT)/hrpt_rec_usb.c $(INC_WSATALL) makefile
	$(CC) -c -o $@ $<
$(LOC_HRPT)/hrpt_rec_eth.o: $(LOC_HRPT)/hrpt_rec_eth.c $(INC_WSATALL) makefile
	$(CC) -c -o $@ $<
prefer.o: prefer.c $(INC_WSATALL) makefile
	$(CC) -c -o $@ $<

test_usb.o: test_usb.c $(INC_WSATALL) makefile
	$(CC) -c -o $@ $<

#Make wsat.obj (add version nummer)
wsat.o: wsat.c makefile $(INC_MAIN)
	$(CC) -c -DRELEASE=$(RELEASE_) $(CFLAGS_EXTRA) wsat.c

#####################################################
#Default compiles
#take makefile into acount in case parts are disabled/enabled!

%.o: %.c $(INC_WSATALL) $(INC_SGTK) makefile
	$(CC) -c $(CCFLAGS) $(CFLAGS_EXTRA) -o $@ $<


#####################################################
# Web it
web: wsat.tgz
wsat.tgz: wsat
	tar -czf wsat.tgz wsat

#####################################################
#Pack it (for archiving)

arch: wsat.zip
wsat.zip: $(SRC_ALL) $(INC_ALL) makefile
	zip wsat.zip $(SRC_ALL) $(INC_ALL) include/ftd2xx_win.h makefile

icon: wsat_icon.exe
wsat_icon.exe: wsat.exe
	mv wsat.exe wsat_noicon.exe
	ResHacker -add wsat_noicon.exe,wsat.exe,wbol.ico,ICONGROUP,ikoon,
