1# Makefile for cross-compiling gpredict for win32 on Linux,
2# using mingw compiler
3
4# configure pkg-config, version from git
5include config.mk
6
7# version string in C code
8VERSION_SHORT = $(GITMAJ).$(GITMIN).$(GITBLD)
9VERSION_LONG = $(GITMAJ).$(GITMIN).0.$(GITBLD)
10
11# cross-compiler prefix
12MGW_PREFIX=i686-w64-mingw32-
13
14# directories
15topsrc = ..
16gpreddir = $(topsrc)/src
17sgpsdpdir = $(gpreddir)/sgpsdp
18nxjsondir = $(gpreddir)/nxjson
19
20# tools
21CC = $(MGW_PREFIX)gcc -Wall -O2 -mms-bitfields -DWIN32 -m32
22AS = $(MGW_PREFIX)as
23DLLWRAP = $(MGW_PREFIX)dllwrap
24DLLWRAP_FLAGS = --as=$(AS) --export-all --driver-name $(CC) -s
25RC = $(MGW_PREFIX)windres
26# NB: .rc file create various version formats from the numbers
27RCFLAGS = --define __WIN32__ --define __WIN95__ --define MSRC --define __GNUWIN32__ \
28	--define VERMAJ=$(GITMAJ) --define VERMIN=$(GITMIN) --define VERBLD=$(GITBLD)
29
30# libraries
31GTKLIBS := $(shell PKG_CONFIG_PATH=$(PKG_CONFIG_PATH) pkg-config --libs gtk+-3.0)
32GLIBLIB := $(shell PKG_CONFIG_PATH=$(PKG_CONFIG_PATH) pkg-config --libs glib-2.0 gthread-2.0)
33GOOLIBS := $(shell PKG_CONFIG_PATH=$(PKG_CONFIG_PATH) pkg-config --libs goocanvas-2.0)
34GUI_LIBS = $(GTKLIBS) $(GLIBLIB) $(GOOLIBS) libsgpsdp.lib -lwinmm -lwininet -lws2_32
35LIBS = -lm
36
37# flags/defines
38GTK_CFLAGS := $(shell PKG_CONFIG_PATH=$(PKG_CONFIG_PATH) pkg-config --cflags gtk+-3.0)
39GOO_CFLAGS := $(shell PKG_CONFIG_PATH=$(PKG_CONFIG_PATH) pkg-config --cflags goocanvas-2.0)
40CFLAGS = -DVERSION_SHORT=$(VERSION_SHORT) -DHAVE_CONFIG_H -DPACKAGE_LOCALE_DIR=\"/\" -I. -I.. -I$(gpreddir) $(GOO_CFLAGS)
41
42# source paths
43vpath %.c $(sgpsdpdir)
44vpath %.c $(gpreddir)
45vpath %.h $(gpreddir)
46vpath %.h $(sgpsdpdir)
47vpath %.c $(nxjsondir)
48vpath %.h $(nxjsondir)
49vpath %.rc $(topsrc)/win32
50vpath %.c .
51
52#### End of system configuration section. ####
53
54SGPSDPSRC = \
55	sgp4sdp4.c \
56	sgp_in.c \
57	sgp_math.c \
58	sgp_obs.c \
59	sgp_time.c \
60	solar.c
61
62SGPSDPOBJ = $(SGPSDPSRC:.c=.o)
63
64NXJSONSRC = \
65	nxjson.c
66
67NXJSONOBJ = $(NXJSONSRC:.c=.o)
68
69GOOCANVSRC = \
70        goocanvasatk.c             \
71        goocanvasellipse.c         \
72	goocanvasenumtypes.c		\
73	goocanvasgroup.c		\
74	goocanvasimage.c		\
75	goocanvasitem.c			\
76	goocanvasitemmodel.c		\
77	goocanvasitemsimple.c		\
78	goocanvasmarshal.c		\
79	goocanvaspolyline.c		\
80	goocanvaspath.c			\
81	goocanvasprivate.h		\
82	goocanvasrect.c			\
83	goocanvasstyle.c		\
84	goocanvastable.c		\
85	goocanvastext.c			\
86	goocanvasutils.c		\
87	goocanvaswidget.c		\
88	goocanvas.c
89
90
91GOOCANVOBJ = $(GOOCANVSRC:.c=.o)
92
93
94GPREDICTSRC = \
95	about.c \
96	compat.c \
97	first-time.c \
98	gpredict-help.c \
99	gpredict-utils.c \
100	gtk-azel-plot.c \
101    gtk-event-list.c \
102    gtk-event-list-popup.c \
103	gtk-freq-knob.c \
104	gtk-polar-plot.c \
105	gtk-polar-view.c \
106	gtk-polar-view-popup.c \
107	gtk-rig-ctrl.c \
108	gtk-rot-ctrl.c \
109	gtk-rot-knob.c \
110	gtk-sat-data.c \
111	gtk-sat-list.c \
112	gtk-sat-list-popup.c \
113	gtk-sat-map.c \
114	gtk-sat-map-ground-track.c \
115	gtk-sat-map-popup.c \
116	gtk-sat-module.c \
117	gtk-sat-module-popup.c \
118	gtk-sat-module-tmg.c \
119    gtk-sat-popup-common.c \
120	gtk-sat-selector.c \
121	gtk-single-sat.c \
122	gtk-sky-glance.c \
123	gui.c \
124	locator.c \
125	loc-tree.c \
126	main.c \
127	map-selector.c \
128	map-tools.c \
129	menubar.c \
130	mod-cfg.c \
131	mod-cfg-get-param.c \
132	mod-mgr.c \
133	orbit-tools.c \
134	pass-popup-menu.c \
135	pass-to-txt.c \
136	predict-tools.c \
137	print-pass.c \
138	qth-data.c \
139	qth-editor.c \
140	radio-conf.c \
141	rotor-conf.c \
142	sat-cfg.c \
143	sat-info.c \
144	sat-log.c \
145	sat-log-browser.c \
146	sat-monitor.c \
147	sat-pass-dialogs.c \
148	sat-pref.c \
149	sat-pref-conditions.c \
150	sat-pref-debug.c \
151	sat-pref-formats.c \
152	sat-pref-general.c \
153	sat-pref-interfaces.c \
154	sat-pref-layout.c \
155	sat-pref-list-view.c \
156	sat-pref-map-view.c \
157	sat-pref-modules.c \
158	sat-pref-multi-pass.c \
159	sat-pref-polar-view.c \
160	sat-pref-predict.c \
161	sat-pref-qth.c \
162	sat-pref-qth-editor.c \
163	sat-pref-refresh.c \
164	sat-pref-rig.c \
165	sat-pref-rig-editor.c \
166	sat-pref-rot.c \
167	sat-pref-rot-editor.c \
168	sat-pref-single-pass.c \
169	sat-pref-single-sat.c \
170	sat-pref-sky-at-glance.c \
171	sat-pref-tle.c \
172	sat-vis.c \
173	save-pass.c \
174	strnatcmp.c \
175	time-tools.c \
176	tle-tools.c \
177	tle-update.c \
178	trsp-conf.c \
179	trsp-update.c \
180	win32-fetch.c
181
182GPREDICTOBJ = $(GPREDICTSRC:.c=.o)
183
184OBJS = $(SGPSDPOBJ) $(NXJSONOBJ) $(GPREDICTOBJ)
185
186%.o: %.c
187	$(CC) -c $(CFLAGS) $(GTK_CFLAGS) $<
188	$(CC) -MM $(CFLAGS) $(GTK_CFLAGS) $< > $*.d
189
190
191# targets begin
192
193all: libsgpsdp.dll gpredict.exe gpredict-con.exe
194
195dist: gpredict-$(GITMAJ).$(GITMIN).$(GITBLD).zip
196
197gpredict-$(GITMAJ).$(GITMIN).$(GITBLD).zip: all
198	mkdir -p gpredict/share/gpredict
199	cp -p libsgpsdp.dll gpredict.exe gpredict-con.exe $(BINDEPS) gpredict
200	cp -rp ../data gpredict/share/gpredict
201	cp -rp ../pixmaps gpredict/share/gpredict
202	cp -rp ../po gpredict/share/gpredict
203	mkdir -p gpredict/$(LOADERS)
204	cp -p loaders.cache gpredict/$(LOADERS)
205	cp -rp $(GTKETC) gpredict
206	mkdir -p gpredict/share/glib-2.0
207	cp -rp $(SCHEMAS) gpredict/share/glib-2.0
208	zip -r $@ gpredict
209	rm -rf gpredict
210
211# Use -mconsole to always open a console window when gpredicxt is started
212# Use -mwindows for no console
213gpredict.exe: TARGET:=-mwindows
214gpredict-con.exe: TARGET:=-mconsole
215
216gpredict.exe gpredict-con.exe: $(OBJS) gpredict_res.o
217	$(CC) $(TARGET) -mthreads -o $@ $^ $(CFLAGS) $(GTK_CFLAGS) $(LIBS) $(GUI_LIBS) -lmingwex -s
218
219gpredict_res.o: gpredict.rc gpredict.exp.manifest
220	$(RC) $(RCFLAGS) gpredict.rc $@
221
222gpredict.exp.manifest: gpredict.exe.manifest
223	sed -e 's/VERSION_STRL/$(VERSION_LONG)/' < $< > $@
224
225libgoocanvas.dll: $(GOOCANVOBJ)
226	$(CC) -shared $(CFLAGS) $(GTK_CFLAGS) $(GOOCANVOBJ) $(GTKLIBS) -lm -lmingwex \
227	-Wl,--enable-auto-image-base -Wl,--out-implib,libgoocanvas.lib -o libgoocanvas.dll
228
229libsgpsdp.dll:  $(SGPSDPOBJ)
230	$(CC) -shared $(CFLAGS) $(GTK_CFLAGS) $(SGPSDPOBJ) $(GLIBLIB) -lm -lmingwex \
231	-Wl,--enable-auto-image-base -Wl,--out-implib,libsgpsdp.lib -o libsgpsdp.dll
232
233clean:
234	rm -f *.o *.d *.def *.a *.lib *.dll *.exe *.exp.manifest *.zip
235	rm -rf gpredict
236
237