diff --git a/makefile b/makefile index ee06d6d..53fe49d 100644 --- a/makefile +++ b/makefile @@ -244,8 +244,10 @@ endif ifdef ENABLE_STANDALONE newbin := $(new) + newinclude := $(new)/include newlib := $(new)/$(TARGET_PREFIX)lib$(SUFFIX) prefixbin := $(prefix) + prefixinclude := $(prefix)/include prefixlib := $(prefix)/$(TARGET_PREFIX)lib$(SUFFIX) else ifeq ($(TARGET_OS),dos) @@ -254,8 +256,10 @@ else FB_NAME := freebasic endif newbin := $(new)/bin + newinclude := $(new)/include/$(FB_NAME) newlib := $(new)/lib/$(TARGET_PREFIX)$(FB_NAME)$(SUFFIX) prefixbin := $(prefix)/bin + prefixinclude := $(prefix)/include/$(FB_NAME) prefixlib := $(prefix)/lib/$(TARGET_PREFIX)$(FB_NAME)$(SUFFIX) endif @@ -347,7 +351,7 @@ ifdef DISABLE_X endif # -# Sources +# Compiler sources # FBC_BI := compiler/ast.bi @@ -438,6 +442,183 @@ endif FBC_BAS := $(patsubst %,$(newcompiler)/%.o,$(FBC_BAS)) +# +# Headers +# +# Sorted alphabetically, with parent directories behind their sub-directories, +# so 'make uninstall' can remove the directories properly via rmdir. +# The headers build rule uses $(sort) to sort the directories into "normal" +# order, so they can be properly created with mkdir. +# + +ifneq ($(TARGET_OS),dos) + headers += include/AL/ +endif + headers += include/allegro.bi + headers += include/allegro/inline/ + headers += include/allegro/internal/ + headers += include/allegro/platform/ + headers += include/allegro/ + headers += include/aspell.bi + headers += include/bass.bi + headers += include/bassmod.bi + headers += include/bfd.bi + headers += include/bfd/ + headers += include/big_int/ + headers += include/bzlib.bi + headers += include/caca.bi +ifneq ($(TARGET_OS),dos) + headers += include/cairo/ +endif + headers += include/cgui.bi + headers += include/chipmunk/constraints/ + headers += include/chipmunk/ + headers += include/crt.bi + headers += include/crt/arpa/ + headers += include/crt/bits/ +ifeq ($(TARGET_OS),dos) + headers += include/crt/dos/ + headers += include/crt/sys/dos/ +endif +ifeq ($(TARGET_OS),linux) + headers += include/crt/linux/ + headers += include/crt/netinet/linux/ + headers += include/crt/sys/linux/ +endif +ifeq ($(TARGET_OS),win32) + headers += include/crt/win32/ + headers += include/crt/sys/win32/ +endif + headers += include/crt/netinet/ + headers += include/crt/sys/ + headers += include/crt/ + headers += include/cryptlib.bi + headers += include/CUnit/ + headers += include/curl.bi + headers += include/curses.bi + headers += include/curses/ + headers += include/datetime.bi + headers += include/dir.bi + headers += include/dislin.bi +ifeq ($(TARGET_OS),win32) + headers += include/disphelper/ +endif +ifeq ($(TARGET_OS),dos) + headers += include/dos/inlines/ + headers += include/dos/sys/ + headers += include/dos/ +endif + headers += include/expat.bi + headers += include/fastcgi/ + headers += include/fbgfx.bi + headers += include/ffi.bi + headers += include/file.bi + headers += include/flite/ + headers += include/fmod.bi + headers += include/FreeImage.bi + headers += include/freetype2/config/ + headers += include/freetype2/ + headers += include/gd/ + headers += include/gdbm.bi + headers += include/gdsl/ + headers += include/gettext-po.bi + headers += include/gif_lib.bi +ifneq ($(TARGET_OS),dos) + headers += include/GL/ +endif + headers += include/gmp.bi + headers += include/grx/ + headers += include/gsl/ +ifneq ($(TARGET_OS),dos) + headers += include/gtk/atk/ + headers += include/gtk/gdk/ + headers += include/gtk/gdkgl/ + headers += include/gtk/gdk-pixbuf/ + headers += include/gtk/glib/ + headers += include/gtk/gobject/ + headers += include/gtk/gtk/ + headers += include/gtk/gtkgl/ + headers += include/gtk/libart/ + headers += include/gtk/libglade/ + headers += include/gtk/pango/ + headers += include/gtk/ +endif + headers += include/IL/ + headers += include/IUP/ + headers += include/IUP3/ + headers += include/japi.bi + headers += include/jit.bi + headers += include/jit/ + headers += include/jni.bi + headers += include/jpeglib.bi + headers += include/jpgalleg.bi + headers += include/libintl.bi + headers += include/libxml/ + headers += include/libxslt/ + headers += include/Lua/ + headers += include/lzma.bi + headers += include/lzo/ + headers += include/MediaInfo.bi + headers += include/mpg123.bi + headers += include/mxml.bi + headers += include/mysql/ + headers += include/Newton.bi + headers += include/ode/ + headers += include/ogg/ + headers += include/pcre/ + headers += include/pdflib.bi + headers += include/png.bi + headers += include/portaudio.bi + headers += include/postgresql/ + headers += include/quicklz.bi + headers += include/regex.bi +ifneq ($(TARGET_OS),dos) + headers += include/SDL/ +endif + headers += include/sndfile.bi + headers += include/spidermonkey/ + headers += include/sqlite2.bi + headers += include/sqlite3.bi + headers += include/string.bi + headers += include/utf_conv.bi + headers += include/uuid.bi + headers += include/vbcompat.bi + headers += include/vlc/ + headers += include/vorbis/ +ifeq ($(TARGET_OS),win32) + headers += include/windows.bi + headers += include/win/ddk/ + headers += include/win/rc/ + headers += include/win/ +endif +ifneq ($(TARGET_OS),dos) + headers += include/wx-c/ +endif +ifeq ($(TARGET_OS),linux) + headers += include/X11/extensions/ + headers += include/X11/ICE/ + headers += include/X11/SM/ + headers += include/X11/Xcursor/ + headers += include/X11/Xft/ + headers += include/X11/Xmu/ + headers += include/X11/Xtrans/ + headers += include/X11/ +endif + headers += include/zip.bi + headers += include/zlib.bi + headers += include/zmq/ + +NEW_HEADER_FILES := $(filter %.bi,$(headers)) +NEW_HEADER_DIRS := $(filter %/,$(headers)) +NEW_HEADER_FILES += $(foreach i,$(NEW_HEADER_DIRS),$(wildcard $(i)*.bi)) + +NEW_HEADER_DIRS := $(patsubst include/%,$(newinclude)/%,$(NEW_HEADER_DIRS)) +NEW_HEADER_FILES := $(patsubst include/%,$(newinclude)/%,$(NEW_HEADER_FILES)) + +# +# rtlib sources +# + LIBFB_H := rtlib/fb.h LIBFB_H += rtlib/fb_array.h LIBFB_H += rtlib/fb_colors.h @@ -762,6 +943,10 @@ ifndef DISABLE_MT LIBFBMT_S := $(patsubst $(newlibfb)/%,$(newlibfbmt)/%,$(LIBFB_S)) endif +# +# gfxlib sources +# + ifndef DISABLE_GFX LIBFBGFX_H := $(LIBFB_H) LIBFBGFX_H += gfxlib2/fb_gfx_data.h @@ -860,12 +1045,13 @@ ifndef V endif .PHONY: all -all: compiler rtlib gfxlib2 +all: compiler headers rtlib gfxlib2 $(sort $(new) $(newcompiler) $(newlibfb) $(newlibfbmt) $(newlibfbgfx) \ - $(newbin) $(new)/lib $(newlib) \ + $(newbin) $(new)/include $(newinclude) $(NEW_HEADER_DIRS) \ + $(new)/lib $(newlib) \ $(prefix) $(prefixbin) \ - $(prefix)/lib $(prefixlib)): + $(prefix)/include $(prefixinclude) $(prefix)/lib $(prefixlib)): mkdir $@ .PHONY: compiler @@ -890,6 +1076,12 @@ $(FBC_BAS): $(newcompiler)/%.o: compiler/%.bas $(FBC_BI) $(FBC_BFDWRAPPER): $(newcompiler)/%.o: compiler/%.c $(QUIET_CC)$(TARGET_CC) -Wfatal-errors -Wall -c $< -o $@ +.PHONY: headers +headers: $(new)/include $(newinclude) +headers: $(sort $(NEW_HEADER_DIRS)) $(NEW_HEADER_FILES) +$(NEW_HEADER_FILES): $(newinclude)/%.bi: include/%.bi + $(QUIET_CP)cp $< $@ + .PHONY: rtlib rtlib: $(new) $(newlibfb) $(new)/lib $(newlib) rtlib: $(newlib)/fbrt0.o @@ -935,31 +1127,41 @@ $(LIBFBGFX_C): $(newlibfbgfx)/%.o: gfxlib2/%.c $(LIBFBGFX_H) $(LIBFBGFX_S): $(newlibfbgfx)/%.o: gfxlib2/%.s $(LIBFBGFX_H) $(QUIET_CPPAS)$(TARGET_CC) -x assembler-with-cpp $(ALLCFLAGS) -c $< -o $@ -.PHONY: install -install: install-compiler install-rtlib install-gfxlib2 +.PHONY: install install-compiler install-headers install-rtlib install-gfxlib2 +install: install-compiler install-headers install-rtlib install-gfxlib2 -.PHONY: install-compiler install-compiler: $(prefixbin) $(prefixlib) $(INSTALL_PROGRAM) $(newbin)/$(FBC_EXE) $(prefixbin)/ ifdef FB_LDSCRIPT $(INSTALL_FILE) $(newlib)/$(FB_LDSCRIPT) $(prefixlib)/ endif -.PHONY: install-rtlib +# (relies on cp supporting --parents) +install-headers: $(prefixinclude) + cd $(newinclude) && cp --parents $(patsubst $(newinclude)/%,%,$(NEW_HEADER_FILES)) $(prefixinclude) + +# The cp -r way (much shorter command line): +#ifdef ENABLE_STANDALONE +#install-headers: $(prefixinclude) +# cp -r $(newinclude) $(prefixinclude) +#else +#install-headers: $(prefix)/include +# cp -r $(newinclude) $(prefix)/include +#endif + install-rtlib: $(prefixlib) $(INSTALL_FILE) $(newlib)/fbrt0.o $(newlib)/libfb.a $(prefixlib)/ ifndef DISABLE_MT $(INSTALL_FILE) $(newlib)/libfbmt.a $(prefixlib)/ endif -.PHONY: install-gfxlib2 install-gfxlib2: $(prefixlib) ifndef DISABLE_GFX $(INSTALL_FILE) $(newlib)/libfbgfx.a $(prefixlib)/ endif -.PHONY: uninstall uninstall-compiler uninstall-rtlib uninstall-gfxlib2 -uninstall: uninstall-compiler uninstall-rtlib uninstall-gfxlib2 +.PHONY: uninstall uninstall-compiler uninstall-headers uninstall-rtlib uninstall-gfxlib2 +uninstall: uninstall-compiler uninstall-headers uninstall-rtlib uninstall-gfxlib2 # The non-standalone build uses freebasic subdirs, e.g. /usr/lib/freebasic, # that we should remove if empty. ifndef ENABLE_STANDALONE @@ -972,6 +1174,20 @@ uninstall-compiler: rm -f $(prefixlib)/$(FB_LDSCRIPT) endif +uninstall-headers: + rm -f $(patsubst $(newinclude)/%,$(prefixinclude)/%,$(NEW_HEADER_FILES)) + -rmdir $(patsubst $(newinclude)/%,$(prefixinclude)/%,$(NEW_HEADER_DIRS)) + ifndef ENABLE_STANDALONE + -rmdir $(prefixinclude) + endif + +# The rm -rf way (much shorter command line -> much less output, but oh well): +# ifdef ENABLE_STANDALONE +# rm -rf $(prefixinclude)/* +# else +# rm -rf $(prefixinclude) +# endif + uninstall-rtlib: rm -f $(prefixlib)/fbrt0.o $(prefixlib)/libfb.a ifndef DISABLE_MT @@ -983,8 +1199,8 @@ uninstall-gfxlib2: rm -f $(prefixlib)/libfbgfx.a endif -.PHONY: clean clean-compiler clean-rtlib clean-gfxlib2 -clean: clean-compiler clean-rtlib clean-gfxlib2 +.PHONY: clean clean-compiler clean-headers clean-rtlib clean-gfxlib2 +clean: clean-compiler clean-headers clean-rtlib clean-gfxlib2 ifndef ENABLE_STANDALONE -rmdir $(newbin) endif @@ -1001,6 +1217,14 @@ clean-compiler: endif -rmdir $(newcompiler) +clean-headers: + rm -f $(NEW_HEADER_FILES) + -rmdir $(NEW_HEADER_DIRS) + -rmdir $(newinclude) + ifndef ENABLE_STANDALONE + -rmdir $(new)/include + endif + clean-rtlib: rm -f $(newlib)/fbrt0.o $(newlib)/libfb.a $(newlibfb)/*.o -rmdir $(newlibfb) @@ -1018,8 +1242,8 @@ clean-gfxlib2: .PHONY: help help: @echo "Available commands, use them to..." - @echo " |all build compiler and runtime libraries" - @echo " compiler|rtlib|gfxlib2 (specific component only)" + @echo " |all build everything" + @echo " compiler|headers|rtlib|gfxlib2 (specific component only)" @echo " clean[-] remove built files" @echo " install[-] install into prefix" @echo " uninstall[-] remove from prefix"