#!/usr/bin/make -f #******************************************************************************# # Include configuration # #******************************************************************************# # Do it -include Makefile.cfg # Correct target TARGET := $(if $(TARGET),$(TARGET)-) # Check if it is for MS-Windows (damn son) FOR_WINDOWS := $(if $(findstring mingw,$(TARGET)),y) #******************************************************************************# # Project main information # #******************************************************************************# # Project name NAME := g1m # Author information AUTHOR := Thomas \"Cakeisalie5\" Touhey AUTHOR_MAIL := thomas@touhey.fr # Project license LICENSE := GPLv2 # Project version MAJOR := 0 MINOR := 1 INDEV := yes VERSION := $(MAJOR).$(MINOR)$(if $(INDEV),-indev) #******************************************************************************# # Project directories # #******************************************************************************# # Headers directory - where all the headers are. INCDIR := ./include # Sources directory - where all the sources are. SRCDIR := ./src # Objects directory - where the objects will be put. OBJDIR := ./obj # Documentation directory - where the asciidoc sources for the manpages are. DOCDIR := ./doc # Manpages directory - where the manpages will be put. MANDIR := ./man #******************************************************************************# # Object names # #******************************************************************************# # Dynamic library name SONAME := $(if $(FOR_WINDOWS),lib$(NAME)-$(VERSION).dll,lib$(NAME).so.$(MAJOR)) SONAMES := $(if $(FOR_WINDOWS),lib$(NAME)-*.dll,lib$(NAME).so.*) #******************************************************************************# # Binary utilities # #******************************************************************************# # Compiler CC := $(TARGET)gcc # - Check flags (warnings) CHKFLAGS := -Wall -Wextra -Wno-attributes # - For random manipulations (profiling, ...) CMOREFLAGS := # - All C compiling flags CFLAGS := -I $(INCDIR) $(CHKFLAGS) -std=gnu11 -fPIC -O2 \ -D LOGLEVEL="ll_$(LOG_LEVEL)" \ -D AUTHOR="$(AUTHOR)" -D AUTHOR_MAIL="$(AUTHOR_MAIL)" \ -D LICENSE="$(LICENSE)" -D VERSION="$(VERSION)" \ $(CMOREFLAGS) # Linker LD := $(TARGET)gcc # - Specific linker flags LDFLAGS_Windows := -lws2_32 -mdll -Wl,--out-implib,$(SONAME) LDFLAGS_Linux := -shared -Wl,-soname,$(SONAME) \ -e __lib$(NAME)_version \ -Wl,-z,relro -Wl,-z,combreloc -Wl,-z,defs # - Linker flags LDFLAGS := -lz \ $(if $(FOR_WINDOWS),$(LDFLAGS_Windows),$(LDFLAGS_Linux)) # Directory maker MD := mkdir -p # Symbolic link maker LN := ln -sf # File remover RM := rm -f # Documentation creator A2X := a2x # Installer INST := install # GZipper GZIP := gzip -f #******************************************************************************# # Look for modules and modules sources # #******************************************************************************# # Look for modules first MODULES := $(notdir $(shell find $(SRCDIR) -mindepth 1 -maxdepth 1 \ -type d | sort)) # Then look for their content define get-module-source SRC_$1 := $(basename $(shell find $(SRCDIR)/$1 \ -maxdepth 1 -mindepth 1 -type f -name "*.[cs]" -printf "%P\n" | sort)) endef $(foreach mod,$(MODULES), \ $(eval $(call get-module-source,$(mod)))) #******************************************************************************# # Look for headers # #******************************************************************************# # All headers INC := \ $(basename $(shell find $(INCDIR) -name "*.h" -printf "%P\n")) # Public headers only (not internals.h or internals/**/*.h) INCPUB := \ $(basename $(shell find $(INCDIR) \ \( -name "*.h" -and -not -path "*internals*" \) \ -printf "%P\n" | sort)) #******************************************************************************# # Look for manpages # #******************************************************************************# # Get the manpages sections and contents MAN_SECTIONS := define check-man MAN_SECTIONS += $1 MAN_$1 += $2 endef $(foreach doc, $(basename $(shell find $(DOCDIR) \ -maxdepth 1 -mindepth 1 -printf "%P\n" -type f -or -type l -name "*.*.txt")), \ $(eval $(call check-man,$(patsubst .%,%,$(suffix $(doc))),$(basename $(doc))))) # Remove duplicate sections. MAN_SECTIONS := $(sort $(MAN_SECTIONS)) #******************************************************************************# # Check for DESTDIR (add as prefix to installation root) # #******************************************************************************# define add-dest-dir $1 = $(DESTDIR)$($1) endef $(if $(DESTDIR), $(foreach idir,ILIBDIR IINCDIR IMANDIR UDEVDIR, \ $(eval $(call add-dest-dir,$(idir))))) # END OF FILE