Make buildsystem respect GNU conventions

* CPPFLAGS is a user variable and should be respected
  when compiling .c files. Think of -D_FORTIFY_SOURCE=2.

* Pass ALL_CFLAGS when linking too. This is recommended
  for certain edge cases (-flto)

* Use DESTDIR instead of INSTALLROOT for staging dir
  Every other build system (Automake, CMake, Meson) uses
  DESTDIR. This integrates better into distro and other
  build systems that have standard hooks for DESTDIR.

* $(MAKE) -C <dir> is better than cd'ing into a <dir>

* Use Autoconf's ${docdir} and ${htmldir} for installing
  the documentation. This makes handling documentation
  easier and respects user choice.

Signed-off-by: David Seifert <soap@gentoo.org>
Signed-off-by: Cyrill Gorcunov <gorcunov@gmail.com>
This commit is contained in:
David Seifert 2017-07-01 20:13:56 -07:00 committed by Cyrill Gorcunov
parent 6e53180085
commit a4f6ca5a33
2 changed files with 29 additions and 25 deletions

View file

@ -20,6 +20,7 @@ datarootdir = @datarootdir@
CC = @CC@
CFLAGS = @CFLAGS@
CPPFLAGS = @CPPFLAGS@
BUILD_CFLAGS = $(CFLAGS) @DEFS@
INTERNAL_CFLAGS = -I$(srcdir) -I$(objdir) \
-I$(srcdir)/include -I$(objdir)/include \
@ -72,13 +73,13 @@ endif
.PHONY: manpages nsis
.c.$(O):
$(CC) -c $(ALL_CFLAGS) -o $@ $<
$(CC) -c $(CPPFLAGS) $(ALL_CFLAGS) -o $@ $<
.c.s:
$(CC) -S $(ALL_CFLAGS) -o $@ $<
$(CC) -S $(CPPFLAGS) $(ALL_CFLAGS) -o $@ $<
.c.i:
$(CC) -E $(ALL_CFLAGS) -o $@ $<
$(CC) -E $(CPPFLAGS) $(ALL_CFLAGS) -o $@ $<
.txt.xml:
$(ASCIIDOC) -b docbook -d manpage -o $@ $<
@ -88,7 +89,7 @@ endif
# This rule is only used for rdoff, to allow common rules
.$(O)$(X):
$(CC) $(LDFLAGS) -o $@ $< $(RDFLIB) $(NASMLIB) $(LIBS)
$(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ $< $(RDFLIB) $(NASMLIB) $(LIBS)
#-- Begin File Lists --#
NASM = asm/nasm.$(O)
@ -152,10 +153,10 @@ $(NASMLIB): $(LIBOBJ)
$(RANLIB) $(NASMLIB)
nasm$(X): $(NASM) $(NASMLIB)
$(CC) $(LDFLAGS) -o nasm$(X) $(NASM) $(NASMLIB) $(LIBS)
$(CC) $(ALL_CFLAGS) $(LDFLAGS) -o nasm$(X) $(NASM) $(NASMLIB) $(LIBS)
ndisasm$(X): $(NDISASM) $(NASMLIB)
$(CC) $(LDFLAGS) -o ndisasm$(X) $(NDISASM) $(NASMLIB) $(LIBS)
$(CC) $(ALL_CFLAGS) $(LDFLAGS) -o ndisasm$(X) $(NDISASM) $(NASMLIB) $(LIBS)
#-- Begin Generated File Rules --#
@ -335,12 +336,12 @@ nsis: nsis/nasm.nsi nsis/arch.nsh nsis/version.nsh
manpages: nasm.1 ndisasm.1
install: nasm$(X) ndisasm$(X)
$(MKDIR) -p $(INSTALLROOT)$(bindir)
$(INSTALL_PROGRAM) nasm$(X) $(INSTALLROOT)$(bindir)/nasm$(X)
$(INSTALL_PROGRAM) ndisasm$(X) $(INSTALLROOT)$(bindir)/ndisasm$(X)
$(MKDIR) -p $(INSTALLROOT)$(mandir)/man1
$(INSTALL_DATA) $(srcdir)/nasm.1 $(INSTALLROOT)$(mandir)/man1/nasm.1
$(INSTALL_DATA) $(srcdir)/ndisasm.1 $(INSTALLROOT)$(mandir)/man1/ndisasm.1
$(MKDIR) -p $(DESTDIR)$(bindir)
$(INSTALL_PROGRAM) nasm$(X) $(DESTDIR)$(bindir)/nasm$(X)
$(INSTALL_PROGRAM) ndisasm$(X) $(DESTDIR)$(bindir)/ndisasm$(X)
$(MKDIR) -p $(DESTDIR)$(mandir)/man1
$(INSTALL_DATA) $(srcdir)/nasm.1 $(DESTDIR)$(mandir)/man1/nasm.1
$(INSTALL_DATA) $(srcdir)/ndisasm.1 $(DESTDIR)$(mandir)/man1/ndisasm.1
clean:
for d in . $(SUBDIRS) $(XSUBDIRS); do \
@ -364,7 +365,7 @@ distclean: clean
cleaner: clean
$(RM_F) $(PERLREQ) *.1 nasm.spec
cd doc && $(MAKE) clean
$(MAKE) -C doc clean
spotless: distclean cleaner
$(RM_F) doc/Makefile
@ -386,23 +387,23 @@ cscope:
cscope -b -f cscope.out
rdf_install install_rdf install_rdoff:
$(MKDIR) -p $(INSTALLROOT)$(bindir)
$(MKDIR) -p $(DESTDIR)$(bindir)
for f in $(RDFPROGS); do \
$(INSTALL_PROGRAM) "$$f" '$(INSTALLROOT)$(bindir)'/ ; \
$(INSTALL_PROGRAM) "$$f" '$(DESTDIR)$(bindir)'/ ; \
done
cd '$(INSTALLROOT)$(bindir)' && \
cd '$(DESTDIR)$(bindir)' && \
for f in $(RDF2BINLINKS); do \
bn=`basename "$$f"` && $(RM_F) "$$bn" && \
$(LN_S) rdf2bin$(X) "$$bn" ; \
done
$(MKDIR) -p $(INSTALLROOT)$(mandir)/man1
$(INSTALL_DATA) $(srcdir)/rdoff/*.1 $(INSTALLROOT)$(mandir)/man1/
$(MKDIR) -p $(DESTDIR)$(mandir)/man1
$(INSTALL_DATA) $(srcdir)/rdoff/*.1 $(DESTDIR)$(mandir)/man1/
doc:
cd doc && $(MAKE) all
$(MAKE) -C doc all
doc_install install_doc:
cd doc && $(MAKE) install
$(MAKE) -C doc install
everything: all manpages doc rdf

View file

@ -9,7 +9,8 @@ prefix = @prefix@
exec_prefix = @exec_prefix@
bindir = @bindir@
mandir = @mandir@
docdir = $(prefix)/doc/nasm
docdir = @docdir@
htmldir = @htmldir@
infodir = @infodir@
datarootdir = @datarootdir@
@ -21,6 +22,7 @@ PERL = perl -I$(srcdir)
PDFOPT = @PDFOPT@
MKDIR = mkdir
RM_F = rm -f
RM_RF = rm -rf
CP_F = cp -f
@ -41,7 +43,7 @@ inslist.src: inslist.pl ../x86/insns.dat
.PHONY: html
html: $(HTMLAUX)
mkdir -p html
$(MKDIR) -p html
for f in $(HTMLAUX); do $(CP_UF) "$(srcdir)/$$f" html/; done
$(MAKE) html/nasmdoc0.html
@ -81,6 +83,7 @@ spotless: clean
-$(RM_F) *.hlp nasmdoc.txt *.inf *.pdf *.dvi
install: all
mkdir -p $(INSTALLROOT)$(docdir)/html
$(INSTALL_DATA) html/* $(INSTALLROOT)$(docdir)/html
$(INSTALL_DATA) nasmdoc.pdf nasmdoc.txt $(INSTALLROOT)$(docdir)
$(MKDIR) -p $(DESTDIR)$(htmldir)
$(INSTALL_DATA) html/* $(DESTDIR)$(htmldir)
$(MKDIR) -p $(DESTDIR)$(docdir)
$(INSTALL_DATA) nasmdoc.pdf nasmdoc.txt $(DESTDIR)$(docdir)