From 613e984d8c2af11f8491253217ab6f2ee6daacf0 Mon Sep 17 00:00:00 2001 From: meator Date: Mon, 23 Aug 2021 20:08:46 +0200 Subject: [PATCH] Improve Makefile This commit adds some features mentioned in General Conventions for Makefiles from the GNU make manual. It also allows the Makefile to use some variables form the environment. --- Makefile | 28 ++++++++++++++++------------ config.mk | 22 +++++++++++++++++----- demo/Makefile | 5 +++-- test/Makefile | 6 +++--- 4 files changed, 39 insertions(+), 22 deletions(-) diff --git a/Makefile b/Makefile index 58aa14f..3c3f36f 100644 --- a/Makefile +++ b/Makefile @@ -3,7 +3,7 @@ include config.mk .PHONY: all shared install uninstall test demo clean distclean %.o: %.c - $(CC) -c $(CFLAGS) $< + $(CC) -c $(ALL_CFLAGS) $< all: changelog shared @@ -20,35 +20,39 @@ install: shared install -D $(LIB_NAME) $(DESTDIR)$(LIBDIR)/$(LIB_NAME) ln -snf $(LIB_NAME) $(DESTDIR)$(LIBDIR)/$(LIB_SONAME) ln -snf $(LIB_SONAME) $(DESTDIR)$(LIBDIR)/$(LIBX86).so - install -m 644 -D include/x86emu.h $(DESTDIR)/usr/include/x86emu.h + install -m 644 -D include/x86emu.h $(DESTDIR)$(INCLUDEDIR)/x86emu.h + if [ "$(OLDINCLUDEDIR)" -a "$(OLDINCLUDEDIR)" != "$(INCLUDEDIR)" ] ; then\ + install -m 644 -D include/x86emu.h $(DESTDIR)$(OLDINCLUDEDIR)/x86emu.h ;\ + fi uninstall: rm -f $(DESTDIR)$(LIBDIR)/$(LIB_NAME) rm -f $(DESTDIR)$(LIBDIR)/$(LIB_SONAME) rm -f $(DESTDIR)$(LIBDIR)/$(LIBX86).so - rm -f $(DESTDIR)/usr/include/x86emu.h + rm -f $(DESTDIR)$(INCLUDEDIR)/x86emu.h + rm -f $(DESTDIR)$(OLDINCLUDEDIR)/x86emu.h $(LIB_NAME): .depend $(OBJS) - $(CC) -shared -Wl,-soname,$(LIB_SONAME) $(OBJS) -o $(LIB_NAME) $(LDFLAGS) + $(CC) -shared -Wl,-soname,$(LIB_SONAME) $(ALL_CFLAGS) $(OBJS) -o $(LIB_NAME) $(LDFLAGS) @ln -snf $(LIB_NAME) $(LIB_SONAME) @ln -snf $(LIB_SONAME) $(LIBX86).so test: - make -C test + $(MAKE) -C test demo: - make -C demo + $(MAKE) -C demo archive: changelog @if [ ! -d .git ] ; then echo no git repo ; false ; fi mkdir -p package - git archive --prefix=$(PREFIX)/ $(BRANCH) > package/$(PREFIX).tar - tar -r -f package/$(PREFIX).tar --mode=0664 --owner=root --group=root --mtime="`git show -s --format=%ci`" --transform='s:^:$(PREFIX)/:' VERSION changelog - xz -f package/$(PREFIX).tar + git archive --prefix=$(ARCHIVE_PREFIX)/ $(BRANCH) > package/$(ARCHIVE_PREFIX).tar + tar -r -f package/$(ARCHIVE_PREFIX).tar --mode=0664 --owner=root --group=root --mtime="`git show -s --format=%ci`" --transform='s:^:$(ARCHIVE_PREFIX)/:' VERSION changelog + xz -f package/$(ARCHIVE_PREFIX).tar clean: - make -C test clean - make -C demo clean + $(MAKE) -C test clean + $(MAKE) -C demo clean rm -f *.o *~ include/*~ *.so.* *.so .depend rm -rf package @@ -57,6 +61,6 @@ distclean: clean ifneq "$(MAKECMDGOALS)" "clean" .depend: $(CFILES) - @$(CC) -MG -MM $(CFLAGS) $(CFILES) >$@ + @$(CC) -MG -MM $(ALL_CFLAGS) $(CFILES) >$@ -include .depend endif diff --git a/config.mk b/config.mk index 2beaafd..105a7f0 100644 --- a/config.mk +++ b/config.mk @@ -1,3 +1,4 @@ +SHELL = /bin/sh ARCH := $(shell uname -m) ifneq ($(filter i386 i486 i586 i686, $(ARCH)),) ARCH := i386 @@ -11,15 +12,26 @@ VERSION := $(shell $(GIT2LOG) --version VERSION ; cat VERSION) endif GITDEPS := $(shell [ -d .git ] && echo .git/HEAD .git/refs/heads .git/refs/tags) BRANCH := $(shell [ -d .git ] && git branch | perl -ne 'print $$_ if s/^\*\s*//') -PREFIX := libx86emu-$(VERSION) +ARCHIVE_PREFIX := libx86emu-$(VERSION) + +PREFIX ?= /usr/local +EXEC_PREFIX ?= $(PREFIX) +ifeq "$(ARCH)" "x86_64" +LIBDIR ?= $(EXEC_PREFIX)/lib64 +else +LIBDIR ?= $(EXEC_PREFIX)/lib +endif +INCLUDEDIR ?= $(PREFIX)/include +OLDINCLUDEDIR ?= /usr/include MAJOR_VERSION := $(shell cut -d . -f 1 VERSION) -CC = gcc -CFLAGS = -g -O2 -fPIC -fvisibility=hidden -fomit-frame-pointer -Wall -LDFLAGS = +CC ?= gcc +CFLAGS ?= -g -O2 -Wall -fomit-frame-pointer +ALL_CFLAGS = -fPIC -fvisibility=hidden $(CFLAGS) + +export CC CFLAGS ARCH -LIBDIR = /usr/lib$(shell ldd /bin/sh | grep -q /lib64/ && echo 64) LIBX86 = libx86emu CFILES = $(wildcard *.c) diff --git a/demo/Makefile b/demo/Makefile index 8b6d52f..aa34cfb 100644 --- a/demo/Makefile +++ b/demo/Makefile @@ -1,5 +1,6 @@ -CC = gcc -CFLAGS = -g -Wall -fomit-frame-pointer -O2 +SHELL = /bin/sh +CC ?= gcc +CFLAGS ?= -g -Wall -fomit-frame-pointer -O2 .PHONY: clean diff --git a/test/Makefile b/test/Makefile index 21635f9..b9c0f07 100644 --- a/test/Makefile +++ b/test/Makefile @@ -1,6 +1,6 @@ -CC = gcc -CFLAGS = -g -Wall -fomit-frame-pointer -O2 -LDFLAGS = +SHELL = /bin/sh +CC ?= gcc +CFLAGS ?= -g -Wall -fomit-frame-pointer -O2 TST_FILES = $(sort $(wildcard *.tst)) INIT_FILES = $(addsuffix .init,$(basename $(wildcard *.tst))) RES_FILES = $(sort $(addsuffix .result,$(basename $(wildcard *.tst))))