From 0a43341cec6239da680252a67b86df5dac5c5e2c Mon Sep 17 00:00:00 2001 From: Jeffrey Walton Date: Mon, 5 Feb 2018 08:54:13 -0500 Subject: [PATCH] Use install program for Makefile (GH #582) --- GNUmakefile | 87 ++++++++++++++++++++++++++--------------------- GNUmakefile-cross | 39 ++++++++++++--------- 2 files changed, 70 insertions(+), 56 deletions(-) diff --git a/GNUmakefile b/GNUmakefile index 7017f11c..7b8cb6b6 100755 --- a/GNUmakefile +++ b/GNUmakefile @@ -3,6 +3,8 @@ ########################################################### # https://www.gnu.org/software/make/manual/make.html#Makefile-Conventions +# and https://www.gnu.org/prep/standards/standards.html + SHELL = /bin/sh # If needed @@ -10,7 +12,7 @@ TMPDIR ?= /tmp # Used for ARMv7 and NEON. FP_ABI ?= hard -# Command ard arguments +# Command and arguments AR ?= ar ARFLAGS ?= -cr # ar needs the dash on OpenBSD RANLIB ?= ranlib @@ -19,10 +21,15 @@ CP ?= cp MV ?= mv RM ?= rm -f CHMOD ?= chmod -MKDIR ?= mkdir +MKDIR ?= mkdir -p + LN ?= ln -sf LDCONF ?= /sbin/ldconfig -n +INSTALL = install +INSTALL_PROGRAM = $(INSTALL) +INSTALL_DATA = $(INSTALL) -m 644 + # Solaris provides a non-Posix shell at /usr/bin ifneq ($(wildcard /usr/xpg4/bin),) GREP ?= /usr/xpg4/bin/grep @@ -827,7 +834,7 @@ clean: .PHONY: distclean distclean: clean -$(RM) adhoc.cpp adhoc.cpp.copied GNUmakefile.deps benchmarks.html cryptest.txt cryptest-*.txt - @-$(RM) cryptopp.tgz *.o *.bc *.ii *~ + @-$(RM) libcryptopp.pc cryptopp.tgz *.o *.bc *.ii *~ @-$(RM) -r $(SRCS:.cpp=.obj) cryptlib.lib cryptest.exe *.suo *.sdf *.pdb Win32/ x64/ ipch/ @-$(RM) -r $(DOCUMENT_DIRECTORY)/ @-$(RM) -f configure.ac configure configure.in Makefile.am Makefile.in Makefile @@ -840,43 +847,37 @@ distclean: clean .PHONY: install install: - @-$(MKDIR) -p $(DESTDIR)$(INCLUDEDIR)/cryptopp - $(CP) *.h $(DESTDIR)$(INCLUDEDIR)/cryptopp - -$(CHMOD) 0755 $(DESTDIR)$(INCLUDEDIR)/cryptopp - -$(CHMOD) 0644 $(DESTDIR)$(INCLUDEDIR)/cryptopp/*.h + @-$(MKDIR) $(DESTDIR)$(INCLUDEDIR)/cryptopp + $(INSTALL_DATA) *.h $(DESTDIR)$(INCLUDEDIR)/cryptopp ifneq ($(wildcard libcryptopp.a),) - @-$(MKDIR) -p $(DESTDIR)$(LIBDIR) - $(CP) libcryptopp.a $(DESTDIR)$(LIBDIR) - -$(CHMOD) 0644 $(DESTDIR)$(LIBDIR)/libcryptopp.a + @-$(MKDIR) $(DESTDIR)$(LIBDIR) + $(INSTALL_DATA) libcryptopp.a $(DESTDIR)$(LIBDIR) endif ifneq ($(wildcard cryptest.exe),) - @-$(MKDIR) -p $(DESTDIR)$(BINDIR) - $(CP) cryptest.exe $(DESTDIR)$(BINDIR) - -$(CHMOD) 0755 $(DESTDIR)$(BINDIR)/cryptest.exe - $(MKDIR) -p $(DESTDIR)$(DATADIR)/cryptopp - $(CP) -r TestData $(DESTDIR)$(DATADIR)/cryptopp - $(CP) -r TestVectors $(DESTDIR)$(DATADIR)/cryptopp - -$(CHMOD) 0755 $(DESTDIR)$(DATADIR)/cryptopp - -$(CHMOD) 0755 $(DESTDIR)$(DATADIR)/cryptopp/TestData - -$(CHMOD) 0755 $(DESTDIR)$(DATADIR)/cryptopp/TestVectors - -$(CHMOD) 0644 $(DESTDIR)$(DATADIR)/cryptopp/TestData/*.dat - -$(CHMOD) 0644 $(DESTDIR)$(DATADIR)/cryptopp/TestVectors/*.txt + @-$(MKDIR) $(DESTDIR)$(BINDIR) + $(INSTALL_PROGRAM) cryptest.exe $(DESTDIR)$(BINDIR) + @-$(MKDIR) $(DESTDIR)$(DATADIR)/cryptopp/TestData + @-$(MKDIR) $(DESTDIR)$(DATADIR)/cryptopp/TestVectors + $(INSTALL_DATA) TestData/*.dat $(DESTDIR)$(DATADIR)/cryptopp/TestData + $(INSTALL_DATA) TestVectors/*.txt $(DESTDIR)$(DATADIR)/cryptopp/TestVectors endif ifneq ($(wildcard libcryptopp.dylib),) - @-$(MKDIR) -p $(DESTDIR)$(LIBDIR) - $(CP) libcryptopp.dylib $(DESTDIR)$(LIBDIR) + @-$(MKDIR) $(DESTDIR)$(LIBDIR) + $(INSTALL_DATA) libcryptopp.dylib $(DESTDIR)$(LIBDIR) -install_name_tool -id $(DESTDIR)$(LIBDIR)/libcryptopp.dylib $(DESTDIR)$(LIBDIR)/libcryptopp.dylib - -$(CHMOD) 0755 $(DESTDIR)$(LIBDIR)/libcryptopp.dylib endif ifneq ($(wildcard libcryptopp.so$(SOLIB_VERSION_SUFFIX)),) - @-$(MKDIR) -p $(DESTDIR)$(LIBDIR) - $(CP) libcryptopp.so$(SOLIB_VERSION_SUFFIX) $(DESTDIR)$(LIBDIR) - @-$(CHMOD) 0755 $(DESTDIR)$(LIBDIR)/libcryptopp.so$(SOLIB_VERSION_SUFFIX) + @-$(MKDIR) $(DESTDIR)$(LIBDIR) + $(INSTALL_DATA) libcryptopp.so$(SOLIB_VERSION_SUFFIX) $(DESTDIR)$(LIBDIR) ifeq ($(HAS_SOLIB_VERSION),1) -$(LN) libcryptopp.so$(SOLIB_VERSION_SUFFIX) $(DESTDIR)$(LIBDIR)/libcryptopp.so $(LDCONF) $(DESTDIR)$(LIBDIR) endif endif +ifneq ($(wildcard libcryptopp.pc),) + @-$(MKDIR) $(DESTDIR)$(LIBDIR)/pkgconfig + $(INSTALL_DATA) libcryptopp.pc $(DESTDIR)$(LIBDIR)/pkgconfig/libcryptopp.pc +endif .PHONY: remove uninstall remove uninstall: @@ -887,9 +888,10 @@ remove uninstall: @-$(RM) $(DESTDIR)$(LIBDIR)/libcryptopp.so$(SOLIB_VERSION_SUFFIX) @-$(RM) $(DESTDIR)$(LIBDIR)/libcryptopp.so$(SOLIB_COMPAT_SUFFIX) @-$(RM) $(DESTDIR)$(LIBDIR)/libcryptopp.so + @-$(RM) $(DESTDIR)$(LIBDIR)/pkgconfig/libcryptopp.pc @-$(RM) -r $(DESTDIR)$(DATADIR)/cryptopp -libcryptopp.a: $(LIBOBJS) +libcryptopp.a: $(LIBOBJS) libcryptopp.pc $(AR) $(ARFLAGS) $@ $(LIBOBJS) ifeq ($(IS_SUN),0) $(RANLIB) $@ @@ -911,7 +913,7 @@ ifeq ($(HAS_SOLIB_VERSION),1) -$(LN) libcryptopp.so$(SOLIB_VERSION_SUFFIX) libcryptopp.so$(SOLIB_COMPAT_SUFFIX) endif -libcryptopp.dylib: $(LIBOBJS) +libcryptopp.dylib: $(LIBOBJS) libcryptopp.pc $(CXX) -dynamiclib -o $@ $(strip $(CXXFLAGS)) -install_name "$@" -current_version "$(LIB_MAJOR).$(LIB_MINOR).$(LIB_PATCH)" -compatibility_version "$(LIB_MAJOR).$(LIB_MINOR)" -headerpad_max_install_names $(LDFLAGS) $(LIBOBJS) cryptest.exe: libcryptopp.a $(TESTOBJS) @@ -938,6 +940,21 @@ cryptest.import.exe: cryptopp.dll libcryptopp.import.a $(TESTIMPORTOBJS) dlltest.exe: cryptopp.dll $(DLLTESTOBJS) $(CXX) -o $@ $(strip $(CXXFLAGS)) $(DLLTESTOBJS) -L. -lcryptopp.dll $(LDFLAGS) $(LDLIBS) +libcryptopp.pc: + @echo '# Crypto++ package configuration file' > libcryptopp.pc + @echo '' >> libcryptopp.pc + @echo 'prefix=$(PREFIX)' >> libcryptopp.pc + @echo 'libdir=$(LIBDIR)' >> libcryptopp.pc + @echo 'includedir=$${prefix}/include' >> libcryptopp.pc + @echo '' >> libcryptopp.pc + @echo 'Name: Crypto++' >> libcryptopp.pc + @echo 'Description: Crypto++ cryptographic library' >> libcryptopp.pc + @echo 'Version: 6.1.0' >> libcryptopp.pc + @echo 'URL: https://cryptopp.com/' >> libcryptopp.pc + @echo '' >> libcryptopp.pc + @echo 'Cflags: -I$${includedir}' >> libcryptopp.pc + @echo 'Libs: -L$${libdir} -lcryptopp' >> libcryptopp.pc + # This recipe prepares the distro files TEXT_FILES := *.h *.cpp adhoc.cpp.proto License.txt Readme.txt Install.txt Filelist.txt Doxyfile cryptest* cryptlib* dlltest* cryptdll* *.sln *.vcxproj *.filters cryptopp.rc TestVectors/*.txt TestData/*.dat TestScripts/*.sh TestScripts/*.cmd EXEC_FILES := GNUmakefile GNUmakefile-cross TestData/ TestVectors/ TestScripts/ @@ -979,12 +996,12 @@ zip dist: | distclean convert .PHONY: iso iso: | zip ifneq ($(IS_DARWIN),0) - $(MKDIR) -p $(PWD)/cryptopp$(LIB_VER) + $(MKDIR) $(PWD)/cryptopp$(LIB_VER) $(CP) cryptopp$(LIB_VER).zip $(PWD)/cryptopp$(LIB_VER) hdiutil makehybrid -iso -joliet -o cryptopp$(LIB_VER).iso $(PWD)/cryptopp$(LIB_VER) @-$(RM) -r $(PWD)/cryptopp$(LIB_VER) else ifneq ($(IS_LINUX),0) - $(MKDIR) -p $(PWD)/cryptopp$(LIB_VER) + $(MKDIR) $(PWD)/cryptopp$(LIB_VER) $(CP) cryptopp$(LIB_VER).zip $(PWD)/cryptopp$(LIB_VER) genisoimage -q -o cryptopp$(LIB_VER).iso $(PWD)/cryptopp$(LIB_VER) @-$(RM) -r $(PWD)/cryptopp$(LIB_VER) @@ -1009,14 +1026,6 @@ ifeq ($(wildcard GNUmakefile.deps),GNUmakefile.deps) -include GNUmakefile.deps endif # Dependencies -# Run rdrand-nasm.sh to create the object files -ifeq ($(USE_NASM),1) -rdrand.o: rdrand.h rdrand.cpp rdrand.s - $(CXX) $(strip $(CXXFLAGS) -DNASM_RDRAND_ASM_AVAILABLE=1 -DNASM_RDSEED_ASM_AVAILABLE=1 -c rdrand.cpp) -rdrand-%.o: - ./rdrand-nasm.sh -endif - # IBM XLC -O3 optimization bug ifeq ($(XLC_COMPILER),1) sm3.o : sm3.cpp diff --git a/GNUmakefile-cross b/GNUmakefile-cross index d604abcd..85beaff9 100755 --- a/GNUmakefile-cross +++ b/GNUmakefile-cross @@ -1,4 +1,6 @@ # https://www.gnu.org/software/make/manual/make.html#Makefile-Conventions +# and https://www.gnu.org/prep/standards/standards.html + SHELL = /bin/sh # Default CXXFLAGS if none were provided @@ -10,11 +12,16 @@ RANLIB ?= ranlib CP ?= cp MV ?= mv CHMOD ?= chmod -MKDIR ?= mkdir +MKDIR ?= mkdir -p EGREP ?= egrep + LN ?= ln -sf LDCONF ?= /sbin/ldconfig -n +INSTALL = install +INSTALL_PROGRAM = $(INSTALL) +INSTALL_DATA = $(INSTALL) -m 644 + # Attempt to determine host machine, fallback to "this" machine. # The host machine is the one the package runs on. Most people # call this the "target", but not Autotools. @@ -382,29 +389,27 @@ distclean: clean .PHONY: install install: - @-$(MKDIR) -p $(DESTDIR)$(INCLUDEDIR)/cryptopp - $(CP) *.h $(DESTDIR)$(INCLUDEDIR)/cryptopp - -$(CHMOD) 755 $(DESTDIR)$(INCLUDEDIR)/cryptopp - -$(CHMOD) 644 $(DESTDIR)$(INCLUDEDIR)/cryptopp/*.h + @-$(MKDIR) $(DESTDIR)$(INCLUDEDIR)/cryptopp + $(INSTALL_DATA) *.h $(DESTDIR)$(INCLUDEDIR)/cryptopp ifneq ($(wildcard cryptest.exe),) - @-$(MKDIR) -p $(DESTDIR)$(BINDIR) - $(CP) cryptest.exe $(DESTDIR)$(BINDIR) - -$(CHMOD) 755 $(DESTDIR)$(BINDIR)/cryptest.exe + @-$(MKDIR) $(DESTDIR)$(BINDIR) + $(INSTALL_PROGRAM) cryptest.exe $(DESTDIR)$(BINDIR) + @-$(MKDIR) $(DESTDIR)$(DATADIR)/cryptopp/TestData + @-$(MKDIR) $(DESTDIR)$(DATADIR)/cryptopp/TestVectors + $(INSTALL_DATA) TestData/*.dat $(DESTDIR)$(DATADIR)/cryptopp/TestData + $(INSTALL_DATA) TestVectors/*.txt $(DESTDIR)$(DATADIR)/cryptopp/TestVectors endif ifneq ($(wildcard libcryptopp.a),) - @-$(MKDIR) -p $(DESTDIR)$(LIBDIR) - $(CP) libcryptopp.a $(DESTDIR)$(LIBDIR) - -$(CHMOD) 644 $(DESTDIR)$(LIBDIR)/libcryptopp.a + @-$(MKDIR) $(DESTDIR)$(LIBDIR) + $(INSTALL_DATA) libcryptopp.a $(DESTDIR)$(LIBDIR) endif ifneq ($(wildcard libcryptopp.dylib),) - @-$(MKDIR) -p $(DESTDIR)$(LIBDIR) - $(CP) libcryptopp.dylib $(DESTDIR)$(LIBDIR) - -$(CHMOD) 755 $(DESTDIR)$(LIBDIR)/libcryptopp.dylib + @-$(MKDIR) $(DESTDIR)$(LIBDIR) + $(INSTALL_DATA) libcryptopp.dylib $(DESTDIR)$(LIBDIR) endif ifneq ($(wildcard libcryptopp.so$(SOLIB_VERSION_SUFFIX)),) - @-$(MKDIR) -p $(DESTDIR)$(LIBDIR) - $(CP) libcryptopp.so$(SOLIB_VERSION_SUFFIX) $(DESTDIR)$(LIBDIR) - -$(CHMOD) 755 $(DESTDIR)$(LIBDIR)/libcryptopp.so$(SOLIB_VERSION_SUFFIX) + @-$(MKDIR) $(DESTDIR)$(LIBDIR) + $(INSTALL_DATA) libcryptopp.so$(SOLIB_VERSION_SUFFIX) $(DESTDIR)$(LIBDIR) ifeq ($(HAS_SOLIB_VERSION),1) -$(LN) libcryptopp.so$(SOLIB_VERSION_SUFFIX) $(DESTDIR)$(LIBDIR)/libcryptopp.so $(LDCONF) $(DESTDIR)$(LIBDIR)