cake
/
libg1m
Archived
1
0
Fork 0
This repository has been archived on 2024-03-16. You can view files and clone it, but cannot push or open issues or pull requests.
libg1m/Makefile.vars

157 lines
5.4 KiB
Makefile
Executable File
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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 and description
NAME := g1m
DESCRIPTION := Library for reading and writing CASIO files
# 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).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
LDFLAGS_Linux := -Wl,-soname,$(SONAME) \
-e __lib$(NAME)_version \
-Wl,-z,relro -Wl,-z,combreloc -Wl,-z,defs
# - Linker flags
LDFLAGS := -shared -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) #
#******************************************************************************#
# Save original library and include dir.
OIINCDIR := $(IINCDIR)
OILIBDIR := $(ILIBDIR)
# Make it.
define add-dest-dir
$1 = $(DESTDIR)$($1)
endef
$(if $(DESTDIR), $(foreach idir,IBINDIR IPKGDIR ILIBDIR IINCDIR IMANDIR, \
$(eval $(call add-dest-dir,$(idir)))))
# END OF FILE