Files
amiga-rhash/Makefile
Carsten Larsen afd26249c2 Release 1.34
2017-04-12 00:33:28 +02:00

335 lines
12 KiB
Makefile

# Sample usage:
# compile with debug info: make CFLAGS=-g
# compile for pentiumpro: make CFLAGS="-O2 -DNDEBUG -march=i586 -mcpu=pentiumpro -fomit-frame-pointer"
# create rpm with statically linked program: make rpm ADDLDFLAGS="-static -s -Wl,--gc-sections"
VERSION = 1.3.4
PREFIX ?= /usr/local
CC ?= gcc
# using OPTFLAGS/OPTLDFLAGS for compatibilty with old scripts using this makefile
OPTFLAGS = -O2 -DNDEBUG -fomit-frame-pointer -ffunction-sections -fdata-sections
#OPTLDFLAGS = -mcrt=clib2 -lm -lc
OPTLDFLAGS = -noixemul -lgcc
CFLAGS = $(OPTFLAGS)
LDFLAGS = $(OPTLDFLAGS)
ADDCFLAGS =
ADDLDFLAGS =
ALLCFLAGS = -pipe $(CFLAGS) $(ADDCFLAGS) \
-Wall -W -Wstrict-prototypes -Wnested-externs -Winline -Wpointer-arith \
-Wbad-function-cast -Wmissing-prototypes -Wmissing-declarations
LDLIBRHASH = -Llibrhash -lrhash
ALLLDFLAGS = $(LDLIBRHASH) $(LDFLAGS) $(ADDLDFLAGS)
SHAREDLIB = librhash/librhash.so.0
SHRDLFLAGS = $(LDFLAGS) $(ADDLDFLAGS)
HEADERS = calc_sums.h hash_print.h common_func.h hash_update.h file_mask.h file_set.h find_file.h hash_check.h output.h parse_cmdline.h rhash_main.h win_utils.h version.h
SOURCES = calc_sums.c hash_print.c common_func.c hash_update.c file_mask.c file_set.c find_file.c hash_check.c output.c parse_cmdline.c rhash_main.c win_utils.c
OBJECTS = calc_sums.o hash_print.o common_func.o hash_update.o file_mask.o file_set.o find_file.o hash_check.o output.o parse_cmdline.o rhash_main.o win_utils.o
OUTDIR =
PROGNAME = rhash
TARGET = $(OUTDIR)$(PROGNAME)
SHARED_TRG = $(TARGET)_shared
SYMLINKS = sfv-hash tiger-hash tth-hash whirlpool-hash has160-hash gost-hash ed2k-link magnet-link
SPECFILE = dist/rhash.spec
LIN_DIST_FILES = Makefile ChangeLog INSTALL COPYING README \
$(SPECFILE) $(SPECFILE).in $(SOURCES) $(HEADERS) \
tests/test_rhash.sh tests/test1K.data \
dist/rhash.1 dist/rhash.1.win.sed dist/rhash.1.html
WIN_DIST_FILES = dist/MD5.bat dist/magnet.bat dist/rhashrc.sample
WIN_SRC_FILES = win32/dirent.h win32/stdint.h win32/unistd.h win32/platform-dependent.h \
win32/vc-2010/rhash.vcxproj
LIBRHASH_FILES = librhash/algorithms.c librhash/algorithms.h \
librhash/byte_order.c librhash/byte_order.h librhash/plug_openssl.c librhash/plug_openssl.h \
librhash/rhash.c librhash/rhash.h librhash/rhash_torrent.c librhash/rhash_torrent.h \
librhash/rhash_timing.c librhash/rhash_timing.h \
librhash/aich.c librhash/aich.h librhash/crc32.c librhash/crc32.h \
librhash/ed2k.c librhash/ed2k.h librhash/edonr.c librhash/edonr.h \
librhash/gost.c librhash/gost.h librhash/has160.c librhash/has160.h \
librhash/hex.c librhash/hex.h librhash/md4.c librhash/md4.h \
librhash/md5.c librhash/md5.h librhash/ripemd-160.c librhash/ripemd-160.h \
librhash/sha1.c librhash/sha1.h librhash/sha3.c librhash/sha3.h \
librhash/sha256.c librhash/sha256.h librhash/sha512.c librhash/sha512.h \
librhash/snefru.c librhash/snefru.h librhash/tiger.c librhash/tiger.h \
librhash/tiger_sbox.c librhash/tth.c librhash/tth.h librhash/whirlpool.c \
librhash/whirlpool.h librhash/whirlpool_sbox.c librhash/test_hashes.c \
librhash/test_hashes.h librhash/torrent.h librhash/torrent.c librhash/ustd.h \
librhash/util.c librhash/util.h librhash/config.h librhash/Makefile
I18N_FILES = po/de.po po/en_AU.po po/es.po po/gl.po po/it.po po/ru.po
DIST_FILES = $(LIN_DIST_FILES) $(LIBRHASH_FILES) $(WIN_DIST_FILES) $(WIN_SRC_FILES) $(I18N_FILES)
DESTDIR =
BINDIR = $(PREFIX)/bin
MANDIR = $(PREFIX)/share/man
LOCALEDIR = $(PREFIX)/share/locale
RPMTOP = rpms
RPMDIRS = SOURCES SPECS BUILD SRPMS RPMS
LIBRHASH = librhash/librhash.a
# Set variables according to GNU coding standard
INSTALL = install
INSTALL_PROGRAM = $(INSTALL) -m 755
INSTALL_DATA = $(INSTALL) -m 644
all: $(TARGET)
build-shared: $(SHARED_TRG)
lib-shared: $(SHAREDLIB)
lib-static: $(LIBRHASH)
install: all install-binary install-data install-symlinks
install-shared: $(SHARED_TRG) install-shared-binary install-data install-symlinks
install-data: install-man install-conf
uninstall: uninstall-binary uninstall-data uninstall-symlinks
# creating archives
WIN_SUFFIX = win32
ARCHIVE_BZIP = rhash-$(VERSION)-src.tar.bz2
ARCHIVE_GZIP = rhash-$(VERSION)-src.tar.gz
ARCHIVE_FULL = rhash-$(VERSION)-full-src.tar.gz
ARCHIVE_DEB_GZ = rhash_$(VERSION).orig.tar.gz
ARCHIVE_7Z = rhash-$(VERSION)-src.tar.7z
ARCHIVE_ZIP = rhash-$(VERSION)-$(WIN_SUFFIX).zip
WIN_ZIP_DIR = RHash-$(VERSION)-$(WIN_SUFFIX)
dist: gzip gzip-bindings
dist-full: gzip-full
win-dist: zip
zip : $(ARCHIVE_ZIP)
dgz: check $(ARCHIVE_DEB_GZ)
mkdir-bin:
$(INSTALL) -d $(DESTDIR)$(BINDIR)
install-binary: mkdir-bin
$(INSTALL_PROGRAM) $(TARGET) $(DESTDIR)$(BINDIR)
# install dynamically linked binary
install-shared-binary: mkdir-bin
$(INSTALL_PROGRAM) $(SHARED_TRG) $(DESTDIR)$(BINDIR)/rhash
install-man:
$(INSTALL) -d $(DESTDIR)$(MANDIR)/man1
$(INSTALL_DATA) dist/rhash.1 $(DESTDIR)$(MANDIR)/man1/rhash.1
install-conf:
$(INSTALL) -d $(DESTDIR)/etc
tr -d \\r < dist/rhashrc.sample > rc.tmp && $(INSTALL_DATA) rc.tmp $(DESTDIR)/etc/rhashrc
rm -f rc.tmp
# dependencies should be properly set, otherwise 'make -j<n>' can fail
install-symlinks: mkdir-bin install-man
for f in $(SYMLINKS); do ln -fs rhash $(DESTDIR)$(BINDIR)/$$f; done
cd $(DESTDIR)$(MANDIR)/man1 && for f in $(SYMLINKS); do ln -fs rhash.1* $$f.1; done
uninstall-binary:
rm -f $(DESTDIR)$(BINDIR)/$(PROGNAME)
uninstall-data:
rm -f $(DESTDIR)$(MANDIR)/man1/rhash.1
uninstall-symlinks:
for f in $(SYMLINKS); do rm -f $(DESTDIR)$(BINDIR)/$$f; done
install-lib-static: $(LIBRHASH)
+make -C librhash install-lib-static
install-lib-shared: $(SHAREDLIB)
+make -C librhash install-lib-shared
$(SHAREDLIB):
+make -C librhash lib-shared
$(LIBRHASH): $(LIBRHASH_FILES)
+make -C librhash lib-static
test-static-lib: $(LIBRHASH)
+make -C librhash test-static
test-shared-lib: $(SHAREDLIB)
+make -C librhash test-shared
test-libs: $(LIBRHASH) $(SHAREDLIB)
+make -C librhash test-static test-shared
test: test-static
test-static: $(TARGET)
chmod +x tests/test_rhash.sh
tests/test_rhash.sh
test-shared: $(SHARED_TRG) test-shared-lib
chmod +x tests/test_rhash.sh
LD_LIBRARY_PATH=../librhash:$(LD_LIBRARY_PATH) tests/test_rhash.sh ./$(SHARED_TRG)
version.h: Makefile
echo "#define VERSION \"$(VERSION)\"" > version.h
# check version
check: version.h
grep -q '\* === Version $(VERSION) ===' ChangeLog
grep -q '^#define VERSION "$(VERSION)"' version.h
[ ! -d bindings -o bindings/version.properties -nt Makefile ] || \
echo "version=$(VERSION)" > bindings/version.properties
[ -s dist/rhash.1.html ]
$(TARGET): $(OBJECTS) $(LIBRHASH)
$(CC) $(OBJECTS) -o $@ $(ALLLDFLAGS)
$(SHARED_TRG): $(OBJECTS) $(SHAREDLIB)
$(CC) $(OBJECTS) $(SHRDLFLAGS) -o $(SHARED_TRG) $(SHAREDLIB)
# NOTE: dependences were generated by 'gcc -Ilibrhash -MM *.c'
# we are using plain old makefile style to support BSD make
calc_sums.o: calc_sums.c common_func.h librhash/rhash.h \
librhash/rhash_torrent.h parse_cmdline.h rhash_main.h hash_print.h \
output.h win_utils.h calc_sums.h hash_check.h
$(CC) -c $(ALLCFLAGS) $< -o $@
common_func.o: common_func.c common_func.h win_utils.h parse_cmdline.h \
version.h
$(CC) -c $(ALLCFLAGS) $< -o $@
file_mask.o: file_mask.c common_func.h file_mask.h
$(CC) -c $(ALLCFLAGS) $< -o $@
file_set.o: file_set.c librhash/rhash.h common_func.h hash_print.h \
parse_cmdline.h rhash_main.h output.h file_set.h calc_sums.h \
hash_check.h
$(CC) -c $(ALLCFLAGS) $< -o $@
find_file.o: find_file.c common_func.h output.h win_utils.h find_file.h
$(CC) -c $(ALLCFLAGS) $< -o $@
hash_check.o: hash_check.c librhash/rhash.h output.h common_func.h \
parse_cmdline.h hash_print.h hash_check.h
$(CC) -c $(ALLCFLAGS) $< -o $@
hash_print.o: hash_print.c common_func.h librhash/rhash.h calc_sums.h \
hash_check.h parse_cmdline.h win_utils.h hash_print.h
$(CC) -c $(ALLCFLAGS) $< -o $@
hash_update.o: hash_update.c common_func.h win_utils.h parse_cmdline.h \
output.h rhash_main.h file_set.h calc_sums.h hash_check.h file_mask.h \
hash_print.h hash_update.h
$(CC) -c $(ALLCFLAGS) $< -o $@
output.o: output.c common_func.h librhash/rhash.h calc_sums.h \
hash_check.h parse_cmdline.h rhash_main.h win_utils.h output.h
$(CC) -c $(ALLCFLAGS) $< -o $@
parse_cmdline.o: parse_cmdline.c common_func.h librhash/rhash.h \
win_utils.h file_mask.h find_file.h hash_print.h output.h rhash_main.h \
parse_cmdline.h
$(CC) -c $(ALLCFLAGS) $< -o $@
rhash_main.o: rhash_main.c common_func.h librhash/rhash.h win_utils.h \
find_file.h calc_sums.h hash_check.h hash_update.h file_mask.h \
hash_print.h parse_cmdline.h output.h rhash_main.h
$(CC) -c $(ALLCFLAGS) $< -o $@
win_utils.o: win_utils.c common_func.h parse_cmdline.h rhash_main.h \
win_utils.h
$(CC) -c $(ALLCFLAGS) $< -o $@
dist/rhash.1.win.html: dist/rhash.1 dist/rhash.1.win.sed
sed -f dist/rhash.1.win.sed dist/rhash.1 | rman -fHTML -roff | \
sed -e '/<BODY/s/\(bgcolor=\)"[^"]*"/\1"white"/i' > dist/rhash.1.win.html
# verify the result
grep -q "utf8" dist/rhash.1.win.html
grep -q "APPDATA" dist/rhash.1.win.html
dist/rhash.1.html: dist/rhash.1
-which rman 2>/dev/null && (rman -fHTML -roff dist/rhash.1 | sed -e '/<BODY/s/\(bgcolor=\)"[^"]*"/\1"white"/i' > $@)
dist/rhash.1.txt: dist/rhash.1
-which groff &>/dev/null && (groff -t -e -mandoc -Tascii dist/rhash.1 | sed -e 's/.\[[0-9]*m//g' > $@)
cpp-doc:
cppdoc_cmd -title=RHash -company=Animegorodok -classdir=classdoc -module="cppdoc-standard" -overwrite -extensions="c,h" -languages="c=cpp,h=cpp" -generate-deprecations-list=false $(SOURCES) $(HEADERS) ./Documentation/CppDoc/index.html
permissions:
find . dist librhash po win32 win32/vc-2010 -maxdepth 1 -type f -exec chmod -x '{}' \;
chmod +x tests/test_rhash.sh
clean-bindings:
+make -C bindings distclean
copy-dist: $(DIST_FILES) permissions
rm -rf $(PROGNAME)-$(VERSION)
mkdir $(PROGNAME)-$(VERSION)
cp -rl --parents $(DIST_FILES) $(PROGNAME)-$(VERSION)/
gzip: check
+make copy-dist
tar czf $(ARCHIVE_GZIP) $(PROGNAME)-$(VERSION)/
rm -rf $(PROGNAME)-$(VERSION)
gzip-bindings:
+make -C bindings gzip ARCHIVE_GZIP=../rhash-bindings-$(VERSION)-src.tar.gz
gzip-full: check clean-bindings
+make copy-dist
+make -C bindings copy-dist COPYDIR=../$(PROGNAME)-$(VERSION)/bindings
tar czf $(ARCHIVE_FULL) $(PROGNAME)-$(VERSION)/
rm -rf $(PROGNAME)-$(VERSION)
bzip: check
+make copy-dist
tar cjf $(ARCHIVE_BZIP) $(PROGNAME)-$(VERSION)/
rm -rf $(PROGNAME)-$(VERSION)
7z: check
+make copy-dist
tar cf - $(PROGNAME)-$(VERSION)/ | 7zr a -si $(ARCHIVE_7Z)
rm -rf $(PROGNAME)-$(VERSION)
$(ARCHIVE_ZIP): $(WIN_DIST_FILES) dist/rhash.1.win.html
[ -s dist/rhash.1.win.html -a -x $(TARGET) ]
-rm -rf $(WIN_ZIP_DIR)
mkdir $(WIN_ZIP_DIR)
cp $(TARGET).exe ChangeLog $(WIN_DIST_FILES) $(WIN_ZIP_DIR)/
cp dist/rhash.1.win.html $(WIN_ZIP_DIR)/rhash-doc.html
# -[ -f $(OUTDIR)libeay32.dll ] && cp $(OUTDIR)libeay32.dll $(WIN_ZIP_DIR)/
zip -9r $(ARCHIVE_ZIP) $(WIN_ZIP_DIR)
rm -rf $(WIN_ZIP_DIR)
$(ARCHIVE_DEB_GZ) : $(DIST_FILES)
+make $(ARCHIVE_GZIP)
mv -f $(ARCHIVE_GZIP) $(ARCHIVE_DEB_GZ)
# rpm packaging
$(SPECFILE): $(SPECFILE).in Makefile
sed -e 's/@VERSION@/$(VERSION)/' $(SPECFILE).in > $(SPECFILE)
rpm: gzip
-for i in $(RPMDIRS); do mkdir -p $(RPMTOP)/$$i; done
cp -f $(ARCHIVE_GZIP) $(RPMTOP)/SOURCES
rpmbuild -ba --clean --define "_topdir `pwd`/$(RPMTOP)" $(SPECFILE)
mv -f `find $(RPMTOP) -name "*rhash*-$(VERSION)*.rpm"` .
rm -rf $(RPMTOP)
distclean: clean
clean:
+make -C librhash clean
rm -f *.o $(SHARED_TRG) $(TARGET)
rm -f po/*.gmo po/*.po~
update-po:
xgettext *.c -k_ -cTRANSLATORS -o po/rhash.pot \
--msgid-bugs-address='Aleksey <rhash.admin@gmail.com>' --package-name='RHash'
for f in po/*.po; do \
msgmerge -U $$f po/rhash.pot; \
done
compile-gmo:
for f in po/*.po; do \
g=`basename $$f .po`; \
msgfmt $$f -o po/$$g.gmo; \
done
install-gmo: compile-gmo
for f in po/*.gmo; do \
l=`basename $$f .gmo`; \
$(INSTALL) -d $(DESTDIR)$(LOCALEDIR)/$$l/LC_MESSAGES; \
$(INSTALL_DATA) -T $$f $(DESTDIR)$(LOCALEDIR)/$$l/LC_MESSAGES/rhash.mo; \
done
.PHONY: all install uninstall lib-shared lib-static dist dist-full zip \
test test-static test-shared test-libs test-static-lib test-shared-lib \
check copy-dist gzip gzip-bindings gzip-full bzip 7z zip clean clean-bindings \
update-po compile-gmo install-gmo